internal override void ProcessDirective(string directiveName, IDictionary directive)
 {
     if (StringUtil.EqualsIgnoreCase(directiveName, "outputcache"))
     {
         if (!this.FInDesigner)
         {
             if (this._outputCacheSettings == null)
             {
                 this._outputCacheSettings = new System.Web.UI.OutputCacheParameters();
             }
             if (this._outputCacheDirective != null)
             {
                 throw new HttpException(System.Web.SR.GetString("Only_one_directive_allowed", new object[] { directiveName }));
             }
             this.ProcessOutputCacheDirective(directiveName, directive);
             this._outputCacheDirective = directive;
         }
     }
     else if (StringUtil.EqualsIgnoreCase(directiveName, "reference"))
     {
         if (!this.FInDesigner)
         {
             VirtualPath andRemoveVirtualPathAttribute = Util.GetAndRemoveVirtualPathAttribute(directive, "virtualpath");
             bool        flag  = false;
             bool        flag2 = false;
             VirtualPath path2 = Util.GetAndRemoveVirtualPathAttribute(directive, "page");
             if (path2 != null)
             {
                 if (andRemoveVirtualPathAttribute != null)
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive"));
                     return;
                 }
                 andRemoveVirtualPathAttribute = path2;
                 flag = true;
             }
             path2 = Util.GetAndRemoveVirtualPathAttribute(directive, "control");
             if (path2 != null)
             {
                 if (andRemoveVirtualPathAttribute != null)
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive"));
                     return;
                 }
                 andRemoveVirtualPathAttribute = path2;
                 flag2 = true;
             }
             if (andRemoveVirtualPathAttribute == null)
             {
                 base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive"));
             }
             else
             {
                 Type referencedType = base.GetReferencedType(andRemoveVirtualPathAttribute);
                 if (referencedType == null)
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive_attrib", new object[] { andRemoveVirtualPathAttribute }));
                 }
                 if (flag && !typeof(Page).IsAssignableFrom(referencedType))
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive_attrib", new object[] { andRemoveVirtualPathAttribute }));
                 }
                 if (flag2 && !typeof(UserControl).IsAssignableFrom(referencedType))
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive_attrib", new object[] { andRemoveVirtualPathAttribute }));
                 }
                 Util.CheckUnknownDirectiveAttributes(directiveName, directive);
             }
         }
     }
     else
     {
         base.ProcessDirective(directiveName, directive);
     }
 }
 internal override void ProcessDirective(string directiveName, IDictionary directive)
 {
     if (StringUtil.EqualsIgnoreCase(directiveName, "outputcache"))
     {
         if (!this.FInDesigner)
         {
             if (this._outputCacheSettings == null)
             {
                 this._outputCacheSettings = new System.Web.UI.OutputCacheParameters();
             }
             if (this._outputCacheDirective != null)
             {
                 throw new HttpException(System.Web.SR.GetString("Only_one_directive_allowed", new object[] { directiveName }));
             }
             this.ProcessOutputCacheDirective(directiveName, directive);
             this._outputCacheDirective = directive;
         }
     }
     else if (StringUtil.EqualsIgnoreCase(directiveName, "reference"))
     {
         if (!this.FInDesigner)
         {
             VirtualPath andRemoveVirtualPathAttribute = Util.GetAndRemoveVirtualPathAttribute(directive, "virtualpath");
             bool flag = false;
             bool flag2 = false;
             VirtualPath path2 = Util.GetAndRemoveVirtualPathAttribute(directive, "page");
             if (path2 != null)
             {
                 if (andRemoveVirtualPathAttribute != null)
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive"));
                     return;
                 }
                 andRemoveVirtualPathAttribute = path2;
                 flag = true;
             }
             path2 = Util.GetAndRemoveVirtualPathAttribute(directive, "control");
             if (path2 != null)
             {
                 if (andRemoveVirtualPathAttribute != null)
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive"));
                     return;
                 }
                 andRemoveVirtualPathAttribute = path2;
                 flag2 = true;
             }
             if (andRemoveVirtualPathAttribute == null)
             {
                 base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive"));
             }
             else
             {
                 Type referencedType = base.GetReferencedType(andRemoveVirtualPathAttribute);
                 if (referencedType == null)
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive_attrib", new object[] { andRemoveVirtualPathAttribute }));
                 }
                 if (flag && !typeof(Page).IsAssignableFrom(referencedType))
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive_attrib", new object[] { andRemoveVirtualPathAttribute }));
                 }
                 if (flag2 && !typeof(UserControl).IsAssignableFrom(referencedType))
                 {
                     base.ProcessError(System.Web.SR.GetString("Invalid_reference_directive_attrib", new object[] { andRemoveVirtualPathAttribute }));
                 }
                 Util.CheckUnknownDirectiveAttributes(directiveName, directive);
             }
         }
     }
     else
     {
         base.ProcessDirective(directiveName, directive);
     }
 }