protected function isExempt($data, $request)
    {
        // Grab all of the exemption classes to create/execute against
        $exemptions = $this->app['config']->get('maintenancemode.exemptions', []);
        foreach($exemptions as $className)
        {
            if(class_exists($className))
            {
                $exemption = new $className($this->app);
                if($exemption instanceof MaintenanceModeExemption)
                {
                    // Run the exemption check
                    if($exemption->isExempt())
                    {
                        return true;
                    }
                }
                else
                {
                    // Class doesn't match what we're looking for
                    throw new InvalidExemption($this->app['translator']->get($this->language . '.exceptions.invalid', ['class' => $className]));
                }
            }
            else
            {
                // Where's Waldo?
                throw new ExemptionDoesNotExist($this->app['translator']->get($this->language . '.exceptions.missing', ['class' => $className]));
            }
        }

        // Check for IP via the "allow" option
        if (isset($data['allowed']) && IpUtils::checkIp($request->ip(), (array) $data['allowed'])) {
            return true;
        }

        return false;
    }