From 621eaaf67a0b44f415d2389e02da58a99eb5be72 Mon Sep 17 00:00:00 2001
From: Osyotr <Osyotr@users.noreply.github.com>
Date: Mon, 29 Apr 2024 00:18:04 +0300
Subject: [PATCH] Remove liboauthcpp

Signed-off-by: Osyotr <Osyotr@users.noreply.github.com>
---
 3party/CMakeLists.txt                         |   1 -
 3party/liboauthcpp/.gitignore                 |   9 -
 3party/liboauthcpp/CMakeLists.txt             |  21 -
 3party/liboauthcpp/LICENSE                    |  21 -
 3party/liboauthcpp/README.md                  | 172 -----
 .../include/liboauthcpp/liboauthcpp.h         | 286 --------
 3party/liboauthcpp/src/HMAC_SHA1.cpp          |  59 --
 3party/liboauthcpp/src/HMAC_SHA1.h            |  37 --
 3party/liboauthcpp/src/SHA1.cpp               | 283 --------
 3party/liboauthcpp/src/SHA1.h                 | 148 -----
 3party/liboauthcpp/src/base64.cpp             | 123 ----
 3party/liboauthcpp/src/base64.h               |   4 -
 3party/liboauthcpp/src/liboauthcpp.cpp        | 621 ------------------
 3party/liboauthcpp/src/urlencode.cpp          | 102 ---
 3party/liboauthcpp/src/urlencode.h            |  16 -
 android/app/src/main/cpp/CMakeLists.txt       |   1 -
 coding/CMakeLists.txt                         |   1 -
 coding/base64.cpp                             |   4 +-
 coding/base64.hpp                             |   2 +-
 coding/sha1.cpp                               |  69 +-
 coding/sha1.hpp                               |   5 +-
 data/copyright.html                           |   3 -
 generator/pygen/CMakeLists.txt                |   1 -
 iphone/Maps/Maps.xcodeproj/project.pbxproj    |   4 -
 kml/pykmlib/CMakeLists.txt                    |   1 -
 search/pysearch/CMakeLists.txt                |   1 -
 traffic/pytraffic/CMakeLists.txt              |   1 -
 xcode/editor/editor.xcodeproj/project.pbxproj |   4 -
 xcode/ge0/ge0.xcodeproj/project.pbxproj       |   4 -
 .../generator.xcodeproj/project.pbxproj       |   4 -
 .../indexer/indexer.xcodeproj/project.pbxproj |   4 -
 xcode/kml/kml.xcodeproj/project.pbxproj       |   4 -
 xcode/map/map.xcodeproj/project.pbxproj       |   4 -
 .../oauthcpp.xcodeproj/project.pbxproj        | 233 -------
 .../omim.xcworkspace/contents.xcworkspacedata |   3 -
 .../platform.xcodeproj/project.pbxproj        |   4 -
 xcode/qt/qt.xcodeproj/project.pbxproj         |   4 -
 xcode/search/search.xcodeproj/project.pbxproj |   6 -
 .../traffic/traffic.xcodeproj/project.pbxproj |   4 -
 39 files changed, 32 insertions(+), 2242 deletions(-)
 delete mode 100644 3party/liboauthcpp/.gitignore
 delete mode 100644 3party/liboauthcpp/CMakeLists.txt
 delete mode 100644 3party/liboauthcpp/LICENSE
 delete mode 100644 3party/liboauthcpp/README.md
 delete mode 100644 3party/liboauthcpp/include/liboauthcpp/liboauthcpp.h
 delete mode 100644 3party/liboauthcpp/src/HMAC_SHA1.cpp
 delete mode 100644 3party/liboauthcpp/src/HMAC_SHA1.h
 delete mode 100644 3party/liboauthcpp/src/SHA1.cpp
 delete mode 100644 3party/liboauthcpp/src/SHA1.h
 delete mode 100644 3party/liboauthcpp/src/base64.cpp
 delete mode 100644 3party/liboauthcpp/src/base64.h
 delete mode 100644 3party/liboauthcpp/src/liboauthcpp.cpp
 delete mode 100644 3party/liboauthcpp/src/urlencode.cpp
 delete mode 100644 3party/liboauthcpp/src/urlencode.h
 delete mode 100644 xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj

diff --git a/3party/CMakeLists.txt b/3party/CMakeLists.txt
index 676d42ea79..97f45e2efa 100644
--- a/3party/CMakeLists.txt
+++ b/3party/CMakeLists.txt
@@ -57,7 +57,6 @@ endif()
 
 add_subdirectory(agg)
 add_subdirectory(bsdiff-courgette)
-add_subdirectory(liboauthcpp)
 add_subdirectory(minizip)
 add_subdirectory(open-location-code)
 add_subdirectory(opening_hours)
