{
    "type": "object",
    "properties": {
        "inputs": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/SBGWorkflowInputParameter"
            }
        },
        "outputs": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/WorkflowOutputParameter"
            }
        },
        "class": {
            "type": "string",
            "enum": [
                "Workflow"
            ]
        },
        "steps": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/WorkflowStep"
            }
        },
        "cwlVersion": {
            "$ref": "#/definitions/CWLVersions",
            "description": "CWL document version"
        },
        "sbg:image_url": {
            "type": ["string", "null"]
        },
        "sbg:canvas_y": {
            "type": "number"
        },
        "sbg:canvas_x": {
            "type": "number"
        },
        "sbg:canvas_zoom": {
            "type": "number"
        },
        "id": {
            "type": "string"
        },
        "requirements": {
            "type": "array",
            "items": {
                "anyOf": [
                    {
                        "$ref": "#/definitions/DockerRequirement"
                    },
                    {
                        "$ref": "#/definitions/SubworkflowFeatureRequirement"
                    },
                    {
                        "$ref": "#/definitions/CreateFileRequirement"
                    },
                    {
                        "$ref": "#/definitions/EnvVarRequirement"
                    },
                    {
                        "$ref": "#/definitions/ScatterFeatureRequirement"
                    },
                    {
                        "$ref": "#/definitions/SchemaDefRequirement"
                    },
                    {
                        "$ref": "#/definitions/ExpressionEngineRequirement"
                    }
                ]
            }
        },
        "hints": {
            "type": "array",
            "items": {}
        },
        "label": {
            "type": "string"
        },
        "description": {
            "type": "string"
        },
        "sbg:modifiedBy": {
            "type": "string"
        },
        "sbg:revisionInfo": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/SBGRevision"
            }
        },
        "sbg:revision": {
            "type": "number"
        },
        "sbg:createdBy": {
            "type": "string"
        },
        "sbg:id": {
            "type": "string"
        },
        "sbg:contributors": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "sbg:sbgMaintained": {
            "type": "boolean"
        },
        "sbg:project": {
            "type": "string"
        },
        "sbg:validationErrors": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "sbg:modifiedOn": {
            "type": "number"
        },
        "sbg:revisionNotes": {
            "type": ["string", "null"]
        },
        "sbg:toolkit": {
            "type": "string"
        },
        "sbg:toolkitVersion": {
            "type": "string"
        },
        "sbg:links": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/SBGLink"
            }
        },
        "sbg:toolAuthor": {
            "type": "string"
        },
        "sbg:license": {
            "type": "string"
        },
        "sbg:categories": {
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    },
    "required": [
        "inputs",
        "outputs",
        "class",
        "steps"
    ],
    "definitions": {
        "SBGWorkflowInputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "id": {
                    "type": "string"
                },
                "sbg:includeInPorts": {
                    "type": "boolean"
                },
                "sbg:x": {
                    "type": "number"
                },
                "sbg:y": {
                    "type": "number"
                }
            },
            "required": [
                "id"
            ]
        },
        "WorkflowInputSchema": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputEnumSchema"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputSchema"
                                    },
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputRecordSchema"
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "required": [
                "type"
            ]
        },
        "WorkflowInputMapSchema": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "map"
                    ]
                },
                "values": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "values"
            ]
        },
        "WorkflowInputArraySchema": {
            "type": "object",
            "properties": {
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputSchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/WorkflowInputEnumSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/WorkflowInputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "array"
                    ]
                }
            },
            "required": [
                "items",
                "type"
            ]
        },
        "WorkflowInputRecordSchema": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "record"
                    ]
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/WorkflowInputSchema"
                            },
                            {
                                "$ref": "#/definitions/WorkflowInputArraySchema"
                            },
                            {
                                "$ref": "#/definitions/WorkflowInputRecordSchema"
                            },
                            {
                                "$ref": "#/definitions/WorkflowInputEnumSchema"
                            },
                            {
                                "$ref": "#/definitions/WorkflowInputMapSchema"
                            }
                        ]
                    }
                }
            },
            "required": [
                "type",
                "fields"
            ]
        },
        "WorkflowInputEnumSchema": {
            "type": "object",
            "properties": {
                "type": {
                    "type": "string",
                    "enum": [
                        "enum"
                    ]
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "type",
                "symbols"
            ]
        },
        "WorkflowOutputParameter": {
            "type": "object",
            "properties": {
                "source": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "linkMerge": {
                    "$ref": "#/definitions/LinkMergeMethod"
                },
                "sbg:x": {
                    "type": "number"
                },
                "sbg:y": {
                    "type": "number"
                },
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/OutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/OutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "id": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "LinkMergeMethod": {
            "type": "string",
            "enum": [
                "merge_nested",
                "merge_flattened"
            ]
        },
        "OutputSchema": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "record"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "array"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "enum"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "map"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/OutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "record"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "array"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "enum"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "map"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/OutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/OutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/OutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "values": {
                    "type": "string"
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/OutputSchema"
                    }
                }
            },
            "required": [
                "type"
            ]
        },
        "WorkflowStep": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "inputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/WorkflowStepInput"
                    }
                },
                "outputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/WorkflowStepOutput"
                    }
                },
                "requirements": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/DockerRequirement"
                            },
                            {
                                "$ref": "#/definitions/SubworkflowFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/CreateFileRequirement"
                            },
                            {
                                "$ref": "#/definitions/EnvVarRequirement"
                            },
                            {
                                "$ref": "#/definitions/ScatterFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/SchemaDefRequirement"
                            },
                            {
                                "$ref": "#/definitions/ExpressionEngineRequirement"
                            }
                        ]
                    }
                },
                "hints": {
                    "type": "array",
                    "items": {}
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "run": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/CommandLineTool"
                        },
                        {
                            "$ref": "#/definitions/ExpressionTool"
                        },
                        {
                            "$ref": "#/definitions/Workflow"
                        },
                        {
                            "type": "string"
                        }
                    ]
                },
                "scatter": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "scatterMethod": {
                    "$ref": "#/definitions/ScatterMethod"
                }
            },
            "required": [
                "inputs",
                "outputs",
                "run"
            ]
        },
        "WorkflowStepInput": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "source": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "linkMerge": {
                    "$ref": "#/definitions/LinkMergeMethod"
                },
                "default": {}
            },
            "required": [
                "id"
            ]
        },
        "WorkflowStepOutput": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "DockerRequirement": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "DockerRequirement"
                    ]
                },
                "dockerPull": {
                    "type": "string"
                },
                "dockerLoad": {
                    "type": "string"
                },
                "dockerFile": {
                    "type": "string"
                },
                "dockerImageId": {
                    "type": "string"
                },
                "dockerOutputDirectory": {
                    "type": "string"
                }
            },
            "required": [
                "class"
            ]
        },
        "SubworkflowFeatureRequirement": {
            "type": "object",
            "properties": {}
        },
        "CreateFileRequirement": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "CreateFileRequirement"
                    ]
                },
                "fileDef": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/FileDef"
                    }
                }
            },
            "required": [
                "class",
                "fileDef"
            ]
        },
        "FileDef": {
            "type": "object",
            "properties": {
                "filename": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                },
                "fileContent": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                }
            },
            "required": [
                "filename",
                "fileContent"
            ]
        },
        "Expression": {
            "type": "object",
            "properties": {
                "engine": {
                    "type": "string"
                },
                "script": {
                    "type": "string"
                },
                "class": {
                    "type": "string",
                    "enum": [
                        "Expression"
                    ]
                }
            },
            "required": [
                "engine",
                "script",
                "class"
            ]
        },
        "EnvVarRequirement": {
            "type": "object",
            "properties": {}
        },
        "ScatterFeatureRequirement": {
            "type": "object",
            "properties": {}
        },
        "SchemaDefRequirement": {
            "type": "object",
            "properties": {}
        },
        "ExpressionEngineRequirement": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "ExpressionEngineRequirement"
                    ]
                },
                "id": {
                    "type": "string"
                },
                "requirements": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/DockerRequirement"
                            },
                            {
                                "$ref": "#/definitions/SubworkflowFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/CreateFileRequirement"
                            },
                            {
                                "$ref": "#/definitions/EnvVarRequirement"
                            },
                            {
                                "$ref": "#/definitions/ScatterFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/SchemaDefRequirement"
                            },
                            {
                                "$ref": "#/definitions/ExpressionEngineRequirement"
                            }
                        ]
                    }
                },
                "engineCommand": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "engineConfig": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "class",
                "id"
            ]
        },
        "CommandLineTool": {
            "type": "object",
            "properties": {
                "inputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/CommandInputParameter"
                    }
                },
                "outputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/CommandOutputParameter"
                    }
                },
                "hints": {
                    "type": "array",
                    "items": {}
                },
                "class": {
                    "type": "string",
                    "enum": [
                        "CommandLineTool"
                    ]
                },
                "baseCommand": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/Expression"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "arguments": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "type": "string"
                            },
                            {
                                "$ref": "#/definitions/CommandLineBinding"
                            }
                        ]
                    }
                },
                "stdin": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                },
                "stdout": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                },
                "successCodes": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                "temporaryFailCodes": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                "permanentFailCodes": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                "id": {
                    "type": "string"
                },
                "requirements": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/DockerRequirement"
                            },
                            {
                                "$ref": "#/definitions/SubworkflowFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/CreateFileRequirement"
                            },
                            {
                                "$ref": "#/definitions/EnvVarRequirement"
                            },
                            {
                                "$ref": "#/definitions/ScatterFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/SchemaDefRequirement"
                            },
                            {
                                "$ref": "#/definitions/ExpressionEngineRequirement"
                            }
                        ]
                    }
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "sbg:modifiedBy": {
                    "type": "string"
                },
                "sbg:revisionInfo": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGRevision"
                    }
                },
                "sbg:revision": {
                    "type": "number"
                },
                "sbg:createdBy": {
                    "type": "string"
                },
                "sbg:id": {
                    "type": "string"
                },
                "sbg:contributors": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "sbg:sbgMaintained": {
                    "type": "boolean"
                },
                "sbg:project": {
                    "type": "string"
                },
                "sbg:validationErrors": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "sbg:modifiedOn": {
                    "type": "number"
                },
                "sbg:revisionNotes": {
                    "type": "string"
                },
                "sbg:toolkit": {
                    "type": "string"
                },
                "sbg:toolkitVersion": {
                    "type": "string"
                },
                "sbg:links": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGLink"
                    }
                },
                "sbg:toolAuthor": {
                    "type": "string"
                },
                "sbg:license": {
                    "type": "string"
                },
                "sbg:categories": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "inputs",
                "outputs",
                "class",
                "baseCommand"
            ]
        },
        "CommandInputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandInputSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputEnumSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputRecordSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "sbg:category": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "CommandInputSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandInputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/CommandInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputEnumSchema"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputSchema"
                                    },
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputRecordSchema"
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "required": [
                "type"
            ]
        },
        "CommandLineBinding": {
            "type": "object",
            "properties": {
                "position": {
                    "type": "number"
                },
                "prefix": {
                    "type": "string"
                },
                "separate": {
                    "type": "boolean"
                },
                "itemSeparator": {
                    "type": ["string", "null"]
                },
                "valueFrom": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                },
                "loadContents": {
                    "type": "boolean"
                },
                "secondaryFiles": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/Expression"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        },
        "CommandInputMapSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "map"
                    ]
                },
                "values": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "values"
            ]
        },
        "CommandInputArraySchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandInputSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputEnumSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "array"
                    ]
                }
            },
            "required": [
                "items",
                "type"
            ]
        },
        "CommandInputRecordSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "record"
                    ]
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/CommandInputSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputArraySchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputRecordSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputEnumSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputMapSchema"
                            }
                        ]
                    }
                }
            },
            "required": [
                "type",
                "fields"
            ]
        },
        "CommandInputEnumSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "enum"
                    ]
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "name": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "symbols",
                "name"
            ]
        },
        "CommandOutputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandOutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "id": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "CommandOutputSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandOutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputEnumSchema"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputRecordSchema"
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "required": [
                "type"
            ]
        },
        "CommandOutputBinding": {
            "type": "object",
            "properties": {
                "glob": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "outputEval": {
                    "$ref": "#/definitions/Expression"
                },
                "sbg:inheritMetadataFrom": {
                    "type": "string"
                },
                "sbg:metadata": {
                    "type": "object",
                    "additionalProperties": {
                        "anyOf": [
                            {
                                "type": "string"
                            },
                            {
                                "$ref": "#/definitions/Expression"
                            }
                        ]
                    }
                },
                "loadContents": {
                    "type": "boolean"
                },
                "secondaryFiles": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/Expression"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        },
        "CommandOutputMapSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "map"
                    ]
                },
                "values": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "values"
            ]
        },
        "CommandOutputArraySchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandOutputSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputEnumSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "array"
                    ]
                }
            },
            "required": [
                "items",
                "type"
            ]
        },
        "CommandOutputRecordSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "record"
                    ]
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/CommandOutputSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputArraySchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputRecordSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputEnumSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputMapSchema"
                            }
                        ]
                    }
                }
            },
            "required": [
                "type",
                "fields"
            ]
        },
        "CommandOutputEnumSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "enum"
                    ]
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "type",
                "symbols"
            ]
        },
        "SBGRevision": {
            "type": "object",
            "properties": {
                "sbg:revision": {
                    "type": "number"
                },
                "sbg:modifiedBy": {
                    "type": "string"
                },
                "sbg:revisionNotes": {
                    "type": ["string", "null"]
                },
                "sbg:modifiedOn": {
                    "type": "number"
                }
            },
            "required": [
                "sbg:revision",
                "sbg:modifiedBy",
                "sbg:revisionNotes",
                "sbg:modifiedOn"
            ]
        },
        "SBGLink": {
            "type": "object",
            "properties": {
                "label": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            },
            "required": [
                "label",
                "id"
            ]
        },
        "ExpressionTool": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "ExpressionTool"
                    ]
                },
                "expression": {
                    "$ref": "#/definitions/Expression"
                },
                "id": {
                    "type": "string"
                },
                "inputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/InputParameter"
                    }
                },
                "outputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/OutputParameter"
                    }
                },
                "requirements": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/DockerRequirement"
                            },
                            {
                                "$ref": "#/definitions/SubworkflowFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/CreateFileRequirement"
                            },
                            {
                                "$ref": "#/definitions/EnvVarRequirement"
                            },
                            {
                                "$ref": "#/definitions/ScatterFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/SchemaDefRequirement"
                            },
                            {
                                "$ref": "#/definitions/ExpressionEngineRequirement"
                            }
                        ]
                    }
                },
                "hints": {
                    "type": "array",
                    "items": {}
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "sbg:modifiedBy": {
                    "type": "string"
                },
                "sbg:revisionInfo": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGRevision"
                    }
                },
                "sbg:revision": {
                    "type": "number"
                },
                "sbg:createdBy": {
                    "type": "string"
                },
                "sbg:id": {
                    "type": "string"
                },
                "sbg:contributors": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "sbg:sbgMaintained": {
                    "type": "boolean"
                },
                "sbg:project": {
                    "type": "string"
                },
                "sbg:validationErrors": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "sbg:modifiedOn": {
                    "type": "number"
                },
                "sbg:revisionNotes": {
                    "type": ["string", "null"]
                },
                "sbg:toolkit": {
                    "type": "string"
                },
                "sbg:toolkitVersion": {
                    "type": "string"
                },
                "sbg:links": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGLink"
                    }
                },
                "sbg:toolAuthor": {
                    "type": "string"
                },
                "sbg:license": {
                    "type": "string"
                },
                "sbg:categories": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "class",
                "expression",
                "inputs",
                "outputs"
            ]
        },
        "InputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/InputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/InputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "id": {
                    "type": "string"
                },
                "inputBinding": {
                    "$ref": "#/definitions/Binding"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "InputSchema": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "record"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "array"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "enum"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "map"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/InputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "record"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "array"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "enum"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "map"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/InputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "inputBinding": {
                    "$ref": "#/definitions/Binding"
                },
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/InputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/InputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "values": {
                    "type": "string"
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/InputSchema"
                    }
                }
            },
            "required": [
                "type"
            ]
        },
        "Binding": {
            "type": "object",
            "properties": {
                "loadContents": {
                    "type": "boolean"
                },
                "secondaryFiles": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/Expression"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        },
        "OutputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/OutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/OutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "id": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "Workflow": {
            "type": "object",
            "properties": {
                "inputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGWorkflowInputParameter"
                    }
                },
                "outputs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/WorkflowOutputParameter"
                    }
                },
                "class": {
                    "type": "string",
                    "enum": [
                        "Workflow"
                    ]
                },
                "steps": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/WorkflowStep"
                    }
                },
                "sbg:image_url": {
                    "type": ["string", "null"]
                },
                "sbg:canvas_y": {
                    "type": "number"
                },
                "sbg:canvas_x": {
                    "type": "number"
                },
                "sbg:canvas_zoom": {
                    "type": "number"
                },
                "id": {
                    "type": "string"
                },
                "requirements": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/DockerRequirement"
                            },
                            {
                                "$ref": "#/definitions/SubworkflowFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/CreateFileRequirement"
                            },
                            {
                                "$ref": "#/definitions/EnvVarRequirement"
                            },
                            {
                                "$ref": "#/definitions/ScatterFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/SchemaDefRequirement"
                            },
                            {
                                "$ref": "#/definitions/ExpressionEngineRequirement"
                            }
                        ]
                    }
                },
                "hints": {
                    "type": "array",
                    "items": {}
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "sbg:modifiedBy": {
                    "type": "string"
                },
                "sbg:revisionInfo": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGRevision"
                    }
                },
                "sbg:revision": {
                    "type": "number"
                },
                "sbg:createdBy": {
                    "type": "string"
                },
                "sbg:id": {
                    "type": "string"
                },
                "sbg:contributors": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "sbg:sbgMaintained": {
                    "type": "boolean"
                },
                "sbg:project": {
                    "type": "string"
                },
                "sbg:validationErrors": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "sbg:modifiedOn": {
                    "type": "number"
                },
                "sbg:revisionNotes": {
                    "type": ["string", "null"]
                },
                "sbg:toolkit": {
                    "type": "string"
                },
                "sbg:toolkitVersion": {
                    "type": "string"
                },
                "sbg:links": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/SBGLink"
                    }
                },
                "sbg:toolAuthor": {
                    "type": "string"
                },
                "sbg:license": {
                    "type": "string"
                },
                "sbg:categories": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "inputs",
                "outputs",
                "class",
                "steps"
            ]
        },
        "ScatterMethod": {
            "type": "string",
            "enum": [
                "dotproduct",
                "nested_crossproduct",
                "flat_crossproduct"
            ]
        },
        "CWLVersions": {
            "type": "string",
            "enum": [
                "sbg:draft-2"
            ]
        }
    },
    "$schema": "http://json-schema.org/draft-04/schema#"
}
