3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Database { /** * Database Username * * @since 0.1 * @access private * @var string */ private $dbuser; /** * Database Password * * @since 0.1 * @access private * @var string */ private $dbpassword; /** * Database Name * * @since 0.1 * @access private * @var string */ private $dbname; /** * Database Host * * @since 0.1 * @access private * @var string */ private $dbhost; /** * Results of the last query made * * @since 0.1 * @access public * @var array|null */ public $last_result; /** * Saved result of the last query made * * @since 0.1 * @access private * @var string */ public $last_query; /** * JSON Response * * @since 0.1 * @access private * @var class */ private $json_response = NULL; /** * MySQLi * * @since 0.1 * @access private * @var class */ private $mysqli = NULL; /** * Exception Name * * @since 0.1 * @access private * @var string */ private $exception = "DatabaseException"; /** * MySQL affected_rows * * @since 0.1 * @access public * @var int */ public $affected_rows = 0; /** * MySQL insert_id * * @since 0.1 * @access public * @var int */ public $insert_id = 0; /** * MySQL result * * @since 0.1 * @access private * @var mysql_result */ private $result; /** * Saved info on the table column * * @since 0.1 * @access private * @var array */ private $column_info; /** * Count of rows returned by previous query * * @since 0.1 * @access private * @var int */ private $num_rows = 0; /** * Format specifiers for DB columns. Columns not listed here default to %s. * * Keys are column names, values are format types: 'ID' => '%d' * * @since 2.8.0 * @see Database::prepare() * @see Database::insert() * @see Database::update() * @see Database::delete() * @access public * @var array */ private $field_types = array(); /** * Whether to use mysql_real_escape_string * * @since 2.8.0 * @access public * @var bool */ private $real_escape = false; /** * Count of affected rows by previous query * * @since 0.71 * @access private * @var int */ public $rows_affected = 0; /** * Connects to the database server and selects a database * * PHP5 style constructor for compatibility with PHP5. Does * the actual setting up of the class properties and connection * to the database. * * @since 0.1 * * @param string $dbhost MySQL database host * @param string $dbuser MySQL database user * @param string $dbpassword MySQL database password * @param string $dbname MySQL database name */ public function __construct( $dbhost, $dbuser, $dbpassword, $dbname ) { register_shutdown_function( array( &$this, '__destruct' ) ); $this->dbuser = $dbuser; $this->dbpassword = $dbpassword; $this->dbname = $dbname; $this->dbhost = $dbhost; $this->json_response = new JSONResponse(); @$this->mysqli = new MySQLi( $this->dbhost, $this->dbuser, $this->dbpassword, $this->dbname ); if( $this->mysqli->connect_errno ){ $this->json_response->makeError( $this->exception, $this->mysqli->connect_error); $this->print_error(); } } /** * PHP5 style destructor and will run when database object is destroyed. * * @see Database::__construct() * @since 0.1 * @return bool true */ public function __destruct() { return true; } /** * Show error messaje in json format * * @since 0.1 * @return bool true */ private function print_error( ) { die( $this->json_response->getStringResponseOut() ); } /** * Kill cached query results. * * @since 0.1 * @return void */ private function flush_var() { $this->last_result = array(); $this->column_info = NULL; $this->last_query = NULL; } /** * Perform a MySQL database query, using current database connection. * * More information can be found on the codex page. * * @since 0.1 * * @param string $query Database query * @return int|false Number of rows affected/selected or false on error */ public function query( $query ) { $return_val = 0; $this->flush_var(); $this->last_query = $query; $this->result = $this->mysqli->query( $query ); // If there is an error then take note of it.. if ( $this->mysqli->errno ) { $this->json_response->makeError( $this->exception, $this->mysqli->error ); $this->print_error(); return false; } if ( preg_match( '/^\s*(create|alter|truncate|drop) /i', $query ) ) { $return_val = $this->result; } elseif ( preg_match( '/^\s*(insert|delete|update|replace) /i', $query ) ) { $this->affected_rows = $this->mysqli->affected_rows; // Take note of the insert_id if ( preg_match( '/^\s*(insert|replace) /i', $query ) ) { $this->insert_id = $this->mysqli->insert_id; } // Return number of rows affected $return_val = $this->rows_affected; } else { $i = 0; while ( $i < @$this->result->field_count ) { $this->column_info[$i] = @$this->result->fetch_field(); $i++; } $num_rows = 0; while ( $row = @$this->result->fetch_object() ) { $this->last_result[$num_rows] = $row; $num_rows++; } $this->result->free(); // Log number of rows the query returned // and return number of rows selected $this->num_rows = $num_rows; $return_val = $num_rows; } return $return_val; } /** * Retrieve one variable from the database. * * Executes a SQL query and returns the value from the SQL result. * If the SQL result contains more than one column and/or more than one row, this function returns the value in the column and row specified. * If $query is null, this function returns the value in the specified column and row from the previous SQL result. * * @since 0.1 * * @param string|null $query Optional. SQL query. Defaults to null, use the result from the previous query. * @param int $x Optional. Column of value to return. Indexed from 0. * @param int $y Optional. Row of value to return. Indexed from 0. * @return string|null Database query result (as string), or null on failure */ public function getVar( $query = null, $x = 0, $y = 0 ) { if ( $query ) $this->query( $query ); // Extract var out of cached results based x,y vals if ( !empty( $this->last_result[$y] ) ) { $values = array_values( get_object_vars( $this->last_result[$y] ) ); } // If there is a value return it else return null return ( isset( $values[$x] ) && $values[$x] !== '' ) ? $values[$x] : null; } /** * Retrieve one row from the database. * * Executes a SQL query and returns the row from the SQL result. * * @since 0.1 * * @param string|null $query SQL query. * @param int $y Optional. Row to return. Indexed from 0. * @return mixed Database query result in format specified by $output or null on failure */ public function getRow( $query = NULL, $y = 0 ) { if ( $query ){ $this->query( $query ); } else{ return NULL; } if ( !isset( $this->last_result[$y] ) ){ return NULL; } return $this->last_result[$y] ? $this->last_result[$y] : NULL; } /** * Retrieve one column from the database. * * Executes a SQL query and returns the column from the SQL result. * If the SQL result contains more than one column, this function returns the column specified. * If $query is null, this function returns the specified column from the previous SQL result. * * @since 0.71 * * @param string|null $query Optional. SQL query. Defaults to previous query. * @param int $x Optional. Column to return. Indexed from 0. * @return array Database query result. Array indexed from 0 by SQL result row number. */ public function getColumn( $query = NULL , $x = 0 ) { if ( $query ){ $this->query( $query ); } $new_array = array(); // Extract the column values for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) { $new_array[$i] = $this->getVar( NULL, $x, $i ); } return $new_array; } /** * Retrieve an entire SQL result set from the database (i.e., many rows) * * Executes a SQL query and returns the entire SQL result. * * @since 0.1 * * @param string $query SQL query. * @return mixed Database query results */ public function getResults( $query = NULL ) { if ( $query ){ $this->query( $query ); } else{ return null; } return $this->last_result; } /** * Retrieve column metadata from the last query. * * @since 0.71 * * @param string $info_type Optional. Type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill * @param int $col_offset Optional. 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type * @return mixed Column Results */ public function getColumnInfo( $info_type = 'name', $column_offset = -1 ) { if ( $this->column_info ) { if ( $column_offset == -1 ) { $i = 0; $new_array = array(); foreach( (array) $this->column_info as $col ) { $new_array[$i] = $col->{$info_type}; $i++; } return $new_array; } else { return $this->column_info[$column_offset]->{$info_type}; } } } /** * Helper function for insert and replace. * * Runs an insert or replace query based on $type argument. * * @access private * @since 3.0.0 * @see Database::prepare() * @see Database::$field_types * * @param string $table table name * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in Database::$field_types. * @param string $type Optional. What type of operation is this? INSERT or REPLACE. Defaults to INSERT. * @return int|false The number of rows affected, or false on error. */ private function _insert_replace_helper( $table, $data, $format = NULL, $type = 'INSERT' ) { if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ) ) ) return false; $formats = $format = (array) $format; $fields = array_keys( $data ); $formatted_fields = array(); foreach ( $fields as $field ) { if ( !empty( $format ) ) $form = ( $form = array_shift( $formats ) ) ? $form : $format[0]; elseif ( isset( $this->field_types[$field] ) ) $form = $this->field_types[$field]; else $form = '%s'; $formatted_fields[] = $form; } $sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES (" . implode( ",", $formatted_fields ) . ")"; return $this->query( $this->prepare( $sql, $data ) ); } /** * Prepares a SQL query for safe execution. Uses sprintf()-like syntax. * * The following directives can be used in the query format string: * %d (integer) * %f (float) * %s (string) * %% (literal percentage sign - no argument needed) * * All of %d, %f, and %s are to be left unquoted in the query string and they need an argument passed for them. * Literals (%) as parts of the query must be properly written as %%. * * This function only supports a small subset of the sprintf syntax; it only supports %d (integer), %f (float), and %s (string). * Does not support sign, padding, alignment, width or precision specifiers. * Does not support argument numbering/swapping. * * May be called like {@link http://php.net/sprintf sprintf()} or like {@link http://php.net/vsprintf vsprintf()}. * * Both %d and %s should be left unquoted in the query string. * * <code> * Database::prepare( "SELECT * FROM `table` WHERE `column` = %s AND `field` = %d", 'foo', 1337 ) * Database::prepare( "SELECT DATE_FORMAT(`field`, '%%c') FROM `table` WHERE `column` = %s", 'foo' ); * </code> * * @link http://php.net/sprintf Description of syntax. * @since 2.3.0 * * @param string $query Query statement with sprintf()-like placeholders * @param array|mixed $args The array of variables to substitute into the query's placeholders if being called like * {@link http://php.net/vsprintf vsprintf()}, or the first variable to substitute into the query's placeholders if * being called like {@link http://php.net/sprintf sprintf()}. * @param mixed $args,... further variables to substitute into the query's placeholders if being called like * {@link http://php.net/sprintf sprintf()}. * @return null|false|string Sanitized query string, null if there is no query, false if there is an error and string * if there was something to prepare */ function prepare( $query = NULL ) { // ( $query, *$args ) if ( is_null( $query ) ) return; $args = func_get_args(); array_shift( $args ); // If args were passed as an array (as in vsprintf), move them up if ( isset( $args[0] ) && is_array($args[0]) ) $args = $args[0]; $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting $query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s array_walk( $args, array( &$this, 'escape_by_ref' ) ); return @vsprintf( $query, $args ); } /** * Insert a row into a table. * * <code> * Database::insert( 'table', array( 'column' => 'foo', 'field' => 'bar' ) ) * Database::insert( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) ) * </code> * * @since 2.5.0 * @see Database::prepare() * @see Database::$field_types * * @param string $table table name * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in Database::$field_types. * @return int|false The number of rows inserted, or false on error. */ public function insert( $table, $data, $format = NULL ) { return $this->_insert_replace_helper( $table, $data, $format, 'INSERT' ); } /** * Replace a row into a table. * * <code> * Database::replace( 'table', array( 'column' => 'foo', 'field' => 'bar' ) ) * Database::replace( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( '%s', '%d' ) ) * </code> * * @since 3.0.0 * @see Database::prepare() * @see Database::$field_types * * @param string $table table name * @param array $data Data to insert (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array|string $format Optional. An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in Database::$field_types. * @return int|false The number of rows affected, or false on error. */ function replace( $table, $data, $format = null ) { return $this->_insert_replace_helper( $table, $data, $format, 'REPLACE' ); } /** * Update a row in the table * * <code> * Database::update( 'table', array( 'column' => 'foo', 'field' => 'bar' ), array( 'ID' => 1 ) ) * Database::update( 'table', array( 'column' => 'foo', 'field' => 1337 ), array( 'ID' => 1 ), array( '%s', '%d' ), array( '%d' ) ) * </code> * * @since 2.5.0 * @see Database::prepare() * @see Database::$field_types * * @param string $table table name * @param array $data Data to update (in column => value pairs). Both $data columns and $data values should be "raw" (neither should be SQL escaped). * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw". * @param array|string $format Optional. An array of formats to be mapped to each of the values in $data. If string, that format will be used for all of the values in $data. * A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $data will be treated as strings unless otherwise specified in Database::$field_types. * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings. * @return int|false The number of rows updated, or false on error. */ public function update( $table, $data, $where, $format = null, $where_format = null ) { if ( ! is_array( $data ) || ! is_array( $where ) ) return false; $formats = $format = (array) $format; $bits = $wheres = array(); foreach ( (array) array_keys( $data ) as $field ) { if ( !empty( $format ) ) $form = ( $form = array_shift( $formats ) ) ? $form : $format[0]; elseif ( isset($this->field_types[$field]) ) $form = $this->field_types[$field]; else $form = '%s'; $bits[] = "`$field` = {$form}"; } $where_formats = $where_format = (array) $where_format; foreach ( (array) array_keys( $where ) as $field ) { if ( !empty( $where_format ) ) $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0]; elseif ( isset( $this->field_types[$field] ) ) $form = $this->field_types[$field]; else $form = '%s'; $wheres[] = "`$field` = {$form}"; } $sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres ); return $this->query( $this->prepare( $sql, array_merge( array_values( $data ), array_values( $where ) ) ) ); } /** * Delete a row in the table * * <code> * Database::delete( 'table', array( 'ID' => 1 ) ) * Database::delete( 'table', array( 'ID' => 1 ), array( '%d' ) ) * </code> * * @since 0.1 * * @param string $table table name * @param array $where A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be "raw". * @param array|string $where_format Optional. An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where. A format is one of '%d', '%f', '%s' (integer, float, string). If omitted, all values in $where will be treated as strings unless otherwise specified in Database::$field_types. * @return int|false The number of rows updated, or false on error. */ public function delete( $table, $where, $where_format = null ) { if ( ! is_array( $where ) ) return false; $bits = $wheres = array(); $where_formats = $where_format = (array) $where_format; foreach ( array_keys( $where ) as $field ) { if ( !empty( $where_format ) ) { $form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0]; } elseif ( isset( $this->field_types[ $field ] ) ) { $form = $this->field_types[ $field ]; } else { $form = '%s'; } $wheres[] = "$field = $form"; } $sql = "DELETE FROM $table WHERE " . implode( ' AND ', $wheres ); return $this->query( $this->prepare( $sql, $where ) ); } /** * Escapes content by reference for insertion into the database, for security * * @since 0.1 * @param string $string to escape * @return void */ public function escape_by_ref( &$string ) { $string = $this->_real_escape( $string ); } /** * Real escape, using mysql_real_escape_string() or addslashes() * * @see addslashes() * @since 0.1 * @access private * * @param string $string to escape * @return string escaped */ public function _real_escape( $string ) { if ( $this->real_escape ){ return $this->mysqli->real_escape_string( $string ); } else{ return addslashes( $string ); } } } ?>

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0090.00918.06
8.3.50.0130.00822.76
8.3.40.0120.00318.54
8.3.30.0040.01119.22
8.3.20.0080.00020.48
8.3.10.0080.00023.63
8.3.00.0050.00319.25
8.2.180.0090.00616.75
8.2.170.0120.00922.96
8.2.160.0150.00020.43
8.2.150.0040.00424.18
8.2.140.0080.00024.66
8.2.130.0080.00026.16
8.2.120.0070.00021.10
8.2.110.0090.00022.10
8.2.100.0120.00317.70
8.2.90.0040.00819.00
8.2.80.0030.00717.97
8.2.70.0030.00717.48
8.2.60.0040.00417.80
8.2.50.0040.00418.07
8.2.40.0060.00319.89
8.2.30.0070.00017.97
8.2.20.0040.00417.59
8.2.10.0040.00418.01
8.2.00.0000.00817.75
8.1.280.0000.01425.92
8.1.270.0030.00623.97
8.1.260.0040.00426.35
8.1.250.0050.00328.09
8.1.240.0030.00722.17
8.1.230.0120.00019.20
8.1.220.0030.00617.74
8.1.210.0060.00318.77
8.1.200.0070.00617.23
8.1.190.0040.00417.11
8.1.180.0000.00818.10
8.1.170.0000.00818.70
8.1.160.0000.00821.97
8.1.150.0050.00318.81
8.1.140.0030.00517.41
8.1.130.0030.00317.82
8.1.120.0050.00217.55
8.1.110.0050.00317.48
8.1.100.0020.00917.52
8.1.90.0020.00517.50
8.1.80.0040.00417.50
8.1.70.0000.00817.42
8.1.60.0030.00617.62
8.1.50.0090.00017.54
8.1.40.0000.00817.52
8.1.30.0060.00317.68
8.1.20.0080.00017.56
8.1.10.0050.00317.55
8.1.00.0000.00817.32
8.0.300.0030.00518.77
8.0.290.0050.00216.63
8.0.280.0040.00418.39
8.0.270.0000.00717.16
8.0.260.0040.00417.28
8.0.250.0040.00416.96
8.0.240.0040.00416.88
8.0.230.0000.00916.87
8.0.220.0040.00416.91
8.0.210.0000.00716.94
8.0.200.0000.00816.94
8.0.190.0000.00716.87
8.0.180.0070.00016.88
8.0.170.0060.00316.94
8.0.160.0040.00416.97
8.0.150.0000.00916.74
8.0.140.0040.00416.84
8.0.130.0030.00313.34
8.0.120.0000.00816.93
8.0.110.0080.00016.81
8.0.100.0080.00016.80
8.0.90.0040.00416.81
8.0.80.0070.01816.90
8.0.70.0000.00816.91
8.0.60.0000.00816.94
8.0.50.0030.00516.98
8.0.30.0130.00617.11
8.0.20.0130.00917.40
8.0.10.0040.00417.02
8.0.00.0070.01116.73
7.4.330.0000.00515.00
7.4.320.0000.00616.55
7.4.300.0000.00616.52
7.4.290.0000.00816.49
7.4.280.0030.00616.63
7.4.270.0030.00516.66
7.4.260.0000.00716.50
7.4.250.0000.00816.51
7.4.240.0020.00516.54
7.4.230.0000.00716.61
7.4.220.0110.00716.62
7.4.210.0040.01116.57
7.4.200.0040.00416.44
7.4.160.0170.00616.47
7.4.150.0100.01017.40
7.4.140.0060.01217.86
7.4.130.0130.00616.56
7.4.120.0070.01016.41
7.4.110.0140.00416.38
7.4.100.0070.01016.41
7.4.90.0120.01216.62
7.4.80.0090.00919.39
7.4.70.0070.01016.37
7.4.60.0140.00316.66
7.4.50.0040.00416.57
7.4.40.0030.01516.65
7.4.30.0110.00516.61
7.4.10.0030.01314.63
7.4.00.0070.01115.05
7.3.330.0050.00313.18
7.3.320.0000.00513.18
7.3.310.0000.00816.21
7.3.300.0030.00316.28
7.3.290.0040.01116.32
7.3.280.0110.00616.29
7.3.270.0150.00317.40
7.3.260.0100.01016.23
7.3.240.0140.00316.34
7.3.230.0100.01416.50
7.3.210.0140.00316.41
7.3.200.0130.00319.39
7.3.190.0070.01016.43
7.3.180.0100.00716.55
7.3.170.0030.01316.31
7.3.160.0130.00316.49
7.3.130.0070.01014.79
7.3.120.0060.01214.87
7.3.110.0110.00714.84
7.3.100.0040.01114.68
7.3.90.0080.00414.97
7.3.80.0000.01614.75
7.3.70.0070.00714.84
7.3.60.0070.00714.82
7.3.50.0070.01014.71
7.3.40.0090.00914.59
7.3.30.0040.01114.60
7.3.20.0000.01216.39
7.3.10.0000.01516.70
7.3.00.0050.00716.32
7.2.330.0120.00616.24
7.2.320.0100.00716.68
7.2.310.0140.00516.32
7.2.300.0100.00716.58
7.2.290.0060.01216.60
7.2.260.0040.01814.99
7.2.250.0030.01615.13
7.2.240.0130.00314.96
7.2.230.0030.01014.95
7.2.220.0030.01714.99
7.2.210.0070.00414.98
7.2.200.0050.00515.05
7.2.190.0000.01215.09
7.2.180.0070.01014.94
7.2.170.0070.00314.97
7.2.160.0000.01214.74
7.2.150.0070.01016.85
7.2.140.0140.00316.75
7.2.130.0030.00816.70
7.2.120.0040.00716.63
7.2.110.0060.00616.59
7.2.100.0040.00616.68
7.2.90.0050.01216.54
7.2.80.0110.00316.67
7.2.70.0040.00916.78
7.2.60.0060.00816.67
7.2.50.0030.01216.59
7.2.40.0090.00316.56
7.2.30.0060.00516.86
7.2.20.0010.01216.74
7.2.10.0050.01116.54
7.2.00.0060.00617.48
7.1.330.0090.00615.83
7.1.320.0070.01115.60
7.1.310.0030.00915.30
7.1.300.0070.01115.55
7.1.290.0060.00615.66
7.1.280.0040.00415.66
7.1.270.0100.00315.31
7.1.260.0090.00615.41
7.1.250.0020.00915.48
7.1.240.0070.00615.60
7.1.230.0020.01115.42
7.1.220.0030.00915.48
7.1.210.0070.00615.65
7.1.200.0060.00815.57
7.1.190.0050.00815.54
7.1.180.0090.00715.55
7.1.170.0050.00915.53
7.1.160.0040.00815.42
7.1.150.0080.00615.59
7.1.140.0020.01215.62
7.1.130.0050.00815.54
7.1.120.0080.00615.52
7.1.110.0090.00515.62
7.1.100.0040.00816.33
7.1.90.0050.00715.57
7.1.80.0060.00615.47
7.1.70.0050.00816.04
7.1.60.0060.01116.83
7.1.50.0080.00916.08
7.1.40.0060.00315.60
7.1.30.0060.00715.62
7.1.20.0060.00815.61
7.1.10.0040.01215.34
7.1.00.0030.03017.81
7.0.330.0020.01215.23
7.0.320.0110.00215.16
7.0.310.0060.00715.26
7.0.300.0050.00915.24
7.0.290.0060.00615.15
7.0.280.0060.00714.99
7.0.270.0080.00215.06
7.0.260.0030.00915.29
7.0.250.0070.00515.24
7.0.240.0030.01015.28
7.0.230.0030.00815.31
7.0.220.0120.00115.28
7.0.210.0060.00814.93
7.0.200.0110.00615.15
7.0.190.0020.01415.19
7.0.180.0050.00515.16
7.0.170.0060.00615.03
7.0.160.0030.01315.17
7.0.150.0050.00915.09
7.0.140.0030.03317.49
7.0.130.0050.00815.31
7.0.120.0050.01115.27
7.0.110.0050.00915.17
7.0.100.0110.02816.97
7.0.90.0110.01716.89
7.0.80.0120.02716.83
7.0.70.0110.03216.81
7.0.60.0040.02816.84
7.0.50.0060.03016.98
7.0.40.0050.03115.46
7.0.30.0070.03215.47
7.0.20.0030.03115.42
7.0.10.0050.03515.55
7.0.00.0080.03215.54
5.6.400.0120.00314.02
5.6.390.0100.00714.26
5.6.380.0050.00713.85
5.6.370.0060.00814.15
5.6.360.0070.01014.03
5.6.350.0030.00814.31
5.6.340.0050.00814.40
5.6.330.0060.00814.23
5.6.320.0050.00714.49
5.6.310.0020.01014.21
5.6.300.0030.00814.11
5.6.290.0080.00714.00
5.6.280.0040.01014.02
5.6.270.0050.00914.12
5.6.260.0020.00714.20
5.6.250.0020.02416.47
5.6.240.0060.03116.26
5.6.230.0130.02216.33
5.6.220.0110.02116.35
5.6.210.0080.02216.32
5.6.200.0040.02016.44
5.6.190.0090.03216.43
5.6.180.0060.03116.42
5.6.170.0090.01916.58
5.6.160.0070.02016.36
5.6.150.0080.03116.42
5.6.140.0040.03516.44
5.6.130.0070.01916.44
5.6.120.0070.03516.45
5.6.110.0050.03416.58
5.6.100.0070.03516.48
5.6.90.0050.03516.46
5.6.80.0070.01816.28
5.6.70.0080.03116.13
5.6.60.0090.02716.18
5.6.50.0050.02916.20
5.6.40.0060.03216.01
5.6.30.0060.03316.37
5.6.20.0090.03116.12
5.6.10.0070.02916.29
5.6.00.0080.01716.30
5.5.380.0040.02715.31
5.5.370.0080.02815.19
5.5.360.0100.02215.25
5.5.350.0090.02815.26
5.5.340.0040.03115.45
5.5.330.0060.02415.42
5.5.320.0080.03115.35
5.5.310.0050.03215.36
5.5.300.0040.02615.50
5.5.290.0070.03115.47
5.5.280.0070.02815.28
5.5.270.0040.03615.45
5.5.260.0040.02915.38
5.5.250.0090.02515.35
5.5.240.0060.03415.11
5.5.230.0060.03415.09
5.5.220.0050.02815.10
5.5.210.0060.02215.15
5.5.200.0060.02715.24
5.5.190.0050.03315.15
5.5.180.0080.02915.12
5.5.170.0020.00712.65
5.5.160.0040.03315.09
5.5.150.0060.03115.14
5.5.140.0070.02915.15
5.5.130.0040.02015.22
5.5.120.0070.03615.21
5.5.110.0080.01715.13
5.5.100.0050.03115.17
5.5.90.0090.02715.08
5.5.80.0020.02915.07
5.5.70.0090.02215.08
5.5.60.0070.01615.16
5.5.50.0110.02115.11
5.5.40.0020.01915.11
5.5.30.0020.02315.15
5.5.20.0090.02215.16
5.5.10.0040.02115.03
5.5.00.0060.02915.16
5.4.450.0060.02813.83
5.4.440.0050.02113.90
5.4.430.0070.02013.84
5.4.420.0020.02113.94
5.4.410.0070.01813.82
5.4.400.0050.03213.68
5.4.390.0070.01413.71
5.4.380.0010.02113.76
5.4.370.0070.02613.66
5.4.360.0060.02913.74
5.4.350.0070.02813.70
5.4.340.0030.03013.66
5.4.330.0070.00511.05
5.4.320.0080.02913.68
5.4.310.0070.02713.72
5.4.300.0020.01913.71
5.4.290.0050.02913.76
5.4.280.0040.01913.80
5.4.270.0050.02613.74
5.4.260.0060.02413.70
5.4.250.0080.02613.71
5.4.240.0060.02213.61
5.4.230.0050.03113.81
5.4.220.0030.03113.74
5.4.210.0060.02813.76
5.4.200.0090.02013.55
5.4.190.0060.01813.75
5.4.180.0060.01813.72
5.4.170.0030.01913.59
5.4.160.0060.01513.78
5.4.150.0040.02213.67
5.4.140.0070.02612.87
5.4.130.0060.01712.85
5.4.120.0030.02112.84
5.4.110.0030.02512.81
5.4.100.0070.01412.86
5.4.90.0050.02612.77
5.4.80.0080.01612.88
5.4.70.0050.02712.70
5.4.60.0060.01812.86
5.4.50.0070.01912.72
5.4.40.0070.01412.77
5.4.30.0060.02812.73
5.4.20.0070.01812.85
5.4.10.0070.02712.83
5.4.00.0080.01512.60

preferences:
45.28 ms | 401 KiB | 5 Q