text:
package net.sf.jabref.gui;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import net.sf.jabref.BibDatabaseContext;
import net.sf.jabref.Globals;
import net.sf.jabref.gui.keyboard.KeyBinding;
import net.sf.jabref.gui.util.FocusRequester;
import net.sf.jabref.logic.l10n.Localization;
import net.sf.jabref.model.EntryTypes;
import net.sf.jabref.model.entry.BibEntry;
import net.sf.jabref.model.entry.CustomEntryType;
import net.sf.jabref.model.entry.EntryType;
import net.sf.jabref.model.entry.EntryUtil;
import net.sf.jabref.model.entry.InternalBibtexFields;

import com.jgoodies.forms.builder.ButtonBarBuilder;

public class EntryCustomizationDialog extends JDialog implements ListSelectionListener, ActionListener {

    private final JabRefFrame frame;
    protected GridBagLayout gbl = new GridBagLayout();
    protected GridBagConstraints con = new GridBagConstraints();
    private FieldSetComponent reqComp;
    private FieldSetComponent optComp;
    private FieldSetComponent optComp2;
    private EntryTypeList typeComp;
    private JButton ok;
    private JButton cancel;
    private JButton apply;
    protected JButton helpButton;
    protected JButton delete;
    protected JButton importTypes;
    protected JButton exportTypes;
    private final List<String> preset = InternalBibtexFields.getAllPublicFieldNames();
    private String lastSelected;
    private final Map<String, List<String>> reqLists = new HashMap<>();
    private final Map<String, List<String>> optLists = new HashMap<>();
    private final Map<String, List<String>> opt2Lists = new HashMap<>();
    private final Set<String> defaulted = new HashSet<>();
    private final Set<String> changed = new HashSet<>();

    private boolean biblatexMode;
    private BibDatabaseContext bibDatabaseContext;

    /**
     * Creates a new instance of EntryCustomizationDialog
     */
    public EntryCustomizationDialog(JabRefFrame frame) {
        super(frame, Localization.lang("Customize entry types"), false);

        this.frame = frame;
        initGui();
    }

    private void initGui() {
        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());

        bibDatabaseContext = frame.getCurrentBasePanel().getBibDatabaseContext();
        biblatexMode = bibDatabaseContext.isBiblatexMode();

        JPanel main = new JPanel();
        JPanel buttons = new JPanel();
        JPanel right = new JPanel();
        main.setLayout(new BorderLayout());
        right.setLayout(new GridLayout(biblatexMode ? 2 : 1, 2));

        List<String> entryTypes = new ArrayList<>();
        for (String s : EntryTypes.getAllTypes(bibDatabaseContext.getMode())) {
            entryTypes.add(s);
        }

        typeComp = new EntryTypeList(entryTypes, bibDatabaseContext.getMode());
        typeComp.addListSelectionListener(this);
        typeComp.addAdditionActionListener(this);
        typeComp.addDefaultActionListener(new DefaultListener());
        typeComp.setListSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        //typeComp.setEnabled(false);
        reqComp = new FieldSetComponent(Localization.lang("Required fields"), new ArrayList<>(), preset, true, true);
        reqComp.setEnabled(false);
        reqComp.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
        ListDataListener dataListener = new DataListener();
        reqComp.addListDataListener(dataListener);
        optComp = new FieldSetComponent(Localization.lang("Optional fields"), new ArrayList<>(), preset, true, true);
        optComp.setEnabled(false);
        optComp.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
        optComp.addListDataListener(dataListener);
        right.add(reqComp);
        right.add(optComp);

        if (biblatexMode) {
            optComp2 = new FieldSetComponent(Localization.lang("Optional fields") + " 2", new ArrayList<>(), preset, true, true);
            optComp2.setEnabled(false);
            optComp2.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
            optComp2.addListDataListener(dataListener);
            right.add(new JPanel());
            right.add(optComp2);
        }

        //right.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Globals.lang("Fields")));
        right.setBorder(BorderFactory.createEtchedBorder());
        ok = new JButton(Localization.lang("OK"));
        cancel = new JButton(Localization.lang("Cancel"));
        apply = new JButton(Localization.lang("Apply"));
        ok.addActionListener(this);
        apply.addActionListener(this);
        cancel.addActionListener(this);
        ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
        buttons.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
        bb.addGlue();
        bb.addButton(ok);
        bb.addButton(apply);
        bb.addButton(cancel);
        bb.addGlue();

