------------------------------------------------------------------------
r491786 | kahatlen | 2007-01-02 04:47:47 -0800 (Tue, 02 Jan 2007) | 9 lines

DERBY-2200: Add performance tests to Derby using the junit perf framework

This patch (derby2200.p1.diff.txt) adds
-- few simple performance tests using the junit perf framework.
-- small addition to the reporting in JDBCPerfTestCase to indicate the
   framework the test is running in.

Patch contributed by Sunitha Kambhampati.

------------------------------------------------------------------------
r491769 | kahatlen | 2007-01-02 02:16:53 -0800 (Tue, 02 Jan 2007) | 2 lines

DERBY-2149: Replace Vectors and Hashtables with ArrayLists and HashMaps in RAMTransaction

------------------------------------------------------------------------
r491768 | kahatlen | 2007-01-02 02:13:27 -0800 (Tue, 02 Jan 2007) | 4 lines

DERBY-2100: Convert derbynet/prepStmt.java to JUnit

Patch contributed by ?\195?\152ystein Gr?\195?\184vlen.

------------------------------------------------------------------------
r491632 | bpendleton | 2007-01-01 13:10:20 -0800 (Mon, 01 Jan 2007) | 12 lines

DERBY-2202: DROP PROCEDURE depends on SET SCHEMA

This patch was contributed by Yip Ng (yipng168@gmail.com)

The symptom of this jira is the same as those described in DERBY-1304
for DROP VIEW except that it applies to DROP PROCEDURE, DROP FUNCTION
and DROP SYNONYM statements. (Their bind logic are centralized in
DropAliasNode.) The DropAliasNode's bindStatement() should have created
a dependency on the statement, so when its associated alias descriptor
gets dropped, the statement can be invalidated accordingly. This explains
why subsequent DROP PROCEDURE statement fails.

------------------------------------------------------------------------
r489603 | kahatlen | 2006-12-22 02:25:22 -0800 (Fri, 22 Dec 2006) | 2 lines

DERBY-2199: Use initCause() in BaseJDBCTestCase.assertSQLState().

------------------------------------------------------------------------
r489597 | kahatlen | 2006-12-22 02:10:10 -0800 (Fri, 22 Dec 2006) | 5 lines

DERBY-2152: Support diagnostic vti tables that take parameters, such
as SpaceTable

Fix test failures in jdk6. Patch contributed by A B (qozinx@gmail.com).

------------------------------------------------------------------------
r489053 | kahatlen | 2006-12-20 03:28:07 -0800 (Wed, 20 Dec 2006) | 3 lines

DERBY-2191: Cleanup of FormatableBitSet
Removal of dead code. Patch contributed by Dyre Tjeldvoll.

------------------------------------------------------------------------
r488834 | abrown | 2006-12-19 14:29:22 -0800 (Tue, 19 Dec 2006) | 3 lines

Remove unnecessary imports from NewInvocationNode.java that were added as
part of svn #488827. 

------------------------------------------------------------------------
r488827 | abrown | 2006-12-19 14:10:56 -0800 (Tue, 19 Dec 2006) | 21 lines

DERBY-2152: Support diagnostic "table functions" for querying Derby diagnostic
VTIs that take parameters.  The table functions are exposed via the TABLE
constructor syntax:

  SELECT <rcList> from
    TABLE ( <sysdiag-schema>.<vti-table-name> (<arg-list>) )
    [ AS ] corrlationName

 Note that:

  a. We only support VTI table function names that are in the SYSCS_DIAG schema
  b. The correlation name *is* required, though use of the "AS" keyword
     is optional (section 7.6 of the SQL 2003 spec, "<table primary>").
  c. The argument list can be empty if the underlying VTI supports it.

The VTI table names that have been added are as follows:

  SYSCS_DIAG.SPACE_TABLE maps to org.apache.derby.diag.SpaceTable
  SYSCS_DIAG.ERROR_LOG_READER maps to org.apache.derby.diag.ErrorLogReader
  SYSCS_DIAG.STATEMENT_DURATION maps to org.apache.derby.diag.StatementDuration

------------------------------------------------------------------------
r488803 | rhillegas | 2006-12-19 12:45:20 -0800 (Tue, 19 Dec 2006) | 1 line

DERBY-2129: Record release of 10.2.2.0 in the STATUS file.
------------------------------------------------------------------------
r488672 | bernt | 2006-12-19 05:35:14 -0800 (Tue, 19 Dec 2006) | 1 line

DERBY-2147 Enable code that allows pattern and escape in LIKE predicate to be column references
------------------------------------------------------------------------
r487788 | tmnk | 2006-12-16 03:16:04 -0800 (Sat, 16 Dec 2006) | 1 line

- DERBY-1471 Implement layer B streaming for new methods defined in JDBC4.0 - Patch by Tomohito Nakayama (tomonaka@basil.ocn.ne.jp)
------------------------------------------------------------------------
r487742 | djd | 2006-12-15 16:54:35 -0800 (Fri, 15 Dec 2006) | 2 lines

DERBY-2164 Add some comments to EngineType class and clean up its use.

------------------------------------------------------------------------
r487656 | bpendleton | 2006-12-15 12:44:53 -0800 (Fri, 15 Dec 2006) | 1 line

Correct typo in checkForAutoIncrement javadoc
------------------------------------------------------------------------
r487655 | djd | 2006-12-15 12:37:52 -0800 (Fri, 15 Dec 2006) | 3 lines

DERBY-2179 Temp fix to the test to avoid installing a thread context class loader and
losing the previously installed one. Can be omitted beacuse the actual portion of
the test fixture that uses the class loader is blocked by DERBY-2162.
------------------------------------------------------------------------
r487414 | bpendleton | 2006-12-14 17:01:14 -0800 (Thu, 14 Dec 2006) | 55 lines

DERBY-1644: NPE when inserting values to tbl w/ identity col gen by default

When the VALUES clause encounters multiple rows, it generates a UNION
node tree to combine the rows to be inserted. InsertNode notices the
top-level UNION node and calls the special checkAutoincrementUnion()
method which knows how to recursively traverse the Union tree and
call checkAutoIncrement() on the underlying RowResultSetNode instances
at the leaf level of the tree.

HOWEVER, when the number of columns in the rows in the VALUES clause
is a subset of the number of columns in the table we're inserting into,
the top node of the tree is not a UnionNode, but is rather a
ProjectRestrictNode. This means that we skip past the UnionNode test and
just call checkAutoincrement(), which processes the PRN but doesn't
go down to the RowResultSetNode(s) at the leaf level.

This leaves the ResultColumn instance at the leaf level with a NULL column
descriptor, which causes the NPE during the code generation phase.

And, there is a second, related problem. The enhanceRCLForInsert() call
is also only made at the top level of the tree. However, this call is a
necessary pre-condition for calling checkAutoincrement() because
enhanceRCLForInsert() ensures that the proper ResultColumnList values are
in place prior to the checkAutoincrement() reconciliation of the column lists.

The patch solves these problems by merging the code from InsertNode.bind
together with the current recursive processing in
ResultColumnList.checkAutoincrementUnion() to produce a new recursive
routine, which I have called enhanceAndCheckForAutoincrement(), which will
recursively traverse the ResultSet tree, calling *both* enhanceRCLForInsert()
and checkAutoincrement() on the various nodes in the tree.

Thus the primary ideas involved in this patch are:
 - When an INSERT statement will insert multiple rows from the VALUES
   clause, the compiler will compile the various values into a tree of
   UnionNodes with RowResultSetNodes at the leaves of the three
 - The columns specified in the INSERT statement may be a subset
   of the rows in the table. The "extra" columns need to be constructed by
   the INSERT statement, either by generating NULL values for those
   columns which are nullable, or by compiling a default values for those
   columns which have DEFAULT values, or by generating a value for an IDENTITY
   column which is GENERATED. The work of constructing these extra
   column values is done by genNewRCForInsert.
 - For columns which are GENERATED ALWAYS, we must make sure that
   the INSERT statement doesn't allow the user to insert their own value for
   the generated column.
 - The columns which are specified in the INSERT column spec may not match
   the order in which the columns arise in the table. Therefore, the column
   values may need to be re-ordered by the INSERT statement so that they
   occur in the proper order.
 - In the case when the ResultSet which provides the values for the INSERT
   statement is not just a single node, but is rather a tree of UnionNodes, the
   above processing needs to happen throughout the tree, not just at
   the root node. 

------------------------------------------------------------------------
r487314 | mamta | 2006-12-14 11:25:44 -0800 (Thu, 14 Dec 2006) | 10 lines

EmbedCallableStatement.executeStatement stuffs the output parameter value into
ParameterValueSet object. But ParameterValueSet object which is fetched at the
beginning of the method might not be the valid object if a new activation object
got created for the Statement because it was invalid. I am making changes such
that a fetch of ParameterValueSet object into a local variable is done after
the possiblity of new Activation object has been accounted for. I have also put
javadoc comments for the users of ParameterValueSet object which is returned
by EmbedPreparedStatement.getParms method.


------------------------------------------------------------------------
r487307 | djd | 2006-12-14 11:10:45 -0800 (Thu, 14 Dec 2006) | 3 lines

DERBY-2138 Remove the DataDictionaryContext and instead use the fact there is a single DataDictionary per database.
Cleanup DependableFinder to take a passed in reference to a data dictionary rather than trying to find the data
dictionary from the context.
------------------------------------------------------------------------
r486321 | myrnavl | 2006-12-12 13:22:50 -0800 (Tue, 12 Dec 2006) | 2 lines

DERBY-2143 - 1 more master/canon update

------------------------------------------------------------------------
r486240 | djd | 2006-12-12 09:09:19 -0800 (Tue, 12 Dec 2006) | 2 lines

DERBY-2138 (partial) Cleanup DependableFinder and associated classes by removing an unused method
and adding comments to related classes.
------------------------------------------------------------------------
r486201 | djd | 2006-12-12 07:59:52 -0800 (Tue, 12 Dec 2006) | 5 lines

DERBY-2040 (partial) Change the api for jarReader to return the StorageFile rather
than the (potentially) opened jar. Removes the possibility for user code to
access the jar by calling methods of JarReader directly (and hence abusing any
privileged blocks that would be required while opening the jar). Cleans up JarLoader
by having explict calls to open the stream or file within the class loader.
------------------------------------------------------------------------
r484841 | djd | 2006-12-08 15:23:46 -0800 (Fri, 08 Dec 2006) | 4 lines

