<!--
  ~ 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.
  -->

<html>
<h2>Branching</h2>
<p>
  You can use the same PCollection as input for multiple transforms without consuming the input
  or altering it.
</p>
<p>
  <b>Kata:</b> Branch out the numbers to two different transforms: one transform is multiplying
  each number by 5 and the other transform is multiplying each number by 10.
</p>
<br>
<div class="hint">
  Refer to the Beam Design Your Pipeline Guide
  <a href="https://beam.apache.org/documentation/pipelines/design-your-pipeline/#multiple-transforms-process-the-same-pcollection">
    "Multiple transforms process the same PCollection"</a> section for more information.
</div>
</html>
