# Path: netjsonconfig/schema.py
# DEFAULT_FILE_MODE = '0644'
# X509_FILE_MODE = '0600'
# MAC_PATTERN = '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})'
# MAC_PATTERN_BLANK = '^({0}|)$'.format(MAC_PATTERN)
# 
# Path: netjsonconfig/utils.py
# def merge_config(template, config, list_identifiers=None):
#     """
#     Merges ``config`` on top of ``template``.
# 
#     Conflicting keys are handled in the following way:
# 
#     * simple values (eg: ``str``, ``int``, ``float``, ecc) in ``config`` will
#       overwrite the ones in ``template``
#     * values of type ``list`` in both ``config`` and ``template`` will be
#       merged using to the ``merge_list`` function
#     * values of type ``dict`` will be merged recursively
# 
#     :param template: template ``dict``
#     :param config: config ``dict``
#     :param list_identifiers: ``list`` or ``None``
#     :returns: merged ``dict``
#     """
#     result = deepcopy(template)
#     for key, value in config.items():
#         if isinstance(value, dict):
#             node = result.get(key, OrderedDict())
#             result[key] = merge_config(node, value)
#         elif isinstance(value, list) and isinstance(result.get(key), list):
#             result[key] = merge_list(result[key], value, list_identifiers)
#         else:
#             result[key] = value
#     return result
# 
# Path: netjsonconfig/backends/openvpn/schema.py

# 
# Path: netjsonconfig/backends/openwrt/timezones.py



from ...schema import schema as default_schema
from ...utils import merge_config
from ..openvpn.schema import base_openvpn_schema
from ..wireguard.schema import base_wireguard_schema
from .timezones import timezones
                            "type": "integer",
                            "title": "keep alive",
                            "description": (
                                "Number of second between keepalive "
                                "messages, 0 means disabled"
                            ),
                            "default": 0,
                            "propertyOrder": 6,
                        },
                        "route_allowed_ips": {
                            "type": "boolean",
                            "format": "checkbox",
                            "title": "route allowed IPs",
                            "description": (
                                "Automatically create a route for "
                                "each Allowed IPs for this peer"
                            ),
                            "default": False,
                            "propertyOrder": 7,
                        },
                    },
                },
            },
        },
    },
)

# add OpenVPN schema
schema = merge_config(schema, base_openvpn_schema)
# OpenVPN customizations for OpenWRT

# Path: netjsonconfig/schema.py
# DEFAULT_FILE_MODE = '0644'
# X509_FILE_MODE = '0600'
# MAC_PATTERN = '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})'
# MAC_PATTERN_BLANK = '^({0}|)$'.format(MAC_PATTERN)
# 
# Path: netjsonconfig/utils.py
# def merge_config(template, config, list_identifiers=None):
#     """
#     Merges ``config`` on top of ``template``.
# 
#     Conflicting keys are handled in the following way:
# 
#     * simple values (eg: ``str``, ``int``, ``float``, ecc) in ``config`` will
#       overwrite the ones in ``template``
#     * values of type ``list`` in both ``config`` and ``template`` will be
#       merged using to the ``merge_list`` function
#     * values of type ``dict`` will be merged recursively
# 
#     :param template: template ``dict``
#     :param config: config ``dict``
#     :param list_identifiers: ``list`` or ``None``
#     :returns: merged ``dict``
#     """
#     result = deepcopy(template)
#     for key, value in config.items():
#         if isinstance(value, dict):
#             node = result.get(key, OrderedDict())
#             result[key] = merge_config(node, value)
#         elif isinstance(value, list) and isinstance(result.get(key), list):
#             result[key] = merge_list(result[key], value, list_identifiers)
#         else:
#             result[key] = value
#     return result
# 
# Path: netjsonconfig/backends/openvpn/schema.py

# 
# Path: netjsonconfig/backends/openwrt/timezones.py



# Path: netjsonconfig/backends/openwrt/schema.py
from ...schema import schema as default_schema
from ...utils import merge_config
from ..openvpn.schema import base_openvpn_schema
from ..wireguard.schema import base_wireguard_schema
from .timezones import timezones

                            "type": "integer",
                            "title": "keep alive",
                            "description": (
                                "Number of second between keepalive "
                                "messages, 0 means disabled"
                            ),
                            "default": 0,
                            "propertyOrder": 6,
                        },
                        "route_allowed_ips": {
                            "type": "boolean",
                            "format": "checkbox",
                            "title": "route allowed IPs",
                            "description": (
                                "Automatically create a route for "
                                "each Allowed IPs for this peer"
                            ),
                            "default": False,
                            "propertyOrder": 7,
                        },
                    },
                },
            },
        },
    },
)

# add OpenVPN schema
schema = merge_config(schema, base_openvpn_schema)
# OpenVPN customizations for OpenWRT

schema = merge_config(