public function main() {
        $this->config->set('URLBase', $this->autoload->getURLBase());

        $this->setAndAppLibraries(); //Load All library paths, not include in try because ErrorController is not present.
        $this->loadAppFilesystem(); //Include the app filesystem structure into the loader path.

        $this->errorController = $this->getLibraryInstance('mvc', 'errorClass'); //Create error controller.
        //TODO log
        try {

            return $this->createMVCAction(); //Load Event, Plugin, Language, Routing, Auth, ACL, View, and controllers.
        } catch (ControllerException $e) { //Catch the false response from controller, not catch the problem errors.
            return $this->routingRule->getOutput()->formatResponseBad(['errorCode' => $e->getCode(),
                        'errorMessage' => $e->getMessage()]);
        } catch (RoutingException $e) { //Catch the routing not resolve.
            $respAutoClass = $this->getLibraryInstance('io', 'respAutoClass', $this->config);
            /* @var $respAutoClass ResponseInterface */
            return $respAutoClass->formatResponseBad(['errorCode' => $e->getCode(),
                        'errorMessage' => 'The URL not match with any of our defined routes']);
            //TODO translate all the texts
        } catch (Exception $e) { //Catch the All other frameworks exceptions.
            $respAutoClass = $this->getLibraryInstance('io', 'respAutoClass', $this->config);
            /* @var $respAutoClass ResponseInterface */
            return $respAutoClass->formatResponseBad(['errorCode' => $e->getCode(),
                        'errorMessage' => $e->getMessage()]);
        } catch (\Exception $e) { //Catch not controlled errors
            $this->executionErrors = 1;
            $this->messageErrors = 'File:' . $e->getFile() . ' File line:' . $e->getLine() . ', Message:' . $e->getMessage() . ', Traceroute:' . $e->getTraceAsString();
            $this->traceRouteErrors = $e->getTrace();
            $this->errorController->displayError(500);

            $respAutoClass = $this->getLibraryInstance('io', 'respAutoClass', $this->config);
            /* @var $respAutoClass ResponseInterface */
            return $respAutoClass->formatResponseBad(['errorCode' => $e->getCode(),
                        'errorMessage' => 'Internal Server Error']);
        }
    }