# Deprecated API

## Contents

- Deprecated Interfaces
- Deprecated Classes
- Deprecated Enums
- Deprecated Fields
- Deprecated Methods
- Deprecated Constructors
- Deprecated Enum Constants

- Deprecated Interfaces
  Interface and Description
  org.apache.tinkerpop.gremlin.process.computer.bulkloading.BulkLoader As of release 3.2.10, not directly replaced - consider graph provider specific bulk loading methods
  org.apache.tinkerpop.gremlin.neo4j.structure.trait.Neo4jTrait As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversalSideEffects As of release 3.3.8, not directly replaced, prefer use of `GraphTraversal.cap(String, String...)` to return the result as part of the traversal iteration.
  org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine As of release 3.2.0, replaced by `Computer`.
  org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine.Builder

- Deprecated Classes
  Class and Description
  org.apache.tinkerpop.gremlin.process.remote.traversal.AbstractRemoteTraversalSideEffects As of release 3.3.8, not directly replaced, prefer use of `GraphTraversal.cap(String, String...)` to return the result as part of the traversal iteration.
  org.apache.tinkerpop.gremlin.process.computer.bulkdumping.BulkDumperVertexProgram As of release 3.2.10, replaced by `CloneVertexProgram`.
  org.apache.tinkerpop.gremlin.process.computer.bulkloading.BulkLoaderVertexProgram As of release 3.2.10, not directly replaced - consider graph provider specific bulk loading methods
  org.apache.tinkerpop.gremlin.driver.Client.ReboundClusteredClient As of release 3.1.1-incubating, replaced by `Client.AliasClusteredClient`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialGraph As of release 3.3.3, replaced by `CredentialTraversalDsl`.
  org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversalSideEffects As of release 3.3.8, not directly replaced, prefer use of `GraphTraversal.cap(String, String...)` to return the result as part of the traversal iteration.
  org.apache.tinkerpop.gremlin.process.remote.traversal.EmbeddedRemoteTraversalSideEffects As of release 3.3.8, not directly replaced, prefer use of `GraphTraversal.cap(String, String...)` to return the result as part of the traversal iteration.
  org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0 As of release 3.2.6, not directly replaced - supported through `HaltedTraverserStrategy`.
  org.apache.tinkerpop.gremlin.process.computer.bulkloading.IncrementalBulkLoader As of release 3.2.10, not directly replaced - consider graph provider specific bulk loading methods
  org.apache.tinkerpop.gremlin.neo4j.structure.trait.MultiMetaNeo4jTrait As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.neo4j.structure.trait.NoMultiNoMetaNeo4jTrait As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.process.computer.bulkloading.OneTimeBulkLoader As of release 3.2.10, not directly replaced - consider graph provider specific bulk loading methods
  org.apache.tinkerpop.gremlin.process.remote.RemoteGraph As for release 3.2.2, replaced by `TraversalSource#withRemote(RemoteConnection)` or its overloads.
  org.apache.tinkerpop.gremlin.server.ResponseHandlerContext As of release 3.3.8, replaced by `Context`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.Builder As of release 3.2.0. Please use `Graph.traversal(Class)`.

- Deprecated Enums
  Enum and Description
  org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaCollectingBarrierStep.Consumers As of release 3.2.0, replaced by use of `NoOpBarrierStep`.