DERBY-2138 (partial) Move the booting of the DataDictionary to BasicDatabase from LanguageConnectionFactory
wihc makes more sense once there is a single dictionary per database. Change some calls to obtain a reference
to the DataDictionary from Database instead of looking for the pushed DataDictionaryContext.
DataDictionaryContext context is still pushed, this is an incremental step to removing it.
------------------------------------------------------------------------
r484797 | suresht | 2006-12-08 13:42:14 -0800 (Fri, 08 Dec 2006) | 24 lines

DERBY-606 : SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE fails on (very) large tables

Patch Contributed by Mayuresh Nirhali.

Problem was when Allocated Extent associated with last allocated page is being
compressed, All the pages are found to be free, thus new_highest_page is set to
'-1'. Now, when the CompressSpaceOperation is being logged
CompressedNumber.writeInt method is called with value -1. This method is
written to throw exception if the value is less than Zero, hence the 
IOException occurs. 

This patch addresses the problem  by modifying compress 
log record to write the new Highest Page as an uncompressed number, 
if the database is created/hard-upgrade to 10.3. A new Compress Log 
Record Class is created that will read/write new_highest_page in compressed 
format as before 10.3. Old version of compress log Operation is used on 
recovery, if  the log record needs to be replayed on upgrade 
from old-version of the database and also on soft-upgrade to 10.3. 

Test cases for this bug are  added to the existing OnlineCompressTest.java
test and to the upgrade test .



------------------------------------------------------------------------
r484722 | djd | 2006-12-08 12:02:24 -0800 (Fri, 08 Dec 2006) | 4 lines

DERBY-538 DERBY-2040 Remove the FileResource.getAsStream method as the getAsFile()
method now returns a StorageFile and that class has a getInputStream method.
Incremental step in pushing the JarClassLoader to work off URLs for the jar files
and thus allow use of the standard java.net.URLClassLoader.
------------------------------------------------------------------------
r484672 | djd | 2006-12-08 09:51:55 -0800 (Fri, 08 Dec 2006) | 2 lines

DERBY-2083 Fix broken backup/restore tests. Caused by not updating path through code
when a service is directly accessed as a file rather than through the StorageFactory api.
------------------------------------------------------------------------
r484671 | myrnavl | 2006-12-08 09:48:02 -0800 (Fri, 08 Dec 2006) | 10 lines

DERBY-2143 - patch DERBY_2143_2110_trunk.diff2; 
  - adjusting the translated messages for changes of DERBY_2110
  - adjusting the translated messages for some removed messages that are
    still present in 10.2 (XJ089, XJ092, 01J03, 01J09, 01J11)
  - modifying message XJ125 to only mention TYPE_SCROLL_INSENSITIVE in all
    languages except ja_JP, zh_CN, zh_TW (don't know those characters enough
    to tell what to remove)
  - reformat DBLOOK_usage message to not wrap in 80 characters


------------------------------------------------------------------------
r484615 | bernt | 2006-12-08 06:14:39 -0800 (Fri, 08 Dec 2006) | 1 line

DERBY-1856 Added Session.SECACC and Session.CHKSEC to the switch in DRDAConnThread.run()
------------------------------------------------------------------------
r483822 | djd | 2006-12-07 20:28:06 -0800 (Thu, 07 Dec 2006) | 4 lines

DERBY-2164 (partial) Remove AccessFactory (store) from LanguageConnectionFactory and
instead code can find the AccessFactory from the Transaction object.
The AccessFactory getAccessManager() method already existed but was not exposed
at the highest level.
------------------------------------------------------------------------
r483820 | myrnavl | 2006-12-07 20:22:32 -0800 (Thu, 07 Dec 2006) | 3 lines

DERBY-2143 - adding quote that broke the build


------------------------------------------------------------------------
r483767 | djd | 2006-12-07 17:26:19 -0800 (Thu, 07 Dec 2006) | 2 lines

DERBY-2138 (partial) Couple of additional import cleanups for classes that imported
DataDictionaryContext without using it.
------------------------------------------------------------------------
r483766 | djd | 2006-12-07 17:23:18 -0800 (Thu, 07 Dec 2006) | 1 line

DERBY-2138 (partial) Cleanup imports in functionTests.util that imported DatadictionaryContext but did not use it.
------------------------------------------------------------------------
r483765 | djd | 2006-12-07 17:10:25 -0800 (Thu, 07 Dec 2006) | 2 lines

DERBY-2138 (partial) More import cleanups in iapi/db

------------------------------------------------------------------------
r483762 | djd | 2006-12-07 17:02:01 -0800 (Thu, 07 Dec 2006) | 2 lines

DERBY-2138 (partial) Organize imports in impl/sql/catalog for classes that import DataDictionaryContext but do not use it.

------------------------------------------------------------------------
r483761 | djd | 2006-12-07 16:56:25 -0800 (Thu, 07 Dec 2006) | 2 lines

DERBY-2138 (partial) Cleanup imports on impl/sql/execute classes that imported
DataDictionaryContext without using it.
------------------------------------------------------------------------
r483738 | djd | 2006-12-07 15:45:38 -0800 (Thu, 07 Dec 2006) | 3 lines

DERBY-537 Fix sqlj.replace_jar and sqlj.remove_jar to work under a security manager.
Add a test to test the simple mechanics of the the sqlj functions separated from
the jar files being active on the database class path.
------------------------------------------------------------------------
r483696 | myrnavl | 2006-12-07 14:11:50 -0800 (Thu, 07 Dec 2006) | 2 lines

DERBY-2143 - committing patch DERBY2143_misc for servlet and test docs.

------------------------------------------------------------------------
r483653 | djd | 2006-12-07 12:41:11 -0800 (Thu, 07 Dec 2006) | 7 lines

DERBY-552 Fix fetching resources from an installed jar when the database itself is a jar file.
The old code did not handle the case when the length of the resource (jar) entry was unknown.
New code reads the resource from the JarInputStream into a local byte array and returns a
stream based upon that to the application. This also provides better isolation between
the application and derby, denying user code the ability to read the entire jar or
to prevent correct shutdown of the database. Added utilities to AccessibleByteArrayOutputStream
to enable copying an InputStream into a local array.
------------------------------------------------------------------------
r483642 | fuzzylogic | 2006-12-07 12:12:48 -0800 (Thu, 07 Dec 2006) | 3 lines

Remove NLS comments to prevent possible confusion, fix typo in checklocaleinfo
target

------------------------------------------------------------------------
r483628 | rhillegas | 2006-12-07 11:41:23 -0800 (Thu, 07 Dec 2006) | 1 line

DERBY-2132: Mention JDBC4.0 in the javadoc for EmbeddedDriver. Also briefly describe driver autoloading under Java SE 6.
------------------------------------------------------------------------
r483610 | fuzzylogic | 2006-12-07 11:10:27 -0800 (Thu, 07 Dec 2006) | 3 lines

DERBY-2163: Remove service extension entry from locale jars and derbyrun.jar.
Also remove stale references to COPYRIGHT.

------------------------------------------------------------------------
r483606 | djd | 2006-12-07 10:59:27 -0800 (Thu, 07 Dec 2006) | 3 lines

DERBY-2083 Ensure the store closes the StorageFactory it is using at database shutdown time.
Add shutdown code for the JarStorageFactory to close the jar file it has opened.
Ensure the monitor does not use a stream opened from a StorageFactory after it has called shutdown().
------------------------------------------------------------------------
r483596 | fuzzylogic | 2006-12-07 10:31:18 -0800 (Thu, 07 Dec 2006) | 2 lines

DERBY-2143: Split engine messages for new locales.

------------------------------------------------------------------------
r483532 | abrown | 2006-12-07 08:37:58 -0800 (Thu, 07 Dec 2006) | 11 lines

DERBY-2153:

  1. Create a new JUnit utility file, junit/JAXPFinder.java, that is only
     instantiated when all required XML classes are in the classpath.

  2. Move the import of DocumentBuilderFactory out of junit/XML.java and into
     junit/JAXPFinder.java. This extra level of indirection combined with the
     conditional instantiation of JAXPFinder ensures that we do not attempt to
     instantiate a DocumentBuilderFactory unless we have the necessary JAXP
     classes.

------------------------------------------------------------------------
r483356 | fuzzylogic | 2006-12-06 22:27:34 -0800 (Wed, 06 Dec 2006) | 3 lines

DERBY-2143: Merge revision 483352 to trunk, adds updated localized messages
developed during 10.2 release cycle to trunk.

------------------------------------------------------------------------
r483354 | fuzzylogic | 2006-12-06 22:22:00 -0800 (Wed, 06 Dec 2006) | 2 lines

Add new, empty files for the new localized message files for merge to trunk.

------------------------------------------------------------------------
r483307 | djd | 2006-12-06 16:22:47 -0800 (Wed, 06 Dec 2006) | 1 line

Fix up javadoc warnings in ExecSPSNode.
------------------------------------------------------------------------
r483296 | djd | 2006-12-06 16:04:54 -0800 (Wed, 06 Dec 2006) | 1 line

Fix javadoc errors caused by @see tags that referred to http URLs directly instead of through <a href ... /a>
------------------------------------------------------------------------
r483160 | djd | 2006-12-06 09:39:22 -0800 (Wed, 06 Dec 2006) | 3 lines

DERBY-538 (partial) Move the functionality of InstalledJar into JarLoader since there
was a 1-1 correspondence between the classes following the recent cleanup.

------------------------------------------------------------------------
r483157 | davidvc | 2006-12-06 09:34:43 -0800 (Wed, 06 Dec 2006) | 4 lines

Fixed this so that you can change the user and the calendar, making
this more easily "demoable" without having to change code.  Also
fixed svn:ignore properties for stuff we don't want to check in.

------------------------------------------------------------------------
r483148 | djd | 2006-12-06 08:51:13 -0800 (Wed, 06 Dec 2006) | 3 lines

DERBY-538 (partial) Cleanup the setInvalid methods of JarLoader to remove the option of re-creating the
InstalledJar since it was never used.

------------------------------------------------------------------------
r483108 | djd | 2006-12-06 07:15:29 -0800 (Wed, 06 Dec 2006) | 3 lines

DERBY-538 (partial) Cleanup the jar loading code to consistently use the java.util.jar classes
instead of the java.util.zip classes.

------------------------------------------------------------------------
r482983 | bernt | 2006-12-06 01:26:27 -0800 (Wed, 06 Dec 2006) | 1 line

DERBY-1231 LIKE does not match empty strings when used with a prepared statement.
------------------------------------------------------------------------
r482972 | kahatlen | 2006-12-06 00:51:32 -0800 (Wed, 06 Dec 2006) | 4 lines