        AbstractAction closeAction = new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        };
        ActionMap am = main.getActionMap();
        InputMap im = main.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        im.put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE_DIALOG), "close");
        am.put("close", closeAction);

        //con.fill = GridBagConstraints.BOTH;
        //con.weightx = 0.3;
        //con.weighty = 1;
        //gbl.setConstraints(typeComp, con);
        main.add(typeComp, BorderLayout.WEST);
        main.add(right, BorderLayout.CENTER);
        main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        pane.add(main, BorderLayout.CENTER);
        pane.add(buttons, BorderLayout.SOUTH);
        pack();
    }

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting()) {
            return;
        }

        if (lastSelected != null) {
            // The entry type lastSelected is now unselected, so we store the current settings
            // for that type in our two maps.
            reqLists.put(lastSelected, reqComp.getFields());
            optLists.put(lastSelected, optComp.getFields());
            if (biblatexMode) {
                opt2Lists.put(lastSelected, optComp2.getFields());
            }
        }

        String s = typeComp.getFirstSelected();
        if (s == null) {
            return;
        }
        List<String> rl = reqLists.get(s);
        if (rl == null) {
            Optional<EntryType> type = EntryTypes.getType(s, bibDatabaseContext.getMode());
            if (type.isPresent()) {
                List<String> req = type.get().getRequiredFields();

                List<String> opt;
                if (biblatexMode) {
                    opt = type.get().getPrimaryOptionalFields();

                    List<String> opt2 = type.get().getSecondaryOptionalFields();

                    optComp2.setFields(opt2);
                    optComp2.setEnabled(true);
                } else {
                    opt = type.get().getOptionalFields();
                }
                reqComp.setFields(req);
                reqComp.setEnabled(true);
                optComp.setFields(opt);
                optComp.setEnabled(true);
            } else {
                // New entry
                reqComp.setFields(new ArrayList<>());
                reqComp.setEnabled(true);
                optComp.setFields(new ArrayList<>());
                optComp.setEnabled(true);
                if (biblatexMode) {
                    optComp2.setFields(new ArrayList<>());
                    optComp2.setEnabled(true);
                }
                new FocusRequester(reqComp);
            }
        } else {
            reqComp.setFields(rl);
            optComp.setFields(optLists.get(s));
            if (biblatexMode) {
                optComp2.setFields(opt2Lists.get(s));
            }
        }

        lastSelected = s;
        typeComp.enable(s, changed.contains(lastSelected) && !defaulted.contains(lastSelected));
    }

    private void applyChanges() {
        valueChanged(new ListSelectionEvent(new JList<>(), 0, 0, false));
        // Iterate over our map of required fields, and list those types if necessary:

        List<String> types = typeComp.getFields();
        for (Map.Entry<String, List<String>> stringListEntry : reqLists.entrySet()) {
            if (!types.contains(stringListEntry.getKey())) {
                continue;
            }

            List<String> reqStr = stringListEntry.getValue();
            List<String> optStr = optLists.get(stringListEntry.getKey());
            List<String> opt2Str = opt2Lists.get(stringListEntry.getKey());

            if (opt2Str == null) {
                opt2Str = new ArrayList<>(0);
            }

            // If this type is already existing, check if any changes have
            // been made
            boolean changesMade = true;

            if (defaulted.contains(stringListEntry.getKey())) {
                // This type should be reverted to its default setup.
                String nm = EntryUtil.capitalizeFirst(stringListEntry.getKey());
                EntryTypes.removeType(nm, bibDatabaseContext.getMode());

                updateTypesForEntries(nm);
                continue;
            }

            Optional<EntryType> oldType = EntryTypes.getType(stringListEntry.getKey(), bibDatabaseContext.getMode());
            if (oldType.isPresent()) {
                List<String> oldReq = oldType.get().getRequiredFieldsFlat();
                List<String> oldOpt = oldType.get().getOptionalFields();
                if (biblatexMode) {
                    List<String> oldPriOpt = oldType.get().getPrimaryOptionalFields();
                    List<String> oldSecOpt = oldType.get().getSecondaryOptionalFields();
                    if (equalLists(oldReq, reqStr) && equalLists(oldPriOpt, optStr) &&
                            equalLists(oldSecOpt, opt2Str)) {
                        changesMade = false;
                    }
                } else if (equalLists(oldReq, reqStr) && equalLists(oldOpt, optStr)) {
                    changesMade = false;
                }
            }

            if (changesMade) {
                CustomEntryType typ = biblatexMode ?
                        new CustomEntryType(EntryUtil.capitalizeFirst(stringListEntry.getKey()), reqStr, optStr, opt2Str) :
                        new CustomEntryType(EntryUtil.capitalizeFirst(stringListEntry.getKey()), reqStr, optStr);

                EntryTypes.addOrModifyCustomEntryType(typ);
                updateTypesForEntries(typ.getName());
            }
        }

        Set<Object> toRemove = new HashSet<>();
        for (String o : EntryTypes.getAllTypes(bibDatabaseContext.getMode())) {
            if (!types.contains(o)) {
                toRemove.add(o);
            }
        }

        // Remove those that should be removed:
        if (!toRemove.isEmpty()) {
            for (Object aToRemove : toRemove) {
                typeDeletion((String) aToRemove);
            }
        }

        updateTables();
    }

    private void typeDeletion(String name) {
        Optional<EntryType> type = EntryTypes.getType(name, bibDatabaseContext.getMode());

        if (type.isPresent() && (type.get() instanceof CustomEntryType)) {
            if (! EntryTypes.getStandardType(name, bibDatabaseContext.getMode()).isPresent()) {
                int reply = JOptionPane.showConfirmDialog
                        (frame, Localization.lang("All entries of this "
                                        + "type will be declared "
                                        + "typeless. Continue?"),
                                Localization.lang("Delete custom format") +
                                        " '" + EntryUtil.capitalizeFirst(name) + '\'', JOptionPane.YES_NO_OPTION,
                                JOptionPane.WARNING_MESSAGE);
                if (reply != JOptionPane.YES_OPTION) {
                    return;
                }
            }
            EntryTypes.removeType(name, bibDatabaseContext.getMode());
            updateTypesForEntries(EntryUtil.capitalizeFirst(name));
            changed.remove(name);
            reqLists.remove(name);
            optLists.remove(name);
            if (biblatexMode) {
                opt2Lists.remove(name);
            }
        }
    }

    private static boolean equalLists(List<String> one, List<String> two) {
        if ((one == null) && (two == null)) {
            return true; // Both null.
        }
        if ((one == null) || (two == null)) {
            return false; // One of them null, the other not.
        }
        if (one.size() != two.size()) {
            return false; // Different length.
        }
        // If we get here, we know that both are non-null, and that they have the same length.
        for (int i = 0; i < one.size(); i++) {
            if (!one.get(i).equals(two.get(i))) {
                return false;
            }
        }
        // If we get here, all entries have matched.
        return true;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == ok) {
            applyChanges();
            dispose();
        } else if (e.getSource() == cancel) {
            dispose();
        } else if (e.getSource() == apply) {
            applyChanges();
        } else if (e.getSource() == typeComp) {
            typeComp.selectField(e.getActionCommand());
        }
    }

    /**
     * Cycle through all databases, and make sure everything is updated with
     * the new type customization. This includes making sure all entries have
     * a valid type, that no obsolete entry editors are around, and that
     * the right-click menus' change type menu is up-to-date.
     */
    private void updateTypesForEntries(String typeName) {
        for (BasePanel bp : frame.getBasePanelList()) {

            // Invalidate associated cached entry editor
            bp.getEntryEditors().remove(typeName);

            for (BibEntry entry : bp.getDatabase().getEntries()) {
                EntryTypes.getType(entry.getType(), bibDatabaseContext.getMode()).ifPresent(entry::setType);
            }
        }

    }

    private void updateTables() {
        for (BasePanel basePanel : frame.getBasePanelList()) {
            ((javax.swing.table.AbstractTableModel) basePanel.getMainTable().getModel()).fireTableDataChanged();
        }
    }

    // DEFAULT button pressed. Remember that this entry should be reset to default,
    // unless changes are made later.
    private class DefaultListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (lastSelected == null) {
                return;
            }
            defaulted.add(lastSelected);

            Optional<EntryType> type = EntryTypes.getStandardType(lastSelected, bibDatabaseContext.getMode());
            if (type.isPresent()) {
                List<String> of = type.get().getOptionalFields();
                List<String> req = type.get().getRequiredFields();
                List<String> opt1 = new ArrayList<>();
                List<String> opt2 = new ArrayList<>();

                if (!(of.isEmpty())) {
                    if (biblatexMode) {
                        opt1 = type.get().getPrimaryOptionalFields();
                        opt2 = type.get().getSecondaryOptionalFields();
                    } else {
                        opt1 = of;
                    }
                }

                reqComp.setFields(req);
                reqComp.setEnabled(true);
                optComp.setFields(opt1);
                if (biblatexMode) {
                    optComp2.setFields(opt2);
                }
            }
        }
    }

    class DataListener implements ListDataListener {

        @Override
        public void intervalAdded(javax.swing.event.ListDataEvent e) {
            record();
        }

        @Override
        public void intervalRemoved(javax.swing.event.ListDataEvent e) {
            record();
        }

        @Override
        public void contentsChanged(javax.swing.event.ListDataEvent e) {
            record();
        }

        private void record() {
            if (lastSelected == null) {
                return;
            }
            defaulted.remove(lastSelected);
            changed.add(lastSelected);
            typeComp.enable(lastSelected, true);
        }

    }
}


text:
ES5Harness.registerTest({
    id: "15.2.3.6-4-533",

    path: "TestCases/chapter15/15.2/15.2.3/15.2.3.6/15.2.3.6-4-533.js",

    description: "ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a Function, [[Enumerable]] is true, [[Configurable]] is true) is deletable",

    test: function testcase() {
        var obj = {};

        var getFunc = function () {
            return 1001;
        };

        var verifySetFunc = "data";
        var setFunc = function (value) {
            verifySetFunc = value;
        };

        Object.defineProperty(obj, "prop", {
            get: getFunc,
            set: setFunc,
            enumerable: true,
            configurable: true
        });

        var propertyDefineCorrect = obj.hasOwnProperty("prop");
        var desc = Object.getOwnPropertyDescriptor(obj, "prop");

        delete obj.prop;

        return propertyDefineCorrect && desc.configurable === true && !obj.hasOwnProperty("prop");
    },

    precondition: function prereq() {
        return fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor);
    }
});

redpajama_set_name: RedPajamaGithub


text:
namespace VkNet.Categories
{
	using System;
	using System.Collections.Generic;
	using System.Collections.ObjectModel;
	using Enums;
	using Enums.Filters;
	using Enums.SafetyEnums;
	using Model;
	using Utils;
	using Model.RequestParams;
	using System.Linq;

	using Model.Attachments;

	/// <summary>
	/// Методы для работы с сообществами (группами).
	/// </summary>
	public partial class GroupsCategory
	{
		private readonly VkApi _vk;

		internal GroupsCategory(VkApi vk)
		{
			_vk = vk;
		}

