3v4l.org

run code in 300+ PHP versions simultaneously
<?php error_reporting(E_ALL); ini_set('display_errors', 1); ini_set("memory_limit", "768M"); // Get the URL and depth from POST request $url = isset($_POST['url']) ? $_POST['url'] : ''; $depth = isset($_POST['depth']) ? $_POST['depth'] : 0; $maxPages = isset($_POST['max_pages']) ? $_POST['max_pages'] : 0; // Generate a random 8-digit number for cache folder naming $randomNumber = rand(10000000, 99999999); $cacheFolder = '/var/www/html/' . $randomNumber . '/'; // Set date and time for crawl start $crawlStartTime = date('d-m-y h:i:s'); /* // Flush some information to the browser header('Content-type: text/html; charset=utf-8'); function flushOutput($message) { echo $message; ob_flush(); flush(); usleep(400000); } echo str_pad('', 4096); flushOutput("Crawl $randomNumber initiated at "); flushOutput("$crawlStartTime<br>"); flushOutput("Master URL: $url <br>Depth: $depth"); flushOutput("Maximum Pages: $maxPages<hr><br>"); flushOutput("<br>"); flushOutput("Crawling in progress. Do not close this window...<br><br>"); */ // Create the cache folder if (!is_dir($cacheFolder) && !mkdir($cacheFolder, 0777, true)) { echo "Check directory permissions and try again."; die('Failed to create cache folder: ' . $cacheFolder); } function scrapeWebPage($url, &$data, &$visitedUrls, $depth, &$pagesCrawled, $cacheFolder, $maxPages) { if ($depth <= 0 || in_array($url, $visitedUrls) || $pagesCrawled >= $maxPages) { usleep(1000); // Slow down requests 0.001s return; // Skip already visited URLs, reach max depth, or exceed page limit } $visitedUrls[] = $url; // Add the current URL to the visited list if (!filter_var($url, FILTER_VALIDATE_URL)) { usleep(2000); // Slow down requests 0.002s return; // Skip invalid URLs } // Check the size of the file before retrieving its content $headers = get_headers($url, 1); if (isset($headers['Content-Length']) && $headers['Content-Length'] > 5 * 1024 * 1024) { usleep(1000); // Slow down requests 0.001s return; // Skip files larger than 5MB } $cacheFile = $cacheFolder . md5($url) . '.html'; if (file_exists($cacheFile)) { $data .= file_get_contents($cacheFile); // Retrieve data from cache usleep(1000); // Slow down requests 0.001s return; // Skip scraping if data is cached } $html = file_get_contents($url); // add @ to suppress errors here if ($html === false) { usleep(1000); // Slow down requests 0.001s return; // Skip if failed to retrieve HTML content } $doc = new DOMDocument(); libxml_use_internal_errors(true); // Suppress HTML parsing errors $doc->loadHTML($html); libxml_clear_errors(); $pagesCrawled++; // Increment the count of crawled pages // Extract and store the scraped data $title = html_entity_decode($doc->getElementsByTagName('title')->item(0)->textContent); $size = strlen($html); $scriptTag = $doc->getElementsByTagName('script')->length > 0 ? "Yes" : "No"; // Extract meta tags $metaDescription = 'none'; $metaKeywords = 'none'; foreach ($doc->getElementsByTagName('meta') as $tag) { if ($tag->getAttribute('name') == 'description') { $metaDescription = $tag->getAttribute('content'); } if ($tag->getAttribute('name') == 'keywords') { $metaKeywords = $tag->getAttribute('content'); } } // Store the scraped data in the cache $fileContent = sprintf( '<div name="%s"><h3 name="title">%s</h3><a name="URL" href="%s">%s</a><p name="scriptTag">%s</p><p name="size">%d</p><p name="meta description">%s</p><p name="meta keywords">%s</p><p name="dateStamp">%s</p></div><hr>', $url, htmlentities($title), $url, $url, $scriptTag, $size, htmlentities($metaDescription), htmlentities($metaKeywords), date('ymd') ); file_put_contents($cacheFile, $fileContent, FILE_APPEND); // Append the data to the file $data .= $fileContent; // Append the scraped data to the output $depth--; // Decrement the depth parameter // Crawl the links on the current page foreach ($doc->getElementsByTagName('a') as $linkTag) { $linkUrl = $linkTag->getAttribute('href'); if (!empty($linkUrl)) { $linkUrl = (strpos($linkUrl, 'http') === 0) ? $linkUrl : resolveUrl($url, $linkUrl); scrapeWebPage($linkUrl, $data, $visitedUrls, $depth, $pagesCrawled, $cacheFolder, $maxPages); // Recursive call } } } function resolveUrl($baseUrl, $relativeUrl) { // If the relative URL is already absolute, return it if (filter_var($relativeUrl, FILTER_VALIDATE_URL)) { return $relativeUrl; } // Parse the base URL to get its components $baseParts = parse_url($baseUrl); // If the relative URL starts with a '/', it is relative to the domain if (strpos($relativeUrl, '/') === 0) { return $baseParts['scheme'] . '://' . $baseParts['host'] . $relativeUrl; } // Parse the base path and ensure it ends with a '/' $basePath = isset($baseParts['path']) ? rtrim(dirname($baseParts['path']), '/') . '/' : '/'; // Return the resolved URL return $baseParts['scheme'] . '://' . $baseParts['host'] . $basePath . ltrim($relativeUrl, '/'); } $data = ''; $visitedUrls = []; $pagesCrawled = 0; // Initialize the count of crawled pages scrapeWebPage($url, $data, $visitedUrls, $depth, $pagesCrawled, $cacheFolder, $maxPages); $fileName = "crawl" . $randomNumber; $mergedData = ''; // Remove the cache folder if (is_dir($cacheFolder)) { $files = glob($cacheFolder . '*'); foreach ($files as $file) { if (is_file($file)) { $mergedData .= file_get_contents($file); unlink($file); // Delete the cached file } } rmdir($cacheFolder); // Delete the cache folder } // Split the merged data into chunks $maxSize = 1048500; // <1MB $chunks = []; $currentChunk = ''; $currentSize = 0; // Populate the chunks array foreach (explode("\n", $mergedData) as $line) { $lineSize = strlen($line) + 1; // +1 for the newline character if ($currentSize + $lineSize > $maxSize) { $chunks[] = $currentChunk; // Save the current chunk $currentChunk = $line; // Start a new chunk $currentSize = $lineSize; // Reset the current size } else { $currentChunk .= $line . "\n"; // Append to the current chunk $currentSize += $lineSize; // Update the current size } } // Add the last chunk if it exists if ($currentChunk !== '') { $chunks[] = $currentChunk; } // Save each chunk in separate output files if (count($chunks) === 1) { // Only one chunk, use the base filename $chunkFileName = 'raw/' . $fileName . '.html'; // Specify the 'raw' directory file_put_contents($chunkFileName, $chunks[0]); echo "<hr>Crawl complete<br>Created file: <a href='/$chunkFileName'>$chunkFileName</a><br>"; // List the created file } else { // Multiple chunks, use the part naming convention foreach ($chunks as $index => $chunk) { $chunkFileName = 'raw/' . $fileName . '_part' . ($index + 1) . '.html'; // Specify the 'raw' directory file_put_contents($chunkFileName, $chunk); echo "<hr>Crawl complete<br>Created file: <a href='/$chunkFileName'>$chunkFileName</a><br>"; // List the created files } } echo "Pages Crawled: <b> $pagesCrawled </b><br>It is now safe to close this window."; ?> <?php error_reporting(E_ALL); ini_set('display_errors', 1); ini_set("memory_limit", "768M"); // Get the URL and depth from POST request $url = $_POST['url'] ?? ''; $depth = $_POST['depth'] ?? 0; $maxPages = $_POST['max_pages'] ?? 0; // Generate a random 8-digit number for cache folder naming $randomNumber = rand(10000000, 99999999); $cacheFolder = '/var/www/html/' . $randomNumber . '/'; // Set date and time for crawl start $crawlStartTime = date('d-m-y h:i:s'); // Flush some information to the browser header('Content-type: text/html; charset=utf-8'); function flushOutput($message) { echo $message; ob_flush(); flush(); usleep(400000); } echo str_pad('', 4096); flushOutput("Crawl $randomNumber initiated at "); flushOutput("$crawlStartTime<br>"); flushOutput("Master URL: $url <br>Depth: $depth"); flushOutput("Maximum Pages: $maxPages<hr><br>"); flushOutput("<br>"); flushOutput("Crawling in progress. Do not close this window...<br><br>"); // Create the cache folder if (!is_dir($cacheFolder) && !mkdir($cacheFolder, 0777, true)) { echo "Check directory permissions and try again."; die('Failed to create cache folder: ' . $cacheFolder); } function scrapeWebPage($url, &$data, &$visitedUrls, $depth, &$pagesCrawled, $cacheFolder, $maxPages) { if ($depth <= 0 || in_array($url, $visitedUrls) || $pagesCrawled >= $maxPages) { usleep(1000); // Slow down requests 0.001s return; // Skip already visited URLs, reach max depth, or exceed page limit } $visitedUrls[] = $url; // Add the current URL to the visited list if (!filter_var($url, FILTER_VALIDATE_URL)) { usleep(2000); // Slow down requests 0.002s return; // Skip invalid URLs } // Check the size of the file before retrieving its content $headers = get_headers($url, 1); if (isset($headers['Content-Length']) && $headers['Content-Length'] > 5 * 1024 * 1024) { usleep(1000); // Slow down requests 0.001s return; // Skip files larger than 5MB } $cacheFile = $cacheFolder . md5($url) . '.html'; if (file_exists($cacheFile)) { $data .= file_get_contents($cacheFile); // Retrieve data from cache usleep(1000); // Slow down requests 0.001s return; // Skip scraping if data is cached } $html = file_get_contents($url); // add @ to suppress errors here if ($html === false) { usleep(1000); // Slow down requests 0.001s return; // Skip if failed to retrieve HTML content } $doc = new DOMDocument(); libxml_use_internal_errors(true); // Suppress HTML parsing errors $doc->loadHTML($html); libxml_clear_errors(); $pagesCrawled++; // Increment the count of crawled pages // Extract and store the scraped data $title = html_entity_decode($doc->getElementsByTagName('title')->item(0)->textContent); $size = strlen($html); $scriptTag = $doc->getElementsByTagName('script')->length > 0 ? "Yes" : "No"; // Extract meta tags $metaDescription = 'none'; $metaKeywords = 'none'; foreach ($doc->getElementsByTagName('meta') as $tag) { if ($tag->getAttribute('name') == 'description') { $metaDescription = $tag->getAttribute('content'); } if ($tag->getAttribute('name') == 'keywords') { $metaKeywords = $tag->getAttribute('content'); } } // Store the scraped data in the cache $fileContent = sprintf( '<div name="%s"><h3 name="title">%s</h3><a name="URL" href="%s">%s</a><p name="scriptTag">%s</p><p name="size">%d</p><p name="meta description">%s</p><p name="meta keywords">%s</p><p name="dateStamp">%s</p></div><hr>', $url, htmlentities($title), $url, $url, $scriptTag, $size, htmlentities($metaDescription), htmlentities($metaKeywords), date('ymd') ); file_put_contents($cacheFile, $fileContent, FILE_APPEND); // Append the data to the file $data .= $fileContent; // Append the scraped data to the output $depth--; // Decrement the depth parameter // Crawl the links on the current page foreach ($doc->getElementsByTagName('a') as $linkTag) { $linkUrl = $linkTag->getAttribute('href'); if (!empty($linkUrl)) { $linkUrl = (strpos($linkUrl, 'http') === 0) ? $linkUrl : resolveUrl($url, $linkUrl); scrapeWebPage($linkUrl, $data, $visitedUrls, $depth, $pagesCrawled, $cacheFolder, $maxPages); // Recursive call } } } function resolveUrl($baseUrl, $relativeUrl) { // If the relative URL is already absolute, return it if (filter_var($relativeUrl, FILTER_VALIDATE_URL)) { return $relativeUrl; } // Parse the base URL to get its components $baseParts = parse_url($baseUrl); // If the relative URL starts with a '/', it is relative to the domain if (strpos($relativeUrl, '/') === 0) { return $baseParts['scheme'] . '://' . $baseParts['host'] . $relativeUrl; } // Parse the base path and ensure it ends with a '/' $basePath = isset($baseParts['path']) ? rtrim(dirname($baseParts['path']), '/') . '/' : '/'; // Return the resolved URL return $baseParts['scheme'] . '://' . $baseParts['host'] . $basePath . ltrim($relativeUrl, '/'); } $data = ''; $visitedUrls = []; $pagesCrawled = 0; // Initialize the count of crawled pages scrapeWebPage($url, $data, $visitedUrls, $depth, $pagesCrawled, $cacheFolder, $maxPages); $fileName = "crawl" . $randomNumber; $mergedData = ''; // Remove the cache folder if (is_dir($cacheFolder)) { $files = glob($cacheFolder . '*'); foreach ($files as $file) { if (is_file($file)) { $mergedData .= file_get_contents($file); unlink($file); // Delete the cached file } } rmdir($cacheFolder); // Delete the cache folder } // Split the merged data into chunks $maxSize = 1048500; // <1MB $chunks = []; $currentChunk = ''; $currentSize = 0; // Populate the chunks array foreach (explode("\n", $mergedData) as $line) { $lineSize = strlen($line) + 1; // +1 for the newline character if ($currentSize + $lineSize > $maxSize) { $chunks[] = $currentChunk; // Save the current chunk $currentChunk = $line; // Start a new chunk $currentSize = $lineSize; // Reset the current size } else { $currentChunk .= $line . "\n"; // Append to the current chunk $currentSize += $lineSize; // Update the current size } } // Add the last chunk if it exists if ($currentChunk !== '') { $chunks[] = $currentChunk; } // Save each chunk in separate output files if (count($chunks) === 1) { // Only one chunk, use the base filename $chunkFileName = 'raw/' . $fileName . '.html'; // Specify the 'raw' directory file_put_contents($chunkFileName, $chunks[0]); echo "<hr>Crawl complete<br>Created file: <a href='/$chunkFileName'>$chunkFileName</a><br>"; // List the created file } else { // Multiple chunks, use the part naming convention foreach ($chunks as $index => $chunk) { $chunkFileName = 'raw/' . $fileName . '_part' . ($index + 1) . '.html'; // Specify the 'raw' directory file_put_contents($chunkFileName, $chunk); echo "<hr>Crawl complete<br>Created file: <a href='/$chunkFileName'>$chunkFileName</a><br>"; // List the created files } } echo "Pages Crawled: <b> $pagesCrawled </b><br>It is now safe to close this window."; ?>

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.130.0330.01016.68
8.3.120.0330.00916.72
8.3.110.0320.01016.62
8.3.100.0350.01216.54
8.3.90.0370.01116.49
8.3.80.0400.00816.53
8.3.70.0330.01516.64
8.3.60.0370.00816.52
8.3.50.0340.01116.75
8.3.40.0330.00317.52
8.3.30.0330.00617.29
8.3.20.0310.01017.50
8.3.10.0320.01017.35
8.3.00.0170.00617.56
8.2.250.0340.01016.45
8.2.240.0210.01016.75
8.2.230.0240.00616.52
8.2.220.0180.01116.43
8.2.210.0310.00316.58
8.2.200.0230.00816.40
8.2.190.0300.00316.54
8.2.180.0320.00316.67
8.2.170.0270.00517.60
8.2.160.0270.00517.61
8.2.150.0230.00917.54
8.2.140.0190.01217.43
8.2.130.0280.00317.39
8.2.120.0330.00517.55
8.2.110.0310.00617.59
8.2.100.0280.01217.52
8.2.90.0360.00217.57
8.2.80.0160.01217.37
8.2.70.0290.01017.44
8.2.60.0360.00217.44
8.2.50.0280.00917.55
8.2.40.0230.00917.53
8.2.30.0220.00717.50
8.2.20.0170.01217.35
8.2.10.0280.00917.51
8.2.00.0230.00717.49
8.1.300.0270.00516.18
8.1.290.0260.00516.33
8.1.280.0280.00716.18
8.1.270.0240.00917.19
8.1.260.0240.00717.38
8.1.250.0330.00917.29
8.1.240.0220.00917.36
8.1.230.0150.00817.35
8.1.220.0160.00717.45
8.1.210.0180.00317.34
8.1.200.0300.00817.08
8.1.190.0280.00517.08
8.1.180.0340.00717.19
8.1.170.0270.01117.29
8.1.160.0320.01016.89
8.1.150.0300.00817.21
8.1.140.0280.00617.12
8.1.130.0330.00817.14
8.1.120.0320.00517.32
8.1.110.0280.00917.28
8.1.100.0290.00817.23
8.1.90.0300.00717.10
8.1.80.0220.01217.25
8.1.70.0260.00917.15
8.1.60.0310.00817.44
8.1.50.0330.00317.39
8.1.40.0300.01417.33
8.1.30.0340.01017.34
8.1.20.0180.01117.41
8.1.10.0310.00917.17
8.1.00.0300.01317.27
8.0.300.0310.00416.63
8.0.290.0220.01516.59
8.0.280.0240.01216.52
8.0.270.0330.00316.70
8.0.260.0280.00816.67
8.0.250.0290.00616.65
8.0.240.0360.00016.81
8.0.230.0240.01216.63
8.0.220.0300.00616.80
8.0.210.0330.00016.49
8.0.200.0300.00316.64
8.0.190.0180.01116.71
8.0.180.0320.01216.69
8.0.170.0370.00716.62
8.0.160.0320.00916.73
8.0.150.0290.00616.60
8.0.140.0310.00916.50
8.0.130.0290.00716.71
8.0.120.0340.00516.54
8.0.110.0250.01116.63
8.0.100.0350.00316.55
8.0.90.0330.00616.57
8.0.80.0310.00616.44
8.0.70.0300.00716.69
8.0.60.0330.00316.59
8.0.50.0340.00616.41
8.0.30.0290.00416.54
8.0.20.0280.00616.49
8.0.10.0250.00716.50
8.0.00.0290.00816.79
7.4.330.0390.00016.43
7.4.320.0260.02016.18
7.4.300.0270.01016.22
7.4.290.0200.01016.32
7.4.280.0280.00716.20
7.4.270.0280.00716.25
7.4.260.0260.00916.44
7.4.250.0290.00316.37
7.4.240.0230.00616.18
7.4.230.0260.00616.18
7.4.220.0300.00316.41
7.4.210.0290.00916.30
7.4.200.0220.00716.34
7.4.190.0540.00016.18
7.4.180.0310.00616.37
7.4.160.0250.00816.50
7.4.150.0260.00716.18
7.4.140.0230.01016.33
7.4.130.0260.00716.18
7.4.120.0250.00916.18
7.4.110.0250.00816.18
7.4.100.0300.00316.46
7.4.90.0240.01416.18
7.4.80.0140.01416.18
7.4.70.0170.01016.29
7.4.60.0290.00616.46
7.4.50.0270.00616.18
7.4.40.0270.00816.18
7.4.30.0210.01416.18
7.4.20.0230.01316.19
7.4.10.0260.00816.47
7.4.00.0340.00916.18
7.3.330.0320.00416.18
7.3.320.0290.00716.18
7.3.310.0340.00016.18
7.3.300.0260.00716.21
7.3.290.0250.00916.18
7.3.280.0250.00916.18
7.3.270.0230.01016.18
7.3.260.0210.01216.33
7.3.250.0350.00616.18
7.3.240.0270.00416.18
7.3.230.0130.01016.18
7.3.220.0180.00016.18
7.3.210.0240.00016.18
7.3.200.0130.00416.18
7.3.190.0170.00316.18
7.3.180.0240.00016.18
7.3.170.0270.00916.18
7.3.160.0280.00716.18
7.3.150.0250.00916.18
7.3.140.0340.00016.23
7.3.130.0320.00416.18
7.3.120.0300.00416.18
7.3.110.0270.00716.18
7.3.100.0250.00716.18
7.3.90.0270.00716.50
7.3.80.0210.01416.18
7.3.70.0290.00616.18
7.3.60.0300.00416.18
7.3.50.0280.00616.18
7.3.40.0160.00016.18
7.3.30.0140.00216.37
7.3.20.0140.00417.93
7.3.10.0130.00417.75
7.3.00.0160.00017.86
7.2.340.0180.00916.18
7.2.330.0250.01116.18
7.2.320.0230.01016.20
7.2.310.0310.00416.34
7.2.300.0240.01016.18
7.2.290.0270.00916.18
7.2.280.0290.00616.18
7.2.270.0260.01016.18
7.2.260.0300.00416.18
7.2.250.0230.00916.18
7.2.240.0330.00016.18
7.2.230.0250.00916.18
7.2.220.0390.00316.24
7.2.210.0330.00616.18
7.2.200.0320.00616.18
7.2.190.0300.00716.18
7.2.180.0110.00416.30
7.2.170.0150.00016.19
7.2.160.0130.00316.18
7.2.150.0170.00018.02
7.2.140.0100.00518.11
7.2.130.0140.00918.17
7.2.120.0290.01017.95
7.2.110.0200.00617.74
7.2.100.0240.00618.00
7.2.90.0230.00717.93
7.2.80.0240.01017.86
7.2.70.0200.00818.11
7.2.60.0190.01117.96
7.2.50.0290.00718.12
7.2.40.0320.01417.63
7.2.30.0280.00617.74
7.2.20.0280.00717.90
7.2.10.0260.00717.87
7.2.00.0270.00718.08
7.1.330.0180.01416.55
7.1.320.0170.00816.96
7.1.310.0190.01316.71
7.1.300.0230.00716.73
7.1.290.0240.00716.98
7.1.280.0310.00016.77
7.1.270.0230.00816.76
7.1.260.0250.00516.70
7.1.250.0230.00816.55
7.1.240.0250.00716.61
7.1.230.0300.00416.75
7.1.220.0310.00516.69
7.1.210.0300.00016.60
7.1.200.0180.01216.97
7.1.190.0270.00316.88
7.1.180.0200.01016.66
7.1.170.0240.00816.90
7.1.160.0300.00016.90
7.1.150.0230.00716.90
7.1.140.0180.01116.72
7.1.130.0190.00616.91
7.1.120.0180.01516.70
7.1.110.0330.00716.86
7.1.100.0240.00916.61
7.1.90.0270.00316.60
7.1.80.0210.00917.00
7.1.70.0210.00816.70
7.1.60.0290.00416.99
7.1.50.0230.00816.68
7.1.40.0220.00816.93
7.1.30.0260.00416.81
7.1.20.0190.00816.75
7.1.10.0110.00816.86
7.1.00.0100.00416.69
7.0.330.0130.00016.52
7.0.320.0090.00916.60
7.0.310.0100.00516.79
7.0.300.0110.00316.63
7.0.290.0130.00216.46
7.0.280.0120.00516.40
7.0.270.0000.01416.49
7.0.260.0180.01116.61
7.0.250.0230.00816.71
7.0.240.0250.00416.62
7.0.230.0190.01016.60
7.0.220.0360.00016.37
7.0.210.0180.01216.28
7.0.200.0170.00016.23
7.0.190.0140.00016.69
7.0.180.0200.01016.51
7.0.170.0190.01116.74
7.0.160.0260.00416.58
7.0.150.0250.00816.72
7.0.140.0150.01516.85
7.0.130.0200.00916.73
7.0.120.0270.00316.74
7.0.110.0180.01116.71
7.0.100.0190.00616.54
7.0.90.0170.00916.54
7.0.80.0150.01516.58
7.0.70.0200.01216.40
7.0.60.0330.00016.65
7.0.50.0230.00616.39
7.0.40.0230.00616.50
7.0.30.0230.00716.55
7.0.20.0230.00616.47
7.0.10.0210.00716.42
7.0.00.0260.00416.63
5.6.400.0330.00016.18
5.6.390.0290.00816.18
5.6.380.0170.00916.18
5.6.370.0240.00616.18
5.6.360.0270.00016.18
5.6.350.0210.00916.18
5.6.340.0230.00716.18
5.6.330.0200.00916.18
5.6.320.0210.00916.18
5.6.310.0240.00416.18
5.6.300.0180.00516.18
5.6.290.0230.01116.18
5.6.280.0200.00616.18
5.6.270.0220.00916.18
5.6.260.0260.00916.18
5.6.250.0220.00616.18
5.6.240.0200.00316.18
5.6.230.0170.00716.18
5.6.220.0240.00816.18
5.6.210.0220.00716.18
5.6.200.0200.01016.18
5.6.190.0220.00716.18
5.6.180.0190.01016.18
5.6.170.0190.00516.18
5.6.160.0200.00416.18
5.6.150.0150.01116.18
5.6.140.0160.00816.18
5.6.130.0180.00616.18
5.6.120.0210.00916.18
5.6.110.0270.00716.18
5.6.100.0280.00316.18
5.6.90.0340.01316.18
5.6.80.0230.00816.18
5.6.70.0270.00616.18
5.6.60.0200.00316.18
5.6.50.0250.00016.18
5.6.40.0150.01016.18
5.6.30.0230.00816.18
5.6.20.0220.00716.18
5.6.10.0220.00716.18
5.6.00.0190.01316.18
5.5.380.0300.00316.18
5.5.370.0280.00316.18
5.5.360.0240.00816.18
5.5.350.0190.01316.18
5.5.340.0280.00316.18
5.5.330.0210.00616.18
5.5.320.0200.00616.18
5.5.310.0120.01216.18
5.5.300.0160.01416.18
5.5.290.0200.01016.18
5.5.280.0210.00816.18
5.5.270.0300.00816.18
5.5.260.0250.00916.18
5.5.250.0200.01116.18
5.5.240.0260.00716.18
5.5.230.0230.00416.18
5.5.220.0260.00316.18
5.5.210.0290.00016.18
5.5.200.0260.00316.18
5.5.190.0180.00916.18
5.5.180.0290.00316.18
5.5.170.0190.00916.18
5.5.160.0230.00616.18
5.5.150.0240.00716.18
5.5.140.0240.00616.18
5.5.130.0270.00416.18
5.5.120.0260.00716.18
5.5.110.0190.00916.18
5.5.100.0040.00916.18
5.5.90.0120.00616.18
5.5.80.0100.00316.18
5.5.70.0110.01116.18
5.5.60.0190.00816.18
5.5.50.0300.00916.18
5.5.40.0210.00816.18
5.5.30.0250.00616.18
5.5.20.0240.00416.18
5.5.10.0250.00316.18
5.5.00.0220.00016.18
5.4.450.0200.00016.18
5.4.440.0220.00616.18
5.4.430.0070.01116.18
5.4.420.0160.00316.18
5.4.410.0190.00616.18
5.4.400.0190.00016.18
5.4.390.0110.01116.18
5.4.380.0190.00416.18
5.4.370.0190.00416.18
5.4.360.0160.00616.18
5.4.350.0160.00716.18
5.4.340.0160.00816.18
5.4.330.0190.00416.18
5.4.320.0190.00316.18
5.4.310.0200.00316.18
5.4.300.0130.01016.18
5.4.290.0210.00416.18
5.4.280.0140.01116.18
5.4.270.0110.00616.18
5.4.260.0180.00016.18
5.4.250.0150.00316.18
5.4.240.0150.00316.18
5.4.230.0180.00616.18
5.4.220.0130.00716.18
5.4.210.0150.00416.18
5.4.200.0080.00316.18
5.4.190.0220.00016.18
5.4.180.0180.00316.18
5.4.170.0120.00616.18
5.4.160.0110.00016.18
5.4.150.0160.00316.18
5.4.140.0110.00716.18
5.4.130.0080.00316.18
5.4.120.0110.00716.18
5.4.110.0130.01016.18
5.4.100.0090.00316.18
5.4.90.0080.00316.18
5.4.80.0040.00816.18
5.4.70.0080.00316.18
5.4.60.0110.00016.18
5.4.50.0140.00016.18
5.4.40.0110.00016.18
5.4.30.0030.00716.18
5.4.20.0070.00316.18
5.4.10.0110.00016.18
5.4.00.0100.00016.18
5.3.290.0080.00216.18
5.3.280.0100.00016.18
5.3.270.0100.00016.18
5.3.260.0100.00016.18
5.3.250.0050.00516.18
5.3.240.0070.00316.18
5.3.230.0070.00316.18
5.3.220.0110.00016.18
5.3.210.0100.00016.18
5.3.200.0120.00916.18
5.3.190.0090.00316.18
5.3.180.0110.00016.18
5.3.170.0110.00016.18
5.3.160.0080.00416.18
5.3.150.0130.00016.18
5.3.140.0160.00516.18
5.3.130.0100.00316.18
5.3.120.0050.00516.18
5.3.110.0080.00316.18
5.3.100.0070.00416.18
5.3.90.0140.00016.18
5.3.80.0110.00016.18
5.3.70.0100.00016.18
5.3.60.0100.00016.18
5.3.50.0100.00016.18
5.3.40.0100.00216.18
5.3.30.0140.00416.18
5.3.20.0070.00216.18
5.3.10.0060.00616.18
5.3.00.0000.01016.18
5.2.170.0040.00416.18
5.2.160.0040.00416.18
5.2.150.0040.00416.18
5.2.140.0080.00016.18
5.2.130.0050.00316.18
5.2.120.0040.00416.18
5.2.110.0040.00416.18
5.2.100.0050.00316.18
5.2.90.0040.00416.18
5.2.80.0060.00316.18
5.2.70.0050.00516.18
5.2.60.0130.00316.18
5.2.50.0110.00316.18
5.2.40.0110.00416.18
5.2.30.0110.00416.18
5.2.20.0040.01216.18
5.2.10.0140.00416.18
5.2.00.0190.00016.18
5.1.60.0130.00416.18
5.1.50.0040.01216.18
5.1.40.0120.00416.18
5.1.30.0080.01016.18
5.1.20.0180.00316.18
5.1.10.0170.00016.18
5.1.00.0110.00516.18
5.0.50.0070.00716.18
5.0.40.0070.00716.18
5.0.30.0150.00016.18
5.0.20.0120.00416.18
5.0.10.0140.00316.18
5.0.00.0100.00316.18
4.4.90.0060.00016.18
4.4.80.0090.00016.18
4.4.70.0090.00016.18
4.4.60.0070.00016.18
4.4.50.0070.00016.18
4.4.40.0070.00016.18
4.4.30.0030.00316.18
4.4.20.0000.00916.18
4.4.10.0090.00016.18
4.4.00.0090.00016.18
4.3.110.0040.00416.18
4.3.100.0040.00416.18
4.3.90.0070.00016.18
4.3.80.0090.00016.18
4.3.70.0090.00016.18
4.3.60.0090.00016.18
4.3.50.0090.00016.18
4.3.40.0040.00416.18
4.3.30.0070.00016.18
4.3.20.0000.00716.18
4.3.10.0060.00016.18
4.3.00.0060.00016.18

preferences:
147.94 ms | 1432 KiB | 7 Q