DERBY-2155: checkDataSource and checkDataSource30 fail in the tinderbox test

Update master files for DerbyNetClient and fix typo in test output.

------------------------------------------------------------------------
r482894 | fuzzylogic | 2006-12-05 21:03:54 -0800 (Tue, 05 Dec 2006) | 2 lines

Fix build error when compiling just with JDK 1.4

------------------------------------------------------------------------
r482850 | djd | 2006-12-05 16:45:46 -0800 (Tue, 05 Dec 2006) | 4 lines

DERBY-538 (partial) Move the jar based code from JarFileJava2 to InstalledJar and remove JarFileJava2.
Since J2ME/CDC/Foundation and J2SE both support java.util.jar there is no need to have a zip based
implementation (which was for the JDK 1.1 no longer supported). More cleanup will be done to completely
switch over to java.util.jar.
------------------------------------------------------------------------
r482835 | djd | 2006-12-05 16:09:45 -0800 (Tue, 05 Dec 2006) | 3 lines

DERBY-538 (partial) Rename jarFile to InstalledJar so that once JarFileJava2 is merged into it the
java.util.jar.JarFile can be used directly without causing confusion.

------------------------------------------------------------------------
r482812 | djd | 2006-12-05 14:39:35 -0800 (Tue, 05 Dec 2006) | 3 lines

DERBY-538 (partial) Initial step in cleaning up JarFile/JarFileJava2 as a step to having a single class since
all environments Derby runs in supports the java.util.Jar package.

------------------------------------------------------------------------
r482806 | mamta | 2006-12-05 14:19:14 -0800 (Tue, 05 Dec 2006) | 4 lines

Add some sanity code to make sure that the connection is indeed idle when the code expects it to. 
Also, enhanced XA related test to make sure that writable XA transaction following a read-only XA 
transaction works correctly.

------------------------------------------------------------------------
r482717 | djd | 2006-12-05 09:30:34 -0800 (Tue, 05 Dec 2006) | 5 lines

Have EmbedResultSet obtain its EmbedStatement's result set concurrency directly rather than
going through the JDBC method api which in turns requires the check on if the Statement is open.
In this case it's known the Statement is open since it is creating the ResultSet.
Mentioned as one of the optimizatons in DERBY-1876.

------------------------------------------------------------------------
r482529 | fuzzylogic | 2006-12-04 23:02:16 -0800 (Mon, 04 Dec 2006) | 5 lines

DERBY-1529: Add LICENSE and NOTICE files to the Eclipse plugins, update build
instructions

Committed for Rajesh Kartha <kartha02@gmail.com>

------------------------------------------------------------------------
r482435 | djd | 2006-12-04 17:07:43 -0800 (Mon, 04 Dec 2006) | 1 line

DERBY-1808 Changes to the metadata test also require the master file for the upgrade test to be fixed.
------------------------------------------------------------------------
r482433 | abrown | 2006-12-04 16:47:02 -0800 (Mon, 04 Dec 2006) | 32 lines

DERBY-1758 (partial): Enable the lang/XMLBindingTest to run under a security
manager. Changes include all of the following:

 - Updates lang/XMLBindingTest.java so that it will run under the default
testing security manager (i.e. removed the "noSecurityManager()" wrapper).

 - Adds a new property, derbyTesting.jaxpjar, to the default testing policy
file. This property holds the location of the JAXP jar picked up from the
classpath _if_ that jar is external to the JVM. If the jar is either embedded
within, or "endorsed" by, the JVM then this property is unused.

    The JAXP jar is then given permission to read the "extin" testing
directory, which is the directory into which the DTD required by XMLBindingTest
is copied (and thus JAXP has permission to read the DTD file).

 - Adds a new static utility method, "getJAXPParserLocation()", to the
junit/XML.java file. This method instantiates a JAXP object and then uses
the implementation-specific class name to try to find out where the JAXP
jar is located.

- Modifies derbyTesing/junit/build.xml so that junit/XML.java will only
build with 1.4 JVMs and higher. This is required because junit/XML.java
now references a JAXP class that is not defined in 1.3.

 - Updates the "getURL()" method of junit/SecurityManagerSetup.java to account
for situations where a class "code source" is null. Also updates the
"determineClasspath()" method of that class to set the derbyTesting.jaxpjar
property as appropriate.

 - And finally, moves the build order of the derbyTesting/junit directory
so that it is built *before* the derbyTesting/harness directory.

------------------------------------------------------------------------
r482426 | djd | 2006-12-04 16:18:17 -0800 (Mon, 04 Dec 2006) | 2 lines

DERBY-1808 Add inbuilt functions SIGN, SQRT, RAND, RANDOM, COSH, COT, SINH and TANH
Patch contributed by  Richard Wheeldon Email: richard@rswheeldon.com
------------------------------------------------------------------------
r482389 | myrnavl | 2006-12-04 14:20:06 -0800 (Mon, 04 Dec 2006) | 2 lines

DERBY-2037 - tool to flag possible errors in localized message files.

------------------------------------------------------------------------
r482358 | bpendleton | 2006-12-04 13:07:25 -0800 (Mon, 04 Dec 2006) | 33 lines

DERBY-1204: TRIGGER with multi-row INSERT action throws OutOfBounds exception

This patch was contributed by Yip Ng (yipng168@gmail.com)

The statement fails because the bindReferencesClause() method in
CreateTriggerNode did not filter those column references that are not
relevent to the conversion processing for OLD/NEW transition variables.
The above trigger action will have the following parse tree: (roughly)

              InsertNode
                 |
              UnionNode
               /     \
        UnionNode    RowRSNode
         /    \            |
RowRSNode RowRSNode  NumericConstantNode
      |       |                    |
 ColRef    NumericConstantNode    333
      |       |
     n.i     999

Note that the CollectNodesVisitor collects *ALL* the ColumnReferences in
the trigger action. In the above case, it returned 3 column references
nodes. One in the top level Union node, one in top level Union Node's
left child which it is also an UnionNode and the last one is found in
the RowResultSetNode.

The UnionNodes will have a copy of the CRs from its left child and
those CRs will not have its beginOffset set which indicates they are
not relevant for the conversion processing here, so the corrective
action here is to skip these entries.


------------------------------------------------------------------------
r482303 | abrown | 2006-12-04 11:27:08 -0800 (Mon, 04 Dec 2006) | 4 lines

DERBY-2131 (partial): Change privileged block in SqlXmlUtil.serializeToString()
so that it contains as little code as possible.  Also adds a catch block
around the privileged block to unwrap security exceptions.

------------------------------------------------------------------------
r482221 | rhillegas | 2006-12-04 07:37:29 -0800 (Mon, 04 Dec 2006) | 1 line

DERBY-2129: Update STATUS and CHANGES files before generating 10.2.2 release.
------------------------------------------------------------------------
r482129 | kahatlen | 2006-12-04 02:54:53 -0800 (Mon, 04 Dec 2006) | 7 lines

DERBY-2140: BlobClob4BlobTest.testSelfDestructiveClob() fails with
"ERROR X0X95: Operation 'DROP TABLE' cannot be performed on object
'TESTCLOB' because there is an open ResultSet dependent on that
object."

Close ResultSet and Statement in testSelfDestructiveClob.

------------------------------------------------------------------------
r481611 | djd | 2006-12-02 11:38:36 -0800 (Sat, 02 Dec 2006) | 2 lines

Add comment to ModuleFactory.getApplicationProperties() describing its functionality.

------------------------------------------------------------------------
r481602 | djd | 2006-12-02 10:50:26 -0800 (Sat, 02 Dec 2006) | 4 lines

DERBY-2094 (partial) Initial partial implementation of the order entry test transactions using the
defined behaviour from the appendix TPC-C specification. Only stock level added.
Also added a JUnit testing frame work to test the functionality of the operations.

------------------------------------------------------------------------
r481574 | djd | 2006-12-02 08:14:48 -0800 (Sat, 02 Dec 2006) | 1 line

DERBY-1965 Ensure sockets opened by NetworkServerControlImpl are explicitly closed.
------------------------------------------------------------------------
r481467 | djd | 2006-12-01 17:01:11 -0800 (Fri, 01 Dec 2006) | 2 lines

DERBY-2096 Missing file from last commit that broke build.

------------------------------------------------------------------------
r481423 | djd | 2006-12-01 14:06:29 -0800 (Fri, 01 Dec 2006) | 1 line

organize imports (using eclipse) in a number of query nodes, cleans up several unrequired imports of DataDictionayContext.
------------------------------------------------------------------------
r481421 | djd | 2006-12-01 14:00:54 -0800 (Fri, 01 Dec 2006) | 1 line

DERBY-2096 Move remaining methods that are limited to StatementNode from QueryTreeNode.
------------------------------------------------------------------------
r481252 | fernanda | 2006-12-01 06:38:49 -0800 (Fri, 01 Dec 2006) | 3 lines

DERBY-2025 convert lang/updatableResultSet.java to JUnit


------------------------------------------------------------------------
r481181 | kahatlen | 2006-12-01 00:16:09 -0800 (Fri, 01 Dec 2006) | 6 lines

DERBY-2122: Optimize ContainerLock.isCompatible() and RowLock.isCompatible()

Build a bit mask from the compatibility tables in ContainerLock and
RowLock, and replace look-up in two-dimensional array with bitwise
and.

------------------------------------------------------------------------
r481117 | abrown | 2006-11-30 16:19:26 -0800 (Thu, 30 Nov 2006) | 7 lines

DERBY-2131: Use a privileged block when calling out to the JAXP parser
so that users running with a security manager can insert XML values
that reference external DTDs without encountering security exceptions.

This patch does not include any tests; however, relevant test cases
will be enabled as part of DERBY-1758.

------------------------------------------------------------------------
r481114 | myrnavl | 2006-11-30 16:10:15 -0800 (Thu, 30 Nov 2006) | 2 lines

DERBY-2135 - add a note re modifying number of parameters in messages.

------------------------------------------------------------------------
r481026 | rhillegas | 2006-11-30 10:17:08 -0800 (Thu, 30 Nov 2006) | 1 line

DERBY-1919: Commit derby-1919-v01.diff, pointing index.html at the release notes as well as the NOTICE and LICENSE files.
------------------------------------------------------------------------
r480861 | kahatlen | 2006-11-29 23:02:10 -0800 (Wed, 29 Nov 2006) | 2 lines

DERBY-2123: Remove workaround for old JIT bug from StoredPage

------------------------------------------------------------------------
r480664 | mikem | 2006-11-29 10:10:22 -0800 (Wed, 29 Nov 2006) | 3 lines

