{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "exception": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "paths": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "description": "list of path prefixes that can be excluded",
          "items": {
            "type": "string",
            "pattern": "^[/].*"
          }
        },
        "rule_ids": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "description": "list of rule ids that can be excluded",
          "items": {
            "type": "string"
          }
        },
        "v4_ips": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "description": "list of IPv4 CIDR or IPs that can be excluded",
          "items": {
            "type": "string"
          }
        },
        "v6_ips": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "description": "list of IPv4 CIDR or IPs that can be excluded",
          "items": {
            "type": "string"
          }
        },
        "asn": {
          "type": "array",
          "minItems": 1,
          "maxItems": 50,
          "description": "list of Autonomous System (AS) numbers that can be excluded",
          "items": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "string",
                "pattern": "^[1-9]\\d*$",
                "description": "represented as only as an integer without AS prefix"
              }
            ]
          }
        }
      }
    },
    "match_value_string": {
      "anyOf": [
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 100,
          "items": {
            "type": "string"
          }
        },
        {
          "type": "string"
        },
        {
          "type": "string",
          "pattern": "^\\{\\{list\\..+\\}\\}$",
          "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
        }
      ]
    },
    "match_value_paths": {
      "anyOf": [
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 100,
          "items": {
            "if": {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$"
            },
            "then": true,
            "else": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "type": "string",
              "pattern": "^[/].*"
            }
          }
        },
        {
          "type": "string",
          "pattern": "^[/].*"
        },
        {
          "type": "string",
          "pattern": "^\\{\\{list\\..+\\}\\}$",
          "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
        }
      ]
    },
    "match_value_header": {
      "if": {
        "type": "string",
        "pattern": "^\\{\\{list\\..+\\}\\}$"
      },
      "then": true,
      "else": {
        "type": "array",
        "minItems": 1,
        "maxItems": 100,
        "items": {
          "type": "string"
        }
      }
    },
    "match_condition_request": {
      "definitions": {
        "match_value_string": {
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "type": "string"
              }
            },
            {
              "type": "string"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "match_value_paths": {
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "if": {
                  "type": "string",
                  "pattern": "^\\{\\{list\\..+\\}\\}$"
                },
                "then": true,
                "else": {
                  "$schema": "http://json-schema.org/draft-07/schema#",
                  "type": "string",
                  "pattern": "^[/].*"
                }
              }
            },
            {
              "type": "string",
              "pattern": "^[/].*"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "match_value_header": {
          "if": {
            "type": "string",
            "pattern": "^\\{\\{list\\..+\\}\\}$"
          },
          "then": true,
          "else": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "type": "object",
      "$id": "#match_condition_request",
      "additionalProperties": false,
      "properties": {
        "reqheader_wildcard_values": {
          "description": "matches map of request headers with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_wildcard_values": {
          "description": "does not match map of request headers with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader_startswith_values": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_startswith_values": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader_full_values": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_full_values": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader_values": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_values": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_wildcard_values": {
          "description": "matches map of query values with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_wildcard_values": {
          "description": "does not match map of query values with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query": {
          "description": "matches map of query param values",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query": {
          "description": "does not match map of query param values",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_startswith_values": {
          "description": "matches map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_startswith_values": {
          "description": "does not match map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_full_values": {
          "description": "matches map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_full_values": {
          "description": "does not match map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_values": {
          "description": "matches map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_values": {
          "description": "does not match map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_exists": {
          "description": "matches map of query param keys",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9._-]+$"
              }
            },
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9._-]+$"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "!query_exists": {
          "description": "does not match map of query param keys",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9._-]+$"
              }
            },
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9._-]+$"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "paths": {
          "$ref": "#/definitions/match_value_paths",
          "description": "matches list of paths"
        },
        "!paths": {
          "$ref": "#/definitions/match_value_paths",
          "description": "does not match list of paths"
        },
        "paths_startswith": {
          "$ref": "#/definitions/match_value_paths",
          "description": "matches list of paths that start with a value"
        },
        "!paths_startswith": {
          "$ref": "#/definitions/match_value_paths",
          "description": "does not match list of paths that start with a value"
        },
        "paths_full": {
          "$ref": "#/definitions/match_value_paths",
          "description": "matches list of paths for an exact match"
        },
        "!paths_full": {
          "$ref": "#/definitions/match_value_paths",
          "description": "does not match list of paths for an exact match"
        },
        "paths_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of paths with wildcards"
        },
        "!paths_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of paths with wildcards"
        },
        "geo_country": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of country codes"
        },
        "!geo_country": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of country codes"
        },
        "geo": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of country codes"
        },
        "!geo": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of country codes"
        },
        "geo_continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of continent codes"
        },
        "!geo_continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of continent codes"
        },
        "continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of continent codes"
        },
        "!continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of continent codes"
        },
        "geo_region": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of region codes"
        },
        "!geo_region": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of region codes"
        },
        "region": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of region codes"
        },
        "!region": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of region codes"
        },
        "geo_city": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of city names"
        },
        "!geo_city": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of city names"
        },
        "city": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of city names"
        },
        "!city": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of city names"
        },
        "ipv4": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of ipv4 cidrs or IPs"
        },
        "!ipv4": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of ipv4 cidrs or IPs"
        },
        "ipv6": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of ipv6 cidrs or IPs"
        },
        "!ipv6": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of ipv6 cidrs or IPs"
        },
        "cookie_name_startswith": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of prefixes that match the starting name of a cookie"
        },
        "!cookie_name_startswith": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of prefixes that match the starting name of a cookie"
        },
        "cookie_name_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of cookie names which supports wildcards"
        },
        "!cookie_name_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of cookie names which supports wildcards"
        },
        "cookie_name": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of exact cookie names"
        },
        "!cookie_name": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of exact cookie names"
        },
        "protocol": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of protocol/schemes"
        },
        "!protocol": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of protocol/schemes"
        },
        "scheme": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of protocol/schemes"
        },
        "!scheme": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of protocol/schemes"
        },
        "extension": {
          "description": "matches list of file extensions",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "boolean",
                    "description": "checks for the presence of a file extension"
                  },
                  {
                    "type": "string",
                    "maxLength": 10
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "boolean",
                  "description": "checks for the presence of a file extension"
                },
                {
                  "type": "string",
                  "maxLength": 10
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "!extension": {
          "description": "does not match list of file extensions",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "boolean",
                    "description": "checks for the presence of a file extension"
                  },
                  {
                    "type": "string",
                    "maxLength": 10
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "boolean",
                  "description": "checks for the presence of a file extension"
                },
                {
                  "type": "string",
                  "maxLength": 10
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "method": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of http methods"
        },
        "!method": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of http methods"
        },
        "asn": {
          "description": "matches list of Autonomous System (AS) numbers",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1
                  },
                  {
                    "type": "string",
                    "pattern": "^[1-9]\\d*$",
                    "description": "represented as only as an integer without AS prefix"
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "pattern": "^[1-9]\\d*$",
                  "description": "represented as only as an integer without AS prefix"
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "!asn": {
          "description": "does not match list of Autonomous System (AS) numbers",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1
                  },
                  {
                    "type": "string",
                    "pattern": "^[1-9]\\d*$",
                    "description": "represented as only as an integer without AS prefix"
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "pattern": "^[1-9]\\d*$",
                  "description": "represented as only as an integer without AS prefix"
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "asn_equals": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of as numbers"
        },
        "!asn_equals": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of as numbers"
        }
      }
    },
    "match_condition_response": {
      "definitions": {
        "match_value_string": {
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "type": "string"
              }
            },
            {
              "type": "string"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "match_value_paths": {
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "if": {
                  "type": "string",
                  "pattern": "^\\{\\{list\\..+\\}\\}$"
                },
                "then": true,
                "else": {
                  "$schema": "http://json-schema.org/draft-07/schema#",
                  "type": "string",
                  "pattern": "^[/].*"
                }
              }
            },
            {
              "type": "string",
              "pattern": "^[/].*"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "match_value_header": {
          "if": {
            "type": "string",
            "pattern": "^\\{\\{list\\..+\\}\\}$"
          },
          "then": true,
          "else": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "type": "string"
            }
          }
        }
      },
      "type": "object",
      "$id": "#match_condition_response",
      "additionalProperties": false,
      "properties": {
        "reqheader_wildcard_values": {
          "description": "matches map of request headers with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_wildcard_values": {
          "description": "does not match map of request headers with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader_startswith_values": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_startswith_values": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader_full_values": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_full_values": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "reqheader_values": {
          "description": "matches map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!reqheader_values": {
          "description": "does not match map of request headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_wildcard_values": {
          "description": "matches map of query values with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_wildcard_values": {
          "description": "does not match map of query values with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query": {
          "description": "matches map of query param values",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query": {
          "description": "does not match map of query param values",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_startswith_values": {
          "description": "matches map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_startswith_values": {
          "description": "does not match map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_full_values": {
          "description": "matches map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_full_values": {
          "description": "does not match map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_values": {
          "description": "matches map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!query_values": {
          "description": "does not match map of query params",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "query_exists": {
          "description": "matches map of query param keys",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9._-]+$"
              }
            },
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9._-]+$"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "!query_exists": {
          "description": "does not match map of query param keys",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "type": "string",
                "pattern": "^[a-zA-Z0-9._-]+$"
              }
            },
            {
              "type": "string",
              "pattern": "^[a-zA-Z0-9._-]+$"
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "paths": {
          "$ref": "#/definitions/match_value_paths",
          "description": "matches list of paths"
        },
        "!paths": {
          "$ref": "#/definitions/match_value_paths",
          "description": "does not match list of paths"
        },
        "paths_startswith": {
          "$ref": "#/definitions/match_value_paths",
          "description": "matches list of paths that start with a value"
        },
        "!paths_startswith": {
          "$ref": "#/definitions/match_value_paths",
          "description": "does not match list of paths that start with a value"
        },
        "paths_full": {
          "$ref": "#/definitions/match_value_paths",
          "description": "matches list of paths for an exact match"
        },
        "!paths_full": {
          "$ref": "#/definitions/match_value_paths",
          "description": "does not match list of paths for an exact match"
        },
        "paths_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of paths with wildcards"
        },
        "!paths_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of paths with wildcards"
        },
        "geo_country": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of country codes"
        },
        "!geo_country": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of country codes"
        },
        "geo": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of country codes"
        },
        "!geo": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of country codes"
        },
        "geo_continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of continent codes"
        },
        "!geo_continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of continent codes"
        },
        "continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of continent codes"
        },
        "!continent": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of continent codes"
        },
        "geo_region": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of region codes"
        },
        "!geo_region": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of region codes"
        },
        "region": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of region codes"
        },
        "!region": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of region codes"
        },
        "geo_city": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of city names"
        },
        "!geo_city": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of city names"
        },
        "city": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of city names"
        },
        "!city": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of city names"
        },
        "ipv4": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of ipv4 cidrs or IPs"
        },
        "!ipv4": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of ipv4 cidrs or IPs"
        },
        "ipv6": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of ipv6 cidrs or IPs"
        },
        "!ipv6": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of ipv6 cidrs or IPs"
        },
        "cookie_name_startswith": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of prefixes that match the starting name of a cookie"
        },
        "!cookie_name_startswith": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of prefixes that match the starting name of a cookie"
        },
        "cookie_name_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of cookie names which supports wildcards"
        },
        "!cookie_name_wildcard": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of cookie names which supports wildcards"
        },
        "cookie_name": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of exact cookie names"
        },
        "!cookie_name": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of exact cookie names"
        },
        "protocol": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of protocol/schemes"
        },
        "!protocol": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of protocol/schemes"
        },
        "scheme": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of protocol/schemes"
        },
        "!scheme": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of protocol/schemes"
        },
        "extension": {
          "description": "matches list of file extensions",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "boolean",
                    "description": "checks for the presence of a file extension"
                  },
                  {
                    "type": "string",
                    "maxLength": 10
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "boolean",
                  "description": "checks for the presence of a file extension"
                },
                {
                  "type": "string",
                  "maxLength": 10
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "!extension": {
          "description": "does not match list of file extensions",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "boolean",
                    "description": "checks for the presence of a file extension"
                  },
                  {
                    "type": "string",
                    "maxLength": 10
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "boolean",
                  "description": "checks for the presence of a file extension"
                },
                {
                  "type": "string",
                  "maxLength": 10
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "method": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of http methods"
        },
        "!method": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of http methods"
        },
        "asn": {
          "description": "matches list of Autonomous System (AS) numbers",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1
                  },
                  {
                    "type": "string",
                    "pattern": "^[1-9]\\d*$",
                    "description": "represented as only as an integer without AS prefix"
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "pattern": "^[1-9]\\d*$",
                  "description": "represented as only as an integer without AS prefix"
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "!asn": {
          "description": "does not match list of Autonomous System (AS) numbers",
          "anyOf": [
            {
              "type": "array",
              "minItems": 1,
              "maxItems": 100,
              "items": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 1
                  },
                  {
                    "type": "string",
                    "pattern": "^[1-9]\\d*$",
                    "description": "represented as only as an integer without AS prefix"
                  }
                ]
              }
            },
            {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "string",
                  "pattern": "^[1-9]\\d*$",
                  "description": "represented as only as an integer without AS prefix"
                }
              ]
            },
            {
              "type": "string",
              "pattern": "^\\{\\{list\\..+\\}\\}$",
              "description": "reference to a list defined in the tenant or common config, e.g. {{list.blocked_ips}}"
            }
          ]
        },
        "asn_equals": {
          "$ref": "#/definitions/match_value_string",
          "description": "matches list of as numbers"
        },
        "!asn_equals": {
          "$ref": "#/definitions/match_value_string",
          "description": "does not match list of as numbers"
        },
        "respheader_wildcard_values": {
          "description": "matches map of response headers with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!respheader_wildcard_values": {
          "description": "does not match map of response headers with wildcard support",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "respheader": {
          "description": "matches map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!respheader": {
          "description": "does not match map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "respheader_startswith_values": {
          "description": "matches map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!respheader_startswith_values": {
          "description": "does not match map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "respheader_full_values": {
          "description": "matches map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!respheader_full_values": {
          "description": "does not match map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "respheader_values": {
          "description": "matches map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "!respheader_values": {
          "description": "does not match map of response headers",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/match_value_header"
          }
        },
        "origin_timeout": {
          "description": "matches boolean value indicating origin connection has timed out",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "string",
              "pattern": "true|false"
            }
          ]
        },
        "!origin_timeout": {
          "description": "does not match boolean value indicating origin connection has timed out",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "string",
              "pattern": "true|false"
            }
          ]
        },
        "status": {
          "description": "list of status codes",
          "type": "array",
          "minItems": 1,
          "maxItems": 100,
          "items": {
            "oneOf": [
              {
                "type": "integer",
                "description": "Status code as integer",
                "minimum": 100,
                "maximum": 599
              },
              {
                "type": "string",
                "description": "Range of status codes in the format \"200-299\". Match is inclusive.",
                "pattern": "^\\d{3}-\\d{3}$"
              },
              {
                "type": "string",
                "description": "Class of status codes in the format \"4xx\", \"5xx\" etc.",
                "pattern": "^\\d{1}[xX][xX]$"
              }
            ]
          }
        },
        "!status": {
          "description": "list of status codes",
          "type": "array",
          "minItems": 1,
          "maxItems": 100,
          "items": {
            "oneOf": [
              {
                "type": "integer",
                "description": "Status code as integer",
                "minimum": 100,
                "maximum": 599
              },
              {
                "type": "string",
                "description": "Range of status codes in the format \"200-299\". Match is inclusive.",
                "pattern": "^\\d{3}-\\d{3}$"
              },
              {
                "type": "string",
                "description": "Class of status codes in the format \"4xx\", \"5xx\" etc.",
                "pattern": "^\\d{1}[xX][xX]$"
              }
            ]
          }
        }
      }
    }
  },
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "tenant_id": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[^|,]+$",
          "maxLength": 20,
          "description": "a single tag to make visible in datastream logs when matched condition is true"
        },
        {
          "type": "array",
          "minItems": 1,
          "maxItems": 5,
          "description": "list of tags to make visible in datastream logs when matched condition is true",
          "items": {
            "type": "string",
            "pattern": "^[^|,]+$",
            "maxLength": 20
          }
        }
      ],
      "description": "the ID or IDs for a tenant to be used in logging"
    },
    "lists": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "description": "named lists of values that can be referenced in match rules via {{list.<key>}}"
    },
    "security_config": {
      "type": "object",
      "title": "Security Configuration",
      "description": "Specify risk group prefixes to Deny and any exceptions to those",
      "additionalProperties": false,
      "properties": {
        "deny_groups": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "SQL-INJECTION-ANOMALY",
                  "XSS-ANOMALY",
                  "CMD-INJECTION-ANOMALY",
                  "LFI-ANOMALY",
                  "RFI-ANOMALY",
                  "WAT-ANOMALY",
                  "PLATFORM-ANOMALY",
                  "POLICY-ANOMALY",
                  "PROTOCOL-ANOMALY",
                  "BOT-BROWSER-IMPERSONATOR",
                  "IPBLOCK-BURST",
                  "IPBLOCK-SUMMARY",
                  "REP"
                ],
                "description": "Security event prefixes. Known prefixes include:\n\u2022 SQL-INJECTION-ANOMALY: Detects SQL injection attack attempts and suspicious database queries\n\u2022 XSS-ANOMALY: Identifies cross-site scripting vulnerabilities and malicious script injections\n\u2022 CMD-INJECTION-ANOMALY: Detects command injection attempts and unauthorized system commands\n\u2022 LFI-ANOMALY: Local file inclusion attacks attempting to access restricted files\n\u2022 RFI-ANOMALY: Remote file inclusion attacks trying to execute external malicious files\n\u2022 WAT-ANOMALY: Web application firewall anomalies and suspicious traffic patterns\n\u2022 PLATFORM-ANOMALY: Platform-specific security violations and configuration issues\n\u2022 POLICY-ANOMALY: Security policy violations and non-compliant access attempts\n\u2022 PROTOCOL-ANOMALY: Network protocol violations and malformed request patterns\n\u2022 BOT-BROWSER-IMPERSONATOR: Detects automated bots attempting to impersonate legitimate browsers\n\u2022 IPBLOCK-BURST: Monitors for sudden bursts of requests from blocked IP addresses\n\u2022 IPBLOCK-SUMMARY: Provides summary reports of IP blocking activities and statistics\n\u2022 REP: Reputation-based security alerts for known malicious sources\n\nAdditional prefixes matching the pattern are also accepted."
              },
              {
                "type": "string",
                "pattern": "^(IPBLOCK-BURST.|IPBLOCK-SUMMARY.|REP.|6[0-9]+).*$",
                "description": "Some groups are prefixes and may have additional identifiers appended to their values for more specific matching"
              }
            ]
          }
        },
        "exceptions": {
          "type": "object",
          "additionalProperties": false,
          "patternProperties": {
            "^(IPBLOCK-BURST.|IPBLOCK-SUMMARY.|REP.|6[0-9]+).*$": {
              "$ref": "#/definitions/exception",
              "description": "You may add more specific properties that have these prefixes \"IPBLOCK-BURST\" \"IPBLOCK-SUMMARY\" \"REP\". Custom Rules (https://techdocs.akamai.com/application-security/reference/add-a-new-custom-rule-to-a-configuration) to be controlled by tenants by referencing the Custom Rule ID starting with the number six (6)."
            }
          },
          "properties": {
            "SQL-INJECTION-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "XSS-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "CMD-INJECTION-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "LFI-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "RFI-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "WAT-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "PLATFORM-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "POLICY-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "PROTOCOL-ANOMALY": {
              "$ref": "#/definitions/exception"
            },
            "BOT-BROWSER-IMPERSONATOR": {
              "$ref": "#/definitions/exception"
            },
            "IPBLOCK-BURST": {
              "$ref": "#/definitions/exception"
            },
            "IPBLOCK-SUMMARY": {
              "$ref": "#/definitions/exception"
            },
            "REP": {
              "$ref": "#/definitions/exception"
            }
          }
        }
      }
    },
    "delivery_config": {
      "type": "object",
      "title": "Delivery Configuration",
      "description": "Configure CDN delivery functionality",
      "additionalProperties": false,
      "properties": {
        "version": {
          "type": "string",
          "enum": [
            "1.0"
          ]
        },
        "onClientRequest": {
          "type": "object",
          "additionalProperties": false,
          "description": "This event happens for every request as the request is received, before checking if a response is available in cache. Use this event for request modifications before going to cache or to origin: https://techdocs.akamai.com/edgeworkers/docs/event-handler-functions#onclientrequest",
          "properties": {
            "pm_variables": {
              "type": "object",
              "patternProperties": {
                "^(?!PMUSER_)[A-Za-z0-9_]{1,22}$": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 500
                    },
                    {
                      "type": "boolean"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "description": "feature flags for the most basic setup",
              "deprecated": true
            },
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "tenantTag": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^[^|,]+$",
                      "maxLength": 20,
                      "description": "a single tag to make visible in datastream logs when matched condition is true"
                    },
                    {
                      "type": "array",
                      "minItems": 1,
                      "maxItems": 5,
                      "description": "list of tags to make visible in datastream logs when matched condition is true",
                      "items": {
                        "type": "string",
                        "pattern": "^[^|,]+$",
                        "maxLength": 20
                      }
                    }
                  ],
                  "deprecated": true
                },
                "caching": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "rules": {
                      "type": "array",
                      "description": "A list of rules for this feature. The first match wins",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "args": {
                            "allOf": [
                              {
                                "$schema": "http://json-schema.org/draft-07/schema#",
                                "type": "object",
                                "description": "caching feature options",
                                "additionalProperties": false,
                                "properties": {
                                  "ttl_seconds": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 31536000,
                                    "description": "TTL in seconds"
                                  },
                                  "must_revalidate": {
                                    "type": "boolean",
                                    "description": "Must Revalidate Stale Content"
                                  },
                                  "honor_origin": {
                                    "type": "boolean",
                                    "description": "Honor origin cache control"
                                  },
                                  "bypass": {
                                    "type": "boolean",
                                    "description": "Bypass cache"
                                  },
                                  "no_store": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "No-Store content"
                                  }
                                }
                              },
                              {
                                "anyOf": [
                                  {
                                    "type": "object",
                                    "required": [
                                      "ttl_seconds"
                                    ]
                                  },
                                  {
                                    "type": "object",
                                    "required": [
                                      "no_store"
                                    ],
                                    "properties": {
                                      "no_store": {
                                        "const": true
                                      }
                                    }
                                  },
                                  {
                                    "type": "object",
                                    "required": [
                                      "bypass"
                                    ],
                                    "properties": {
                                      "bypass": {
                                        "const": true
                                      }
                                    }
                                  }
                                ]
                              }
                            ]
                          },
                          "matchAll": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "All of these must match to execute"
                          },
                          "matchAny": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "One of these must match to execute"
                          },
                          "matchNone": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "None of these should match to execute"
                          },
                          "tags": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^[^|,]+$",
                                "maxLength": 20,
                                "description": "a single tag to make visible in datastream logs when matched condition is true"
                              },
                              {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "description": "list of tags to make visible in datastream logs when matched condition is true",
                                "items": {
                                  "type": "string",
                                  "pattern": "^[^|,]+$",
                                  "maxLength": 20
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  }
                },
                "downstreamCaching": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "Downstream caching options",
                                "additionalProperties": false,
                                "properties": {
                                  "behavior": {
                                    "type": "string",
                                    "description": "Specify what caching instructions edge servers send to the end user's client.",
                                    "enum": [
                                      "ALLOW",
                                      "MUST_REVALIDATE",
                                      "BUST",
                                      "TUNNEL_ORIGIN",
                                      "NONE"
                                    ]
                                  },
                                  "allow_behavior": {
                                    "type": "string",
                                    "description": "",
                                    "enum": [
                                      "LESSER",
                                      "GREATER",
                                      "REMAINING_LIFETIME",
                                      "FROM_MAX_AGE",
                                      "FROM_VALUE",
                                      "PASS_ORIGIN"
                                    ]
                                  },
                                  "ttl_seconds": {
                                    "type": "integer",
                                    "description": "Cache-control max-age value.",
                                    "minimum": 0,
                                    "maximum": 31536000
                                  },
                                  "send_private": {
                                    "type": "boolean",
                                    "description": "Adds Private to the Cache-Control header."
                                  }
                                },
                                "required": [
                                  "behavior"
                                ]
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              },
                              "tags": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "pattern": "^[^|,]+$",
                                    "maxLength": 20,
                                    "description": "a single tag to make visible in datastream logs when matched condition is true"
                                  },
                                  {
                                    "type": "array",
                                    "minItems": 1,
                                    "maxItems": 5,
                                    "description": "list of tags to make visible in datastream logs when matched condition is true",
                                    "items": {
                                      "type": "string",
                                      "pattern": "^[^|,]+$",
                                      "maxLength": 20
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "object",
                      "description": "Downstream caching options",
                      "additionalProperties": false,
                      "properties": {
                        "behavior": {
                          "type": "string",
                          "description": "Specify what caching instructions edge servers send to the end user's client.",
                          "enum": [
                            "ALLOW",
                            "MUST_REVALIDATE",
                            "BUST",
                            "TUNNEL_ORIGIN",
                            "NONE"
                          ]
                        },
                        "allow_behavior": {
                          "type": "string",
                          "description": "",
                          "enum": [
                            "LESSER",
                            "GREATER",
                            "REMAINING_LIFETIME",
                            "FROM_MAX_AGE",
                            "FROM_VALUE",
                            "PASS_ORIGIN"
                          ]
                        },
                        "ttl_seconds": {
                          "type": "integer",
                          "description": "Cache-control max-age value.",
                          "minimum": 0,
                          "maximum": 31536000
                        },
                        "send_private": {
                          "type": "boolean",
                          "description": "Adds Private to the Cache-Control header."
                        }
                      },
                      "required": [
                        "behavior"
                      ]
                    }
                  ]
                },
                "route": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "rules": {
                      "type": "array",
                      "description": "A list of rules for this feature. The first match wins",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "args": {
                            "type": "object",
                            "description": "route origin feature options",
                            "additionalProperties": false,
                            "properties": {
                              "query": {
                                "type": "string",
                                "description": "modify forward querystring"
                              },
                              "path": {
                                "type": "string",
                                "pattern": "^[/].*",
                                "description": "modify forward path"
                              },
                              "origin": {
                                "deprecated": true,
                                "type": "string",
                                "description": "same as originId",
                                "default": "default_eaas"
                              },
                              "originId": {
                                "type": "string",
                                "description": "the origin id specified in pm configuration.",
                                "default": "default_eaas"
                              }
                            },
                            "required": [
                              "originId"
                            ]
                          },
                          "matchAll": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "All of these must match to execute"
                          },
                          "matchAny": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "One of these must match to execute"
                          },
                          "matchNone": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "None of these should match to execute"
                          },
                          "tags": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^[^|,]+$",
                                "maxLength": 20,
                                "description": "a single tag to make visible in datastream logs when matched condition is true"
                              },
                              {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "description": "list of tags to make visible in datastream logs when matched condition is true",
                                "items": {
                                  "type": "string",
                                  "pattern": "^[^|,]+$",
                                  "maxLength": 20
                                }
                              }
                            ]
                          },
                          "pm_variables": {
                            "type": "object",
                            "patternProperties": {
                              "^(?!PMUSER_)(?!RT_ORIGIN_HOST_HEADER$)(?!RT_ORIGIN_DNS$)(?!ORIGIN_CN$)[A-Za-z0-9_]{1,22}$": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "maxLength": 500
                                  },
                                  {
                                    "type": "boolean"
                                  }
                                ]
                              }
                            },
                            "additionalProperties": false,
                            "properties": {
                              "RT_ORIGIN_HOST_HEADER": {
                                "type": "string",
                                "maxLength": 500,
                                "description": "forward origin host header"
                              },
                              "RT_ORIGIN_DNS": {
                                "type": "string",
                                "maxLength": 500,
                                "description": "dns entry to use to connect to origin"
                              },
                              "ORIGIN_CN": {
                                "type": "string",
                                "maxLength": 500,
                                "description": "if origin has a TLS certificate that does not contain the origin dns or forward host, specify the expected common name"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "respondWith": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "rules": {
                      "type": "array",
                      "description": "A list of rules for this feature. The first match wins",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "args": {
                            "type": "object",
                            "description": "respondWith options to construct responses from the edge",
                            "additionalProperties": false,
                            "properties": {
                              "status": {
                                "type": "integer",
                                "minimum": 200,
                                "maximum": 599,
                                "description": "respondWith http status code"
                              },
                              "headers": {
                                "type": "object",
                                "patternProperties": {
                                  "^[A-Za-z][A-Za-z0-9!#$&'*+\\-.^_`|~]*$": {
                                    "type": "array",
                                    "minItems": 1,
                                    "description": "response-header values as an array of strings",
                                    "items": {
                                      "type": "string",
                                      "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                                      "maxLength": 1000,
                                      "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                                    }
                                  }
                                },
                                "additionalProperties": false
                              },
                              "body": {
                                "type": "string",
                                "maxLength": 2048,
                                "description": "respondwith body"
                              }
                            }
                          },
                          "matchAll": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "All of these must match to execute"
                          },
                          "matchAny": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "One of these must match to execute"
                          },
                          "matchNone": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "None of these should match to execute"
                          },
                          "tags": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^[^|,]+$",
                                "maxLength": 20,
                                "description": "a single tag to make visible in datastream logs when matched condition is true"
                              },
                              {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "description": "list of tags to make visible in datastream logs when matched condition is true",
                                "items": {
                                  "type": "string",
                                  "pattern": "^[^|,]+$",
                                  "maxLength": 20
                                }
                              }
                            ]
                          },
                          "monitor_only": {
                            "type": "boolean",
                            "description": "Skips execution but adds tags to the log to help evaluate change's proposed execution"
                          }
                        }
                      }
                    }
                  }
                },
                "redirect": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "rules": {
                      "type": "array",
                      "description": "A list of rules for this feature. The first match wins",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "args": {
                            "type": "object",
                            "description": "HTTP redirect",
                            "additionalProperties": false,
                            "properties": {
                              "status": {
                                "type": "integer",
                                "minimum": 301,
                                "maximum": 302,
                                "description": "301 or 302 redirect status code"
                              },
                              "location": {
                                "type": "string",
                                "description": "redirect location. Supports template variables: {{scheme}}, {{host}}, {{path}}, {{query}}, {{?query}}",
                                "examples": [
                                  "https://example.com/dashboard",
                                  "/login",
                                  "{{scheme}}://{{host}}/",
                                  "https://{{host}}/{{path}}{{?query}}"
                                ]
                              }
                            },
                            "required": [
                              "location",
                              "status"
                            ]
                          },
                          "matchAll": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "All of these must match to execute"
                          },
                          "matchAny": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "One of these must match to execute"
                          },
                          "matchNone": {
                            "$ref": "#/definitions/match_condition_request",
                            "description": "None of these should match to execute"
                          },
                          "tags": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^[^|,]+$",
                                "maxLength": 20,
                                "description": "a single tag to make visible in datastream logs when matched condition is true"
                              },
                              {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "description": "list of tags to make visible in datastream logs when matched condition is true",
                                "items": {
                                  "type": "string",
                                  "pattern": "^[^|,]+$",
                                  "maxLength": 20
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  }
                },
                "rewrite": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "Rewrite forward url.",
                                "additionalProperties": false,
                                "properties": {
                                  "value": {
                                    "type": "string",
                                    "description": "Rewriten url. Supports variable interpolation."
                                  }
                                },
                                "required": [
                                  "value"
                                ]
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              },
                              "tags": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "pattern": "^[^|,]+$",
                                    "maxLength": 20,
                                    "description": "a single tag to make visible in datastream logs when matched condition is true"
                                  },
                                  {
                                    "type": "array",
                                    "minItems": 1,
                                    "maxItems": 5,
                                    "description": "list of tags to make visible in datastream logs when matched condition is true",
                                    "items": {
                                      "type": "string",
                                      "pattern": "^[^|,]+$",
                                      "maxLength": 20
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "string",
                      "description": "Rewriten url. Supports variable interpolation."
                    }
                  ]
                },
                "setHeaders": {
                  "type": "object",
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                        "maxLength": 1000,
                        "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                      },
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "rules": {
                            "type": "array",
                            "description": "A list of rules for this feature. The first match wins",
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "properties": {
                                "args": {
                                  "type": "object",
                                  "description": "set request headers going to origin. null values will remove the header",
                                  "additionalProperties": false,
                                  "properties": {
                                    "value": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                                          "maxLength": 1000,
                                          "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  }
                                },
                                "matchAll": {
                                  "$ref": "#/definitions/match_condition_request",
                                  "description": "All of these must match to execute"
                                },
                                "matchAny": {
                                  "$ref": "#/definitions/match_condition_request",
                                  "description": "One of these must match to execute"
                                },
                                "matchNone": {
                                  "$ref": "#/definitions/match_condition_request",
                                  "description": "None of these should match to execute"
                                },
                                "tags": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "pattern": "^[^|,]+$",
                                      "maxLength": 20,
                                      "description": "a single tag to make visible in datastream logs when matched condition is true"
                                    },
                                    {
                                      "type": "array",
                                      "minItems": 1,
                                      "maxItems": 5,
                                      "description": "list of tags to make visible in datastream logs when matched condition is true",
                                      "items": {
                                        "type": "string",
                                        "pattern": "^[^|,]+$",
                                        "maxLength": 20
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  },
                  "maxProperties": 25
                },
                "setVariable": {
                  "type": "object",
                  "patternProperties": {
                    "^(?!PMUSER_)[A-Za-z0-9_]{1,22}$": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "boolean"
                        },
                        {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "rules": {
                              "type": "array",
                              "description": "A list of rules for this feature. The first match wins",
                              "items": {
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                  "args": {
                                    "type": "object",
                                    "description": "setVariable options",
                                    "additionalProperties": false,
                                    "properties": {
                                      "value": {
                                        "type": "string",
                                        "maxLength": 500,
                                        "description": "the value to set the variable"
                                      }
                                    }
                                  },
                                  "matchAll": {
                                    "$ref": "#/definitions/match_condition_request",
                                    "description": "All of these must match to execute"
                                  },
                                  "matchAny": {
                                    "$ref": "#/definitions/match_condition_request",
                                    "description": "One of these must match to execute"
                                  },
                                  "matchNone": {
                                    "$ref": "#/definitions/match_condition_request",
                                    "description": "None of these should match to execute"
                                  },
                                  "tags": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "pattern": "^[^|,]+$",
                                        "maxLength": 20,
                                        "description": "a single tag to make visible in datastream logs when matched condition is true"
                                      },
                                      {
                                        "type": "array",
                                        "minItems": 1,
                                        "maxItems": 5,
                                        "description": "list of tags to make visible in datastream logs when matched condition is true",
                                        "items": {
                                          "type": "string",
                                          "pattern": "^[^|,]+$",
                                          "maxLength": 20
                                        }
                                      }
                                    ]
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  },
                  "additionalProperties": false,
                  "maxProperties": 25
                },
                "allowPost": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "allowPost options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Allow POST requests"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "allowPut": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "allowPut options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Allow PUT requests"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "allowDelete": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "allowDelete options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Allow DELETE requests"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "allowPatch": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "allowPatch options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Allow PATCH requests"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "webSockets": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "webSockets options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable WebSockets feature"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "tieredDistribution": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "tieredDistribution options. typically enabled caching is configured",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable Tiered Distribution feature for cacheable content"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "originIpAcl": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "originIpAcl options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable Origin IP ACL feature"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "breadcrumbs": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "breadcrumbs options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable Breadcrumbs feature"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "chunkedTransferEncoding": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "chunkedTransferEncoding options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable Chunked Transfer Encoding for POST requests"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "http2": {
                  "deprecated": true,
                  "anyOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "http3": {
                  "deprecated": true,
                  "anyOf": [
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "removeVary": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "removeVary options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable Remove Vary feature"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "compression": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "compression options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable compression feature"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "readTimeout": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "Read timeout options",
                                "additionalProperties": false,
                                "properties": {
                                  "value": {
                                    "type": "integer",
                                    "minimum": 50,
                                    "maximum": 120000,
                                    "description": "Read timeout in milliseconds"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "integer",
                      "minimum": 50,
                      "maximum": 120000,
                      "description": "Read timeout in milliseconds"
                    }
                  ]
                },
                "firstByteTimeout": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "First byte timeout options",
                                "additionalProperties": false,
                                "properties": {
                                  "value": {
                                    "type": "integer",
                                    "minimum": 50,
                                    "maximum": 120000,
                                    "description": "First byte timeout in milliseconds"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "integer",
                      "minimum": 50,
                      "maximum": 120000,
                      "description": "First byte timeout in milliseconds"
                    }
                  ]
                },
                "connectTimeout": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "Connect timeout options",
                                "additionalProperties": false,
                                "properties": {
                                  "value": {
                                    "type": "integer",
                                    "minimum": 50,
                                    "maximum": 120000,
                                    "description": "Connect timeout in milliseconds"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "integer",
                      "minimum": 50,
                      "maximum": 120000,
                      "description": "Connect timeout in milliseconds"
                    }
                  ]
                },
                "hsts": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "removeVary options",
                                "additionalProperties": false,
                                "properties": {
                                  "maxAge": {
                                    "type": "integer",
                                    "description": "Expire time in seconds."
                                  },
                                  "includeSubDomains": {
                                    "type": "boolean",
                                    "description": "Apply HSTS to all subdomains"
                                  },
                                  "preload": {
                                    "type": "boolean",
                                    "description": "Enable/disable HSTS preloading"
                                  }
                                },
                                "required": [
                                  "maxAge"
                                ]
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_request",
                                "description": "None of these should match to execute"
                              },
                              "tags": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "pattern": "^[^|,]+$",
                                    "maxLength": 20,
                                    "description": "a single tag to make visible in datastream logs when matched condition is true"
                                  },
                                  {
                                    "type": "array",
                                    "minItems": 1,
                                    "maxItems": 5,
                                    "description": "list of tags to make visible in datastream logs when matched condition is true",
                                    "items": {
                                      "type": "string",
                                      "pattern": "^[^|,]+$",
                                      "maxLength": 20
                                    }
                                  }
                                ]
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "object",
                      "description": "removeVary options",
                      "additionalProperties": false,
                      "properties": {
                        "maxAge": {
                          "type": "integer",
                          "description": "Expire time in seconds."
                        },
                        "includeSubDomains": {
                          "type": "boolean",
                          "description": "Apply HSTS to all subdomains"
                        },
                        "preload": {
                          "type": "boolean",
                          "description": "Enable/disable HSTS preloading"
                        }
                      },
                      "required": [
                        "maxAge"
                      ]
                    }
                  ]
                }
              }
            }
          }
        },
        "onClientResponse": {
          "type": "object",
          "additionalProperties": false,
          "description": "This event happens before the response is sent to the client: https://techdocs.akamai.com/edgeworkers/docs/event-handler-functions#onclientresponse",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "respondWith": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "rules": {
                      "type": "array",
                      "description": "A list of rules for this feature. The first match wins",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "args": {
                            "type": "object",
                            "description": "respondWith options to construct responses from the edge",
                            "additionalProperties": false,
                            "properties": {
                              "status": {
                                "type": "integer",
                                "minimum": 200,
                                "maximum": 599,
                                "description": "respondWith http status code"
                              },
                              "headers": {
                                "type": "object",
                                "patternProperties": {
                                  "^[A-Za-z][A-Za-z0-9!#$&'*+\\-.^_`|~]*$": {
                                    "type": "array",
                                    "minItems": 1,
                                    "description": "response-header values as an array of strings",
                                    "items": {
                                      "type": "string",
                                      "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                                      "maxLength": 1000,
                                      "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                                    }
                                  }
                                },
                                "additionalProperties": false
                              },
                              "body": {
                                "type": "string",
                                "maxLength": 2048,
                                "description": "respondwith body"
                              }
                            }
                          },
                          "matchAll": {
                            "$ref": "#/definitions/match_condition_response",
                            "description": "All of these must match to execute"
                          },
                          "matchAny": {
                            "$ref": "#/definitions/match_condition_response",
                            "description": "One of these must match to execute"
                          },
                          "matchNone": {
                            "$ref": "#/definitions/match_condition_response",
                            "description": "None of these should match to execute"
                          },
                          "tags": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^[^|,]+$",
                                "maxLength": 20,
                                "description": "a single tag to make visible in datastream logs when matched condition is true"
                              },
                              {
                                "type": "array",
                                "minItems": 1,
                                "maxItems": 5,
                                "description": "list of tags to make visible in datastream logs when matched condition is true",
                                "items": {
                                  "type": "string",
                                  "pattern": "^[^|,]+$",
                                  "maxLength": 20
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  }
                },
                "compression": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "compression options",
                                "additionalProperties": false,
                                "properties": {
                                  "enabled": {
                                    "anyOf": [
                                      {
                                        "type": "boolean"
                                      },
                                      {
                                        "type": "string",
                                        "pattern": "true|false"
                                      }
                                    ],
                                    "description": "Enable/disable compression feature"
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_response",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_response",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_response",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "boolean"
                    },
                    {
                      "type": "string",
                      "pattern": "true|false"
                    }
                  ]
                },
                "setHeaders": {
                  "type": "object",
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                        "maxLength": 1000,
                        "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                      },
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "rules": {
                            "type": "array",
                            "description": "A list of rules for this feature. The first match wins",
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "properties": {
                                "args": {
                                  "type": "object",
                                  "description": "set response headers going to client from edge. null values will remove the header",
                                  "additionalProperties": false,
                                  "properties": {
                                    "value": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                                          "maxLength": 1000,
                                          "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  }
                                },
                                "matchAll": {
                                  "$ref": "#/definitions/match_condition_response",
                                  "description": "All of these must match to execute"
                                },
                                "matchAny": {
                                  "$ref": "#/definitions/match_condition_response",
                                  "description": "One of these must match to execute"
                                },
                                "matchNone": {
                                  "$ref": "#/definitions/match_condition_response",
                                  "description": "None of these should match to execute"
                                },
                                "tags": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "pattern": "^[^|,]+$",
                                      "maxLength": 20,
                                      "description": "a single tag to make visible in datastream logs when matched condition is true"
                                    },
                                    {
                                      "type": "array",
                                      "minItems": 1,
                                      "maxItems": 5,
                                      "description": "list of tags to make visible in datastream logs when matched condition is true",
                                      "items": {
                                        "type": "string",
                                        "pattern": "^[^|,]+$",
                                        "maxLength": 20
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  },
                  "maxProperties": 25
                },
                "setVariable": {
                  "type": "object",
                  "patternProperties": {
                    "^(?!PMUSER_)[A-Za-z0-9_]{1,22}$": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "boolean"
                        },
                        {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "rules": {
                              "type": "array",
                              "description": "A list of rules for this feature. The first match wins",
                              "items": {
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                  "args": {
                                    "type": "object",
                                    "description": "setVariable options",
                                    "additionalProperties": false,
                                    "properties": {
                                      "value": {
                                        "type": "string",
                                        "maxLength": 500,
                                        "description": "the value to set the variable"
                                      }
                                    }
                                  },
                                  "matchAll": {
                                    "$ref": "#/definitions/match_condition_response",
                                    "description": "All of these must match to execute"
                                  },
                                  "matchAny": {
                                    "$ref": "#/definitions/match_condition_response",
                                    "description": "One of these must match to execute"
                                  },
                                  "matchNone": {
                                    "$ref": "#/definitions/match_condition_response",
                                    "description": "None of these should match to execute"
                                  },
                                  "tags": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "pattern": "^[^|,]+$",
                                        "maxLength": 20,
                                        "description": "a single tag to make visible in datastream logs when matched condition is true"
                                      },
                                      {
                                        "type": "array",
                                        "minItems": 1,
                                        "maxItems": 5,
                                        "description": "list of tags to make visible in datastream logs when matched condition is true",
                                        "items": {
                                          "type": "string",
                                          "pattern": "^[^|,]+$",
                                          "maxLength": 20
                                        }
                                      }
                                    ]
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  },
                  "additionalProperties": false,
                  "maxProperties": 25
                }
              }
            }
          }
        },
        "onOriginResponse": {
          "type": "object",
          "additionalProperties": false,
          "description": "This event happens as the origin response is created. The event only happens if the response is not served from cache and not constructed on the edge. Use this event if you want to modify the response before it is cached: https://techdocs.akamai.com/edgeworkers/docs/event-handler-functions#onoriginresponse",
          "properties": {
            "features": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "cacheTag": {
                  "anyOf": [
                    {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "rules": {
                          "type": "array",
                          "description": "A list of rules for this feature. The first match wins",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "properties": {
                              "args": {
                                "type": "object",
                                "description": "Manage Cache Tags from the Edge and Origin",
                                "additionalProperties": false,
                                "properties": {
                                  "prefix": {
                                    "type": "string",
                                    "pattern": "[a-zA-Z0-9_-]+",
                                    "maxLength": 25
                                  },
                                  "honorOriginSurrogateKey": {
                                    "type": "boolean",
                                    "default": false,
                                    "description": "Merge tags from first Surrogate-Key header returned by origin"
                                  },
                                  "createDomainTag": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "Create a cache tag with the request host and prefix if one is defined"
                                  },
                                  "createPathTag": {
                                    "type": "boolean",
                                    "default": false,
                                    "description": "Create a cache tag with the request path and prefix if one is defined"
                                  },
                                  "createDomainAndPathTag": {
                                    "type": "boolean",
                                    "default": false,
                                    "description": "Create a cache tag with the request path and prefix if one is defined"
                                  },
                                  "edgeCacheTags": {
                                    "type": "array",
                                    "minItems": 1,
                                    "maxItems": 128,
                                    "description": "List of Edge-Cache-Tag tags to set at the edge",
                                    "items": {
                                      "type": "string",
                                      "pattern": "[a-zA-Z0-9&'^$!`#%.+~_|/-]+",
                                      "maxLength": 128
                                    }
                                  }
                                }
                              },
                              "matchAll": {
                                "$ref": "#/definitions/match_condition_response",
                                "description": "All of these must match to execute"
                              },
                              "matchAny": {
                                "$ref": "#/definitions/match_condition_response",
                                "description": "One of these must match to execute"
                              },
                              "matchNone": {
                                "$ref": "#/definitions/match_condition_response",
                                "description": "None of these should match to execute"
                              }
                            }
                          }
                        }
                      }
                    },
                    {
                      "type": "object",
                      "description": "Manage Cache Tags from the Edge and Origin",
                      "additionalProperties": false,
                      "properties": {
                        "prefix": {
                          "type": "string",
                          "pattern": "[a-zA-Z0-9_-]+",
                          "maxLength": 25
                        },
                        "honorOriginSurrogateKey": {
                          "type": "boolean",
                          "default": false,
                          "description": "Merge tags from first Surrogate-Key header returned by origin"
                        },
                        "createDomainTag": {
                          "type": "boolean",
                          "default": true,
                          "description": "Create a cache tag with the request host and prefix if one is defined"
                        },
                        "createPathTag": {
                          "type": "boolean",
                          "default": false,
                          "description": "Create a cache tag with the request path and prefix if one is defined"
                        },
                        "createDomainAndPathTag": {
                          "type": "boolean",
                          "default": false,
                          "description": "Create a cache tag with the request path and prefix if one is defined"
                        },
                        "edgeCacheTags": {
                          "type": "array",
                          "minItems": 1,
                          "maxItems": 128,
                          "description": "List of Edge-Cache-Tag tags to set at the edge",
                          "items": {
                            "type": "string",
                            "pattern": "[a-zA-Z0-9&'^$!`#%.+~_|/-]+",
                            "maxLength": 128
                          }
                        }
                      }
                    }
                  ]
                },
                "setHeaders": {
                  "type": "object",
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                        "maxLength": 1000,
                        "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                      },
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "rules": {
                            "type": "array",
                            "description": "A list of rules for this feature. The first match wins",
                            "items": {
                              "type": "object",
                              "additionalProperties": false,
                              "properties": {
                                "args": {
                                  "type": "object",
                                  "description": "set response headers going into edge from origin. null values will remove the header",
                                  "additionalProperties": false,
                                  "properties": {
                                    "value": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "pattern": "^[\\x09\\x20-\\x7E\\x80-\\xFF]*$",
                                          "maxLength": 1000,
                                          "description": "HTTP header value - printable ASCII and extended characters, no control characters except tab"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  }
                                },
                                "matchAll": {
                                  "$ref": "#/definitions/match_condition_response",
                                  "description": "All of these must match to execute"
                                },
                                "matchAny": {
                                  "$ref": "#/definitions/match_condition_response",
                                  "description": "One of these must match to execute"
                                },
                                "matchNone": {
                                  "$ref": "#/definitions/match_condition_response",
                                  "description": "None of these should match to execute"
                                },
                                "tags": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "pattern": "^[^|,]+$",
                                      "maxLength": 20,
                                      "description": "a single tag to make visible in datastream logs when matched condition is true"
                                    },
                                    {
                                      "type": "array",
                                      "minItems": 1,
                                      "maxItems": 5,
                                      "description": "list of tags to make visible in datastream logs when matched condition is true",
                                      "items": {
                                        "type": "string",
                                        "pattern": "^[^|,]+$",
                                        "maxLength": 20
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  },
                  "maxProperties": 25
                },
                "setVariable": {
                  "type": "object",
                  "patternProperties": {
                    "^(?!PMUSER_)[A-Za-z0-9_]{1,22}$": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 500
                        },
                        {
                          "type": "boolean"
                        },
                        {
                          "type": "object",
                          "additionalProperties": false,
                          "properties": {
                            "rules": {
                              "type": "array",
                              "description": "A list of rules for this feature. The first match wins",
                              "items": {
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                  "args": {
                                    "type": "object",
                                    "description": "setVariable options",
                                    "additionalProperties": false,
                                    "properties": {
                                      "value": {
                                        "type": "string",
                                        "maxLength": 500,
                                        "description": "the value to set the variable"
                                      }
                                    }
                                  },
                                  "matchAll": {
                                    "$ref": "#/definitions/match_condition_response",
                                    "description": "All of these must match to execute"
                                  },
                                  "matchAny": {
                                    "$ref": "#/definitions/match_condition_response",
                                    "description": "One of these must match to execute"
                                  },
                                  "matchNone": {
                                    "$ref": "#/definitions/match_condition_response",
                                    "description": "None of these should match to execute"
                                  },
                                  "tags": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "pattern": "^[^|,]+$",
                                        "maxLength": 20,
                                        "description": "a single tag to make visible in datastream logs when matched condition is true"
                                      },
                                      {
                                        "type": "array",
                                        "minItems": 1,
                                        "maxItems": 5,
                                        "description": "list of tags to make visible in datastream logs when matched condition is true",
                                        "items": {
                                          "type": "string",
                                          "pattern": "^[^|,]+$",
                                          "maxLength": 20
                                        }
                                      }
                                    ]
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  },
                  "additionalProperties": false,
                  "maxProperties": 25
                }
              }
            }
          }
        }
      },
      "required": [
        "version",
        "onClientRequest"
      ]
    }
  }
}
