# links property file for Ant's symlink task in pom.xml:
# links to components in https://hc.apache.org/components/

current     ../components/httpcomponents-asyncclient-4.1.x/4.1.5
4.1.4       ../components/httpcomponents-asyncclient-4.1.x/4.1.4
4.1.5       ../components/httpcomponents-asyncclient-4.1.x/4.1.5
