Uploaded image for project: 'XalanJ2'
  1. XalanJ2
  2. XALANJ-997

java.lang.OutOfMemoryError when processing large CALS tables - memory leak?

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Cannot Reproduce
    • 2.3
    • None
    • None
    • Operating System: Windows 9x
      Platform: PC
    • 8879

    Description

      Our application is an SGML to HTML rendering tool. We validate the SGML,
      convert to XML and transform to XML using XSLT.
      A significant portion of the data is CALS tables and we have borrowed from Norm
      Walsh's DocBook code to perform these conversions.
      When processing large tables, Xalan crashes with a java.lang.OutOfMemoryError
      and no further information.
      When I isolated which tables were causing the crash, I processed them
      individually. By removing some rows and entries I finally got the table to
      render but as soon as I add one entry back in, the crash will reoccur.

      This data is rendered successfully and properly using other XSLT processors
      such as Saxon. In a comparison (admittedly not complete) of Saxon and Xalan,
      both seemed to be returning exactly the same values and iterating the same
      number of times right up to the point where Xalan crashed.

      Our client is already using Xalan for other purposes and wishes to remain
      consistent in their toolset but will be unable to unless this problem is
      remedied. They don't seem to receptive to the 'If tables crash it, don't use
      tables!' solution.

      Below is the xslt code for processing the tables followed by the XML to be
      processed. Simply using the XML as your input with this xslt code will
      reproduce our error.

      Thanks

      ---------------------- cals_table.xsl

      <?xml version='1.0'?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version='1.0'>

      <xsl:param name="default.table.width" select="'80%'"/>

      <!-- ************************************************* -->

      <!-- ************************************************* -->
      <!-- Most of the following code was borrowed from Norm Walsh -->

      <xsl:template name="OUTPUT-ENTRY-ATTRIBUTES"/>

      <xsl:template match="table">
      <xsl:apply-templates/>
      </xsl:template>

      <xsl:template match="tgroup">
      <table>
      <xsl:if test="../@pgwide=1">
      <xsl:attribute name="width">100%</xsl:attribute>
      </xsl:if>

      <xsl:attribute name="cellpadding">6</xsl:attribute>

      <xsl:choose>
      <xsl:when test="../@frame='all'">
      <xsl:attribute name="border">1</xsl:attribute>
      </xsl:when>
      <xsl:when test="../@frame='none'">
      <xsl:attribute name="border">0</xsl:attribute>
      </xsl:when>
      <xsl:when test="../@frame='bottom'">
      <xsl:attribute name="border">1</xsl:attribute>
      </xsl:when>
      <xsl:when test="../@frame='top'">
      <xsl:attribute name="border">1</xsl:attribute>
      </xsl:when>
      <xsl:when test="../@frame='sides'">
      <xsl:attribute name="border">border</xsl:attribute>
      </xsl:when>
      <xsl:when test="../@frame='topbot'">
      <xsl:attribute name="border">1</xsl:attribute>
      </xsl:when>
      <xsl:otherwise>
      <xsl:attribute name="border">1</xsl:attribute>
      </xsl:otherwise>
      </xsl:choose>

      <xsl:variable name="colgroup">
      <colgroup>
      <xsl:call-template name="generate.colgroup">
      <xsl:with-param name="cols" select="@cols"/>
      </xsl:call-template>
      </colgroup>
      </xsl:variable>

      <xsl:variable name="table.width">
      <xsl:choose>
      <xsl:when test="$default.table.width = ''">
      <xsl:text>100%</xsl:text>
      </xsl:when>
      <xsl:otherwise>
      <xsl:value-of select="$default.table.width"/>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:variable>

      <xsl:attribute name="width">
      <xsl:value-of select="$table.width"/>
      </xsl:attribute>

      <xsl:copy-of select="$colgroup"/>

      <xsl:apply-templates/>

      </table>
      <xsl:text disable-output-escaping="yes"><br/></xsl:text>
      <xsl:text disable-output-escaping="yes"><br/></xsl:text>
      </xsl:template>

      <xsl:template match="colspec"></xsl:template>

      <xsl:template match="spanspec"></xsl:template>

      <xsl:template match="thead|tfoot">
      <xsl:element name="

      {name(.)}

      ">
      <xsl:if test="@align">
      <xsl:attribute name="align">
      <xsl:value-of select="@align"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@char">
      <xsl:attribute name="char">
      <xsl:value-of select="@char"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@charoff">
      <xsl:attribute name="charoff">
      <xsl:value-of select="@charoff"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@valign">
      <xsl:attribute name="valign">
      <xsl:value-of select="@valign"/>
      </xsl:attribute>
      </xsl:if>

      <xsl:apply-templates/>
      </xsl:element>
      </xsl:template>

      <xsl:template match="tbody">
      <tbody>
      <xsl:if test="@align">
      <xsl:attribute name="align">
      <xsl:value-of select="@align"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@char">
      <xsl:attribute name="char">
      <xsl:value-of select="@char"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@charoff">
      <xsl:attribute name="charoff">
      <xsl:value-of select="@charoff"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@valign">
      <xsl:attribute name="valign">
      <xsl:value-of select="@valign"/>
      </xsl:attribute>
      </xsl:if>

      <xsl:apply-templates/>
      </tbody>
      </xsl:template>

      <xsl:template match="row">
      <tr>
      <xsl:if test="@align">
      <xsl:attribute name="align">
      <xsl:value-of select="@align"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@char">
      <xsl:attribute name="char">
      <xsl:value-of select="@char"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@charoff">
      <xsl:attribute name="charoff">
      <xsl:value-of select="@charoff"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@valign">
      <xsl:attribute name="valign">
      <xsl:value-of select="@valign"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:apply-templates/>
      </tr>
      </xsl:template>

      <xsl:template match="thead/row/entry">
      <xsl:call-template name="process.cell">
      <xsl:with-param name="cellgi">th</xsl:with-param>
      </xsl:call-template>
      </xsl:template>

      <xsl:template match="tbody/row/entry">
      <xsl:call-template name="process.cell">
      <xsl:with-param name="cellgi">td</xsl:with-param>
      </xsl:call-template>
      </xsl:template>

      <xsl:template match="tfoot/row/entry">
      <xsl:call-template name="process.cell">
      <xsl:with-param name="cellgi">th</xsl:with-param>
      </xsl:call-template>
      </xsl:template>

      <xsl:template name="process.cell">
      <xsl:param name="cellgi">td</xsl:param>
      <xsl:variable name="empty.cell" select="count(node()) = 0"/>

      <xsl:variable name="entry.colnum">
      <xsl:call-template name="entry.colnum"/>
      </xsl:variable>

      <xsl:if test="$entry.colnum != ''">
      <xsl:variable name="prev.entry" select="preceding-sibling::*[1]"/>
      <xsl:variable name="prev.ending.colnum">
      <xsl:choose>
      <xsl:when test="$prev.entry">
      <xsl:call-template name="entry.ending.colnum">
      <xsl:with-param name="entry" select="$prev.entry"/>
      </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>0</xsl:otherwise>
      </xsl:choose>
      </xsl:variable>

      <xsl:call-template name="add-empty-entries">
      <xsl:with-param name="number">
      <xsl:choose>
      <xsl:when test="$prev.ending.colnum = ''">0</xsl:when>
      <xsl:otherwise>
      <xsl:value-of select="$entry.colnum - $prev.ending.colnum - 1"/>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:with-param>
      </xsl:call-template>
      </xsl:if>

      <xsl:element name="{$cellgi}">

      <xsl:if test="@spanname">
      <xsl:variable name="namest"
      select="ancestor::tgroup/spanspec[@spanname=./@spanname]/@namest"/>
      <xsl:variable name="nameend"
      select="ancestor::tgroup/spanspec[@spanname=./@spanname]/@nameend"/>
      <xsl:variable name="colst"
      select="ancestor::*[colspec/@colname=$namest]/colspec
      [@colname=$namest]/@colnum"/>
      <xsl:variable name="colend"
      select="ancestor::*[colspec/@colname=$nameend]/colspec
      [@colname=$nameend]/@colnum"/>
      <xsl:attribute name="colspan"><xsl:value-of select="number($colend) -
      number($colst) + 1"/></xsl:attribute>
      </xsl:if>

      <xsl:if test="@morerows">
      <xsl:attribute name="rowspan">
      <xsl:value-of select="@morerows+1"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@namest">
      <xsl:attribute name="colspan">
      <xsl:call-template name="calculate.colspan"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@align">
      <xsl:attribute name="align">
      <xsl:value-of select="@align"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@char">
      <xsl:attribute name="char">
      <xsl:value-of select="@char"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@charoff">
      <xsl:attribute name="charoff">
      <xsl:value-of select="@charoff"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="@valign">
      <xsl:attribute name="valign">
      <xsl:value-of select="@valign"/>
      </xsl:attribute>
      </xsl:if>

      <xsl:if test="@rowsep='1'">
      <xsl:attribute name="style">border-bottom:thin solid
      black</xsl:attribute>
      </xsl:if>

      <xsl:if test="not(preceding-sibling::*)
      and ancestor::row/@id">
      <a name="

      {ancestor::row/@id}

      "/>
      </xsl:if>

      <xsl:if test="@id">
      <a name="

      {@id}

      "/>
      </xsl:if>

      <xsl:choose>
      <xsl:when test="$empty.cell">
      <xsl:text> </xsl:text>
      </xsl:when>
      <xsl:otherwise>
      <xsl:apply-templates/>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:element>
      </xsl:template>

      <xsl:template name="add-empty-entries">
      <xsl:param name="number" select="'0'"/>
      <xsl:choose>
      <xsl:when test="$number <= 0"></xsl:when>
      <xsl:otherwise>
      <td> </td>
      <xsl:call-template name="add-empty-entries">
      <xsl:with-param name="number" select="$number - 1"/>
      </xsl:call-template>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:template>

      <xsl:template name="entry.colnum">
      <xsl:param name="entry" select="."/>
      <xsl:choose>
      <xsl:when test="$entry/@colname">
      <xsl:variable name="colname" select="$entry/@colname"/>
      <xsl:variable name="colspec"
      select="$entry/ancestor::tgroup/colspec[@colname=$colname]"/>
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$colspec"/>
      </xsl:call-template>
      </xsl:when>
      <xsl:when test="$entry/@namest">
      <xsl:variable name="namest" select="$entry/@namest"/>
      <xsl:variable name="colspec"
      select="$entry/ancestor::tgroup/colspec[@colname=$namest]"/>
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$colspec"/>
      </xsl:call-template>
      </xsl:when>
      <xsl:when test="count($entry/preceding-sibling::*) = 0">1</xsl:when>
      <xsl:otherwise>
      <xsl:variable name="pcol">
      <xsl:call-template name="entry.ending.colnum">
      <xsl:with-param name="entry" select="$entry/preceding-sibling::*[1]"/>
      </xsl:call-template>
      </xsl:variable>
      <xsl:value-of select="$pcol + 1"/>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:template>

      <xsl:template name="entry.ending.colnum">
      <xsl:param name="entry" select="."/>

      <xsl:choose>
      <xsl:when test="$entry/@colname">
      <xsl:variable name="colname" select="$entry/@colname"/>
      <xsl:variable name="colspec" select="$entry/ancestor::tgroup/colspec
      [@colname=$colname]"/>
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$colspec"/>
      </xsl:call-template>
      </xsl:when>

      <xsl:when test="$entry/@nameend">

      <xsl:variable name="nameend" select="$entry/@nameend"/>
      <xsl:variable name="colspec" select="$entry/ancestor::tgroup/colspec
      [@colname=$nameend]"/>
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$colspec"/>
      </xsl:call-template>
      </xsl:when>
      <xsl:when test="count($entry/preceding-sibling::*) = 0">1</xsl:when>

      <xsl:otherwise>
      <xsl:variable name="pcol">
      <xsl:call-template name="entry.ending.colnum">
      <xsl:with-param name="entry" select="$entry/preceding-sibling::*[1]"/>
      </xsl:call-template>
      </xsl:variable>
      <xsl:value-of select="$pcol + 1"/>
      </xsl:otherwise>
      </xsl:choose>

      </xsl:template>

      <xsl:template name="colspec.colnum">
      <xsl:param name="colspec" select="."/>
      <xsl:choose>
      <xsl:when test="$colspec/@colnum">
      <xsl:value-of select="$colspec/@colnum"/>
      </xsl:when>
      <xsl:when test="$colspec/preceding-sibling::colspec">

      <!--
      <xsl:variable name="prec.colspec.colnum">
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$colspec/preceding-
      sibling::colspec[1]"/>
      </xsl:call-template>
      </xsl:variable>
      -->

      <xsl:value-of select="count($colspec/preceding-sibling::colspec) + 1"/>
      </xsl:when>
      <xsl:otherwise>1</xsl:otherwise>
      </xsl:choose>
      </xsl:template>

      <xsl:template name="generate.colgroup">
      <xsl:param name="cols" select="1"/>
      <xsl:param name="count" select="1"/>
      <xsl:choose>
      <xsl:when test="$count>$cols"></xsl:when>
      <xsl:otherwise>
      <xsl:call-template name="generate.col">
      <xsl:with-param name="countcol" select="$count"/>
      </xsl:call-template>
      <xsl:call-template name="generate.colgroup">
      <xsl:with-param name="cols" select="$cols"/>
      <xsl:with-param name="count" select="$count+1"/>
      </xsl:call-template>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:template>

      <xsl:template name="generate.col">
      <xsl:param name="countcol">1</xsl:param>
      <xsl:param name="colspecs" select="./colspec"/>
      <xsl:param name="count">1</xsl:param>
      <xsl:param name="colnum">1</xsl:param>

      <xsl:choose>
      <xsl:when test="$count>count($colspecs)">
      <xsl:text disable-output-escaping="yes"><col/></xsl:text>
      </xsl:when>
      <xsl:otherwise>
      <xsl:variable name="colspec" select="$colspecs[$count=position()]"/>
      <xsl:variable name="colspec.colnum">
      <xsl:choose>
      <xsl:when test="$colspec/@colnum">
      <xsl:value-of select="$colspec/@colnum"/>
      </xsl:when>
      <xsl:otherwise>
      <xsl:value-of select="$colnum"/>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:variable>

      <xsl:choose>
      <xsl:when test="$colspec.colnum=$countcol">
      <col>
      <xsl:if test="$colspec/@align">
      <xsl:attribute name="align">
      <xsl:value-of select="$colspec/@align"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="$colspec/@char">
      <xsl:attribute name="char">
      <xsl:value-of select="$colspec/@char"/>
      </xsl:attribute>
      </xsl:if>
      <xsl:if test="$colspec/@charoff">
      <xsl:attribute name="charoff">
      <xsl:value-of select="$colspec/@charoff"/>
      </xsl:attribute>
      </xsl:if>
      </col>
      </xsl:when>
      <xsl:otherwise>
      <xsl:call-template name="generate.col">
      <xsl:with-param name="countcol" select="$countcol"/>
      <xsl:with-param name="colspecs" select="$colspecs"/>
      <xsl:with-param name="count" select="$count+1"/>
      <xsl:with-param name="colnum">
      <xsl:choose>
      <xsl:when test="$colspec/@colnum">
      <xsl:value-of select="$colspec/@colnum + 1"/>
      </xsl:when>
      <xsl:otherwise>
      <xsl:value-of select="$colnum + 1"/>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:with-param>
      </xsl:call-template>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:otherwise>
      </xsl:choose>

      </xsl:template>

      <xsl:template name="colspec.colwidth">
      <!-- when this macro is called, the current context must be an entry -->
      <xsl:param name="colname"></xsl:param>
      <!-- .. = row, ../.. = thead|tbody, ../../.. = tgroup -->
      <xsl:param name="colspecs" select="../../../../tgroup/colspec"/>
      <xsl:param name="count">1</xsl:param>
      <xsl:choose>
      <xsl:when test="$count>count($colspecs)"></xsl:when>
      <xsl:otherwise>
      <xsl:variable name="colspec" select="$colspecs[$count=position()]"/>
      <xsl:choose>
      <xsl:when test="$colspec/@colname=$colname">
      <xsl:value-of select="$colspec/@colwidth"/>
      </xsl:when>
      <xsl:otherwise>
      <xsl:call-template name="colspec.colwidth">
      <xsl:with-param name="colname" select="$colname"/>
      <xsl:with-param name="colspecs" select="$colspecs"/>
      <xsl:with-param name="count" select="$count+1"/>
      </xsl:call-template>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:otherwise>
      </xsl:choose>
      </xsl:template>

      <xsl:template name="calculate.colspan">
      <xsl:param name="entry" select="."/>
      <xsl:variable name="namest" select="$entry/@namest"/>
      <xsl:variable name="nameend" select="$entry/@nameend"/>

      <xsl:variable name="scol">
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$entry/ancestor::tgroup/colspec
      [@colname=$namest]"/>
      </xsl:call-template>
      </xsl:variable>
      <xsl:variable name="ecol">
      <xsl:call-template name="colspec.colnum">
      <xsl:with-param name="colspec" select="$entry/ancestor::tgroup/colspec
      [@colname=$nameend]"/>
      </xsl:call-template>
      </xsl:variable>
      <xsl:value-of select="$ecol - $scol + 1"/>
      </xsl:template>

      </xsl:stylesheet>

      ----------------------- table1.xml

      <?xml version="1.0"?>
      <!DOCTYPE erf[
      ]>
      <table
      frame="none"
      tabstyle="squeeze5"
      ><tgroup
      cols="19"
      rowsep="0"
      align="left"
      colsep="0"
      ><colspec
      colname="1"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="2"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="3"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="4"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="5"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="6"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="7"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="8"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="9"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="10"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="11"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="12"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="13"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="14"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="15"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="16"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="17"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="18"
      colwidth="50pt"
      align="left"
      ></colspec><colspec
      colname="19"
      colwidth="79pt"
      align="left"
      ></colspec><tbody
      valign="top"
      ><row
      ><entry
      align="right"
      ></entry><entry
      align="right"
      >1989</entry><entry
      align="right"
      >1990</entry><entry
      align="right"
      >1991</entry><entry
      align="right"
      >1992</entry><entry
      align="right"
      >1993</entry><entry
      align="right"
      >1994</entry><entry
      align="right"
      >1995</entry><entry
      align="right"
      >1996</entry><entry
      align="right"
      >1997</entry><entry
      align="right"
      >1998</entry><entry
      align="right"
      >1999</entry><entry
      align="right"
      >2000</entry><entry
      align="right"
      >2001</entry><entry
      align="right"
      >2002</entry><entry
      align="right"
      >2003</entry><entry
      align="right"
      >2004</entry><entry
      align="right"
      >2005</entry><entry
      align="right"
      >Total</entry></row><row
      ><entry
      align="justify"
      >January</entry><entry
      align="right"
      >532</entry><entry
      align="right"
      >35345</entry><entry
      align="right"
      >3454</entry><entry
      align="right"
      >6436</entry><entry
      align="right"
      >153</entry><entry
      align="right"
      >63474</entry><entry
      align="right"
      >23423</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >3573</entry><entry
      align="right"
      >534</entry><entry
      align="right"
      >886</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >899567</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >1139055</entry></row><row
      ><entry
      align="justify"
      >February</entry><entry
      align="right"
      >54245</entry><entry
      align="right"
      >3453</entry><entry
      align="right"
      >345</entry><entry
      align="right"
      >670</entry><entry
      align="right"
      >14452</entry><entry
      align="right"
      >57</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >625</entry><entry
      align="right"
      >864</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >557775</entry></row><row
      ><entry
      align="justify"
      >March</entry><entry
      align="right"
      >45224</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >34543</entry><entry
      align="right"
      >470</entry><entry
      align="right"
      >15232</entry><entry
      align="right"
      >575</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >3534</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >121330</entry></row><row
      ><entry
      align="justify"
      >April</entry><entry
      align="right"
      >245</entry><entry
      align="right"
      >770</entry><entry
      align="right"
      >7652</entry><entry
      align="right"
      >886</entry><entry
      align="right"
      >1400</entry><entry
      align="right"
      >7565</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >435</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >34202</entry></row><row
      ><entry
      align="justify"
      >May</entry><entry
      align="right"
      >534</entry><entry
      align="right"
      >64564</entry><entry
      align="right"
      >175</entry><entry
      align="right"
      >864</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >5645</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >99567</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >276673</entry></row><row
      ><entry
      align="justify"
      >June</entry><entry
      align="right"
      >5498</entry><entry
      align="right"
      >987</entry><entry
      align="right"
      >1457</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >576</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >34635</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >301565</entry></row><row
      ><entry
      align="justify"
      >July</entry><entry
      align="right"
      >885</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >6473</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >232</entry><entry
      align="right"
      >3456</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >3535</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >278289</entry></row><row
      ><entry
      align="justify"
      >August</entry><entry
      align="right"
      >4543</entry><entry
      align="right"
      >6546</entry><entry
      align="right"
      >273</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >3535</entry><entry
      align="right"
      >5399</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >34635</entry><entry
      align="right"
      >475277</entry></row><row
      ><entry
      align="justify"
      >September</entry><entry
      align="right"
      >7454</entry><entry
      align="right"
      >6346</entry><entry
      align="right"
      >27438</entry><entry
      align="right"
      >34563</entry><entry
      align="right"
      >3532</entry><entry
      align="right"
      >3534</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >232</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >34635</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >34635</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >181956</entry></row><row
      ><entry
      align="justify"
      >October</entry><entry
      align="right"
      >858</entry><entry
      align="right"
      >3453</entry><entry
      align="right"
      >366</entry><entry
      align="right"
      >345</entry><entry
      align="right"
      >23411</entry><entry
      align="right"
      >3454</entry><entry
      align="right"
      >435</entry><entry
      align="right"
      >3543</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >23446</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >2465</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >533573</entry></row><row
      ><entry
      align="justify"
      >November</entry><entry
      align="right"
      >9058</entry><entry
      align="right"
      >432</entry><entry
      align="right"
      >46452</entry><entry
      align="right"
      >367</entry><entry
      align="right"
      >1352</entry><entry
      align="right"
      >2432</entry><entry
      align="right"
      >6442</entry><entry
      align="right"
      >357</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >776453</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >243</entry><entry
      align="right"
      >234</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >1234</entry><entry
      align="right"
      >1020435</entry></row><row
      ><entry
      align="justify"
      >December</entry><entry
      align="right"
      >9585</entry><entry
      align="right"
      >543</entry><entry
      align="right"
      >235</entry><entry
      align="right"
      >867</entry><entry
      align="right"
      >32444</entry><entry
      align="right"
      >23423</entry><entry
      align="right"
      >234634</entry><entry
      align="right"
      >453</entry><entry
      align="right"
      >3452</entry><entry
      align="right"
      >54646</entry><entry
      align="right"
      >353</entry><entry
      align="right"
      >84564</entry><entry
      align="right"
      >4564</entry><entry
      align="right"
      >99576</entry><entry
      align="right"
      >34635</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >1452</entry><entry
      align="right"
      >586878</entry></row><row
      ><entry
      align="justify"
      >Total</entry><entry
      align="right"
      >140650</entry><entry
      align="right"
      >125335</entry><entry
      align="right"
      >130854</entry><entry
      align="right"
      >51813</entry><entry
      align="right"
      >100422</entry><entry
      align="right"
      >121584</entry><entry
      align="right"
      >366295</entry><entry
      align="right"
      >340140</entry><entry
      align="right"
      >189210</entry><entry
      align="right"
      >988808</entry><entry
      align="right"
      >23850</entry><entry
      align="right"
      >201274</entry><entry
      align="right"
      >375353</entry><entry
      align="right"
      >1135533</entry><entry
      align="right"
      >375355</entry><entry
      align="right"
      >499124</entry><entry
      align="right"
      >375357</entry><entry
      align="right"
      >5507008</entry></row></tbody></tgroup></table>

      Attachments

        Activity

          People

            Unassigned Unassigned
            phalferty@newbook.com Peter
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: