#include <stdio.h>

void** func_1(  void**(**arg_pp_array[])(void**(**arg_pp)()) ) {
	printf("called: func_1\n");
	return NULL;
}

void** func_2(  void**(**arg_pp_array[])(void**(**arg_pp)()) ) {
	printf("called: func_2\n");
	return NULL;
}

int main() {
	
	void** (*p_func_1)(void**(**[])(void**(**)())) = &func_1;
	void** (*p_func_2)(void**(**[])(void**(**)())) = &func_2;
	
	void** (**pp_array[])(void**(**[])(void**(**)())) = {
		&p_func_1, &p_func_2,
	};
	void** (**((*pp_array_p)[])) (void**(**[])(void**(**)())) = {
		&pp_array,
	};
	void** (**((**pp_array_pp)[])) (void**(**[])(void**(**)())) = {
		&pp_array_p,
	};
	(**(**pp_array_pp)[0])( NULL );
	(**(**pp_array_pp)[1])( NULL );
	
	return 0;
}