javadoc fix, removing @return from a void function.


------------------------------------------------------------------------
r480299 | davidvc | 2006-11-28 16:25:20 -0800 (Tue, 28 Nov 2006) | 3 lines

Fixed some formatting/comments and one bugfix.  Also added svn:ignore
to the proper places so things don't accidentally get checked in.

------------------------------------------------------------------------
r480228 | mamta | 2006-11-28 13:54:38 -0800 (Tue, 28 Nov 2006) | 2 lines

Remove imports that are not required.

------------------------------------------------------------------------
r480160 | myrnavl | 2006-11-28 11:13:42 -0800 (Tue, 28 Nov 2006) | 2 lines

DERBY-2110 - removing innocent spaces in the tags

------------------------------------------------------------------------
r479886 | djd | 2006-11-27 20:12:14 -0800 (Mon, 27 Nov 2006) | 2 lines

DERBY-2096 (partial) Move needsSavepoint() to StatementNode, remove QueryTreeNode.bind and optimize.
Have GenericStatement use StatementNode for the head of the statement's query tree.
------------------------------------------------------------------------
r479527 | myrnavl | 2006-11-26 22:37:26 -0800 (Sun, 26 Nov 2006) | 9 lines

DERBY-2110 - correcting typos in a number of messages
- fix involved also updating MessageBuilder.java, because the resulting
  dita file did not correctly replace all quotes when put into html.
- also corrected BlobClob4BlobTest which has the string of message 40X0D
  hardcoded.
- also updated errorCode.out masters, incl. for j9_13 and j9_22, even though
  that's not really needed anymore.


------------------------------------------------------------------------
r479119 | kahatlen | 2006-11-25 04:25:28 -0800 (Sat, 25 Nov 2006) | 4 lines

DERBY-812: Scripts to publish Derby test results

Added licence headers.

------------------------------------------------------------------------
r479044 | kahatlen | 2006-11-24 15:06:41 -0800 (Fri, 24 Nov 2006) | 2 lines

Fixed typo in javadoc.

------------------------------------------------------------------------
r478891 | kahatlen | 2006-11-24 06:32:07 -0800 (Fri, 24 Nov 2006) | 4 lines

DERBY-2116: Test files missing svn:eol-style

Set the svn:eol-style property to native.

------------------------------------------------------------------------
r478883 | kahatlen | 2006-11-24 05:51:37 -0800 (Fri, 24 Nov 2006) | 4 lines

DERBY-2115: Some master files don't have the svn:eol-style property

Set the svn:eol-style property to native for these files.

------------------------------------------------------------------------
r478877 | kahatlen | 2006-11-24 05:33:01 -0800 (Fri, 24 Nov 2006) | 5 lines

DERBY-1434: Client can send incorrect database name to server after
having made multiple connections to different databases.

Patch contributed by Julius Stroffek.

------------------------------------------------------------------------
r478802 | kahatlen | 2006-11-24 00:35:04 -0800 (Fri, 24 Nov 2006) | 4 lines

DERBY-812: Scripts to publish Derby test results

Contributed by Ole Solberg.

------------------------------------------------------------------------
r478622 | bpendleton | 2006-11-23 09:27:39 -0800 (Thu, 23 Nov 2006) | 9 lines

DERBY-1089: NPE inserting a join into a table with a generated column
DERBY-2015: NPE in INSERT .. SELECT with IDENTITY column

When an INSERT ... SELECT statement inserts a GENERATED ALWAYS identity
column, the identity column's column reference is NULL, since that
column does not have a corresponding column in the SELECT list. This
NULL expression needs to be skipped over when remapping column references
from the SELECT column list to the INSERT column list. 

------------------------------------------------------------------------
r478348 | abrown | 2006-11-22 14:30:36 -0800 (Wed, 22 Nov 2006) | 4 lines

DERBY-1758 (partial): Remove the old lang/xmlBinding.java test and the
old xmlSuite.  They have now been replaced with lang/XMLBindingTest.java
and suites/XMLSuite.java, respectively, both of which are run with JUnit.

------------------------------------------------------------------------
r478336 | abrown | 2006-11-22 13:47:23 -0800 (Wed, 22 Nov 2006) | 16 lines

DERBY-1758 (partial):

  1. Updates XMLBindingTest to ignore the Windows line-ending character
     ("\r") when counting characters as part of serialization.

  2. Updates XMLBindingTest to run with NO security manager for now.
     This works toward the "progress not perfection" goal of incremental
     development.  Once the questions surrounding the security policy for
     JAXP have been answered the test can be updated to run with the security
     manager.

  3. Creates a new JUnit suite, suites/XMLSuite.java, to run all of the
     XML JUnit tests, and enables that suite to run as part of
     lang/_Suite.java, which in turn means it is executed as part
     suites.All.

------------------------------------------------------------------------
r478031 | djd | 2006-11-21 20:44:35 -0800 (Tue, 21 Nov 2006) | 1 line

DERBY-2096 (partial) Change the main return type from parsing a statement to a StatementNode.
------------------------------------------------------------------------
r477645 | kahatlen | 2006-11-21 04:10:38 -0800 (Tue, 21 Nov 2006) | 4 lines

DERBY-2102: JDBC.assertFullResultSet should handle byte arrays

Patch contributed by ?\195?\152ystein Gr?\195?\184vlen.

------------------------------------------------------------------------
r477420 | djd | 2006-11-20 16:03:11 -0800 (Mon, 20 Nov 2006) | 5 lines

DERBY-2096 (partial) Rename the optimize() method for StatementNode to optimizeStatement() as a step
in switching the return type of a parse statement to StatementNode. Make optimizeStatement() void
as no implementation ever switches the type and several implementations did not handle the
type switching anyway.

------------------------------------------------------------------------
r477371 | djd | 2006-11-20 14:32:53 -0800 (Mon, 20 Nov 2006) | 5 lines

DERBY-2096 (partial) Rename the bind() method for StatementNode to bindStatement() as a step
in switching the return type of a parse statement to StatementNode. Make bindStatement() void
as no implementation ever switches the type and several implementations did not handle the
type switching anyway.

------------------------------------------------------------------------
r477348 | djd | 2006-11-20 13:30:06 -0800 (Mon, 20 Nov 2006) | 3 lines

Delete three node classes that are not used and have not been modified since the initial contribution.
Also removed them from derby.jar.
HashNodeList, QuantifiedBinaryOperator and QuantifiedUnaryOperator.
------------------------------------------------------------------------
r477168 | kahatlen | 2006-11-20 05:17:11 -0800 (Mon, 20 Nov 2006) | 15 lines

DERBY-1132: Truncation Error with Concat

The Char & Varchar functions were not handled separately to assign to
length for the target type (in the bindExpression() method of
CastNode.java) and thus a default value of 15 was getting assigned to
it (from getColumnDisplaySize() method of DataTypeUtilities class)

Now I added a check for the string types (i.e. both Char & Varchar) in
the source type, and using the operand's maximum length or the maximum
length for that data type (whichever is minimum) and assigning it to
be the length for the target type. Thus avoiding the unwanted
truncation error caused by the default value of 15.

Patch contributed by Saurabh Vyas.

------------------------------------------------------------------------
r476662 | kahatlen | 2006-11-18 15:49:04 -0800 (Sat, 18 Nov 2006) | 2 lines

DERBY-2099: Make BasePage.getPageId() final

------------------------------------------------------------------------
r476645 | myrnavl | 2006-11-18 14:50:22 -0800 (Sat, 18 Nov 2006) | 3 lines

DERBY-1850 - SURTest_ij.sql - after sed-ing for j2ME, missed updating client canon


------------------------------------------------------------------------
r476588 | myrnavl | 2006-11-18 11:02:54 -0800 (Sat, 18 Nov 2006) | 5 lines

DERBY-1850 - jdbcapi/SURTest_ij.sql fails on IBM WCTME 5.7 Foundation (jdkJ2ME Spec v1.0)
- added the required ij.dataSource settings 
- added sedding of first CONNECTION line, to avoid extra master


------------------------------------------------------------------------
r476548 | myrnavl | 2006-11-18 08:03:33 -0800 (Sat, 18 Nov 2006) | 5 lines

DERBY-2049 - parameterMapping and updatableResultset failing with wctme5.7 foundation
- updated j9_foundation output to reflect new messages
- adjusted test 48 to not run BigDecimal queries


------------------------------------------------------------------------
r476425 | myrnavl | 2006-11-17 19:26:40 -0800 (Fri, 17 Nov 2006) | 6 lines

DERBY-1849 - grantRevokeDDL and grantRevokeDDL2.sql fail with ibm wctme5.7_foundation (jdkJ2ME Spec v1.0)
- accepting that triggers are not supported with this jvm
- updated masters to latest syntax changes in test
- stopped NPE by adding ij.dataSource properties to grantRevokeDDL2.out


------------------------------------------------------------------------
r476365 | abrown | 2006-11-17 15:30:51 -0800 (Fri, 17 Nov 2006) | 12 lines

DERBY-1758 (partial): Adds a new JUnit test to replace the old
lang/xmlBinding.java test. The patch does the following:

  - Adds XML file insertion utility methods to junit/XML.java
  - Creates a new JUnit test called lang/XMLBindingTest.java that
    uses the new utility methods to test various binding scenarios
    with Derby's SQL/XML operators.
  - Overloads the TestConfiguration.defaultSuite() method with a boolean
    signature to allow optional addition of CleanDatabaseSetup.
  - Updates lang/XMLTypeAndOpsTest to use the new overloaded defaultSuite()
    method. 

------------------------------------------------------------------------
r476353 | djd | 2006-11-17 15:02:30 -0800 (Fri, 17 Nov 2006) | 2 lines

Remove some unused methods from LanguageConnectionContext,
anyoneBlocked,getAccessFactory,setTransaction
------------------------------------------------------------------------
r476342 | djd | 2006-11-17 14:20:12 -0800 (Fri, 17 Nov 2006) | 3 lines

DERBY-2096 (partial) Change the methods in the grammar (sqlgrammar.jj) that return statements to declare thier
return type as the more specific StatementNode rather than QueryTreeNode.

------------------------------------------------------------------------
r476318 | djd | 2006-11-17 13:14:19 -0800 (Fri, 17 Nov 2006) | 2 lines

Remove reference to the connection once it is closed in derbynet/ShutDownDBWhenNSShutsDownTest

------------------------------------------------------------------------
r476316 | djd | 2006-11-17 13:11:59 -0800 (Fri, 17 Nov 2006) | 3 lines