diff --git a/3party/liboauthcpp/.gitignore b/3party/liboauthcpp/.gitignore
deleted file mode 100644
index a7baf33224..0000000000
--- a/3party/liboauthcpp/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-# Build (by)products
-build/CMakeCache.txt
-build/CMakeFiles
-build/Makefile
-build/cmake_install.cmake
-build/liboauthcpp.a
-build/simple_auth
-build/simple_request
-build/tests
diff --git a/3party/liboauthcpp/CMakeLists.txt b/3party/liboauthcpp/CMakeLists.txt
deleted file mode 100644
index e72b6b956c..0000000000
--- a/3party/liboauthcpp/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-project(oauthcpp)
-
-set(SRC
-  include/liboauthcpp/liboauthcpp.h
-  src/base64.cpp
-  src/HMAC_SHA1.cpp
-  src/SHA1.cpp
-  src/urlencode.cpp
-  src/liboauthcpp.cpp
-)
-
-add_library(${PROJECT_NAME} ${SRC})
-
-target_include_directories(${PROJECT_NAME}
-  PRIVATE src
-  PUBLIC include
-)
-
-target_compile_options(${PROJECT_NAME}
-  PRIVATE $<$<CXX_COMPILER_ID:AppleClang,Clang>:-Wno-shorten-64-to-32>
-)
diff --git a/3party/liboauthcpp/LICENSE b/3party/liboauthcpp/LICENSE
deleted file mode 100644
index 8d08adbe74..0000000000
--- a/3party/liboauthcpp/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (c) 2011 Stanford University (liboauthcpp)
-Copyright (C) 2011 by swatkat (swatkat.thinkdigitATgmailDOTcom) (libtwitcurl)
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/3party/liboauthcpp/README.md b/3party/liboauthcpp/README.md
deleted file mode 100644
index cd787d6139..0000000000
--- a/3party/liboauthcpp/README.md
+++ /dev/null
@@ -1,172 +0,0 @@
-liboauthcpp
------------
-
-liboauthcpp is a pure C++ library for performing OAuth requests. It
-doesn't contain any networking code -- you provide for performing HTTP
-requests yourself, however you like -- instead focusing on performing
-OAuth-specific functionality and providing a nice interface for it.
-If you already have infrastructure for making HTTP requests and are
-looking to add OAuth support, liboauthcpp is for you.
-
-liboauthcpp currently implements OAuth 1.0a (see
-http://tools.ietf.org/html/rfc5849).
-
-Buildbot
---------
-[![Build Status](https://secure.travis-ci.org/sirikata/liboauthcpp.png)](http://travis-ci.org/sirikata/liboauthcpp)
-
-Requirements
-------------
-
-You should only need:
-
- * CMake
- * A C++ compiler for your platform (e.g. g++, Microsoft Visual C++)
-
-Compiling
----------
-
-The build process is simple:
-
-    cd liboauthcpp
-    cd build
-    cmake .
-    make            # or open Visual Studio and build the solution
-
-If your own project uses CMake you can also include
-build/CMakeLists.txt directly into your project and reference the
-target "oauthcpp", a static library, in your project.
-
-Percent (URL) Encoding
-----------------------
-
-To get correct results, you need to pass your URL properly encoded to
-liboauthcpp. If you are not at all familiar, you should probably start
-by reading the [URI Spec](http://tools.ietf.org/html/rfc3986), especially
-Section 2. Alternatively,
-[this article](http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding)
-gives a more readable overview.
-
-The basic idea is that there are 3 classes of characters: reserved,
-unreserved, and other. Reserved characters are special characters that
-are used in the URI syntax itself, e.g. ':' (after the scheme), '/'
-(the hierarchical path separator), and '?'  (prefixing the query
-string). Unreserved characters are characters that are always safe to
-include unencoded, e.g. the alphanumerics. Other characters must
-always be encoded, mainly covering special characters like ' ', '<' or
-'>', and '{' or '}'.
-
-The basic rule is that reserved characters must be encoded if they
-appear in any part of the URI when not being used as a
-separator. Unreserved characters are always safe. And the other
-characters they didn't know if they would be safe or not so they must
-always be encoded.
-
-Unfortunately, the reserved set is a bit more complicated. They are
-broken down into 'general delimiters' and 'sub delimiters'. The ones
-already mentioned, like ':', can appear in many forms of URIs (say,
-http, ftp, about, gopher, mailto, etc. Those are called general
-delimiters. Others (e.g. '(', ')', '!', '$', '+', ',', '=', and more)
-are called subdelimiters because their use depends on the URI
-scheme. Worse, their use depends on the *part of the URI*. Depending
-on the particular URI scheme, these may or may not have to be encoded,
-and it might also depend on where they appear. (As an example, an '&'
-in an http URI isn't an issue if it appears in the path -- before the
-query string -- i.e. before a '?' appears. Worse, '=' can appear unencoded in
-the path, or in a query parameter value, but not in a query parameter key since
-it would be interpreted as the end of the key.)
-
-*Additionally*, in many cases it is permitted to encode a character
-unnecessarily and the result is supposed to be the same. This means
-that it's possible to percent encode some URLs in multiple ways
-(e.g. encoding the unreserved set unnecessarily). It is possible, but not
-guaranteed, that if you pass *exactly* the same URI to liboauthcpp and the
-OAuth server, it will handle it regardless of the variant of encoding, so long
-as it is a valid encoding.
-
-The short version: percent encoding a URL properly is non-trivial and
-you can even encode the same URL multiple ways, but has to be done
-correctly so that the OAuth signature can be computed. Sadly,
-"correctly" in this case really means "in whatever way the server your
-interacting with wants it encoded".
-
-Internally, liboauthcpp needs to do another step of percent encoding,
-but the OAuth spec is very precise about how that works (none of these
-scheme-dependent issues). liboauth applies this percent encoding, but
-assumes that you have encoded your URLs properly. This assumption
-makes sense since the actual request is made separately, and the URI
-has to be specified in it, so you should already have a form which the
-server will accept.
-
-However, in order to aid you, a very simple percent encoding API is exposed. It
-should help you encode URLs minimally and in a way that many services accept. In
-most cases you should use `HttpPercentEncodePath()`,
-`HttpPercentEncodeQueryKey()`, and `HttpPercentEncodeQueryValue()` to encode
-those parts of your http URL, then combine them and pass them to liboauthcpp for
-signing.
-
-
-Thread Safety
--------------
-
-liboauthcpp doesn't provide any thread safety guarantees. That said, there is
-very little shared state, and some classes (e.g. Consumer) are naturally
-immutable and therefore thread safe. Similarly, nearly the entire library uses
-no static/shared state, so as long as you create separate objects for separate
-threads, you should be safe.
-
-The one exception is nonces: the Client class needs to generate a nonce for
-authorization. To do so, the random number generator needs to be seeded. We do
-this with the current time, but fast, repeated use of the Client class from
-different threads could result in the same nonce. To avoid requiring an entire
-thread library just for this one case, you can call Client::initialize()
-explicitly before using the Client from multiple threads. For single-threaded
-use, you are not required to call it.
-
-Demos
------
-There are two demos included in the demos/ directory, and they are built by
-default with the instructions above. In both, you enter key/secret information
-and it generates URLs for you to visit (in a browser) and copy data back into
-the program.
-
-simple_auth should be executed first. It starts with only a consumer key and
-secret and performs 3-legged auth: you enter in consumer keys, it generates URLs
-to authenticate the user and generate access tokens. It requires 3 steps:
-request_token, authorize, and access_token (which correspond the URLs
-accessed). At the end of this process, you'll be provided an access key/secret
-pair which you can use to access actual resources.
-
-simple_request actually does something useful now that your application is
-authorized. Enter your consumer key/secret and the access key/secret from
-simple_auth (or which you've generated elsewhere) and it will generate a URL you
-can use to access your home timeline in JSON format. It adds a parameter to ask
-for only 5 entries (demonstrating that signing works properly over additional
-query parameters). This is a one-step process -- it just gives you the URL and
-you get the results in your browser.
-
-In both, the URLs accessed are specified at the top of the demo
-files. simple_auth requires URLs for request_token, authorize_url, and
-access_token. Some providers require additional parameters (notably an
-oauth_callback for Twitter, even if its out of band, or oob), which you can also
-specify in that location. simple_request only needs the URL of the resource
-being accessed (i.e. the URL for the home_timeline JSON data used by default in
-the demo), with optional parameters stored as a query string.
-
-Both demos only use GET requests with query strings, but all HTTP methods
-(e.g. POST, PUT, DELETE) and approaches to sending parameters (e.g. HTTP
-headers, url-encoded body) should be supported in the API.
-
-License
--------
-
-liboauthcpp is MIT licensed. See the LICENSE file for more details.
-
-liboauthcpp is mostly taken from libtwitcurl
-(http://code.google.com/p/twitcurl/), which is similarly licensed. It
-mostly serves to isolate the OAuth code from libtwitcurl's Twitter and
-cURL specific code.
-
-libtwitcurl also borrowed code from other projects:
-twitcurl uses HMAC_SHA1 from http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx
-twitcurl uses base64 from http://www.adp-gmbh.ch/cpp/common/base64.html
diff --git a/3party/liboauthcpp/include/liboauthcpp/liboauthcpp.h b/3party/liboauthcpp/include/liboauthcpp/liboauthcpp.h
deleted file mode 100644
index b510d43997..0000000000
--- a/3party/liboauthcpp/include/liboauthcpp/liboauthcpp.h
+++ /dev/null
@@ -1,286 +0,0 @@
-#ifndef __LIBOAUTHCPP_LIBOAUTHCPP_H__
-#define __LIBOAUTHCPP_LIBOAUTHCPP_H__
-
-#include <string>
-#include <list>
-#include <map>
-#include <stdexcept>
-#include <ctime>
-
-namespace OAuth {
-
-namespace Http {
-typedef enum _RequestType
-{
-    Invalid = 0,
-    Head,
-    Get,
-    Post,
-    Delete,
-    Put
-} RequestType;
-} // namespace Http
-
-typedef std::list<std::string> KeyValueList;
-typedef std::multimap<std::string, std::string> KeyValuePairs;
-
-typedef enum _LogLevel
-{
-    LogLevelNone = 0,
-    LogLevelDebug = 1
-} LogLevel;
-
-/** Set the log level. Log messages are sent to stderr. Currently, and for the
- *  foreseeable future, logging only consists of debug messages to help track
- *  down protocol implementation issues.
- */
-void SetLogLevel(LogLevel lvl);
-
-/** Deprecated. Complete percent encoding of URLs. Equivalent to
- *  PercentEncode.
- */
-std::string URLEncode(const std::string& decoded);
-
-/** Percent encode a string value. This version is *thorough* about
- *  encoding: it encodes all reserved characters (even those safe in
- *  http URLs) and "other" characters not specified by the URI
- *  spec. If you're looking to encode http:// URLs, see the
- *  HttpEncode* functions.
- */
-std::string PercentEncode(const std::string& decoded);
-
-/** Percent encodes the path portion of an http URL (i.e. the /foo/bar
- *  in http://foo/bar?a=1&b=2). This encodes minimally, so reserved
- *  subdelimiters that have no meaning in the path are *not* encoded.
- */
-std::string HttpEncodePath(const std::string& decoded);
-
-/** Percent encodes a query string key in an http URL (i.e. 'a', 'b' in
- *  http://foo/bar?a=1&b=2). This encodes minimally, so reserved subdelimiters
- *  that have no meaning in the query string are *not* encoded.
- */
-std::string HttpEncodeQueryKey(const std::string& decoded);
-
-/** Percent encodes a query string value in an http URL (i.e. '1', '2' in
- *  http://foo/bar?a=1&b=2). This encodes minimally, so reserved subdelimiters
- *  that have no meaning in the query string are *not* encoded.
- */
-std::string HttpEncodeQueryValue(const std::string& decoded);
-
-/** Parses key value pairs into a map.
- *  \param encoded the encoded key value pairs, i.e. the url encoded parameters
- *  \returns a map of string keys to string values
- *  \throws ParseError if the encoded data cannot be decoded
- */
-KeyValuePairs ParseKeyValuePairs(const std::string& encoded);
-
-class ParseError : public std::runtime_error {
-public:
-    ParseError(const std::string msg)
-     : std::runtime_error(msg)
-    {}
-};
-
-class MissingKeyError : public std::runtime_error {
-public:
-    MissingKeyError(const std::string msg)
-     : std::runtime_error(msg)
-    {}
-};
-
-/** A consumer of OAuth-protected services. It is the client to an
- *  OAuth service provider and is usually registered with the service
- *  provider, resulting in a consumer *key* and *secret* used to
- *  identify the consumer. The key is included in all requests and the
- *  secret is used to *sign* all requests.  Signed requests allow the
- *  consumer to securely perform operations, including kicking off
- *  three-legged authentication to enable performing operations on
- *  behalf of a user of the service provider.
- */
-class Consumer {
-public:
-    Consumer(const std::string& key, const std::string& secret);
-
-    const std::string& key() const { return mKey; }
-    const std::string& secret() const { return mSecret; }
-
-private:
-    const std::string mKey;
-    const std::string mSecret;
-};
-
-/** An OAuth credential used to request authorization or a protected
- *  resource.
- *
- *  Tokens in OAuth comprise a *key* and a *secret*. The key is
- *  included in requests to identify the token being used, but the
- *  secret is used only in the signature, to prove that the requester
- *  is who the server gave the token to.
- *
- *  When first negotiating the authorization, the consumer asks for a
- *  *request token* that the live user authorizes with the service
- *  provider. The consumer then exchanges the request token for an
- *  *access token* that can be used to access protected resources.
- */
-class Token {
-public:
-    Token(const std::string& key, const std::string& secret);
-    Token(const std::string& key, const std::string& secret, const std::string& pin);
-
-    /** Construct a token, extracting the key and secret from a set of
-     *  key-value pairs (e.g. those parsed from an request or access
-     *  token request).
-     */
-    static Token extract(const KeyValuePairs& response);
-    /** Construct a token, extracting the key and secret from a raw,
-     *  encoded response.
-     */
-    static Token extract(const std::string& requestTokenResponse);
-
-    const std::string& key() const { return mKey; }
-    const std::string& secret() const { return mSecret; }
-
-    const std::string& pin() const { return mPin; }
-    void setPin(const std::string& pin_) { mPin = pin_; }
-
-private:
-
-    const std::string mKey;
-    const std::string mSecret;
-    std::string mPin;
-};
-
-class Client {
-public:
-    /** Perform static initialization. This will be called automatically, but
-     *  you can call it explicitly to ensure thread safety. If you do not call
-     *  this explicitly before using the Client class, the same nonce may be
-     *  generated twice.
-     */
-    static void initialize();
-    /** Alternative initialize method which lets you specify the seed and
-     *  control the timestamp used in generating signatures. This only exists
-     *  for testing purposes and should not be used in practice.
-     */
-    static void initialize(int nonce, time_t timestamp);
-
-    /** Exposed for testing only.
-     */
-    static void __resetInitialize();
-
-    /** Construct an OAuth Client using only a consumer key and
-     *  secret. You can use this to start a three-legged
-     *  authentication (to acquire an access token for a user) or for
-     *  simple two-legged authentication (signing with empty access
-     *  token info).
-     *
-     *  \param consumer Consumer information. The caller must ensure
-     *         it remains valid during the lifetime of this object
-     */
-    Client(const Consumer* consumer);
-    /** Construct an OAuth Client with consumer key and secret (yours)
-     *  and access token key and secret (acquired and stored during
-     *  three-legged authentication).
-     *
-     *  \param consumer Consumer information. The caller must ensure
-     *         it remains valid during the lifetime of this object
-     *  \param token Access token information. The caller must ensure
-     *         it remains valid during the lifetime of this object
-     */
-    Client(const Consumer* consumer, const Token* token);
-
-    ~Client();
-
-    /** Build an OAuth HTTP header for the given request. This version provides
-     *  only the field value.
-     *
-     *  \param eType the HTTP request type, e.g. GET or POST
-     *  \param rawUrl the raw request URL (should include query parameters)
-     *  \param rawData the raw HTTP request data (can be empty)
-     *  \param includeOAuthVerifierPin if true, adds oauth_verifier parameter
-     *  \returns a string containing the HTTP header
-     */
-    std::string getHttpHeader(const Http::RequestType eType,
-                         const std::string& rawUrl,
-                         const std::string& rawData = "",
-                         const bool includeOAuthVerifierPin = false);
-    /** Build an OAuth HTTP header for the given request. This version gives a
-     *  fully formatted header, i.e. including the header field name.
-     *
-     *  \param eType the HTTP request type, e.g. GET or POST
-     *  \param rawUrl the raw request URL (should include query parameters)
-     *  \param rawData the raw HTTP request data (can be empty)
-     *  \param includeOAuthVerifierPin if true, adds oauth_verifier parameter
-     *  \returns a string containing the HTTP header
-     */
-    std::string getFormattedHttpHeader(const Http::RequestType eType,
-                         const std::string& rawUrl,
-                         const std::string& rawData = "",
-                         const bool includeOAuthVerifierPin = false);
-    /** Build an OAuth HTTP header for the given request.
-     *
-     *  \param eType the HTTP request type, e.g. GET or POST
-     *  \param rawUrl the raw request URL (should include query parameters)
-     *  \param rawData the raw HTTP request data (can be empty)
-     *  \param includeOAuthVerifierPin if true, adds oauth_verifier parameter
-     *  \returns a string containing the query string, including the query
-     *         parameters in the rawUrl
-     */
-    std::string getURLQueryString(const Http::RequestType eType,
-                         const std::string& rawUrl,
-                         const std::string& rawData = "",
-                         const bool includeOAuthVerifierPin = false);
-private:
-    /** Disable default constructur -- must provide consumer
-     * information.
-     */
-    Client();
-
-    static bool initialized;
-    static int testingNonce;
-    static time_t testingTimestamp;
-
-    /* OAuth data */
-    const Consumer* mConsumer;
-    const Token* mToken;
-    std::string m_nonce;
-    std::string m_timeStamp;
-
-    /* OAuth related utility methods */
-    bool buildOAuthTokenKeyValuePairs( const bool includeOAuthVerifierPin, /* in */
-                                       const std::string& rawData, /* in */
-                                       const std::string& oauthSignature, /* in */
-                                       KeyValuePairs& keyValueMap /* out */,
-                                       const bool urlEncodeValues /* in */,
-                                       const bool generateTimestamp /* in */);
-
-    bool getStringFromOAuthKeyValuePairs( const KeyValuePairs& rawParamMap, /* in */
-                                          std::string& rawParams, /* out */
-                                          const std::string& paramsSeperator /* in */ );
-
-    typedef enum _ParameterStringType {
-        QueryStringString,
-        AuthorizationHeaderString
-    } ParameterStringType;
-    // Utility for building OAuth HTTP header or query string. The string type
-    // controls the separator and also filters parameters: for query strings,
-    // all parameters are included. For HTTP headers, only auth parameters are
-    // included.
-    std::string buildOAuthParameterString(
-        ParameterStringType string_type,
-        const Http::RequestType eType,
-        const std::string& rawUrl,
-        const std::string& rawData,
-        const bool includeOAuthVerifierPin);
-
-    bool getSignature( const Http::RequestType eType, /* in */
-                       const std::string& rawUrl, /* in */
-                       const KeyValuePairs& rawKeyValuePairs, /* in */
-                       std::string& oAuthSignature /* out */ );
-
-    void generateNonceTimeStamp();
-};
-
-} // namespace OAuth
-
-#endif // __LIBOAUTHCPP_LIBOAUTHCPP_H__
diff --git a/3party/liboauthcpp/src/HMAC_SHA1.cpp b/3party/liboauthcpp/src/HMAC_SHA1.cpp
deleted file mode 100644
index 59b2766a54..0000000000
--- a/3party/liboauthcpp/src/HMAC_SHA1.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-//******************************************************************************
-//* HMAC_SHA1.cpp : Implementation of HMAC SHA1 algorithm
-//*                 Comfort to RFC 2104
-//*
-//******************************************************************************
-#include "HMAC_SHA1.h"
-#include <iostream>
-#include <memory>
-
-
-void CHMAC_SHA1::HMAC_SHA1(BYTE *text, int text_len, BYTE *key, int key_len, BYTE *digest)
-{
-	memset(SHA1_Key, 0, SHA1_BLOCK_SIZE);
-
-	/* repeated 64 times for values in ipad and opad */
-	memset(m_ipad, 0x36, sizeof(m_ipad));
-	memset(m_opad, 0x5c, sizeof(m_opad));
-
-	/* STEP 1 */
-	if (key_len > SHA1_BLOCK_SIZE)
-	{
-		CSHA1::Reset();
-		CSHA1::Update((UINT_8 *)key, key_len);
-		CSHA1::Final();
-
-		CSHA1::GetHash((UINT_8 *)SHA1_Key);
-	}
-	else
-		memcpy(SHA1_Key, key, key_len);
-
-	/* STEP 2 */
-	for (int i=0; i<(int)sizeof(m_ipad); i++)
-	{
-		m_ipad[i] ^= SHA1_Key[i];
-	}
-
-	/* STEP 4 */
-	CSHA1::Reset();
-        CSHA1::Update((UINT_8 *)m_ipad, sizeof(m_ipad));
-        CSHA1::Update((UINT_8 *)text, text_len);
-	CSHA1::Final();
-
-        char szReport[SHA1_DIGEST_LENGTH];
-	CSHA1::GetHash((UINT_8 *)szReport);
-
-	/* STEP 5 */
-	for (int j=0; j<(int)sizeof(m_opad); j++)
-	{
-		m_opad[j] ^= SHA1_Key[j];
-	}
-
-	/*STEP 7 */
-	CSHA1::Reset();
-        CSHA1::Update((UINT_8 *)m_opad, sizeof(m_opad));
-        CSHA1::Update((UINT_8 *)szReport, SHA1_DIGEST_LENGTH);
-	CSHA1::Final();
-
-	CSHA1::GetHash((UINT_8 *)digest);
-}
diff --git a/3party/liboauthcpp/src/HMAC_SHA1.h b/3party/liboauthcpp/src/HMAC_SHA1.h
deleted file mode 100644
index 19c6b5e237..0000000000
--- a/3party/liboauthcpp/src/HMAC_SHA1.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-	100% free public domain implementation of the HMAC-SHA1 algorithm
-	by Chien-Chung, Chung (Jim Chung) <jimchung1221@gmail.com>
-*/
-
-
-#ifndef __HMAC_SHA1_H__
-#define __HMAC_SHA1_H__
-
-#include "SHA1.h"
-
-typedef unsigned char BYTE ;
-
-class CHMAC_SHA1 : public CSHA1
-{
-public:
-
-    enum {
-        SHA1_DIGEST_LENGTH	= 20,
-        SHA1_BLOCK_SIZE		= 64
-    } ;
-
-private:
-    BYTE m_ipad[SHA1_BLOCK_SIZE];
-    BYTE m_opad[SHA1_BLOCK_SIZE];
-
-    // This holds one SHA1 block's worth of data, zero padded if necessary.
-    char SHA1_Key[SHA1_BLOCK_SIZE];
-
-public:
-    CHMAC_SHA1() {}
-
-    void HMAC_SHA1(BYTE *text, int text_len, BYTE *key, int key_len, BYTE *digest);
-};
-
-
-#endif /* __HMAC_SHA1_H__ */
diff --git a/3party/liboauthcpp/src/SHA1.cpp b/3party/liboauthcpp/src/SHA1.cpp
deleted file mode 100644
index ebd4615395..0000000000
--- a/3party/liboauthcpp/src/SHA1.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-	100% free public domain implementation of the SHA-1 algorithm
-	by Dominik Reichl <dominik.reichl@t-online.de>
-	Web: http://www.dominik-reichl.de/
-
-	Version 1.6 - 2005-02-07 (thanks to Howard Kapustein for patches)
-	- You can set the endianness in your files, no need to modify the
-	  header file of the CSHA1 class any more
-	- Aligned data support
-	- Made support/compilation of the utility functions (ReportHash
-	  and HashFile) optional (useful, if bytes count, for example in
-	  embedded environments)
-
-	Version 1.5 - 2005-01-01
-	- 64-bit compiler compatibility added
-	- Made variable wiping optional (define SHA1_WIPE_VARIABLES)
-	- Removed unnecessary variable initializations
-	- ROL32 improvement for the Microsoft compiler (using _rotl)
-
-	======== Test Vectors (from FIPS PUB 180-1) ========
-
-	SHA1("abc") =
-		A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
-
-	SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") =
-		84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
-
-	SHA1(A million repetitions of "a") =
-		34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
-*/
-
-#include "SHA1.h"
-#include <cassert>
-
-#ifdef SHA1_UTILITY_FUNCTIONS
-#define SHA1_MAX_FILE_BUFFER 8000
-#endif
-
-// Rotate x bits to the left
-#ifndef ROL32
-#ifdef _MSC_VER
-#define ROL32(_val32, _nBits) _rotl(_val32, _nBits)
-#else
-#define ROL32(_val32, _nBits) (((_val32)<<(_nBits))|((_val32)>>(32-(_nBits))))
-#endif
-#endif
-
-#ifdef SHA1_LITTLE_ENDIAN
-#define SHABLK0(i) (m_block->l[i] = \
-	(ROL32(m_block->l[i],24) & 0xFF00FF00) | (ROL32(m_block->l[i],8) & 0x00FF00FF))
-#else
-#define SHABLK0(i) (m_block->l[i])
-#endif
-
-#define SHABLK(i) (m_block->l[i&15] = ROL32(m_block->l[(i+13)&15] ^ m_block->l[(i+8)&15] \
-	^ m_block->l[(i+2)&15] ^ m_block->l[i&15],1))
-
-CSHA1::CSHA1()
-{
-	m_block = (SHA1_WORKSPACE_BLOCK *)m_workspace;
-
-	Reset();
-}
-
-CSHA1::~CSHA1()
-{
-	Reset();
-}
-
-void CSHA1::Reset()
-{
-	// SHA1 initialization constants
-	m_state[0] = 0x67452301;
-	m_state[1] = 0xEFCDAB89;
-	m_state[2] = 0x98BADCFE;
-	m_state[3] = 0x10325476;
-	m_state[4] = 0xC3D2E1F0;
-
-	m_count[0] = 0;
-	m_count[1] = 0;
-}
-
-void CSHA1::Transform(UINT_32 *state, UINT_8 *buffer)
-{
-	// Copy state[] to working vars
-	UINT_32 a = state[0], b = state[1], c = state[2], d = state[3], e = state[4];
-
-	memcpy(m_block, buffer, 64);
-
-// SHA-1 rounds
-#define _R0(v,w,x,y,z,i) { z+=((w&(x^y))^y)+SHABLK0(i)+0x5A827999+ROL32(v,5); w=ROL32(w,30); }
-#define _R1(v,w,x,y,z,i) { z+=((w&(x^y))^y)+SHABLK(i)+0x5A827999+ROL32(v,5); w=ROL32(w,30); }
-#define _R2(v,w,x,y,z,i) { z+=(w^x^y)+SHABLK(i)+0x6ED9EBA1+ROL32(v,5); w=ROL32(w,30); }
-#define _R3(v,w,x,y,z,i) { z+=(((w|x)&y)|(w&x))+SHABLK(i)+0x8F1BBCDC+ROL32(v,5); w=ROL32(w,30); }
-#define _R4(v,w,x,y,z,i) { z+=(w^x^y)+SHABLK(i)+0xCA62C1D6+ROL32(v,5); w=ROL32(w,30); }
-
-	// 4 rounds of 20 operations each. Loop unrolled.
-	_R0(a,b,c,d,e, 0); _R0(e,a,b,c,d, 1); _R0(d,e,a,b,c, 2); _R0(c,d,e,a,b, 3);
-	_R0(b,c,d,e,a, 4); _R0(a,b,c,d,e, 5); _R0(e,a,b,c,d, 6); _R0(d,e,a,b,c, 7);
-	_R0(c,d,e,a,b, 8); _R0(b,c,d,e,a, 9); _R0(a,b,c,d,e,10); _R0(e,a,b,c,d,11);
-	_R0(d,e,a,b,c,12); _R0(c,d,e,a,b,13); _R0(b,c,d,e,a,14); _R0(a,b,c,d,e,15);
-	_R1(e,a,b,c,d,16); _R1(d,e,a,b,c,17); _R1(c,d,e,a,b,18); _R1(b,c,d,e,a,19);
-	_R2(a,b,c,d,e,20); _R2(e,a,b,c,d,21); _R2(d,e,a,b,c,22); _R2(c,d,e,a,b,23);
-	_R2(b,c,d,e,a,24); _R2(a,b,c,d,e,25); _R2(e,a,b,c,d,26); _R2(d,e,a,b,c,27);
-	_R2(c,d,e,a,b,28); _R2(b,c,d,e,a,29); _R2(a,b,c,d,e,30); _R2(e,a,b,c,d,31);
-	_R2(d,e,a,b,c,32); _R2(c,d,e,a,b,33); _R2(b,c,d,e,a,34); _R2(a,b,c,d,e,35);
-	_R2(e,a,b,c,d,36); _R2(d,e,a,b,c,37); _R2(c,d,e,a,b,38); _R2(b,c,d,e,a,39);
-	_R3(a,b,c,d,e,40); _R3(e,a,b,c,d,41); _R3(d,e,a,b,c,42); _R3(c,d,e,a,b,43);
-	_R3(b,c,d,e,a,44); _R3(a,b,c,d,e,45); _R3(e,a,b,c,d,46); _R3(d,e,a,b,c,47);
-	_R3(c,d,e,a,b,48); _R3(b,c,d,e,a,49); _R3(a,b,c,d,e,50); _R3(e,a,b,c,d,51);
-	_R3(d,e,a,b,c,52); _R3(c,d,e,a,b,53); _R3(b,c,d,e,a,54); _R3(a,b,c,d,e,55);
-	_R3(e,a,b,c,d,56); _R3(d,e,a,b,c,57); _R3(c,d,e,a,b,58); _R3(b,c,d,e,a,59);
-	_R4(a,b,c,d,e,60); _R4(e,a,b,c,d,61); _R4(d,e,a,b,c,62); _R4(c,d,e,a,b,63);
-	_R4(b,c,d,e,a,64); _R4(a,b,c,d,e,65); _R4(e,a,b,c,d,66); _R4(d,e,a,b,c,67);
-	_R4(c,d,e,a,b,68); _R4(b,c,d,e,a,69); _R4(a,b,c,d,e,70); _R4(e,a,b,c,d,71);
-	_R4(d,e,a,b,c,72); _R4(c,d,e,a,b,73); _R4(b,c,d,e,a,74); _R4(a,b,c,d,e,75);
-	_R4(e,a,b,c,d,76); _R4(d,e,a,b,c,77); _R4(c,d,e,a,b,78); _R4(b,c,d,e,a,79);
-
-#undef _R0
-#undef _R1
-#undef _R2
-#undef _R3
-#undef _R4
-
-	// Add the working vars back into state
-	state[0] += a;
-	state[1] += b;
-	state[2] += c;
-	state[3] += d;
-	state[4] += e;
-
-	// Wipe variables
-#ifdef SHA1_WIPE_VARIABLES
-	a = b = c = d = e = 0;
-#endif
-}
-
-// Use this function to hash in binary data and strings
-void CSHA1::Update(UINT_8 *data, UINT_32 len)
-{
-	UINT_32 i, j;
-
-	j = (m_count[0] >> 3) & 63;
-
-	if((m_count[0] += len << 3) < (len << 3)) m_count[1]++;
-
-	m_count[1] += (len >> 29);
-
-	if((j + len) > 63)
-	{
-		i = 64 - j;
-		memcpy(&m_buffer[j], data, i);
-		Transform(m_state, m_buffer);
-
-		for(; i + 63 < len; i += 64) Transform(m_state, &data[i]);
-
-		j = 0;
-	}
-	else i = 0;
-
-	memcpy(&m_buffer[j], &data[i], len - i);
-}
-
-#ifdef SHA1_UTILITY_FUNCTIONS
-// Hash in file contents
-bool CSHA1::HashFile(char *szFileName)
-{
-	unsigned long ulFileSize, ulRest, ulBlocks;
-	unsigned long i;
-	UINT_8 uData[SHA1_MAX_FILE_BUFFER];
-	FILE *fIn;
-
-	if(szFileName == NULL) return false;
-
-	fIn = fopen(szFileName, "rb");
-	if(fIn == NULL) return false;
-
-	fseek(fIn, 0, SEEK_END);
-	ulFileSize = (unsigned long)ftell(fIn);
-	fseek(fIn, 0, SEEK_SET);
-
-	if(ulFileSize != 0)
-	{
-		ulBlocks = ulFileSize / SHA1_MAX_FILE_BUFFER;
-		ulRest = ulFileSize % SHA1_MAX_FILE_BUFFER;
-	}
-	else
-	{
-		ulBlocks = 0;
-		ulRest = 0;
-	}
-
-	for(i = 0; i < ulBlocks; i++)
-	{
-		size_t nread = fread(uData, 1, SHA1_MAX_FILE_BUFFER, fIn);
-                assert(nread == SHA1_MAX_FILE_BUFFER);
-		Update((UINT_8 *)uData, SHA1_MAX_FILE_BUFFER);
-	}
-
-	if(ulRest != 0)
-	{
-		size_t nread = fread(uData, 1, ulRest, fIn);
-                assert(nread == ulRest);
-		Update((UINT_8 *)uData, ulRest);
-	}
-
-	fclose(fIn); fIn = NULL;
-	return true;
-}
-#endif
-
-void CSHA1::Final()
-{
-	UINT_32 i;
-	UINT_8 finalcount[8];
-
-	for(i = 0; i < 8; i++)
-		finalcount[i] = (UINT_8)((m_count[((i >= 4) ? 0 : 1)]
-			>> ((3 - (i & 3)) * 8) ) & 255); // Endian independent
-
-	Update((UINT_8 *)"\200", 1);
-
-	while ((m_count[0] & 504) != 448)
-		Update((UINT_8 *)"\0", 1);
-
-	Update(finalcount, 8); // Cause a SHA1Transform()
-
-	for(i = 0; i < 20; i++)
-	{
-		m_digest[i] = (UINT_8)((m_state[i >> 2] >> ((3 - (i & 3)) * 8) ) & 255);
-	}
-
-	// Wipe variables for security reasons
-#ifdef SHA1_WIPE_VARIABLES
-	i = 0;
-	memset(m_buffer, 0, 64);
-	memset(m_state, 0, 20);
-	memset(m_count, 0, 8);
-	memset(finalcount, 0, 8);
-	Transform(m_state, m_buffer);
-#endif
-}
-
-#ifdef SHA1_UTILITY_FUNCTIONS
-// Get the final hash as a pre-formatted string
-void CSHA1::ReportHash(char *szReport, unsigned char uReportType)
-{
-	unsigned char i;
-	char szTemp[16];
-
-	if(szReport == NULL) return;
-
-	if(uReportType == REPORT_HEX)
-	{
-		snprintf(szTemp, sizeof(szTemp), "%02X", m_digest[0]);
-		strcat(szReport, szTemp);
-
-		for(i = 1; i < 20; i++)
-		{
-			snprintf(szTemp, sizeof(szTemp), " %02X", m_digest[i]);
-			strcat(szReport, szTemp);
-		}
-	}
-	else if(uReportType == REPORT_DIGIT)
-	{
-		snprintf(szTemp, sizeof(szTemp), "%u", m_digest[0]);
-		strcat(szReport, szTemp);
-
-		for(i = 1; i < 20; i++)
-		{
-			snprintf(szTemp, sizeof(szTemp), " %u", m_digest[i]);
-			strcat(szReport, szTemp);
-		}
-	}
-	else strcpy(szReport, "Error: Unknown report type!");
-}
-#endif
-
-// Get the raw message digest
-void CSHA1::GetHash(UINT_8 *puDest)
-{
-	memcpy(puDest, m_digest, 20);
-}
diff --git a/3party/liboauthcpp/src/SHA1.h b/3party/liboauthcpp/src/SHA1.h
deleted file mode 100644
index 794285d4fd..0000000000
--- a/3party/liboauthcpp/src/SHA1.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-	100% free public domain implementation of the SHA-1 algorithm
-	by Dominik Reichl <dominik.reichl@t-online.de>
-	Web: http://www.dominik-reichl.de/
-
-	Version 1.6 - 2005-02-07 (thanks to Howard Kapustein for patches)
-	- You can set the endianness in your files, no need to modify the
-	  header file of the CSHA1 class any more
-	- Aligned data support
-	- Made support/compilation of the utility functions (ReportHash
-	  and HashFile) optional (useful, if bytes count, for example in
-	  embedded environments)
-
-	Version 1.5 - 2005-01-01
-	- 64-bit compiler compatibility added
-	- Made variable wiping optional (define SHA1_WIPE_VARIABLES)
-	- Removed unnecessary variable initializations
-	- ROL32 improvement for the Microsoft compiler (using _rotl)
-
-	======== Test Vectors (from FIPS PUB 180-1) ========
-
-	SHA1("abc") =
-		A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
-
-	SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") =
-		84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
-
-	SHA1(A million repetitions of "a") =
-		34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
-*/
-
-#ifndef ___SHA1_HDR___
-#define ___SHA1_HDR___
-
-#if !defined(SHA1_UTILITY_FUNCTIONS) && !defined(SHA1_NO_UTILITY_FUNCTIONS)
-#define SHA1_UTILITY_FUNCTIONS
-#endif
-
-#include <memory.h> // Needed for memset and memcpy
-
-#ifdef SHA1_UTILITY_FUNCTIONS
-#include <stdio.h>  // Needed for file access and sprintf
-#include <string.h> // Needed for strcat and strcpy
-#endif
-
-#ifdef _MSC_VER
-#include <stdlib.h>
-#endif
-
-// You can define the endian mode in your files, without modifying the SHA1
-// source files. Just #define SHA1_LITTLE_ENDIAN or #define SHA1_BIG_ENDIAN
-// in your files, before including the SHA1.h header file. If you don't
-// define anything, the class defaults to little endian.
-
-#if !defined(SHA1_LITTLE_ENDIAN) && !defined(SHA1_BIG_ENDIAN)
-#define SHA1_LITTLE_ENDIAN
-#endif
-
-// Same here. If you want variable wiping, #define SHA1_WIPE_VARIABLES, if
-// not, #define SHA1_NO_WIPE_VARIABLES. If you don't define anything, it
-// defaults to wiping.
-
-#if !defined(SHA1_WIPE_VARIABLES) && !defined(SHA1_NO_WIPE_VARIABLES)
-#define SHA1_WIPE_VARIABLES
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Define 8- and 32-bit variables
-
-#ifndef UINT_32
-
-#ifdef _MSC_VER
-
-#define UINT_8  unsigned __int8
-#define UINT_32 unsigned __int32
-
-#else
-
-#define UINT_8 unsigned char
-
-#if (ULONG_MAX == 0xFFFFFFFF && UINT_MAX < ULONG_MAX)
-#define UINT_32 unsigned long
-#else
-#define UINT_32 unsigned int
-#endif
-
-#endif
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// Declare SHA1 workspace
-
-typedef union
-{
-	UINT_8  c[64];
-	UINT_32 l[16];
-} SHA1_WORKSPACE_BLOCK;
-
-class CSHA1
-{
-public:
-#ifdef SHA1_UTILITY_FUNCTIONS
-	// Two different formats for ReportHash(...)
-	enum
-	{
-		REPORT_HEX = 0,
-		REPORT_DIGIT = 1
-	};
-#endif
-
-	// Constructor and Destructor
-	CSHA1();
-	~CSHA1();
-
-	UINT_32 m_state[5];
-	UINT_32 m_count[2];
-	UINT_32 __reserved1[1];
-	UINT_8  m_buffer[64];
-	UINT_8  m_digest[20];
-	UINT_32 __reserved2[3];
-
-	void Reset();
-
-	// Update the hash value
-	void Update(UINT_8 *data, UINT_32 len);
-#ifdef SHA1_UTILITY_FUNCTIONS
-	bool HashFile(char *szFileName);
-#endif
-
-	// Finalize hash and report
-	void Final();
-
-	// Report functions: as pre-formatted and raw data
-#ifdef SHA1_UTILITY_FUNCTIONS
-	void ReportHash(char *szReport, unsigned char uReportType = REPORT_HEX);
-#endif
-	void GetHash(UINT_8 *puDest);
-
-private:
-	// Private SHA-1 transformation
-	void Transform(UINT_32 *state, UINT_8 *buffer);
-
-	// Member variables
-	UINT_8 m_workspace[64];
-	SHA1_WORKSPACE_BLOCK *m_block; // SHA1 pointer to the byte array above
-};
-
-#endif
diff --git a/3party/liboauthcpp/src/base64.cpp b/3party/liboauthcpp/src/base64.cpp
deleted file mode 100644
index c0bb07cd02..0000000000
--- a/3party/liboauthcpp/src/base64.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-   base64.cpp and base64.h
-
-   Copyright (C) 2004-2008 Ren� Nyffenegger
-
-   This source code is provided 'as-is', without any express or implied
-   warranty. In no event will the author be held liable for any damages
-   arising from the use of this software.
-
-   Permission is granted to anyone to use this software for any purpose,
-   including commercial applications, and to alter it and redistribute it
-   freely, subject to the following restrictions:
-
-   1. The origin of this source code must not be misrepresented; you must not
-      claim that you wrote the original source code. If you use this source code
-      in a product, an acknowledgment in the product documentation would be
-      appreciated but is not required.
-
-   2. Altered source versions must be plainly marked as such, and must not be
-      misrepresented as being the original source code.
-
-   3. This notice may not be removed or altered from any source distribution.
-
-   Ren� Nyffenegger rene.nyffenegger@adp-gmbh.ch
-
-*/
-
-#include "base64.h"
-#include <iostream>
-
-static const std::string base64_chars =
-             "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-             "abcdefghijklmnopqrstuvwxyz"
-             "0123456789+/";
-
-
-static inline bool is_base64(unsigned char c) {
-  return (isalnum(c) || (c == '+') || (c == '/'));
-}
-
-std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
-  std::string ret;
-  int i = 0;
-  int j = 0;
-  unsigned char char_array_3[3];
-  unsigned char char_array_4[4];
-
-  while (in_len--) {
-    char_array_3[i++] = *(bytes_to_encode++);
-    if (i == 3) {
-      char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
-      char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
-      char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
-      char_array_4[3] = char_array_3[2] & 0x3f;
-
-      for(i = 0; (i <4) ; i++)
-        ret += base64_chars[char_array_4[i]];
-      i = 0;
-    }
-  }
-
-  if (i)
-  {
-    for(j = i; j < 3; j++)
-      char_array_3[j] = '\0';
-
-    char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
-    char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
-    char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
-    char_array_4[3] = char_array_3[2] & 0x3f;
-
-    for (j = 0; (j < i + 1); j++)
-      ret += base64_chars[char_array_4[j]];
-
-    while((i++ < 3))
-      ret += '=';
-
-  }
-
-  return ret;
-
-}
-
-std::string base64_decode(std::string const& encoded_string) {
-  int in_len = encoded_string.size();
-  int i = 0;
-  int j = 0;
-  int in_ = 0;
-  unsigned char char_array_4[4], char_array_3[3];
-  std::string ret;
-
-  while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
-    char_array_4[i++] = encoded_string[in_]; in_++;
-    if (i ==4) {
-      for (i = 0; i <4; i++)
-        char_array_4[i] = base64_chars.find(char_array_4[i]);
-
-      char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
-      char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
-      char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
-
-      for (i = 0; (i < 3); i++)
-        ret += char_array_3[i];
-      i = 0;
-    }
-  }
-
-  if (i) {
-    for (j = i; j <4; j++)
-      char_array_4[j] = 0;
-
-    for (j = 0; j <4; j++)
-      char_array_4[j] = base64_chars.find(char_array_4[j]);
-
-    char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
-    char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
-    char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
-
-    for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
-  }
-
-  return ret;
-}
diff --git a/3party/liboauthcpp/src/base64.h b/3party/liboauthcpp/src/base64.h
deleted file mode 100644
index 65d5db8b22..0000000000
--- a/3party/liboauthcpp/src/base64.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#include <string>
-
-std::string base64_encode(unsigned char const* , unsigned int len);
-std::string base64_decode(std::string const& s);
diff --git a/3party/liboauthcpp/src/liboauthcpp.cpp b/3party/liboauthcpp/src/liboauthcpp.cpp
deleted file mode 100644
index 8850b7f25f..0000000000
--- a/3party/liboauthcpp/src/liboauthcpp.cpp
+++ /dev/null
@@ -1,621 +0,0 @@
-#include <liboauthcpp/liboauthcpp.h>
-#include "HMAC_SHA1.h"
-#include "base64.h"
-#include "urlencode.h"
-#include <cstdlib>
-#include <vector>
-#include <cassert>
-
-namespace OAuth {
-
-namespace Defaults
-{
-    /* Constants */
-    const int BUFFSIZE = 1024;
-    const int BUFFSIZE_LARGE = 1024;
-    const std::string CONSUMERKEY_KEY = "oauth_consumer_key";
-    const std::string CALLBACK_KEY = "oauth_callback";
-    const std::string VERSION_KEY = "oauth_version";
-    const std::string SIGNATUREMETHOD_KEY = "oauth_signature_method";
-    const std::string SIGNATURE_KEY = "oauth_signature";
-    const std::string TIMESTAMP_KEY = "oauth_timestamp";
-    const std::string NONCE_KEY = "oauth_nonce";
-    const std::string TOKEN_KEY = "oauth_token";
-    const std::string TOKENSECRET_KEY = "oauth_token_secret";
-    const std::string VERIFIER_KEY = "oauth_verifier";
-
-    const std::string AUTHHEADER_FIELD = "Authorization: ";
-    const std::string AUTHHEADER_PREFIX = "OAuth ";
-};
-
-/** std::string -> std::string conversion function */
-typedef std::string(*StringConvertFunction)(const std::string&);
-
-LogLevel gLogLevel = LogLevelNone;
-
-void SetLogLevel(LogLevel lvl) {
-    gLogLevel = lvl;
-}
-#define LOG(lvl, msg)                                           \
-    do  {                                                       \
-        if (lvl <= gLogLevel) std::cerr << "OAUTH: " << msg << std::endl; \
-    } while(0)
-
-std::string PercentEncode(const std::string& decoded) {
-    return urlencode(decoded, URLEncode_Everything);
-}
-
-std::string URLEncode(const std::string& decoded) {
-    return PercentEncode(decoded);
-}
-
-std::string HttpEncodePath(const std::string& decoded) {
-    return urlencode(decoded, URLEncode_Path);
-}
-
-std::string HttpEncodeQueryKey(const std::string& decoded) {
-    return urlencode(decoded, URLEncode_QueryKey);
-}
-
-std::string HttpEncodeQueryValue(const std::string& decoded) {
-    return urlencode(decoded, URLEncode_QueryValue);
-}
-
-namespace {
-std::string PassThrough(const std::string& decoded) {
-    return decoded;
-}
-
-std::string RequestTypeString(const Http::RequestType rt) {
-    switch(rt) {
-      case Http::Invalid: return "Invalid Request Type"; break;
-      case Http::Head: return "HEAD"; break;
-      case Http::Get: return "GET"; break;
-      case Http::Post: return "POST"; break;
-      case Http::Delete: return "DELETE"; break;
-      case Http::Put: return "PUT"; break;
-      default: return "Unknown Request Type"; break;
-    }
-    return "";
-}
-}
-
-// Parse a single key-value pair
-static std::pair<std::string, std::string> ParseKeyValuePair(const std::string& encoded) {
-    std::size_t eq_pos = encoded.find("=");
-    if (eq_pos == std::string::npos)
-        throw ParseError("Failed to find '=' in key-value pair.");
-    return std::pair<std::string, std::string>(
-        encoded.substr(0, eq_pos),
-        encoded.substr(eq_pos+1)
-    );
-}
-
-KeyValuePairs ParseKeyValuePairs(const std::string& encoded) {
-    KeyValuePairs result;
-
-    if (encoded.length() == 0) return result;
-
-    // Split by &
-    std::size_t last_amp = 0;
-    // We can bail when the last one "found" was the end of the string
-    while(true) {
-        std::size_t next_amp = encoded.find('&', last_amp+1);
-        std::string keyval =
-            (next_amp == std::string::npos) ?
-            encoded.substr(last_amp) :
-            encoded.substr(last_amp, next_amp-last_amp);
-        result.insert(ParseKeyValuePair(keyval));
-        // Track spot after the & so the first iteration works without dealing
-        // with -1 index
-        last_amp = next_amp+1;
-
-        // Exit condition
-        if (next_amp == std::string::npos) break;
-    }
-    return result;
-}
-
-// Helper for parameters in key-value pair lists that should only appear
-// once. Either replaces an existing entry or adds a new entry.
-static void ReplaceOrInsertKeyValuePair(KeyValuePairs& kvp, const std::string& key, const std::string& value) {
-    assert(kvp.count(key) <= 1);
-    KeyValuePairs::iterator it = kvp.find(key);
-    if (it != kvp.end())
-        it->second = value;
-    else
-        kvp.insert(KeyValuePairs::value_type(key, value));
-}
-
-Consumer::Consumer(const std::string& key, const std::string& secret)
- : mKey(key), mSecret(secret)
-{
-}
-
-
-
-Token::Token(const std::string& key, const std::string& secret)
- : mKey(key), mSecret(secret)
-{
-}
-
-Token::Token(const std::string& key, const std::string& secret, const std::string& pin)
- : mKey(key), mSecret(secret), mPin(pin)
-{
-}
-
-Token Token::extract(const std::string& response) {
-    return Token::extract(ParseKeyValuePairs(response));
-}
-
-Token Token::extract(const KeyValuePairs& response) {
-    std::string token_key, token_secret;
-
-    KeyValuePairs::const_iterator it = response.find(Defaults::TOKEN_KEY);
-    if (it == response.end())
-        throw MissingKeyError("Couldn't find oauth_token in response");
-    token_key = it->second;
-
-    it = response.find(Defaults::TOKENSECRET_KEY);
-    if (it == response.end())
-        throw MissingKeyError("Couldn't find oauth_token_secret in response");
-    token_secret = it->second;
-
-    return Token(token_key, token_secret);
-}
-
-
-bool Client::initialized = false;
-int Client::testingNonce = 0;
-time_t Client::testingTimestamp = 0;
-
-void Client::initialize() {
-    if(!initialized) {
-        srand( time( NULL ) );
-        initialized = true;
-    }
-}
-
-void Client::initialize(int nonce, time_t timestamp) {
-    if(!initialized) {
-        testingNonce = nonce;
-        testingTimestamp = timestamp;
-        initialized = true;
-    }
-}
-
-void Client::__resetInitialize() {
-    testingNonce = 0;
-    testingTimestamp = 0;
-    initialized = false;
-}
-
-Client::Client(const Consumer* consumer)
- : mConsumer(consumer),
-   mToken(NULL)
-{
-}
-
-Client::Client(const Consumer* consumer, const Token* token)
- : mConsumer(consumer),
-   mToken(token)
-{
-}
-
-
-Client::~Client()
-{
-}
-
-
-
-/*++
-* @method: Client::generateNonceTimeStamp
-*
-* @description: this method generates nonce and timestamp for OAuth header
-*
-* @input: none
-*
-* @output: none
-*
-* @remarks: internal method
-*
-*--*/
-void Client::generateNonceTimeStamp()
-{
-    // Make sure the random seed has been initialized
-    Client::initialize();
-
-    char szTime[Defaults::BUFFSIZE];
-    char szRand[Defaults::BUFFSIZE];
-    memset( szTime, 0, Defaults::BUFFSIZE );
-    memset( szRand, 0, Defaults::BUFFSIZE );
-
-    // Any non-zero timestamp triggers testing mode with fixed values. Fixing
-    // both values makes life easier because generating a signature is
-    // idempotent -- otherwise using macros can cause double evaluation and
-    // incorrect results because of repeated calls to rand().
-    snprintf( szRand, sizeof(szRand), "%x", ((testingTimestamp != 0) ? testingNonce : rand()) );
-    snprintf( szTime, sizeof(szTime), "%ld", ((testingTimestamp != 0) ? testingTimestamp : time( NULL )) );
-
-    m_nonce.assign( szTime );
-    m_nonce.append( szRand );
-
-    m_timeStamp.assign( szTime );
-}
-
-/*++
-* @method: Client::buildOAuthTokenKeyValuePairs
-*
-* @description: this method prepares key-value pairs required for OAuth header
-*               and signature generation.
-*
-* @input: includeOAuthVerifierPin - flag to indicate whether oauth_verifer key-value
-*                                   pair needs to be included. oauth_verifer is only
-*                                   used during exchanging request token with access token.
-*         rawData - url encoded data. this is used during signature generation.
-*         oauthSignature - base64 and url encoded OAuth signature.
-*         generateTimestamp - If true, then generate new timestamp for nonce.
-*
-* @input: urlEncodeValues - if true, URLEncode the values inserted into the
-*         output keyValueMap
-* @output: keyValueMap - map in which key-value pairs are populated
-*
-* @remarks: internal method
-*
-*--*/
-bool Client::buildOAuthTokenKeyValuePairs( const bool includeOAuthVerifierPin,
-                                          const std::string& rawData,
-                                          const std::string& oauthSignature,
-                                          KeyValuePairs& keyValueMap,
-                                          const bool urlEncodeValues,
-                                          const bool generateTimestamp )
-{
-    // Encodes value part of key-value pairs depending on type of output (query
-    // string vs. HTTP headers.
-    StringConvertFunction value_encoder = (urlEncodeValues ? HttpEncodeQueryValue : PassThrough);
-
-    /* Generate nonce and timestamp if required */
-    if( generateTimestamp )
-    {
-        generateNonceTimeStamp();
-    }
-
-    /* Consumer key and its value */
-    ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::CONSUMERKEY_KEY, value_encoder(mConsumer->key()));
-
-    /* Nonce key and its value */
-    ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::NONCE_KEY, value_encoder(m_nonce));
-
-    /* Signature if supplied */
-    if( oauthSignature.length() )
-    {
-        // Signature is exempt from encoding. The procedure for
-        // computing it already percent-encodes it as required by the
-        // spec for both query string and Auth header
-        // methods. Therefore, it's pass-through in both cases.
-        ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::SIGNATURE_KEY, oauthSignature);
-    }
-
-    /* Signature method, only HMAC-SHA1 as of now */
-    ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::SIGNATUREMETHOD_KEY, std::string( "HMAC-SHA1" ));
-
-    /* Timestamp */
-    ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::TIMESTAMP_KEY, value_encoder(m_timeStamp));
-
-    /* Token */
-    if( mToken && mToken->key().length() )
-    {
-        ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::TOKEN_KEY, value_encoder(mToken->key()));
-    }
-
-    /* Verifier */
-    if( includeOAuthVerifierPin && mToken && mToken->pin().length() )
-    {
-        ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::VERIFIER_KEY, value_encoder(mToken->pin()));
-    }
-
-    /* Version */
-    ReplaceOrInsertKeyValuePair(keyValueMap, Defaults::VERSION_KEY, std::string( "1.0" ));
-
-    /* Data if it's present */
-    if( rawData.length() )
-    {
-        /* Data should already be urlencoded once */
-        std::string dummyStrKey;
-        std::string dummyStrValue;
-        size_t nPos = rawData.find_first_of( "=" );
-        if( std::string::npos != nPos )
-        {
-            dummyStrKey = rawData.substr( 0, nPos );
-            dummyStrValue = rawData.substr( nPos + 1 );
-            ReplaceOrInsertKeyValuePair(keyValueMap, dummyStrKey, dummyStrValue);
-        }
-    }
-
-    return ( keyValueMap.size() ) ? true : false;
-}
-
-/*++
-* @method: Client::getSignature
-*
-* @description: this method calculates HMAC-SHA1 signature of OAuth header
-*
-* @input: eType - HTTP request type
-*         rawUrl - raw url of the HTTP request
-*         rawKeyValuePairs - key-value pairs containing OAuth headers and HTTP data
-*
-* @output: oAuthSignature - base64 and url encoded signature
-*
-* @remarks: internal method
-*
-*--*/
-bool Client::getSignature( const Http::RequestType eType,
-                          const std::string& rawUrl,
-                          const KeyValuePairs& rawKeyValuePairs,
-                          std::string& oAuthSignature )
-{
-    std::string rawParams;
-    std::string paramsSeperator;
-    std::string sigBase;
-
-    /* Initially empty signature */
-    oAuthSignature.assign( "" );
-
-    /* Build a string using key-value pairs */
-    paramsSeperator = "&";
-    getStringFromOAuthKeyValuePairs( rawKeyValuePairs, rawParams, paramsSeperator );
-    LOG(LogLevelDebug, "Normalized parameters: " << rawParams);
-
-    /* Start constructing base signature string. Refer http://dev.twitter.com/auth#intro */
-    switch( eType )
-    {
-      case Http::Head:
-        {
-            sigBase.assign( "HEAD&" );
-        }
-        break;
-
-      case Http::Get:
-        {
-            sigBase.assign( "GET&" );
-        }
-        break;
-
-      case Http::Post:
-        {
-            sigBase.assign( "POST&" );
-        }
-        break;
-
-      case Http::Delete:
-        {
-            sigBase.assign( "DELETE&" );
-        }
-        break;
-
-      case Http::Put:
-        {
-            sigBase.assign( "PUT&" );
-        }
-        break;
-
-    default:
-        {
-            return false;
-        }
-        break;
-    }
-    sigBase.append( PercentEncode( rawUrl ) );
-    sigBase.append( "&" );
-    sigBase.append( PercentEncode( rawParams ) );
-    LOG(LogLevelDebug, "Signature base string: " << sigBase);
-
-    /* Now, hash the signature base string using HMAC_SHA1 class */
-    CHMAC_SHA1 objHMACSHA1;
-    std::string secretSigningKey;
-    unsigned char strDigest[Defaults::BUFFSIZE_LARGE];
-
-    memset( strDigest, 0, Defaults::BUFFSIZE_LARGE );
-
-    /* Signing key is composed of consumer_secret&token_secret */
-    secretSigningKey.assign( PercentEncode(mConsumer->secret()) );
-    secretSigningKey.append( "&" );
-    if( mToken && mToken->secret().length() )
-    {
-        secretSigningKey.append( PercentEncode(mToken->secret()) );
-    }
-
-    objHMACSHA1.HMAC_SHA1( (unsigned char*)sigBase.c_str(),
-                           sigBase.length(),
-                           (unsigned char*)secretSigningKey.c_str(),
-                           secretSigningKey.length(),
-                           strDigest );
-
-    /* Do a base64 encode of signature */
-    std::string base64Str = base64_encode( strDigest, 20 /* SHA 1 digest is 160 bits */ );
-    LOG(LogLevelDebug, "Signature: " << base64Str);
-
-    /* Do an url encode */
-    oAuthSignature = PercentEncode( base64Str );
-    LOG(LogLevelDebug, "Percent-encoded Signature: " << oAuthSignature);
-
-    return ( oAuthSignature.length() ) ? true : false;
-}
-
-std::string Client::getHttpHeader(const Http::RequestType eType,
-    const std::string& rawUrl,
-    const std::string& rawData,
-    const bool includeOAuthVerifierPin)
-{
-    return Defaults::AUTHHEADER_PREFIX + buildOAuthParameterString(AuthorizationHeaderString, eType, rawUrl, rawData, includeOAuthVerifierPin);
-}
-
-std::string Client::getFormattedHttpHeader(const Http::RequestType eType,
-    const std::string& rawUrl,
-    const std::string& rawData,
-    const bool includeOAuthVerifierPin)
-{
-    return Defaults::AUTHHEADER_FIELD + Defaults::AUTHHEADER_PREFIX + buildOAuthParameterString(AuthorizationHeaderString, eType, rawUrl, rawData, includeOAuthVerifierPin);
-}
-
-std::string Client::getURLQueryString(const Http::RequestType eType,
-    const std::string& rawUrl,
-    const std::string& rawData,
-    const bool includeOAuthVerifierPin)
-{
-    return buildOAuthParameterString(QueryStringString, eType, rawUrl, rawData, includeOAuthVerifierPin);
-}
-
-std::string Client::buildOAuthParameterString(
-    ParameterStringType string_type,
-    const Http::RequestType eType,
-    const std::string& rawUrl,
-    const std::string& rawData,
-    const bool includeOAuthVerifierPin)
-{
-    KeyValuePairs rawKeyValuePairs;
-    std::string rawParams;
-    std::string oauthSignature;
-    std::string paramsSeperator;
-    std::string pureUrl( rawUrl );
-
-    LOG(LogLevelDebug, "Signing request " << RequestTypeString(eType) << " " << rawUrl << " " << rawData);
-
-    std::string separator;
-    bool do_urlencode;
-    if (string_type == AuthorizationHeaderString) {
-        separator = ",";
-        do_urlencode = false;
-    }
-    else { // QueryStringString
-        separator = "&";
-        do_urlencode = true;
-    }
-
-    /* Clear header string initially */
-    rawKeyValuePairs.clear();
-
-    /* If URL itself contains ?key=value, then extract and put them in map */
-    size_t nPos = rawUrl.find_first_of( "?" );
-    if( std::string::npos != nPos )
-    {
-        /* Get only URL */
-        pureUrl = rawUrl.substr( 0, nPos );
-
-        /* Get only key=value data part */
-        std::string dataPart = rawUrl.substr( nPos + 1 );
-        rawKeyValuePairs = ParseKeyValuePairs(dataPart);
-    }
-
-    // NOTE: We always request URL encoding on the first pass so that the
-    // signature generation works properly. This *relies* on
-    // buildOAuthTokenKeyValuePairs overwriting values when we do the second
-    // pass to get the values in the form we actually want. The signature and
-    // rawdata are the only things that change, but the signature is only used
-    // in the second pass and the rawdata is already encoded, regardless of
-    // request type.
-
-    /* Build key-value pairs needed for OAuth request token, without signature */
-    buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, rawData, std::string( "" ), rawKeyValuePairs, true, true );
-
-    /* Get url encoded base64 signature using request type, url and parameters */
-    getSignature( eType, pureUrl, rawKeyValuePairs, oauthSignature );
-
-    /* Now, again build key-value pairs with signature this time */
-    buildOAuthTokenKeyValuePairs( includeOAuthVerifierPin, std::string( "" ), oauthSignature, rawKeyValuePairs, do_urlencode, false );
-
-    /* Get OAuth header in string format. If we're getting the Authorization
-     * header, we need to filter out other parameters.
-     */
-    if (string_type == AuthorizationHeaderString) {
-        KeyValuePairs oauthKeyValuePairs;
-        std::vector<std::string> oauth_keys;
-        oauth_keys.push_back(Defaults::CONSUMERKEY_KEY);
-        oauth_keys.push_back(Defaults::NONCE_KEY);
-        oauth_keys.push_back(Defaults::SIGNATURE_KEY);
-        oauth_keys.push_back(Defaults::SIGNATUREMETHOD_KEY);
-        oauth_keys.push_back(Defaults::TIMESTAMP_KEY);
-        oauth_keys.push_back(Defaults::TOKEN_KEY);
-        oauth_keys.push_back(Defaults::VERIFIER_KEY);
-        oauth_keys.push_back(Defaults::VERSION_KEY);
-
-        for(size_t i = 0; i < oauth_keys.size(); i++) {
-            assert(rawKeyValuePairs.count(oauth_keys[i]) <= 1);
-            KeyValuePairs::iterator oauth_key_it = rawKeyValuePairs.find(oauth_keys[i]);
-            if (oauth_key_it != rawKeyValuePairs.end())
-                ReplaceOrInsertKeyValuePair(oauthKeyValuePairs, oauth_keys[i], oauth_key_it->second);
-        }
-        getStringFromOAuthKeyValuePairs( oauthKeyValuePairs, rawParams, separator );
-    }
-    else if (string_type == QueryStringString) {
-        getStringFromOAuthKeyValuePairs( rawKeyValuePairs, rawParams, separator );
-    }
-
-    /* Build authorization header */
-    return rawParams;
-}
-
-/*++
-* @method: Client::getStringFromOAuthKeyValuePairs
-*
-* @description: this method builds a sorted string from key-value pairs
-*
-* @input: rawParamMap - key-value pairs map
-*         paramsSeperator - sepearator, either & or ,
-*
-* @output: rawParams - sorted string of OAuth parameters
-*
-* @remarks: internal method
-*
-*--*/
-bool Client::getStringFromOAuthKeyValuePairs( const KeyValuePairs& rawParamMap,
-                                             std::string& rawParams,
-                                             const std::string& paramsSeperator )
-{
-    rawParams.assign( "" );
-    if( rawParamMap.size() )
-    {
-        KeyValueList keyValueList;
-        std::string dummyStr;
-
-        /* Push key-value pairs to a list of strings */
-        keyValueList.clear();
-        KeyValuePairs::const_iterator itMap = rawParamMap.begin();
-        for( ; itMap != rawParamMap.end(); itMap++ )
-        {
-            dummyStr.assign( itMap->first );
-            dummyStr.append( "=" );
-            if( paramsSeperator == "," )
-            {
-                dummyStr.append( "\"" );
-            }
-            dummyStr.append( itMap->second );
-            if( paramsSeperator == "," )
-            {
-                dummyStr.append( "\"" );
-            }
-            keyValueList.push_back( dummyStr );
-        }
-
-        /* Sort key-value pairs based on key name */
-        keyValueList.sort();
-
-        /* Now, form a string */
-        dummyStr.assign( "" );
-        KeyValueList::iterator itKeyValue = keyValueList.begin();
-        for( ; itKeyValue != keyValueList.end(); itKeyValue++ )
-        {
-            if( dummyStr.length() )
-            {
-                dummyStr.append( paramsSeperator );
-            }
-            dummyStr.append( itKeyValue->c_str() );
-        }
-        rawParams.assign( dummyStr );
-    }
-    return ( rawParams.length() ) ? true : false;
-}
-
-
-} // namespace OAuth
diff --git a/3party/liboauthcpp/src/urlencode.cpp b/3party/liboauthcpp/src/urlencode.cpp
deleted file mode 100644
index 9ad5f3b172..0000000000
--- a/3party/liboauthcpp/src/urlencode.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "urlencode.h"
-#include <cassert>
-
-std::string char2hex( char dec )
-{
-	char dig1 = (dec&0xF0)>>4;
-	char dig2 = (dec&0x0F);
-	if ( 0<= dig1 && dig1<= 9) dig1+=48;    //0,48 in ascii
-	if (10<= dig1 && dig1<=15) dig1+=65-10; //A,65 in ascii
-	if ( 0<= dig2 && dig2<= 9) dig2+=48;
-	if (10<= dig2 && dig2<=15) dig2+=65-10;
-
-    std::string r;
-	r.append( &dig1, 1);
-	r.append( &dig2, 1);
-	return r;
-}
-
-std::string urlencode( const std::string &c, URLEncodeType enctype)
-{
-
-    std::string escaped;
-	int max = c.length();
-	for(int i=0; i<max; i++)
-	{
-            // Unreserved chars
-		if ( (48 <= c[i] && c[i] <= 57) ||//0-9
-			(65 <= c[i] && c[i] <= 90) ||//ABC...XYZ
-			(97 <= c[i] && c[i] <= 122) || //abc...xyz
-			(c[i]=='~' || c[i]=='-' || c[i]=='_' || c[i]=='.')
-			)
-		{
-			escaped.append( &c[i], 1);
-		}
-                else if (c[i] != ':' && c[i] != '/' && c[i] != '?' && c[i] != '#' &&
-                    c[i] != '[' && c[i] != ']' && c[i] != '@' && c[i] != '%' &&
-
-                    c[i] != '!' && c[i] != '$' && c[i] != '&' && c[i] != '\'' &&
-                    c[i] != '(' && c[i] != ')' && c[i] != '*' && c[i] != '+' &&
-                    c[i] != ',' && c[i] != ';' && c[i] != '=')
-                {
-                    // Characters not in unreserved (first if block) and not in
-                    // the reserved set are always encoded.
-                    escaped.append("%");
-                    escaped.append( char2hex(c[i]) );//converts char 255 to string "FF"
-                }
-		else
-		{
-                    // Finally, the reserved set. Encoding here depends on the
-                    // context (where in the URI we are, what type of URI, and
-                    // which character).
-
-                    bool enc = false;
-
-                    // Always encode reserved gen-delims + '%' (which always
-                    // needs encoding
-                    if (c[i] == ':' || c[i] == '/' || c[i] == '?' || c[i] == '#' ||
-                        c[i] == '[' || c[i] == ']' || c[i] == '@' || c[i] == '%')
-                    {
-                        enc = true;
-                    }
-                    else {
-                        switch (enctype) {
-                          case URLEncode_Everything:
-                            enc = true;
-                            break;
-                          case URLEncode_Path:
-                            // Only reserved sub-delim that needs encoding is %,
-                            // taken care of above. Otherwise, leave unencoded
-                            enc = false;
-                            break;
-                          case URLEncode_QueryKey:
-                            if (c[i] == '&' ||
-                                c[i] == '+' ||
-                                c[i] == '=')
-                                enc = true;
-                            else
-                                enc = false;
-                            break;
-                          case URLEncode_QueryValue:
-                            if (c[i] == '&' ||
-                                c[i] == '+')
-                                enc = true;
-                            else
-                                enc = false;
-                            break;
-                          default:
-                            assert(false && "Unknown urlencode type");
-                            break;
-                        }
-                    }
-
-                    if (enc) {
-                        escaped.append("%");
-                        escaped.append( char2hex(c[i]) );//converts char 255 to string "FF"
-                    } else {
-			escaped.append( &c[i], 1);
-                    }
-		}
-	}
-	return escaped;
-}
diff --git a/3party/liboauthcpp/src/urlencode.h b/3party/liboauthcpp/src/urlencode.h
deleted file mode 100644
index e14cfb69c1..0000000000
--- a/3party/liboauthcpp/src/urlencode.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef __URLENCODE_H__
-#define __URLENCODE_H__
-
-#include <iostream>
-#include <string>
-
-std::string char2hex( char dec );
-enum URLEncodeType {
-    URLEncode_Everything,
-    URLEncode_Path,
-    URLEncode_QueryKey,
-    URLEncode_QueryValue,
-};
-std::string urlencode( const std::string &c, URLEncodeType enctype );
-
-#endif // __URLENCODE_H__
diff --git a/android/app/src/main/cpp/CMakeLists.txt b/android/app/src/main/cpp/CMakeLists.txt
index 21741e397f..5203f653be 100644
--- a/android/app/src/main/cpp/CMakeLists.txt
+++ b/android/app/src/main/cpp/CMakeLists.txt
@@ -98,7 +98,6 @@ target_link_libraries(${PROJECT_NAME}
   # base
   # opening_hours
   # pugixml
-  # oauthcpp
   # expat
   # freetype
   # minizip
diff --git a/coding/CMakeLists.txt b/coding/CMakeLists.txt
index b9972aa0a5..38a388ceca 100644
--- a/coding/CMakeLists.txt
+++ b/coding/CMakeLists.txt
@@ -100,7 +100,6 @@ target_link_libraries(${PROJECT_NAME}
   succinct
   ICU::uc
   ICU::i18n # For transliteration.
-  oauthcpp  # For base64_encode and base64_decode
   minizip
   ZLIB::ZLIB
 )
diff --git a/coding/base64.cpp b/coding/base64.cpp
index 9800ce308d..ed15238088 100644
--- a/coding/base64.cpp
+++ b/coding/base64.cpp
@@ -31,10 +31,10 @@ std::string Decode(const std::string & val)
                                               [](char c) { return c == '\0'; });
 }
 
