/**
  * var_dump()s the instance cache
  * @since ADD MVC 0.0
  */
 public static function debug_instances()
 {
     $class = get_called_class();
     if ($class) {
         debug::var_dump(self::$instances[$class]);
     } else {
         debug::var_dump(self::$instances);
     }
 }
 /**
  * handle_exception()
  * The error handler for exceptions
  * @param Exception $e the exception to handle
  * @since ADD MVC 0.0
  */
 static function handle_exception(Exception $e)
 {
     try {
         while (ob_get_level()) {
             # Do not echo this, it is a big security risk
             ob_get_clean();
         }
         try {
             if (method_exists($e, 'handle_exception')) {
                 return $e->handle_exception();
             } else {
                 throw new Exception("Non e_add exception sub class or no handle_exception() function found for exception");
             }
         } catch (Exception $e2) {
             if ($e instanceof SmartyException) {
                 static::handle_exception(new e_smarty($e->getMessage(), array('message' => $e->getMessage(), 'code' => $e->getCode(), 'trace' => str_replace(array(add::config()->root_dir, add::config()->add_dir), array('*root_dir*', '*add_dir*'), $e->getTraceAsString()))));
             }
             if (add::content_type() == 'text/plain') {
                 die(get_class($e) . "(#" . $e->getCode() . ")\r\n\r\n" . $e->getMessage() . "\r\n\r\n" . $e->getFile() . ":" . $e->getLine() . "\r\n\r\n\r\n\r\n");
             } else {
                 if (add::is_developer()) {
                     DEFINE('add\\terminal_error\\error_message', $e->getMessage());
                     DEFINE('add\\terminal_error\\error_trace', $e->getTraceAsString());
                     DEFINE('add\\terminal_error\\error_header', get_class($e));
                     DEFINE('add\\terminal_error\\error_footer', $e->getFile() . ":" . $e->getLine());
                 } else {
                     $debug_mail_to = add::config()->developer_emails;
                     if (is_array($debug_mail_to) || is_object($debug_mail_to)) {
                         $debug_mail_to = implode(",", (array) $debug_mail_to);
                     }
                     mail($debug_mail_to, "Terminal Error: " . $e->getMessage(), $e->getTraceAsString());
                     DEFINE('add\\terminal_error\\error_message', 'An error occured<br />please contact the system administrators or go back to <a href="' . add::config()->path . '">Home</a>');
                     DEFINE('add\\terminal_error\\error_header', 'Warning!');
                     DEFINE('add\\terminal_error\\error_footer', 'Please contact the system administrators');
                     DEFINE('add\\terminal_error\\error_trace', '');
                 }
                 if (!headers_sent() && !add::include_include_file('terminal_error.php')) {
                     throw new Exception("Failed to display terminal error");
                 }
                 add::shutdown(false);
             }
         }
     } catch (Exception $e3) {
         $e1_string = "<div style='color:red'>" . get_class($e) . "(#" . $e->getCode() . ")" . $e->getMessage() . "\r\n" . $e->getFile() . ":" . $e->getLine() . "</div>";
         echo $e1_string;
         $e3_string = "<div style='color:red'>" . get_class($e3) . "(#" . $e3->getCode() . ")" . $e3->getMessage() . "\r\n" . $e3->getFile() . ":" . $e3->getLine() . "</div>";
         if ($e3_string != $e1_string) {
             echo $e3_string;
         }
         debug::var_dump($e3->getTraceAsString());
         die;
     }
 }
$encrypted3 = $encryptor3->encrypt();
debug::var_dump($encrypted3);
$encryptor4 = new my_encryptor2($encrypted3, 'wrong key');
$encrypted4 = $encryptor4->encrypt();
debug::var_dump($encrypted4);
$decryptor = my_encryptor2::from_encrypted($encrypted4, 'lololo');
$decrypted = $decryptor->string;
debug::var_dump($decrypted);
$decryptor2 = my_encryptor::from_encrypted($decrypted, 'lalala');
$decrypted2 = $decryptor2->string;
debug::var_dump($decrypted2);
$decryptor3 = my_encryptor2::from_encrypted($decrypted2);
$decrypted3 = $decryptor3->string;
debug::var_dump($decrypted3);
$decryptor4 = my_encryptor::from_encrypted($decrypted3);
$decrypted4 = $decryptor4->string;
debug::var_dump($decrypted4);
# No key
$encryptor5 = new add_encryptor('of the Great Amen', null);
try {
    debug::var_dump($encryptor5->encrypt(), $encryptor5);
} catch (Exception $e) {
    add::handle_exception($e);
}
# Invalid key
$encryptor6 = new add_encryptor('of the Great Amen', array());
try {
    debug::var_dump($encryptor6->encrypt(), $encryptor6);
} catch (Exception $e) {
    add::handle_exception($e);
}
<?php

require '../config.php';
require_once "{$C->add_dir}/init.php";
$string = 'Bryan Requinala';
$key = add_encryptor::generate_key();
$encrypted_string = add_encryptor::string_encrypt($string, $key);
$decrypted_string = add_encryptor::string_decrypt($encrypted_string, $key);
debug::var_dump($encrypted_string);
debug::var_dump($decrypted_string);
$encrypted_string = add_encryptor::string_encrypt($string, $key);
$decrypted_string = add_encryptor::string_decrypt($encrypted_string, 'asdasdasd');
debug::var_dump($encrypted_string);
debug::var_dump($decrypted_string);
 /**
  * handle_exception()
  * The error handler for exceptions
  * @param Exception $e the exception to handle
  * @since ADD MVC 0.0
  */
 static function handle_exception(Exception $e)
 {
     try {
         try {
             if (method_exists($e, 'handle_exception')) {
                 return $e->handle_exception();
             } else {
                 throw new Exception("Non e_add exception sub class or no handle_exception() function found for exception");
             }
         } catch (Exception $e2) {
             while (ob_get_level()) {
                 ob_end_clean();
             }
             if ($e instanceof SmartyException) {
                 static::handle_exception(new e_smarty($e->getMessage(), $e));
             }
             if (add::content_type() == 'text/plain') {
                 die(get_class($e) . "(#" . $e->getCode() . ")\r\n\r\n" . $e->getMessage() . "\r\n\r\n" . $e->getFile() . ":" . $e->getLine() . "\r\n\r\n\r\n\r\n");
             } else {
                 DEFINE('add\\terminal_error\\error_message', $e->getMessage());
                 DEFINE('add\\terminal_error\\error_header', get_class($e));
                 DEFINE('add\\terminal_error\\error_footer', $e->getFile() . ":" . $e->getLine());
                 if (!headers_sent() && !add::include_include_file('terminal_error.php')) {
                     throw new Exception("Failed to display terminal error");
                 }
                 add::shutdown(false);
             }
         }
     } catch (Exception $e3) {
         $e1_string = "<div style='color:red'>" . get_class($e) . "(#" . $e->getCode() . ")" . $e->getMessage() . "\r\n" . $e->getFile() . ":" . $e->getLine() . "</div>";
         echo $e1_string;
         $e3_string = "<div style='color:red'>" . get_class($e3) . "(#" . $e3->getCode() . ")" . $e3->getMessage() . "\r\n" . $e3->getFile() . ":" . $e3->getLine() . "</div>";
         if ($e3_string != $e1_string) {
             echo $e3_string;
         }
         debug::var_dump($e3->getTraceAsString());
         die;
     }
 }