		/// <summary>
		/// Данный метод позволяет вступить в группу, публичную страницу, а также подтвердить участие во встрече.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества. положительное число (Положительное число).</param>
		/// <param name="notSure">Опциональный параметр, учитываемый, если group_id принадлежит встрече. 1 — Возможно пойду. 0 — Точно пойду. По умолчанию 0. строка (Строка).</param>
		/// <returns>
		/// В случае успешного вступления метод вернёт 1.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.join" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool Join(long? groupId, bool? notSure = null)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId },
				{ "not_sure", notSure }
			};

			return _vk.Call("groups.join", parameters);
		}

		/// <summary>
		/// Позволяет покинуть сообщество.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества. положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <returns>
		/// После успешного выполнения возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.leave" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool Leave(long groupId)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId }
			};

			return _vk.Call("groups.leave", parameters);
		}

		/// <summary>
		/// Возвращает список сообществ указанного пользователя.
		/// </summary>
		/// <param name="params">Входные параметры выборки.</param>
		/// <returns>
		/// После успешного выполнения возвращает список идентификаторов сообществ id, в которых состоит пользователь user_id.
		/// Если был задан параметр extended=1,  возвращает список объектов group.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.get" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<Group> Get(GroupsGetParams @params, bool skipAuthorization = false)
		{
			VkErrors.ThrowIfNumberIsNegative(() => @params.UserId);
			var response = _vk.Call("groups.get", @params, skipAuthorization);
			// в первой записи количество членов группы для (response["items"])
			if (@params.Extended == null || !@params.Extended.Value)
			{
				return response.ToVkCollectionOf(id => new Group { Id = id });
			}
			return response.ToVkCollectionOf<Group>(r => r);
		}

		/// <summary>
		/// Возвращает информацию о заданном сообществе или о нескольких сообществах.
		/// </summary>
		/// <param name="groupIds">Идентификаторы или короткие имена сообществ. Максимальное число идентификаторов — 500. список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
		/// <param name="groupId">Идентификатор или короткое имя сообщества. строка (Строка).</param>
		/// <param name="fields">Список дополнительных полей, которые необходимо вернуть. Возможные значения: city, country, place, description, wiki_page, members_count, counters, start_date, finish_date, can_post, can_see_all_posts, activity, status, contacts, links, fixed_post, verified, site,ban_info.
		/// Обратите внимание, для получения некоторых полей требуется право доступа groups. Подробнее см. описание полей объекта group список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
		/// <returns>
		/// После успешного выполнения возвращает массив объектов group.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getById" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public ReadOnlyCollection<Group> GetById(IEnumerable<string> groupIds, string groupId, GroupsFields fields, bool skipAuthorization = true)
		{
			var parameters = new VkParameters {
				{ "group_ids", groupIds },
				{ "group_id", groupId },
				{ "fields", fields }
			};

			return _vk.Call("groups.getById", parameters, skipAuthorization).ToReadOnlyCollectionOf<Group>(x => x);
		}

		/// <summary>
		/// Возвращает список участников сообщества.
		/// </summary>
		/// <param name="params">Входные параметры выборки.</param>
		/// <returns>
		/// Возвращает общее количество участников сообщества count и список идентификаторов пользователей items.
		/// Если был передан параметр filter=managers, возвращается дополнительное поле role, которое содержит уровень полномочий руководителя:
		/// moderator — модератор;
		/// editor — редактор;
		/// administrator — администратор;
		/// creator — создатель сообщества.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getMembers" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<User> GetMembers(GroupsGetMembersParams @params, bool skipAuthorization = true)
		{
			return _vk.Call("groups.getMembers", @params, skipAuthorization).ToVkCollectionOf(x => @params.Fields != null? x : new User {Id = x});
		}

		/// <summary>
		/// Возвращает информацию о том, является ли пользователь участником сообщества.
		/// </summary>
		/// <param name="groupId">Идентификатор или короткое имя сообщества. строка, обязательный параметр (Строка, обязательный параметр).</param>
		/// <param name="userId">Идентификатор пользователя. положительное число (Положительное число).</param>
		/// <param name="userIds">Идентификаторы пользователей, не более 500. список положительных чисел, разделенных запятыми (Список положительных чисел, разделенных запятыми).</param>
		/// <param name="extended">1  — вернуть ответ в расширенной форме. По умолчанию — 0. флаг, может принимать значения 1 или 0 (Флаг, может принимать значения 1 или 0).</param>
		/// <returns>
		/// возвращает <c>true</c> в случае, если пользователь с идентификатором user_id является участником сообщества с идентификатором group_id, иначе 0.
		///
		/// При использовании параметра extended Возвращает объект, который содержит поля:
		///
		/// member — является ли пользователь участником сообщества;
		/// и может содержать поля:
		///
		/// request — есть ли непринятая заявка от пользователя на вступление в группу (такую заявку можно отозвать методом groups.leave);
		/// invitation — приглашён ли пользователь в группу или встречу.
		///
		///
		/// При передаче нескольких идентификаторов Возвращает результат в виде массива объектов, в которых есть поля user_id и member.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.isMember" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public ReadOnlyCollection<GroupMember> IsMember(string groupId, long? userId, IEnumerable<long> userIds, bool? extended, bool skipAuthorization = true)
		{
			if (userId.HasValue)
			{
				if (userIds != null)
				{
					if (userIds.Any(id => id < 1))
					{
						throw new ArgumentException("Идентификатор пользователя должен быть больше 0");
					}
					userIds.ToList().Add(userId.Value);
				}
				else
				{
					if (userId.Value < 1)
					{
						throw new ArgumentException("Идентификатор пользователя должен быть больше 0");
					}
					userIds = new List<long>
					{
						userId.Value
					};
				}
			}
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "user_ids", userIds },
				{ "extended", extended }
			};
			var result = _vk.Call("groups.isMember", parameters, skipAuthorization);

			return result.ToReadOnlyCollectionOf<GroupMember>(x => x);
		}

		/// <summary>
		/// Осуществляет поиск сообществ по заданной подстроке.
		/// </summary>
		/// <param name="params">Входные параметры выборки.</param>
		/// <returns>
		/// После успешного выполнения возвращает список объектов group.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.search" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<Group> Search(GroupsSearchParams @params, bool skipAuthorization = false)
		{
			return _vk.Call("groups.search", @params, skipAuthorization).ToVkCollectionOf<Group>(r => r);
		}

		/// <summary>
		/// Данный метод возвращает список приглашений в сообщества и встречи текущего пользователя.
		/// </summary>
		/// <param name="offset">Смещение, необходимое для выборки определённого подмножества приглашений. положительное число (Положительное число).</param>
		/// <param name="count">Количество приглашений, которое необходимо вернуть. положительное число, по умолчанию 20 (Положительное число, по умолчанию 20).</param>
		/// <param name="extended">1 — вернуть дополнительную информацию о пользователях, отправлявших приглашения. По умолчанию — 0. флаг, может принимать значения 1 или 0 (Флаг, может принимать значения 1 или 0).</param>
		/// <returns>
		/// После успешного выполнения возвращает список объектов сообществ с дополнительным полем invited_by, содержащим идентификатор пользователя, который отправил приглашение.
		/// Если был передан параметр extended=1, дополнительно будет возвращен список profiles пользователей, отправивших приглашения. Каждый объект в списке содержит поля id, first_name, last_name.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getInvites" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<Group> GetInvites(long? count, long? offset, bool? extended = null)
		{
			var parameters = new VkParameters {
				{ "offset", offset },
				{ "count", count },
				{ "extended", extended }
			};

			return _vk.Call("groups.getInvites", parameters).ToVkCollectionOf<Group>(x => x);
		}

		/// <summary>
		/// Добавляет пользователя в черный список сообщества.
		/// </summary>
		/// <param name="params">Входные параметры выборки.</param>
		/// <returns>
		/// После успешного выполнения возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.banUser" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool BanUser(GroupsBanUserParams @params)
		{
			return _vk.Call("groups.banUser", @params);
		}

		/// <summary>
		/// Возвращает список забаненных пользователей в сообществе.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества. положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="offset">Смещение, необходимое для выборки определенного подмножества черного списка. положительное число (Положительное число).</param>
		/// <param name="count">Количество пользователей, которое необходимо вернуть. положительное число, по умолчанию 20, максимальное значение 200 (Положительное число, по умолчанию 20, максимальное значение 200).</param>
		/// <param name="fields">Список дополнительных полей, которые необходимо вернуть.
		/// Доступные значения: sex, bdate, city, country, photo_50, photo_100, photo_200_orig, photo_200, photo_400_orig, photo_max, photo_max_orig, online, online_mobile, lists, domain, has_mobile, contacts, connections, site, education, universities, schools, can_post, can_see_all_posts, can_see_audio, can_write_private_message, status, last_seen, common_count, relation, relatives, counters список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
		/// <param name="userId">Идентификатор пользователя, который можно передать для получения статуса бана отдельного пользователя. положительное число (Положительное число).</param>
		/// <returns>
		/// После успешного выполнения возвращает список объектов user с дополнительным полем ban_info.
		/// Объект ban_info — информация о внесении в черный список сообщества.
		/// admin_id идентификатор администратора, который добавил пользователя в черный список.
		///  положительное число date дата добавления пользователя в черный список в формате Unixtime.
		///  положительное число reason причина добавления пользователя в черный список. Возможные значения:
		///
		/// 0 — другое (по умолчанию);
		/// 1 — спам;
		/// 2 — оскорбление участников;
		/// 3 — нецензурные выражения;
		/// 4 — сообщения не по теме.
		///
		///  int (числовое значение) comment текст комментария.
		///  строка end_date дата окончания блокировки (0 — блокировка вечная).
		///  int (числовое значение).
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getBanned" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<User> GetBanned(long groupId, long? offset = null, long? count = null, GroupsFields fields = null, long? userId = null)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId },
				{ "offset", offset },
				{ "count", count },
				{ "fields", fields },
				{ "user_id", userId }
			};

			return _vk.Call("groups.getBanned", parameters).ToVkCollectionOf<User>(x => x);
		}

		/// <summary>
		/// Убирает пользователя из черного списка сообщества.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества</param>
		/// <param name="userId">Идентификатор пользователя, которого нужно убрать из черного списка</param>
		/// <returns>После успешного выполнения возвращает <c>true</c>.</returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.unbanUser"/>.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool UnbanUser(long groupId, long userId)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			VkErrors.ThrowIfNumberIsNegative(() => userId);
			var parameters = new VkParameters
			{
				{"group_id", groupId},
				{"user_id", userId}
			};

			return _vk.Call("groups.unbanUser", parameters);
		}

		/// <summary>
		/// Позволяет назначить/разжаловать руководителя в сообществе или изменить уровень его полномочий.
		/// </summary>
		/// <param name="params">Входные параметры выборки.</param>
		/// <returns>
		/// В случае успешного выполнения возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.editManager" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool EditManager(GroupsEditManagerParams @params)
		{
			return _vk.Call("groups.editManager", @params);
		}

		/// <summary>
		/// Позволяет получать данные, необходимые для отображения страницы редактирования данных сообщества.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества, данные которого необходимо получить. положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <returns>
		/// В случае успешного выполнения метод вернет объект, содержащий данные сообщества, которые позволят отобразить форму редактирования для метода groups.edit.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getSettings" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public GroupsEditParams GetSettings(ulong groupId)
		{
			var parameters = new VkParameters
			{
				{"group_id", groupId}
			};

            GroupsEditParams result = _vk.Call("groups.getSettings", parameters);
		    result.GroupId = groupId; // Требует метод edit но getSettings не возвращает

            return result;
		}

		/// <summary>
		/// Редактирует сообщество.
		/// </summary>
		/// <param name="params">Параметры запроса.</param>
		/// <returns>
		/// В случае успеха возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.edit" />.
		/// </remarks>
		public bool Edit(GroupsEditParams @params)
		{
			var parameters = @params;

			return _vk.Call("groups.edit", parameters);
		}

		/// <summary>
		/// Позволяет редактировать информацию о месте группы.
		/// Для удаления информации о местоположении нужно передать только group_id.
		/// Для обновления данных о местоположении необходимо указать как минимум id страны, широту и долготу.
		/// </summary>
		/// <param name="groupId">Идентификатор группы, информацию о месте которой нужно отредактировать.</param>
		/// <param name="place">Местоположение.</param>
		/// <remarks>
		/// Для того, чтобы воспользоваться этим методом Вы должны быть администратором группы.
		/// Страница документации ВКонтакте <see href="https://vk.com/dev/groups.editPlace"/>.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool EditPlace(long groupId, Place place = null)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			if (place == null)
			{
				place = new Place();
			}
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "title", place.Title },
				{ "address", place.Address },
				{ "country_id", place.CountryId },
				{ "city_id", place.CityId },
				{ "latitude", place.Latitude },
				{ "longitude", place.Longitude }
			};
			var result = _vk.Call("groups.editPlace", parameters);
			return result["success"];
		}

		/// <summary>
		/// Возвращает список пользователей, которые были приглашены в группу.
		/// </summary>
		/// <param name="groupId">Идентификатор группы, список приглашенных в которую пользователей нужно вернуть. положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="offset">Смещение, необходимое для выборки определённого подмножества пользователей. положительное число (Положительное число).</param>
		/// <param name="count">Количество пользователей, информацию о которых нужно вернуть. положительное число, по умолчанию 20 (Положительное число, по умолчанию 20).</param>
		/// <param name="fields">Список дополнительных полей, которые необходимо вернуть.
		/// Доступные значения: nickname, domain, sex, bdate, city, country, timezone, photo_50, photo_100, photo_200_orig, has_mobile, contacts, education, online, relation, last_seen, status, can_write_private_message, can_see_all_posts, can_post, universities список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
		/// <param name="nameCase">Падеж для склонения имени и фамилии пользователя. Возможные значения: именительный – nom, родительный – gen, дательный – dat, винительный – acc, творительный – ins, предложный – abl. По умолчанию nom. строка (Строка).</param>
		/// <returns></returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getInvitedUsers" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<User> GetInvitedUsers(long groupId, long? offset = null, long? count = null, UsersFields fields = null, NameCase nameCase = null)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "offset", offset },
				{ "count", count },
				{ "fields", fields },
				{ "name_case", nameCase }
			};

			return _vk.Call("groups.getInvitedUsers", parameters).ToVkCollectionOf<User>(x => x);
		}

		/// <summary>
		/// Позволяет приглашать друзей в группу.
		/// </summary>
		/// <param name="groupId">Идентификатор группы, в которую необходимо выслать приглашение положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="userId">Идентификатор пользователя, которому необходимо выслать приглашение положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <returns>
		/// В случае успешного выполнения возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.invite" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool Invite(long groupId, long userId)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			VkErrors.ThrowIfNumberIsNegative(() => userId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "user_id", userId }
			};

			return _vk.Call("groups.invite", parameters);
		}

		/// <summary>
		/// Позволяет добавлять ссылки в сообщество.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества, в которое добавляется ссылка положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="link">Адрес ссылки строка, обязательный параметр (Строка, обязательный параметр).</param>
		/// <param name="text">Текст ссылки строка (Строка).</param>
		/// <returns>
		/// В случае успешного выполнения возвращает объект со следующими полями:
		///
		///
		/// id — идентификатор ссылки;
		/// url — URL ссылки;
		/// name — название ссылки в блоке сообщества;
		/// edit_title — возвращается 1, если можно редактировать название ссылки (для внешних ссылок);
		/// desc — описание ссылки;
		/// image_processing — возвращается 1, если превью находится в процессе обработки.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.addLink" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public Link AddLink(long groupId, Uri link, string text)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "link", link },
				{ "text", text }
			};

			return _vk.Call("groups.addLink", parameters);
		}

		/// <summary>
		/// Позволяет удалить ссылки из сообщества.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества, ссылки которого нужно удалить положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="linkId">Идентификатор ссылки, которую необходимо удалить положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <returns>
		/// В случае успешного выполнения метод возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.deleteLink" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool DeleteLink(long groupId, ulong linkId)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "link_id", linkId }
			};
			return _vk.Call("groups.deleteLink", parameters);
		}

		/// <summary>
		/// Позволяет редактировать ссылки в сообществе.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества, в которое добавляется ссылка положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="linkId">Идентификатор редактируемой ссылки положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="text">Новое описание ссылки строка (Строка).</param>
		/// <returns>
		/// В случае успешного редактирования ссылки метод возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.editLink" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool EditLink(long groupId, ulong linkId, string text)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "link_id", linkId },
				{ "text", text }
			};
			return _vk.Call("groups.editLink", parameters);
		}

		/// <summary>
		/// Позволяет менять местоположение ссылки в списке.
		/// </summary>
		/// <param name="groupId">Идентификатор группы, внутри которой перемещается ссылка положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="linkId">Идентификатор ссылки, которую необходимо переместить положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="after">Идентификатор ссылки после которой необходимо разместить перемещаемую ссылку. 0 – если ссылку нужно разместить в начале списка. положительное число (Положительное число).</param>
		/// <returns>
		/// В случае успешного выполнение метод возвращает 1.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.reorderLink" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool ReorderLink(long groupId, long linkId, long? after)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId },
				{ "link_id", linkId },
				{ "after", after }
			};

			return _vk.Call("groups.reorderLink", parameters);
		}

		/// <summary>
		/// Позволяет исключить пользователя из группы или отклонить заявку на вступление.
		/// </summary>
		/// <param name="groupId">Идентификатор группы, из которой необходимо исключить пользователя.</param>
		/// <param name="userId">Идентификатор пользователя, которого нужно исключить.</param>
		/// <returns>
		/// В случае успешного выполнения возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="https://vk.com/dev/groups.removeUser" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool RemoveUser(long groupId, long userId)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			VkErrors.ThrowIfNumberIsNegative(() => userId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "user_id", userId }
			};

			return _vk.Call("groups.removeUser", parameters);
		}

		/// <summary>
		/// Позволяет одобрить заявку в группу от пользователя.
		/// </summary>
		/// <param name="groupId">Идентификатор группы, заявку в которую необходимо одобрить.</param>
		/// <param name="userId">Идентификатор пользователя, заявку которого необходимо одобрить.</param>
		/// <returns>
		/// В случае успешного выполнения возвращает <c>true</c>.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="https://vk.com/dev/groups.approveRequest" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public bool ApproveRequest(long groupId, long userId)
		{
			VkErrors.ThrowIfNumberIsNegative(() => groupId);
			VkErrors.ThrowIfNumberIsNegative(() => userId);
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "user_id", userId }
			};

			return _vk.Call("groups.approveRequest", parameters);
		}

		/// <summary>
		/// Создает новое сообщество.
		/// </summary>
		/// <param name="title">Название сообщества. строка, обязательный параметр (Строка, обязательный параметр).</param>
		/// <param name="description">Описание сообщества, (не учитывается при type=public). строка (Строка).</param>
		/// <param name="type">Тип создаваемого сообщества:
		///
		/// group — группа;
		/// event — мероприятие;
		/// public — публичная страница.
		/// строка, по умолчанию group (Строка, по умолчанию group).</param>
		/// <param name="subtype">Вид публичной страницы (только при type=public):
		///
		/// 1 — место или небольшая компания;
		/// 2 — компания, организация или веб-сайт;
		/// 3 — известная личность или коллектив;
		/// 4 — произведение или продукция.
		/// положительное число (Положительное число).</param>
		/// <returns>
		/// Возвращает идентификатор созданного сообщества.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.create" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public Group Create(string title, string description, GroupType type, GroupSubType? subtype)
		{
			var parameters = new VkParameters {
				{ "title", title },
				{ "description", description },
				{ "type", type },
				{ "subtype", subtype }
			};

			return _vk.Call("groups.create", parameters);
		}

		/// <summary>
		/// Возвращает список заявок на вступление в сообщество.
		/// </summary>
		/// <param name="groupId">Идентификатор сообщества (указывается без знака «минус»). положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
		/// <param name="offset">Смещение, необходимое для выборки определенного подмножества результатов. По умолчанию — 0. положительное число (Положительное число).</param>
		/// <param name="count">Число результатов, которые необходимо вернуть. положительное число, по умолчанию 20, максимальное значение 200 (Положительное число, по умолчанию 20, максимальное значение 200).</param>
		/// <param name="fields">Список дополнительных полей профилей, которые необходимо вернуть. См. подробное описание.
		/// Доступные значения: sex, bdate, city, country, photo_50, photo_100, photo_200_orig, photo_200, photo_400_orig, photo_max, photo_max_orig, online, online_mobile, domain, has_mobile, contacts, connections, site, education, universities, schools, can_post, can_see_all_posts, can_see_audio, can_write_private_message, status, last_seen, common_count, relation, relatives, counters, screen_name, maiden_name, timezone, occupation,activities, interests, music, movies, tv, books, games, about, quotes список строк, разделенных через запятую (Список строк, разделенных через запятую).</param>
		/// <returns>
		/// Возвращает список идентификаторов пользователей, отправивших заявки на вступление в сообщество.
		/// Если было передано значение в параметре fields, возвращается список объектов пользователей.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getRequests" />.
		/// </remarks>
		[ApiVersion("5.44")]
		public VkCollection<User> GetRequests(long groupId, long? offset, long? count, UsersFields fields)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId },
				{ "offset", offset },
				{ "count", count },
				{ "fields", fields }
			};

			return _vk.Call("groups.getRequests", parameters).ToVkCollectionOf<User>(x => x);
		}

		/// <summary>
		/// Возвращает список сообществ выбранной категории каталога.
		/// </summary>
		/// <param name="categoryId">Идентификатор категории, полученный в методе groups.getCatalogInfo. положительное число (Положительное число).</param>
		/// <param name="subcategoryId">Идентификатор подкатегории, полученный в методе groups.getCatalogInfo. положительное число, максимальное значение 99 (Положительное число, максимальное значение 99).</param>
		/// <returns>
		/// Возвращает список объектов сообществ в соответствии с выбранной категорией каталога.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getCatalog" />.
		/// </remarks>
		public VkCollection<Group> GetCatalog(ulong? categoryId = null, ulong? subcategoryId = null)
		{
			var parameters = new VkParameters {
				{ "category_id", categoryId },
				{ "subcategory_id", subcategoryId }
			};

			return _vk.Call("groups.getCatalog", parameters, true).ToVkCollectionOf<Group>(x => x);
		}

		/// <summary>
		/// Возвращает список категорий для каталога сообществ.
		/// </summary>
		/// <param name="extended">1 — вернуть информацию о количестве сообществ в категории и три сообщества для предпросмотра.
		/// По умолчанию 0. флаг, может принимать значения 1 или 0, по умолчанию 0, доступен начиная с версии 5.37 (Флаг, может принимать значения 1 или 0, по умолчанию 0, доступен начиная с версии 5.37).</param>
		/// <param name="subcategories">1 — вернуть информацию об подкатегориях.
		/// По умолчанию 0. флаг, может принимать значения 1 или 0, по умолчанию 0, доступен начиная с версии 5.37 (Флаг, может принимать значения 1 или 0, по умолчанию 0, доступен начиная с версии 5.37).</param>
		/// <returns>
		/// После успешного выполнения возвращает поле enabled (0 — каталог недоступен для пользователя, 1 — каталог доступен), и, если enabled=1, массив categories объектов — категорий товаров.
		/// Объект массива categories — категория каталога товаров.
		/// id идентификатор категории.
		///  положительное число name название категории.
		///  строка subcategories поле возвращается при использовании subcategories=1. Массив объектов-подкатегорий. Каждый из объектов содержит поля id и name, содержащие идентификатор и название подкатегории.
		/// Дополнительные поля (extended=1)
		/// page_count количество сообществ в категории.
		///  положительное число page_previews массив объектов сообществ для предпросмотра.
		/// </returns>
		/// <remarks>
		/// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.getCatalogInfo" />.
		/// </remarks>
		public GroupsCatalogInfo GetCatalogInfo(bool? extended = null, bool? subcategories = null)
		{
			var parameters = new VkParameters {
				{ "extended", extended },
				{ "subcategories", subcategories }
			};

			return _vk.Call("groups.getCatalogInfo", parameters, true);
		}
	}
}