Various changes to ensure JDBC objects are closed when running the JUnit tests in the jdbcapi package.
Change UpdateableResultSetTest to become standard and use the connection provided by
the super class.
------------------------------------------------------------------------
r476315 | djd | 2006-11-17 13:10:17 -0800 (Fri, 17 Nov 2006) | 1 line

Close one of the ResultSets used to clean up databases from CleanDatabaseTestSetup.
------------------------------------------------------------------------
r476224 | djd | 2006-11-17 09:30:43 -0800 (Fri, 17 Nov 2006) | 1 line

Close a CallableStatement in ProcedureTest
------------------------------------------------------------------------
r476204 | djd | 2006-11-17 08:36:14 -0800 (Fri, 17 Nov 2006) | 2 lines

Clean up some assertTrue(..., false) to fail() in HoldabilityTest,
close some ResultSet's left open and simplify the tearDown method.
------------------------------------------------------------------------
r476201 | djd | 2006-11-17 08:33:30 -0800 (Fri, 17 Nov 2006) | 1 line

Close a PreparedStatement in SURTest.
------------------------------------------------------------------------
r476199 | djd | 2006-11-17 08:30:45 -0800 (Fri, 17 Nov 2006) | 1 line

Clean up some asserts and close a PreparedStatement in SURBaseTest
------------------------------------------------------------------------
r476197 | djd | 2006-11-17 08:28:42 -0800 (Fri, 17 Nov 2006) | 1 line

Close some Statement objects left open in XMLTypeAndOpsTest
------------------------------------------------------------------------
r476196 | djd | 2006-11-17 08:27:21 -0800 (Fri, 17 Nov 2006) | 1 line

Null out the DDL connection reference in PrepareExecuteDDL on tearDown.
------------------------------------------------------------------------
r476195 | djd | 2006-11-17 08:25:47 -0800 (Fri, 17 Nov 2006) | 1 line

Ensure ConcurrencyTest closes the second connection it opens in some fixtures.
------------------------------------------------------------------------
r476190 | mikem | 2006-11-17 08:07:35 -0800 (Fri, 17 Nov 2006) | 6 lines

DERBY-2093

Fixed error in initSlotTable() to print the right page info in case
of error during initialization of page from disk into cache.


------------------------------------------------------------------------
r476182 | djd | 2006-11-17 07:46:01 -0800 (Fri, 17 Nov 2006) | 2 lines

Change GroupByExpressionTest to use the standard CleanDatabaseTestSetup rather than
its own mechanism to drop objects.
------------------------------------------------------------------------
r476180 | djd | 2006-11-17 07:35:08 -0800 (Fri, 17 Nov 2006) | 5 lines

Null out the NetworkServerControl in the tearDown method of the
network server decorator. This seems to stop future startups of
the server taking 60+ seconds and causing tests to fail.
Will add a note to DERBY-1966 that this is a possible cause of
network start delays. Also null of the FileOutputStream field.
------------------------------------------------------------------------
r476087 | bernt | 2006-11-17 01:17:55 -0800 (Fri, 17 Nov 2006) | 1 line

DERBY-2084 getTransactionIsolation() in network client should not activate a transaction
------------------------------------------------------------------------
r475817 | kristwaa | 2006-11-16 09:06:34 -0800 (Thu, 16 Nov 2006) | 2 lines

DERBY-1693: Log a token in derby.log for LOBs instead of the actual content when derby.language.logStatementText=true (token: "NULL|[BC]LOB(<length>|<stream class>)")

------------------------------------------------------------------------
r475803 | djd | 2006-11-16 08:36:41 -0800 (Thu, 16 Nov 2006) | 2 lines

DERBY-1030 (partial) Add some comments to the logic for the RETURNS ON NULL INPUT's state field.

------------------------------------------------------------------------
r475780 | djd | 2006-11-16 07:49:28 -0800 (Thu, 16 Nov 2006) | 3 lines

DERBY-927 (partial) Clean up code related to serviceProviders to aid progress towards
merging services and storage factories in the monitor.

------------------------------------------------------------------------
r475779 | djd | 2006-11-16 07:46:52 -0800 (Thu, 16 Nov 2006) | 3 lines

DERBY-927 (partial) StorageFactoryService needs to allow for the return for StorageFile.list()
being null as documented in the api.

------------------------------------------------------------------------
r475728 | kahatlen | 2006-11-16 05:32:06 -0800 (Thu, 16 Nov 2006) | 2 lines

Fix javadoc warnings in JarUtil.

------------------------------------------------------------------------
r475724 | kahatlen | 2006-11-16 05:22:29 -0800 (Thu, 16 Nov 2006) | 2 lines

Removed javadoc templates which hid the excellent javadoc for StoredPage.

------------------------------------------------------------------------
r475492 | djd | 2006-11-15 15:29:21 -0800 (Wed, 15 Nov 2006) | 1 line

DERBY-1030 (partial) Remove test cases from functions.sql that are covered in RoutineTest (junit test).
------------------------------------------------------------------------
r475490 | djd | 2006-11-15 15:22:26 -0800 (Wed, 15 Nov 2006) | 3 lines

DERBY-1030 (partial) Add test cases to RoutineTest that demonstrate this bug, where
a function declared as RETURNS NULL ON NULL INPUT can be called when its argument is NULL.
Look for the comment with this bug number.
------------------------------------------------------------------------
r475449 | djd | 2006-11-15 13:58:34 -0800 (Wed, 15 Nov 2006) | 3 lines

DERBY-1030 (partial) Add a new JUnit test class intended to hold all routine (procedure and function)
test cases. Migrate some test cases from functions.sql related to checking the RETURNS NULL or CALLED
on NULL INPUT clauses for functions. 
------------------------------------------------------------------------
r475446 | djd | 2006-11-15 13:54:40 -0800 (Wed, 15 Nov 2006) | 1 line

Remove test cases from functions.sql that are covered by MathTrigFunctionsTest.
------------------------------------------------------------------------
r475370 | kahatlen | 2006-11-15 11:17:53 -0800 (Wed, 15 Nov 2006) | 4 lines

DERBY-2089: jdbc4/VerifySignatures.junit is failing

Adding "create=true" so that the test database is created.

------------------------------------------------------------------------
r475330 | mikem | 2006-11-15 09:53:45 -0800 (Wed, 15 Nov 2006) | 10 lines

DERBY-2057
contributed by Yip Ng
patch:  derby2057-trunk-diff02.txt

Fixed SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE() implementation to match
documentation.  Arguments should treat non-zero as "true", previous to this
fix only "1" was treated as true.



------------------------------------------------------------------------
r474884 | djd | 2006-11-14 09:31:34 -0800 (Tue, 14 Nov 2006) | 1 line

DERBY-2033 Remove the old dcl.sql test from the old harness.
------------------------------------------------------------------------
r474878 | djd | 2006-11-14 09:21:08 -0800 (Tue, 14 Nov 2006) | 3 lines

DERBY-2033 Convert remaining tests from dcl.sql to DatabaseClassLoadingTest including those
that execute against a database in a jar. Database in a jar tests pass but cause an issue on
clenaup which is entered as DERBY-2083.
------------------------------------------------------------------------
r474803 | kristwaa | 2006-11-14 06:36:38 -0800 (Tue, 14 Nov 2006) | 2 lines

DERBY-2054: Rewrite test derbynet/SuicideOfStreaming to JUnit. Moved tests ByteArrayCombinerStreamTest and SqlExceptionTest from old harness to suites.All.

------------------------------------------------------------------------
r474720 | bernt | 2006-11-14 02:25:51 -0800 (Tue, 14 Nov 2006) | 1 line

DERBY-638 Network driver setTransactionIsolation() causes a commit, but does not complete it locally
------------------------------------------------------------------------
r474695 | kahatlen | 2006-11-14 00:32:25 -0800 (Tue, 14 Nov 2006) | 7 lines

DERBY-801: Allow parallel access to data files

This patch (DERBY-801-7.patch) turns the DEBUG_PRINT messages in
RAFContainer4 into assertions guarding the method entry points.

Patch contributed by Anders Morken.

------------------------------------------------------------------------
r474628 | fuzzylogic | 2006-11-13 18:28:02 -0800 (Mon, 13 Nov 2006) | 2 lines

DERBY-2030: 'show tables' should show system tables.

------------------------------------------------------------------------
r474619 | djd | 2006-11-13 17:17:14 -0800 (Mon, 13 Nov 2006) | 4 lines

Simplify the interaction between the monitor and the StorageFactory when the
monitor is obtaining a list of services to boot. Cleaner code avoids creating
a new StorageFactory implementation for each file and handles non-directories cleaner.

------------------------------------------------------------------------
r474593 | fuzzylogic | 2006-11-13 16:02:35 -0800 (Mon, 13 Nov 2006) | 4 lines

Grant permission to read ${user.home}/junit.properties to all. Left it in the
previous section so that this new section just needs to be removed once
CompatibilityTest has been rewritten.

------------------------------------------------------------------------
r474552 | djd | 2006-11-13 14:57:49 -0800 (Mon, 13 Nov 2006) | 2 lines

Add utility methods for JUnit tests to get a DataSource based upon the current configuration
but pointing to a different database and to shutdown a database from a data source.
------------------------------------------------------------------------
r474502 | bpendleton | 2006-11-13 12:36:51 -0800 (Mon, 13 Nov 2006) | 13 lines

DERBY-1495: Error modifying an identity column after altering the column
DERBY-1645: ALTER TABLE SET INCREMENT turns off "Generated By Default"

This patch changes ModifyColumnNode.bindAndValidateDefault so that it
detects the case(s) where the user is altering aspects of an identity column,
and ensures that the other aspects of that identity column are preserved and
not lost. The crucial issue is that if the column is Generated By Default,
then the DefaultInfoImpl column in the SYSCOLUMNS table needs to get
retained when the user uses ALTER TABLE to change either the start value
or the increment value; otherwise the behavior effectively switches from
Generated By Default to Generated Always.


------------------------------------------------------------------------
r474376 | djd | 2006-11-13 07:50:24 -0800 (Mon, 13 Nov 2006) | 1 line

DERBY-537 (partial) Remove some dead code for handling jar files stored within the database.
------------------------------------------------------------------------
r474015 | kahatlen | 2006-11-12 11:14:32 -0800 (Sun, 12 Nov 2006) | 3 lines

Clean up javadoc comments in ClientBaseDataSource to make them more
readable in the published API.

------------------------------------------------------------------------
r473834 | djd | 2006-11-11 16:08:07 -0800 (Sat, 11 Nov 2006) | 3 lines

