internal static CompositeProperty Parse(byte[] propertyBytes, bool useFileTime)
        {
            if (propertyBytes.Length != 12)
            {
                throw new ArgumentException("The length of the composite property must be 12. It is: " + propertyBytes.Length);
            }
            CompositeProperty compositeProperty = new CompositeProperty();

            compositeProperty.integer = BitConverter.ToInt32(propertyBytes, 0);
            if (useFileTime)
            {
                long num = BitConverter.ToInt64(propertyBytes, 4);
                if (num == 0L)
                {
                    compositeProperty.date = new DateTime?(DateTime.MinValue);
                }
                else
                {
                    compositeProperty.date = new DateTime?(DateTime.FromFileTimeUtc(num));
                }
            }
            else
            {
                compositeProperty.date = new DateTime?(DateTime.FromBinary(BitConverter.ToInt64(propertyBytes, 4)));
            }
            return(compositeProperty);
        }
        internal static void ApplyPolicy(MailboxSession mailboxSession, object policy, object flags, object period, object archivePolicy, object archivePeriod, object compactDefaultPolicy, MessageItem messageItem, bool keepRetentionTag)
        {
            if (policy == null && compactDefaultPolicy == null)
            {
                using (Folder folder = Folder.Bind(mailboxSession, messageItem.ParentId, new PropertyDefinition[]
                {
                    StoreObjectSchema.PolicyTag,
                    StoreObjectSchema.RetentionPeriod,
                    StoreObjectSchema.RetentionFlags,
                    StoreObjectSchema.ArchiveTag,
                    StoreObjectSchema.ArchivePeriod,
                    FolderSchema.RetentionTagEntryId
                }))
                {
                    RetentionTagHelper.ReadPolicyFromFolder(folder, out policy, out flags, out period, out archivePolicy, out archivePeriod, out compactDefaultPolicy);
                }
            }
            bool       flag  = false;
            bool       flag2 = false;
            ExDateTime d     = messageItem.ReceivedTime;

            if (d == ExDateTime.MinValue)
            {
                d = messageItem.SentTime;
                if (d == ExDateTime.MinValue)
                {
                    d = ExDateTime.Now;
                }
            }
            if (archivePolicy != null && archivePolicy is byte[] && archivePeriod != null && archivePeriod is int)
            {
                flag2 = true;
            }
            if (policy != null && policy is byte[] && period != null && period is int)
            {
                flag = true;
            }
            if (flag2)
            {
                try
                {
                    messageItem[ItemSchema.ArchiveDate] = d.AddDays((double)((int)archivePeriod));
                }
                catch (ArgumentOutOfRangeException)
                {
                    messageItem[ItemSchema.ArchiveDate] = DateTime.MaxValue;
                }
                messageItem[StoreObjectSchema.ArchiveTag] = (archivePolicy as byte[]);
            }
            else
            {
                messageItem.DeleteProperties(new PropertyDefinition[]
                {
                    StoreObjectSchema.ArchiveTag
                });
                messageItem.DeleteProperties(new PropertyDefinition[]
                {
                    ItemSchema.ArchiveDate
                });
            }
            Guid guid;
            int  num;

            RetentionTagHelper.GetDefaultPolicyInfo(mailboxSession, messageItem, compactDefaultPolicy, out guid, out num);
            if (!keepRetentionTag)
            {
                if (flag)
                {
                    try
                    {
                        messageItem[ItemSchema.RetentionDate] = d.AddDays((double)((int)period));
                    }
                    catch (ArgumentOutOfRangeException)
                    {
                        messageItem[ItemSchema.RetentionDate] = DateTime.MaxValue;
                    }
                    messageItem[StoreObjectSchema.PolicyTag] = (policy as byte[]);
                }
                else
                {
                    if (num > 0)
                    {
                        try
                        {
                            messageItem[ItemSchema.RetentionDate] = d.AddDays((double)num);
                            goto IL_223;
                        }
                        catch (ArgumentOutOfRangeException)
                        {
                            messageItem[ItemSchema.RetentionDate] = DateTime.MaxValue;
                            goto IL_223;
                        }
                    }
                    messageItem.DeleteProperties(new PropertyDefinition[]
                    {
                        ItemSchema.RetentionDate
                    });
IL_223:
                    if (!guid.Equals(Guid.Empty))
                    {
                        messageItem[StoreObjectSchema.PolicyTag] = guid.ToByteArray();
                    }
                    else
                    {
                        messageItem.DeleteProperties(new PropertyDefinition[]
                        {
                            StoreObjectSchema.PolicyTag
                        });
                        if (!flag2)
                        {
                            return;
                        }
                    }
                }
            }
            else if (!flag2)
            {
                return;
            }
            CompositeProperty compositeProperty = new CompositeProperty(num, d.UniversalTime);

            messageItem[ItemSchema.StartDateEtc]          = compositeProperty.GetBytes(true);
            messageItem[StoreObjectSchema.RetentionFlags] = 0;
        }
 internal static CompositeProperty Parse(byte[] propertyBytes)
 {
     return(CompositeProperty.Parse(propertyBytes, false));
 }