text:
FROM binford2k/showoff
MAINTAINER Your Name <your.email@address.com>
WORKDIR /var/cache/showoff

# Uncomment and edit this to clone a repository as a presentation
#RUN git clone --depth 1 https://github.com/binford2k/catalog_security.git . && rm -rf .git

# Uncomment and edit this to copy presentation files to your container
#ADD * /var/cache/showoff/

# Uncomment and edit these to configure runtimes for live code execution
#RUN apk add --no-cache perl python
#CMD ["showoff", "serve", "-x"]


text:
package com.appacitive.core.push;

import com.appacitive.core.apjson.APJSONException;
import com.appacitive.core.apjson.APJSONObject;
import com.appacitive.core.infra.APSerializable;

import java.io.Serializable;
import java.util.Iterator;

public class PlatformOptions implements Serializable, APSerializable {

    public IosOptions iOS;

    public AndroidOptions android;

    public WindowsPhoneOptions windowsPhone;

    public boolean isEmpty() {
        return
                (this.iOS == null || this.iOS.isEmpty() == true) &&
                        (this.android == null || this.android.isEmpty() == true) &&
                        (this.windowsPhone == null || this.windowsPhone.isEmpty() == true);
    }

    public void setSelf(APJSONObject APEntity) {

    }

    public synchronized APJSONObject getMap() throws APJSONException {
        APJSONObject nativeMap = new APJSONObject();
        if (this.isEmpty() == false) ;
        {
            if (this.iOS != null && this.iOS.isEmpty() == false) {
                APJSONObject ios = this.iOS.getMap();
                Iterator iosIterator = ios.keys();
                String iosKey;
                while (iosIterator.hasNext()) {
                    iosKey = (String) iosIterator.next();
                    nativeMap.put(iosKey, ios.get(iosKey));
                }
            }

            if (this.android != null && this.android.isEmpty() == false) {
                APJSONObject android = this.android.getMap();
                Iterator androidIterator = android.keys();
                String androidKey;
                while (androidIterator.hasNext()) {
                    androidKey = (String) androidIterator.next();
                    nativeMap.put(androidKey, android.get(androidKey));
                }
            }

            if (this.windowsPhone != null && this.windowsPhone.isEmpty() == false) {
                APJSONObject windowsPhone = this.windowsPhone.getMap();
                Iterator windowsPhoneIterator = windowsPhone.keys();
                String windowsPhoneKey;
                while (windowsPhoneIterator.hasNext()) {
                    windowsPhoneKey = (String) windowsPhoneIterator.next();
                    nativeMap.put(windowsPhoneKey, windowsPhone.get(windowsPhoneKey));
                }
            }
        }
        return nativeMap;
    }
}