DERBY-537 (partial) Call FileResource.add in a privleged block when executing code to add a jar,
driven by sqlj.install_jar. Allows one test fixture in DatabaseClassLoadingTest to be executed
with a security manager.
------------------------------------------------------------------------
r473828 | djd | 2006-11-11 15:11:56 -0800 (Sat, 11 Nov 2006) | 5 lines

DERBY-537 (partial) Fix the reading of the jar file (through a URL or file name) for sqlj.install_jar
and replace_jar to be under a privileged block. Switched the order of lookup from the jar path to
be URL and then as a file name. Otherwise a security exception is thrown trying to open the URL
path as a file name.

------------------------------------------------------------------------
r473783 | djd | 2006-11-11 11:50:15 -0800 (Sat, 11 Nov 2006) | 2 lines

SupportFilesSetup needs to convert from the File to a URL in a privileged block as
that operation requires the permission to read user.dir.
------------------------------------------------------------------------
r473780 | djd | 2006-11-11 11:41:05 -0800 (Sat, 11 Nov 2006) | 2 lines

DERBY-537 (partial) Change the DatabaseClassLoadingTest to install and replace the jar files using
the SupportFilesSetup decorator so that the engine will have the correct permissions to read the jar files.
------------------------------------------------------------------------
r473778 | djd | 2006-11-11 11:33:55 -0800 (Sat, 11 Nov 2006) | 2 lines

Add decorator SupportFilesSetup which allows resources to be copied from the classpath
into the extin, extinout & extout folders to match the old harness behaviour.
------------------------------------------------------------------------
r473688 | kahatlen | 2006-11-11 02:36:16 -0800 (Sat, 11 Nov 2006) | 2 lines

Fixed wrong class name in copyright header.

------------------------------------------------------------------------
r473687 | kahatlen | 2006-11-11 02:28:07 -0800 (Sat, 11 Nov 2006) | 6 lines

DERBY-2067: Assert failure in EmbedConnection.restoreContextStack()
when running lang/closed.java

Change the assert so that it doesn't raise an error if the engine has
been shut down.

------------------------------------------------------------------------
r473603 | bpendleton | 2006-11-10 16:51:33 -0800 (Fri, 10 Nov 2006) | 7 lines

DERBY-2018: NullPointerException in CREATE VIEW ... VALUES NULL

This patch was contributed by Yip Ng (yipng168@gmail.com)

This fix catches untyped null in CreateViewNode at bind phase (same logic
as CursorNode) and throws the exception. 

------------------------------------------------------------------------
r473440 | djd | 2006-11-10 11:31:18 -0800 (Fri, 10 Nov 2006) | 2 lines

DERBY-537 Fix JarLoader missed from last commit.

------------------------------------------------------------------------
r473416 | djd | 2006-11-10 10:30:50 -0800 (Fri, 10 Nov 2006) | 1 line

DERBY-537 (partial) Cleanup JarUtil removing code that is never called and making class package private.
------------------------------------------------------------------------
r473413 | djd | 2006-11-10 10:26:19 -0800 (Fri, 10 Nov 2006) | 3 lines

DERBY-2055 1) Adds a new class Load.java to execute the schema scripts for OE within the junit framework.
2) Adds a new utility method to BaseJDBCTestCase to take a resource name and execute it using runScript. 
Contributed by  Sunitha Kambhampati ksunithaghm@gmail.com
------------------------------------------------------------------------
r473396 | djd | 2006-11-10 09:36:57 -0800 (Fri, 10 Nov 2006) | 3 lines

Add some comments to ConstantActionActivation to inform how the activation gets
hooked up to the ConstantAction.

------------------------------------------------------------------------
r473387 | djd | 2006-11-10 08:39:20 -0800 (Fri, 10 Nov 2006) | 2 lines

DERBY-2040 (partial) Create the class loaders (JarLoader instances) for database class loading
within a privileged block.
------------------------------------------------------------------------
r473366 | djd | 2006-11-10 07:26:58 -0800 (Fri, 10 Nov 2006) | 4 lines

DERBY-2047 Remove TestDataSourceFactory and clean up associated code. Functionality
has been replaced by JDBCDataSource and J2EEDataSource which allows clean separation
for JSR169 which does not include the XA and connection pooling data sources.

------------------------------------------------------------------------
r473176 | djd | 2006-11-09 19:42:54 -0800 (Thu, 09 Nov 2006) | 1 line

DERBY-2063 Add comment to BootTestAll related to this bug.
------------------------------------------------------------------------
r473175 | djd | 2006-11-09 19:36:32 -0800 (Thu, 09 Nov 2006) | 3 lines

DERBY-1952 DERBY-2047 Convert store/BootAllTest to run as a standard JUNit test and
not within the harness. Added a store._Suite and hooked it into the suites.All and
the ant junit-all target.
------------------------------------------------------------------------
r473123 | djd | 2006-11-09 14:49:55 -0800 (Thu, 09 Nov 2006) | 6 lines

DERBY-2063 (partial) Change ShutdownDBWhenNSShutsDown from being a JUnit test run under the old
harness to one that is run as a regular JUnit tests. Add a new _Suite for derbynet and hook it
into suites.All and the ant junit-all target. Required fixing some bugs in the DriverManager
connection handling. Also refactored NetworkServerTestSetup to allow starting the server
from the "command line" and to provide some utility methods for tests, e.g. to get
a correctly setup NetworkServerControl.
------------------------------------------------------------------------
r473079 | djd | 2006-11-09 13:38:52 -0800 (Thu, 09 Nov 2006) | 2 lines

DERBY-1952 DERBY-2047 Remove the remaining code directly related to derbyTesting.xa.single.
This functionality has been replaced with a decorator.
------------------------------------------------------------------------
r472902 | kristwaa | 2006-11-09 05:58:31 -0800 (Thu, 09 Nov 2006) | 2 lines

DERBY-2000: Granted permission to create derby.system.home to derby.jar

------------------------------------------------------------------------
r472859 | kahatlen | 2006-11-09 02:57:47 -0800 (Thu, 09 Nov 2006) | 6 lines

DERBY-2038: lang/releaseCompileLocks.sql and lang/closed.java fail
under JDK 1.6 in insane mode

Added sed scripts which deleted the differing parts of the stack trace
from the test output.

------------------------------------------------------------------------
r472803 | kahatlen | 2006-11-08 23:43:38 -0800 (Wed, 08 Nov 2006) | 5 lines

DERBY-2050: Manipulating CachedItems could be more efficient

Use five boolean fields instead of one int to record CachedItem's
state. Contributed by Dyre Tjeldvoll.

------------------------------------------------------------------------
r472738 | suresht | 2006-11-08 17:55:43 -0800 (Wed, 08 Nov 2006) | 6 lines

simple update to the master file specific to ibm 15 jvm. This file 
did not seems to have got updated correctly  with  sql file
copyright changes. 
   


------------------------------------------------------------------------
r472722 | djd | 2006-11-08 16:56:20 -0800 (Wed, 08 Nov 2006) | 6 lines

DERBY-2047 DERBY-1952 (partial) Implement the ability to run with the default connction coming from
an XADataSource as a decorator via the utility method TestConfiguration.connectionXADecorator.
This will replace the functionality driven by the property derbyTesting.xa.single.
Improved jdbc4.ConnectionTest and PreparedStatementTest to also run their test fixtures with
this XA decorator. This will replace the old harness suite jdbcxa40 which does not seem to be part
of derbyall but the new runs are part of jdbc4._Suite.
------------------------------------------------------------------------
r472708 | bpendleton | 2006-11-08 16:00:45 -0800 (Wed, 08 Nov 2006) | 11 lines

DERBY-1490: Provide RENAME COLUMN functionality

This patch provides a new statement:

  RENAME COLUMN [schema.]table.column TO new-column

The patch contains sqlgrammar.jj changes which implement the new syntax
using the existing execution support in RenameConstantAction.java. The
patch also includes new tests in the lang/altertable.sql test program.


------------------------------------------------------------------------
r472707 | djd | 2006-11-08 16:00:17 -0800 (Wed, 08 Nov 2006) | 3 lines

DERBY-2047 (partial) Expose the generic data source (bean) property setting method in JDBCDataSource
and change DataSourcePropertiesTest to use it as part of clean up to ensure clean separation between
old harness code and JUnit code.
------------------------------------------------------------------------
r472704 | djd | 2006-11-08 15:51:46 -0800 (Wed, 08 Nov 2006) | 3 lines

DERBY-2033 (partial) All of the test cases from dcl.sql are converted to DatabaseClassLoadingTest
except those related to jarring up the database and runing tests against that read-only database.
Add DatabaseClassLoadingTest into lang._Suite.
------------------------------------------------------------------------
r472613 | djd | 2006-11-08 11:49:13 -0800 (Wed, 08 Nov 2006) | 6 lines

DERBY-2048 Add an additional cleanup step(compression) to cleanDatabase() method.
After objects removal is performed via removeObjects(), object compression is performed in the
new compressObjects() method on the SYS.SYSDEPENDS to compact the system table.
(Currently it only compress this system table.)

Contributed by Yip Ng yipng168@gmail.com
------------------------------------------------------------------------
r472391 | abrown | 2006-11-07 20:53:54 -0800 (Tue, 07 Nov 2006) | 8 lines

DERBY-2052: JDBC.assertRowInResultSet compares the wrong value if using
trimmed strings and a SMALLINT column exists. 

Patch that 1) moves the locally scoped variables in JDBC.assertRowInResultSet()
into the for loop, and 2) sets the "obj" variable through all paths.

Contributed by Dan Debrunner (djd@apache.org) 

------------------------------------------------------------------------
r472228 | djd | 2006-11-07 12:05:22 -0800 (Tue, 07 Nov 2006) | 4 lines

DERBY-2023 DERBY-2047 Add JUnit utility class J2EEDataSource to return XA and ConnectionPooling
data source implementations. Split out from JDBCDataSource to ensure no class not found exceptions
when running in JSR169. Changed JUnit tests using the old harness class TestDataSourceFactory
to use the J2EEDataSource and/or JDBCDataSource.
------------------------------------------------------------------------
r472187 | djd | 2006-11-07 10:18:54 -0800 (Tue, 07 Nov 2006) | 7 lines