-std::string Encode(const std::string & val)
+std::string Encode(std::string_view val)
 {
   using namespace boost::archive::iterators;
-  using It = base64_from_binary<transform_width<std::string::const_iterator, 6, 8>>;
+  using It = base64_from_binary<transform_width<std::string_view::const_iterator, 6, 8>>;
   auto tmp = std::string(It(std::begin(val)), It(std::end(val)));
   return tmp.append((3 - val.size() % 3) % 3, '=');
 }
diff --git a/coding/base64.hpp b/coding/base64.hpp
index 8f3e8cb678..bf2c752c01 100644
--- a/coding/base64.hpp
+++ b/coding/base64.hpp
@@ -4,6 +4,6 @@
 
 namespace base64
 {
-std::string Encode(std::string const & bytesToEncode);
+std::string Encode(std::string_view bytesToEncode);
 std::string Decode(std::string const & base64CharsToDecode);
 }  // namespace base64
diff --git a/coding/sha1.cpp b/coding/sha1.cpp
index 384ba43cb7..cb226dfa92 100644
--- a/coding/sha1.cpp
+++ b/coding/sha1.cpp
@@ -1,20 +1,36 @@
 #include "coding/sha1.hpp"
+#include "coding/base64.hpp"
 
 #include "coding/internal/file_data.hpp"
 #include "coding/reader.hpp"
 
 #include "base/assert.hpp"
 #include "base/logging.hpp"
