<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def new_fully_connected(self, name: str, output_count: int, relu=True, input_layer_name: str=None):
 """ Creates a new fully connected layer. :param name: name for the layer. :param output_count: number of outputs of the fully connected layer. :param relu: boolean flag to set if ReLu should be applied at the end of this layer. :param input_layer_name: name of the input layer for this layer. If None, it will take the last added layer of the network. """


        with tf.variable_scope(name):
            input_layer = self.__network.get_layer(input_layer_name)
            vectorized_input, dimension = self.vectorize_input(input_layer)

            weights = self.__make_var('weights', shape=[dimension, output_count])
            biases = self.__make_var('biases', shape=[output_count])
            operation = tf.nn.relu_layer if relu else tf.nn.xw_plus_b

            fc = operation(vectorized_input, weights, biases, name=name)

        self.__network.add_layer(name, layer_output=fc)