DERBY-2036 DERBY-2043 DERBY-2047 (partial) Re-work connection handling in JUnit tests.
Create connection factory Connector with two implementations, DataSourceConnector and DriverManagerConnector.
This ensures that running tests does not attempt to load DriverManager when running tests with JSR169.
Ensure DataSource implementation sets user name and password from configuration for the getConnection()
method to ensure the ChangerUserTestSetup works.
Refactor the setting of data source Java bean properties to be from a HashMap rather than a Properties
object to ensure that no special code exists at the lowest level to deal with different property types.
------------------------------------------------------------------------
r472016 | kahatlen | 2006-11-06 23:39:25 -0800 (Mon, 06 Nov 2006) | 17 lines

DERBY-2023: Ensure all tests called by jdbc40._Suite run in embedded
and client as required

The attached patch (derby-2023.diff) makes most of the tests in
jdbc4._Suite run in client and embedded. The exceptions are

  - ClosedObjectTest
  - StatementEventsTest
  - XA40Test
  - UnsupportedVetter
  - DataSourceTest

These tests can only run in embedded mode until DERBY-2047 has been
fixed, and I have added a note about it in their suite() methods.

jdbc4._Suite is removed from jdbc40.runall.

------------------------------------------------------------------------
r471862 | kahatlen | 2006-11-06 11:58:18 -0800 (Mon, 06 Nov 2006) | 7 lines

DERBY-2046: Make class org.apache.derby.iapi.store.raw.PageKey final

The methods of the PageKey class are called frequently both from the
lock manager and the cache manager. Since no other classes extend it,
it should be declared final to help the run-time compiler optimize the
method calls.

------------------------------------------------------------------------
r471808 | djd | 2006-11-06 10:39:16 -0800 (Mon, 06 Nov 2006) | 2 lines

DERBY-2043 DERBY-2047 (partial) More connection utility method cleanup to provide a single consistent
shutdownEngine() method.
------------------------------------------------------------------------
r471459 | bpendleton | 2006-11-05 08:45:24 -0800 (Sun, 05 Nov 2006) | 16 lines

DERBY-2014: NullPointerException with NULLIF in GROUP BY clause

This change was contributed by Yip Ng (yipng168@gmail.com)

The NPE happens in isEquivalent() method where it does not handle
value is null. (same symptom as DERBY-2008) and the patch addresses
this + additonal testcases.

The isEquivalent() method is used to compare the select column
against the group by with expression. Note that it is comparing
the structural form of the two expressions for equivalence at bind phase
and not comparing the actual row values at runtime to produce a result.

This patch converts all the tests in the previous patch into junit.
Also the javadoc for ValueNode.isEquivalent() method has been updated.

------------------------------------------------------------------------
r471366 | fuzzylogic | 2006-11-04 21:14:13 -0800 (Sat, 04 Nov 2006) | 2 lines

Add *.dtd and messages*.xml to list of exclusions for the derbydocs target.

------------------------------------------------------------------------
r471104 | djd | 2006-11-03 18:47:29 -0800 (Fri, 03 Nov 2006) | 3 lines

DERBY-2033 (partial) Add login in CleanDatabaseTestSetup to unset database properties as
part of the cleanup. Specifcally unset derby.database.classpath for the DatabaseClassLoadingTest
but others can be added in the future.
------------------------------------------------------------------------
r471089 | djd | 2006-11-03 17:08:34 -0800 (Fri, 03 Nov 2006) | 4 lines

DERBY-2043 (partial) Cleanup some of the connection methods in TestConfiguration to allow easier
transition of the DataSource code into the junit package. Add a utility shutdownDatabase() method
to TestConfiguration rather than using a getConnection with shutdown=true and duplicated code
for catching the exception and asserting its SQL state.
------------------------------------------------------------------------
r470956 | djd | 2006-11-03 11:17:21 -0800 (Fri, 03 Nov 2006) | 4 lines

DERBY-2033 (partial) Initial test cases for DatabaseClassLoadingTest but test is not ready to
be added to a suite yet. Fix the no security manager decorator to work correctly as it is
required by this test. Add some utility methods to JDBC for testing result sets.

------------------------------------------------------------------------
r470943 | abrown | 2006-11-03 10:57:02 -0800 (Fri, 03 Nov 2006) | 3 lines

Test committer capabilities by making a small fix to comments
in OptimizerImpl.java

------------------------------------------------------------------------
r470909 | jta | 2006-11-03 09:18:43 -0800 (Fri, 03 Nov 2006) | 2 lines

DERBY-1986 Add Cryptographic Software Notice to the README.

------------------------------------------------------------------------
r470862 | rhillegas | 2006-11-03 07:51:16 -0800 (Fri, 03 Nov 2006) | 1 line

DERBY-1868: Point message writers to the website for guidance on how to write messages.
------------------------------------------------------------------------
r470636 | fuzzylogic | 2006-11-02 18:13:30 -0800 (Thu, 02 Nov 2006) | 3 lines

DERBY-2006: Refactor junit-oneclass target to set the jvm from a property,
and set the default to 'java' in junit-init.

------------------------------------------------------------------------
r470604 | fuzzylogic | 2006-11-02 15:50:58 -0800 (Thu, 02 Nov 2006) | 3 lines

DERBY-2006: Add a top-level Ant target that runs the junit tests and generates
a report.

------------------------------------------------------------------------
r470573 | kahatlen | 2006-11-02 14:39:53 -0800 (Thu, 02 Nov 2006) | 6 lines

DERBY-801 (partial) Allow parallel access to data files

DERBY-801-6.patch remedies the noise from the iosInProgress sanity
checking by checking the committed drop state before croaking.
Patch contributed by Anders Morken.

------------------------------------------------------------------------
r470492 | djd | 2006-11-02 11:53:26 -0800 (Thu, 02 Nov 2006) | 1 line

DERBY-2021 Fix ConcurrencyTest to run embedded and client.
------------------------------------------------------------------------
r470476 | djd | 2006-11-02 11:05:48 -0800 (Thu, 02 Nov 2006) | 2 lines

DERBY-2021 Fix DataSourceProperties and SURQueryMixTest to runs tests in client and embedded as needed.
Fix DataSourceProperties to actually run some tests.
------------------------------------------------------------------------
r470463 | djd | 2006-11-02 10:25:58 -0800 (Thu, 02 Nov 2006) | 2 lines

DERBY-2032 Convert MathTrigFunctionsTest to use PreparedStatements instead of many compiled Statements
and thus reduce execution time from eighty seconds to around ten seconds.
------------------------------------------------------------------------
r470434 | djd | 2006-11-02 09:26:44 -0800 (Thu, 02 Nov 2006) | 2 lines

DERBY-467 Add a new test for tesing security issues related to server side Java procedures and functions.
New test is lang.RoutineSecurityTest.
------------------------------------------------------------------------
r470418 | djd | 2006-11-02 09:04:12 -0800 (Thu, 02 Nov 2006) | 1 line

DERBY-2021 Fix SURTest.suite() to run client & embedded.
------------------------------------------------------------------------
r470372 | rhillegas | 2006-11-02 06:26:09 -0800 (Thu, 02 Nov 2006) | 1 line

DERBY-1993: Checkin derby-1993-v03.diff, which puts the demo classes in the org.apache.derbyDemo namespace.
------------------------------------------------------------------------
r470362 | kahatlen | 2006-11-02 05:47:30 -0800 (Thu, 02 Nov 2006) | 5 lines

DERBY-801 (partial) Allow parallel access to data files

Use Derby's own module loading mechanism to load RAFContainer4.
Patch contributed by Anders Morken.

------------------------------------------------------------------------
r470305 | kahatlen | 2006-11-02 02:04:21 -0800 (Thu, 02 Nov 2006) | 4 lines

DERBY-2005: Convert jdbcapi/Stream.java to JUnit

Clean-up patch contributed by Fernanda Pizzorno.

------------------------------------------------------------------------
r470294 | kahatlen | 2006-11-02 01:43:04 -0800 (Thu, 02 Nov 2006) | 6 lines

DERBY-2027: JUnit suite All crashes with OutOfMemoryError when running
LobLengthTest

Use LoopingAlphabetStream instead of ByteArrayInputStream to reduce
memory usage. Patch contributed by Kristian Waagan.

------------------------------------------------------------------------
r470233 | djd | 2006-11-01 20:57:18 -0800 (Wed, 01 Nov 2006) | 3 lines

DERBY-2021 (partial) Change ProcedureTest.suite() to run tests embedded and client. Cleanup
the creation of tables and procedures to use the decorateSQL method of CleanDatabaseTestSetup
rather than a test specific way to drop objects.
------------------------------------------------------------------------
r470223 | djd | 2006-11-01 20:17:20 -0800 (Wed, 01 Nov 2006) | 4 lines

DERBY-2021 (partial) Wrap each suite (embedded and client) in CleanDatabaseSetup when using the defaultSuite() method.
ResultSetCloseTest required this and it makes better sense than the single wrapping of both suites with a clean database
decorator.

------------------------------------------------------------------------
r470221 | djd | 2006-11-01 20:13:48 -0800 (Wed, 01 Nov 2006) | 2 lines

DERBY-2021 (partial) Fix UpdateXXXTest and ResultSetCloseTest suite() methods to run in client as well.

------------------------------------------------------------------------
r470152 | djd | 2006-11-01 16:56:32 -0800 (Wed, 01 Nov 2006) | 2 lines

DERBY-2005 converts the test jdbcapi/Stream.java to Junit.
Contributed by Fernanda Pizzorno fernanda.pizzorno@sun.com
------------------------------------------------------------------------
r470142 | djd | 2006-11-01 15:55:24 -0800 (Wed, 01 Nov 2006) | 3 lines

DERBY-1995 Add final base schema script, index.sql for additional indexes required by the test.
Added copy to the build target to copy the scripts to the classes folder.

------------------------------------------------------------------------
r470128 | rhillegas | 2006-11-01 14:52:42 -0800 (Wed, 01 Nov 2006) | 1 line

DERBY-1868: Commit Knut Anders' patch to point the compiler at antlibrary.dir rather than ant.home.
------------------------------------------------------------------------
r470024 | djd | 2006-11-01 10:32:58 -0800 (Wed, 01 Nov 2006) | 6 lines

DERBY-1974 Add utility method TestConfiguration.sqlAuthorizationDecorator to change the default
database to one that has SQL authorization mode enabled. Have PrepareExecuteDDL use this decorator
and add this test to lang._Suite. Fix a bug in assertDrainResults() where the wrong variable
was being used to check an assert.


------------------------------------------------------------------------
r470008 | rhillegas | 2006-11-01 09:43:29 -0800 (Wed, 01 Nov 2006) | 1 line