- Deprecated Fields
  Field and Description
  org.apache.tinkerpop.gremlin.driver.Tokens.ARGS_AGGREGATE_TO As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.ARGS_REBINDINGS As of release 3.1.0-incubating, replaced by `Tokens.ARGS_ALIASES`.
  org.apache.tinkerpop.gremlin.driver.Tokens.ARGS_SIDE_EFFECT As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.ARGS_SIDE_EFFECT_KEY As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.cache As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.server.Settings.AuthenticationSettings.className As of release 3.2.5, replaced by `Settings.AuthenticationSettings.authenticator`.
  org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.CONFIG_CACHE_EXPIRATION_TIME As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.CONFIG_CACHE_MAX_SIZE As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph.CONFIG_META_PROPERTIES As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph.CONFIG_MULTI_PROPERTIES As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.DEFAULT_CACHE_EXPIRATION_TIME As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.DEFAULT_CACHE_MAX_SIZE As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.ser.Serializers.DEFAULT_REQUEST_SERIALIZER As of release 3.3.5, not replaced, simply specify the exact version of the serializer to use.
  org.apache.tinkerpop.gremlin.driver.ser.Serializers.DEFAULT_RESULT_SERIALIZER As of release 3.3.5, not replaced, simply specify the exact version of the serializer to use.
  org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer.GREMLIN_CORE As of release 3.2.4, not replaced.
  org.apache.tinkerpop.gremlin.process.traversal.TraversalSource.GREMLIN_REMOTE As of release 3.3.5, replaced by `RemoteConnection.GREMLIN_REMOTE`.
  org.apache.tinkerpop.gremlin.process.traversal.TraversalSource.GREMLIN_REMOTE_CONNECTION_CLASS As of release 3.3.5, replaced by `RemoteConnection.GREMLIN_REMOTE_CONNECTION_CLASS`.
  org.apache.tinkerpop.gremlin.server.Settings.SslSettings.keyCertChainFile As of release 3.2.10, replaced by `Settings.SslSettings.keyStore`
  org.apache.tinkerpop.gremlin.server.Settings.SslSettings.keyFile As of release 3.2.10, replaced by `Settings.SslSettings.keyStore`
  org.apache.tinkerpop.gremlin.server.Settings.SslSettings.keyPassword As of release 3.2.10, replaced by `Settings.SslSettings.keyStorePassword`
  org.apache.tinkerpop.gremlin.driver.Tokens.OPS_GATHER As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.OPS_KEYS As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.server.Settings.serializedResponseTimeout As of release 3.2.1, replaced wholly by `Settings.scriptEvaluationTimeout`.
  org.apache.tinkerpop.gremlin.server.Settings.SslSettings.trustCertChainFile As of release 3.2.10, replaced by `Settings.SslSettings.trustStore`
  org.apache.tinkerpop.gremlin.driver.Tokens.VAL_AGGREGATE_TO_BULKSET As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.VAL_AGGREGATE_TO_LIST As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.VAL_AGGREGATE_TO_MAP As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.VAL_AGGREGATE_TO_NONE As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.
  org.apache.tinkerpop.gremlin.driver.Tokens.VAL_AGGREGATE_TO_SET As of release 3.3.8, not directly replaced in the protocol as side-effect retrieval after traversal iteration is not being promoted anymore as a feature.