-#include "base/macros.hpp"
 
-#include "3party/liboauthcpp/src/SHA1.h"
-#include "3party/liboauthcpp/src/base64.h"
+#include <boost/core/bit.hpp>
+#include <boost/uuid/detail/sha1.hpp>
 
 #include <algorithm>
 #include <vector>
 
 namespace coding
 {
+namespace
+{
+SHA1::Hash ExtractHash(boost::uuids::detail::sha1 & sha1)
+{
+  uint32_t digest[5];
+  sha1.get_digest(digest);
+  for (auto & b : digest)
+    b = boost::core::byteswap(b);
+
+  SHA1::Hash result;
+  static_assert(result.size() == sizeof(digest));
+  std::copy_n(reinterpret_cast<uint8_t const *>(digest), sizeof(digest), std::begin(result));
+  return result;
+}
+}
+
 // static
 SHA1::Hash SHA1::Calculate(std::string const & filePath)
 {
@@ -23,7 +39,8 @@ SHA1::Hash SHA1::Calculate(std::string const & filePath)
     base::FileData file(filePath, base::FileData::Op::READ);
     uint64_t const fileSize = file.Size();
 
-    CSHA1 sha1;
+    boost::uuids::detail::sha1 sha1;
+
     uint64_t currSize = 0;
     uint32_t constexpr kFileBufferSize = 8192;
     unsigned char buffer[kFileBufferSize];
@@ -31,15 +48,10 @@ SHA1::Hash SHA1::Calculate(std::string const & filePath)
     {
       auto const toRead = std::min(kFileBufferSize, static_cast<uint32_t>(fileSize - currSize));
       file.Read(currSize, buffer, toRead);
-      sha1.Update(buffer, toRead);
+      sha1.process_bytes(buffer, toRead);
       currSize += toRead;
     }
-    sha1.Final();
-
-    Hash result;
-    ASSERT_EQUAL(result.size(), ARRAY_SIZE(sha1.m_digest), ());
-    std::copy(std::begin(sha1.m_digest), std::end(sha1.m_digest), std::begin(result));
-    return result;
+    return ExtractHash(sha1);
   }
   catch (Reader::Exception const & ex)
   {
@@ -52,39 +64,14 @@ SHA1::Hash SHA1::Calculate(std::string const & filePath)
 std::string SHA1::CalculateBase64(std::string const & filePath)
 {
   auto const sha1 = Calculate(filePath);
-  return base64_encode(sha1.data(), sha1.size());
+  return base64::Encode(std::string_view(reinterpret_cast<char const *>(sha1.data()), sha1.size()));
 }
 
 // static
-SHA1::Hash SHA1::CalculateForString(std::string const & str)
+SHA1::Hash SHA1::CalculateForString(std::string_view str)
 {
-  CSHA1 sha1;
-  std::vector<unsigned char> dat(str.begin(), str.end());
-  sha1.Update(dat.data(), static_cast<uint32_t>(dat.size()));
-  sha1.Final();
-
-  Hash result;
-  ASSERT_EQUAL(result.size(), ARRAY_SIZE(sha1.m_digest), ());
-  std::copy(std::begin(sha1.m_digest), std::end(sha1.m_digest), std::begin(result));
-  return result;
-}
-
-// static
-std::string SHA1::CalculateForStringFormatted(std::string const & str)
-{
-  auto const hashRaw = CalculateForString(str);
-
-  std::ostringstream os;
-  for (auto const value : hashRaw)
-    os << std::hex << static_cast<int>(value);
-
-  return os.str();
-}
-
-// static
-std::string SHA1::CalculateBase64ForString(std::string const & str)
-{
-  auto const sha1 = CalculateForString(str);
-  return base64_encode(sha1.data(), sha1.size());
+  boost::uuids::detail::sha1 sha1;
+  sha1.process_bytes(str.data(), str.size());
+  return ExtractHash(sha1);
 }
 }  // coding
diff --git a/coding/sha1.hpp b/coding/sha1.hpp
index 58b8e3a1cb..b5ecb24efa 100644
--- a/coding/sha1.hpp
+++ b/coding/sha1.hpp
@@ -15,9 +15,6 @@ public:
   static Hash Calculate(std::string const & filePath);
   static std::string CalculateBase64(std::string const & filePath);
 
-  static Hash CalculateForString(std::string const & str);
-  // String representation of 40-number hex digit.
-  static std::string CalculateForStringFormatted(std::string const & str);
-  static std::string CalculateBase64ForString(std::string const & str);
+  static Hash CalculateForString(std::string_view str);
 };
 }  // coding