text:
using osu.Framework.Audio.Track;
using osu.Framework.Graphics;
using osuTK;
using osu.Framework.Graphics.Sprites;
using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Graphics.Containers;
using osu.Game.Skinning;

namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
{
    public class ReverseArrowPiece : BeatSyncedContainer
    {
        public ReverseArrowPiece()
        {
            Divisor = 2;
            MinimumBeatLength = 200;

            Anchor = Anchor.Centre;
            Origin = Anchor.Centre;

            Blending = BlendingParameters.Additive;

            Size = new Vector2(OsuHitObject.OBJECT_RADIUS * 2);

            Child = new SkinnableDrawable(new OsuSkinComponent(OsuSkinComponents.ReverseArrow), _ => new SpriteIcon
            {
                RelativeSizeAxes = Axes.Both,
                Icon = FontAwesome.Solid.ChevronRight,
                Size = new Vector2(0.35f)
            })
            {
                Anchor = Anchor.Centre,
                Origin = Anchor.Centre,
            };
        }

        protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, TrackAmplitudes amplitudes) =>
            Child.ScaleTo(1.3f).ScaleTo(1f, timingPoint.BeatLength, Easing.Out);
    }
}


text:
namespace Microsoft.Azure.Management.Compute.Models
{
    using Microsoft.Azure;
    using Microsoft.Azure.Management;
    using Microsoft.Azure.Management.Compute;
    using Newtonsoft.Json;
    using System.Linq;

