Kate Mobile v109.1版本的 MD5 值为:fcd76ded5f363ecbfac46035a4ed2a23

以下内容为反编译后的 Api.java 源代码,内容仅作参考


package com.perm.kate.api;

import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import com.perm.utils.ErrorReporter;
import com.perm.utils.TokenHider;
import com.perm.utils.Utils;
import com.perm.utils.WrongResponseCodeException;
import java.io.BufferedInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.zip.GZIPInputStream;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLException;
import net.cogindo.ssl.TLSSocketFactory;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Api {
    static TLSSocketFactory f;
    public static boolean is_dev;
    public static String proxy_addr;
    public static Boolean proxy_enabled;
    public static Integer proxy_port;
    static final ConcurrentLinkedQueue steps = new ConcurrentLinkedQueue();
    public static String tag;
    public static String user_agent;
    public String access_token;
    final String api_id;

    public Api(String str, String str2) {
        this.access_token = str;
        this.api_id = str2;
    }

    private void addCaptchaParams(String str, String str2, Params params) {
        params.put("captcha_sid", str2);
        params.put("captcha_key", str);
    }

    private String answersToString(Collection collection) {
        if (collection == null) {
            return null;
        }
        JSONArray jSONArray = new JSONArray();
        Iterator it = collection.iterator();
        while (it.hasNext()) {
            jSONArray.put((String) it.next());
        }
        return jSONArray.toString();
    }

    private String answersToString2(Collection collection) {
        if (collection == null) {
            return null;
        }
        JSONObject jSONObject = new JSONObject();
        Iterator it = collection.iterator();
        while (it.hasNext()) {
            StrPair strPair = (StrPair) it.next();
            try {
                jSONObject.put(strPair.id, strPair.name);
            } catch (JSONException e) {
                e.printStackTrace();
                ErrorReporter.report(e);
            }
        }
        return jSONObject.toString();
    }

    private String answersToString3(Collection collection) {
        if (collection == null) {
            return null;
        }
        JSONArray jSONArray = new JSONArray();
        Iterator it = collection.iterator();
        while (it.hasNext()) {
            jSONArray.put((Long) it.next());
        }
        return jSONArray.toString();
    }

    private void checkError(JSONObject jSONObject, String str) {
        if (!jSONObject.isNull("error")) {
            JSONObject jSONObject2 = jSONObject.getJSONObject("error");
            int i = jSONObject2.getInt("error_code");
            KException kException = new KException(i, jSONObject2.getString("error_msg"), str);
            if (i == 14) {
                kException.captcha_img = jSONObject2.optString("captcha_img");
                kException.captcha_sid = jSONObject2.optString("captcha_sid");
            }
            if (i == 17) {
                kException.redirect_uri = jSONObject2.optString("redirect_uri");
            }
            throw kException;
        } else if (jSONObject.isNull("execute_errors")) {
        } else {
            JSONArray jSONArray = jSONObject.getJSONArray("execute_errors");
            if (jSONArray.length() == 0) {
                return;
            }
            JSONObject jSONObject3 = jSONArray.getJSONObject(0);
            KException kException2 = new KException(jSONObject3.getInt("error_code"), jSONObject3.getString("error_msg"), str);
            kException2.printStackTrace();
            int i2 = kException2.error_code;
            if (i2 == 30 || i2 == 200 || i2 == 15) {
                return;
            }
            ErrorReporter.report(kException2, "code=" + kException2.error_code + " url=" + TokenHider.hideAccessToken(kException2.url), false);
        }
    }

    public static void enableTls12ForAndroid4(HttpURLConnection httpURLConnection) {
        try {
            if (Build.VERSION.SDK_INT > 19) {
                return;
            }
            if (f == null) {
                f = new TLSSocketFactory();
            }
            ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(f);
        } catch (KeyManagementException e) {
            throw new RuntimeException(e);
        } catch (NoSuchAlgorithmException e2) {
            throw new RuntimeException(e2);
        }
    }

    private long getPeerId(Long l, Long l2) {
        return (l2 == null || l2.longValue() <= 0) ? l.longValue() : l2.longValue() + 2000000000;
    }

    private String getSignedUrl(Params params, boolean z) {
        String str;
        String str2 = this.access_token;
        if (str2 != null) {
            params.put("access_token", str2);
        }
        if (!params.contains("v")) {
            params.put("v", "5.139");
        }
        if (z) {
            str = "";
        } else {
            str = "?" + params.getParamsString();
        }
        return "https://api.vk.com/method/" + params.method_name + str;
    }

    public static String getSteps() {
        try {
            return TextUtils.join(" ", steps);
        } catch (Throwable th) {
            th.printStackTrace();
            return null;
        }
    }

    private ArrayList parseArray(JSONObject jSONObject) {
        JSONArray optJSONArray;
        ArrayList arrayList = new ArrayList();
        if (jSONObject != null && (optJSONArray = jSONObject.optJSONArray("items")) != null) {
            int length = optJSONArray.length();
            for (int i = 0; i < length; i++) {
                long optLong = optJSONArray.optLong(i, Long.MIN_VALUE);
                if (optLong != Long.MIN_VALUE) {
                    arrayList.add(Long.valueOf(optLong));
                }
            }
        }
        return arrayList;
    }

    private ArrayList parseAudioList(JSONArray jSONArray) {
        ArrayList arrayList = new ArrayList();
        if (jSONArray != null) {
            for (int i = 0; i < jSONArray.length(); i++) {
                arrayList.add(Audio.parse((JSONObject) jSONArray.get(i)));
            }
        }
        return arrayList;
    }

    private ArrayList parseConversations(JSONArray jSONArray) {
        ArrayList arrayList = new ArrayList();
        if (jSONArray == null) {
            return arrayList;
        }
        for (int i = 0; i < jSONArray.length(); i++) {
            Message message = new Message();
            Message.parseConversationFields(jSONArray.getJSONObject(i), message);
            arrayList.add(message);
        }
        return arrayList;
    }

    private ArrayList parseDialogs(JSONArray jSONArray) {
        ArrayList arrayList = new ArrayList();
        if (jSONArray != null) {
            int length = jSONArray.length();
            for (int i = 0; i < length; i++) {
                JSONObject jSONObject = jSONArray.getJSONObject(i);
                JSONObject optJSONObject = jSONObject.optJSONObject("last_message");
                if (optJSONObject != null) {
                    arrayList.add(Message.parseConversation(optJSONObject, jSONObject.getJSONObject("conversation")));
                }
            }
        }
        return arrayList;
    }

    private static ArrayList parseItems(JSONArray jSONArray) {
        ArrayList arrayList = new ArrayList();
        if (jSONArray == null) {
            return arrayList;
        }
        for (int i = 0; i < jSONArray.length(); i++) {
            arrayList.add(Long.valueOf(jSONArray.optLong(i)));
        }
        return arrayList;
    }

    private ArrayList parseMessages(JSONArray jSONArray, JSONObject jSONObject) {
        ArrayList arrayList = new ArrayList();
        if (jSONArray != null) {
            int length = jSONArray.length();
            for (int i = 0; i < length; i++) {
                arrayList.add(Message.parse(jSONArray.getJSONObject(i), false));
            }
        }
        if (jSONObject != null) {
            try {
                HashMap hashMap = new HashMap();
                HashMap hashMap2 = new HashMap();
                HashMap hashMap3 = new HashMap();
                JSONArray optJSONArray = jSONObject.optJSONArray("conversations");
                for (int i2 = 0; optJSONArray != null && i2 < optJSONArray.length(); i2++) {
                    JSONObject jSONObject2 = optJSONArray.getJSONObject(i2);
                    long optLong = jSONObject2.getJSONObject("peer").optLong("id");
                    int i3 = jSONObject2.getInt("in_read");
                    int i4 = jSONObject2.getInt("out_read");
                    hashMap.put(Long.valueOf(optLong), Integer.valueOf(i3));
                    hashMap2.put(Long.valueOf(optLong), Integer.valueOf(i4));
                    JSONObject optJSONObject = jSONObject2.optJSONObject("chat_settings");
                    if (optJSONObject != null) {
                        hashMap3.put(Long.valueOf(optLong), optJSONObject.optString("title"));
                    }
                }
                Iterator it = arrayList.iterator();
                while (it.hasNext()) {
                    Message message = (Message) it.next();
                    long peerId = getPeerId(Long.valueOf(message.uid), message.chat_id);
                    int intValue = ((Integer) hashMap.get(Long.valueOf(peerId))).intValue();
                    int intValue2 = ((Integer) hashMap2.get(Long.valueOf(peerId))).intValue();
                    boolean z = true;
                    if (message.is_out) {
                        if (message.mid > intValue2) {
                            z = false;
                        }
                        message.read_state = z;
                    } else {
                        if (message.mid > intValue) {
                            z = false;
                        }
                        message.read_state = z;
                    }
                    String str = (String) hashMap3.get(Long.valueOf(peerId));
                    if (str != null) {
                        message.title = str;
                    }
                }
            } catch (Throwable th) {
                th.printStackTrace();
                ErrorReporter.report(th);
            }
        }
        return arrayList;
    }

    private ArrayList parsePhotoTags(JSONArray jSONArray, Long l, Long l2) {
        ArrayList arrayList = new ArrayList();
        int length = jSONArray.length();
        for (int i = 0; i < length; i++) {
            PhotoTag parse = PhotoTag.parse((JSONObject) jSONArray.get(i));
            arrayList.add(parse);
            if (l != null) {
                parse.pid = l.longValue();
            }
            if (l2 != null) {
                parse.owner_id = l2;
            }
        }
        return arrayList;
    }

    private ArrayList parsePhotos(JSONArray jSONArray) {
        ArrayList arrayList = new ArrayList();
        int length = jSONArray.length();
        for (int i = 0; i < length; i++) {
            arrayList.add(Photo.parse((JSONObject) jSONArray.get(i)));
        }
        return arrayList;
    }

    private void processNetworkException(int i, IOException iOException) {
        iOException.printStackTrace();
        if (i == 3) {
            throw iOException;
        }
    }

    private void reportResponseLength(Params params, int i) {
        if (System.nanoTime() % 100000 < 99999) {
            return;
        }
        try {
            String str = params.method_name;
            if (str.equals("execute")) {
                str = ((String) params.args.get("code")).substring(0, 12);
            }
            RespException respException = new RespException(str);
            respException.setStackTrace(new StackTraceElement[]{new StackTraceElement("FakeClass", "respLength", "FakeClass.java", 1)});
            ErrorReporter.report(respException, "users.get".equals(str) ? tag : Integer.toString(i), true);
        } catch (Throwable th) {
            th.printStackTrace();
            ErrorReporter.report(th);
        }
    }

    private JSONObject sendRequest(Params params) {
        return sendRequest(params, false);
    }

    private JSONObject sendRequest(Params params, boolean z) {
        String signedUrl = getSignedUrl(params, z);
        String str = "";
        String paramsString = z ? params.getParamsString() : "";
        Log.i("Kate.Api", "url=" + TokenHider.hideAccessToken(signedUrl));
        if (paramsString.length() != 0 && is_dev) {
            Log.i("Kate.Api", "body=" + TokenHider.hideAccessToken(paramsString));
        }
        for (int i = 1; i <= 3; i++) {
            if (i != 1) {
                try {
                    Log.i("Kate.Api", "try " + i);
                } catch (SocketException e) {
                    processNetworkException(i, e);
                } catch (SocketTimeoutException e2) {
                    processNetworkException(i, e2);
                } catch (SSLException e3) {
                    processNetworkException(i, e3);
                }
            }
            str = sendRequestInternal(signedUrl, paramsString, z);
        }
        if (is_dev) {
            Log.i("Kate.Api", "response=" + str);
        }
        reportResponseLength(params, str.length());
        JSONObject jSONObject = new JSONObject(str);
        checkError(jSONObject, signedUrl);
        addStep(params.method_name);
        return jSONObject;
    }

    private String sendRequestInternal(String str, String str2, boolean z) {
        HttpURLConnection httpURLConnection;
        String str3;
        int responseCode;
        Integer num;
        HttpURLConnection httpURLConnection2 = null;
        try {
            URL url = new URL(str);
            if (proxy_enabled.booleanValue() && !TextUtils.isEmpty(proxy_addr) && (num = proxy_port) != null && num.intValue() != 0) {
                httpURLConnection = (HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy_addr, proxy_port.intValue())));
                HttpURLConnection httpURLConnection3 = httpURLConnection;
                enableTls12ForAndroid4(httpURLConnection3);
                httpURLConnection3.setConnectTimeout(30000);
                httpURLConnection3.setReadTimeout(30000);
                httpURLConnection3.setUseCaches(false);
                httpURLConnection3.setDoOutput(z);
                httpURLConnection3.setDoInput(true);
                httpURLConnection3.setRequestMethod(!z ? "POST" : "GET");
                str3 = user_agent;
                if (str3 != null) {
                    httpURLConnection3.setRequestProperty("User-Agent", str3);
                }
                httpURLConnection3.setRequestProperty("Accept-Encoding", "gzip");
                if (z) {
                    httpURLConnection3.getOutputStream().write(str2.getBytes("UTF-8"));
                }
                responseCode = httpURLConnection3.getResponseCode();
                Log.i("Kate.Api", "code=" + responseCode);
                if (responseCode == -1) {
                    FilterInputStream bufferedInputStream = new BufferedInputStream(httpURLConnection3.getInputStream(), 8192);
                    String headerField = httpURLConnection3.getHeaderField("Content-Encoding");
                    if (headerField != null && headerField.equalsIgnoreCase("gzip")) {
                        bufferedInputStream = new GZIPInputStream(bufferedInputStream);
                    }
                    String convertStreamToString = Utils.convertStreamToString(bufferedInputStream);
                    httpURLConnection3.disconnect();
                    return convertStreamToString;
                }
                throw new WrongResponseCodeException("Network error");
            }
            httpURLConnection = (HttpURLConnection) url.openConnection();
            HttpURLConnection httpURLConnection32 = httpURLConnection;
            enableTls12ForAndroid4(httpURLConnection32);
            httpURLConnection32.setConnectTimeout(30000);
            httpURLConnection32.setReadTimeout(30000);
            httpURLConnection32.setUseCaches(false);
            httpURLConnection32.setDoOutput(z);
            httpURLConnection32.setDoInput(true);
            httpURLConnection32.setRequestMethod(!z ? "POST" : "GET");
            str3 = user_agent;
            if (str3 != null) {
            }
            httpURLConnection32.setRequestProperty("Accept-Encoding", "gzip");
            if (z) {
            }
            responseCode = httpURLConnection32.getResponseCode();
            Log.i("Kate.Api", "code=" + responseCode);
            if (responseCode == -1) {
            }
        } catch (Throwable th) {
            if (0 != 0) {
                httpURLConnection2.disconnect();
            }
            throw th;
        }
    }

    public static String unescape(String str) {
        return str;
    }

    public static String unescapeForLongPoll(String str) {
        if (str == null) {
            return null;
        }
        return str.replace("&amp;", "&").replace("&quot;", "\"").replace("<br>", "\n").replace("&gt;", ">").replace("&lt;", "<").trim();
    }

    public static String unescapeForPush(String str) {
        if (str == null) {
            return null;
        }
        return str.replace("<br>", "\n").trim();
    }

    public static String unescapeForTopic(String str) {
        if (str == null) {
            return null;
        }
        return str.replace("&gt;", ">").replace("&lt;", "<").trim();
    }

    public static String unescapeWithSmiles(String str) {
        return unescape(str);
    }

    public String addAudio(Long l, Long l2, Long l3, String str, String str2, String str3) {
        Params params = new Params("audio.add");
        params.put("audio_id", l);
        params.put("owner_id", l2);
        params.put("group_id", l3);
        params.put("access_key", str);
        addCaptchaParams(str2, str3, params);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Long addAudioAlbum(String str, long j) {
        Params params = new Params("audio.createPlaylist");
        params.put("title", str);
        params.put("owner_id", Long.valueOf(j));
        return Long.valueOf(sendRequest(params).getJSONObject("response").optLong("id"));
    }

    public Boolean addBan(Collection collection, Collection collection2) {
        Params params = new Params("newsfeed.addBan");
        if (collection != null && collection.size() > 0) {
            params.put("user_ids", arrayToString(collection));
        }
        if (collection2 != null && collection2.size() > 0) {
            params.put("group_ids", arrayToString(collection2));
        }
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public long addFriend(Long l, String str, String str2, String str3) {
        Params params = new Params("friends.add");
        params.put("user_id", l);
        params.put("text", str);
        addCaptchaParams(str2, str3, params);
        return sendRequest(params).optLong("response");
    }

    public Boolean addGroupBanUser(long j, long j2, Long l, Integer num, String str, boolean z) {
        Params params = new Params("groups.ban");
        params.put("group_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("end_date", l);
        params.put("reason", num);
        params.put("comment", str);
        if (z) {
            params.put("comment_visible", "1");
        }
        return Boolean.valueOf(sendRequest(params, true).optInt("response") == 1);
    }

    public Link addGroupLink(long j, String str, String str2) {
        Params params = new Params("groups.addLink");
        params.put("group_id", Long.valueOf(j));
        params.put("link", str);
        params.put("text", str2);
        return Link.parseFromGroup(sendRequest(params).optJSONObject("response"));
    }

    public Long addLike(Long l, Long l2, String str, String str2, Integer num, String str3, String str4) {
        Params params = new Params("likes.add");
        params.put("owner_id", l);
        params.put("item_id", l2);
        params.put("type", str);
        params.put("access_key", str2);
        params.put("reaction_id", num);
        params.put("v", "5.157");
        addCaptchaParams(str3, str4, params);
        return Long.valueOf(sendRequest(params).optJSONObject("response").optLong("likes", -1L));
    }

    public long addMarket(long j, String str, String str2, long j2, long j3, Double d, ArrayList arrayList) {
        Params params = new Params("market.add");
        params.put("owner_id", Long.valueOf(j));
        params.put("name", str);
        params.put("description", str2);
        params.put("category_id", Long.valueOf(j2));
        params.put("main_photo_id", Long.valueOf(j3));
        if (d != null) {
            params.putDouble("price", d.doubleValue());
        }
        params.put("photo_ids", arrayToString(arrayList));
        return sendRequest(params, true).optJSONObject("response").optLong("market_item_id");
    }

    public long addMarketAlbum(long j, String str, Long l) {
        Params params = new Params("market.addAlbum");
        params.put("owner_id", Long.valueOf(j));
        params.put("title", str);
        params.put("photo_id", l);
        return sendRequest(params, true).optJSONObject("response").optLong("market_album_id");
    }

    public boolean addMarketToAlbum(long j, long j2, ArrayList arrayList) {
        Params params = new Params("market.addToAlbum");
        params.put("owner_id", Long.valueOf(j));
        params.put("item_id", Long.valueOf(j2));
        params.put("album_ids", arrayToString(arrayList));
        return sendRequest(params, true).optInt("response") == 1;
    }

    public int addPollVote(long j, Collection collection, long j2, boolean z, String str, String str2) {
        Params params = new Params("polls.addVote");
        params.put("owner_id", Long.valueOf(j2));
        params.put("poll_id", Long.valueOf(j));
        if (z) {
            params.put("is_board", "1");
        }
        params.put("answer_ids", arrayToString(collection));
        addCaptchaParams(str, str2, params);
        return sendRequest(params).getInt("response");
    }

    void addStep(String str) {
        try {
            ConcurrentLinkedQueue concurrentLinkedQueue = steps;
            concurrentLinkedQueue.add(str);
            if (concurrentLinkedQueue.size() > 10) {
                concurrentLinkedQueue.poll();
            }
        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    public Boolean addToBlackList(long j) {
        Params params = new Params("account.ban");
        params.put("owner_id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Integer addUserToChat(long j, long j2) {
        Params params = new Params("messages.addChatUser");
        params.put("chat_id", Long.valueOf(j));
        params.put("user_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public String addVideo(Long l, Long l2, Long l3, String str, String str2) {
        Params params = new Params("video.add");
        params.put("target_id", l3);
        params.put("video_id", l);
        params.put("owner_id", l2);
        addCaptchaParams(str, str2, params);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Long addVideoAlbum(Long l, String str, String str2) {
        Params params = new Params("video.addAlbum");
        params.put("group_id", l);
        params.put("title", str);
        params.put("privacy", str2);
        return Long.valueOf(sendRequest(params).getJSONObject("response").optLong("album_id"));
    }

    public int allowMessagesFromGroup(long j) {
        Params params = new Params("messages.allowMessagesFromGroup");
        params.put("group_id", Long.valueOf(j));
        return sendRequest(params).optInt("response");
    }

    public boolean archiveWallPost(long j) {
        Params params = new Params("wall.archive");
        params.put("post_id", Long.valueOf(j));
        return sendRequest(params).optInt("response") == 1;
    }

    String arrayToString(Collection collection) {
        if (collection == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (Object obj : collection) {
            if (sb.length() != 0) {
                sb.append(',');
            }
            sb.append(obj);
        }
        return sb.toString();
    }

    public int audioFollowPlaylist(long j, long j2, String str) {
        Params params = new Params("audio.followPlaylist");
        params.put("owner_id", Long.valueOf(j));
        params.put("playlist_id", Long.valueOf(j2));
        params.put("access_key", str);
        sendRequest(params);
        return 1;
    }

    public boolean audioReorder(long j, long j2, Long l, Long l2, Long l3) {
        Params params = new Params("audio.reorder");
        params.put("audio_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("before", l);
        params.put("after", l2);
        params.put("playlist_id", l3);
        return sendRequest(params).optInt("response") == 1;
    }

    public boolean audioSendStartEvent(String str, String str2) {
        Params params = new Params("audio.sendStartEvent");
        params.put("uuid", str);
        params.put("device_id", str);
        params.put("audio_id", str2);
        return sendRequest(params).optLong("response") == 1;
    }

    public void audioSetBroadcast(String str, String str2) {
        Params params = new Params("audio.setBroadcast");
        params.put("audio", str);
        params.put("target_ids", str2);
        sendRequest(params);
    }

    public String audioSubscribeToQueue() {
        return sendRequest(new Params("audio.subscribeToQueue")).optJSONObject("response").optString("url");
    }

    public String changePassword(String str, String str2, String str3, String str4, String str5, String str6) {
        Params params = new Params("account.changePassword");
        params.put("new_password", str);
        params.put("old_password", str2);
        params.put("restore_sid", str3);
        params.put("change_password_hash", str4);
        addCaptchaParams(str5, str6, params);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        if (optJSONObject != null) {
            return optJSONObject.optString("token");
        }
        return null;
    }

    public Long chatCreate(ArrayList arrayList, String str) {
        if (arrayList == null || arrayList.size() == 0) {
            return null;
        }
        Params params = new Params("messages.createChat");
        String valueOf = String.valueOf(arrayList.get(0));
        for (int i = 1; i < arrayList.size(); i++) {
            valueOf = valueOf + "," + arrayList.get(i);
        }
        params.put("user_ids", valueOf);
        params.put("title", str);
        return Long.valueOf(sendRequest(params).optLong("response"));
    }

    public Integer chatEdit(long j, String str) {
        Params params = new Params("messages.editChat");
        params.put("chat_id", Long.valueOf(j));
        params.put("title", str);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean closeTopic(long j, long j2) {
        Params params = new Params("board.closeTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public Integer confirmPhotoTag(Long l, long j, long j2) {
        Params params = new Params("photos.confirmTag");
        params.put("owner_id", l);
        params.put("photo_id", Long.valueOf(j));
        params.put("tag_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Album createAlbum(String str, Long l, String str2, String str3, String str4) {
        Params params = new Params("photos.createAlbum");
        params.put("title", str);
        params.put("group_id", l);
        params.put("privacy_view", str2);
        params.put("privacy_comment", str3);
        params.put("description", str4);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        if (optJSONObject == null) {
            return null;
        }
        return Album.parse(optJSONObject);
    }

    public Group createGroup(String str, String str2, String str3, Integer num, String str4, String str5) {
        Params params = new Params("groups.create");
        params.put("title", str);
        params.put("description", str2);
        params.put("type", str3);
        params.put("subtype", num);
        addCaptchaParams(str4, str5, params);
        return Group.parse(sendRequest(params).optJSONObject("response"));
    }

    public long createGroupTopic(long j, String str, String str2, boolean z, String str3, String str4) {
        Params params = new Params("board.addTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("title", str);
        params.put("text", str2);
        if (z) {
            params.put("from_group", "1");
        }
        addCaptchaParams(str3, str4, params);
        return sendRequest(params, true).optLong("response");
    }

    public long createGroupTopicComment(long j, long j2, String str, Collection collection, boolean z, Integer num, String str2, String str3) {
        Params params = new Params("board.createComment");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        if (z) {
            params.put("from_group", "1");
        }
        params.put("sticker_id", num);
        addCaptchaParams(str2, str3, params);
        return sendRequest(params, true).optLong("response");
    }

    public long createMarketComment(Long l, Long l2, String str, Long l3, Collection collection, boolean z, Integer num, String str2, String str3) {
        Params params = new Params("market.createComment");
        params.put("owner_id", l);
        params.put("item_id", l2);
        params.put("message", str);
        params.put("reply_to_comment", l3);
        params.put("attachments", arrayToString(collection));
        if (z) {
            params.put("from_group", "1");
        }
        params.put("sticker_id", num);
        addCaptchaParams(str2, str3, params);
        return sendRequest(params, true).optLong("response");
    }

    public long createNote(String str, String str2) {
        Params params = new Params("notes.add");
        params.put("title", str);
        params.put("text", str2);
        params.put("privacy_view", "all");
        params.put("privacy_comment", "all");
        return sendRequest(params, true).getLong("response");
    }

    public long createNoteComment(Long l, Long l2, String str, String str2, String str3) {
        Params params = new Params("notes.createComment");
        params.put("note_id", l);
        params.put("owner_id", l2);
        addCaptchaParams(str2, str3, params);
        params.put("message", str);
        return sendRequest(params, true).optLong("response");
    }

    public long createPhotoComment(Long l, Long l2, String str, Long l3, Collection collection, boolean z, Integer num, String str2, String str3) {
        Params params = new Params("photos.createComment");
        params.put("photo_id", l);
        params.put("owner_id", l2);
        addCaptchaParams(str2, str3, params);
        params.put("message", str);
        params.put("reply_to_comment", l3);
        params.put("attachments", arrayToString(collection));
        if (z) {
            params.put("from_group", "1");
        }
        params.put("sticker_id", num);
        return sendRequest(params, true).optLong("response");
    }

    public VkPoll createPoll(String str, boolean z, boolean z2, Long l, Long l2, Collection collection) {
        Params params = new Params("polls.create");
        params.put("owner_id", l2);
        params.put("question", str);
        params.put("is_anonymous", Integer.valueOf(z ? 1 : 0));
        params.put("is_multiple", Integer.valueOf(z2 ? 1 : 0));
        params.put("end_date", l);
        params.put("add_answers", answersToString(collection));
        return VkPoll.parse(sendRequest(params).getJSONObject("response"));
    }

    public long createVideoComment(Long l, Long l2, String str, Long l3, Collection collection, boolean z, Integer num, String str2, String str3) {
        Params params = new Params("video.createComment");
        params.put("video_id", l);
        params.put("owner_id", l2);
        addCaptchaParams(str2, str3, params);
        params.put("message", str);
        params.put("reply_to_comment", l3);
        params.put("attachments", arrayToString(collection));
        if (z) {
            params.put("from_group", "1");
        }
        params.put("sticker_id", num);
        return sendRequest(params, true).optLong("response");
    }

    public ArrayList createWallComment(Long l, Long l2, String str, Long l3, Collection collection, Long l4, Integer num, String str2, String str3) {
        Params params = new Params("wall.createComment");
        params.put("owner_id", l);
        params.put("post_id", l2);
        params.put("message", str);
        params.put("reply_to_comment", l3);
        params.put("attachments", arrayToString(collection));
        params.put("from_group", l4);
        params.put("sticker_id", num);
        addCaptchaParams(str2, str3, params);
        JSONObject jSONObject = sendRequest(params, true).getJSONObject("response");
        ArrayList arrayList = new ArrayList();
        long optLong = jSONObject.optLong("comment_id");
        if (optLong != 0) {
            arrayList.add(Long.valueOf(optLong));
        }
        if (jSONObject.has("parents_stack")) {
            JSONArray optJSONArray = jSONObject.optJSONArray("parents_stack");
            if (optJSONArray.length() > 0) {
                arrayList.add(Long.valueOf(optJSONArray.getLong(0)));
            }
        }
        return arrayList;
    }

    public long createWallPost(long j, String str, Collection collection, String str2, boolean z, boolean z2, boolean z3, String str3, String str4, Long l, Long l2, String str5, String str6, String str7) {
        Params params = new Params("wall.post");
        params.put("owner_id", Long.valueOf(j));
        params.put("attachments", arrayToString(collection));
        params.put("lat", str3);
        params.put("long", str4);
        params.put("message", str);
        if (str2 != null && str2.length() != 0) {
            params.put("services", str2);
        }
        if (z2) {
            params.put("from_group", "1");
        }
        if (z) {
            params.put("friends_only", "1");
        }
        if (z3) {
            params.put("signed", "1");
        }
        params.put("publish_date", l);
        if (l2 != null && l2.longValue() > 0) {
            params.put("post_id", l2);
        }
        params.put("copyright", str5);
        addCaptchaParams(str6, str7, params);
        return sendRequest(params, true).getJSONObject("response").optLong("post_id");
    }

    public String deleteAlbum(Long l, Long l2) {
        Params params = new Params("photos.deleteAlbum");
        params.put("album_id", l);
        params.put("group_id", l2);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Integer deleteAudioAlbum(long j, long j2) {
        Params params = new Params("audio.deletePlaylist");
        params.put("playlist_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public int deleteAudios(ArrayList arrayList, long j) {
        Iterator it;
        String str = "";
        while (arrayList.iterator().hasNext()) {
            str = str + "API.audio.delete({audio_id:" + ((Long) it.next()) + ",owner_id:" + j + "});";
        }
        Params params = new Params("execute");
        params.put("code", str);
        sendRequest(params, true);
        return 0;
    }

    public Boolean deleteBan(Collection collection, Collection collection2) {
        Params params = new Params("newsfeed.deleteBan");
        if (collection != null && collection.size() > 0) {
            params.put("user_ids", arrayToString(collection));
        }
        if (collection2 != null && collection2.size() > 0) {
            params.put("group_ids", arrayToString(collection2));
        }
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Long deleteChatPhoto(long j) {
        Params params = new Params("messages.deleteChatPhoto");
        params.put("chat_id", Long.valueOf(j));
        return Long.valueOf(sendRequest(params).getJSONObject("response").optLong("message_id"));
    }

    public int deleteDialogs(ArrayList arrayList, ArrayList arrayList2) {
        Iterator it;
        Iterator it2;
        String str = "";
        while (arrayList2.iterator().hasNext()) {
            str = str + "API.messages.deleteConversation({peer_id:" + getPeerId(null, (Long) it.next()) + "});";
        }
        while (arrayList.iterator().hasNext()) {
            str = str + "API.messages.deleteConversation({peer_id:" + getPeerId((Long) it2.next(), null) + "});";
        }
        Params params = new Params("execute");
        params.put("code", str);
        sendRequest(params, true);
        return 0;
    }

    public Boolean deleteDoc(Long l, long j) {
        Params params = new Params("docs.delete");
        params.put("owner_id", Long.valueOf(j));
        params.put("doc_id", l);
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public long deleteFriend(Long l) {
        Params params = new Params("friends.delete");
        params.put("user_id", l);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        if (optJSONObject.optLong("success") == 1) {
            long optLong = optJSONObject.optLong("friend_deleted");
            long optLong2 = optJSONObject.optLong("out_request_deleted");
            if (optLong == 1) {
                return 1L;
            }
            if (optLong2 == 1) {
                return 2L;
            }
        }
        return 0L;
    }

    public Boolean deleteFromBlackList(long j) {
        Params params = new Params("account.unban");
        params.put("owner_id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Boolean deleteGroupBanUser(long j, long j2) {
        Params params = new Params("groups.unban");
        params.put("group_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Integer deleteGroupLink(long j, long j2) {
        Params params = new Params("groups.deleteLink");
        params.put("group_id", Long.valueOf(j));
        params.put("link_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Boolean deleteGroupTopic(long j, long j2) {
        Params params = new Params("board.deleteTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Boolean deleteGroupTopicComment(long j, long j2, long j3) {
        Params params = new Params("board.deleteComment");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        params.put("comment_id", Long.valueOf(j3));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public int deleteGroups(ArrayList arrayList) {
        Iterator it;
        String str = "";
        while (arrayList.iterator().hasNext()) {
            str = str + "API.groups.leave({group_id:" + ((Long) it.next()) + "});";
        }
        Params params = new Params("execute");
        params.put("code", str);
        sendRequest(params, true);
        return 0;
    }

    public Object deleteLastWallPosts(long j, int i, String str) {
        Params params = new Params("execute");
        params.put("code", "var posts = API.wall.get({owner_id:" + j + ",filter:" + str + ",count:" + i + "});var i=0;var count=posts.items.length;while(i<count){API.wall.delete({owner_id:" + j + ",post_id:posts.items[i].id});i=i+1;};");
        return sendRequest(params);
    }

    public Long deleteLike(Long l, String str, Long l2, String str2, String str3) {
        Params params = new Params("likes.delete");
        params.put("owner_id", l);
        params.put("type", str);
        params.put("item_id", l2);
        addCaptchaParams(str2, str3, params);
        return Long.valueOf(sendRequest(params).optJSONObject("response").optLong("likes", -1L));
    }

    public boolean deleteMarket(long j, long j2) {
        Params params = new Params("market.delete");
        params.put("owner_id", Long.valueOf(j));
        params.put("item_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public boolean deleteMarketAlbum(long j, long j2) {
        Params params = new Params("market.deleteAlbum");
        params.put("owner_id", Long.valueOf(j));
        params.put("album_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public Boolean deleteMarketComment(Long l, long j) {
        Params params = new Params("market.deleteComment");
        params.put("owner_id", l);
        params.put("comment_id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public String deleteMessage(Collection collection, Integer num, boolean z) {
        Params params = new Params("messages.delete");
        params.put("message_ids", arrayToString(collection));
        params.put("delete_for_all", num);
        params.put("spam", Integer.valueOf(z ? 1 : 0));
        sendRequest(params);
        return null;
    }

    public int deleteMessageThread(Long l, Long l2) {
        Params params = new Params("messages.deleteConversation");
        params.put("peer_id", Long.valueOf(getPeerId(l, l2)));
        sendRequest(params);
        return 1;
    }

    public String deleteNote(Long l) {
        Params params = new Params("notes.delete");
        params.put("note_id", l);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Boolean deleteNoteComment(Long l, long j) {
        Params params = new Params("notes.deleteComment");
        params.put("owner_id", l);
        params.put("comment_id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public boolean deletePhoto(Long l, Long l2) {
        Params params = new Params("photos.delete");
        params.put("owner_id", l);
        params.put("photo_id", l2);
        return sendRequest(params).optLong("response", -1L) == 1;
    }

    public Boolean deletePhotoComment(long j, Long l, long j2) {
        Params params = new Params("photos.deleteComment");
        params.put("owner_id", l);
        params.put("comment_id", Long.valueOf(j2));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public int deletePhotos(ArrayList arrayList) {
        Iterator it = arrayList.iterator();
        String str = "";
        while (it.hasNext()) {
            IdsPair idsPair = (IdsPair) it.next();
            str = str + "API.photos.delete({owner_id:" + idsPair.owner_id + ",photo_id:" + idsPair.id + "});";
        }
        Params params = new Params("execute");
        params.put("code", str);
        sendRequest(params, true);
        return 0;
    }

    public int deletePollVote(long j, long j2, long j3, boolean z) {
        Params params = new Params("polls.deleteVote");
        params.put("owner_id", Long.valueOf(j3));
        params.put("poll_id", Long.valueOf(j));
        if (z) {
            params.put("is_board", "1");
        }
        params.put("answer_id", Long.valueOf(j2));
        return sendRequest(params).getInt("response");
    }

    public Object deleteRecentTopicComments(long j, long j2) {
        Params params = new Params("execute");
        params.put("code", "var api_call_count=0;var deleted_count=0;var topics=API.board.getTopics({\"group_id\": " + j + ", \"count\": 10, \"order\": 1});api_call_count=api_call_count+1;var i=0;while(i<topics.items.length){    var topic_id=topics.items[i].id;    var comments=API.board.getComments({\"group_id\": " + j + ", \"topic_id\": topic_id, \"count\": 45, \"sort\": \"desc\"});    api_call_count=api_call_count+1;    if(api_call_count>=25){        return deleted_count;    }    var j=0;    while(j<comments.items.length){        if(comments.items[j].from_id==" + j2 + "){            API.board.deleteComment({\"group_id\": " + j + ", \"topic_id\": topic_id, \"comment_id\": comments.items[j].id});            api_call_count=api_call_count+1;            deleted_count=deleted_count+1;            if(api_call_count>=25){                return deleted_count;            }        }        j=j+1;    }    i=i+1;}return deleted_count;");
        return Long.valueOf(sendRequest(params, true).optLong("response"));
    }

    public Object deleteRecentWallComments(long j, long j2) {
        Params params = new Params("execute");
        params.put("code", "var api_call_count=0;var deleted_count=0;var posts=API.wall.get({\"owner_id\": " + j + ", \"count\": 10});api_call_count=api_call_count+1;var i=0;while(i<posts.items.length){    var post_id=posts.items[i].id;    var comments=API.wall.getComments({\"owner_id\": " + j + ", \"post_id\": post_id, \"count\": 45, \"sort\": \"desc\"});    api_call_count=api_call_count+1;    if(api_call_count>=25){        return deleted_count;    }    var j=0;    while(j<comments.items.length){        if(comments.items[j].from_id==" + j2 + "){            API.wall.deleteComment({\"owner_id\": " + j + ", \"comment_id\": comments.items[j].id});            api_call_count=api_call_count+1;            deleted_count=deleted_count+1;            if(api_call_count>=25){                return deleted_count;            }        }        j=j+1;    }    i=i+1;}return deleted_count;");
        return Long.valueOf(sendRequest(params, true).optLong("response"));
    }

    public boolean deleteStory(long j, long j2) {
        Params params = new Params("stories.delete");
        params.put("owner_id", Long.valueOf(j));
        params.put("story_id", Long.valueOf(j2));
        return sendRequest(params).optLong("response", -1L) == 1;
    }

    public String deleteVideo(Long l, Long l2, long j) {
        Params params = new Params("video.delete");
        params.put("video_id", l);
        params.put("owner_id", l2);
        params.put("target_id", Long.valueOf(j));
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Integer deleteVideoAlbum(long j, Long l) {
        Params params = new Params("video.deleteAlbum");
        params.put("album_id", Long.valueOf(j));
        params.put("group_id", l);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Boolean deleteVideoComment(Long l, long j) {
        Params params = new Params("video.deleteComment");
        params.put("owner_id", l);
        params.put("comment_id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Boolean deleteWallComment(Long l, long j) {
        Params params = new Params("wall.deleteComment");
        params.put("owner_id", l);
        params.put("comment_id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public int denyMessagesFromGroup(long j) {
        Params params = new Params("messages.denyMessagesFromGroup");
        params.put("group_id", Long.valueOf(j));
        return sendRequest(params).optInt("response");
    }

    public Long docsAdd(long j, long j2, String str, String str2, String str3) {
        Params params = new Params("docs.add");
        params.put("doc_id", Long.valueOf(j2));
        params.put("owner_id", Long.valueOf(j));
        params.put("access_key", str);
        addCaptchaParams(str2, str3, params);
        return Long.valueOf(sendRequest(params).optLong("response"));
    }

    public String docsGetUploadServer(Long l, String str) {
        Params params = new Params("docs.getUploadServer");
        params.put("group_id", l);
        params.put("type", str);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public String editAlbum(long j, Long l, String str, String str2, String str3, String str4) {
        Params params = new Params("photos.editAlbum");
        params.put("album_id", String.valueOf(j));
        params.put("owner_id", l);
        params.put("title", str);
        params.put("privacy_view", str2);
        params.put("privacy_comment", str3);
        params.put("description", str4);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Long editAudio(long j, long j2, String str, String str2, String str3, Integer num, Integer num2, String str4, String str5) {
        Params params = new Params("audio.edit");
        params.put("owner_id", Long.valueOf(j));
        params.put("audio_id", Long.valueOf(j2));
        params.put("artist", str);
        params.put("title", str2);
        params.put("text", str3);
        params.put("genre_id", num);
        params.put("no_search", num2);
        addCaptchaParams(str4, str5, params);
        return Long.valueOf(sendRequest(params, true).optLong("response"));
    }

    public Integer editAudioAlbum(String str, long j, long j2) {
        Params params = new Params("audio.editPlaylist");
        params.put("title", str);
        params.put("playlist_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean editDoc(long j, long j2, String str, String str2) {
        Params params = new Params("docs.edit");
        params.put("owner_id", Long.valueOf(j));
        params.put("doc_id", Long.valueOf(j2));
        params.put("title", str);
        params.put("tags", str2);
        return sendRequest(params).optInt("response") == 1;
    }

    public Integer editGroupLink(long j, long j2, String str) {
        Params params = new Params("groups.editLink");
        params.put("group_id", Long.valueOf(j));
        params.put("link_id", Long.valueOf(j2));
        params.put("text", str);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer editGroupSettings(long j, GroupSettings groupSettings, String str, String str2) {
        Params params = new Params("groups.edit");
        params.put("group_id", Long.valueOf(j));
        if (groupSettings != null) {
            params.put("title", groupSettings.title);
            params.put("description", groupSettings.description);
            params.put("screen_name", groupSettings.address);
            params.put("access", groupSettings.access);
            params.put("website", groupSettings.website);
            params.put("email", groupSettings.email);
            params.put("phone", groupSettings.phone);
            params.put("wall", groupSettings.wall);
            params.put("photos", groupSettings.photos);
            params.put("video", groupSettings.video);
            params.put("audio", groupSettings.audio);
            params.put("topics", groupSettings.topics);
            params.put("docs", groupSettings.docs);
            params.put("wiki", groupSettings.wiki);
            params.put("links", groupSettings.links);
            params.put("events", groupSettings.events);
            params.put("places", groupSettings.places);
            params.put("contacts", groupSettings.contacts);
            params.put("public_date", groupSettings.public_date);
        }
        addCaptchaParams(str, str2, params);
        return Integer.valueOf(sendRequest(params, true).optInt("response"));
    }

    public boolean editGroupTopicComment(long j, long j2, long j3, String str, Collection collection, String str2, String str3) {
        Params params = new Params("board.editComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("group_id", Long.valueOf(j2));
        params.put("topic_id", Long.valueOf(j3));
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        addCaptchaParams(str2, str3, params);
        return sendRequest(params, true).optInt("response") == 1;
    }

    public boolean editMarket(long j, long j2, String str, String str2, Long l, Long l2, Double d, ArrayList arrayList) {
        Params params = new Params("market.edit");
        params.put("owner_id", Long.valueOf(j));
        params.put("item_id", Long.valueOf(j2));
        params.put("name", str);
        params.put("description", str2);
        params.put("category_id", l);
        params.put("main_photo_id", l2);
        if (d != null) {
            params.putDouble("price", d.doubleValue());
        }
        params.put("photo_ids", arrayToString(arrayList));
        return sendRequest(params, true).optInt("response") == 1;
    }

    public boolean editMarketAlbum(long j, long j2, String str, Long l) {
        Params params = new Params("market.editAlbum");
        params.put("owner_id", Long.valueOf(j));
        params.put("album_id", Long.valueOf(j2));
        params.put("title", str);
        params.put("photo_id", l);
        return sendRequest(params, true).optInt("response") == 1;
    }

    public boolean editMarketComment(long j, Long l, String str, Collection collection, String str2, String str3) {
        Params params = new Params("market.editComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", l);
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        addCaptchaParams(str2, str3, params);
        return sendRequest(params, true).optInt("response") == 1;
    }

    public Integer editMessage(long j, String str, long j2, Collection collection, String str2, String str3) {
        Params params = new Params("messages.edit");
        params.put("message_id", Long.valueOf(j));
        params.put("message", str);
        params.put("peer_id", Long.valueOf(j2));
        params.put("attachment", arrayToString(collection));
        params.put("keep_forward_messages", (Integer) 1);
        addCaptchaParams(str2, str3, params);
        return Integer.valueOf(sendRequest(params, true).optInt("response"));
    }

    public boolean editNoteComment(long j, Long l, String str, String str2, String str3) {
        Params params = new Params("notes.editComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", l);
        addCaptchaParams(str2, str3, params);
        params.put("message", str);
        return sendRequest(params, true).optInt("response") == 1;
    }

    public boolean editPhotoComment(long j, long j2, Long l, String str, Collection collection, String str2, String str3) {
        Params params = new Params("photos.editComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("photo_id", Long.valueOf(j2));
        params.put("owner_id", l);
        addCaptchaParams(str2, str3, params);
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        return sendRequest(params, true).optInt("response") == 1;
    }

    public boolean editPoll(long j, long j2, String str, Long l, Collection collection, Collection collection2, Collection collection3) {
        Params params = new Params("polls.edit");
        params.put("poll_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("question", str);
        params.put("end_date", l);
        params.put("add_answers", answersToString(collection));
        params.put("edit_answers", answersToString2(collection2));
        params.put("delete_answers", answersToString3(collection3));
        return sendRequest(params).optLong("response") == 1;
    }

    public boolean editTopic(long j, long j2, String str) {
        Params params = new Params("board.editTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        params.put("title", str);
        return sendRequest(params).optInt("response") == 1;
    }

    public boolean editVideo(long j, Long l, String str, String str2, String str3, String str4, Integer num, String str5, String str6) {
        Params params = new Params("video.edit");
        params.put("video_id", Long.valueOf(j));
        params.put("owner_id", l);
        params.put("name", str);
        params.put("desc", str2);
        params.put("privacy_view", str3);
        params.put("privacy_comment", str4);
        params.put("repeat", num);
        addCaptchaParams(str5, str6, params);
        return sendRequest(params, true).optInt("response") == 1;
    }

    public Integer editVideoAlbum(long j, Long l, String str, String str2) {
        Params params = new Params("video.editAlbum");
        params.put("album_id", Long.valueOf(j));
        params.put("group_id", l);
        params.put("title", str);
        params.put("privacy", str2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean editVideoComment(long j, Long l, String str, Collection collection, String str2, String str3) {
        Params params = new Params("video.editComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", l);
        addCaptchaParams(str2, str3, params);
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        return sendRequest(params, true).optInt("response") == 1;
    }

    public boolean editWallComment(long j, Long l, String str, Collection collection, String str2, String str3) {
        Params params = new Params("wall.editComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", l);
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        addCaptchaParams(str2, str3, params);
        return sendRequest(params, true).optInt("response") == 1;
    }

    public int editWallPost(long j, long j2, String str, Collection collection, String str2, String str3, long j3, Long l, boolean z, String str4, String str5, String str6) {
        Params params = new Params("wall.edit");
        params.put("owner_id", Long.valueOf(j));
        params.put("post_id", Long.valueOf(j2));
        params.put("message", str);
        params.put("attachments", arrayToString(collection));
        params.put("lat", str2);
        params.put("long", str3);
        params.put("place_id", Long.valueOf(j3));
        params.put("publish_date", l);
        params.put("signed", Integer.valueOf(z ? 1 : 0));
        params.put("copyright", str4);
        addCaptchaParams(str5, str6, params);
        sendRequest(params, true);
        return 1;
    }

    public Integer faveAddLink(String str) {
        Params params = new Params("fave.addLink");
        params.put("link", str);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer faveAddPage(Long l, Long l2) {
        Params params = new Params("fave.addPage");
        params.put("user_id", l);
        params.put("group_id", l2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Boolean faveAddPost(Long l, long j) {
        Params params = new Params("fave.addPost");
        params.put("owner_id", Long.valueOf(j));
        params.put("id", l);
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Boolean faveAddVideo(long j, long j2, String str) {
        Params params = new Params("fave.addVideo");
        params.put("owner_id", Long.valueOf(j2));
        params.put("id", Long.valueOf(j));
        params.put("access_key", str);
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Integer faveRemoveLink(String str) {
        Params params = new Params("fave.removeLink");
        params.put("link_id", str);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer faveRemovePage(Long l, Long l2) {
        Params params = new Params("fave.removePage");
        params.put("user_id", l);
        params.put("group_id", l2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Boolean faveRemovePost(Long l, long j) {
        Params params = new Params("fave.removePost");
        params.put("owner_id", Long.valueOf(j));
        params.put("id", l);
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public Boolean faveRemoveVideo(long j, long j2) {
        Params params = new Params("fave.removeVideo");
        params.put("owner_id", Long.valueOf(j2));
        params.put("id", Long.valueOf(j));
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public boolean fixTopic(long j, long j2) {
        Params params = new Params("board.fixTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public Integer friendsEdit(long j, Collection collection) {
        Params params = new Params("friends.edit");
        params.put("user_id", Long.valueOf(j));
        params.put("list_ids", arrayToString(collection));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public ArrayList friendsLists(Long l, boolean z) {
        Params params = new Params("friends.getLists");
        params.put("user_id", l);
        if (z) {
            params.put("return_system", (Integer) 1);
        }
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        if (optJSONArray != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                arrayList.add(FriendsList.parse(optJSONArray.getJSONObject(i)));
            }
        }
        return arrayList;
    }

    public ArrayList getAlbumComments(Long l, Long l2, int i, int i2) {
        Params params = new Params("photos.getAllComments");
        params.put("album_id", l);
        params.put("owner_id", l2);
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        params.put("need_likes", "1");
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            arrayList.add(Comment.parseForAlbum((JSONObject) optJSONArray.get(i3)));
        }
        return arrayList;
    }

    public ArrayList getAlbums(Long l, Collection collection, Integer num, Integer num2, Integer num3) {
        Params params = new Params("photos.getAlbums");
        params.put("owner_id", l);
        params.put("album_ids", arrayToString(collection));
        params.put("need_system", num);
        params.put("need_covers", num2);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        if (optJSONArray == null) {
            return arrayList;
        }
        int length = optJSONArray.length();
        for (int i = 0; i < length; i++) {
            Album parse = Album.parse((JSONObject) optJSONArray.get(i));
            if (!parse.title.equals("DELETED")) {
                arrayList.add(parse);
            }
        }
        return arrayList;
    }

    public ArrayList getAlbumsByVideo(long j, Long l, Long l2) {
        Params params = new Params("video.getAlbumsByVideo");
        params.put("target_id", Long.valueOf(j));
        params.put("owner_id", l2);
        params.put("video_id", l);
        JSONArray jSONArray = sendRequest(params).getJSONArray("response");
        ArrayList arrayList = new ArrayList();
        for (int i = 0; i < jSONArray.length(); i++) {
            arrayList.add(Long.valueOf(jSONArray.getLong(i)));
        }
        return arrayList;
    }

    public ArrayList getAllPhotos(Long l, Integer num, Integer num2, boolean z) {
        Params params = new Params("photos.getAll");
        params.put("owner_id", l);
        params.put("offset", num);
        params.put("count", num2);
        params.put("extended", Integer.valueOf(z ? 1 : 0));
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? new ArrayList() : parsePhotos(optJSONArray);
    }

    public ArrayList getAudio(Long l, Long l2, Long l3, Collection collection, int i, int i2, String str, String str2, String str3) {
        Params params = new Params("audio.get");
        if (l != null) {
            params.put("owner_id", l);
        }
        if (l2 != null) {
            params.put("owner_id", Long.valueOf(-l2.longValue()));
        }
        params.put("audio_ids", arrayToString(collection));
        params.put("album_id", l3);
        params.put("access_key", str);
        params.put("count", Integer.valueOf(i));
        if (i2 != 0) {
            params.put("offset", Integer.valueOf(i2));
        }
        addCaptchaParams(str2, str3, params);
        return parseAudioList(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getAudioAlbums(Long l, Integer num, Integer num2) {
        Params params = new Params("audio.getPlaylists");
        params.put("owner_id", l);
        params.put("count", num2);
        params.put("offset", num);
        return AudioAlbum.parseAlbums(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getAudioById(String str, String str2, String str3) {
        Params params = new Params("audio.getById");
        params.put("audios", str);
        addCaptchaParams(str2, str3, params);
        return parseAudioList(sendRequest(params, true).optJSONArray("response"));
    }

    public ArrayList getAudioPopular(Integer num, int i, int i2) {
        Params params = new Params("audio.getPopular");
        params.put("genre_id", num);
        params.put("count", Integer.valueOf(i));
        params.put("offset", Integer.valueOf(i2));
        return parseAudioList(sendRequest(params).optJSONArray("response"));
    }

    public ArrayList getAudioRecommendations(String str, int i, int i2) {
        Params params = new Params("audio.getRecommendations");
        params.put("target_audio", str);
        params.put("count", Integer.valueOf(i));
        params.put("offset", Integer.valueOf(i2));
        return parseAudioList(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public String getAudioUploadServer() {
        return sendRequest(new Params("audio.getUploadServer")).getJSONObject("response").getString("upload_url");
    }

    public BannArg getBanned(boolean z, String str) {
        Params params = new Params("newsfeed.getBanned");
        if (z) {
            params.put("extended", "1");
        }
        params.put("fields", str);
        return BannArg.parse(sendRequest(params).optJSONObject("response"), z);
    }

    public ArrayList getBlackList(Long l, Long l2) {
        Params params = new Params("account.getBanned");
        params.put("fields", "first_name,last_name,photo_100,online");
        params.put("offset", l);
        params.put("count", l2);
        return User.parseUsers(sendRequest(params).optJSONObject("response").optJSONArray("profiles"));
    }

    public BotKeyboard getBotButtons(long j, String str, String str2) {
        JSONObject optJSONObject;
        Params params = new Params("messages.getConversationsById");
        params.put("peer_ids", Long.valueOf(j));
        addCaptchaParams(str, str2, params);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        if (optJSONArray == null || optJSONArray.length() <= 0 || (optJSONObject = optJSONArray.getJSONObject(0).optJSONObject("current_keyboard")) == null) {
            return null;
        }
        return Message.parseKeyboard(optJSONObject);
    }

    public Chat getChat(long j, String str) {
        Params params = new Params("messages.getChat");
        params.put("chat_id", Long.valueOf(j));
        params.put("fields", str);
        return Chat.parse(sendRequest(params).optJSONObject("response"));
    }

    public ArrayList getChatUsers(long j, String str) {
        Params params = new Params("messages.getConversationMembers");
        params.put("peer_id", Long.valueOf(getPeerId(null, Long.valueOf(j))));
        params.put("fields", str);
        return ChatMember.parse(sendRequest(params).optJSONObject("response"));
    }

    public ArrayList getCities(Collection collection) {
        if (collection == null || collection.size() == 0) {
            return null;
        }
        Params params = new Params("database.getCitiesById");
        params.put("city_ids", arrayToString(collection));
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                arrayList.add(City.parse((JSONObject) optJSONArray.get(i)));
            }
        }
        return arrayList;
    }

    public ArrayList getCitiesByCountry(int i, String str) {
        Params params = new Params("database.getCities");
        params.put("country_id", Integer.valueOf(i));
        params.put("q", str);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            for (int i2 = 0; i2 < optJSONArray.length(); i2++) {
                arrayList.add(City.parse((JSONObject) optJSONArray.get(i2)));
            }
        }
        return arrayList;
    }

    public ArrayList getConversationsById(long j, String str, String str2) {
        Params params = new Params("messages.getConversationsById");
        params.put("peer_ids", Long.valueOf(j));
        addCaptchaParams(str, str2, params);
        return parseConversations(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public Counters getCounters(String str, String str2) {
        Params params = new Params("account.getCounters");
        addCaptchaParams(str, str2, params);
        return Counters.parse(sendRequest(params).optJSONObject("response"));
    }

    public ArrayList getCountries(Collection collection) {
        if (collection == null || collection.size() == 0) {
            return null;
        }
        Params params = new Params("database.getCountriesById");
        params.put("country_ids", arrayToString(collection));
        JSONArray jSONArray = sendRequest(params).getJSONArray("response");
        ArrayList arrayList = new ArrayList();
        int length = jSONArray.length();
        for (int i = 0; i < length; i++) {
            arrayList.add(Country.parse((JSONObject) jSONArray.get(i)));
        }
        return arrayList;
    }

    public ArrayList getCountriesByCode(Integer num, String str) {
        Params params = new Params("database.getCountries");
        params.put("need_all", num);
        params.put("code", str);
        if (num != null && num.intValue() == 1) {
            params.put("count", (Integer) 1000);
        }
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        int length = optJSONArray.length();
        for (int i = 0; i < length; i++) {
            arrayList.add(Country.parse((JSONObject) optJSONArray.get(i)));
        }
        return arrayList;
    }

    public ArrayList getDocs(Long l, Long l2, Long l3) {
        Params params = new Params("docs.get");
        params.put("owner_id", l);
        params.put("count", l2);
        params.put("offset", l3);
        return Document.parseDocs(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getDocsById(String str) {
        Params params = new Params("docs.getById");
        params.put("docs", str);
        return Document.parseDocs(sendRequest(params).optJSONArray("response"));
    }

    public ArrayList getFaveGroups(String str, Integer num, Integer num2) {
        Params params = new Params("fave.getPages");
        params.put("fields", str);
        params.put("type", "groups");
        params.put("count", num);
        params.put("offset", num2);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        if (optJSONArray == null) {
            return arrayList;
        }
        for (int i = 0; i < optJSONArray.length(); i++) {
            JSONObject jSONObject = (JSONObject) optJSONArray.get(i);
            if (jSONObject.getString("type").equals("group")) {
                arrayList.add(Group.parse(jSONObject.getJSONObject("group")));
            }
        }
        return arrayList;
    }

    public ArrayList getFaveLinks(Integer num, Integer num2) {
        Params params = new Params("fave.get");
        params.put("item_type", "link");
        params.put("count", num);
        params.put("offset", num2);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        if (optJSONArray == null) {
            return arrayList;
        }
        for (int i = 0; i < optJSONArray.length(); i++) {
            JSONObject jSONObject = (JSONObject) optJSONArray.get(i);
            JSONObject optJSONObject = jSONObject.optJSONObject("link");
            JSONArray optJSONArray2 = jSONObject.optJSONArray("tags");
            if (optJSONObject != null) {
                Link parse = Link.parse(optJSONObject);
                if (parse.description.length() == 0) {
                    parse.description = optJSONObject.optString("caption");
                    if (optJSONArray2 != null && optJSONArray2.length() > 0) {
                        parse.description += ", " + ((JSONObject) optJSONArray2.get(0)).getString("name");
                    }
                }
                arrayList.add(parse);
            }
        }
        return arrayList;
    }

    public Object[] getFavePhotos(Integer num, Integer num2, String str) {
        Params params = new Params("fave.getPhotos");
        params.put("count", num);
        params.put("offset", num2);
        params.put("start_from", str);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        return optJSONArray == null ? new Object[]{new ArrayList(), ""} : new Object[]{parsePhotos(optJSONArray), optJSONObject.optString("next_from")};
    }

    public Object[] getFavePosts(Integer num, String str) {
        Params params = new Params("newsfeed.getLikesFeed");
        params.put("count", num);
        params.put("like_types", "post");
        params.put("start_from", str);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        String optString = optJSONObject.optString("next_from");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray == null) {
            return new Object[]{arrayList, optString};
        }
        int length = optJSONArray.length();
        for (int i = 0; i < length; i++) {
            JSONObject jSONObject = (JSONObject) optJSONArray.get(i);
            if (!jSONObject.optBoolean("is_deleted")) {
                arrayList.add(WallMessage.parse(jSONObject));
            }
        }
        return new Object[]{arrayList, optString};
    }

    public ArrayList getFavePostsNew(Integer num, Integer num2, Integer num3) {
        Params params = new Params("fave.get");
        params.put("item_type", "post");
        params.put("count", num);
        params.put("offset", num2);
        params.put("tag_id", num3);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray == null) {
            return arrayList;
        }
        for (int i = 0; i < optJSONArray.length(); i++) {
            JSONObject jSONObject = (JSONObject) optJSONArray.get(i);
            JSONObject optJSONObject = jSONObject.optJSONObject("post");
            if (optJSONObject != null) {
                WallMessage parse = WallMessage.parse(optJSONObject);
                arrayList.add(parse);
                try {
                    JSONArray optJSONArray2 = jSONObject.optJSONArray("tags");
                    if (optJSONArray2 != null) {
                        parse.tags = new ArrayList<>(optJSONArray2.length());
                        for (int i2 = 0; i2 < optJSONArray2.length(); i2++) {
                            parse.tags.add(Integer.valueOf(optJSONArray2.getJSONObject(i2).optInt("id")));
                        }
                    }
                } catch (Throwable th) {
                    th.printStackTrace();
                    ErrorReporter.report(th);
                }
            }
        }
        return arrayList;
    }

    public ArrayList getFaveTags() {
        JSONObject optJSONObject = sendRequest(new Params("fave.getTags")).optJSONObject("response");
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        for (int i = 0; i < optJSONArray.length(); i++) {
            JSONObject jSONObject = (JSONObject) optJSONArray.get(i);
            arrayList.add(new Object[]{Integer.valueOf(jSONObject.optInt("id")), jSONObject.optString("name")});
        }
        return arrayList;
    }

    public ArrayList getFaveUsers(String str, Integer num, Integer num2) {
        Params params = new Params("fave.getPages");
        params.put("fields", str);
        params.put("count", num);
        params.put("offset", num2);
        params.put("type", "users");
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        if (optJSONArray == null) {
            return arrayList;
        }
        int length = optJSONArray.length();
        for (int i = 0; i < length; i++) {
            JSONObject jSONObject = (JSONObject) optJSONArray.get(i);
            if (jSONObject.has("user")) {
                arrayList.add(User.parseFromFave(jSONObject.getJSONObject("user")));
            }
        }
        return arrayList;
    }

    public Object[] getFaveVideos(Integer num, String str) {
        Params params = new Params("newsfeed.getLikesFeed");
        params.put("count", num);
        params.put("like_types", "video");
        params.put("start_from", str);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        String optString = optJSONObject.optString("next_from");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                JSONArray jSONArray = optJSONArray.getJSONObject(i).getJSONObject("video").getJSONArray("items");
                for (int i2 = 0; i2 < jSONArray.length(); i2++) {
                    arrayList.add(Video.parse(jSONArray.getJSONObject(i2)));
                }
            }
        }
        return new Object[]{arrayList, optString};
    }

    public ArrayList getFaveVideosNew(Integer num, Integer num2) {
        Params params = new Params("fave.get");
        params.put("item_type", "video");
        params.put("count", num);
        params.put("offset", num2);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray == null) {
            return arrayList;
        }
        for (int i = 0; i < optJSONArray.length(); i++) {
            JSONObject optJSONObject = ((JSONObject) optJSONArray.get(i)).optJSONObject("video");
            if (optJSONObject != null) {
                arrayList.add(Video.parse(optJSONObject));
            }
        }
        return arrayList;
    }

    public ArrayList getFollowers(Long l, int i, int i2, String str, String str2) {
        Params params = new Params("users.getFollowers");
        params.put("user_id", l);
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        if (str == null) {
            str = "first_name,last_name,photo_100,online";
        }
        params.put("fields", str);
        params.put("name_case", str2);
        return User.parseUsers(sendRequest(params).getJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getFriends(Long l, String str, Integer num, String str2, String str3) {
        Params params = new Params("friends.get");
        params.put("fields", str);
        params.put("user_id", l);
        params.put("list_id", num);
        if (num == null) {
            params.put("order", "hints");
        }
        addCaptchaParams(str2, str3, params);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        if (optJSONArray == null) {
            return arrayList;
        }
        int length = optJSONArray.length();
        for (int i = 0; i < length; i++) {
            arrayList.add(User.parse((JSONObject) optJSONArray.get(i)));
        }
        return arrayList;
    }

    public ArrayList getGames() {
        Params params = new Params("apps.getCatalog");
        params.put("platform", "android");
        params.put("return_friends", (Integer) 1);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        int length = optJSONArray.length();
        for (int i = 0; i < length; i++) {
            arrayList.add(Game.parse((JSONObject) optJSONArray.get(i)));
        }
        return arrayList;
    }

    public ArrayList getGifts(Long l, Long l2, Long l3) {
        Params params = new Params("gifts.get");
        params.put("user_id", l);
        params.put("offset", l2);
        params.put("count", l3);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? arrayList : GiftItem.parseGifts(optJSONArray);
    }

    public ArrayList getGroupBannedUsers(long j, Long l, Long l2, Long l3) {
        Params params = new Params("groups.getBanned");
        params.put("group_id", Long.valueOf(j));
        params.put("offset", l);
        params.put("count", l2);
        params.put("owner_id", l3);
        params.put("fields", "photo_100");
        return GroupBanItem.parseAll(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public GroupSettings getGroupSettings(long j) {
        Params params = new Params("groups.getSettings");
        params.put("group_id", Long.valueOf(j));
        return GroupSettings.parse(sendRequest(params).optJSONObject("response"));
    }

    public CommentList getGroupTopicComments(long j, long j2, int i, int i2, int i3, int i4, boolean z, Long l) {
        Params params = new Params("board.getComments");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        boolean z2 = true;
        if (i2 == 1) {
            params.put("extended", "1");
        }
        if (i3 > 0) {
            params.put("count", Integer.valueOf(i3));
        }
        if (i4 > 0) {
            params.put("offset", Integer.valueOf(i4));
        }
        if (z) {
            params.put("sort", "desc");
        }
        params.put("start_comment_id", l);
        params.put("need_likes", "1");
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        CommentList commentList = new CommentList();
        if (optJSONObject != null) {
            JSONArray optJSONArray = optJSONObject.optJSONArray("items");
            int length = optJSONArray.length();
            commentList.count = optJSONObject.getInt("count");
            for (int i5 = 0; i5 < length; i5++) {
                commentList.comments.add(Comment.parseTopicComment(optJSONArray.getJSONObject(i5)));
            }
            if (i4 == 0) {
                try {
                    JSONObject optJSONObject2 = optJSONObject.optJSONObject("poll");
                    if (optJSONObject2 != null) {
                        VkPoll parse = VkPoll.parse(optJSONObject2);
                        if (j2 == 0) {
                            z2 = false;
                        }
                        parse.is_board = z2;
                        Attachment attachment = new Attachment();
                        attachment.poll = parse;
                        attachment.type = "poll";
                        if (commentList.comments.size() > 0) {
                            ((Comment) commentList.comments.get(0)).attachments.add(attachment);
                        }
                    }
                } catch (Throwable th) {
                    th.printStackTrace();
                    ErrorReporter.report(th);
                }
            }
        }
        return commentList;
    }

    public ArrayList getGroupTopics(long j, Integer num, int i, int i2, int i3) {
        JSONArray optJSONArray;
        Params params = new Params("board.getTopics");
        params.put("group_id", Long.valueOf(j));
        params.put("order", num);
        if (i == 1) {
            params.put("extended", "1");
        }
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        if (i3 > 0) {
            params.put("offset", Integer.valueOf(i3));
        }
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONObject optJSONObject = sendRequest.optJSONObject("response");
        if (optJSONObject != null && (optJSONArray = optJSONObject.optJSONArray("items")) != null) {
            for (int i4 = 0; i4 < optJSONArray.length(); i4++) {
                GroupTopic parse = GroupTopic.parse(optJSONArray.getJSONObject(i4));
                if (parse.tid != 0) {
                    parse.gid = j;
                    arrayList.add(parse);
                }
            }
        }
        return arrayList;
    }

    public ArrayList getGroups(Collection collection, String str, String str2) {
        if (collection == null && str == null) {
            return null;
        }
        if (collection.size() == 0 && str == null) {
            return null;
        }
        Params params = new Params("groups.getById");
        if (collection.size() > 0) {
            str = arrayToString(collection);
        }
        params.put("group_ids", str);
        params.put("fields", str2);
        return Group.parseGroups(sendRequest(params, true).getJSONObject("response").optJSONArray("groups"));
    }

    public ArrayList getGroupsInvites(Long l, Long l2) {
        Params params = new Params("groups.getInvites");
        params.put("offset", l);
        params.put("count", l2);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? arrayList : Group.parseGroups(optJSONArray);
    }

    public ArrayList getGroupsMembers(long j, Integer num, Integer num2, String str, String str2, String str3) {
        Params params = new Params("groups.getMembers");
        params.put("group_id", Long.valueOf(j));
        params.put("count", num);
        params.put("offset", num2);
        params.put("sort", str);
        params.put("filter", str2);
        params.put("fields", str3);
        return User.parseUsers(sendRequest(params).getJSONObject("response").optJSONArray("items"));
    }

    public String getInviteLinkForChat(long j) {
        Params params = new Params("messages.getInviteLink");
        params.put("peer_id", Long.valueOf(j));
        return sendRequest(params).getJSONObject("response").optString("link");
    }

    public ArrayList getLikeUsers(String str, long j, long j2, String str2, Integer num, Integer num2) {
        Params params = new Params("likes.getList");
        params.put("type", str);
        params.put("owner_id", Long.valueOf(j2));
        params.put("item_id", Long.valueOf(j));
        params.put("filter", str2);
        params.put("offset", num);
        params.put("count", num2);
        params.put("v", "5.157");
        JSONObject jSONObject = sendRequest(params).getJSONObject("response");
        JSONArray optJSONArray = jSONObject.optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            int length = optJSONArray.length();
            for (int i = 0; i < length; i++) {
                long optLong = optJSONArray.optLong(i, -1L);
                if (optLong != -1) {
                    arrayList.add(Long.valueOf(optLong));
                }
            }
        }
        return new ArrayList(Arrays.asList(arrayList, parseItems(jSONObject.optJSONArray("reactions"))));
    }

    public ArrayList getLikeUsersWithExecute(String str, long j, long j2, String str2) {
        Params params = new Params("execute");
        params.put("code", String.format("return([API.likes.getList({\"item_id\":%1$d,\"owner_id\":%2$d,\"type\":\"%3$s\",\"v\":\"%4$s\",\"filter\":\"%5$s\",\"friends_only\":1}),API.likes.getList({\"item_id\":%1$d,\"owner_id\":%2$d,\"type\":\"%3$s\",\"v\":\"%4$s\",\"filter\":\"%5$s\"})]);", Long.valueOf(j), Long.valueOf(j2), str, "5.157", str2));
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        JSONObject optJSONObject = optJSONArray.optJSONObject(0);
        JSONObject optJSONObject2 = optJSONArray.optJSONObject(1);
        ArrayList parseArray = parseArray(optJSONObject);
        ArrayList parseArray2 = parseArray(optJSONObject2);
        ArrayList parseItems = parseItems(optJSONObject != null ? optJSONObject.optJSONArray("reactions") : null);
        ArrayList parseItems2 = parseItems(optJSONObject2 != null ? optJSONObject2.optJSONArray("reactions") : null);
        ArrayList arrayList = new ArrayList();
        arrayList.add(parseArray);
        arrayList.add(parseArray2);
        arrayList.add(parseItems);
        arrayList.add(parseItems2);
        return arrayList;
    }

    public ArrayList getLists(String str, String str2) {
        Params params = new Params("newsfeed.getLists");
        addCaptchaParams(str, str2, params);
        return NewsList.parseLists(sendRequest(params, false).optJSONObject("response"));
    }

    public Object[] getLongPollServer(String str, String str2) {
        Params params = new Params("messages.getLongPollServer");
        params.put("lp_version", (Long) 10L);
        addCaptchaParams(str, str2, params);
        JSONObject jSONObject = sendRequest(params).getJSONObject("response");
        return new Object[]{jSONObject.getString("key"), jSONObject.getString("server"), Long.valueOf(jSONObject.getLong("ts"))};
    }

    public String getLyrics(long j, long j2) {
        Params params = new Params("audio.getLyrics");
        params.put("audio_id", j2 + "_" + j);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response").optJSONObject("lyrics");
        StringBuilder sb = new StringBuilder();
        JSONArray optJSONArray = optJSONObject.optJSONArray("text");
        if (optJSONArray != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                sb.append(optJSONArray.optString(i));
                sb.append("\n");
            }
        }
        JSONArray optJSONArray2 = optJSONObject.optJSONArray("timestamps");
        if (optJSONArray2 != null) {
            for (int i2 = 0; i2 < optJSONArray2.length(); i2++) {
                sb.append(optJSONArray2.optJSONObject(i2).optString("line"));
                sb.append("\n");
            }
        }
        return sb.toString();
    }

    public ArrayList getMarketAlbums(long j, Integer num, Integer num2) {
        Params params = new Params("market.getAlbums");
        params.put("owner_id", Long.valueOf(j));
        params.put("count", num2);
        params.put("offset", num);
        return MarketAlbum.parseAlbums(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getMarketCategories() {
        Params params = new Params("market.getCategories");
        params.put("count", (Integer) 1000);
        params.put("v", "5.138");
        return MarketCategory.parseItems(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public CommentList getMarketComments(Long l, Long l2, int i, int i2, Long l3) {
        Params params = new Params("market.getComments");
        params.put("item_id", l2);
        params.put("owner_id", l);
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        params.put("start_comment_id", l3);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        CommentList commentList = new CommentList();
        commentList.count = optJSONObject.getInt("count");
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            commentList.comments.add(Comment.parse((JSONObject) optJSONArray.get(i3)));
        }
        return commentList;
    }

    public ArrayList getMarketItem(String str) {
        Params params = new Params("market.getById");
        params.put("item_ids", str);
        params.put("extended", (Integer) 1);
        params.put("v", "5.138");
        return MarketItem.parseItems(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getMarketItems(long j, Long l, Integer num, Integer num2) {
        Params params = new Params("market.get");
        params.put("owner_id", Long.valueOf(j));
        params.put("album_id", l);
        params.put("count", num2);
        params.put("offset", num);
        params.put("extended", (Integer) 1);
        return MarketItem.parseItems(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getMessages(long j, int i, String str, Integer num) {
        Params params = new Params("messages.getImportantMessages");
        if (i != 0) {
            params.put("count", Integer.valueOf(i));
        }
        params.put("preview_length", "0");
        params.put("offset", num);
        return parseMessages(sendRequest(params).optJSONObject("response").optJSONObject("messages").optJSONArray("items"), null);
    }

    public ArrayList getMessagesById(ArrayList arrayList) {
        Params params = new Params("messages.getById");
        params.put("message_ids", arrayToString(arrayList));
        return parseMessages(sendRequest(params).optJSONObject("response").optJSONArray("items"), null);
    }

    public Object[] getMessagesDialogs(long j, int i, boolean z, String str, String str2) {
        Params params = new Params("messages.getConversations");
        if (j != 0) {
            params.put("offset", Long.valueOf(j));
        }
        if (i != 0) {
            params.put("count", Integer.valueOf(i));
        }
        if (z) {
            params.put("filter", "unread");
        }
        params.put("extended", (Integer) 1);
        params.put("fields", "online,last_seen,sex");
        addCaptchaParams(str, str2, params);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        return new Object[]{parseDialogs(optJSONObject.optJSONArray("items")), User.parseUsers(optJSONObject.optJSONArray("profiles"))};
    }

    public ArrayList getMessagesHistory(long j, long j2, long j3, Long l, int i, Long l2, Integer num) {
        Params params = new Params("messages.getHistory");
        params.put("peer_id", Long.valueOf(getPeerId(Long.valueOf(j), Long.valueOf(j2))));
        params.put("offset", l);
        if (i != 0) {
            params.put("count", Integer.valueOf(i));
        }
        params.put("start_message_id", l2);
        params.put("rev", num);
        params.put("v", "5.215");
        params.put("extended", (Integer) 1);
        params.put("fields", "online");
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        return parseMessages(optJSONObject.optJSONArray("items"), optJSONObject);
    }

    public ArrayList getMutual(Long l, Long l2) {
        Params params = new Params("friends.getMutual");
        params.put("target_uid", l);
        params.put("source_uid", l2);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            int length = optJSONArray.length();
            for (int i = 0; i < length; i++) {
                long optLong = optJSONArray.optLong(i, -1L);
                if (optLong != -1) {
                    arrayList.add(Long.valueOf(optLong));
                }
            }
        }
        return arrayList;
    }

    public ArrayList getNewPhotoTags(Integer num, Integer num2) {
        Params params = new Params("photos.getNewTags");
        params.put("count", num2);
        params.put("offset", num);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? new ArrayList() : parsePhotos(optJSONArray);
    }

    public Newsfeed getNews(Long l, long j, Long l2, String str, String str2, String str3, Integer num, String str4, String str5, String str6) {
        Params params = new Params("newsfeed.get");
        params.put("filters", str3);
        params.put("start_time", l);
        params.put("end_time", l2);
        if (j != 0) {
            params.put("count", Long.valueOf(j));
        }
        params.put("start_from", str);
        params.put("source_ids", str2);
        params.put("max_photos", num);
        params.put("device_info", str6);
        addCaptchaParams(str4, str5, params);
        return Newsfeed.parse(sendRequest(params), false);
    }

    public Newsfeed getNewsComments() {
        Params params = new Params("newsfeed.getComments");
        params.put("last_comments_count", "3");
        params.put("count", "50");
        return Newsfeed.parse(sendRequest(params), true);
    }

    public CommentList getNoteComments(Long l, Long l2, int i, int i2) {
        Params params = new Params("notes.getComments");
        params.put("note_id", l);
        params.put("owner_id", l2);
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        CommentList commentList = new CommentList();
        commentList.count = optJSONObject.getInt("count");
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            commentList.comments.add(Comment.parseNoteComment((JSONObject) optJSONArray.get(i3)));
        }
        return commentList;
    }

    public ArrayList getNotes(Long l, Collection collection, String str, Long l2, Long l3) {
        Params params = new Params("notes.get");
        params.put("user_id", l);
        params.put("note_ids", arrayToString(collection));
        params.put("sort", str);
        params.put("count", l2);
        params.put("offset", l3);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                arrayList.add(Note.parse((JSONObject) optJSONArray.get(i)));
            }
        }
        return arrayList;
    }

    public Notifications getNotifications(String str, Long l, Long l2, Integer num, String str2) {
        Params params = new Params("notifications.get");
        params.put("filters", str);
        params.put("start_time", l);
        params.put("end_time", l2);
        params.put("count", num);
        params.put("start_from", str2);
        return Notifications.parse(sendRequest(params).optJSONObject("response"));
    }

    public ArrayList getOnlineFriends(Long l) {
        Params params = new Params("friends.getOnline");
        params.put("user_id", l);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            int length = optJSONArray.length();
            for (int i = 0; i < length; i++) {
                long optLong = optJSONArray.optLong(i, -1L);
                if (optLong != -1) {
                    arrayList.add(Long.valueOf(optLong));
                }
            }
        }
        return arrayList;
    }

    public String getPageUrl(long j, Long l, String str) {
        Params params = new Params("pages.get");
        params.put("owner_id", Long.valueOf(j));
        params.put("page_id", l);
        params.put("title", str);
        return sendRequest(params).optJSONObject("response").getString("view_url");
    }

    public CommentList getPhotoComments(Long l, Long l2, int i, int i2, Long l3) {
        Params params = new Params("photos.getComments");
        params.put("photo_id", l);
        params.put("owner_id", l2);
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        params.put("sort", "asc");
        params.put("need_likes", "1");
        params.put("start_comment_id", l3);
        JSONObject sendRequest = sendRequest(params);
        CommentList commentList = new CommentList();
        JSONObject optJSONObject = sendRequest.optJSONObject("response");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        commentList.count = optJSONObject.getInt("count");
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            commentList.comments.add(Comment.parse((JSONObject) optJSONArray.get(i3)));
        }
        return commentList;
    }

    public ArrayList getPhotoCountsByIdWithExecute(String str, boolean z) {
        String str2 = "var p=API.photos.getById({\"photos\":\"" + str + "\",\"extended\":1}); return {\"pid\":p@.id,\"likes\":p@.likes,\"comments\":p@.comments,\"can_comment\":p@.can_comment,\"tags\":p@.tags" + (z ? ",\"user_id\":p@.user_id" : "") + "};";
        Params params = new Params("execute");
        params.put("code", str2);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        if (optJSONObject == null) {
            return null;
        }
        return Photo.parseCounts(optJSONObject);
    }

    public ArrayList getPhotoTagsById(Long l, Long l2) {
        Params params = new Params("photos.getTags");
        params.put("owner_id", l2);
        params.put("photo_id", l);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        return optJSONArray == null ? new ArrayList() : parsePhotoTags(optJSONArray, l, l2);
    }

    public ArrayList getPhotos(Long l, Long l2, Integer num, Integer num2, boolean z) {
        Params params = new Params("photos.get");
        params.put("owner_id", l);
        params.put("album_id", l2);
        params.put("extended", "1");
        params.put("offset", num);
        params.put("count", num2);
        if (z) {
            params.put("rev", (Integer) 1);
        }
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? new ArrayList() : parsePhotos(optJSONArray);
    }

    public ArrayList getPhotosById(String str, Integer num, Integer num2) {
        Params params = new Params("photos.getById");
        params.put("photos", str);
        params.put("extended", num);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        return optJSONArray == null ? new ArrayList() : parsePhotos(optJSONArray);
    }

    public AudioAlbum getPlaylistById(long j, long j2) {
        Params params = new Params("audio.getPlaylistById");
        params.put("owner_id", Long.valueOf(j));
        params.put("playlist_id", Long.valueOf(j2));
        return AudioAlbum.parse(sendRequest(params).optJSONObject("response"));
    }

    public ArrayList getPodcasts(long j, Long l, Long l2) {
        JSONArray optJSONArray;
        Params params = new Params("podcasts.getEpisodes");
        params.put("owner_id", Long.valueOf(j));
        params.put("count", l);
        params.put("offset", l2);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        ArrayList arrayList = new ArrayList();
        if (optJSONObject != null && (optJSONArray = optJSONObject.optJSONArray("items")) != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                Audio parse = Audio.parse((JSONObject) optJSONArray.get(i));
                parse.setPodcast();
                arrayList.add(parse);
            }
        }
        return arrayList;
    }

    public VkPoll getPoll(long j, long j2, boolean z) {
        Params params = new Params("polls.getById");
        params.put("owner_id", Long.valueOf(j2));
        params.put("poll_id", Long.valueOf(j));
        if (z) {
            params.put("is_board", "1");
        }
        return VkPoll.parse(sendRequest(params).getJSONObject("response"));
    }

    public ArrayList getPollVoters(long j, long j2, Collection collection, Long l, Long l2, String str, boolean z) {
        Params params = new Params("polls.getVoters");
        params.put("owner_id", Long.valueOf(j2));
        params.put("poll_id", Long.valueOf(j));
        if (z) {
            params.put("is_board", "1");
        }
        params.put("answer_ids", arrayToString(collection));
        params.put("count", l);
        params.put("offset", l2);
        params.put("fields", str);
        return User.parseUsers(((JSONObject) sendRequest(params).optJSONArray("response").get(0)).optJSONObject("users").optJSONArray("items"));
    }

    public PrivacySettings getPrivacySettings() {
        return PrivacySettings.parse(sendRequest(new Params("account.getPrivacySettings")).optJSONObject("response"));
    }

    public ArrayList getProducts(String str, String str2, boolean z, String str3, String str4) {
        Params params = new Params("store.getProducts");
        params.put("filters", str);
        params.put("type", str2);
        if (z) {
            params.put("extended", (Integer) 1);
        }
        addCaptchaParams(str3, str4, params);
        return Product.parseProducts(sendRequest(params, false).optJSONObject("response"));
    }

    public ProfileInfo getProfileInfo() {
        return ProfileInfo.parse(sendRequest(new Params("account.getProfileInfo"), false).optJSONObject("response"));
    }

    public ArrayList getProfiles(Collection collection, Collection collection2, String str, String str2, String str3, String str4) {
        if (collection == null && collection2 == null) {
            return null;
        }
        if ((collection == null || collection.size() != 0) && (collection2 == null || collection2.size() != 0)) {
            Params params = new Params("users.get");
            if (collection != null && collection.size() > 0) {
                params.put("user_ids", arrayToString(collection));
            }
            if (collection2 != null && collection2.size() > 0) {
                params.put("user_ids", arrayToString(collection2));
            }
            params.put("fields", str);
            params.put("name_case", str2);
            addCaptchaParams(str3, str4, params);
            return User.parseUsers(sendRequest(params, true).optJSONArray("response"));
        }
        return null;
    }

    public Newsfeed getRecommendedNews(Long l, long j, Long l2, String str, Integer num, String str2, String str3) {
        Params params = new Params("newsfeed.getRecommended");
        params.put("start_time", l);
        params.put("end_time", l2);
        if (j != 0) {
            params.put("count", Long.valueOf(j));
        }
        params.put("start_from", str);
        params.put("max_photos", num);
        addCaptchaParams(str2, str3, params);
        return Newsfeed.parse(sendRequest(params), false);
    }

    public ArrayList getRequestsFriends(Integer num, boolean z) {
        Params params = new Params("friends.getRequests");
        params.put("extended", (Integer) 1);
        params.put("out", num);
        if (z) {
            params.put("suggested", (Integer) 1);
        }
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            int length = optJSONArray.length();
            for (int i = 0; i < length; i++) {
                JSONObject optJSONObject = optJSONArray.optJSONObject(i);
                if (optJSONObject != null) {
                    long optLong = optJSONObject.optLong("user_id", -1L);
                    if (optLong != -1) {
                        Object[] objArr = new Object[3];
                        objArr[0] = Long.valueOf(optLong);
                        objArr[1] = optJSONObject.optString("message");
                        arrayList.add(objArr);
                    }
                }
            }
        }
        return arrayList;
    }

    public ArrayList getRequestsGroups(long j, String str, Integer num, Integer num2) {
        Params params = new Params("groups.getRequests");
        params.put("group_id", Long.valueOf(j));
        params.put("fields", str);
        params.put("offset", num);
        params.put("count", num2);
        return User.parseUsers(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public long getServerTime() {
        return sendRequest(new Params("utils.getServerTime")).getLong("response");
    }

    public ArrayList getStats(Long l, Long l2, Long l3, Long l4) {
        Params params = new Params("stats.get");
        params.put("group_id", l);
        params.put("app_id", l2);
        params.put("timestamp_from", l3);
        params.put("timestamp_to", l4);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        if (optJSONArray != null) {
            return PeriodStats.parsePeriods(optJSONArray);
        }
        return null;
    }

    public VkStatus getStatus(Long l, Long l2) {
        Params params = new Params("status.get");
        params.put("user_id", l);
        params.put("group_id", l2);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        VkStatus vkStatus = new VkStatus();
        if (optJSONObject != null) {
            vkStatus.text = unescape(optJSONObject.getString("text"));
        }
        return vkStatus;
    }

    public StickersKeywords getStickersKeywords() {
        ArrayList products = getProducts("purchased", "stickers", false, null, null);
        HashSet hashSet = new HashSet(products.size());
        Iterator it = products.iterator();
        while (it.hasNext()) {
            hashSet.add(Integer.valueOf(((Product) it.next()).id));
        }
        Params params = new Params("store.getStickersKeywords");
        params.put("aliases", (Integer) 1);
        params.put("all_products", (Integer) 1);
        params.put("need_stickers", (Integer) 0);
        params.put("chunk", (Integer) 0);
        StickersKeywords parse = StickersKeywords.parse(sendRequest(params).getJSONObject("response"), hashSet);
        params.put("chunks_hash", parse.chunks_hash);
        for (int i = 1; i < parse.chunks_count; i++) {
            params.put("chunk", Integer.valueOf(i));
            for (Map.Entry entry : StickersKeywords.parse(sendRequest(params).getJSONObject("response"), hashSet).map.entrySet()) {
                StickersKeywords.addToMap(parse, (int[]) entry.getValue(), (String) entry.getKey());
            }
        }
        return parse;
    }

    public ArrayList getStockItems(String str, String str2, boolean z, String str3, boolean z2, String str4, String str5, String str6) {
        Params params = new Params("store.getStockItems");
        params.put("section", str);
        params.put("filters", str3);
        params.put("need_images", Integer.valueOf(z2 ? 1 : 0));
        params.put("type", str2);
        if (z) {
            params.put("extended", (Integer) 1);
        }
        params.put("product_ids", str4);
        addCaptchaParams(str5, str6, params);
        return Product.parseStockItems(sendRequest(params, false).optJSONObject("response"));
    }

    public ArrayList getStories(Long l) {
        Params params = new Params("stories.get");
        params.put("owner_id", l);
        return Story.parseStories(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getStoriesById(String str) {
        Params params = new Params("stories.getById");
        params.put("stories", str);
        return Story.parseStoriesById(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public InterestingPages getSubscriptions(Long l, int i, int i2, Integer num) {
        Params params = new Params("users.getSubscriptions");
        params.put("user_id", l);
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        return InterestingPages.parse(sendRequest(params).getJSONObject("response"));
    }

    public ArrayList getSuggestions(String str, String str2) {
        Params params = new Params("friends.getSuggestions");
        params.put("filter", str);
        params.put("fields", str2);
        return User.parseUsers(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList getUniversities(int i) {
        Params params = new Params("database.getUniversities");
        params.put("city_id", Integer.valueOf(i));
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        for (int i2 = 0; i2 < optJSONArray.length(); i2++) {
            arrayList.add(City.parse(optJSONArray.getJSONObject(i2)));
        }
        return arrayList;
    }

    public int getUnreadDialogsCount() {
        Params params = new Params("execute");
        params.put("code", "return API.messages.getConversations({\"count\": 0}).unread_count;");
        return sendRequest(params).optInt("response");
    }

    public ArrayList getUserGroups(Long l, String str, Integer num, Integer num2, String str2) {
        Params params = new Params("groups.get");
        params.put("extended", "1");
        params.put("fields", str);
        params.put("user_id", l);
        params.put("count", num);
        params.put("offset", num2);
        params.put("filter", str2);
        JSONObject sendRequest = sendRequest(params);
        ArrayList arrayList = new ArrayList();
        JSONArray optJSONArray = sendRequest.optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? arrayList : Group.parseGroups(optJSONArray);
    }

    public ArrayList getUserPhotos(Long l, Integer num, Integer num2, boolean z) {
        Params params = new Params("photos.getUserPhotos");
        params.put("user_id", l);
        params.put("sort", Integer.valueOf(!z ? 1 : 0));
        params.put("count", num2);
        params.put("offset", num);
        params.put("extended", (Integer) 1);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? new ArrayList() : parsePhotos(optJSONArray);
    }

    public ArrayList getVideo(String str, Long l, Long l2, String str2, Long l3, Long l4, boolean z) {
        JSONArray optJSONArray;
        Params params = new Params("video.get");
        params.put("videos", str);
        params.put("owner_id", l);
        params.put("width", str2);
        params.put("count", l3);
        params.put("offset", l4);
        params.put("album_id", l2);
        if (z) {
            params.put("extended", (Integer) 1);
        }
        JSONObject optJSONObject = sendRequest(params, true).optJSONObject("response");
        ArrayList arrayList = new ArrayList();
        if (optJSONObject != null && (optJSONArray = optJSONObject.optJSONArray("items")) != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                arrayList.add(Video.parse((JSONObject) optJSONArray.get(i)));
            }
        }
        return arrayList;
    }

    public ArrayList getVideoAlbums(long j, Integer num, Integer num2, boolean z) {
        Params params = new Params("video.getAlbums");
        params.put("owner_id", Long.valueOf(j));
        params.put("count", num2);
        params.put("offset", num);
        if (z) {
            params.put("need_system", (Integer) 1);
        }
        return AudioAlbum.parseAlbums(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public CommentList getVideoComments(long j, Long l, int i, int i2, Long l2) {
        Params params = new Params("video.getComments");
        params.put("video_id", Long.valueOf(j));
        params.put("owner_id", l);
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        params.put("need_likes", "1");
        params.put("start_comment_id", l2);
        JSONObject sendRequest = sendRequest(params);
        CommentList commentList = new CommentList();
        JSONObject optJSONObject = sendRequest.optJSONObject("response");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        commentList.count = optJSONObject.getInt("count");
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            commentList.comments.add(Comment.parse((JSONObject) optJSONArray.get(i3)));
        }
        return commentList;
    }

    public Comment getWallComment(long j, long j2) {
        Params params = new Params("wall.getComment");
        params.put("owner_id", Long.valueOf(j));
        params.put("comment_id", Long.valueOf(j2));
        params.put("thread_items_count", (Integer) 10);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        if (optJSONArray.length() > 0) {
            return Comment.parse((JSONObject) optJSONArray.get(0));
        }
        return null;
    }

    public CommentList getWallComments(Long l, Long l2, int i, int i2, boolean z, Long l3, long j) {
        Params params = new Params("wall.getComments");
        params.put("post_id", l2);
        params.put("owner_id", l);
        if (i > 0) {
            params.put("offset", Integer.valueOf(i));
        }
        if (i2 > 0) {
            params.put("count", Integer.valueOf(i2));
        }
        params.put("preview_length", "0");
        params.put("need_likes", "1");
        if (z) {
            params.put("sort", "desc");
        }
        params.put("start_comment_id", l3);
        params.put("thread_items_count", (Integer) 10);
        if (j > 0) {
            params.put("comment_id", Long.valueOf(j));
        }
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        CommentList commentList = new CommentList();
        commentList.count = optJSONObject.getInt("current_level_count");
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            commentList.comments.add(Comment.parse((JSONObject) optJSONArray.get(i3)));
        }
        return commentList;
    }

    public Integer getWallCount(long j, boolean z) {
        String str = z ? ", filter: \"owner\"" : "";
        String format = String.format("var p = API.wall.get({owner_id: %d" + str + "});return p.count;", Long.valueOf(j));
        Params params = new Params("execute");
        params.put("code", format);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public ArrayList getWallMessage(ArrayList arrayList) {
        Params params = new Params("wall.getById");
        params.put("posts", arrayToString(arrayList));
        JSONArray jSONArray = sendRequest(params).getJSONObject("response").getJSONArray("items");
        ArrayList arrayList2 = new ArrayList();
        int length = jSONArray.length();
        for (int i = 0; i < length; i++) {
            arrayList2.add(WallMessage.parse((JSONObject) jSONArray.get(i)));
        }
        return arrayList2;
    }

    public WallResponse getWallMessages(Long l, int i, int i2, String str) {
        Params params = new Params("wall.get");
        params.put("owner_id", l);
        if (i > 0) {
            params.put("count", Integer.valueOf(i));
        }
        params.put("offset", Integer.valueOf(i2));
        params.put("filter", str);
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        WallResponse wallResponse = new WallResponse();
        wallResponse.total_count = Integer.valueOf(optJSONObject.optInt("count"));
        JSONArray optJSONArray = optJSONObject.optJSONArray("items");
        wallResponse.items = new ArrayList();
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            wallResponse.items.add(WallMessage.parse((JSONObject) optJSONArray.get(i3)));
        }
        return wallResponse;
    }

    public Integer[] getWallNotesCount(long j) {
        String format = String.format("var p=API.wall.get({owner_id:%d});var n=API.notes.get({user_id:%d});return [p.count,n.count];", Long.valueOf(j), Long.valueOf(j));
        Params params = new Params("execute");
        params.put("code", format);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        Integer[] numArr = new Integer[2];
        if (optJSONArray != null && optJSONArray.length() == 2) {
            numArr[0] = Integer.valueOf(optJSONArray.optInt(0));
            numArr[1] = Integer.valueOf(optJSONArray.optInt(1));
        }
        return numArr;
    }

    public Integer getWallOffsetByDate(long j, long j2, int i) {
        String format = String.format("var o1=0;var o2=%3$d;while(o2-o1>1){var o_new=(o1+o2)/2;var post=API.wall.get({\"offset\":o_new, \"owner_id\":%1$d}).items[0];if(post.date<%2$d)    o2=o_new;else    o1=o_new;}return o1;", Long.valueOf(j), Long.valueOf(j2), Integer.valueOf(i));
        Params params = new Params("execute");
        params.put("code", format);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer groupsApproveRequest(long j, long j2) {
        Params params = new Params("groups.approveRequest");
        params.put("group_id", Long.valueOf(j));
        params.put("user_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer groupsEditManager(long j, long j2, String str, Integer num, String str2, String str3, String str4) {
        Params params = new Params("groups.editManager");
        params.put("group_id", Long.valueOf(j));
        params.put("user_id", Long.valueOf(j2));
        params.put("role", str);
        params.put("is_contact", num);
        params.put("contact_position", str2);
        params.put("contact_phone", str3);
        params.put("contact_email", str4);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer groupsInvite(long j, ArrayList arrayList, String str, String str2) {
        Iterator it;
        String str3 = "";
        while (arrayList.iterator().hasNext()) {
            str3 = str3 + "API.groups.invite({group_id:" + j + ",user_id:" + ((Long) it.next()) + "});";
        }
        Params params = new Params("execute");
        params.put("code", str3);
        addCaptchaParams(str, str2, params);
        sendRequest(params, true);
        return 0;
    }

    public Integer groupsRemoveUser(long j, long j2) {
        Params params = new Params("groups.removeUser");
        params.put("group_id", Long.valueOf(j));
        params.put("user_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean ignoreAd(String str, boolean z) {
        Params params = new Params("adsint.hideAd");
        params.put("ad_data", str);
        params.put("object_type", z ? "source" : "ad");
        return sendRequest(params).optJSONObject("response").optInt("success") == 1;
    }

    public boolean ignoreItem(String str, long j, long j2) {
        Params params = new Params("newsfeed.ignoreItem");
        params.put("type", str);
        params.put("owner_id", Long.valueOf(j));
        params.put("item_id", Long.valueOf(j2));
        return sendRequest(params).optJSONObject("response").optBoolean("status");
    }

    public int isFriend(long j, Integer num) {
        Params params = new Params("friends.areFriends");
        ArrayList arrayList = new ArrayList();
        arrayList.add(Long.valueOf(j));
        params.put("user_ids", arrayToString(arrayList));
        params.put("need_sign", num);
        JSONArray optJSONArray = sendRequest(params).optJSONArray("response");
        if (optJSONArray == null || optJSONArray.length() <= 0) {
            return 0;
        }
        return ((JSONObject) optJSONArray.get(0)).optInt("friend_status");
    }

    public String joinGroup(long j, Integer num, String str, String str2) {
        Params params = new Params("groups.join");
        params.put("group_id", Long.valueOf(j));
        params.put("not_sure", num);
        addCaptchaParams(str, str2, params);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public String leaveGroup(long j) {
        Params params = new Params("groups.leave");
        params.put("group_id", Long.valueOf(j));
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Integer makeMainProfilePhoto(long j) {
        String format = String.format("return API.photos.reorderPhotos({photo_id: %d,after:API.photos.get({album_id: \"profile\", rev: 1, count: 1}).items[0].id});", Long.valueOf(j));
        Params params = new Params("execute");
        params.put("code", format);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public void makePhotoAlbumCover(long j, long j2, long j3) {
        Params params = new Params("photos.makeCover");
        params.put("photo_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("album_id", Long.valueOf(j3));
        sendRequest(params, true);
    }

    public String markAsRead(Long l, Long l2) {
        Params params = new Params("messages.markAsRead");
        params.put("start_message_id", l);
        params.put("peer_id", l2);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public Boolean markNotificationsAsViewed() {
        return Boolean.valueOf(sendRequest(new Params("notifications.markAsViewed")).optInt("response") == 1);
    }

    public String marketAlbumGetPhotoUploadServer(long j) {
        Params params = new Params("photos.getMarketAlbumUploadServer");
        params.put("group_id", Long.valueOf(j));
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public String marketGetPhotoUploadServer(long j, Integer num) {
        Params params = new Params("photos.getMarketUploadServer");
        params.put("group_id", Long.valueOf(j));
        params.put("main_photo", num);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public void messageMarkAsImportant(Collection collection, boolean z) {
        Params params = new Params("messages.markAsImportant");
        params.put("message_ids", arrayToString(collection));
        params.put("important", Integer.valueOf(z ? 1 : 0));
        sendRequest(params);
    }

    public void messagesDeleteReaction(long j, int i) {
        Params params = new Params("messages.deleteReaction");
        params.put("peer_id", Long.valueOf(j));
        params.put("cmid", Integer.valueOf(i));
        sendRequest(params);
    }

    public ChatPreview messagesGetChatPreview(String str) {
        Params params = new Params("messages.getChatPreview");
        params.put("link", str);
        params.put("fields", "photo_100");
        return ChatPreview.parse(sendRequest(params).getJSONObject("response"));
    }

    public ArrayList messagesGetReactedPeers(long j, int i) {
        Params params = new Params("messages.getReactedPeers");
        params.put("peer_id", Long.valueOf(j));
        params.put("cmid", Integer.valueOf(i));
        JSONArray jSONArray = sendRequest(params).optJSONObject("response").getJSONArray("reactions");
        ArrayList arrayList = new ArrayList(jSONArray.length());
        ArrayList arrayList2 = new ArrayList(jSONArray.length());
        for (int i2 = 0; i2 < jSONArray.length(); i2++) {
            JSONObject jSONObject = jSONArray.getJSONObject(i2);
            arrayList.add(Long.valueOf(jSONObject.optLong("user_id")));
            arrayList2.add(Long.valueOf(jSONObject.optLong("reaction_id")));
        }
        return new ArrayList(Arrays.asList(arrayList, arrayList2));
    }

    public long messagesJoinChatByInviteLink(String str) {
        Params params = new Params("messages.joinChatByInviteLink");
        params.put("link", str);
        return sendRequest(params).getJSONObject("response").getInt("chat_id");
    }

    public String messagesPin(long j, long j2) {
        Params params = new Params("messages.pin");
        params.put("message_id", Long.valueOf(j2));
        params.put("peer_id", Long.valueOf(j));
        sendRequest(params);
        return null;
    }

    public void messagesSendReaction(long j, int i, int i2) {
        Params params = new Params("messages.sendReaction");
        params.put("peer_id", Long.valueOf(j));
        params.put("cmid", Integer.valueOf(i));
        params.put("reaction_id", Integer.valueOf(i2));
        sendRequest(params);
    }

    public String messagesUnpin(long j) {
        Params params = new Params("messages.unpin");
        params.put("peer_id", Long.valueOf(j));
        sendRequest(params);
        return null;
    }

    public Integer movePhoto(Long l, long j, long j2) {
        Params params = new Params("photos.move");
        params.put("owner_id", l);
        params.put("target_album_id", Long.valueOf(j));
        params.put("photo_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public int movePhotos(ArrayList arrayList, long j) {
        Iterator it = arrayList.iterator();
        String str = "";
        while (it.hasNext()) {
            IdsPair idsPair = (IdsPair) it.next();
            str = str + "API.photos.move({owner_id:" + idsPair.owner_id + ",photo_id:" + idsPair.id + ",target_album_id:" + j + "});";
        }
        Params params = new Params("execute");
        params.put("code", str);
        sendRequest(params, true);
        return 0;
    }

    public Integer moveToAudioAlbum(ArrayList arrayList, long j, long j2) {
        Params params = new Params("audio.addToPlaylist");
        params.put("audio_ids", arrayToString(arrayList));
        params.put("playlist_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Newsfeed newsfeedGetMentions(String str, long j, long j2, String str2, String str3) {
        Params params = new Params("newsfeed.getMentions");
        params.put("owner_id", str);
        params.put("count", Long.valueOf(j));
        params.put("offset", Long.valueOf(j2));
        addCaptchaParams(str2, str3, params);
        return Newsfeed.parseFromSearch(sendRequest(params));
    }

    public Integer newsfeedUnsubscribe(String str, Long l, Long l2) {
        Params params = new Params("newsfeed.unsubscribe");
        params.put("type", str);
        params.put("owner_id", l);
        params.put("item_id", l2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean openTopic(long j, long j2) {
        Params params = new Params("board.openTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public Long photoCopy(long j, long j2, String str) {
        Params params = new Params("photos.copy");
        params.put("owner_id", Long.valueOf(j));
        params.put("photo_id", Long.valueOf(j2));
        params.put("access_key", str);
        return Long.valueOf(sendRequest(params).optLong("response"));
    }

    public Integer photoEdit(Long l, long j, String str) {
        Params params = new Params("photos.edit");
        params.put("owner_id", l);
        params.put("photo_id", Long.valueOf(j));
        params.put("caption", str);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public String photosGetChatUploadServer(long j, Integer num, Integer num2, Integer num3) {
        Params params = new Params("photos.getChatUploadServer");
        params.put("chat_id", Long.valueOf(j));
        params.put("crop_x", num);
        params.put("crop_y", num2);
        params.put("crop_width", num3);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public String photosGetMessagesUploadServer() {
        return sendRequest(new Params("photos.getMessagesUploadServer")).getJSONObject("response").getString("upload_url");
    }

    public String photosGetOwnerPhotoUploadServer(Long l) {
        Params params = new Params("photos.getOwnerPhotoUploadServer");
        if (l != null) {
            params.put("owner_id", l);
        }
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public String photosGetUploadServer(long j, Long l) {
        Params params = new Params("photos.getUploadServer");
        params.put("album_id", Long.valueOf(j));
        params.put("group_id", l);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public String photosGetWallUploadServer(Long l, Long l2) {
        Params params = new Params("photos.getWallUploadServer");
        params.put("user_id", l);
        params.put("group_id", l2);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public ArrayList photosSave(String str, String str2, Long l, Long l2, String str3, String str4) {
        Params params = new Params("photos.save");
        params.put("server", str);
        params.put("photos_list", str2);
        params.put("album_id", l);
        params.put("group_id", l2);
        params.put("hash", str3);
        params.put("caption", str4);
        return parsePhotos(sendRequest(params, true).getJSONArray("response"));
    }

    public ArrayList photosSearch(String str, String str2) {
        Params params = new Params("photos.search");
        params.put("lat", str);
        params.put("long", str2);
        params.put("radius", (Integer) 100);
        return parsePhotos(sendRequest(params, false).getJSONObject("response").getJSONArray("items"));
    }

    public Integer pinPost(Long l, long j) {
        Params params = new Params("wall.pin");
        params.put("owner_id", l);
        params.put("post_id", Long.valueOf(j));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public String putPhotoTag(PhotoTag photoTag, String str, String str2) {
        if (photoTag == null) {
            return null;
        }
        Params params = new Params("photos.putTag");
        params.put("owner_id", photoTag.owner_id);
        params.put("photo_id", Long.valueOf(photoTag.pid));
        params.put("user_id", Long.valueOf(photoTag.uid));
        params.putDouble("x", photoTag.x);
        params.putDouble("x2", photoTag.x2);
        params.putDouble("y", photoTag.y);
        params.putDouble("y2", photoTag.y2);
        addCaptchaParams(str, str2, params);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public String refreshToken(String str) {
        Params params = new Params("auth.refreshToken");
        params.put("receipt", str);
        return sendRequest(params).optJSONObject("response").optString("token");
    }

    public void registerAdEvents(String str) {
        Params params = new Params("adsint.registerAdEvents");
        params.put("events", str);
        sendRequest(params);
    }

    public String registerDevice(String str, String str2, String str3, Integer num, String str4, String str5) {
        Params params = new Params("account.registerDevice");
        params.put("token", str);
        params.put("device_id", str5);
        params.put("device_model", str2);
        params.put("system_version", str3);
        params.put("settings", str4);
        params.put("push_provider", "fcm");
        return sendRequest(params).getString("response");
    }

    public Integer removeFromAudioAlbum(String str, long j, long j2) {
        Params params = new Params("audio.removeFromPlaylist");
        params.put("audio_ids", str);
        params.put("playlist_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean removeMarketFromAlbum(long j, long j2, ArrayList arrayList) {
        Params params = new Params("market.removeFromAlbum");
        params.put("owner_id", Long.valueOf(j));
        params.put("item_id", Long.valueOf(j2));
        params.put("album_ids", arrayToString(arrayList));
        return sendRequest(params, true).optInt("response") == 1;
    }

    public Integer removePhotoTag(Long l, long j, long j2) {
        Params params = new Params("photos.removeTag");
        params.put("owner_id", l);
        params.put("photo_id", Long.valueOf(j));
        params.put("tag_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer removeUserFromChat(long j, long j2) {
        Params params = new Params("messages.removeChatUser");
        params.put("chat_id", Long.valueOf(j));
        params.put("member_id", Long.valueOf(j2));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean removeUserFromGroup(long j, long j2) {
        Params params = new Params("groups.removeUser");
        params.put("group_id", Long.valueOf(j));
        params.put("user_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public int removeVideoFromAlbum(long j, long j2, Long l, Long l2) {
        Params params = new Params("video.removeFromAlbum");
        params.put("target_id", Long.valueOf(j));
        params.put("album_id", Long.valueOf(j2));
        params.put("owner_id", l2);
        params.put("video_id", l);
        return sendRequest(params).optInt("response");
    }

    public Boolean removeWallPost(Long l, long j) {
        Params params = new Params("wall.delete");
        params.put("owner_id", Long.valueOf(j));
        params.put("post_id", l);
        return Boolean.valueOf(sendRequest(params).optInt("response") == 1);
    }

    public void reorderAlbums(long j, long j2, Long l, Long l2) {
        Params params = new Params("photos.reorderAlbums");
        params.put("owner_id", Long.valueOf(j));
        params.put("album_id", Long.valueOf(j2));
        params.put("before", l);
        params.put("after", l2);
        sendRequest(params);
    }

    public void reorderPhotos(long j, long j2, Long l, Long l2) {
        Params params = new Params("photos.reorderPhotos");
        params.put("owner_id", Long.valueOf(j));
        params.put("photo_id", Long.valueOf(j2));
        params.put("before", l);
        params.put("after", l2);
        sendRequest(params);
    }

    public Integer reportAd(String str, String str2) {
        Params params = new Params("adsint.reportAd");
        params.put("ad_data", str);
        params.put("reason", str2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportMarketComment(long j, long j2, int i) {
        Params params = new Params("market.reportComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportPhoto(long j, long j2, int i) {
        Params params = new Params("photos.report");
        params.put("photo_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportPhotoComment(long j, long j2, int i) {
        Params params = new Params("photos.reportComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportPost(long j, long j2, int i) {
        Params params = new Params("wall.reportPost");
        params.put("post_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportPostComment(long j, long j2, int i) {
        Params params = new Params("wall.reportComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportUser(long j, String str, String str2) {
        Params params = new Params("users.report");
        params.put("user_id", Long.valueOf(j));
        params.put("type", str);
        params.put("comment", str2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportVideo(long j, long j2, int i, String str, String str2) {
        Params params = new Params("video.report");
        params.put("video_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        params.put("comment", str);
        params.put("search_query", str2);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Integer reportVideoComment(long j, long j2, int i) {
        Params params = new Params("video.reportComment");
        params.put("comment_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("reason", Integer.valueOf(i));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public WallMessage repostWallPost(String str, String str2, Long l, Long l2, String str3, String str4) {
        Params params = new Params("wall.repost");
        params.put("group_id", l);
        params.put("message", str2);
        params.put("object", str);
        params.put("publish_date", l2);
        addCaptchaParams(str3, str4, params);
        JSONObject jSONObject = sendRequest(params, true).getJSONObject("response");
        WallMessage wallMessage = new WallMessage();
        wallMessage.id = jSONObject.optLong("post_id");
        wallMessage.like_count = jSONObject.optInt("likes_count");
        wallMessage.reposts_count = jSONObject.optInt("reposts_count");
        return wallMessage;
    }

    public ScreenNameInfo resolveScreenName(String str) {
        Params params = new Params("utils.resolveScreenName");
        params.put("screen_name", str);
        return ScreenNameInfo.parse(sendRequest(params).optJSONObject("response"));
    }

    public boolean revealWallPost(long j) {
        Params params = new Params("wall.reveal");
        params.put("post_id", Long.valueOf(j));
        return sendRequest(params).optInt("response") == 1;
    }

    public Audio saveAudio(String str, String str2, String str3, String str4, String str5) {
        Params params = new Params("audio.save");
        params.put("server", str);
        params.put("audio", str2);
        params.put("hash", str3);
        params.put("artist", str4);
        params.put("title", str5);
        return Audio.parse(sendRequest(params).getJSONObject("response"));
    }

    public Object saveDoc(String str, String str2, String str3) {
        Params params = new Params("docs.save");
        params.put("file", str);
        addCaptchaParams(str2, str3, params);
        JSONObject jSONObject = sendRequest(params).getJSONObject("response");
        return "audio_message".equals(jSONObject.getString("type")) ? AudioMessage.parse(jSONObject.getJSONObject("audio_message")) : Document.parse(jSONObject.getJSONObject("doc"));
    }

    public ArrayList saveMarketAlbumPhoto(long j, String str, String str2, String str3) {
        Params params = new Params("photos.saveMarketAlbumPhoto");
        params.put("group_id", Long.valueOf(j));
        params.put("photo", str);
        params.put("server", str2);
        params.put("hash", str3);
        return parsePhotos(sendRequest(params, true).getJSONArray("response"));
    }

    public ArrayList saveMarketPhoto(long j, String str, String str2, String str3) {
        Params params = new Params("photos.saveMarketPhoto");
        params.put("group_id", Long.valueOf(j));
        params.put("photo", str);
        params.put("server", str2);
        params.put("hash", str3);
        return parsePhotos(sendRequest(params, true).getJSONArray("response"));
    }

    public ArrayList saveMessagesPhoto(String str, String str2, String str3) {
        Params params = new Params("photos.saveMessagesPhoto");
        params.put("server", str);
        params.put("photo", str2);
        params.put("hash", str3);
        return parsePhotos(sendRequest(params, true).getJSONArray("response"));
    }

    public String[] saveOwnerPhoto(String str, String str2, String str3) {
        Params params = new Params("photos.saveOwnerPhoto");
        params.put("server", str);
        params.put("photo", str2);
        params.put("hash", str3);
        JSONObject jSONObject = sendRequest(params, true).getJSONObject("response");
        return new String[]{jSONObject.optString("photo_src"), jSONObject.optString("photo_hash")};
    }

    public SaveProdfileInfoResult saveProfileInfo(String str, String str2, String str3, Long l, Integer num, Integer num2, Long l2, String str4, Integer num3, String str5, Integer num4, Integer num5) {
        Params params = new Params("account.saveProfileInfo");
        params.put("first_name", str);
        params.put("last_name", str2);
        params.put("maiden_name", str3);
        params.put("cancel_request_id", l);
        params.put("sex", num);
        params.put("relation", num2);
        params.put("relation_partner_id", l2);
        params.put("bdate", str4);
        params.put("bdate_visibility", num3);
        params.put("home_town", str5);
        params.put("country_id", num4);
        params.put("city_id", num5);
        return SaveProdfileInfoResult.parse(sendRequest(params, false).optJSONObject("response"));
    }

    public Object[] saveVideo(String str, String str2, Long l, String str3, String str4, boolean z, String str5, String str6) {
        Params params = new Params("video.save");
        params.put("name", str);
        params.put("description", str2);
        params.put("group_id", l);
        params.put("privacy_view", str3);
        params.put("privacy_comment", str4);
        if (z) {
            params.put("is_private", (Integer) 1);
        }
        params.put("target", str6);
        params.put("link", str5);
        JSONObject jSONObject = sendRequest(params).getJSONObject("response");
        return new Object[]{jSONObject.getString("upload_url"), Long.valueOf(jSONObject.getLong("video_id")), jSONObject.getString("access_key")};
    }

    public ArrayList saveWallPhoto(String str, String str2, String str3, Long l, Long l2) {
        Params params = new Params("photos.saveWallPhoto");
        params.put("server", str);
        params.put("photo", str2);
        params.put("hash", str3);
        params.put("user_id", l);
        params.put("group_id", l2);
        return parsePhotos(sendRequest(params, true).getJSONArray("response"));
    }

    public ArrayList searchAudio(String str, String str2, String str3, Integer num, Long l, Long l2, String str4, String str5) {
        Params params = new Params("audio.search");
        params.put("q", str);
        params.put("lyrics", str3);
        params.put("performer_only", num);
        params.put("count", l);
        params.put("offset", l2);
        addCaptchaParams(str4, str5, params);
        return parseAudioList(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList searchDialogs(String str, String str2, Integer num) {
        Params params = new Params("messages.searchConversations");
        params.put("q", str);
        params.put("fields", str2);
        params.put("count", num);
        params.put("extended", (Integer) 1);
        return Message.parseSearchedDialogs(sendRequest(params).optJSONObject("response"));
    }

    public ArrayList searchDocs(String str, Integer num, Integer num2) {
        Params params = new Params("docs.search");
        params.put("q", str);
        params.put("count", num);
        params.put("offset", num2);
        return Document.parseDocs(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList searchGroup(String str, Long l, Long l2, String str2) {
        Params params = new Params("groups.search");
        params.put("q", str);
        params.put("count", l);
        params.put("offset", l2);
        params.put("fields", str2);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        return optJSONArray == null ? new ArrayList() : Group.parseGroups(optJSONArray);
    }

    public Object[] searchMessages(String str, Long l, int i, int i2, Integer num, String str2) {
        Params params = new Params("messages.search");
        params.put("q", str);
        params.put("peer_id", l);
        params.put("count", Integer.valueOf(i2));
        params.put("offset", Integer.valueOf(i));
        params.put("preview_length", num);
        params.put("date", str2);
        params.put("extended", (Integer) 1);
        params.put("fields", "online,last_seen,sex");
        JSONObject optJSONObject = sendRequest(params).optJSONObject("response");
        return new Object[]{parseMessages(optJSONObject.optJSONArray("items"), optJSONObject), User.parseUsers(optJSONObject.optJSONArray("profiles"))};
    }

    public Newsfeed searchNews(String str, String str2, int i, Long l, Long l2, long j, double d, double d2, String str3, String str4) {
        Params params = new Params("newsfeed.search");
        params.put("q", str);
        params.put("start_from", str2);
        params.put("extended", Integer.valueOf(i));
        params.put("start_time", l);
        params.put("end_time", l2);
        if (j != 0) {
            params.put("count", Long.valueOf(j));
        }
        if (d != 0.0d) {
            params.putDouble("latitude", d);
        }
        if (d2 != 0.0d) {
            params.putDouble("longitude", d2);
        }
        addCaptchaParams(str3, str4, params);
        return Newsfeed.parseFromSearch(sendRequest(params));
    }

    public ArrayList searchUser(String str, String str2, Long l, Long l2, Integer num, Integer num2, Integer num3, String str3, Integer num4, Integer num5, Integer num6, Integer num7, Integer num8, Integer num9, Integer num10, Integer num11, Integer num12, Integer num13, Integer num14, Integer num15, Integer num16, Integer num17, Integer num18, Integer num19, String str4, String str5, String str6, long j, Long l3) {
        Params params = new Params("users.search");
        params.put("q", str);
        params.put("count", l);
        params.put("offset", l2);
        params.put("fields", str2);
        if (num != null && num.intValue() > 0) {
            params.put("sort", num);
        }
        if (num2 != null && num2.intValue() > 0) {
            params.put("city", num2);
        }
        if (num3 != null && num3.intValue() > 0) {
            params.put("country", num3);
        }
        if (j > 0) {
            params.put("university", Long.valueOf(j));
        }
        if (str3 != null && str3.length() > 0) {
            params.put("hometown", str3);
        }
        if (num4 != null && num4.intValue() > 0) {
            params.put("university_country", num4);
        }
        if (num5 != null && num5.intValue() > 0) {
            params.put("university", num5);
        }
        if (num6 != null && num6.intValue() > 0) {
            params.put("university_year", num6);
        }
        if (num7 != null && num7.intValue() > 0) {
            params.put("sex", num7);
        }
        if (num8 != null && num8.intValue() > 0) {
            params.put("status", num8);
        }
        if (num9 != null && num9.intValue() > 0) {
            params.put("age_from", num9);
        }
        if (num10 != null && num10.intValue() > 0) {
            params.put("age_to", num10);
        }
        if (num11 != null && num11.intValue() > 0) {
            params.put("birth_day", num11);
        }
        if (num12 != null && num12.intValue() > 0) {
            params.put("birth_month", num12);
        }
        if (num13 != null && num13.intValue() > 0) {
            params.put("birth_year", num13);
        }
        if (num14 != null && num14.intValue() > 0) {
            params.put("online", num14);
        }
        if (num15 != null && num15.intValue() > 0) {
            params.put("has_photo", num15);
        }
        if (num16 != null && num16.intValue() > 0) {
            params.put("school_country", num16);
        }
        if (num17 != null && num17.intValue() > 0) {
            params.put("school_city", num17);
        }
        if (num18 != null && num18.intValue() > 0) {
            params.put("school", num18);
        }
        if (num19 != null && num19.intValue() > 0) {
            params.put("school_year", num19);
        }
        if (str4 != null && str4.length() > 0) {
            params.put("religion", str4);
        }
        if (str5 != null && str5.length() > 0) {
            params.put("company", str5);
        }
        if (str6 != null && str6.length() > 0) {
            params.put("position", str6);
        }
        if (l3 != null && l3.longValue() > 0) {
            params.put("group_id", l3);
        }
        return User.parseUsers(sendRequest(params).optJSONObject("response").optJSONArray("items"));
    }

    public ArrayList searchUserExtended(String str, String str2, Long l, Long l2, Integer num, Integer num2, Integer num3, String str3, Integer num4, Integer num5, Integer num6, Integer num7, Integer num8, Integer num9, Integer num10, Integer num11, Integer num12, Integer num13, Integer num14, Integer num15, Integer num16, Integer num17, Integer num18, Integer num19, String str4, String str5, String str6, long j, Long l3) {
        String parseProfileId = Utils.parseProfileId(str);
        if (parseProfileId == null || parseProfileId.length() <= 0 || !(l2 == null || l2.longValue() == 0)) {
            return searchUser(str, str2, l, l2, num, num2, num3, str3, num4, num5, num6, num7, num8, num9, num10, num11, num12, num13, num14, num15, num16, num17, num18, num19, str4, str5, str6, j, l3);
        }
        Log.i("Kate.Api", "Search with uid = " + parseProfileId);
        Params params = new Params("execute");
        params.put("code", (("var a=API.users.search({\"q\":\"" + str + "\",\"count\":" + l + ",\"count\":" + l2 + ",\"fields\":\"" + str2 + "\"});") + "var b=API.users.get({\"user_ids\":" + parseProfileId + ",\"fields\":\"" + str2 + "\"});") + "return b+a.items;");
        return User.parseUsers(sendRequest(params).optJSONArray("response"));
    }

    public ArrayList searchVideo(String str, Integer num, Integer num2, Long l, Long l2, Integer num3, String str2) {
        Params params = new Params("video.search");
        params.put("q", str);
        params.put("sort", num);
        params.put("hd", num2);
        params.put("count", l);
        params.put("offset", l2);
        params.put("adult", num3);
        params.put("filters", str2);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        if (optJSONArray != null) {
            for (int i = 0; i < optJSONArray.length(); i++) {
                arrayList.add(Video.parse((JSONObject) optJSONArray.get(i)));
            }
        }
        return arrayList;
    }

    public ArrayList searchWall(long j, String str, String str2, Integer num, int i, int i2, Integer num2) {
        Params params = new Params("wall.search");
        if (j != 0) {
            params.put("owner_id", Long.valueOf(j));
        }
        params.put("domain", str);
        params.put("query", str2);
        params.put("owners_only", num);
        if (i > 0) {
            params.put("count", Integer.valueOf(i));
        }
        params.put("offset", Integer.valueOf(i2));
        params.put("extended", num2);
        JSONArray optJSONArray = sendRequest(params).optJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        int length = optJSONArray.length();
        for (int i3 = 0; i3 < length; i3++) {
            arrayList.add(WallMessage.parse((JSONObject) optJSONArray.get(i3)));
        }
        return arrayList;
    }

    public String sendMessage(Long l, long j, String str, String str2, String str3, Collection collection, ArrayList arrayList, String str4, String str5, Integer num, String str6, String str7, String str8) {
        Params params = new Params("messages.send");
        params.put("peer_id", Long.valueOf(getPeerId(l, Long.valueOf(j))));
        params.put("message", str);
        params.put("title", str2);
        params.put("type", str3);
        params.put("attachment", arrayToString(collection));
        if (arrayList == null || arrayList.size() != 1 || ((Long) arrayList.get(0)).longValue() >= 0) {
            params.put("forward_messages", arrayToString(arrayList));
        } else {
            params.put("reply_to", Long.valueOf(-((Long) arrayList.get(0)).longValue()));
        }
        params.put("lat", str4);
        params.put("sticker_id", num);
        params.put("long", str5);
        params.put("payload", str6);
        params.put("random_id", Long.valueOf(System.nanoTime()));
        addCaptchaParams(str7, str8, params);
        Object opt = sendRequest(params, true).opt("response");
        if (opt != null) {
            return opt instanceof JSONArray ? ((JSONArray) opt).optString(0) : String.valueOf(opt);
        }
        return null;
    }

    public void sendMessageEvent(long j, long j2, String str) {
        Params params = new Params("messages.sendMessageEvent");
        params.put("message_id", Long.valueOf(j));
        params.put("peer_id", Long.valueOf(j2));
        params.put("payload", str);
        sendRequest(params);
    }

    public void setAccessToken(String str) {
        this.access_token = str;
    }

    public Integer setChatMemberRole(long j, long j2, boolean z) {
        Params params = new Params("messages.setMemberRole");
        params.put("peer_id", Long.valueOf(getPeerId(0L, Long.valueOf(j))));
        params.put("member_id", Long.valueOf(j2));
        params.put("role", z ? "admin" : "member");
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Long setChatPhoto(String str) {
        Params params = new Params("messages.setChatPhoto");
        params.put("file", str);
        return Long.valueOf(sendRequest(params).getJSONObject("response").optLong("message_id"));
    }

    public void setFaveTags(String str, Integer num, Integer num2, ArrayList arrayList) {
        Params params = new Params("fave.setTags");
        params.put("item_type", str);
        params.put("item_owner_id", num);
        params.put("item_id", num2);
        params.put("tag_ids", TextUtils.join(",", arrayList));
        sendRequest(params);
    }

    public Integer setMessageActivity(Long l, Long l2, boolean z) {
        Params params = new Params("messages.setActivity");
        params.put("peer_id", Long.valueOf(getPeerId(l, l2)));
        if (z) {
            params.put("type", "typing");
        }
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public Long setOffline() {
        return Long.valueOf(sendRequest(new Params("account.setOffline")).optLong("response"));
    }

    public void setOnline(String str, String str2) {
        Params params = new Params("account.setOnline");
        addCaptchaParams(str, str2, params);
        sendRequest(params);
    }

    public ArrayList setPrivacySettings(String str, String str2) {
        Params params = new Params("account.setPrivacy");
        params.put("key", str);
        if (str.equals("bdate_visibility")) {
            params.put("category", str2);
        } else if (str.equals("hidden_friends_list")) {
            params.put("excluded_owners", str2.replace("see_all_friends,", "").replace("-", ""));
        } else {
            params.put("value", str2);
        }
        sendRequest(params);
        return null;
    }

    public String setStatus(String str, Long l) {
        Params params = new Params("status.set");
        params.put("text", str);
        params.put("group_id", l);
        Object opt = sendRequest(params).opt("response");
        if (opt != null) {
            return String.valueOf(opt);
        }
        return null;
    }

    public String storiesGetPhotoUploadServer(Long l) {
        Params params = new Params("stories.getPhotoUploadServer");
        params.put("add_to_news", (Integer) 1);
        params.put("group_id", l);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public String storiesGetVideoUploadServer(Long l) {
        Params params = new Params("stories.getVideoUploadServer");
        params.put("add_to_news", (Integer) 1);
        params.put("group_id", l);
        return sendRequest(params).getJSONObject("response").getString("upload_url");
    }

    public ArrayList storiesGetViewers(long j, long j2) {
        Params params = new Params("stories.getViewers");
        params.put("owner_id", Long.valueOf(j));
        params.put("story_id", Long.valueOf(j2));
        JSONArray optJSONArray = sendRequest(params).getJSONObject("response").optJSONArray("items");
        ArrayList arrayList = new ArrayList();
        for (int i = 0; i < optJSONArray.length(); i++) {
            arrayList.add(Long.valueOf(optJSONArray.getJSONObject(i).getLong("user_id")));
        }
        return arrayList;
    }

    public Story storiesSave(String str) {
        Params params = new Params("stories.save");
        params.put("upload_results", str);
        sendRequest(params);
        return null;
    }

    public void trackEvents(String str) {
        Params params = new Params("stats.trackEvents");
        params.put("events", str);
        sendRequest(params);
    }

    public boolean unfixTopic(long j, long j2) {
        Params params = new Params("board.unfixTopic");
        params.put("group_id", Long.valueOf(j));
        params.put("topic_id", Long.valueOf(j2));
        return sendRequest(params).optInt("response") == 1;
    }

    public Integer unpinPost(Long l, long j) {
        Params params = new Params("wall.unpin");
        params.put("owner_id", l);
        params.put("post_id", Long.valueOf(j));
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public String unregisterDevice(String str) {
        Params params = new Params("account.unregisterDevice");
        params.put("device_id", str);
        return sendRequest(params).getString("response");
    }

    public Integer videoAddToAlbum(Long l, long j, long j2, long j3, String str, String str2) {
        Params params = new Params("video.addToAlbum");
        params.put("target_id", l);
        params.put("album_id", Long.valueOf(j));
        params.put("owner_id", Long.valueOf(j2));
        params.put("video_id", Long.valueOf(j3));
        addCaptchaParams(str, str2, params);
        return Integer.valueOf(sendRequest(params).optInt("response"));
    }

    public boolean wallCloseComments(long j, long j2) {
        Params params = new Params("wall.closeComments");
        params.put("owner_id", Long.valueOf(j));
        params.put("post_id", Long.valueOf(j2));
        return sendRequest(params).optLong("response") == 1;
    }

    public boolean wallOpenComments(long j, long j2) {
        Params params = new Params("wall.openComments");
        params.put("owner_id", Long.valueOf(j));
        params.put("post_id", Long.valueOf(j2));
        return sendRequest(params).optLong("response") == 1;
    }
}