- Deprecated Methods
  Method and Description
  org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy.Builder.addReadPartition(String) As of release 3.2.3, replaced by `PartitionStrategy.Builder.readPartitions(List)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.build() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.build() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.structure.util.star.StarGraph.Builder.build() As of release 3.3.5, replaced by `StarGraph.Builder.create()`.
  org.apache.tinkerpop.gremlin.structure.util.star.StarGraph.builder() As of release 3.3.5, replaced by `StarGraph.build()`.
  org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.close() As of release 3.2.4, not replaced as this class will not implement `AutoCloseable` in the future.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.computer(Class<? extends GraphComputer>) As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.Builder.create(Graph) As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.create(Graph) As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.create(GraphTraversalSource) As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.Builder.edgeCriterion(Traversal<Edge, ?>) As of release 3.2.2, replaced by `Builder#edges`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.edges(Traversal<Vertex, Edge>) As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.structure.Element.Exceptions.elementAlreadyRemoved(Class<? extends Element>, Object) As of release 3.1.0, not replaced - this exception is no longer enforced by the test suite.
  org.apache.tinkerpop.gremlin.structure.Graph.Exceptions.elementNotFound(Class<? extends Element>, Object)
  org.apache.tinkerpop.gremlin.structure.Graph.Exceptions.elementNotFound(Class<? extends Element>, Object, Exception)
  org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine.eval(Bytecode) As of release 3.2.7, replaced by `GremlinScriptEngine.eval(Bytecode, String)`.
  org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine.eval(Bytecode, Bindings) As of release 3.2.7, replaced by `GremlinScriptEngine.eval(Bytecode, Bindings, String)`.
  org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor.evalOpInternal(ResponseHandlerContext, Supplier<GremlinExecutor>, AbstractEvalOpProcessor.BindingSupplier) As of release 3.3.8, replaced by `AbstractEvalOpProcessor.evalOpInternal(Context, Supplier, BindingSupplier)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.getGraphComputer() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.getGraphComputer() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.hadoop.structure.HadoopConfiguration.getGraphInputFormat() As of release 3.2.0, replaced by `HadoopConfiguration.getGraphReader()`.
  org.apache.tinkerpop.gremlin.hadoop.structure.HadoopConfiguration.getGraphOutputFormat() As of release 3.2.0, replaced by `HadoopConfiguration.getGraphWriter()`.
  org.apache.tinkerpop.gremlin.server.util.DefaultGraphManager.getGraphs() As of release 3.2.5, replaced by a combination of `DefaultGraphManager.getGraphNames()` and `DefaultGraphManager.getGraph(String)`
  org.apache.tinkerpop.gremlin.server.GraphManager.getGraphs() As of release 3.2.5, replaced by a combination of `GraphManager.getGraphNames()` and `GraphManager.getGraph(String)` - note that the expectation is this method return an immutable `Map` which was not the expectation prior to 3.2.5.
  org.apache.tinkerpop.gremlin.process.remote.traversal.EmbeddedRemoteTraversal.getSideEffects() as of release 3.3.8, not directly replaced, see `Admin#getSideEffects()` for more information.
  org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraversal.getSideEffects() as of release 3.3.8, not directly replaced, see `Admin#getSideEffects()` for more information.
  org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal.getSideEffects() as of release 3.3.8, not directly replaced, see `Admin#getSideEffects()` for more information, but further note that this method is not being removed, but will not be functional for remote execution. Prefer `GraphTraversal.cap(String, String...)` to get side-effects as part of traversal iteration.
  org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph.getTrait() As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.server.util.DefaultGraphManager.getTraversalSources() As of release 3.2.5, replaced by a combination of `DefaultGraphManager.getTraversalSourceNames()` and `DefaultGraphManager.getTraversalSource(String)`
  org.apache.tinkerpop.gremlin.server.GraphManager.getTraversalSources() As of release 3.2.5, replaced by a combination of `GraphManager.getTraversalSourceNames()` and `GraphManager.getTraversalSource(String)` - note that the expectation is this method return an immutable `Map` which was not the expectation prior to 3.2.5.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.getType() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.getType() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.getWithStrategies() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.handleIterator(ResponseHandlerContext, Iterator) As of release 3.3.8, not replaced.
  org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy.instance() As of release 3.2.2, replaced by `RemoteStrategy.RemoteStrategy(RemoteConnection)` where this method should only be used by `RemoteGraph` for backward compatibility.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.instance() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.driver.Cluster.Builder.keyCertChainFile(String) As of release 3.2.10, replaced by `Cluster.Builder.keyStore`
  org.apache.tinkerpop.gremlin.driver.Cluster.Builder.keyFile(String) As of release 3.2.10, replaced by `Cluster.Builder.keyStore`
  org.apache.tinkerpop.gremlin.driver.Cluster.Builder.keyPassword(String) As of release 3.2.10, replaced by `Cluster.Builder.keyStorePassword`
  org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.makeFrame(ChannelHandlerContext, RequestMessage, MessageSerializer, boolean, List<Object>, ResponseStatusCode) As of release 3.2.2, replaced by `#makeFrame(Context, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)`.
  org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor.makeFrame(ChannelHandlerContext, RequestMessage, MessageSerializer, boolean, List<Object>, ResponseStatusCode, Map<String, Object>) As of release 3.3.8, replaced by `#makeFrame(Context, RequestMessage, MessageSerializer, boolean, List, ResponseStatusCode, Map)`.
  org.apache.tinkerpop.gremlin.process.traversal.step.util.HasContainer.makeHasContainers(String, P<?>) As of release 3.2.4. Providers should handle composite `P.and(java.util.function.Predicate<? super V>)` predicates and not rely on splitting.
  org.apache.tinkerpop.gremlin.driver.Client.rebind(Map<String, String>)
  org.apache.tinkerpop.gremlin.driver.Client.ClusteredClient.rebind(Map<String, String>)
  org.apache.tinkerpop.gremlin.driver.Client.rebind(String) As of release 3.1.0, replaced by `Client.alias(String)`
  org.apache.tinkerpop.gremlin.driver.Client.ClusteredClient.rebind(String)
  org.apache.tinkerpop.gremlin.driver.Client.ReboundClusteredClient.rebind(String)
  org.apache.tinkerpop.gremlin.process.remote.RemoteConnection.submit(Bytecode) As of release 3.2.4, replaced by `RemoteConnection.submitAsync(Bytecode)`.
  org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection.submit(Bytecode) As of release 3.2.4, replaced by `DriverRemoteConnection.submitAsync(Bytecode)`.
  org.apache.tinkerpop.gremlin.process.remote.RemoteConnection.submit(Traversal<?, E>) As of release 3.2.2, replaced by `RemoteConnection.submitAsync(Bytecode)`.
  org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection.submit(Traversal<?, E>) As of release 3.2.2, replaced by `DriverRemoteConnection.submitAsync(Bytecode)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine.toString() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.toString() As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram.Builder.traversal(Traversal.Admin<Vertex, Edge>) As of release 3.2.0, replaced by `PeerPressureVertexProgram.Builder.edges(Traversal.Admin)`
  org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram.Builder.traversal(Traversal.Admin<Vertex, Edge>) As of release 3.2.0, replaced by `PageRankVertexProgram.Builder.edges(Traversal.Admin)`
  org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram.Builder.traversal(TraversalSource, String, String, Object...) As of release 3.2.0, replaced by `PeerPressureVertexProgram.Builder.edges(Traversal.Admin)`
  org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram.Builder.traversal(TraversalSource, String, String, Object...) As of release 3.2.0, replaced by `PageRankVertexProgram.Builder.edges(Traversal.Admin)`
  org.apache.tinkerpop.gremlin.structure.Graph.Exceptions.traversalEngineNotSupported(TraversalEngine)
  org.apache.tinkerpop.gremlin.driver.Cluster.Builder.trustCertificateChainFile(String) As of release 3.2.10, replaced by `Cluster.Builder.trustStore`
  org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram.Builder.vertexCount(long) As of release 3.2.0, replaced by `PageRankVertexProgram.Builder.initialRank(Traversal.Admin)`
  org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy.Builder.vertexCriterion(Traversal<Vertex, ?>)
  org.apache.tinkerpop.gremlin.process.traversal.step.util.event.MutationListener.vertexPropertyChanged(Vertex, Property, Object, Object...) As of release 3.2.7, replaced by `MutationListener.vertexPropertyChanged(Vertex, VertexProperty, Object, Object...)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.vertices(Traversal<Vertex, Vertex>) As of release 3.2.0. Please use `Graph.traversal(Class)`.
  org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.withRemote(Configuration) As of release 3.3.5, replaced by `AnonymousTraversalSource.withRemote(Configuration)`.
  org.apache.tinkerpop.gremlin.process.traversal.TraversalSource.withRemote(Configuration) As of release 3.3.5, replaced by `AnonymousTraversalSource.withRemote(Configuration)`.
  org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine.Builder.workers(int) As of release 3.2.0. Please use `Graph.traversal(Class)`.

- Deprecated Constructors
  Constructor and Description
  org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler(Settings, GraphManager, GremlinExecutor, ScheduledExecutorService) As of release 3.2.8, replaced by `OpSelectorHandler.OpSelectorHandler(Settings, GraphManager, GremlinExecutor, ScheduledExecutorService, Channelizer)`

- Deprecated Enum Constants
  Enum Constant and Description
  org.apache.tinkerpop.gremlin.process.traversal.Order.decr As of release 3.3.4, replaced by `Order.desc`.
  org.apache.tinkerpop.gremlin.process.traversal.Order.incr As of release 3.3.4, replaced by `Order.asc`.

Copyright © 2013–2019 Apache Software Foundation. All rights reserved.