    /// <summary>
    /// Contains information about SSH certificate public key and the path on
    /// the Linux VM where the public key is placed.
    /// </summary>
    public partial class SshPublicKey
    {
        /// <summary>
        /// Initializes a new instance of the SshPublicKey class.
        /// </summary>
        public SshPublicKey()
        {
          CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the SshPublicKey class.
        /// </summary>
        /// <param name="path">Specifies the full path on the created VM where
        /// SSH public key is stored. If the file already exists, the specified
        /// key is appended to the file.</param>
        /// <param name="keyData">Certificate public key used to authenticate
        /// to the VM through SSH. The certificate must be in Pem format with
        /// or without headers.</param>
        public SshPublicKey(string path = default(string), string keyData = default(string))
        {
            Path = path;
            KeyData = keyData;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets specifies the full path on the created VM where SSH
        /// public key is stored. If the file already exists, the specified key
        /// is appended to the file.
        /// </summary>
        [JsonProperty(PropertyName = "path")]
        public string Path { get; set; }

        /// <summary>
        /// Gets or sets certificate public key used to authenticate to the VM
        /// through SSH. The certificate must be in Pem format with or without
        /// headers.
        /// </summary>
        [JsonProperty(PropertyName = "keyData")]
        public string KeyData { get; set; }

    }
}


text:
using System.Threading.Tasks;
using Journalist.EventStore.Events;
using Journalist.EventStore.Events.Mutation;
using Journalist.EventStore.Journal;
using Journalist.EventStore.Streams;

namespace Journalist.EventStore.Connection
{
    public class PersistentEventStreamReaderFactory : IEventStreamReaderFactory
    {
        private readonly EventStreamReaderId m_readerId;
        private readonly IEventJournal m_journal;
        private readonly IEventStoreConnectionState m_connectionState;
        private readonly IEventMutationPipeline m_mutationPipeline;
        private readonly EventStreamConsumerConfiguration m_configuration;

        public PersistentEventStreamReaderFactory(
            EventStreamReaderId readerId,
            IEventJournal journal,
            IEventStoreConnectionState connectionState,
            IEventMutationPipeline mutationPipeline,
            EventStreamConsumerConfiguration configuration)
        {
            Require.NotNull(readerId, "readerId");
            Require.NotNull(journal, "journal");
            Require.NotNull(connectionState, "connectionState");
            Require.NotNull(mutationPipeline, "mutationPipeline");
            Require.NotNull(configuration, "configuration");

            m_readerId = readerId;
            m_journal = journal;
            m_connectionState = connectionState;
            m_mutationPipeline = mutationPipeline;
            m_configuration = configuration;
        }