DERBY-1868: Delete generated messages_en.properties at clobber time. Teach subversion to ignore this generated file.
------------------------------------------------------------------------
r469975 | rhillegas | 2006-11-01 08:44:26 -0800 (Wed, 01 Nov 2006) | 1 line

DERBY-1868: Check in derby-1868-merged-v01.diff. This causes the Derby build to consume an xml file of message descriptors and generate the engine's messages_en.properties as well as the SQLState tables for the Reference Guide.
------------------------------------------------------------------------
r469965 | djd | 2006-11-01 08:22:51 -0800 (Wed, 01 Nov 2006) | 3 lines

DERBY-2028 add names to existing JUnit test suites without a name.
contributed by Kristian Waagan Kristian.Waagan@Sun.com

------------------------------------------------------------------------
r469713 | djd | 2006-10-31 16:05:24 -0800 (Tue, 31 Oct 2006) | 4 lines

DERBY-1758 Remove the old lang/xml_general.sql test and the corresponding master files.
That test has now been replaced by lang/XMLTypeAndOpsTest.java, which is a JUnit test.
Contributed by A B qozinx@gmail.com

------------------------------------------------------------------------
r469634 | djd | 2006-10-31 12:11:56 -0800 (Tue, 31 Oct 2006) | 1 line

DERBY-1975 Remove work in progress comments from DropDatabaseSetup.
------------------------------------------------------------------------
r469632 | djd | 2006-10-31 12:09:07 -0800 (Tue, 31 Oct 2006) | 2 lines

DERBY-1975 Enhance the single database decorator and DropDatabaseSetup to use a unique database name
and to drop the database at tearDown.
------------------------------------------------------------------------
r469594 | djd | 2006-10-31 10:21:42 -0800 (Tue, 31 Oct 2006) | 1 line

DERBY-1975 (partial) Add some incremental work to support a single use database for a test.
------------------------------------------------------------------------
r469591 | djd | 2006-10-31 10:13:00 -0800 (Tue, 31 Oct 2006) | 2 lines

Name the test suite in the jdbc4._Suite.

------------------------------------------------------------------------
r469588 | djd | 2006-10-31 10:05:31 -0800 (Tue, 31 Oct 2006) | 2 lines

DERBY-1970 Add initial performance test that uses the new JDBCPerfTestCase class.
Contributed by Sunitha Kambhampati ksunithaghm@gmail.com
------------------------------------------------------------------------
r469576 | djd | 2006-10-31 09:35:54 -0800 (Tue, 31 Oct 2006) | 1 line

DERBY-1987 (partial) Add build.xml files to hook order entry classes into build system.
------------------------------------------------------------------------
r469573 | djd | 2006-10-31 09:26:18 -0800 (Tue, 31 Oct 2006) | 2 lines

DERBY-1994 Add the interfaces to execute the business transactions and display the results for the order entry toolkit.

------------------------------------------------------------------------
r469572 | djd | 2006-10-31 09:23:16 -0800 (Tue, 31 Oct 2006) | 2 lines

DERBY-1994 (partial) Add the base POJO classes for the data objects in order entry test toolkit.

------------------------------------------------------------------------
r469567 | djd | 2006-10-31 09:18:43 -0800 (Tue, 31 Oct 2006) | 3 lines

DERBY-1970 Add JDBCPerfTestCase as initial step in adding performance tests to Derby's testing.
Contributed by Sunitha Kambhampati ksunithaghm@gmail.com

------------------------------------------------------------------------
r469410 | kahatlen | 2006-10-31 00:28:26 -0800 (Tue, 31 Oct 2006) | 6 lines

DERBY-1991: Misleading stack traces for exceptions raised by the JDBC
4.0 embedded driver

Don't set the stack trace of the SQLException to the stack trace of
the dummy exception in SQLExceptionFactory40.

------------------------------------------------------------------------
r469272 | djd | 2006-10-30 12:54:52 -0800 (Mon, 30 Oct 2006) | 2 lines

Remove the SQL tests moved to JUnit LangScripts from derbylang.

------------------------------------------------------------------------
r469215 | djd | 2006-10-30 10:12:15 -0800 (Mon, 30 Oct 2006) | 2 lines

Move a set of language SQL scripts from the old harness (derbylang suite) to the JUnit test LangScripts.
Tests moved are: aggbuiltin, comparisons, delete, insert, schemas, select, stringtypes, update, valuesclause, views.
------------------------------------------------------------------------
r469128 | kahatlen | 2006-10-30 03:45:56 -0800 (Mon, 30 Oct 2006) | 4 lines

DERBY-1979: Convert jdbcapi/characterStreams.java to JUnit

Patch contributed by Fernanda Pizzorno.

------------------------------------------------------------------------
r469102 | bernt | 2006-10-30 01:34:06 -0800 (Mon, 30 Oct 2006) | 1 line

DERBY-1953 Test changes. MODE DB2SQL removed from most tests
------------------------------------------------------------------------
r468803 | djd | 2006-10-28 18:34:56 -0700 (Sat, 28 Oct 2006) | 4 lines

DERBY-2007 Add a convenience method in DatabasePropertyTestSetup that returns a decorator
that sets up BUILTIN authentication with the passed in list of users. Use this for the NIST
test as seemed to be the intention under the old harness. Remove the remaining harness properties
files for the nist suite.
------------------------------------------------------------------------
r468696 | bpendleton | 2006-10-28 09:15:09 -0700 (Sat, 28 Oct 2006) | 9 lines

DERBY-2008: NPE with 2-arg SUBSTR call in GROUP BY clause

This patch was contributed by Yip Ng (yipng168@gmail.com)

For SUBSTR function, there can be 2 or 3 arguments, and in the
case of 2-args, the rightOperand of the TernaryOperatorNode will
be null. In its isEquivalent() method, it did not take care of
this case; thus, the NPE.

------------------------------------------------------------------------
r468605 | bpendleton | 2006-10-27 18:00:44 -0700 (Fri, 27 Oct 2006) | 18 lines

DERBY-1758: Enable xmlSuite to run as part of derbyall for qualified JVMs

This patch was contributed by A B (qozinx@gmail.com)

I'm attaching another patch, d1758_followup_v1.patch, that moves the XML
utility methods out of junit.JDBC and into a new class, junit.XML, per Dan's
suggestion (thanks Dan).

Note that I changed the "haveClass()" method in JDBC.java from private to
protected so that it can be called from the junit.XML class.  That was the
easiest thing to do. 

Since checking the classpath is not a JDBC-specific operation, the other
option is to move "haveClass()" to some other class in the junit package.  If
anyone indicates a preference for doing so and also indicates the class to
which the method should be moved, I can do it this way.  Otherwise I'll just
leave it as it is (i.e. keep it in JDBC.java and make it protected).

------------------------------------------------------------------------
r468563 | djd | 2006-10-27 15:24:42 -0700 (Fri, 27 Oct 2006) | 2 lines

DERBY-1930 Apply corrections noted in comments by Dag H. Wanvik in DERBY-1930.

------------------------------------------------------------------------
r468561 | djd | 2006-10-27 15:19:54 -0700 (Fri, 27 Oct 2006) | 3 lines

DERBY-1930 (partial) Initial addition of information from JDBC paper on the web-site
onto the JDBC package.html page for Derby's published Javadoc.

------------------------------------------------------------------------
r468553 | djd | 2006-10-27 14:52:38 -0700 (Fri, 27 Oct 2006) | 2 lines

DERBY-2007 (partial) Remove old properties files used by old harness for the NIST suite.

------------------------------------------------------------------------
r468517 | djd | 2006-10-27 13:09:00 -0700 (Fri, 27 Oct 2006) | 2 lines

DERBY-2007 (partial) Update readme to reflect switch to JUnit for NIST suite.

------------------------------------------------------------------------
r468514 | djd | 2006-10-27 13:04:21 -0700 (Fri, 27 Oct 2006) | 4 lines

DERBY-2007 (partial) Switch NIST suite over to Junit. Removed from old harness suites and added NistScripts
into lang._Suite. Added constraint names to various DDL statements in the nist SQL scripts to produce
constant output. Modify the .out files to match the output under JUnit, including not removing blank lines.
Still cleanup to do including modifying the readme to reflect changes.
------------------------------------------------------------------------
r468503 | bpendleton | 2006-10-27 12:17:28 -0700 (Fri, 27 Oct 2006) | 34 lines

DERBY-1758: Enable xmlSuite to run as part of derbyall for qualified JVMs

This patch was contributed by A B (qozinx@gmail.com)

This patch adds two JUnit tests to lang/_Suite.java. The first test,
XMLTypeAndOpsTest.java, is meant to be a JUnit equivalent to the current
lang/xml_general.sql test. The second test, XMLMissingClassesTest,
tests the behavior of the SQL/XML operators when the required JAXP
or Xalan classes are not in the classpath.

The XML classes can be provided in any of a number of ways:
1) bundled into the JVM
2) installed as endorsed libraries
3) specified in the classpath
Hand-testing was performed to ensure that the new JUnit tests perform
correctly in these various configurations.

If the tests are run in an environment which does not support the XML
features, the tests quietly do nothing.

The patch, d1758_newJUnitTests_v2.patch, also adds a new utility method
and some associated state to JDBC.java for checking two things:
1) that the classpath has JAXP and Xalan classes, and
2) if the classpath has Xalan, check that the version of Xalan meets
the minimum requirement for use of Derby SQL/XML operators.
These methods/flags are then used to determine when to run the new
XML JUnit tests.

NOTE: After this patch has been reviewed/updated and finally committed
I will post a separate patch to remove the old lang/xml_general.sql test
and the corresponding master files. I will then continue addressing the
rest of the tasks for this issue (esp. xmlBinding.java) in incremental fashion.


------------------------------------------------------------------------
r468502 | djd | 2006-10-27 12:06:19 -0700 (Fri, 27 Oct 2006) | 3 lines

DERBY-2007 (partial) Improve CleanDatabaseTestSetup to handle tables in a dependency loop due
to foreign key constraints and simple cases for objects that are dependent across schemas.

------------------------------------------------------------------------
r468448 | djd | 2006-10-27 09:40:08 -0700 (Fri, 27 Oct 2006) | 3 lines

DERBY-2007 (partial) Add setting the lock timeouts for the Nist scripts to match the behaviour under the old harness.
NistScripts is still a work in  progress.

------------------------------------------------------------------------
r468447 | djd | 2006-10-27 09:34:24 -0700 (Fri, 27 Oct 2006) | 5 lines

DERBY-2007 (partial) The dropping of tables in CleanDatabaseTestSetup needs to be smarter for
the nist suite since it has tables that depend on each other. This is an incremental c                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         