diff --git a/data/copyright.html b/data/copyright.html
index 32b479ade9..cd113b92ce 100644
--- a/data/copyright.html
+++ b/data/copyright.html
@@ -179,9 +179,6 @@
     <li><a href="http://libkdtree.alioth.debian.org/">libkdtree++</a><br>
       &copy; 2004-2007 Martin F. Krafft, parts are &copy; 2004-2008 Paul Harris and &copy; 2007-2008 Sylvain Bougerel; <a href="#artistic-license" class="license">Artistic License</a></li>
 
-    <li><a href="https://github.com/sirikata/liboauthcpp">liboauthcpp</a><br>
-      &copy; 2011 Stanford University, &copy; 2011 swatkat (libtwitcurl); <a href="#mit-license" class="license">MIT License</a></li>
-
     <li><a href="https://github.com/mapsme/omim">MAPS.ME</a><br>
       &copy; 2020 My.com B.V. (Mail.Ru Group); <a href="#apache2-license" class="license">Apache License</a></li>
 
diff --git a/generator/pygen/CMakeLists.txt b/generator/pygen/CMakeLists.txt
index 3583d44913..9a062e2f35 100644
--- a/generator/pygen/CMakeLists.txt
+++ b/generator/pygen/CMakeLists.txt
@@ -37,7 +37,6 @@ omim_link_libraries(
   succinct
   pugixml
   tess2
-  oauthcpp
   sqlite3
   ${CMAKE_DL_LIBS}
   ZLIB::ZLIB
diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj
index 696fa524d1..700e4b6035 100644
--- a/iphone/Maps/Maps.xcodeproj/project.pbxproj
+++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj
@@ -617,7 +617,6 @@
 		FA853BBB26BC3B8A0026D455 /* libkml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BBA26BC3B8A0026D455 /* libkml.a */; };
 		FA853BBD26BC3B8A0026D455 /* libmap.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BBC26BC3B8A0026D455 /* libmap.a */; };
 		FA853BBF26BC3B8A0026D455 /* minizip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BBE26BC3B8A0026D455 /* minizip.framework */; };