        public async Task<IEventStreamReader> CreateAsync()
        {
            var cursor = await m_journal.OpenEventStreamCursorAsync(
                m_configuration.StreamName,
                m_readerId,
                Constants.Settings.EVENT_SLICE_SIZE);

            return new EventStreamReader(
                m_configuration.StreamName,
                m_connectionState,
                cursor,
                m_mutationPipeline);
        }
    }
}


text:
import { Meteor } from 'meteor/meteor';
import { ReactiveVar } from 'meteor/reactive-var';
import { FlowRouter } from 'meteor/kadira:flow-router';
import { Session } from 'meteor/session';
import { Template } from 'meteor/templating';

import { settings } from '../../../../settings';
import { KonchatNotification } from '../../lib/notification';

Template.secretURL.helpers({
	registrationAllowed() {
		const { hashIsValid } = Template.instance();
		return settings.get('Accounts_RegistrationForm') === 'Secret URL' && hashIsValid && hashIsValid.get();
	},
	ready() {
		const instance = Template.instance();
		return typeof instance.subscriptionsReady === 'function' && instance.subscriptionsReady() && instance.hashReady && instance.hashReady.get();
	},
});

Template.secretURL.onCreated(function() {
	this.hashIsValid = new ReactiveVar(false);
	this.hashReady = new ReactiveVar(false);
	Meteor.call('checkRegistrationSecretURL', FlowRouter.getParam('hash'), (err, success) => {
		this.hashReady.set(true);
		if (success) {
			Session.set('loginDefaultState', 'register');
			KonchatNotification.getDesktopPermission();
			return this.hashIsValid.set(true);
		}
		return this.hashIsValid.set(false);
	});
});


text:
'use strict';

// Use application configuration module to register a new module
ApplicationConfiguration.registerModule('offers',['angularUtils.directives.dirPagination', 'ui.tinymce']);


text:
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.21.0.4666 modeling language!*/

// line 74 "DMMRelationshipHierarchy.ump"
// line 167 "DMMRelationshipHierarchy.ump"
public class IsPartOfSignatureOf extends ModelRelationship
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public IsPartOfSignatureOf()
  {
    super();
  }

  //------------------------
  // INTERFACE
  //------------------------

