<｜begin▁of▁sentence｜>### Instruction:
As a nonprofit administrator, imagine you are managing a conservation organization that uses graph theory to analyze and visualize ecological networks. You have a graph representing a tree with 5 vertices, where each non-leaf vertex corresponds to a key location in an ecosystem. You want to customize the appearance of the vertices using igraph's `AbstractCairoVertexDrawer` in order to visually highlight these key locations. Your specific task is to draw each vertex as a green filled circle with a black outline and save the resulting plot as 'custom_vertex_draw.png'.
### Response:
from igraph import Graph, plot
from igraph.drawing import AbstractCairoVertexDrawer

class CustomVertexDrawer(AbstractCairoVertexDrawer):
    def draw(self, context, vertex, vertex_shape):
        # Custom drawing code comes here
        context.arc(vertex['x'], vertex['y'], 10, 0, 2 * 3.14159)
        context.set_source_rgb(0, 1, 0)
        context.fill_preserve()
        context.set_source_rgb(0, 0, 0)
        context.stroke()

# Create a sample graph
g = Graph.Tree(5, 2)

# Create a plot with a custom layout
layout = g.layout_reingold_tilford()
vis = plot(g, layout=layout, vertex_drawer=CustomVertexDrawer(), bbox=(300, 300), margin=10)

# Save the plot to a file
vis.save('custom_vertex_draw.png')
<|EOT|>