-		FA853BC126BC3B8A0026D455 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BC026BC3B8A0026D455 /* liboauthcpp.a */; };
 		FA853BC326BC3B8A0026D455 /* libopening_hours.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BC226BC3B8A0026D455 /* libopening_hours.a */; };
 		FA853BC526BC3B8A0026D455 /* libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BC426BC3B8A0026D455 /* libplatform.a */; };
 		FA853BC726BC3B8A0026D455 /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA853BC626BC3B8A0026D455 /* libprotobuf.a */; };
@@ -1622,7 +1621,6 @@
 		FA853BBA26BC3B8A0026D455 /* libkml.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libkml.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA853BBC26BC3B8A0026D455 /* libmap.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libmap.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA853BBE26BC3B8A0026D455 /* minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		FA853BC026BC3B8A0026D455 /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA853BC226BC3B8A0026D455 /* libopening_hours.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libopening_hours.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA853BC426BC3B8A0026D455 /* libplatform.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libplatform.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA853BC626BC3B8A0026D455 /* libprotobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libprotobuf.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1719,7 +1717,6 @@
 				FA853BBB26BC3B8A0026D455 /* libkml.a in Frameworks */,
 				FA853BBD26BC3B8A0026D455 /* libmap.a in Frameworks */,
 				FA853BBF26BC3B8A0026D455 /* minizip.framework in Frameworks */,
-				FA853BC126BC3B8A0026D455 /* liboauthcpp.a in Frameworks */,
 				FA853BC326BC3B8A0026D455 /* libopening_hours.a in Frameworks */,
 				FA853BC526BC3B8A0026D455 /* libplatform.a in Frameworks */,
 				FA853BC726BC3B8A0026D455 /* libprotobuf.a in Frameworks */,
@@ -1865,7 +1862,6 @@
 				FA853BBA26BC3B8A0026D455 /* libkml.a */,
 				FA853BBC26BC3B8A0026D455 /* libmap.a */,
 				FA853BBE26BC3B8A0026D455 /* minizip.framework */,
-				FA853BC026BC3B8A0026D455 /* liboauthcpp.a */,
 				FA853BC226BC3B8A0026D455 /* libopening_hours.a */,
 				FA853BC426BC3B8A0026D455 /* libplatform.a */,
 				FA853BC626BC3B8A0026D455 /* libprotobuf.a */,
diff --git a/kml/pykmlib/CMakeLists.txt b/kml/pykmlib/CMakeLists.txt
index 52f2bfb193..4989a0170a 100644
--- a/kml/pykmlib/CMakeLists.txt
+++ b/kml/pykmlib/CMakeLists.txt
@@ -21,7 +21,6 @@ omim_link_libraries(
   base
   ICU::i18n
   cppjansson
-  oauthcpp
   protobuf
   pugixml
   expat::expat
diff --git a/search/pysearch/CMakeLists.txt b/search/pysearch/CMakeLists.txt
index 38badf2900..ff049a01a6 100644
--- a/search/pysearch/CMakeLists.txt
+++ b/search/pysearch/CMakeLists.txt
@@ -26,7 +26,6 @@ omim_link_libraries(
   bsdiff
   ICU::i18n
   cppjansson
-  oauthcpp
   opening_hours
   protobuf
   pugixml
diff --git a/traffic/pytraffic/CMakeLists.txt b/traffic/pytraffic/CMakeLists.txt
index 0dd0c16d96..698628fc76 100644
--- a/traffic/pytraffic/CMakeLists.txt
+++ b/traffic/pytraffic/CMakeLists.txt
@@ -37,7 +37,6 @@ omim_link_libraries(
   coding
   base
   cppjansson
-  oauthcpp
   protobuf
   pugixml
   opening_hours
diff --git a/xcode/editor/editor.xcodeproj/project.pbxproj b/xcode/editor/editor.xcodeproj/project.pbxproj
index 1a2a0b58f1..231a6c11de 100644
--- a/xcode/editor/editor.xcodeproj/project.pbxproj
+++ b/xcode/editor/editor.xcodeproj/project.pbxproj
@@ -55,7 +55,6 @@
 		FACB76B926B89DFB00810C9C /* match_by_geometry_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D05248A200F630000F24998 /* match_by_geometry_test.cpp */; };
 		FACB76BB26B89FFE00810C9C /* libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB76BA26B89FFE00810C9C /* libbase.a */; };
 		FACB76BD26B8A00400810C9C /* libgeometry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB76BC26B8A00400810C9C /* libgeometry.a */; };
-		FACB76BF26B8A00B00810C9C /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB76BE26B8A00B00810C9C /* liboauthcpp.a */; };
 		FACB76C126B8A01100810C9C /* libpugixml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB76C026B8A01100810C9C /* libpugixml.a */; };
 		FACB76C326B8A03600810C9C /* libcoding.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB76C226B8A03600810C9C /* libcoding.a */; };
 		FACB76C526B8A04200810C9C /* libindexer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB76C426B8A04200810C9C /* libindexer.a */; };
@@ -129,7 +128,6 @@
 		F60F02ED1C92CBF1003A0AF6 /* editor_notes.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = editor_notes.hpp; sourceTree = "<group>"; };
 		FACB76BA26B89FFE00810C9C /* libbase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libbase.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB76BC26B8A00400810C9C /* libgeometry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgeometry.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		FACB76BE26B8A00B00810C9C /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB76C026B8A01100810C9C /* libpugixml.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libpugixml.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB76C226B8A03600810C9C /* libcoding.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libcoding.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB76C426B8A04200810C9C /* libindexer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libindexer.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -168,7 +166,6 @@
 				FACB76D926B8A22000810C9C /* libcppjansson.a in Frameworks */,
 				FACB76BB26B89FFE00810C9C /* libbase.a in Frameworks */,
 				FACB76C326B8A03600810C9C /* libcoding.a in Frameworks */,
-				FACB76BF26B8A00B00810C9C /* liboauthcpp.a in Frameworks */,
 				FACB76D726B8A18F00810C9C /* libsuccinct.a in Frameworks */,
 				FACB76BD26B8A00400810C9C /* libgeometry.a in Frameworks */,
 				FACB76C926B8A08800810C9C /* libplatform.a in Frameworks */,
@@ -299,7 +296,6 @@
 				FACB76C426B8A04200810C9C /* libindexer.a */,
 				FACB76C226B8A03600810C9C /* libcoding.a */,
 				FACB76C026B8A01100810C9C /* libpugixml.a */,
-				FACB76BE26B8A00B00810C9C /* liboauthcpp.a */,
 				FACB76BC26B8A00400810C9C /* libgeometry.a */,
 				FACB76BA26B89FFE00810C9C /* libbase.a */,
 			);
diff --git a/xcode/ge0/ge0.xcodeproj/project.pbxproj b/xcode/ge0/ge0.xcodeproj/project.pbxproj
index b58b6070c3..38afee7bbd 100644
--- a/xcode/ge0/ge0.xcodeproj/project.pbxproj
+++ b/xcode/ge0/ge0.xcodeproj/project.pbxproj
@@ -11,7 +11,6 @@
 		391A145C23E0FC7F00A448F4 /* libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 391A145B23E0FC7F00A448F4 /* libplatform.a */; };
 		391A145E23E0FC8400A448F4 /* libcoding.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 391A145D23E0FC8400A448F4 /* libcoding.a */; };
 		391A146023E0FC8700A448F4 /* libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 391A145F23E0FC8700A448F4 /* libbase.a */; };
-		391A146223E0FC8B00A448F4 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 391A146123E0FC8B00A448F4 /* liboauthcpp.a */; };
 		391A146623E0FC9A00A448F4 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 391A146523E0FC9A00A448F4 /* libz.tbd */; };
 		39C29BD023E19B3C009ECB47 /* parser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 39C29BCC23E19B3C009ECB47 /* parser.hpp */; };
 		39C29BD123E19B3C009ECB47 /* parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C29BCD23E19B3C009ECB47 /* parser.cpp */; };
@@ -32,7 +31,6 @@
 		391A145B23E0FC7F00A448F4 /* libplatform.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libplatform.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		391A145D23E0FC8400A448F4 /* libcoding.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libcoding.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		391A145F23E0FC8700A448F4 /* libbase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libbase.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		391A146123E0FC8B00A448F4 /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		391A146523E0FC9A00A448F4 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
 		39C29BCC23E19B3C009ECB47 /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = parser.hpp; path = ../../ge0/parser.hpp; sourceTree = "<group>"; };
 		39C29BCD23E19B3C009ECB47 /* parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = parser.cpp; path = ../../ge0/parser.cpp; sourceTree = "<group>"; };
@@ -53,7 +51,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				391A146623E0FC9A00A448F4 /* libz.tbd in Frameworks */,
-				391A146223E0FC8B00A448F4 /* liboauthcpp.a in Frameworks */,
 				391A146023E0FC8700A448F4 /* libbase.a in Frameworks */,
 				391A145E23E0FC8400A448F4 /* libcoding.a in Frameworks */,
 				391A145C23E0FC7F00A448F4 /* libplatform.a in Frameworks */,
@@ -75,7 +72,6 @@
 			isa = PBXGroup;
 			children = (
 				391A146523E0FC9A00A448F4 /* libz.tbd */,
-				391A146123E0FC8B00A448F4 /* liboauthcpp.a */,
 				391A145F23E0FC8700A448F4 /* libbase.a */,
 				391A145D23E0FC8400A448F4 /* libcoding.a */,
 				391A145B23E0FC7F00A448F4 /* libplatform.a */,
diff --git a/xcode/generator/generator.xcodeproj/project.pbxproj b/xcode/generator/generator.xcodeproj/project.pbxproj
index 579d8a82cc..298044a7ef 100644
--- a/xcode/generator/generator.xcodeproj/project.pbxproj
+++ b/xcode/generator/generator.xcodeproj/project.pbxproj
@@ -33,7 +33,6 @@
 		FACB777726B90CF200810C9C /* minizip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB777626B90CF200810C9C /* minizip.framework */; };
 		FACB777926B90CFB00810C9C /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB777826B90CFB00810C9C /* libprotobuf.a */; };
 		FACB777B26B90D0700810C9C /* librouting_common.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB777A26B90D0700810C9C /* librouting_common.a */; };
-		FACB777D26B90E5B00810C9C /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB777C26B90E5B00810C9C /* liboauthcpp.a */; };
 		FACB777F26B90E7C00810C9C /* libmap.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB777E26B90E7C00810C9C /* libmap.a */; };
 		FACB778126B90E9800810C9C /* libtransit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB778026B90E9800810C9C /* libtransit.a */; };
 		FACB778326B90EAC00810C9C /* librouting.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB778226B90EAC00810C9C /* librouting.a */; };
@@ -331,7 +330,6 @@
 		FACB777626B90CF200810C9C /* minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB777826B90CFB00810C9C /* libprotobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libprotobuf.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB777A26B90D0700810C9C /* librouting_common.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = librouting_common.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		FACB777C26B90E5B00810C9C /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB777E26B90E7C00810C9C /* libmap.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libmap.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB778026B90E9800810C9C /* libtransit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libtransit.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB778226B90EAC00810C9C /* librouting.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = librouting.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -611,7 +609,6 @@
 				FACB778D26B9118900810C9C /* libeditor.a in Frameworks */,
 				FACB778B26B9112200810C9C /* libtess2.a in Frameworks */,
 				FACB778726B90ECD00810C9C /* libopening_hours.a in Frameworks */,
-				FACB777D26B90E5B00810C9C /* liboauthcpp.a in Frameworks */,
 				FACB777926B90CFB00810C9C /* libprotobuf.a in Frameworks */,
 				FACB777726B90CF200810C9C /* minizip.framework in Frameworks */,
 				FACB777326B90CCF00810C9C /* libcppjansson.a in Frameworks */,
@@ -704,7 +701,6 @@
 				FACB778226B90EAC00810C9C /* librouting.a */,
 				FACB778026B90E9800810C9C /* libtransit.a */,
 				FACB777E26B90E7C00810C9C /* libmap.a */,
-				FACB777C26B90E5B00810C9C /* liboauthcpp.a */,
 				FACB777A26B90D0700810C9C /* librouting_common.a */,
 				FACB777826B90CFB00810C9C /* libprotobuf.a */,
 				FACB777626B90CF200810C9C /* minizip.framework */,
