/// <summary>
        /// Parse the GetMatchesResponse structure.
        /// </summary>
        /// <param name="s">An stream containing GetMatchesResponse structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            List<MAPIString> metaTags = new List<MAPIString>();
            List<MAPIString> additionalHeaders = new List<MAPIString>();
            ParseMAPIMethod parseMAPIMethod = new ParseMAPIMethod();
            parseMAPIMethod.ParseAddtionlHeader(s, out metaTags, out additionalHeaders);
            this.MetaTags = metaTags.ToArray();
            this.AdditionalHeaders = additionalHeaders.ToArray();

            this.StatusCode = ReadUint();
            if (this.StatusCode == 0)
            {
                this.ErrorCode = ReadUint();
                this.HasState = ReadBoolean();
                if (this.HasState)
                {
                    STAT stat = new STAT();
                    stat.Parse(s);
                }
                this.HasMinimalIds = ReadBoolean();
                if (this.HasMinimalIds)
                {
                    this.MinimalIdCount = ReadUint();
                    List<MinimalEntryID> listMinimalEID = new List<MinimalEntryID>();
                    for (int i = 0; i < MinimalIdCount; i++)
                    {
                        MinimalEntryID minialEID = new MinimalEntryID();
                        minialEID.Parse(s);
                        listMinimalEID.Add(minialEID);
                    }
                    this.MinimalIds = listMinimalEID.ToArray();
                }
                this.HasColsAndRows = ReadBoolean();
                if (this.HasColsAndRows)
                {
                    this.Columns = new LargePropertyTagArray();
                    this.Columns.Parse(s);
                    this.RowCount = ReadUint();
                    List<AddressBookPropertyRow> addressBookPropRow = new List<AddressBookPropertyRow>();
                    for (int i = 0; i < this.RowCount; i++)
                    {
                        AddressBookPropertyRow addressPropRow = new AddressBookPropertyRow(this.Columns);
                        addressPropRow.Parse(s);
                        addressBookPropRow.Add(addressPropRow);
                    }
                    this.RowData = addressBookPropRow.ToArray();
                }
            }

            this.AuxiliaryBufferSize = ReadUint();
            if (this.AuxiliaryBufferSize > 0)
            {
                this.AuxiliaryBuffer = new ExtendedBuffer();
                this.AuxiliaryBuffer.Parse(s);
            }
        }
        /// <summary>
        /// Parse the GetMatchesRequest structure.
        /// </summary>
        /// <param name="s">An stream containing GetMatchesRequest structure.</param>
        public override void Parse(Stream s)
        {
            base.Parse(s);
            this.Reserved = ReadUint();
            this.HasState = ReadBoolean();
            if (this.HasState)
            {
                STAT stat = new STAT();
                stat.Parse(s);
                this.State = stat;
            }

            this.HasMinimalIds = ReadBoolean();
            if (this.HasMinimalIds)
            {
                this.MinimalIdCount = ReadUint();
                List<MinimalEntryID> me = new List<MinimalEntryID>();
                for (int i = 0; i < this.MinimalIdCount; i++)
                {
                    MinimalEntryID mEntryId = new MinimalEntryID();
                    mEntryId.Parse(s);
                    me.Add(mEntryId);
                }
                this.MinimalIds = me.ToArray();
            }

            this.InterfaceOptionFlags = ReadUint();

            this.HasFilter = ReadBoolean();
            if (this.HasFilter)
            {
                RestrictionType restriction = new RestrictionType();
                restriction.Parse(s);
                this.Filter = restriction;
            }

            this.HasPropertyName = ReadBoolean();
            if (this.HasPropertyName)
            {
                this.PropertyNameGuid = ReadGuid();
                this.PropertyNameId = ReadUint();
            }

            this.RowCount = ReadUint();
            this.HasColumns = ReadBoolean();
            if (this.HasColumns)
            {
                LargePropertyTagArray largePTA = new LargePropertyTagArray();
                largePTA.Parse(s);
                this.Columns = largePTA;
            }

            this.AuxiliaryBufferSize = ReadUint();
            if (this.AuxiliaryBufferSize > 0)
            {
                this.AuxiliaryBuffer = new ExtendedBuffer();
                this.AuxiliaryBuffer.Parse(s);
            }
            else
            {
                this.AuxiliaryBuffer = null;
            }
        }