<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find_all(self, product_type, short_name, include_hidden=False):
 """Find all providers of a given product by its short name. This function will return all providers of a given product. If you want to ensure that a product's name is unique among all dependencies, you should use find_unique. Args: product_type (str):
 The type of product that we are looking for, like firmware_image, library etc. short_name (str):
 The short name of the product that we wish to find, usually its os.path.basename() include_hidden (bool):
 Return products that are hidden and not selected as visible in the depends section of this tile's module settings. This defaults to False. Returns: list of ProductInfo: A list of all of the matching products. If no matching products are found, an empty list is returned. If you want to raise a BuildError in that case use find_unique. """


        all_prods = []

        # If product_type is not return products of all types
        if product_type is None:
            for prod_dict in self._product_map.values():
                all_prods.extend([prod for prod in prod_dict.get(short_name, []) if include_hidden or not prod.hidden])

            return all_prods

        all_prods = self._product_map.get(product_type, {})
        return [prod for prod in all_prods.get(short_name, []) if include_hidden or not prod.hidden]