Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements; and to You under the Apache License, Version 2.0.


This file is used for tagging.
This file is not used by the build, but for tagging purposes only.
Please do not delete me.
Thank you.