diff --git a/xcode/indexer/indexer.xcodeproj/project.pbxproj b/xcode/indexer/indexer.xcodeproj/project.pbxproj
index 0493c2b635..1e1e941116 100644
--- a/xcode/indexer/indexer.xcodeproj/project.pbxproj
+++ b/xcode/indexer/indexer.xcodeproj/project.pbxproj
@@ -200,7 +200,6 @@
 		FACB7C2026B919AD00810C9C /* libgeometry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C1C26B919AD00810C9C /* libgeometry.a */; };
 		FACB7C2126B919AD00810C9C /* libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C1D26B919AD00810C9C /* libplatform.a */; };
 		FACB7C2326B919C700810C9C /* libicu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C2226B919C700810C9C /* libicu.a */; };
-		FACB7C2526B919CC00810C9C /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C2426B919CC00810C9C /* liboauthcpp.a */; };
 		FACB7C2726B919D300810C9C /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C2626B919D300810C9C /* libprotobuf.a */; };
 		FACB7C2926B919E600810C9C /* libgenerator_tests_support.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C2826B919E600810C9C /* libgenerator_tests_support.a */; };
 		FACB7C2B26B919F500810C9C /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FACB7C2A26B919F500810C9C /* libeditor.a */; };
@@ -429,7 +428,6 @@
 		FACB7C1C26B919AD00810C9C /* libgeometry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgeometry.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB7C1D26B919AD00810C9C /* libplatform.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libplatform.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB7C2226B919C700810C9C /* libicu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libicu.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		FACB7C2426B919CC00810C9C /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB7C2626B919D300810C9C /* libprotobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libprotobuf.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB7C2826B919E600810C9C /* libgenerator_tests_support.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgenerator_tests_support.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FACB7C2A26B919F500810C9C /* libeditor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libeditor.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -457,7 +455,6 @@
 				FACB7C2F26B91A1100810C9C /* libopening_hours.a in Frameworks */,
 				FACB7C3D26B9478200810C9C /* libsuccinct.a in Frameworks */,
 				FACB7C2926B919E600810C9C /* libgenerator_tests_support.a in Frameworks */,
-				FACB7C2526B919CC00810C9C /* liboauthcpp.a in Frameworks */,
 				FACB7C1F26B919AD00810C9C /* libcoding.a in Frameworks */,
 				FACB7C2326B919C700810C9C /* libicu.a in Frameworks */,
 				FACB7C3B26B9476200810C9C /* libstorage.a in Frameworks */,
@@ -528,7 +525,6 @@
 				FACB7C2A26B919F500810C9C /* libeditor.a */,
 				FACB7C2826B919E600810C9C /* libgenerator_tests_support.a */,
 				FACB7C2626B919D300810C9C /* libprotobuf.a */,
-				FACB7C2426B919CC00810C9C /* liboauthcpp.a */,
 				FACB7C2226B919C700810C9C /* libicu.a */,
 				FACB7C1A26B919AD00810C9C /* libbase.a */,
 				FACB7C1B26B919AD00810C9C /* libcoding.a */,
diff --git a/xcode/kml/kml.xcodeproj/project.pbxproj b/xcode/kml/kml.xcodeproj/project.pbxproj
index ab4188dba2..6327b789d8 100644
--- a/xcode/kml/kml.xcodeproj/project.pbxproj
+++ b/xcode/kml/kml.xcodeproj/project.pbxproj
@@ -25,7 +25,6 @@
 		FA67C85526BB372E00B33DCA /* libindexer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA67C85426BB372E00B33DCA /* libindexer.a */; };
 		FA67C85726BB373800B33DCA /* libgeometry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA67C85626BB373800B33DCA /* libgeometry.a */; };
 		FA67C85926BB374300B33DCA /* libicu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA67C85826BB374300B33DCA /* libicu.a */; };
-		FA67C85B26BB374E00B33DCA /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA67C85A26BB374E00B33DCA /* liboauthcpp.a */; };
 		FA67C85D26BB376300B33DCA /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA67C85C26BB376300B33DCA /* libprotobuf.a */; };
 		FA67C85F26BB377800B33DCA /* libsuccinct.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA67C85E26BB377800B33DCA /* libsuccinct.a */; };
 /* End PBXBuildFile section */
@@ -79,7 +78,6 @@
 		FA67C85426BB372E00B33DCA /* libindexer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libindexer.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA67C85626BB373800B33DCA /* libgeometry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgeometry.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA67C85826BB374300B33DCA /* libicu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libicu.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		FA67C85A26BB374E00B33DCA /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA67C85C26BB376300B33DCA /* libprotobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libprotobuf.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FA67C85E26BB377800B33DCA /* libsuccinct.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libsuccinct.a; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
@@ -98,7 +96,6 @@
 			files = (
 				FA67C85F26BB377800B33DCA /* libsuccinct.a in Frameworks */,
 				FA67C85D26BB376300B33DCA /* libprotobuf.a in Frameworks */,
-				FA67C85B26BB374E00B33DCA /* liboauthcpp.a in Frameworks */,
 				FA67C85926BB374300B33DCA /* libicu.a in Frameworks */,
 				FA67C85726BB373800B33DCA /* libgeometry.a in Frameworks */,
 				FA67C85526BB372E00B33DCA /* libindexer.a in Frameworks */,
@@ -180,7 +177,6 @@
 			children = (
 				FA67C85E26BB377800B33DCA /* libsuccinct.a */,
 				FA67C85C26BB376300B33DCA /* libprotobuf.a */,
-				FA67C85A26BB374E00B33DCA /* liboauthcpp.a */,
 				FA67C85826BB374300B33DCA /* libicu.a */,
 				FA67C85626BB373800B33DCA /* libgeometry.a */,
 				FA67C85426BB372E00B33DCA /* libindexer.a */,
diff --git a/xcode/map/map.xcodeproj/project.pbxproj b/xcode/map/map.xcodeproj/project.pbxproj
index e4c015879b..97d510969c 100644
--- a/xcode/map/map.xcodeproj/project.pbxproj
+++ b/xcode/map/map.xcodeproj/project.pbxproj
@@ -113,7 +113,6 @@
 		FAA8388226BB3C92002E54C6 /* libprotobuf.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8388126BB3C92002E54C6 /* libprotobuf.a */; };
 		FAA8388426BB3CBE002E54C6 /* libcppjansson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8388326BB3CBE002E54C6 /* libcppjansson.a */; };
 		FAA8388626BB3CC3002E54C6 /* libexpat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8388526BB3CC3002E54C6 /* libexpat.a */; };
-		FAA8388826BB3CDB002E54C6 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8388726BB3CDB002E54C6 /* liboauthcpp.a */; };
 		FAA8388A26BB3CE4002E54C6 /* libdrape.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8388926BB3CE4002E54C6 /* libdrape.a */; };
 /* End PBXBuildFile section */
 
@@ -257,7 +256,6 @@
 		FAA8388126BB3C92002E54C6 /* libprotobuf.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libprotobuf.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAA8388326BB3CBE002E54C6 /* libcppjansson.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libcppjansson.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAA8388526BB3CC3002E54C6 /* libexpat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libexpat.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		FAA8388726BB3CDB002E54C6 /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAA8388926BB3CE4002E54C6 /* libdrape.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libdrape.a; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
@@ -275,7 +273,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				FAA8388A26BB3CE4002E54C6 /* libdrape.a in Frameworks */,
-				FAA8388826BB3CDB002E54C6 /* liboauthcpp.a in Frameworks */,
 				FAA8388626BB3CC3002E54C6 /* libexpat.a in Frameworks */,
 				FAA8388426BB3CBE002E54C6 /* libcppjansson.a in Frameworks */,
 				FAA8387826BB3C92002E54C6 /* libbase.a in Frameworks */,
@@ -302,7 +299,6 @@
 			isa = PBXGroup;
 			children = (
 				FAA8388926BB3CE4002E54C6 /* libdrape.a */,
-				FAA8388726BB3CDB002E54C6 /* liboauthcpp.a */,
 				FAA8388526BB3CC3002E54C6 /* libexpat.a */,
 				FAA8388326BB3CBE002E54C6 /* libcppjansson.a */,
 				FAA8387726BB3C92002E54C6 /* libbase.a */,
diff --git a/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj b/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj
deleted file mode 100644
index f45c806684..0000000000
--- a/xcode/oauthcpp/oauthcpp.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,233 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 54;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		340C21011C3E5EED00111D22 /* base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340C20F81C3E5EED00111D22 /* base64.cpp */; };
-		340C21021C3E5EED00111D22 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 340C20F91C3E5EED00111D22 /* base64.h */; };
-		340C21031C3E5EED00111D22 /* HMAC_SHA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340C20FA1C3E5EED00111D22 /* HMAC_SHA1.cpp */; };
-		340C21041C3E5EED00111D22 /* HMAC_SHA1.h in Headers */ = {isa = PBXBuildFile; fileRef = 340C20FB1C3E5EED00111D22 /* HMAC_SHA1.h */; };
-		340C21051C3E5EED00111D22 /* liboauthcpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340C20FC1C3E5EED00111D22 /* liboauthcpp.cpp */; };
-		340C21061C3E5EED00111D22 /* SHA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340C20FD1C3E5EED00111D22 /* SHA1.cpp */; };
-		340C21071C3E5EED00111D22 /* SHA1.h in Headers */ = {isa = PBXBuildFile; fileRef = 340C20FE1C3E5EED00111D22 /* SHA1.h */; };
-		340C21081C3E5EED00111D22 /* urlencode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340C20FF1C3E5EED00111D22 /* urlencode.cpp */; };
-		340C21091C3E5EED00111D22 /* urlencode.h in Headers */ = {isa = PBXBuildFile; fileRef = 340C21001C3E5EED00111D22 /* urlencode.h */; };
-		340C210B1C3E5EF600111D22 /* liboauthcpp.h in Headers */ = {isa = PBXBuildFile; fileRef = 340C210A1C3E5EF600111D22 /* liboauthcpp.h */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
-		340C20EF1C3E5E5000111D22 /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		340C20F81C3E5EED00111D22 /* base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = base64.cpp; path = src/base64.cpp; sourceTree = "<group>"; };
-		340C20F91C3E5EED00111D22 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = base64.h; path = src/base64.h; sourceTree = "<group>"; };
-		340C20FA1C3E5EED00111D22 /* HMAC_SHA1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HMAC_SHA1.cpp; path = src/HMAC_SHA1.cpp; sourceTree = "<group>"; };
-		340C20FB1C3E5EED00111D22 /* HMAC_SHA1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HMAC_SHA1.h; path = src/HMAC_SHA1.h; sourceTree = "<group>"; };
-		340C20FC1C3E5EED00111D22 /* liboauthcpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = liboauthcpp.cpp; path = src/liboauthcpp.cpp; sourceTree = "<group>"; };
-		340C20FD1C3E5EED00111D22 /* SHA1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SHA1.cpp; path = src/SHA1.cpp; sourceTree = "<group>"; };
-		340C20FE1C3E5EED00111D22 /* SHA1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SHA1.h; path = src/SHA1.h; sourceTree = "<group>"; };
-		340C20FF1C3E5EED00111D22 /* urlencode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = urlencode.cpp; path = src/urlencode.cpp; sourceTree = "<group>"; };
-		340C21001C3E5EED00111D22 /* urlencode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = urlencode.h; path = src/urlencode.h; sourceTree = "<group>"; };
-		340C210A1C3E5EF600111D22 /* liboauthcpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = liboauthcpp.h; path = include/liboauthcpp/liboauthcpp.h; sourceTree = "<group>"; };
-		34F558701DBF4AB300A4FC11 /* common-debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-debug.xcconfig"; path = "../common-debug.xcconfig"; sourceTree = "<group>"; };
-		34F558711DBF4AB300A4FC11 /* common-release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "common-release.xcconfig"; path = "../common-release.xcconfig"; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		340C20EC1C3E5E5000111D22 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		340C20E61C3E5E5000111D22 = {
-			isa = PBXGroup;
-			children = (
-				34F558701DBF4AB300A4FC11 /* common-debug.xcconfig */,
-				34F558711DBF4AB300A4FC11 /* common-release.xcconfig */,
-				340C20F71C3E5EA200111D22 /* liboauthcpp */,
-				340C20F01C3E5E5000111D22 /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		340C20F01C3E5E5000111D22 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				340C20EF1C3E5E5000111D22 /* liboauthcpp.a */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		340C20F71C3E5EA200111D22 /* liboauthcpp */ = {
-			isa = PBXGroup;
-			children = (
-				340C20F81C3E5EED00111D22 /* base64.cpp */,
-				340C20F91C3E5EED00111D22 /* base64.h */,
-				340C20FA1C3E5EED00111D22 /* HMAC_SHA1.cpp */,
-				340C20FB1C3E5EED00111D22 /* HMAC_SHA1.h */,
-				340C20FC1C3E5EED00111D22 /* liboauthcpp.cpp */,
-				340C210A1C3E5EF600111D22 /* liboauthcpp.h */,
-				340C20FD1C3E5EED00111D22 /* SHA1.cpp */,
-				340C20FE1C3E5EED00111D22 /* SHA1.h */,
-				340C20FF1C3E5EED00111D22 /* urlencode.cpp */,
-				340C21001C3E5EED00111D22 /* urlencode.h */,
-			);
-			name = liboauthcpp;
-			path = ../../3party/liboauthcpp;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		340C20ED1C3E5E5000111D22 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				340C21041C3E5EED00111D22 /* HMAC_SHA1.h in Headers */,
-				340C21021C3E5EED00111D22 /* base64.h in Headers */,
-				340C21091C3E5EED00111D22 /* urlencode.h in Headers */,
-				340C210B1C3E5EF600111D22 /* liboauthcpp.h in Headers */,
-				340C21071C3E5EED00111D22 /* SHA1.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		340C20EE1C3E5E5000111D22 /* oauthcpp */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 340C20F31C3E5E5000111D22 /* Build configuration list for PBXNativeTarget "oauthcpp" */;
-			buildPhases = (
-				340C20EB1C3E5E5000111D22 /* Sources */,
-				340C20EC1C3E5E5000111D22 /* Frameworks */,
-				340C20ED1C3E5E5000111D22 /* Headers */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = oauthcpp;
-			productName = oauthcpp;
-			productReference = 340C20EF1C3E5E5000111D22 /* liboauthcpp.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		340C20E71C3E5E5000111D22 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				BuildIndependentTargetsInParallel = YES;
-				DefaultBuildSystemTypeForWorkspace = Latest;
-				LastUpgradeCheck = 1510;
-				TargetAttributes = {
-					340C20EE1C3E5E5000111D22 = {
-						CreatedOnToolsVersion = 7.2;
-					};
-				};
-			};
-			buildConfigurationList = 340C20EA1C3E5E5000111D22 /* Build configuration list for PBXProject "oauthcpp" */;
-			compatibilityVersion = "Xcode 12.0";
-			developmentRegion = en;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				Base,
-			);
-			mainGroup = 340C20E61C3E5E5000111D22;
-			productRefGroup = 340C20F01C3E5E5000111D22 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				340C20EE1C3E5E5000111D22 /* oauthcpp */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
-		340C20EB1C3E5E5000111D22 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				340C21081C3E5EED00111D22 /* urlencode.cpp in Sources */,
-				340C21011C3E5EED00111D22 /* base64.cpp in Sources */,
-				340C21031C3E5EED00111D22 /* HMAC_SHA1.cpp in Sources */,
-				340C21061C3E5EED00111D22 /* SHA1.cpp in Sources */,
-				340C21051C3E5EED00111D22 /* liboauthcpp.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		340C20F11C3E5E5000111D22 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 34F558701DBF4AB300A4FC11 /* common-debug.xcconfig */;
-			buildSettings = {
-				GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
-				HEADER_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(OMIM_ROOT)/3party/liboauthcpp/include",
-				);
-			};
-			name = Debug;
-		};
-		340C20F21C3E5E5000111D22 /* Release */ = {
-			isa = XCBuildConfiguration;
-			baseConfigurationReference = 34F558711DBF4AB300A4FC11 /* common-release.xcconfig */;
-			buildSettings = {
-				GCC_WARN_INHIBIT_ALL_WARNINGS = YES;
-				HEADER_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(OMIM_ROOT)/3party/liboauthcpp/include",
-				);
-			};
-			name = Release;
-		};
-		340C20F41C3E5E5000111D22 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				EXECUTABLE_PREFIX = lib;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-			};
-			name = Debug;
-		};
-		340C20F51C3E5E5000111D22 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				EXECUTABLE_PREFIX = lib;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		340C20EA1C3E5E5000111D22 /* Build configuration list for PBXProject "oauthcpp" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				340C20F11C3E5E5000111D22 /* Debug */,
-				340C20F21C3E5E5000111D22 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		340C20F31C3E5E5000111D22 /* Build configuration list for PBXNativeTarget "oauthcpp" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				340C20F41C3E5E5000111D22 /* Debug */,
-				340C20F51C3E5E5000111D22 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 340C20E71C3E5E5000111D22 /* Project object */;
-}
diff --git a/xcode/omim.xcworkspace/contents.xcworkspacedata b/xcode/omim.xcworkspace/contents.xcworkspacedata
index 360962cb85..a323158abc 100644
--- a/xcode/omim.xcworkspace/contents.xcworkspacedata
+++ b/xcode/omim.xcworkspace/contents.xcworkspacedata
@@ -60,9 +60,6 @@
       <FileRef
          location = "container:minizip/minizip.xcodeproj">
       </FileRef>
