function match_Filter($stack = array())
{
$matchrule = "Filter";
$result = $this->construct($matchrule, $matchrule, null);
$_24 = NULL;
do {
$res_20 = $result;
$pos_20 = $this->pos;
$_19 = NULL;
do {
$_17 = NULL;
do {
$res_10 = $result;
$pos_10 = $this->pos;
$matcher = 'match_' . 'PathFilter';
$key = $matcher;
$pos = $this->pos;
$subres = $this->packhas($key, $pos) ? $this->packread($key, $pos) : $this->packwrite($key, $pos, $this->{$matcher}(array_merge($stack, array($result))));
if ($subres !== FALSE) {
$this->store($result, $subres);
$_17 = TRUE;
break;
}
$result = $res_10;
$this->pos = $pos_10;
$_15 = NULL;
do {
$res_12 = $result;
$pos_12 = $this->pos;
$matcher = 'match_' . 'IdentifierFilter';
$key = $matcher;
$pos = $this->pos;
$subres = $this->packhas($key, $pos) ? $this->packread($key, $pos) : $this->packwrite($key, $pos, $this->{$matcher}(array_merge($stack, array($result))));
if ($subres !== FALSE) {
$this->store($result, $subres);
$_15 = TRUE;
break;
}
$result = $res_12;
$this->pos = $pos_12;
$matcher = 'match_' . 'PropertyNameFilter';
$key = $matcher;
$pos = $this->pos;
$subres = $this->packhas($key, $pos) ? $this->packread($key, $pos) : $this->packwrite($key, $pos, $this->{$matcher}(array_merge($stack, array($result))));
if ($subres !== FALSE) {
$this->store($result, $subres);
$_15 = TRUE;
break;
}
$result = $res_12;
$this->pos = $pos_12;
$_15 = FALSE;
break;
} while (0);
if ($_15 === TRUE) {
$_17 = TRUE;
break;
}
$result = $res_10;
$this->pos = $pos_10;
$_17 = FALSE;
break;
} while (0);
if ($_17 === FALSE) {
$_19 = FALSE;
break;
}
$_19 = TRUE;
break;
} while (0);
if ($_19 === FALSE) {
$result = $res_20;
$this->pos = $pos_20;
unset($res_20);
unset($pos_20);
}
while (true) {
$res_23 = $result;
$pos_23 = $this->pos;
$_22 = NULL;
do {
$matcher = 'match_' . 'AttributeFilter';
$key = $matcher;
$pos = $this->pos;
$subres = $this->packhas($key, $pos) ? $this->packread($key, $pos) : $this->packwrite($key, $pos, $this->{$matcher}(array_merge($stack, array($result))));
if ($subres !== FALSE) {
$this->store($result, $subres, "AttributeFilters");
} else {
$_22 = FALSE;
break;
}
$_22 = TRUE;
break;
} while (0);
if ($_22 === FALSE) {
$result = $res_23;
$this->pos = $pos_23;
unset($res_23);
unset($pos_23);
break;
}
}
$_24 = TRUE;
break;
} while (0);
if ($_24 === TRUE) {
return $this->finalise($result);
}
if ($_24 === FALSE) {
return FALSE;
}
}