<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<svg class="railroad-diagram" width="573" height="101" viewBox="0 0 573 101" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g transform="translate(.5 .5)">
        <g fill="none" stroke="black" stroke-width="2">
            <path stroke-dasharray="5,5" d="M10 40 l30 0" />
        </g>
        <g>
            <path d="M40 40h0"></path>
            <path d="M464.5 40h0"></path>
            <path d="M40 40a10 10 0 0 0 10 -10v0a10 10 0 0 1 10 -10"></path>
            <g>
                <path d="M60 20h384.5"></path>
            </g>
            <path d="M444.5 20a10 10 0 0 1 10 10v0a10 10 0 0 0 10 10"></path>
            <path d="M40 40h20"></path>
            <g>
                <path d="M60 40h0"></path>
                <path d="M444.5 40h0"></path>
                <g class="terminal ">
                    <path d="M60 40h0"></path>
                    <path d="M114 40h0"></path>
                    <rect x="60" y="29" width="54" height="22" rx="10" ry="10"></rect>
                    <text x="87" y="44">WITH</text>
                </g>
                <path d="M114 40h10"></path>
                <path d="M124 40h10"></path>
                <g class="terminal ">
                    <path d="M134 40h0"></path>
                    <path d="M162.5 40h0"></path>
                    <rect x="134" y="29" width="28.5" height="22" rx="10" ry="10"></rect>
                    <text x="148.25" y="44">'</text>
                </g>
                <path d="M162.5 40h10"></path>
                <path d="M172.5 40h10"></path>
                <g>
                    <path d="M182.5 40h0"></path>
                    <path d="M396 40h0"></path>
                    <path d="M182.5 40h10"></path>
                    <g>
                        <path d="M192.5 40h0"></path>
                        <path d="M386 40h0"></path>
                        <g class="terminal ">
                            <path d="M192.5 40h0"></path>
                            <path d="M255 40h0"></path>
                            <rect x="192.5" y="29" width="62.5" height="22" rx="10" ry="10"></rect>
                            <text x="223.75" y="44">PARAM</text>
                        </g>
                        <path d="M255 40h10"></path>
                        <path d="M265 40h10"></path>
                        <g class="terminal ">
                            <path d="M275 40h0"></path>
                            <path d="M303.5 40h0"></path>
                            <rect x="275" y="29" width="28.5" height="22" rx="10" ry="10"></rect>
                            <text x="289.25" y="44">=</text>
                        </g>
                        <path d="M303.5 40h10"></path>
                        <path d="M313.5 40h10"></path>
                        <g class="terminal ">
                            <path d="M323.5 40h0"></path>
                            <path d="M386 40h0"></path>
                            <rect x="323.5" y="29" width="62.5" height="22" rx="10" ry="10"></rect>
                            <text x="354.75" y="44">VALUE</text>
                        </g>
                    </g>
                    <path d="M386 40h10"></path>
                    <path d="M192.5 40a10 10 0 0 0 -10 10v10a10 10 0 0 0 10 10"></path>
                    <g class="terminal ">
                        <path d="M192.5 70h82.5"></path>
                        <path d="M303.5 70h82.5"></path>
                        <rect x="275" y="59" width="28.5" height="22" rx="10" ry="10"></rect>
                        <text x="289.25" y="74">,</text>
                    </g>
                    <path d="M386 70a10 10 0 0 0 10 -10v-10a10 10 0 0 0 -10 -10"></path>
                </g>
                <path d="M396 40h10"></path>
                <path d="M406 40h10"></path>
                <g class="terminal ">
                    <path d="M416 40h0"></path>
                    <path d="M444.5 40h0"></path>
                    <rect x="416" y="29" width="28.5" height="22" rx="10" ry="10"></rect>
                    <text x="430.25" y="44">'</text>
                </g>
            </g>
            <path d="M444.5 40h20"></path>
        </g>
        <g>
            <path d="M464.5 40h0"></path>
            <path d="M533 40h0"></path>
            <path d="M464.5 40a10 10 0 0 0 10 -10v0a10 10 0 0 1 10 -10"></path>
            <g>
                <path d="M484.5 20h28.5"></path>
            </g>
            <path d="M513 20a10 10 0 0 1 10 10v0a10 10 0 0 0 10 10"></path>
            <path d="M464.5 40h20"></path>
            <g class="terminal ">
                <path d="M484.5 40h0"></path>
                <path d="M513 40h0"></path>
                <rect x="484.5" y="29" width="28.5" height="22" rx="10" ry="10"></rect>
                <text x="498.75" y="44">;</text>
            </g>
            <path d="M513 40h20"></path>
        </g>
        <path d="M 533 40 h 20 m -10 -10 v 20 m 10 -20 v 20"></path>
    </g>
    <style>
        svg {
        background-color: hsl(0,0%,100%);
        }
        path {
        stroke-width: 2;
        stroke: black;
        fill: rgba(0,0,0,0);
        }
        text {
        font: bold 14px monospace;
        text-anchor: middle;
        white-space: pre;
        }
        text.diagram-text {
        font-size: 12px;
        }
        text.diagram-arrow {
        font-size: 16px;
        }
        text.label {
        text-anchor: start;
        }
        text.comment {
        font: italic 12px monospace;
        }
        g.non-terminal text {
        /&#42;font-style: italic;&#42;/
        }
        rect {
        stroke-width: 2;
        stroke: black;
        fill: hsl(0,0%,100%);
        }
        rect.group-box {
        stroke: gray;
        stroke-dasharray: 10 5;
        fill: none;
        }
        path.diagram-text {
        stroke-width: 2;
        stroke: black;
        fill: white;
        cursor: help;
        }
        g.diagram-text:hover path.diagram-text {
        fill: #eee;
        }</style>
</svg>