-      <FileRef
-         location = "container:oauthcpp/oauthcpp.xcodeproj">
-      </FileRef>
       <FileRef
          location = "container:open_location_code/open_location_code.xcodeproj">
       </FileRef>
diff --git a/xcode/platform/platform.xcodeproj/project.pbxproj b/xcode/platform/platform.xcodeproj/project.pbxproj
index 6ae985d2a9..1ee9d96c60 100644
--- a/xcode/platform/platform.xcodeproj/project.pbxproj
+++ b/xcode/platform/platform.xcodeproj/project.pbxproj
@@ -128,7 +128,6 @@
 		FAA8389326BB48EF002E54C6 /* libbase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8389226BB48EF002E54C6 /* libbase.a */; };
 		FAA8389526BB48F4002E54C6 /* libcoding.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8389426BB48F4002E54C6 /* libcoding.a */; };
 		FAA8389726BB4906002E54C6 /* minizip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8389626BB4906002E54C6 /* minizip.framework */; };
-		FAA8389926BB490C002E54C6 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8389826BB490C002E54C6 /* liboauthcpp.a */; };
 		FAA8389A26BB4931002E54C6 /* libplatform_tests_support.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 675340E91C58C496002CF0D9 /* libplatform_tests_support.a */; };
 		FAA8389C26BB4948002E54C6 /* libgeometry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA8389B26BB4948002E54C6 /* libgeometry.a */; };
 		FADA4B2626F529BD000FF3CA /* languages.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FADA4B2426F529B5000FF3CA /* languages.hpp */; };
@@ -259,7 +258,6 @@
 		FAA8389226BB48EF002E54C6 /* libbase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libbase.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAA8389426BB48F4002E54C6 /* libcoding.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libcoding.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAA8389626BB4906002E54C6 /* minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		FAA8389826BB490C002E54C6 /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAA8389B26BB4948002E54C6 /* libgeometry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgeometry.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FADA4B2426F529B5000FF3CA /* languages.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = languages.hpp; sourceTree = "<group>"; };
 		FADA4B2526F529B9000FF3CA /* locale.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = locale.hpp; sourceTree = "<group>"; };
@@ -286,7 +284,6 @@
 			files = (
 				FAA8389C26BB4948002E54C6 /* libgeometry.a in Frameworks */,
 				FAA8389A26BB4931002E54C6 /* libplatform_tests_support.a in Frameworks */,
-				FAA8389926BB490C002E54C6 /* liboauthcpp.a in Frameworks */,
 				FAA8389726BB4906002E54C6 /* minizip.framework in Frameworks */,
 				FAA8389526BB48F4002E54C6 /* libcoding.a in Frameworks */,
 				FAA8389326BB48EF002E54C6 /* libbase.a in Frameworks */,
@@ -302,7 +299,6 @@
 			isa = PBXGroup;
 			children = (
 				FAA8389B26BB4948002E54C6 /* libgeometry.a */,
-				FAA8389826BB490C002E54C6 /* liboauthcpp.a */,
 				FAA8389626BB4906002E54C6 /* minizip.framework */,
 				FAA8389426BB48F4002E54C6 /* libcoding.a */,
 				FAA8389226BB48EF002E54C6 /* libbase.a */,
diff --git a/xcode/qt/qt.xcodeproj/project.pbxproj b/xcode/qt/qt.xcodeproj/project.pbxproj
index 53be07f2b0..fef8f8c95a 100644
--- a/xcode/qt/qt.xcodeproj/project.pbxproj
+++ b/xcode/qt/qt.xcodeproj/project.pbxproj
@@ -9,7 +9,6 @@
 /* Begin PBXBuildFile section */
 		3462FD891DC1DE4600906FD7 /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3462FD881DC1DE4600906FD7 /* libeditor.a */; };
 		3462FD8D1DC1E03300906FD7 /* libpugixml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3462FD8C1DC1E03300906FD7 /* libpugixml.a */; };
-		3462FD8F1DC1E05D00906FD7 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3462FD8E1DC1E05D00906FD7 /* liboauthcpp.a */; };
 		3475E0E41DBF593D004C7E69 /* libtracking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3475E0E31DBF593D004C7E69 /* libtracking.a */; };
 		348FE6871F7BBF7A00AAA4AF /* libmwm_diff.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 348FE6881F7BBF7A00AAA4AF /* libmwm_diff.a */; };
 		348FE6891F7BBF9300AAA4AF /* libbsdiff.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 348FE68A1F7BBF9300AAA4AF /* libbsdiff.a */; };
@@ -229,7 +228,6 @@
 /* Begin PBXFileReference section */
 		3462FD881DC1DE4600906FD7 /* libeditor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libeditor.a; path = "../../../omim-build/xcode/Release/libeditor.a"; sourceTree = "<group>"; };
 		3462FD8C1DC1E03300906FD7 /* libpugixml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpugixml.a; path = "../../../omim-build/xcode/Release/libpugixml.a"; sourceTree = "<group>"; };
-		3462FD8E1DC1E05D00906FD7 /* liboauthcpp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liboauthcpp.a; path = "../../../omim-build/xcode/Release/liboauthcpp.a"; sourceTree = "<group>"; };
 		3475E0E31DBF593D004C7E69 /* libtracking.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtracking.a; path = "../../../omim-xcode-build/Debug/libtracking.a"; sourceTree = "<group>"; };
 		348FE6881F7BBF7A00AAA4AF /* libmwm_diff.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libmwm_diff.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		348FE68A1F7BBF9300AAA4AF /* libbsdiff.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libbsdiff.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -392,7 +390,6 @@
 				671E79221E6A508600B2859B /* libopenlr.a in Frameworks */,
 				671E78E51E6A4E1A00B2859B /* librouting_common.a in Frameworks */,
 				672292B11DE307DC005BA3A7 /* libtraffic.a in Frameworks */,
-				3462FD8F1DC1E05D00906FD7 /* liboauthcpp.a in Frameworks */,
 				3462FD8D1DC1E03300906FD7 /* libpugixml.a in Frameworks */,
 				3462FD891DC1DE4600906FD7 /* libeditor.a in Frameworks */,
 				3475E0E41DBF593D004C7E69 /* libtracking.a in Frameworks */,
@@ -474,7 +471,6 @@
 				675345A51A40534F00A0A8C3 /* CoreFoundation.framework */,
 				675345A31A40534500A0A8C3 /* IOKit.framework */,
 				672292B01DE307DC005BA3A7 /* libtraffic.a */,
-				3462FD8E1DC1E05D00906FD7 /* liboauthcpp.a */,
 				3462FD8C1DC1E03300906FD7 /* libpugixml.a */,
 				3462FD881DC1DE4600906FD7 /* libeditor.a */,
 				3475E0E31DBF593D004C7E69 /* libtracking.a */,
diff --git a/xcode/search/search.xcodeproj/project.pbxproj b/xcode/search/search.xcodeproj/project.pbxproj
index ee90a7f8b7..cbf84d9776 100644
--- a/xcode/search/search.xcodeproj/project.pbxproj
+++ b/xcode/search/search.xcodeproj/project.pbxproj
@@ -58,7 +58,6 @@
 		34F5583D1DBF2E2700A4FC11 /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F5583C1DBF2E2700A4FC11 /* libeditor.a */; };
 		34F5583F1DBF2E3400A4FC11 /* libpugixml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F5583E1DBF2E3400A4FC11 /* libpugixml.a */; };
 		34F558411DBF2E4F00A4FC11 /* libcppjansson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558401DBF2E4F00A4FC11 /* libcppjansson.a */; };
-		34F558431DBF2E6500A4FC11 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558421DBF2E6500A4FC11 /* liboauthcpp.a */; };
 		34F558451DBF2E7600A4FC11 /* libopening_hours.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558441DBF2E7600A4FC11 /* libopening_hours.a */; };
 		34F558471DBF2E8100A4FC11 /* libsuccinct.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558461DBF2E8100A4FC11 /* libsuccinct.a */; };
 		34F558491DBF2EC700A4FC11 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558481DBF2EC700A4FC11 /* libz.tbd */; };
@@ -104,7 +103,6 @@
 		39AEF86D1FB45E1600943FC9 /* libicu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39AEF8481FB45C8900943FC9 /* libicu.a */; };
 		39AEF86E1FB45E1600943FC9 /* libsuccinct.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558461DBF2E8100A4FC11 /* libsuccinct.a */; };
 		39AEF86F1FB45E1600943FC9 /* libopening_hours.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558441DBF2E7600A4FC11 /* libopening_hours.a */; };
-		39AEF8701FB45E1600943FC9 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558421DBF2E6500A4FC11 /* liboauthcpp.a */; };
 		39AEF8711FB45E1600943FC9 /* libcppjansson.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F558401DBF2E4F00A4FC11 /* libcppjansson.a */; };
 		39AEF8721FB45E1600943FC9 /* libpugixml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F5583E1DBF2E3400A4FC11 /* libpugixml.a */; };
 		39AEF8731FB45E1600943FC9 /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34F5583C1DBF2E2700A4FC11 /* libeditor.a */; };
@@ -348,7 +346,6 @@
 		34F5583C1DBF2E2700A4FC11 /* libeditor.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libeditor.a; path = "../../../omim-xcode-build/Debug/libeditor.a"; sourceTree = "<group>"; };
 		34F5583E1DBF2E3400A4FC11 /* libpugixml.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpugixml.a; path = "../../../omim-xcode-build/Debug/libpugixml.a"; sourceTree = "<group>"; };
 		34F558401DBF2E4F00A4FC11 /* libcppjansson.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcppjansson.a; path = "../../../omim-xcode-build/Debug/libcppjansson.a"; sourceTree = "<group>"; };
-		34F558421DBF2E6500A4FC11 /* liboauthcpp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liboauthcpp.a; path = "../../../omim-xcode-build/Debug/liboauthcpp.a"; sourceTree = "<group>"; };
 		34F558441DBF2E7600A4FC11 /* libopening_hours.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libopening_hours.a; path = "../../../omim-xcode-build/Debug/libopening_hours.a"; sourceTree = "<group>"; };
 		34F558461DBF2E8100A4FC11 /* libsuccinct.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsuccinct.a; path = "../../../omim-xcode-build/Debug/libsuccinct.a"; sourceTree = "<group>"; };
 		34F558481DBF2EC700A4FC11 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
@@ -547,7 +544,6 @@
 				39AEF86E1FB45E1600943FC9 /* libsuccinct.a in Frameworks */,
 				39AEF8711FB45E1600943FC9 /* libcppjansson.a in Frameworks */,
 				39B2B96C1FB4633200AB85A1 /* libtess2.a in Frameworks */,
-				39AEF8701FB45E1600943FC9 /* liboauthcpp.a in Frameworks */,
 				39B2B96A1FB4631400AB85A1 /* libbsdiff.a in Frameworks */,
 				39B2B9681FB4630000AB85A1 /* libmwm_diff.a in Frameworks */,
 				39AEF8731FB45E1600943FC9 /* libeditor.a in Frameworks */,
@@ -575,7 +571,6 @@
 				39AEF8471FB45C8900943FC9 /* libicu.a in Frameworks */,
 				34F558471DBF2E8100A4FC11 /* libsuccinct.a in Frameworks */,
 				34F558451DBF2E7600A4FC11 /* libopening_hours.a in Frameworks */,
-				34F558431DBF2E6500A4FC11 /* liboauthcpp.a in Frameworks */,
 				34F558411DBF2E4F00A4FC11 /* libcppjansson.a in Frameworks */,
 				34F5583F1DBF2E3400A4FC11 /* libpugixml.a in Frameworks */,
 				34F5583D1DBF2E2700A4FC11 /* libeditor.a in Frameworks */,
@@ -651,7 +646,6 @@
 				34F558481DBF2EC700A4FC11 /* libz.tbd */,
 				34F558461DBF2E8100A4FC11 /* libsuccinct.a */,
 				34F558441DBF2E7600A4FC11 /* libopening_hours.a */,
-				34F558421DBF2E6500A4FC11 /* liboauthcpp.a */,
 				34F558401DBF2E4F00A4FC11 /* libcppjansson.a */,
 				34F5583E1DBF2E3400A4FC11 /* libpugixml.a */,
 				34F5583C1DBF2E2700A4FC11 /* libeditor.a */,
diff --git a/xcode/traffic/traffic.xcodeproj/project.pbxproj b/xcode/traffic/traffic.xcodeproj/project.pbxproj
index 1060bad0d6..537ade9768 100644
--- a/xcode/traffic/traffic.xcodeproj/project.pbxproj
+++ b/xcode/traffic/traffic.xcodeproj/project.pbxproj
@@ -20,7 +20,6 @@
 		FAFD414226BBE3FC00D1DE1B /* libcoding.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414126BBE3FC00D1DE1B /* libcoding.a */; };
 		FAFD414426BBE88000D1DE1B /* libplatform.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414326BBE88000D1DE1B /* libplatform.a */; };
 		FAFD414626BBE88700D1DE1B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414526BBE88700D1DE1B /* libz.tbd */; };
-		FAFD414826BBE8F200D1DE1B /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414726BBE8F200D1DE1B /* liboauthcpp.a */; };
 		FAFD414A26BBE98B00D1DE1B /* libindexer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414926BBE98B00D1DE1B /* libindexer.a */; };
 		FAFD414C26BBE9BB00D1DE1B /* libicu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414B26BBE9BB00D1DE1B /* libicu.a */; };
 		FAFD414E26BBE9C300D1DE1B /* libgeometry.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FAFD414D26BBE9C300D1DE1B /* libgeometry.a */; };
@@ -48,7 +47,6 @@
 		FAFD414126BBE3FC00D1DE1B /* libcoding.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libcoding.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAFD414326BBE88000D1DE1B /* libplatform.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libplatform.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAFD414526BBE88700D1DE1B /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
-		FAFD414726BBE8F200D1DE1B /* liboauthcpp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liboauthcpp.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAFD414926BBE98B00D1DE1B /* libindexer.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libindexer.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAFD414B26BBE9BB00D1DE1B /* libicu.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libicu.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		FAFD414D26BBE9C300D1DE1B /* libgeometry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libgeometry.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -77,7 +75,6 @@
 				FAFD414E26BBE9C300D1DE1B /* libgeometry.a in Frameworks */,
 				FAFD414C26BBE9BB00D1DE1B /* libicu.a in Frameworks */,
 				FAFD414A26BBE98B00D1DE1B /* libindexer.a in Frameworks */,
-				FAFD414826BBE8F200D1DE1B /* liboauthcpp.a in Frameworks */,
 				FAFD414626BBE88700D1DE1B /* libz.tbd in Frameworks */,
 				FAFD414426BBE88000D1DE1B /* libplatform.a in Frameworks */,
 				FAFD414026BBE3FC00D1DE1B /* libbase.a in Frameworks */,
@@ -145,7 +142,6 @@
 				FAFD414D26BBE9C300D1DE1B /* libgeometry.a */,
 				FAFD414B26BBE9BB00D1DE1B /* libicu.a */,
 				FAFD414926BBE98B00D1DE1B /* libindexer.a */,
-				FAFD414726BBE8F200D1DE1B /* liboauthcpp.a */,
 				FAFD414526BBE88700D1DE1B /* libz.tbd */,
 				FAFD414326BBE88000D1DE1B /* libplatform.a */,
 				FAFD413F26BBE3FC00D1DE1B /* libbase.a */,