diff --git a/main.cpp b/main.cpp
index 865c35c..df81365 100644
--- a/main.cpp
+++ b/main.cpp
@@ -5,6 +5,8 @@
 #include "text.h"
 #include "svg.h"
 #include <curl/curl.h>
+#include <sstream>
+#include <string>
 using namespace std;
 
 
@@ -14,27 +16,58 @@ struct Input
     size_t bin_count{};
 };
 
-Input input_data()
+Input input_data(istream& in, bool prompt)
 {
     size_t number_count;
-    cin >> number_count;
-    Input in;
-    in.numbers.resize(number_count);
+    if (prompt) {cerr << "Enter number count :";}
+    in >> number_count;
+    Input In;
+    In.numbers.resize(number_count);
     vector<double> numbers(number_count);
     for (size_t i = 0; i < number_count; i++)
-    {cin >> in.numbers[i];}
+    {in >> In.numbers[i];}
     size_t bin_count;
-    cin >> in.bin_count;
-    return in;
+    if (prompt) {cerr << "Enter bin count :";}
+    cin >> In.bin_count;
+    return In;
+}
+
+
+size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
+    size_t data_size = item_size * item_count;
+    stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
+    buffer->write(reinterpret_cast<char*>(items), data_size);
+    return data_size;
 }
 
 
-int main()
+Input download(const string& address)
+{
+    stringstream buffer;
+    CURL* curl = curl_easy_init();
+    if(curl)
+    {
+        CURLcode res;
+        curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
+        res = curl_easy_perform(curl);
+        if (res != CURLE_OK)
+            {
+                curl_easy_strerror(res);
+                exit(1);
+            }
+            curl_easy_cleanup(curl);
+    }
+       return input_data(buffer, false);
+}
+
+int main(int argc, char* argv[])
 {
     curl_global_init(CURL_GLOBAL_ALL);
-    const size_t SCREEN_WIDTH = 80;
-    const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
-    auto in = input_data();
+    Input in;
+    if (argc > 1) {in = download(argv[1]);}
+    else {in = input_data(cin, true);}
     const std::vector<double> bins = make_histogram(in.numbers, in.bin_count);
     show_histogram_svg(bins);
     return 0;