  public void delete()
  {
    super.delete();
  }

}


text:
If you wish to translate Try Elixir into another language, please create a fork
and submit a pull request. Copy the files in `priv/static/tutorial/en` to a new
folder and begin translating. Code examples must remain untouched.

When you're done translating the tutorial files, add the new folder name to this
[line](https://github.com/tryelixir/tryelixir/blob/master/priv/static/js/tryelixir.js#L6)
in `priv/static/js/tryelixir.js`.


text:
<!DOCTYPE html>

    <meta charset="UTF-8">
    <title>Client Side Pagination in DataGrid - jQuery EasyUI Demo</title>
    <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
    <link rel="stylesheet" type="text/css" href="../demo.css">

Client Side Pagination in DataGrid

This sample shows how to implement client side pagination in DataGrid.

        Inv No
        Date
        Name
        Amount
        Price
        Cost
        Note


text:
<#############################################################################
The DoPx module provides a rich set of commands that extend the automation
capabilities of the DigitalOcean (DO) cloud service. These commands make it
easier to manage your DigitalOcean environment from Windows PowerShell. When
used with the LinuxPx module, you can manage your entire DigitalOcean
environment from one shell.

Copyright 2014 Kirk Munro

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#############################################################################>

#region Initialize the module.

Invoke-Snippet -Name Module.Initialize

#endregion

#region Initialize module-specific properties.

$DigitalOceanEndpointUri = 'https://api.digitalocean.com/v2'

#endregion

#region Import helper (private) function definitions.

Invoke-Snippet -Name ScriptFile.Import -Parameters @{
    Path = Join-Path -Path $PSModuleRoot -ChildPath helpers
}

#endregion

#region Import public function definitions.

Invoke-Snippet -Name ScriptFile.Import -Parameters @{
    Path = Join-Path -Path $PSModuleRoot -ChildPath functions
}

#endregion


text:
layout: page
title: Scholar Systems Show
date: 2016-05-24
author: Michael Stanley
tags: weekly links, java
status: published
summary: Sed rutrum at nulla quis pellentesque. Donec.
banner: images/banner/office-01.jpg
booking:
  startDate: 11/25/2017
  endDate: 11/30/2017
  ctyhocn: CLESLHX
  groupCode: SSS
published: true
---
Nunc tempus ac eros at suscipit. Integer dignissim maximus eros, et interdum lectus mattis et. Aenean tempor sapien vitae enim scelerisque porta. Ut in erat congue, interdum ipsum et, imperdiet lacus. Proin laoreet condimentum erat in placerat. Mauris sodales mi eget metus dapibus molestie. Fusce eget orci id tellus venenatis dictum a non leo. In ornare massa ipsum, et rutrum lectus mollis vel.

1 Integer a leo ac tellus vulputate luctus
1 Nullam fringilla ligula ac erat mollis sagittis
1 Fusce nec arcu suscipit, ultrices enim a, iaculis neque
1 Fusce aliquet tortor vitae metus rutrum, quis consectetur arcu malesuada.

Aliquam finibus tortor eros, nec malesuada justo vehicula laoreet. Maecenas maximus, ex id mattis luctus, tortor nisi rutrum odio, sit amet rutrum odio mi ut nisi. Phasellus et condimentum sapien. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed eget tempor est. Curabitur nec pulvinar nisi. Proin euismod rhoncus turpis, sit amet malesuada leo dapibus ut. Nullam sagittis malesuada placerat. In luctus condimentum orci ac tincidunt. Ut vitae quam quis nisi pharetra laoreet. Nullam mattis sem ac magna fringilla euismod. Nunc porttitor tellus a turpis hendrerit, nec interdum ante mattis.
Praesent purus enim, accumsan at risus eget, venenatis scelerisque felis. Aliquam eleifend lectus pretium arcu porttitor hendrerit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec nec lectus diam. Mauris quis sapien tempus, laoreet est eget, ornare nulla. Integer ac tempor leo. Integer congue risus at lacinia eleifend. Quisque a facilisis libero, non suscipit quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam sollicitudin purus quis tempus vulputate.


text:
package sr_eels.deprecated;

import java.util.Arrays;

import ij.IJ;
import ij.ImagePlus;
import ij.gui.GenericDialog;
import ij.measure.Calibration;
import ij.plugin.Duplicator;
import ij.plugin.filter.ExtendedPlugInFilter;
import ij.plugin.filter.PlugInFilterRunner;
import ij.process.FloatProcessor;
import ij.process.ImageProcessor;

/**
 * This plugin is used to correct SR-EELS data that shows a geometric
 * aberration. This aberration is visible in SR-EELS data recorded with a Zeiss
 * in-column Omega filter. Using a Gatan post-column filter the aberration may
 * be corrected by the filter itself. The correction consists of two steps. The
 * first is to identify the inclined border of the spectrum.
 * {@link SR_EELS_CorrectionPlugin} performs the first step. The second step is
 * to process the SR-EELS data to correct the aberration.
 * {@link SR_EELS_CorrectionPlugin} will run
 * {@link SR_EELS_CorrectionOnlyPlugin} subsequently, but it is possible to use
 * {@link SR_EELS_CorrectionOnlyPlugin} to run the correction only. It is
 * necessary to run {@link SR_EELS_CorrectionOnlyPlugin} on a composite image
 * that contains the spectrum border as a separate channel. For faster
 * processing the energy loss direction has to be the y-axis. Images with the
 * energy loss direction at the x-axis will be rotated during processing.
 *
 * @author Michael Entrup b. Epping <michael.entrup@wwu.de>
 */
public class SR_EELS_CorrectionOnlyPlugin implements ExtendedPlugInFilter {

	/**
	 * DOES_32 | NO_CHANGES | FINAL_PROCESSING
	 */
	private final int FLAGS = STACK_REQUIRED | DOES_32 | NO_CHANGES |
		FINAL_PROCESSING;
	/**
	 * The plugin will be aborted.
	 */
	private final int CANCEL = 0;
	/**
	 * The plugin will continue with the next step.
	 */
	private final int OK = 1;
	/**
	 * The stack created by {@link SR_EELS_CorrectionPlugin}. No changes will be
	 * done to this {@link ImagePlus}.
	 */
	private ImagePlus input;
	/**
	 * An {@link ImagePlus} containing the corrected data.
	 */
	private ImagePlus result;
	/**
	 * A user defined value for the new spectrum width that disables the auto
	 * detection if not 0.
	 */
	private int optionalSpecWidth = 0;
	/**
	 * If the input contains processed borders (linear fit) and unprocessed
	 * borders this {@link Boolean} is used to select one.
	 */
	private boolean useUnprocessedBorders = false;
	/**
	 * Determines if the image has to be rotated before and after processing.
	 */
	private boolean rotate;
	/**
	 * the {@link Calibration} of the input stack.
	 */
	private Calibration calibration;

	/*
	 * (non-Javadoc)
	 *
	 * @see ij.plugin.filter.PlugInFilter#setup(java.lang.String, ij.ImagePlus)
	 */
	@Override
	public int setup(final String arg, final ImagePlus imp) {
		if (arg.equals("final")) {
			if (rotate == true) {
				input = null;
				IJ.run(result, "Rotate 90 Degrees Left", "");
			}
			result.setCalibration(calibration);
			result.show();
			// TODO Show a log dialog and write some log messages.
			return DONE;
		}
		return FLAGS;
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see ij.plugin.filter.PlugInFilter#run(ij.process.ImageProcessor)
	 */
	@Override
	public void run(final ImageProcessor ip) {
		correctData();
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see ij.plugin.filter.ExtendedPlugInFilter#showDialog(ij.ImagePlus, java.lang.String,
	 * ij.plugin.filter.PlugInFilterRunner)
	 */
	@Override
	public int showDialog(final ImagePlus imp, final String command,
		final PlugInFilterRunner pfr)
	{
		if (imp.getStackSize() != 2 & imp.getStackSize() != 3) {
			IJ.error("Wrong Image", "The stack has not a size of 2 or 3.\n" +
				"Image 1: The detected borders.\n" +
				"(Image 2: The unprocessed borders.)\n" +
				"Image 2(3): The original SR-EELS data.");
			return DONE;
		}
		input = imp;
		calibration = imp.getCalibration();
		if (showParameterDialog(command) == OK) {
			if (rotate) {
				final ImagePlus temp = input;
				input = new Duplicator().run(input, 1, input.getStackSize(), 1, 1, 1,
					1);
				temp.unlock();
				IJ.run(input, "Rotate 90 Degrees Right", "");
			}
			return FLAGS;
		}
		return DONE;
	}

	/**
	 * A {@link GenericDialog} is displayed to setup the correction.
	 *
	 * @param title Prefix of the window title.
	 * @return true for Ok and false for Cancel.
	 */
	private int showParameterDialog(final String title) {
		final GenericDialog gd = new GenericDialog(title +
			" - set correction parameters");
		final String[] items = { "x-axis", "y-axis" };
		// Try to make a good default selection.
		final String selectedItem = ((input.getWidth() >= input.getHeight())
			? items[0] : items[1]);
		gd.addChoice("Energy loss on...", items, selectedItem);
		gd.addNumericField("Predefined spectrum width:", optionalSpecWidth, 0, 4,
			"pixel");
		gd.addMessage(
			"(If you choose 0, the width will be set by the automatically.)");
		if (input.getStackSize() == 3) {
			gd.addCheckbox("Use unprocessed borders", false);
		}
		gd.showDialog();
		if (gd.wasOKed()) {
			// for faster processing the energy loss axis has to be the y-axis.
			final String axis = gd.getNextChoice();
			if (axis.equals("x-axis")) {
				rotate = true;
			}
			else if (axis.equals("y-axis")) {
				rotate = false;
			}
			optionalSpecWidth = (int) gd.getNextNumber();
			if (input.getStackSize() == 3) {
				useUnprocessedBorders = gd.getNextBoolean();
			}
			return OK;
		}
		return CANCEL;
	}

	/**
	 * This is the correction of the SR-EELS data.
	 */
	private void correctData() {
		FloatProcessor fp_borders;
		// By default the first image of the stack shows the borders.
		// If the first image of the stack shows a processed border, the second
		// image shows the unprocessed border.
		if (useUnprocessedBorders) {
			fp_borders = (FloatProcessor) input.getStack().getProcessor(2);
		}
		else {
			fp_borders = (FloatProcessor) input.getStack().getProcessor(1);
		}
		FloatProcessor fp_data;
		// You have to check if the stack contains 2 or 3 images to get the
		// input image.
		if (input.getStackSize() == 2) {
			fp_data = (FloatProcessor) input.getStack().getProcessor(2);
		}
		else {
			if (input.getStackSize() == 3) {
				fp_data = (FloatProcessor) input.getStack().getProcessor(3);
			}
			else {
				IJ.showMessage(
					"
The selected image/stack is not suitable for the correction.
");
				return;
			}
		}
		// read position of borders from the image
		final int[] leftBorderPositions = new int[input.getHeight()];
		final int[] rightBorderPositions = new int[input.getHeight()];
		// the default positions of the borders are the left and the right
		// border of the image
		Arrays.fill(leftBorderPositions, 0);
		Arrays.fill(rightBorderPositions, input.getWidth() - 1);
		int minimumWidth = input.getWidth();
		for (int y = 0; y < input.getHeight(); y++) {
			int count = 2;
			int x = 0;
			while (count > 0 & x < input.getWidth()) {
				if (fp_borders.getf(x, y) != 0) {
					switch (count) {
						case 2:
							leftBorderPositions[y] = x;
							count--;
							break;
						case 1:
							rightBorderPositions[y] = x;
							count--;
							break;
						default:
							break;
					}
				}
				x++;
			}
			// Find the optimal spectrum width but ignore the first and last 1%
			// of the image.
			if (y > 0.01 * input.getHeight() && y < 0.99 * input.getHeight() &&
				rightBorderPositions[y] - leftBorderPositions[y] < minimumWidth)
			{
				minimumWidth = rightBorderPositions[y] - leftBorderPositions[y];
			}
		}
		int newSpecWidth;
		if (optionalSpecWidth == 0) {

			newSpecWidth = minimumWidth;
		}
		else {
			newSpecWidth = optionalSpecWidth;
		}
		final FloatProcessor fp_result = new FloatProcessor(newSpecWidth, fp_data
			.getHeight());
		for (int y = 0; y < fp_data.getHeight(); y++) {
			final int leftIndex = leftBorderPositions[y];
			final int rightIndex = rightBorderPositions[y];
			final int oldWidth = rightIndex - leftIndex;
			// TODO Add an intensity correction for round borders.
			double sumNewIntensity = 0;
			for (int x = 0; x < newSpecWidth; x++) {
				// a linear scaling is used to calculate the new values
				final float x0 = 1.0f * oldWidth / newSpecWidth * x;
				final float deltaX = (float) (x0 - Math.floor(x0));
				final int xLeft = (int) Math.floor(x0);
				final int xRight = (int) Math.ceil(x0);
				final float valueLeft = fp_data.getf(xLeft + leftIndex, y);
				final float valueRight = fp_data.getf(xRight + leftIndex, y);
				final float newValue = deltaX * (valueRight - valueLeft) + valueLeft;
				sumNewIntensity += newValue;
				fp_result.setf(x, y, newValue);
			}
			// the sum of all intensities in an image line stays the same
			double sumIntensity = 0;
			for (int x = leftIndex; x < rightIndex; x++) {
				sumIntensity += fp_data.getf(x, y);
			}
			// each pixel is normalised to maintain the sum of all intensities
			// in an image line.
			for (int x = 0; x < newSpecWidth; x++) {
				fp_result.setf(x, y, (float) (sumIntensity / sumNewIntensity * fp_result
					.getf(x, y)));
			}
		}
		result = new ImagePlus("Corrected Spectrum", fp_result);
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see ij.plugin.filter.ExtendedPlugInFilter#setNPasses(int)
	 */
	@Override
	public void setNPasses(final int nPasses) {
		// This method is not used.
	}
}