diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,18 @@
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE Haskell2010
+    , ScopedTypeVariables
+ #-}
+{-# OPTIONS
+    -Wall
+    -fno-warn-missing-signatures
+    -fno-warn-name-shadowing
+ #-}
+
+import Prelude
+import qualified Prelude as P
+
+import Data.List
+
+import Distribution.PackageDescription
+import Distribution.Simple
+import Distribution.Simple.LocalBuildInfo
+import Distribution.Simple.PreProcess
+
+import System.Environment
+import System.FilePath
+
+import Text.Printf
+
+import Language.Preprocessor.Cpphs
+
+
+main = do
+    args <- getArgs
+
+    let hooks = simpleUserHooks {
+            hookedPreProcessors = [ ("hss", transformHss)
+                                  , ("cpphs", transformCpphs) ]
+          }
+
+    defaultMainWithHooksArgs hooks args
+
+
+transformCpphs :: BuildInfo -> LocalBuildInfo -> PreProcessor
+transformCpphs _ _ = PreProcessor True $ \(inDir, inFile) (outDir, outFile) _ -> do
+    source <- readFile (inDir </> inFile)
+
+    _ <- printf "Preprocessing (CPPHS) %s -> %s\n"
+        (inDir </> inFile) (outDir </> outFile)
+
+    let options = defaultCpphsOptions {
+            boolopts = (defaultBoolOptions { ansi = True })
+          }
+
+    runCpphs options (inDir </> inFile) source
+        >>= writeFile (outDir </> outFile)
+
+
+transformHss :: BuildInfo -> LocalBuildInfo -> PreProcessor
+-- ^ Transforms a *.hss file containing TriString-literals ("""triString""")
+-- into an ordinary *.hs file.
+transformHss _ _ = PreProcessor True $ \(inDir, inFile) (outDir, outFile) _ -> do
+    source <- readFile (inDir </> inFile)
+
+    _ <- printf "Preprocessing (HSS) %s -> %s\n"
+            (inDir </> inFile) (outDir </> outFile)
+
+    writeFile (outDir </> outFile) (doProcessHss inFile source)
+
+
+-- | The actual processing of 'transformHss'. No advanced method of parsing
+-- have been used in order to reduce the dependencies of the Setup script
+-- and to now blow it up by a whole combinator library or auto generated code.
+--
+-- Every triString is replaced by the concatenation of ordinary haskell
+-- strings. Code embedded in curly braces (introduced by a hash sign) is
+-- embedded literally. LINE pragmas keep the line numbers consistent.
+doProcessHss file = processHss (1 :: Int)
+  where
+    processHss n xs = case xs of
+        ('"':'"':'"':xs) -> triString n xs
+        ('{':'-':xs) -> '{' : '-' : comment n (1 :: Int) xs
+        ('"':xs) -> '"' : string n xs
+        ('\n':xs) -> '\n' : processHss (succ n) xs
+        (x:xs) -> x : processHss n xs
+        "" -> ""
+      where
+        triString n xs = case breakIt xs of
+            (str, xs) -> concat [ "((\\_ -> let { __ = "
+                , "\n{-# LINE ", show n, " ", show file, " #-}\n"
+                , sanitizeIt (mkTriString str)
+                , "\n{-# LINE ", show n', " ", show file, " #-}\n"
+                , "} in __) undefined)"
+                , processHss n' xs ]
+              where n' = n + length (filter (== '\n') str)
+
+        breakIt xs = case xs of
+            ('"':'"':'"':xs) -> ("", xs)
+            (x:xs) -> case breakIt xs of (y, ys) -> (x : y, ys)
+            "" -> ("", "")
+
+        sanitizeIt xs = case xs of
+            ('\\':'\\':'n':xs) -> sanitizeIt xs
+            (x:xs) -> x : sanitizeIt xs
+            "" -> ""
+
+        mkTriString xs = "concat [\"" ++ process string ++ "\"]"
+          where
+            string = concat $ intersperse "\\n" lines
+            process xs = case xs of
+                ('#':'{':xs) -> case break (== '}') xs of
+                    (ls, (_:rs)) -> "\", (" ++ ls ++ "), \"" ++ process rs
+                    _ -> error "could not match closing curly brace"
+                ('"':xs) -> '\\' : '"' : process xs
+                (x:xs) -> x : process xs
+                [] -> []
+            lines = case P.lines xs of
+                ("":lines) -> map (dedent (indent lines)) lines
+                (line:[]) -> [line]
+                lines@(_:lines') -> map (dedent (indent lines')) lines
+                [] -> []
+            indent xs = case xs of
+                [] -> 0
+                _ -> minimum $ map (length . takeWhile (== ' ')) xs
+            dedent n line = case splitAt n line of
+                (ls, rs) -> dropWhile (== ' ') ls ++ rs
+
+        comment l 1 ('-':'}':xs) = '-' : '}' : processHss l xs
+        comment l n xs = case xs of
+            ('{':'-':xs) -> '{' : '-' : comment l (succ n) xs
+            ('-':'}':xs) -> '-' : '}' : comment l (pred n) xs
+            ('\n':xs) -> '\n' : comment (succ l) n xs
+            (x:xs) -> x : comment l n xs
+            "" -> ""
+
+        string l xs = case xs of
+            ('\\':'"':xs) -> '\\' : '"' : string l xs
+            ('"':xs) -> '"' : processHss l xs
+            (x:xs) -> x : string l xs
+            "" -> ""
+
+
diff --git a/dist/build/j2hs/j2hs-tmp/Bindings.hs b/dist/build/j2hs/j2hs-tmp/Bindings.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/j2hs/j2hs-tmp/Bindings.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# OPTIONS -Wall #-}
+
+-- | Functions for generating glue code between Haskell and Java.
+module Bindings (
+
+    -- * Create Haskell glue code from Java definitions
+    printJavaPackageModule,
+    printJavaClassModule,
+    printJavaClassBootfile,
+    printJavaClassModule',
+    printJavaClassBootfile',
+
+  ) where
+
+import Translate
+import Foreign.Java.Utils
+import Language.Java.Reflect.Types
+
+import Data.Map (Map)
+
+imports :: String
+-- ^ Imports of all auto generated java code files.
+imports  = ((\_ -> let { __ = 
+{-# LINE 24 "Bindings.hss" #-}
+concat ["import qualified Foreign.Java as JNI\nimport Foreign.Java ((-->))\nimport qualified Prelude as Prelude\nimport Prelude ((.), ($), (>>=), (>>), return)\nimport qualified Foreign.Java.Bindings as JNIS\nimport Data.Functor ((<$>))\n"]
+{-# LINE 31 "Bindings.hss" #-}
+} in __) undefined)
+
+classInfoSignature :: String
+-- ^ 
+classInfoSignature = "Prelude.String"
+
+classInfo' :: JavaClass -> String
+-- ^ 
+classInfo' clazz = className clazz
+
+packageInfo' :: String -> a -> String
+packageInfo' packageName classes = packageName
+
+printJavaPackageModule :: String      -- The Java package name
+                       -> String      -- The Haskell module name of the Java package
+                       -> Map String JavaClass -- Info about all other classes
+                       -> [JavaClass] -- The Java classes contained in the Java package
+                       -> String
+-- ^ 
+printJavaPackageModule packageName modName classInfo classes = ((\_ -> let { __ = 
+{-# LINE 50 "Bindings.hss" #-}
+concat ["{-# LANGUAGE Haskell2010 #-}\n-- | Package @", (packageName), "@\nmodule ", (modName), " (\n", (moduleExports), "    info'\n) where\n", (imports), "\n", (moduleImports), "\n-- Information about this package.\ninfo' = ", (show $ packageInfo' packageName classes), "\n", (moduleDeclarations), "\n"]
+{-# LINE 62 "Bindings.hss" #-}
+} in __) undefined)
+  where moduleDeclarations   = pkgModDecl     classInfo classes
+        moduleImports        = pkgModImports  classInfo classes
+        moduleExports        = pkgModExports  classInfo classes
+
+
+printJavaClassModule :: JavaClass -- The Java class
+                     -> String    -- The Haskell module name of the Java class
+                     -> Map String JavaClass -- Info about all classes
+                     -> String
+-- ^ 
+printJavaClassModule clazz modName classInfo = ((\_ -> let { __ = 
+{-# LINE 73 "Bindings.hss" #-}
+concat ["{-# LANGUAGE Haskell2010 #-}\n-- | ", (show $ classType clazz), " @", (classFullName clazz), "@\nmodule ", (modName), " (\n", (moduleExports), "    -- * Information about this class.\n    info'\n) where\n", (imports), "\n", (bootfileImports), "\n", (moduleImports), "\ninfo' = ", (show $ classInfo' clazz), "\n", (bootfileDeclarations), "\n", (moduleDeclarations), "\n"]
+{-# LINE 87 "Bindings.hss" #-}
+} in __) undefined)
+  where bootfileDeclarations = classBootDecl    classInfo clazz
+        bootfileImports      = classBootImports classInfo clazz
+        moduleDeclarations   = classModDecl     classInfo clazz
+        moduleImports        = classModImports  classInfo clazz
+        moduleExports        = classModExports  classInfo clazz
+
+
+printJavaClassBootfile :: JavaClass -- The Java class
+                       -> String    -- The Haskell module name of the Java class
+                       -> Map String JavaClass -- Info about all classes
+                       -> String
+-- ^ 
+printJavaClassBootfile clazz modName classInfo = ((\_ -> let { __ = 
+{-# LINE 100 "Bindings.hss" #-}
+concat ["{-# LANGUAGE Haskell2010 #-}\n-- Bootfile for class ", (className clazz), "\nmodule ", (modName), " (\n", (bootfileExports), "    info'\n) where\n", (imports), "\n", (bootfileImports), "\ninfo' :: ", (classInfoSignature), "\n", (bootfileDeclarations), "\n"]
+{-# LINE 111 "Bindings.hss" #-}
+} in __) undefined)
+  where bootfileDeclarations = classBootDecl    classInfo clazz
+        bootfileImports      = classBootImports classInfo clazz
+        bootfileExports      = classBootExports classInfo clazz
+
+
+printJavaClassModule' :: JavaClass -- The Java class
+                      -> String    -- The Haskell module name of the Java class
+                      -> Map String JavaClass -- Info about all classes
+                      -> String
+-- ^ 
+printJavaClassModule' clazz modName classInfo = ((\_ -> let { __ = 
+{-# LINE 122 "Bindings.hss" #-}
+concat ["{-# LANGUAGE Haskell2010, TypeFamilies #-}\n-- hidden @", (className clazz), "@\nmodule ", (modName), "__ (\n", (moduleExports), "    info'\n) where\n", (imports), "\n", (bootfileImports), "\n", (moduleImports), "\ninfo' = ", (show $ classInfo' clazz), "\n", (bootfileDeclarations), "\n", (moduleDeclarations), "\n"]
+{-# LINE 135 "Bindings.hss" #-}
+} in __) undefined)
+  where bootfileDeclarations = classBootDecl'    classInfo clazz
+        bootfileImports      = classBootImports' classInfo clazz
+        moduleDeclarations   = classModDecl'     classInfo clazz
+        moduleImports        = classModImports'  classInfo clazz
+        moduleExports        = classModExports'  classInfo clazz
+
+
+printJavaClassBootfile' :: JavaClass -- The Java class
+                        -> String    -- The Haskell module name of the Java class
+                        -> Map String JavaClass -- Info about all classes
+                        -> String
+-- ^ 
+printJavaClassBootfile' clazz modName classInfo = ((\_ -> let { __ = 
+{-# LINE 148 "Bindings.hss" #-}
+concat ["{-# LANGUAGE Haskell2010 #-}\n-- hidden Bootfile for class ", (className clazz), "\nmodule ", (modName), "__ (\n", (bootfileExports), "    info'\n) where\n", (imports), "\n", (bootfileImports), "\ninfo' :: ", (classInfoSignature), "\n", (bootfileDeclarations), "\n"]
+{-# LINE 159 "Bindings.hss" #-}
+} in __) undefined)
+  where bootfileDeclarations = classBootDecl'    classInfo clazz
+        bootfileImports      = classBootImports' classInfo clazz
+        bootfileExports      = classBootExports' classInfo clazz
+
diff --git a/dist/build/j2hs/j2hs-tmp/Java2Haskell.hs b/dist/build/j2hs/j2hs-tmp/Java2Haskell.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/j2hs/j2hs-tmp/Java2Haskell.hs
@@ -0,0 +1,352 @@
+{-# LANGUAGE Haskell2010
+ #-}
+{-# OPTIONS
+    -Wall
+    -fno-warn-name-shadowing
+ #-}
+
+{- | The @j2hs@ command - create Haskell bindings for Java classes.
+    
+-}
+module Java2Haskell where
+
+import Prelude hiding (print)
+
+import Options
+import Bindings
+import Utils
+
+import Foreign.Java
+import Foreign.Java.Utils
+import Foreign.Java.IO
+
+import Language.Java.Reflect
+
+import Data.NamedRecord
+import qualified Data.List as L
+import Data.Strings
+
+import Data.Generics
+
+import Data.Bimap (Bimap)
+import Data.Map (Map)
+import Data.MultiMap (MultiMap)
+import Data.Set (Set)
+import qualified Data.Map as Map
+import qualified Data.Set as Set
+import qualified Data.MultiMap as MultiMap
+
+import Control.Monad
+import Control.Monad.IO.Class
+
+import System.Directory
+import System.FilePath
+import System.IO hiding (print)
+import System.Exit
+
+ifVerbose
+    :: MonadIO m
+    => Options
+    -> String
+    -> m ()
+ifVerbose opts = when (opts `get` optVerbose) . liftIO . putStr
+
+j2hs
+    :: Options
+    -> [String]
+    -> IO ()
+j2hs opts args = do
+
+    classpath <- mapM canonicalizePath $ opts `get` optClasspath
+    targetDir <- return (opts `get` optTargetDirectory)
+    let reflectDump_ = opts `get` optLoadReflectDump
+    reflectDump <- if null reflectDump_
+        then return Nothing
+        else canonicalizePath reflectDump_ >>= return . Just
+
+    let classpath' = concat $ L.intersperse ":" classpath
+        indent     = ("  " ++)
+
+    ifVerbose opts ((\_ -> let { __ = 
+{-# LINE 70 "Java2Haskell.hss" #-}
+concat ["Classpath:\n", (concatMap (\x -> "  " ++ x ++ "\n") (classpath)), ""]
+{-# LINE 72 "Java2Haskell.hss" #-}
+} in __) undefined)
+    print "Initializing JVM..."
+    initJava [((\_ -> let { __ = 
+{-# LINE 74 "Java2Haskell.hss" #-}
+concat ["-Djava.class.path=", (classpath'), ""]
+{-# LINE 74 "Java2Haskell.hss" #-}
+} in __) undefined)]
+    println " Done."
+    
+    unless (null args) $ runJava $ do
+        io $ do
+            ifVerbose opts ((\_ -> let { __ = 
+{-# LINE 79 "Java2Haskell.hss" #-}
+concat ["Target Directory:\n  ", (targetDir), "\n"]
+{-# LINE 82 "Java2Haskell.hss" #-}
+} in __) undefined)
+            createDirectoryIfMissing True targetDir
+            setCurrentDirectory targetDir
+            
+        ifVerbose opts ((\_ -> let { __ = 
+{-# LINE 86 "Java2Haskell.hss" #-}
+concat ["Looking for Java classes:\n", (concatMap (\x -> "  " ++ x ++ "\n") args), ""]
+{-# LINE 88 "Java2Haskell.hss" #-}
+} in __) undefined)
+
+        -- Gather all classes that need to be translated
+        print "Looking up classes..."
+        classes  <- findClasses (opts `get` optSearchDepth) args
+
+        println ((\_ -> let { __ = 
+{-# LINE 94 "Java2Haskell.hss" #-}
+concat [" ", (show $ length classes), " found."]
+{-# LINE 94 "Java2Haskell.hss" #-}
+} in __) undefined)
+        ifVerbose opts $
+            unlines (map indent classes)
+
+        -- Calculate the Haskell module names for packages and classes
+        let packages = Set.toList $ Set.fromList
+                     $ map (maybe "" id . takePackageName) classes
+
+            -- temporary class names
+            classModules_ = foldr (uncurry g) xEmpty $ map f classes
+              where f x = (x, makeClassModuleName x)
+                    g clazzName modName all = xInsert clazzName newName all
+                      where newName = head $ dropWhile (`xMemberR` all)
+                                           $ iterate (++ "_") modName
+
+            -- package names.
+            -- This func keeps in mind that package names must not clash with class names.
+            packageModules = foldr (uncurry g) xEmpty $ map f packages
+              where f x = (x, makePackageModuleName x)
+                    g pkgName modName all = xInsert pkgName newName all
+                      where newName = head $ dropWhile (\n -> n `xMemberR` classModules_
+                                                           || n `xMemberR` all)
+                                           $ iterate (++ "Package") modName
+
+            -- finally the class names.
+            -- This func keeps in mind that the package names might have been augmented
+            -- before. i.e. the package java.awt.image will be Java.Awt.ImagePackage now,
+            -- thus all classes inside the package have their full name changed too.
+            classModules :: Map String String
+            classModules = Map.fromList $ map f $ xToList classModules_
+              where f (clazzName, moduleName)
+                        = (clazzName, joinClassName (newPackageName, classModuleName))
+                      where classModuleName = takeClassName moduleName
+                            packageName = maybe "" id $ takePackageName clazzName
+                            newPackageName = packageModules `xGet` packageName
+
+            -- A mapping from packages to classes
+            classesByPackage :: MultiMap String String
+            classesByPackage = MultiMap.fromList
+                             $ map (\clazz -> (fst $ splitClassName clazz, clazz)) classes
+
+            -- The list of hidden modules
+            hiddenModules = map (++ "__") $ Map.elems classModules
+
+        classInfo <- gatherClassInfo opts reflectDump classModules
+
+        findJavaCore classesByPackage classInfo
+
+        when (opts `get` optOnlyReflect) $ io $ do
+            mapM_ println $ Map.elems classInfo
+            exitSuccess
+
+        generateModules opts classInfo classesByPackage classModules packageModules hiddenModules
+
+    return ()
+
+{-
+findJavaCore2
+    :: Map String JavaClass
+    -> Java ()
+findJavaCore2 classInfo = do
+
+    let classes = 
+-}
+
+findJavaCore
+    :: MultiMap String String
+    -> Map String JavaClass
+    -> Java ()
+findJavaCore classesByPackage classInfo = do
+
+    let packageDependencies :: Map String (Set String)
+        packageDependencies = Map.map findDependencies (MultiMap.toMap classesByPackage)
+          where
+            findDependencies classes = Set.fromList packageDependencies
+              where
+                dependencies = concatMap (classDependencies . (classInfo Map.!)) classes
+                packageDependencies = map (fst . splitClassName) dependencies
+
+        resolve :: Set String -> Set String
+        resolve = Set.fromList . concatMap (Set.toList . (packageDependencies Map.!)) . Set.toList
+
+        fullPackageDependencies = Map.map (exhaustively resolve) packageDependencies
+
+        coreJava = intersections (Map.elems fullPackageDependencies)
+
+    println (show $ Set.size coreJava)
+    println (Set.toList coreJava)
+
+    forM_ (Map.toList fullPackageDependencies) $ \(pkg, deps) -> do
+        let deps' = (deps Set.\\ coreJava)
+        print ((\_ -> let { __ = 
+{-# LINE 185 "Java2Haskell.hss" #-}
+concat ["", (pkg), ", ", (show $ Set.size deps'), " (", (show $ Set.size deps), ") dependencies:\n  "]
+{-# LINE 187 "Java2Haskell.hss" #-}
+} in __) undefined)
+        println $ Set.toList deps'
+
+
+-- Gather information about classes via Reflection
+-- or (depending on the opts set) from a dump file.
+gatherClassInfo
+    :: Options
+    -> Maybe FilePath
+    -> Map String String
+    -> Java (Map String JavaClass)
+gatherClassInfo opts reflectDump classModules = do
+
+    print ((\_ -> let { __ = 
+{-# LINE 200 "Java2Haskell.hss" #-}
+concat ["Gathering refection information..."]
+{-# LINE 200 "Java2Haskell.hss" #-}
+} in __) undefined)
+    let classNames = Map.keys classModules
+        updName name clazz = (name, clazz { classModName = classModules Map.! name })
+
+        getClassInfo :: Java (Map String JavaClass)
+        getClassInfo = Map.fromList
+            `fmap` map (uncurry updName)
+            `fmap` zip classNames
+            `fmap` everywhere (mkT (\(TyVar v) -> TyVar ('_':v)))
+            `fmap` reflectClasses classNames
+
+        readClassInfo :: String -> Java (Map String JavaClass)
+        readClassInfo reflectFile = io $ do
+            file <- openFile reflectFile ReadMode
+            contents <- hGetContents file
+            let contents' = read contents
+            result <- contents' `seq` return contents'
+            hClose file
+            return result
+            
+    classInfo <- maybe getClassInfo (\f -> print " (from dump)" >> readClassInfo f) reflectDump
+    println " Done."
+
+    unless (null (opts `get` optSaveReflectDump)) $ io $ do
+        file <- openFile (opts `get` optSaveReflectDump) WriteMode
+        print ((\_ -> let { __ = 
+{-# LINE 225 "Java2Haskell.hss" #-}
+concat ["Saving dump of reflection info..."]
+{-# LINE 225 "Java2Haskell.hss" #-}
+} in __) undefined)
+        hPutStr file (show classInfo)
+        println " Done."
+        hClose file
+
+    return classInfo
+
+
+-- This creates a graphviz file which can be used to
+-- visualize inter-package dependencies
+visualizeDependencies
+    :: Map String (Set String)
+    -> IO ()
+visualizeDependencies packageDependencies = do
+
+    file <- openFile "dependencies.neato" WriteMode
+    hPutStrLn file ((\_ -> let { __ = 
+{-# LINE 241 "Java2Haskell.hss" #-}
+concat ["digraph G {\n  overlap = false;"]
+{-# LINE 241 "Java2Haskell.hss" #-}
+} in __) undefined)
+
+    forM_ (Map.toList packageDependencies) $ \(pkg, deps) -> do
+        forM_ (Set.toList deps) $ \dep -> do
+            let augment = map (\x -> if x == '.' then '_' else x)
+                pkg' = augment pkg
+                dep' = augment dep
+            hPutStr file ((\_ -> let { __ = 
+{-# LINE 248 "Java2Haskell.hss" #-}
+concat ["  ", (pkg'), " -> ", (dep'), "\n"]
+{-# LINE 248 "Java2Haskell.hss" #-}
+} in __) undefined)
+
+    hPutStrLn file ((\_ -> let { __ = 
+{-# LINE 250 "Java2Haskell.hss" #-}
+concat ["}"]
+{-# LINE 250 "Java2Haskell.hss" #-}
+} in __) undefined)
+    hClose file
+
+-- This actually creates the Haskell module files
+generateModules
+    :: Options
+    -> Map String JavaClass
+    -> MultiMap String String
+    -> Map String String
+    -> Bimap CaseInsensitiveString CaseInsensitiveString
+    -> [String]
+    -> Java ()
+generateModules opts classInfo classesByPackage classModules packageModules hiddenModules = do
+
+    println ((\_ -> let { __ = 
+{-# LINE 264 "Java2Haskell.hss" #-}
+concat ["Generating modules for ", (show $ Map.size classModules), " classes in ", (show $ xSize packageModules), " packages..."]
+{-# LINE 265 "Java2Haskell.hss" #-}
+} in __) undefined)
+
+    -- A list of all modules
+    let allModules = xKeysR packageModules ++ Map.elems classModules
+
+    -- Create all the package files.
+    -- These contain the Java classes as Haskell types.
+    forM_ (xToList packageModules) $ \(packageName, packageMod) -> do
+        let dirName = strJoin [pathSeparator] (strSplitAll "." packageMod)
+
+        -- Create the directory for the package
+        io $ do 
+            createDirectoryIfMissing True dirName
+
+            let classes = map (classInfo Map.!)
+                              (MultiMap.lookup packageName classesByPackage)
+
+            -- Create the Haskell module file for the Java package
+            file <- openFile (dirName ++ ".hs") WriteMode
+            hPutStrLn file
+              $ printJavaPackageModule packageName packageMod classInfo classes
+            hClose file
+
+    -- Create all the class files.
+    -- These contain the java methods as Haskell functions.
+    forM_ (Map.toList classModules) $ \(clazzName, clazzMod) -> do
+        let fileName = strJoin [pathSeparator] (strSplitAll "." clazzMod)
+            clazz = classInfo Map.! clazzName
+
+        io $ do
+            -- Create the Haskell module file for the Java class.
+            file <- openFile (fileName ++ ".hs") WriteMode
+            hPutStrLn file $ printJavaClassModule clazz clazzMod classInfo
+            hClose file
+
+            -- Create the *hidden* Haskell module file for the Java class.
+            file <- openFile (fileName ++ "__.hs") WriteMode
+            hPutStrLn file $ printJavaClassModule' clazz clazzMod classInfo
+            hClose file
+
+    -- write Cabal file
+    when (opts `get` optCabalProject) $ io $ do
+        cabalFile <- openFile ((opts `get` optProjectName) ++ ".cabal") WriteMode
+        hPutStrLn cabalFile ((\_ -> let { __ = 
+{-# LINE 308 "Java2Haskell.hss" #-}
+concat ["name:           ", (opts `get` optProjectName), "\nversion:        ", (opts `get` optProjectVersion), "\ncabal-version:  >= 1.8\nbuild-type:     Simple\n\nLibrary {\n build-depends:\n  base >= 4 && < 5,\n  java-bridge\n exposed-modules:\n  ", (strJoin ",\n  " allModules), "\n other-modules:\n  ", (strJoin ",\n  " hiddenModules), " }\n"]
+{-# LINE 322 "Java2Haskell.hss" #-}
+} in __) undefined)
+        hClose cabalFile
+
diff --git a/dist/build/j2hs/j2hs-tmp/Main.hs b/dist/build/j2hs/j2hs-tmp/Main.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/j2hs/j2hs-tmp/Main.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# OPTIONS
+    -Wall
+    -fno-warn-missing-signatures
+    -fno-warn-name-shadowing
+ #-}
+
+module Main where
+
+import Options
+import JavaSE6
+import Java2Haskell
+
+import Foreign.Java.Utils
+import Foreign.Java.JNI (javaBridgeVersion)
+
+import System.Console.GetOpt
+import System.Environment (getArgs, getProgName)
+
+import Data.NamedRecord
+import Data.List
+import Data.List.Split
+import Data.Word
+
+
+versionInfo = ((\_ -> let { __ = 
+{-# LINE 26 "Main.hss" #-}
+concat ["Java <-> Haskell Bindings Generator (using java-bridge ", (javaBridgeVersion), ")"]
+{-# LINE 27 "Main.hss" #-}
+} in __) undefined)
+
+helpText = ((\_ -> let { __ = 
+{-# LINE 29 "Main.hss" #-}
+concat ["\n"]
+{-# LINE 31 "Main.hss" #-}
+} in __) undefined)
+
+-- | The flags (needed for the options list / GetOpt).
+data Flag = Help
+          | Version
+          | Packages [String]
+          | Classpath [String]
+          | SearchDepth Word32
+          | TargetDirectory String
+          | SaveReflectDump String
+          | LoadReflectDump String
+          | CompleteSE6
+          | OnlyReflect
+          | Filtered
+          | Verbose
+
+-- | The Command line options as fed to the GetOpt parser.
+options = [
+    Option "h" ["help"] (NoArg Help)
+        "Print this help text.",
+
+    Option "V" ["version"] (NoArg Version)
+        "Print version information.",
+
+    Option "c" ["classpath"] (ReqArg readClasspath "")
+        "The Java classpath to be used.",
+
+    Option "P" ["packages"] (ReqArg readPackages "")
+        "The packages to translate.",
+
+    Option "d" ["search-depth"] (ReqArg readSearchDepth "")
+        "The maximum search depth for dependent Java classes.",
+
+    Option "v" ["verbose"] (NoArg Verbose)
+        "Verbose output, prints extra diagnostic information.",
+
+    Option "D" ["dump-reflection-info"] (ReqArg SaveReflectDump "")
+        "Dump reflection information into the file specified by -r.",
+
+    Option "L" ["load-reflection-dump"] (ReqArg LoadReflectDump "")
+        "Load a reflection dump instead of looking it up.",
+
+    Option "X" ["java-se"] (NoArg CompleteSE6)
+        "Completely translate Java SE.",
+
+    Option "F" ["filtered"] (NoArg Filtered)
+        "Only translate a subset of the Java SE.",
+
+    Option "t" ["target-directory"] (ReqArg TargetDirectory "")
+        "The target directory for generated source files."
+ 
+ ] where
+    readPackages = Packages . splitOneOf ":;,"
+    readClasspath = Classpath . splitOneOf ":;,"
+    readSearchDepth = SearchDepth . read
+
+parseArgs :: IO (Either (Options, [String]) [String])
+-- ^ Parse command line arguments with the help of the GetOpt library.
+parseArgs = do
+    (opts, args, errs) <- getArgs >>= return . getOpt Permute options
+    if null errs
+        then return $ Left  (parseOpts newOptions opts, args)
+        else return $ Right errs
+  where
+    parseOpts opts [] = opts
+    parseOpts opts (x:xs) = flip parseOpts xs $
+        case x of
+            Help              -> opts `set` optShowHelp        := True
+            Version           -> opts `set` optShowVersion     := True
+            Verbose           -> opts `set` optVerbose         := True
+            Filtered          -> opts `set` optFiltered        := True
+            CompleteSE6       -> opts `set` optCompleteSE6     := True
+            OnlyReflect       -> opts `set` optOnlyReflect     := True
+            Classpath cp      -> opts `set` optClasspath       := cp
+            Packages pkgs     -> opts `set` optPackages        := pkgs
+            SearchDepth d     -> opts `set` optSearchDepth     := d
+            SaveReflectDump f -> opts `set` optSaveReflectDump := f
+            LoadReflectDump f -> opts `set` optLoadReflectDump := f
+            TargetDirectory t -> opts `set` optTargetDirectory := t
+
+main :: IO ()
+-- ^ main: parseArgs and either 'run' or show errors.
+main = parseArgs >>= either (uncurry run) (mapM_ putStr)
+
+run :: Options -> [String] -> IO ()
+-- ^ The actual main function.
+run opts _args -- arg are currently unused
+    | opts `get` optShowHelp = do
+        progName <- getProgName
+        putStrLn (usageInfo ((\_ -> let { __ = 
+{-# LINE 120 "Main.hss" #-}
+concat ["", (versionInfo), "\n\nUsage: ", (progName), " [options]\n\n", (helpText), "\n"]
+{-# LINE 126 "Main.hss" #-}
+} in __) undefined) options)
+
+    | opts `get` optShowVersion = putStrLn versionInfo
+    | opts `get` optCompleteSE6 =
+        if opts `get` optFiltered then j2hs opts (filter minimal  javaClassesSE6)
+                                  else j2hs opts (filter justJava javaClassesSE6)
+
+    | otherwise = getProgName >>= \progName -> putStr ((\_ -> let { __ = 
+{-# LINE 133 "Main.hss" #-}
+concat ["No command given. Use `", (progName), " help' for help.\n"]
+{-# LINE 135 "Main.hss" #-}
+} in __) undefined)
+  where
+    justJava = ("java" `isPrefixOf`)
+    minimal name = pkg `elem` (opts `get` optPackages)
+        where (pkg, _) = splitClassName name
+
+
diff --git a/dist/build/j2hs/j2hs-tmp/Translate.hs b/dist/build/j2hs/j2hs-tmp/Translate.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/j2hs/j2hs-tmp/Translate.hs
@@ -0,0 +1,344 @@
+{-# LANGUAGE Haskell2010 #-}
+
+module Translate where
+
+import Typomatic
+
+import Foreign.Java.Utils
+import Data.Map (Map)
+
+import Language.Haskell.Reflect
+import Language.Java.Reflect
+
+import Data.Function
+
+import qualified Data.Char as Char
+import qualified Data.List as List
+import qualified Data.Set  as Set
+import qualified Data.Map  as Map
+
+import qualified Data.List.HIUtils as HI
+
+import Control.Arrow
+
+pkgModExports :: Map String JavaClass -> [JavaClass] -> String
+pkgModExports info classes = concatMap (\(t, b) -> ((\_ -> let { __ = 
+{-# LINE 25 "Translate.hss" #-}
+concat ["    -- * ", (show t), "s\n", (b), ""]
+{-# LINE 25 "Translate.hss" #-}
+} in __) undefined))
+        $ map (second $ concatMap format)
+        $ HI.aggregateAL
+        $ zip (map classType classes) classes
+  where
+    format clazz =
+        let haskName  = takeClassName $ classModName clazz
+            javaName  = className clazz
+            dataDecl  = if classIface clazz then "" else
+                ((\_ -> let { __ = 
+{-# LINE 34 "Translate.hss" #-}
+concat ["    ", (dataTName haskName), " (..),\n"]
+{-# LINE 34 "Translate.hss" #-}
+} in __) undefined)
+        in ((\_ -> let { __ = 
+{-# LINE 35 "Translate.hss" #-}
+concat ["    -- ** ", (show $ classType clazz), " ", (javaName), "\n    -- | For constructors, methods, and so on, see: \"", (classModName clazz), "\".\n    ", (tyclTName haskName), ",\n", (dataDecl), "    ", (newtTName haskName), " ", (if classEnum clazz then "(..)" else ""), ",\n"]
+{-# LINE 41 "Translate.hss" #-}
+} in __) undefined)
+
+
+pkgModImports :: Map String JavaClass -> [JavaClass] -> String
+pkgModImports info classes = concatMap (format . classModName) classes
+  where format modName = ((\_ -> let { __ = 
+{-# LINE 46 "Translate.hss" #-}
+concat ["import ", (modName), "__ hiding (info')\n"]
+{-# LINE 46 "Translate.hss" #-}
+} in __) undefined)
+
+
+pkgModDecl :: Map String JavaClass -> [JavaClass] -> String
+pkgModDecl info classes = ""
+
+
+-- Modules and Boot files
+  
+classBootExports :: Map String JavaClass -> JavaClass -> String
+classBootExports info clazz = ""
+
+
+classBootImports :: Map String JavaClass -> JavaClass -> String
+classBootImports info clazz = ""
+
+
+classModImports :: Map String JavaClass -> JavaClass -> String
+classModImports info clazz = concatMap format references
+  where
+    format package = ((\_ -> let { __ = 
+{-# LINE 66 "Translate.hss" #-}
+concat ["import qualified ", (package), "\n"]
+{-# LINE 66 "Translate.hss" #-}
+} in __) undefined)
+    references = Set.toList
+        $ Set.map (fst . splitClassName . classModName . check . flip Map.lookup info)
+        $ Set.fromList (classFullName clazz : dependencies)
+    dependencies = classDependencies clazz
+    check = maybe (error ((\_ -> let { __ = 
+{-# LINE 71 "Translate.hss" #-}
+concat ["classModImports in Foreign.Java.Bindings.Java2Haskell - class definition not found"]
+{-# LINE 73 "Translate.hss" #-}
+} in __) undefined)) id
+
+
+classBootDecl :: Map String JavaClass -> JavaClass -> String
+classBootDecl info clazz = ((\_ -> let { __ = 
+{-# LINE 77 "Translate.hss" #-}
+concat [""]
+{-# LINE 78 "Translate.hss" #-}
+} in __) undefined)
+
+classModExports :: Map String JavaClass -> JavaClass -> String
+classModExports info clazz = "    -- * Methods\n" ++ concatMap methodExport methodNames
+  where
+    methods = List.sortBy (compare `on` methodName) (classMethods clazz)
+    methodNames = mkMethodNames methods
+    methodExport name = name ++ ",    \n"
+
+
+classModDecl :: Map String JavaClass -> JavaClass -> String
+classModDecl info clazz = concatMap methodDecl $ zip methodNames methods
+  where
+    methods = List.sortBy (compare `on` methodName) (classMethods clazz)
+    methodNames = mkMethodNames methods
+    methodDecl (name, method)
+        | arrayTypes = ((\_ -> let { __ = 
+{-# LINE 94 "Translate.hss" #-}
+concat ["", (name), " :: ", (signature), "\n", (name), " = Prelude.undefined\n"]
+{-# LINE 97 "Translate.hss" #-}
+} in __) undefined)
+        | otherwise = ((\_ -> let { __ = 
+{-# LINE 98 "Translate.hss" #-}
+concat ["", (haddock), "\n", (name), " :: ", (signature), "\n", (name), "", (argsDecl), " = do\n    (Prelude.Just clazz) <- JNI.getClass \"", (classFullName clazz), "\"\n    (Prelude.Just method) <- clazz `JNI.", (getMethod), "` ", (jniSignature), "\n", (thisArg), "", (readArgs), "    result <- JNI.", (callMethod), " method ", (argsRefs), "\n    ", (convertResult), " result\n"]
+{-# LINE 108 "Translate.hss" #-}
+} in __) undefined)
+      where
+        arrayTypes
+--            | any isArrayType (methodParams method) = True
+            | (Just ret) <- fst (methodReturnType method) = isArrayType ret
+            | otherwise = False
+        isArrayType x = case x of JArr _ -> True ; _ -> False
+        isStatic = methodStatic method
+        javaSignature = fJavaSignature argsInfo
+        javaReturnType = fJavaReturnType argsInfo
+        jniSignature = fJniSignature argsInfo
+        signature = fSignature argsInfo
+        getMethod = if isStatic then "getStaticMethod" else "getMethod"
+        callMethod = if isStatic then "callStaticMethodE" else "callMethodE"
+        args = fArgNames argsInfo
+        argsNotThis = (if isStatic then id else tail) args
+        argsInfo = runTypomatic info (typomatic clazz method)
+        argsDecl = concatMap (' ':) args
+        argsRefs = concatMap (++ "' ") args
+        haddock = ((\_ -> let { __ = 
+{-# LINE 127 "Translate.hss" #-}
+concat ["-- | @", (if isStatic then "static " else "virtual "), "", (if methodSynchronized method then "synchronized " else ""), "", (if methodNative method then "native " else ""), "", (if methodFinal method then "final " else ""), "", (javaSignature), " -> ", (javaReturnType), "@"]
+{-# LINE 132 "Translate.hss" #-}
+} in __) undefined)
+        thisArg = if isStatic then "" else ((\_ -> let { __ = 
+{-# LINE 133 "Translate.hss" #-}
+concat ["    ", (head args), "' <- JNI.asObject ", (head args), "\n"]
+{-# LINE 133 "Translate.hss" #-}
+} in __) undefined)
+        readArgs = concatMap (("    " ++). uncurry readArg) (zip argsNotThis (map fst $ methodParams method))
+        readArg name jtype = case jtype of
+            JBoolean -> ((\_ -> let { __ = 
+{-# LINE 136 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toBoolean ", (name), "\n"]
+{-# LINE 136 "Translate.hss" #-}
+} in __) undefined)
+            JChar    -> ((\_ -> let { __ = 
+{-# LINE 137 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toChar ", (name), "\n"]
+{-# LINE 137 "Translate.hss" #-}
+} in __) undefined)
+            JByte    -> ((\_ -> let { __ = 
+{-# LINE 138 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toByte ", (name), "\n"]
+{-# LINE 138 "Translate.hss" #-}
+} in __) undefined)
+            JShort   -> ((\_ -> let { __ = 
+{-# LINE 139 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toShort ", (name), "\n"]
+{-# LINE 139 "Translate.hss" #-}
+} in __) undefined)
+            JInt     -> ((\_ -> let { __ = 
+{-# LINE 140 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toInt ", (name), "\n"]
+{-# LINE 140 "Translate.hss" #-}
+} in __) undefined)
+            JLong    -> ((\_ -> let { __ = 
+{-# LINE 141 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toLong ", (name), "\n"]
+{-# LINE 141 "Translate.hss" #-}
+} in __) undefined)
+            JFloat   -> ((\_ -> let { __ = 
+{-# LINE 142 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toFloat ", (name), "\n"]
+{-# LINE 142 "Translate.hss" #-}
+} in __) undefined)
+            JDouble  -> ((\_ -> let { __ = 
+{-# LINE 143 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.toDouble ", (name), "\n"]
+{-# LINE 143 "Translate.hss" #-}
+} in __) undefined)
+            JObj _   -> ((\_ -> let { __ = 
+{-# LINE 144 "Translate.hss" #-}
+concat ["", (name), "' <- Prelude.Just <$> JNI.asObject ", (name), "\n"]
+{-# LINE 144 "Translate.hss" #-}
+} in __) undefined)
+            JArr _   -> ((\_ -> let { __ = 
+{-# LINE 145 "Translate.hss" #-}
+concat ["", (name), "' <- JNIS.asMaybeArrayObject ", (name), "\n"]
+{-# LINE 145 "Translate.hss" #-}
+} in __) undefined)
+        convertResult = ("JNIS." ++) $ case fst (methodReturnType method) of
+            Nothing -> "toVoidResult"
+            Just t -> case t of
+                JBoolean -> "toBooleanResult"
+                JChar    -> "toCharResult"
+                JByte    -> "toByteResult"
+                JShort   -> "toShortResult"
+                JInt     -> "toIntResult"
+                JLong    -> "toLongResult"
+                JFloat   -> "toFloatResult"
+                JDouble  -> "toDoubleResult"
+                JObj n   -> "toObjectResult"
+                JArr c   -> "toArrayResult"
+
+        
+
+mkMethodNames :: [JavaMethod] -> [String]
+mkMethodNames = concatMap (zipWith (flip (++)) (iterate (++"'") ""))
+                . List.group . map sanitize . map methodName
+  where
+    sanitize name
+        | Char.isUpper (head name) = '_' : name
+        | name `elem` haskellKeywords = name ++ "'"
+        | otherwise = name
+
+
+-- Hidden Modules and Boot files
+
+
+classModExports' :: Map String JavaClass -> JavaClass -> String
+classModExports' info clazz = ((\_ -> let { __ = 
+{-# LINE 176 "Translate.hss" #-}
+concat ["    ", (tyclTName haskName), ",\n    ", (dataTName haskName), " (..),\n    ", (newtTName haskName), " ", (if classEnum clazz then "(..)" else ""), ",\n"]
+{-# LINE 180 "Translate.hss" #-}
+} in __) undefined)
+  where
+    haskName = takeClassName $ classModName clazz
+    javaName = className clazz
+
+
+classBootExports' :: Map String JavaClass -> JavaClass -> String
+classBootExports' info clazz = ((\_ -> let { __ = 
+{-# LINE 187 "Translate.hss" #-}
+concat ["    ", (tyclTName haskName), ",\n    ", (dataTName haskName), " (..),\n    ", (newtTName haskName), ",\n"]
+{-# LINE 191 "Translate.hss" #-}
+} in __) undefined)
+  where
+    haskName = takeClassName $ classModName clazz
+    javaName = className clazz
+
+
+classBootImports' :: Map String JavaClass -> JavaClass -> String
+classBootImports' info clazz
+    = concatMap (format . classModName) supertypes
+  where
+    format modName = ((\_ -> let { __ = 
+{-# LINE 201 "Translate.hss" #-}
+concat ["import qualified ", (modName), "__\n"]
+{-# LINE 201 "Translate.hss" #-}
+} in __) undefined)
+    supertypes = map (check . flip Map.lookup info)
+               $ Set.toList
+               $ Set.fromList (classParents clazz ++ classIfaces clazz)
+    check = maybe (error ((\_ -> let { __ = 
+{-# LINE 205 "Translate.hss" #-}
+concat ["classBootImports' in Foreign.Java.Bindings.Java2Haskell - class definition not found"]
+{-# LINE 207 "Translate.hss" #-}
+} in __) undefined)) id
+
+
+classModImports' :: Map String JavaClass -> JavaClass -> String
+classModImports' info clazz = ""
+
+
+classBootDecl' :: Map String JavaClass -> JavaClass -> String
+classBootDecl' info clazz
+    | classEnum clazz = ((\_ -> let { __ = 
+{-# LINE 216 "Translate.hss" #-}
+concat ["class ", (tyclTDecl), "\ndata ", (newtTDecl), " = ", (enumConstants), "\ndata ", (dataTDecl), " = ", (dataCDecl), "\n"]
+{-# LINE 220 "Translate.hss" #-}
+} in __) undefined)
+    | otherwise = ((\_ -> let { __ = 
+{-# LINE 221 "Translate.hss" #-}
+concat ["class ", (tyclTDecl), "\nnewtype ", (newtTDecl), " = ", (newtCDecl), " JNI.JObject\ndata ", (dataTDecl), " = ", (dataCDecl), "\n"]
+{-# LINE 225 "Translate.hss" #-}
+} in __) undefined)
+  where baseName  = takeClassName $ classModName clazz
+        params    = concatMap (\(p:ps) -> ' ' : Char.toLower p : ps)
+                      $ map (tyVarName . paramName) $ classTypeParams clazz
+        newtTDecl = newtTName baseName ++ params
+        newtCDecl = newtCName baseName
+        dataTDecl = dataTName baseName ++ params
+        dataCDecl = dataCName baseName ++ params
+        tyclTDecl = ((\_ -> let { __ = 
+{-# LINE 233 "Translate.hss" #-}
+concat ["(JNI.JavaObject this", (context), ") => ", (tyclTName baseName), " this"]
+{-# LINE 233 "Translate.hss" #-}
+} in __) undefined)
+        context = concatMap parentContext (classParents clazz)
+        parentContext parent = ((\_ -> let { __ = 
+{-# LINE 235 "Translate.hss" #-}
+concat [", ", (qualifiedName), " this"]
+{-# LINE 235 "Translate.hss" #-}
+} in __) undefined)
+          where parentClass = info Map.! parent
+                modName = classModName parentClass
+                qualifiedName = modName ++ "__." ++ (tyclTName $ takeClassName modName)
+        enumConstants = concat $ List.intersperse " | " $ map sanitize $ map snd $ classEnumConstants clazz
+          where sanitize (x:xs) = Char.toUpper x : xs
+
+
+classModDecl' :: Map String JavaClass -> JavaClass -> String
+classModDecl' info clazz
+    | classEnum clazz = ((\_ -> let { __ = 
+{-# LINE 245 "Translate.hss" #-}
+concat ["instance JNI.JavaObject (", (newtTDecl), ") where\n    asObject = Prelude.undefined\ninstance ", (tyclTName baseName), " (", (newtTDecl), ")\ninstance JNIS.InstanceOf (", (dataTDecl), ") where\n    type CoercedType (", (dataTDecl), ") = (", (newtTDecl), ")\n", (instances), "\n"]
+{-# LINE 252 "Translate.hss" #-}
+} in __) undefined)
+    | otherwise = ((\_ -> let { __ = 
+{-# LINE 253 "Translate.hss" #-}
+concat ["instance JNI.JavaObject (", (newtTDecl), ") where\n    asObject (", (newtCName baseName), " obj) = return obj\ninstance JNIS.UnsafeCast (", (newtTDecl), ") where\n    unsafeFromJObject obj = return (", (newtCDecl), " obj)\ninstance ", (tyclTName baseName), " (", (newtTDecl), ")\ninstance JNIS.InstanceOf (", (dataTDecl), ") where\n    type CoercedType (", (dataTDecl), ") = (", (newtTDecl), ")\n    coerce o t = do\n        obj <- JNI.asObject o\n        (Prelude.Just clazz) <- JNI.getClass \"", (fullClassName), "\"\n        isInstanceOf <- obj `JNI.isInstanceOf` clazz\n        if isInstanceOf\n            then Prelude.Just <$> (JNIS.unsafeFromJObject obj)\n            else return Prelude.Nothing\n", (instances), "\n"]
+{-# LINE 269 "Translate.hss" #-}
+} in __) undefined)
+  where fullClassName = classFullName clazz
+        baseName  = takeClassName $ classModName clazz
+        params    = concatMap (\(p:ps) -> ' ' : Char.toLower p : ps)
+                      $ map (tyVarName . paramName) $ classTypeParams clazz
+        newtTDecl = newtTName baseName ++ params
+        newtCDecl = newtCName baseName
+        dataTDecl = dataTName baseName ++ params
+        dataCDecl = dataCName baseName ++ params
+        instances = concatMap parentInstance (classParents clazz)
+        parentInstance parent = ((\_ -> let { __ = 
+{-# LINE 279 "Translate.hss" #-}
+concat ["instance ", (qualifiedName), " (", (newtTDecl), ")\n"]
+{-# LINE 281 "Translate.hss" #-}
+} in __) undefined)
+          where parentClass = info Map.! parent
+                modName = classModName parentClass
+                qualifiedName = modName ++ "__." ++ (tyclTName $ takeClassName modName)
+
+
diff --git a/j2hs.cabal b/j2hs.cabal
new file mode 100644
--- /dev/null
+++ b/j2hs.cabal
@@ -0,0 +1,51 @@
+name:           j2hs
+version:        0.9
+
+license:        MIT
+license-file:   LICENSE
+
+author:         Julian Fleischer <julian.fleischer@fu-berlin.de>
+maintainer:     Julian Fleischer <julian.fleischer@fu-berlin.de>
+
+stability:      experimental
+category:       Foreign, Java, JVM, FFI Tools
+
+cabal-version:  >= 1.8
+
+synopsis:       j2hs
+description:    j2hs
+
+build-type:     Custom
+
+
+Executable j2hs
+
+    hs-source-dirs: src
+    main-is: Main.hs
+
+    other-modules:  Options
+                    , Java2Haskell
+                    , JavaSE6
+                    , Translate
+                    , Typomatic
+                    , Bindings
+
+    build-depends:  base >= 4.5 && < 5
+                    , hinduce-missingh
+                    , java-bridge == 0.9
+                    , java-bridge-extras == 0.9
+                    , java-reflect == 0.9
+                    , haskell-reflect == 0.9
+                    , split >= 0.2.1.1
+                    , named-records >= 0.5
+                    , filepath >= 1.3
+                    , directory >= 1.1.0.2
+                    , containers >= 0.4.2.1
+                    , bimap >= 0.2.4
+                    , multimap >= 1.2
+                    , syb >= 0.3.6.1
+                    , strings >= 1.1
+                    , mtl >= 2.1.1
+                    , transformers >= 0.3
+
+
diff --git a/src/Bindings.hss b/src/Bindings.hss
new file mode 100644
--- /dev/null
+++ b/src/Bindings.hss
@@ -0,0 +1,163 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# OPTIONS -Wall #-}
+
+-- | Functions for generating glue code between Haskell and Java.
+module Bindings (
+
+    -- * Create Haskell glue code from Java definitions
+    printJavaPackageModule,
+    printJavaClassModule,
+    printJavaClassBootfile,
+    printJavaClassModule',
+    printJavaClassBootfile',
+
+  ) where
+
+import Translate
+import Foreign.Java.Utils
+import Language.Java.Reflect.Types
+
+import Data.Map (Map)
+
+imports :: String
+-- ^ Imports of all auto generated java code files.
+imports  = """
+    import qualified Foreign.Java as JNI
+    import Foreign.Java ((-->))
+    import qualified Prelude as Prelude
+    import Prelude ((.), ($), (>>=), (>>), return)
+    import qualified Foreign.Java.Bindings as JNIS
+    import Data.Functor ((<$>))
+    """
+
+classInfoSignature :: String
+-- ^ 
+classInfoSignature = "Prelude.String"
+
+classInfo' :: JavaClass -> String
+-- ^ 
+classInfo' clazz = className clazz
+
+packageInfo' :: String -> a -> String
+packageInfo' packageName classes = packageName
+
+printJavaPackageModule :: String      -- The Java package name
+                       -> String      -- The Haskell module name of the Java package
+                       -> Map String JavaClass -- Info about all other classes
+                       -> [JavaClass] -- The Java classes contained in the Java package
+                       -> String
+-- ^ 
+printJavaPackageModule packageName modName classInfo classes = """
+    {-# LANGUAGE Haskell2010 #-}
+    -- | Package @#{packageName}@
+    module #{modName} (
+    #{moduleExports}\
+        info'
+    ) where
+    #{imports}
+    #{moduleImports}
+    -- Information about this package.
+    info' = #{show $ packageInfo' packageName classes}
+    #{moduleDeclarations}
+    """
+  where moduleDeclarations   = pkgModDecl     classInfo classes
+        moduleImports        = pkgModImports  classInfo classes
+        moduleExports        = pkgModExports  classInfo classes
+
+
+printJavaClassModule :: JavaClass -- The Java class
+                     -> String    -- The Haskell module name of the Java class
+                     -> Map String JavaClass -- Info about all classes
+                     -> String
+-- ^ 
+printJavaClassModule clazz modName classInfo = """
+    {-# LANGUAGE Haskell2010 #-}
+    -- | #{show $ classType clazz} @#{classFullName clazz}@
+    module #{modName} (
+    #{moduleExports}\
+        -- * Information about this class.
+        info'
+    ) where
+    #{imports}
+    #{bootfileImports}
+    #{moduleImports}
+    info' = #{show $ classInfo' clazz}
+    #{bootfileDeclarations}
+    #{moduleDeclarations}
+    """
+  where bootfileDeclarations = classBootDecl    classInfo clazz
+        bootfileImports      = classBootImports classInfo clazz
+        moduleDeclarations   = classModDecl     classInfo clazz
+        moduleImports        = classModImports  classInfo clazz
+        moduleExports        = classModExports  classInfo clazz
+
+
+printJavaClassBootfile :: JavaClass -- The Java class
+                       -> String    -- The Haskell module name of the Java class
+                       -> Map String JavaClass -- Info about all classes
+                       -> String
+-- ^ 
+printJavaClassBootfile clazz modName classInfo = """
+    {-# LANGUAGE Haskell2010 #-}
+    -- Bootfile for class #{className clazz}
+    module #{modName} (
+    #{bootfileExports}\
+        info'
+    ) where
+    #{imports}
+    #{bootfileImports}
+    info' :: #{classInfoSignature}
+    #{bootfileDeclarations}
+    """
+  where bootfileDeclarations = classBootDecl    classInfo clazz
+        bootfileImports      = classBootImports classInfo clazz
+        bootfileExports      = classBootExports classInfo clazz
+
+
+printJavaClassModule' :: JavaClass -- The Java class
+                      -> String    -- The Haskell module name of the Java class
+                      -> Map String JavaClass -- Info about all classes
+                      -> String
+-- ^ 
+printJavaClassModule' clazz modName classInfo = """
+    {-# LANGUAGE Haskell2010, TypeFamilies #-}
+    -- hidden @#{className clazz}@
+    module #{modName}__ (
+    #{moduleExports}\
+        info'
+    ) where
+    #{imports}
+    #{bootfileImports}
+    #{moduleImports}
+    info' = #{show $ classInfo' clazz}
+    #{bootfileDeclarations}
+    #{moduleDeclarations}
+    """
+  where bootfileDeclarations = classBootDecl'    classInfo clazz
+        bootfileImports      = classBootImports' classInfo clazz
+        moduleDeclarations   = classModDecl'     classInfo clazz
+        moduleImports        = classModImports'  classInfo clazz
+        moduleExports        = classModExports'  classInfo clazz
+
+
+printJavaClassBootfile' :: JavaClass -- The Java class
+                        -> String    -- The Haskell module name of the Java class
+                        -> Map String JavaClass -- Info about all classes
+                        -> String
+-- ^ 
+printJavaClassBootfile' clazz modName classInfo = """
+    {-# LANGUAGE Haskell2010 #-}
+    -- hidden Bootfile for class #{className clazz}
+    module #{modName}__ (
+    #{bootfileExports}\
+        info'
+    ) where
+    #{imports}
+    #{bootfileImports}
+    info' :: #{classInfoSignature}
+    #{bootfileDeclarations}
+    """
+  where bootfileDeclarations = classBootDecl'    classInfo clazz
+        bootfileImports      = classBootImports' classInfo clazz
+        bootfileExports      = classBootExports' classInfo clazz
+
diff --git a/src/Java2Haskell.hss b/src/Java2Haskell.hss
new file mode 100644
--- /dev/null
+++ b/src/Java2Haskell.hss
@@ -0,0 +1,324 @@
+{-# LANGUAGE Haskell2010
+ #-}
+{-# OPTIONS
+    -Wall
+    -fno-warn-name-shadowing
+ #-}
+
+{- | The @j2hs@ command - create Haskell bindings for Java classes.
+    
+-}
+module Java2Haskell where
+
+import Prelude hiding (print)
+
+import Options
+import Bindings
+import Utils
+
+import Foreign.Java
+import Foreign.Java.Utils
+import Foreign.Java.IO
+
+import Language.Java.Reflect
+
+import Data.NamedRecord
+import qualified Data.List as L
+import Data.Strings
+
+import Data.Generics
+
+import Data.Bimap (Bimap)
+import Data.Map (Map)
+import Data.MultiMap (MultiMap)
+import Data.Set (Set)
+import qualified Data.Map as Map
+import qualified Data.Set as Set
+import qualified Data.MultiMap as MultiMap
+
+import Control.Monad
+import Control.Monad.IO.Class
+
+import System.Directory
+import System.FilePath
+import System.IO hiding (print)
+import System.Exit
+
+ifVerbose
+    :: MonadIO m
+    => Options
+    -> String
+    -> m ()
+ifVerbose opts = when (opts `get` optVerbose) . liftIO . putStr
+
+j2hs
+    :: Options
+    -> [String]
+    -> IO ()
+j2hs opts args = do
+
+    classpath <- mapM canonicalizePath $ opts `get` optClasspath
+    targetDir <- return (opts `get` optTargetDirectory)
+    let reflectDump_ = opts `get` optLoadReflectDump
+    reflectDump <- if null reflectDump_
+        then return Nothing
+        else canonicalizePath reflectDump_ >>= return . Just
+
+    let classpath' = concat $ L.intersperse ":" classpath
+        indent     = ("  " ++)
+
+    ifVerbose opts """
+        Classpath:
+        #{concatMap (\x -> "  " ++ x ++ "\n") (classpath)}"""
+    print "Initializing JVM..."
+    initJava ["""-Djava.class.path=#{classpath'}"""]
+    println " Done."
+    
+    unless (null args) $ runJava $ do
+        io $ do
+            ifVerbose opts """
+                Target Directory:
+                  #{targetDir}
+                """
+            createDirectoryIfMissing True targetDir
+            setCurrentDirectory targetDir
+            
+        ifVerbose opts """
+            Looking for Java classes:
+            #{concatMap (\x -> "  " ++ x ++ "\n") args}"""
+
+        -- Gather all classes that need to be translated
+        print "Looking up classes..."
+        classes  <- findClasses (opts `get` optSearchDepth) args
+
+        println """ #{show $ length classes} found."""
+        ifVerbose opts $
+            unlines (map indent classes)
+
+        -- Calculate the Haskell module names for packages and classes
+        let packages = Set.toList $ Set.fromList
+                     $ map (maybe "" id . takePackageName) classes
+
+            -- temporary class names
+            classModules_ = foldr (uncurry g) xEmpty $ map f classes
+              where f x = (x, makeClassModuleName x)
+                    g clazzName modName all = xInsert clazzName newName all
+                      where newName = head $ dropWhile (`xMemberR` all)
+                                           $ iterate (++ "_") modName
+
+            -- package names.
+            -- This func keeps in mind that package names must not clash with class names.
+            packageModules = foldr (uncurry g) xEmpty $ map f packages
+              where f x = (x, makePackageModuleName x)
+                    g pkgName modName all = xInsert pkgName newName all
+                      where newName = head $ dropWhile (\n -> n `xMemberR` classModules_
+                                                           || n `xMemberR` all)
+                                           $ iterate (++ "Package") modName
+
+            -- finally the class names.
+            -- This func keeps in mind that the package names might have been augmented
+            -- before. i.e. the package java.awt.image will be Java.Awt.ImagePackage now,
+            -- thus all classes inside the package have their full name changed too.
+            classModules :: Map String String
+            classModules = Map.fromList $ map f $ xToList classModules_
+              where f (clazzName, moduleName)
+                        = (clazzName, joinClassName (newPackageName, classModuleName))
+                      where classModuleName = takeClassName moduleName
+                            packageName = maybe "" id $ takePackageName clazzName
+                            newPackageName = packageModules `xGet` packageName
+
+            -- A mapping from packages to classes
+            classesByPackage :: MultiMap String String
+            classesByPackage = MultiMap.fromList
+                             $ map (\clazz -> (fst $ splitClassName clazz, clazz)) classes
+
+            -- The list of hidden modules
+            hiddenModules = map (++ "__") $ Map.elems classModules
+
+        classInfo <- gatherClassInfo opts reflectDump classModules
+
+        findJavaCore classesByPackage classInfo
+
+        when (opts `get` optOnlyReflect) $ io $ do
+            mapM_ println $ Map.elems classInfo
+            exitSuccess
+
+        generateModules opts classInfo classesByPackage classModules packageModules hiddenModules
+
+    return ()
+
+{-
+findJavaCore2
+    :: Map String JavaClass
+    -> Java ()
+findJavaCore2 classInfo = do
+
+    let classes = 
+-}
+
+findJavaCore
+    :: MultiMap String String
+    -> Map String JavaClass
+    -> Java ()
+findJavaCore classesByPackage classInfo = do
+
+    let packageDependencies :: Map String (Set String)
+        packageDependencies = Map.map findDependencies (MultiMap.toMap classesByPackage)
+          where
+            findDependencies classes = Set.fromList packageDependencies
+              where
+                dependencies = concatMap (classDependencies . (classInfo Map.!)) classes
+                packageDependencies = map (fst . splitClassName) dependencies
+
+        resolve :: Set String -> Set String
+        resolve = Set.fromList . concatMap (Set.toList . (packageDependencies Map.!)) . Set.toList
+
+        fullPackageDependencies = Map.map (exhaustively resolve) packageDependencies
+
+        coreJava = intersections (Map.elems fullPackageDependencies)
+
+    println (show $ Set.size coreJava)
+    println (Set.toList coreJava)
+
+    forM_ (Map.toList fullPackageDependencies) $ \(pkg, deps) -> do
+        let deps' = (deps Set.\\ coreJava)
+        print """
+            #{pkg}, #{show $ Set.size deps'} (#{show $ Set.size deps}) dependencies:
+              """
+        println $ Set.toList deps'
+
+
+-- Gather information about classes via Reflection
+-- or (depending on the opts set) from a dump file.
+gatherClassInfo
+    :: Options
+    -> Maybe FilePath
+    -> Map String String
+    -> Java (Map String JavaClass)
+gatherClassInfo opts reflectDump classModules = do
+
+    print """Gathering refection information..."""
+    let classNames = Map.keys classModules
+        updName name clazz = (name, clazz { classModName = classModules Map.! name })
+
+        getClassInfo :: Java (Map String JavaClass)
+        getClassInfo = Map.fromList
+            `fmap` map (uncurry updName)
+            `fmap` zip classNames
+            `fmap` everywhere (mkT (\(TyVar v) -> TyVar ('_':v)))
+            `fmap` reflectClasses classNames
+
+        readClassInfo :: String -> Java (Map String JavaClass)
+        readClassInfo reflectFile = io $ do
+            file <- openFile reflectFile ReadMode
+            contents <- hGetContents file
+            let contents' = read contents
+            result <- contents' `seq` return contents'
+            hClose file
+            return result
+            
+    classInfo <- maybe getClassInfo (\f -> print " (from dump)" >> readClassInfo f) reflectDump
+    println " Done."
+
+    unless (null (opts `get` optSaveReflectDump)) $ io $ do
+        file <- openFile (opts `get` optSaveReflectDump) WriteMode
+        print """Saving dump of reflection info..."""
+        hPutStr file (show classInfo)
+        println " Done."
+        hClose file
+
+    return classInfo
+
+
+-- This creates a graphviz file which can be used to
+-- visualize inter-package dependencies
+visualizeDependencies
+    :: Map String (Set String)
+    -> IO ()
+visualizeDependencies packageDependencies = do
+
+    file <- openFile "dependencies.neato" WriteMode
+    hPutStrLn file """digraph G {\n  overlap = false;"""
+
+    forM_ (Map.toList packageDependencies) $ \(pkg, deps) -> do
+        forM_ (Set.toList deps) $ \dep -> do
+            let augment = map (\x -> if x == '.' then '_' else x)
+                pkg' = augment pkg
+                dep' = augment dep
+            hPutStr file """  #{pkg'} -> #{dep'}\n"""
+
+    hPutStrLn file """}"""
+    hClose file
+
+-- This actually creates the Haskell module files
+generateModules
+    :: Options
+    -> Map String JavaClass
+    -> MultiMap String String
+    -> Map String String
+    -> Bimap CaseInsensitiveString CaseInsensitiveString
+    -> [String]
+    -> Java ()
+generateModules opts classInfo classesByPackage classModules packageModules hiddenModules = do
+
+    println """Generating modules for #{show $ Map.size classModules} classes in \
+               #{show $ xSize packageModules} packages..."""
+
+    -- A list of all modules
+    let allModules = xKeysR packageModules ++ Map.elems classModules
+
+    -- Create all the package files.
+    -- These contain the Java classes as Haskell types.
+    forM_ (xToList packageModules) $ \(packageName, packageMod) -> do
+        let dirName = strJoin [pathSeparator] (strSplitAll "." packageMod)
+
+        -- Create the directory for the package
+        io $ do 
+            createDirectoryIfMissing True dirName
+
+            let classes = map (classInfo Map.!)
+                              (MultiMap.lookup packageName classesByPackage)
+
+            -- Create the Haskell module file for the Java package
+            file <- openFile (dirName ++ ".hs") WriteMode
+            hPutStrLn file
+              $ printJavaPackageModule packageName packageMod classInfo classes
+            hClose file
+
+    -- Create all the class files.
+    -- These contain the java methods as Haskell functions.
+    forM_ (Map.toList classModules) $ \(clazzName, clazzMod) -> do
+        let fileName = strJoin [pathSeparator] (strSplitAll "." clazzMod)
+            clazz = classInfo Map.! clazzName
+
+        io $ do
+            -- Create the Haskell module file for the Java class.
+            file <- openFile (fileName ++ ".hs") WriteMode
+            hPutStrLn file $ printJavaClassModule clazz clazzMod classInfo
+            hClose file
+
+            -- Create the *hidden* Haskell module file for the Java class.
+            file <- openFile (fileName ++ "__.hs") WriteMode
+            hPutStrLn file $ printJavaClassModule' clazz clazzMod classInfo
+            hClose file
+
+    -- write Cabal file
+    when (opts `get` optCabalProject) $ io $ do
+        cabalFile <- openFile ((opts `get` optProjectName) ++ ".cabal") WriteMode
+        hPutStrLn cabalFile """
+            name:           #{opts `get` optProjectName}
+            version:        #{opts `get` optProjectVersion}
+            cabal-version:  >= 1.8
+            build-type:     Simple
+            
+            Library {
+             build-depends:
+              base >= 4 && < 5,
+              java-bridge
+             exposed-modules:
+              #{strJoin ",\n  " allModules}
+             other-modules:
+              #{strJoin ",\n  " hiddenModules} }
+            """
+        hClose cabalFile
+
diff --git a/src/JavaSE6.hs b/src/JavaSE6.hs
new file mode 100644
--- /dev/null
+++ b/src/JavaSE6.hs
@@ -0,0 +1,3800 @@
+{-# LANGUAGE Haskell2010 #-}
+
+module JavaSE6 where
+
+javaClassesSE6
+  = [ "java.applet.Applet"
+    , "java.applet.AppletContext"
+    , "java.applet.AppletStub"
+    , "java.applet.AudioClip"
+    , "java.awt.AWTError"
+    , "java.awt.AWTEvent"
+    , "java.awt.AWTEventMulticaster"
+    , "java.awt.AWTException"
+    , "java.awt.AWTKeyStroke"
+    , "java.awt.AWTPermission"
+    , "java.awt.ActiveEvent"
+    , "java.awt.Adjustable"
+    , "java.awt.AlphaComposite"
+    , "java.awt.BasicStroke"
+    , "java.awt.BorderLayout"
+    , "java.awt.BufferCapabilities"
+    , "java.awt.BufferCapabilities$FlipContents"
+    , "java.awt.Button"
+    , "java.awt.Canvas"
+    , "java.awt.CardLayout"
+    , "java.awt.Checkbox"
+    , "java.awt.CheckboxGroup"
+    , "java.awt.CheckboxMenuItem"
+    , "java.awt.Choice"
+    , "java.awt.Color"
+    , "java.awt.Component"
+    , "java.awt.Component$BaselineResizeBehavior"
+    , "java.awt.ComponentOrientation"
+    , "java.awt.Composite"
+    , "java.awt.CompositeContext"
+    , "java.awt.Container"
+    , "java.awt.ContainerOrderFocusTraversalPolicy"
+    , "java.awt.Cursor"
+    , "java.awt.DefaultFocusTraversalPolicy"
+    , "java.awt.DefaultKeyboardFocusManager"
+    , "java.awt.Desktop"
+    , "java.awt.Desktop$Action"
+    , "java.awt.Dialog"
+    , "java.awt.Dialog$ModalExclusionType"
+    , "java.awt.Dialog$ModalityType"
+    , "java.awt.Dimension"
+    , "java.awt.DisplayMode"
+    , "java.awt.Event"
+    , "java.awt.EventQueue"
+    , "java.awt.FileDialog"
+    , "java.awt.FlowLayout"
+    , "java.awt.FocusTraversalPolicy"
+    , "java.awt.Font"
+    , "java.awt.FontFormatException"
+    , "java.awt.FontMetrics"
+    , "java.awt.Frame"
+    , "java.awt.GradientPaint"
+    , "java.awt.Graphics"
+    , "java.awt.Graphics2D"
+    , "java.awt.GraphicsConfigTemplate"
+    , "java.awt.GraphicsConfiguration"
+    , "java.awt.GraphicsDevice"
+    , "java.awt.GraphicsEnvironment"
+    , "java.awt.GridBagConstraints"
+    , "java.awt.GridBagLayout"
+    , "java.awt.GridBagLayoutInfo"
+    , "java.awt.GridLayout"
+    , "java.awt.HeadlessException"
+    , "java.awt.IllegalComponentStateException"
+    , "java.awt.Image"
+    , "java.awt.ImageCapabilities"
+    , "java.awt.Insets"
+    , "java.awt.ItemSelectable"
+    , "java.awt.JobAttributes"
+    , "java.awt.JobAttributes$DefaultSelectionType"
+    , "java.awt.JobAttributes$DestinationType"
+    , "java.awt.JobAttributes$DialogType"
+    , "java.awt.JobAttributes$MultipleDocumentHandlingType"
+    , "java.awt.JobAttributes$SidesType"
+    , "java.awt.KeyEventDispatcher"
+    , "java.awt.KeyEventPostProcessor"
+    , "java.awt.KeyboardFocusManager"
+    , "java.awt.Label"
+    , "java.awt.LayoutManager"
+    , "java.awt.LayoutManager2"
+    , "java.awt.LinearGradientPaint"
+    , "java.awt.List"
+    , "java.awt.MediaTracker"
+    , "java.awt.Menu"
+    , "java.awt.MenuBar"
+    , "java.awt.MenuComponent"
+    , "java.awt.MenuContainer"
+    , "java.awt.MenuItem"
+    , "java.awt.MenuShortcut"
+    , "java.awt.MouseInfo"
+    , "java.awt.MultipleGradientPaint"
+    , "java.awt.MultipleGradientPaint$ColorSpaceType"
+    , "java.awt.MultipleGradientPaint$CycleMethod"
+    , "java.awt.PageAttributes"
+    , "java.awt.PageAttributes$ColorType"
+    , "java.awt.PageAttributes$MediaType"
+    , "java.awt.PageAttributes$OrientationRequestedType"
+    , "java.awt.PageAttributes$OriginType"
+    , "java.awt.PageAttributes$PrintQualityType"
+    , "java.awt.Paint"
+    , "java.awt.PaintContext"
+    , "java.awt.Panel"
+    , "java.awt.Point"
+    , "java.awt.PointerInfo"
+    , "java.awt.Polygon"
+    , "java.awt.PopupMenu"
+    , "java.awt.PrintGraphics"
+    , "java.awt.PrintJob"
+    , "java.awt.RadialGradientPaint"
+    , "java.awt.Rectangle"
+    , "java.awt.RenderingHints"
+    , "java.awt.RenderingHints$Key"
+    , "java.awt.Robot"
+    , "java.awt.ScrollPane"
+    , "java.awt.ScrollPaneAdjustable"
+    , "java.awt.Scrollbar"
+    , "java.awt.Shape"
+    , "java.awt.SplashScreen"
+    , "java.awt.Stroke"
+    , "java.awt.SystemColor"
+    , "java.awt.SystemTray"
+    , "java.awt.TextArea"
+    , "java.awt.TextComponent"
+    , "java.awt.TextField"
+    , "java.awt.TexturePaint"
+    , "java.awt.Toolkit"
+    , "java.awt.Transparency"
+    , "java.awt.TrayIcon"
+    , "java.awt.TrayIcon$MessageType"
+    , "java.awt.Window"
+    , "java.awt.color.CMMException"
+    , "java.awt.color.ColorSpace"
+    , "java.awt.color.ICC_ColorSpace"
+    , "java.awt.color.ICC_Profile"
+    , "java.awt.color.ICC_ProfileGray"
+    , "java.awt.color.ICC_ProfileRGB"
+    , "java.awt.color.ProfileDataException"
+    , "java.awt.datatransfer.Clipboard"
+    , "java.awt.datatransfer.ClipboardOwner"
+    , "java.awt.datatransfer.DataFlavor"
+    , "java.awt.datatransfer.FlavorEvent"
+    , "java.awt.datatransfer.FlavorListener"
+    , "java.awt.datatransfer.FlavorMap"
+    , "java.awt.datatransfer.FlavorTable"
+    , "java.awt.datatransfer.MimeTypeParseException"
+    , "java.awt.datatransfer.StringSelection"
+    , "java.awt.datatransfer.SystemFlavorMap"
+    , "java.awt.datatransfer.Transferable"
+    , "java.awt.datatransfer.UnsupportedFlavorException"
+    , "java.awt.dnd.Autoscroll"
+    , "java.awt.dnd.DnDConstants"
+    , "java.awt.dnd.DragGestureEvent"
+    , "java.awt.dnd.DragGestureListener"
+    , "java.awt.dnd.DragGestureRecognizer"
+    , "java.awt.dnd.DragSource"
+    , "java.awt.dnd.DragSourceAdapter"
+    , "java.awt.dnd.DragSourceContext"
+    , "java.awt.dnd.DragSourceDragEvent"
+    , "java.awt.dnd.DragSourceDropEvent"
+    , "java.awt.dnd.DragSourceEvent"
+    , "java.awt.dnd.DragSourceListener"
+    , "java.awt.dnd.DragSourceMotionListener"
+    , "java.awt.dnd.DropTarget"
+    , "java.awt.dnd.DropTarget$DropTargetAutoScroller"
+    , "java.awt.dnd.DropTargetAdapter"
+    , "java.awt.dnd.DropTargetContext"
+    , "java.awt.dnd.DropTargetDragEvent"
+    , "java.awt.dnd.DropTargetDropEvent"
+    , "java.awt.dnd.DropTargetEvent"
+    , "java.awt.dnd.DropTargetListener"
+    , "java.awt.dnd.InvalidDnDOperationException"
+    , "java.awt.dnd.MouseDragGestureRecognizer"
+    , "java.awt.event.AWTEventListener"
+    , "java.awt.event.AWTEventListenerProxy"
+    , "java.awt.event.ActionEvent"
+    , "java.awt.event.ActionListener"
+    , "java.awt.event.AdjustmentEvent"
+    , "java.awt.event.AdjustmentListener"
+    , "java.awt.event.ComponentAdapter"
+    , "java.awt.event.ComponentEvent"
+    , "java.awt.event.ComponentListener"
+    , "java.awt.event.ContainerAdapter"
+    , "java.awt.event.ContainerEvent"
+    , "java.awt.event.ContainerListener"
+    , "java.awt.event.FocusAdapter"
+    , "java.awt.event.FocusEvent"
+    , "java.awt.event.FocusListener"
+    , "java.awt.event.HierarchyBoundsAdapter"
+    , "java.awt.event.HierarchyBoundsListener"
+    , "java.awt.event.HierarchyEvent"
+    , "java.awt.event.HierarchyListener"
+    , "java.awt.event.InputEvent"
+    , "java.awt.event.InputMethodEvent"
+    , "java.awt.event.InputMethodListener"
+    , "java.awt.event.InvocationEvent"
+    , "java.awt.event.ItemEvent"
+    , "java.awt.event.ItemListener"
+    , "java.awt.event.KeyAdapter"
+    , "java.awt.event.KeyEvent"
+    , "java.awt.event.KeyListener"
+    , "java.awt.event.MouseAdapter"
+    , "java.awt.event.MouseEvent"
+    , "java.awt.event.MouseListener"
+    , "java.awt.event.MouseMotionAdapter"
+    , "java.awt.event.MouseMotionListener"
+    , "java.awt.event.MouseWheelEvent"
+    , "java.awt.event.MouseWheelListener"
+    , "java.awt.event.PaintEvent"
+    , "java.awt.event.TextEvent"
+    , "java.awt.event.TextListener"
+    , "java.awt.event.WindowAdapter"
+    , "java.awt.event.WindowEvent"
+    , "java.awt.event.WindowFocusListener"
+    , "java.awt.event.WindowListener"
+    , "java.awt.event.WindowStateListener"
+    , "java.awt.font.FontRenderContext"
+    , "java.awt.font.GlyphJustificationInfo"
+    , "java.awt.font.GlyphMetrics"
+    , "java.awt.font.GlyphVector"
+    , "java.awt.font.GraphicAttribute"
+    , "java.awt.font.ImageGraphicAttribute"
+    , "java.awt.font.LayoutPath"
+    , "java.awt.font.LineBreakMeasurer"
+    , "java.awt.font.LineMetrics"
+    , "java.awt.font.MultipleMaster"
+    , "java.awt.font.NumericShaper"
+    , "java.awt.font.OpenType"
+    , "java.awt.font.ShapeGraphicAttribute"
+    , "java.awt.font.TextAttribute"
+    , "java.awt.font.TextHitInfo"
+    , "java.awt.font.TextLayout"
+    , "java.awt.font.TextLayout$CaretPolicy"
+    , "java.awt.font.TextMeasurer"
+    , "java.awt.font.TransformAttribute"
+    , "java.awt.geom.AffineTransform"
+    , "java.awt.geom.Arc2D"
+    , "java.awt.geom.Arc2D$Double"
+    , "java.awt.geom.Arc2D$Float"
+    , "java.awt.geom.Area"
+    , "java.awt.geom.CubicCurve2D"
+    , "java.awt.geom.CubicCurve2D$Double"
+    , "java.awt.geom.CubicCurve2D$Float"
+    , "java.awt.geom.Dimension2D"
+    , "java.awt.geom.Ellipse2D"
+    , "java.awt.geom.Ellipse2D$Double"
+    , "java.awt.geom.Ellipse2D$Float"
+    , "java.awt.geom.FlatteningPathIterator"
+    , "java.awt.geom.GeneralPath"
+    , "java.awt.geom.IllegalPathStateException"
+    , "java.awt.geom.Line2D"
+    , "java.awt.geom.Line2D$Double"
+    , "java.awt.geom.Line2D$Float"
+    , "java.awt.geom.NoninvertibleTransformException"
+    , "java.awt.geom.Path2D"
+    , "java.awt.geom.Path2D$Double"
+    , "java.awt.geom.Path2D$Float"
+    , "java.awt.geom.PathIterator"
+    , "java.awt.geom.Point2D"
+    , "java.awt.geom.Point2D$Double"
+    , "java.awt.geom.Point2D$Float"
+    , "java.awt.geom.QuadCurve2D"
+    , "java.awt.geom.QuadCurve2D$Double"
+    , "java.awt.geom.QuadCurve2D$Float"
+    , "java.awt.geom.Rectangle2D"
+    , "java.awt.geom.Rectangle2D$Double"
+    , "java.awt.geom.Rectangle2D$Float"
+    , "java.awt.geom.RectangularShape"
+    , "java.awt.geom.RoundRectangle2D"
+    , "java.awt.geom.RoundRectangle2D$Double"
+    , "java.awt.geom.RoundRectangle2D$Float"
+    , "java.awt.im.InputContext"
+    , "java.awt.im.InputMethodHighlight"
+    , "java.awt.im.InputMethodRequests"
+    , "java.awt.im.InputSubset"
+    , "java.awt.im.spi.InputMethod"
+    , "java.awt.im.spi.InputMethodContext"
+    , "java.awt.im.spi.InputMethodDescriptor"
+    , "java.awt.image.AffineTransformOp"
+    , "java.awt.image.AreaAveragingScaleFilter"
+    , "java.awt.image.BandCombineOp"
+    , "java.awt.image.BandedSampleModel"
+    , "java.awt.image.BufferStrategy"
+    , "java.awt.image.BufferedImage"
+    , "java.awt.image.BufferedImageFilter"
+    , "java.awt.image.BufferedImageOp"
+    , "java.awt.image.ByteLookupTable"
+    , "java.awt.image.ColorConvertOp"
+    , "java.awt.image.ColorModel"
+    , "java.awt.image.ComponentColorModel"
+    , "java.awt.image.ComponentSampleModel"
+    , "java.awt.image.ConvolveOp"
+    , "java.awt.image.CropImageFilter"
+    , "java.awt.image.DataBuffer"
+    , "java.awt.image.DataBufferByte"
+    , "java.awt.image.DataBufferDouble"
+    , "java.awt.image.DataBufferFloat"
+    , "java.awt.image.DataBufferInt"
+    , "java.awt.image.DataBufferShort"
+    , "java.awt.image.DataBufferUShort"
+    , "java.awt.image.DirectColorModel"
+    , "java.awt.image.FilteredImageSource"
+    , "java.awt.image.ImageConsumer"
+    , "java.awt.image.ImageFilter"
+    , "java.awt.image.ImageObserver"
+    , "java.awt.image.ImageProducer"
+    , "java.awt.image.ImagingOpException"
+    , "java.awt.image.IndexColorModel"
+    , "java.awt.image.Kernel"
+    , "java.awt.image.LookupOp"
+    , "java.awt.image.LookupTable"
+    , "java.awt.image.MemoryImageSource"
+    , "java.awt.image.MultiPixelPackedSampleModel"
+    , "java.awt.image.PackedColorModel"
+    , "java.awt.image.PixelGrabber"
+    , "java.awt.image.PixelInterleavedSampleModel"
+    , "java.awt.image.RGBImageFilter"
+    , "java.awt.image.Raster"
+    , "java.awt.image.RasterFormatException"
+    , "java.awt.image.RasterOp"
+    , "java.awt.image.RenderedImage"
+    , "java.awt.image.ReplicateScaleFilter"
+    , "java.awt.image.RescaleOp"
+    , "java.awt.image.SampleModel"
+    , "java.awt.image.ShortLookupTable"
+    , "java.awt.image.SinglePixelPackedSampleModel"
+    , "java.awt.image.TileObserver"
+    , "java.awt.image.VolatileImage"
+    , "java.awt.image.WritableRaster"
+    , "java.awt.image.WritableRenderedImage"
+    , "java.awt.image.renderable.ContextualRenderedImageFactory"
+    , "java.awt.image.renderable.ParameterBlock"
+    , "java.awt.image.renderable.RenderContext"
+    , "java.awt.image.renderable.RenderableImage"
+    , "java.awt.image.renderable.RenderableImageOp"
+    , "java.awt.image.renderable.RenderableImageProducer"
+    , "java.awt.image.renderable.RenderedImageFactory"
+    , "java.awt.print.Book"
+    , "java.awt.print.PageFormat"
+    , "java.awt.print.Pageable"
+    , "java.awt.print.Paper"
+    , "java.awt.print.Printable"
+    , "java.awt.print.PrinterAbortException"
+    , "java.awt.print.PrinterException"
+    , "java.awt.print.PrinterGraphics"
+    , "java.awt.print.PrinterIOException"
+    , "java.awt.print.PrinterJob"
+    , "java.beans.AppletInitializer"
+    , "java.beans.BeanDescriptor"
+    , "java.beans.BeanInfo"
+    , "java.beans.Beans"
+    , "java.beans.ConstructorProperties"
+    , "java.beans.Customizer"
+    , "java.beans.DefaultPersistenceDelegate"
+    , "java.beans.DesignMode"
+    , "java.beans.Encoder"
+    , "java.beans.EventHandler"
+    , "java.beans.EventSetDescriptor"
+    , "java.beans.ExceptionListener"
+    , "java.beans.Expression"
+    , "java.beans.FeatureDescriptor"
+    , "java.beans.IndexedPropertyChangeEvent"
+    , "java.beans.IndexedPropertyDescriptor"
+    , "java.beans.IntrospectionException"
+    , "java.beans.Introspector"
+    , "java.beans.MethodDescriptor"
+    , "java.beans.ParameterDescriptor"
+    , "java.beans.PersistenceDelegate"
+    , "java.beans.PropertyChangeEvent"
+    , "java.beans.PropertyChangeListener"
+    , "java.beans.PropertyChangeListenerProxy"
+    , "java.beans.PropertyChangeSupport"
+    , "java.beans.PropertyDescriptor"
+    , "java.beans.PropertyEditor"
+    , "java.beans.PropertyEditorManager"
+    , "java.beans.PropertyEditorSupport"
+    , "java.beans.PropertyVetoException"
+    , "java.beans.SimpleBeanInfo"
+    , "java.beans.Statement"
+    , "java.beans.VetoableChangeListener"
+    , "java.beans.VetoableChangeListenerProxy"
+    , "java.beans.VetoableChangeSupport"
+    , "java.beans.Visibility"
+    , "java.beans.XMLDecoder"
+    , "java.beans.XMLEncoder"
+    , "java.beans.beancontext.BeanContext"
+    , "java.beans.beancontext.BeanContextChild"
+    , "java.beans.beancontext.BeanContextChildComponentProxy"
+    , "java.beans.beancontext.BeanContextChildSupport"
+    , "java.beans.beancontext.BeanContextContainerProxy"
+    , "java.beans.beancontext.BeanContextEvent"
+    , "java.beans.beancontext.BeanContextMembershipEvent"
+    , "java.beans.beancontext.BeanContextMembershipListener"
+    , "java.beans.beancontext.BeanContextProxy"
+    , "java.beans.beancontext.BeanContextServiceAvailableEvent"
+    , "java.beans.beancontext.BeanContextServiceProvider"
+    , "java.beans.beancontext.BeanContextServiceProviderBeanInfo"
+    , "java.beans.beancontext.BeanContextServiceRevokedEvent"
+    , "java.beans.beancontext.BeanContextServiceRevokedListener"
+    , "java.beans.beancontext.BeanContextServices"
+    , "java.beans.beancontext.BeanContextServicesListener"
+    , "java.beans.beancontext.BeanContextServicesSupport"
+    , "java.beans.beancontext.BeanContextServicesSupport$BCSSServiceProvider"
+    , "java.beans.beancontext.BeanContextSupport"
+    , "java.beans.beancontext.BeanContextSupport$BCSIterator"
+    , "java.io.BufferedInputStream"
+    , "java.io.BufferedOutputStream"
+    , "java.io.BufferedReader"
+    , "java.io.BufferedWriter"
+    , "java.io.ByteArrayInputStream"
+    , "java.io.ByteArrayOutputStream"
+    , "java.io.CharArrayReader"
+    , "java.io.CharArrayWriter"
+    , "java.io.CharConversionException"
+    , "java.io.Closeable"
+    , "java.io.Console"
+    , "java.io.DataInput"
+    , "java.io.DataInputStream"
+    , "java.io.DataOutput"
+    , "java.io.DataOutputStream"
+    , "java.io.EOFException"
+    , "java.io.Externalizable"
+    , "java.io.File"
+    , "java.io.FileDescriptor"
+    , "java.io.FileFilter"
+    , "java.io.FileInputStream"
+    , "java.io.FileNotFoundException"
+    , "java.io.FileOutputStream"
+    , "java.io.FilePermission"
+    , "java.io.FileReader"
+    , "java.io.FileWriter"
+    , "java.io.FilenameFilter"
+    , "java.io.FilterInputStream"
+    , "java.io.FilterOutputStream"
+    , "java.io.FilterReader"
+    , "java.io.FilterWriter"
+    , "java.io.Flushable"
+    , "java.io.IOError"
+    , "java.io.IOException"
+    , "java.io.InputStream"
+    , "java.io.InputStreamReader"
+    , "java.io.InterruptedIOException"
+    , "java.io.InvalidClassException"
+    , "java.io.InvalidObjectException"
+    , "java.io.LineNumberInputStream"
+    , "java.io.LineNumberReader"
+    , "java.io.NotActiveException"
+    , "java.io.NotSerializableException"
+    , "java.io.ObjectInput"
+    , "java.io.ObjectInputStream"
+    , "java.io.ObjectInputStream$GetField"
+    , "java.io.ObjectInputValidation"
+    , "java.io.ObjectOutput"
+    , "java.io.ObjectOutputStream"
+    , "java.io.ObjectOutputStream$PutField"
+    , "java.io.ObjectStreamClass"
+    , "java.io.ObjectStreamConstants"
+    , "java.io.ObjectStreamException"
+    , "java.io.ObjectStreamField"
+    , "java.io.OptionalDataException"
+    , "java.io.OutputStream"
+    , "java.io.OutputStreamWriter"
+    , "java.io.PipedInputStream"
+    , "java.io.PipedOutputStream"
+    , "java.io.PipedReader"
+    , "java.io.PipedWriter"
+    , "java.io.PrintStream"
+    , "java.io.PrintWriter"
+    , "java.io.PushbackInputStream"
+    , "java.io.PushbackReader"
+    , "java.io.RandomAccessFile"
+    , "java.io.Reader"
+    , "java.io.SequenceInputStream"
+    , "java.io.Serializable"
+    , "java.io.SerializablePermission"
+    , "java.io.StreamCorruptedException"
+    , "java.io.StreamTokenizer"
+    , "java.io.StringBufferInputStream"
+    , "java.io.StringReader"
+    , "java.io.StringWriter"
+    , "java.io.SyncFailedException"
+    , "java.io.UTFDataFormatException"
+    , "java.io.UnsupportedEncodingException"
+    , "java.io.WriteAbortedException"
+    , "java.io.Writer"
+    , "java.lang.AbstractMethodError"
+    , "java.lang.Appendable"
+    , "java.lang.ArithmeticException"
+    , "java.lang.ArrayIndexOutOfBoundsException"
+    , "java.lang.ArrayStoreException"
+    , "java.lang.AssertionError"
+    , "java.lang.Boolean"
+    , "java.lang.Byte"
+    , "java.lang.CharSequence"
+    , "java.lang.Character"
+    , "java.lang.Character$Subset"
+    , "java.lang.Character$UnicodeBlock"
+    , "java.lang.Class"
+    , "java.lang.ClassCastException"
+    , "java.lang.ClassCircularityError"
+    , "java.lang.ClassFormatError"
+    , "java.lang.ClassLoader"
+    , "java.lang.ClassNotFoundException"
+    , "java.lang.CloneNotSupportedException"
+    , "java.lang.Cloneable"
+    , "java.lang.Comparable"
+    , "java.lang.Compiler"
+    , "java.lang.Deprecated"
+    , "java.lang.Double"
+    , "java.lang.Enum"
+    , "java.lang.EnumConstantNotPresentException"
+    , "java.lang.Error"
+    , "java.lang.Exception"
+    , "java.lang.ExceptionInInitializerError"
+    , "java.lang.Float"
+    , "java.lang.IllegalAccessError"
+    , "java.lang.IllegalAccessException"
+    , "java.lang.IllegalArgumentException"
+    , "java.lang.IllegalMonitorStateException"
+    , "java.lang.IllegalStateException"
+    , "java.lang.IllegalThreadStateException"
+    , "java.lang.IncompatibleClassChangeError"
+    , "java.lang.IndexOutOfBoundsException"
+    , "java.lang.InheritableThreadLocal"
+    , "java.lang.InstantiationError"
+    , "java.lang.InstantiationException"
+    , "java.lang.Integer"
+    , "java.lang.InternalError"
+    , "java.lang.InterruptedException"
+    , "java.lang.Iterable"
+    , "java.lang.LinkageError"
+    , "java.lang.Long"
+    , "java.lang.Math"
+    , "java.lang.NegativeArraySizeException"
+    , "java.lang.NoClassDefFoundError"
+    , "java.lang.NoSuchFieldError"
+    , "java.lang.NoSuchFieldException"
+    , "java.lang.NoSuchMethodError"
+    , "java.lang.NoSuchMethodException"
+    , "java.lang.NullPointerException"
+    , "java.lang.Number"
+    , "java.lang.NumberFormatException"
+    , "java.lang.Object"
+    , "java.lang.OutOfMemoryError"
+    , "java.lang.Override"
+    , "java.lang.Package"
+    , "java.lang.Process"
+    , "java.lang.ProcessBuilder"
+    , "java.lang.Readable"
+    , "java.lang.Runnable"
+    , "java.lang.Runtime"
+    , "java.lang.RuntimeException"
+    , "java.lang.RuntimePermission"
+    , "java.lang.SecurityException"
+    , "java.lang.SecurityManager"
+    , "java.lang.Short"
+    , "java.lang.StackOverflowError"
+    , "java.lang.StackTraceElement"
+    , "java.lang.StrictMath"
+    , "java.lang.String"
+    , "java.lang.StringBuffer"
+    , "java.lang.StringBuilder"
+    , "java.lang.StringIndexOutOfBoundsException"
+    , "java.lang.SuppressWarnings"
+    , "java.lang.System"
+    , "java.lang.Thread"
+    , "java.lang.Thread$State"
+    , "java.lang.Thread$UncaughtExceptionHandler"
+    , "java.lang.ThreadDeath"
+    , "java.lang.ThreadGroup"
+    , "java.lang.ThreadLocal"
+    , "java.lang.Throwable"
+    , "java.lang.TypeNotPresentException"
+    , "java.lang.UnknownError"
+    , "java.lang.UnsatisfiedLinkError"
+    , "java.lang.UnsupportedClassVersionError"
+    , "java.lang.UnsupportedOperationException"
+    , "java.lang.VerifyError"
+    , "java.lang.VirtualMachineError"
+    , "java.lang.Void"
+    , "java.lang.annotation.Annotation"
+    , "java.lang.annotation.AnnotationFormatError"
+    , "java.lang.annotation.AnnotationTypeMismatchException"
+    , "java.lang.annotation.Documented"
+    , "java.lang.annotation.ElementType"
+    , "java.lang.annotation.IncompleteAnnotationException"
+    , "java.lang.annotation.Inherited"
+    , "java.lang.annotation.Retention"
+    , "java.lang.annotation.RetentionPolicy"
+    , "java.lang.annotation.Target"
+    , "java.lang.instrument.ClassDefinition"
+    , "java.lang.instrument.ClassFileTransformer"
+    , "java.lang.instrument.IllegalClassFormatException"
+    , "java.lang.instrument.Instrumentation"
+    , "java.lang.instrument.UnmodifiableClassException"
+    , "java.lang.management.ClassLoadingMXBean"
+    , "java.lang.management.CompilationMXBean"
+    , "java.lang.management.GarbageCollectorMXBean"
+    , "java.lang.management.LockInfo"
+    , "java.lang.management.ManagementFactory"
+    , "java.lang.management.ManagementPermission"
+    , "java.lang.management.MemoryMXBean"
+    , "java.lang.management.MemoryManagerMXBean"
+    , "java.lang.management.MemoryNotificationInfo"
+    , "java.lang.management.MemoryPoolMXBean"
+    , "java.lang.management.MemoryType"
+    , "java.lang.management.MemoryUsage"
+    , "java.lang.management.MonitorInfo"
+    , "java.lang.management.OperatingSystemMXBean"
+    , "java.lang.management.RuntimeMXBean"
+    , "java.lang.management.ThreadInfo"
+    , "java.lang.management.ThreadMXBean"
+    , "java.lang.ref.PhantomReference"
+    , "java.lang.ref.Reference"
+    , "java.lang.ref.ReferenceQueue"
+    , "java.lang.ref.SoftReference"
+    , "java.lang.ref.WeakReference"
+    , "java.lang.reflect.AccessibleObject"
+    , "java.lang.reflect.AnnotatedElement"
+    , "java.lang.reflect.Array"
+    , "java.lang.reflect.Constructor"
+    , "java.lang.reflect.Field"
+    , "java.lang.reflect.GenericArrayType"
+    , "java.lang.reflect.GenericDeclaration"
+    , "java.lang.reflect.GenericSignatureFormatError"
+    , "java.lang.reflect.InvocationHandler"
+    , "java.lang.reflect.InvocationTargetException"
+    , "java.lang.reflect.MalformedParameterizedTypeException"
+    , "java.lang.reflect.Member"
+    , "java.lang.reflect.Method"
+    , "java.lang.reflect.Modifier"
+    , "java.lang.reflect.ParameterizedType"
+    , "java.lang.reflect.Proxy"
+    , "java.lang.reflect.ReflectPermission"
+    , "java.lang.reflect.Type"
+    , "java.lang.reflect.TypeVariable"
+    , "java.lang.reflect.UndeclaredThrowableException"
+    , "java.lang.reflect.WildcardType"
+    , "java.math.BigDecimal"
+    , "java.math.BigInteger"
+    , "java.math.MathContext"
+    , "java.math.RoundingMode"
+    , "java.net.Authenticator"
+    , "java.net.Authenticator$RequestorType"
+    , "java.net.BindException"
+    , "java.net.CacheRequest"
+    , "java.net.CacheResponse"
+    , "java.net.ConnectException"
+    , "java.net.ContentHandler"
+    , "java.net.ContentHandlerFactory"
+    , "java.net.CookieHandler"
+    , "java.net.CookieManager"
+    , "java.net.CookiePolicy"
+    , "java.net.CookieStore"
+    , "java.net.DatagramPacket"
+    , "java.net.DatagramSocket"
+    , "java.net.DatagramSocketImpl"
+    , "java.net.DatagramSocketImplFactory"
+    , "java.net.FileNameMap"
+    , "java.net.HttpCookie"
+    , "java.net.HttpRetryException"
+    , "java.net.HttpURLConnection"
+    , "java.net.IDN"
+    , "java.net.Inet4Address"
+    , "java.net.Inet6Address"
+    , "java.net.InetAddress"
+    , "java.net.InetSocketAddress"
+    , "java.net.InterfaceAddress"
+    , "java.net.JarURLConnection"
+    , "java.net.MalformedURLException"
+    , "java.net.MulticastSocket"
+    , "java.net.NetPermission"
+    , "java.net.NetworkInterface"
+    , "java.net.NoRouteToHostException"
+    , "java.net.PasswordAuthentication"
+    , "java.net.PortUnreachableException"
+    , "java.net.ProtocolException"
+    , "java.net.Proxy"
+    , "java.net.Proxy$Type"
+    , "java.net.ProxySelector"
+    , "java.net.ResponseCache"
+    , "java.net.SecureCacheResponse"
+    , "java.net.ServerSocket"
+    , "java.net.Socket"
+    , "java.net.SocketAddress"
+    , "java.net.SocketException"
+    , "java.net.SocketImpl"
+    , "java.net.SocketImplFactory"
+    , "java.net.SocketOptions"
+    , "java.net.SocketPermission"
+    , "java.net.SocketTimeoutException"
+    , "java.net.URI"
+    , "java.net.URISyntaxException"
+    , "java.net.URL"
+    , "java.net.URLClassLoader"
+    , "java.net.URLConnection"
+    , "java.net.URLDecoder"
+    , "java.net.URLEncoder"
+    , "java.net.URLStreamHandler"
+    , "java.net.URLStreamHandlerFactory"
+    , "java.net.UnknownHostException"
+    , "java.net.UnknownServiceException"
+    , "java.nio.Buffer"
+    , "java.nio.BufferOverflowException"
+    , "java.nio.BufferUnderflowException"
+    , "java.nio.ByteBuffer"
+    , "java.nio.ByteOrder"
+    , "java.nio.CharBuffer"
+    , "java.nio.DoubleBuffer"
+    , "java.nio.FloatBuffer"
+    , "java.nio.IntBuffer"
+    , "java.nio.InvalidMarkException"
+    , "java.nio.LongBuffer"
+    , "java.nio.MappedByteBuffer"
+    , "java.nio.ReadOnlyBufferException"
+    , "java.nio.ShortBuffer"
+    , "java.nio.channels.AlreadyConnectedException"
+    , "java.nio.channels.AsynchronousCloseException"
+    , "java.nio.channels.ByteChannel"
+    , "java.nio.channels.CancelledKeyException"
+    , "java.nio.channels.Channel"
+    , "java.nio.channels.Channels"
+    , "java.nio.channels.ClosedByInterruptException"
+    , "java.nio.channels.ClosedChannelException"
+    , "java.nio.channels.ClosedSelectorException"
+    , "java.nio.channels.ConnectionPendingException"
+    , "java.nio.channels.DatagramChannel"
+    , "java.nio.channels.FileChannel"
+    , "java.nio.channels.FileChannel$MapMode"
+    , "java.nio.channels.FileLock"
+    , "java.nio.channels.FileLockInterruptionException"
+    , "java.nio.channels.GatheringByteChannel"
+    , "java.nio.channels.IllegalBlockingModeException"
+    , "java.nio.channels.IllegalSelectorException"
+    , "java.nio.channels.InterruptibleChannel"
+    , "java.nio.channels.NoConnectionPendingException"
+    , "java.nio.channels.NonReadableChannelException"
+    , "java.nio.channels.NonWritableChannelException"
+    , "java.nio.channels.NotYetBoundException"
+    , "java.nio.channels.NotYetConnectedException"
+    , "java.nio.channels.OverlappingFileLockException"
+    , "java.nio.channels.Pipe"
+    , "java.nio.channels.Pipe$SinkChannel"
+    , "java.nio.channels.Pipe$SourceChannel"
+    , "java.nio.channels.ReadableByteChannel"
+    , "java.nio.channels.ScatteringByteChannel"
+    , "java.nio.channels.SelectableChannel"
+    , "java.nio.channels.SelectionKey"
+    , "java.nio.channels.Selector"
+    , "java.nio.channels.ServerSocketChannel"
+    , "java.nio.channels.SocketChannel"
+    , "java.nio.channels.UnresolvedAddressException"
+    , "java.nio.channels.UnsupportedAddressTypeException"
+    , "java.nio.channels.WritableByteChannel"
+    , "java.nio.channels.spi.AbstractInterruptibleChannel"
+    , "java.nio.channels.spi.AbstractSelectableChannel"
+    , "java.nio.channels.spi.AbstractSelectionKey"
+    , "java.nio.channels.spi.AbstractSelector"
+    , "java.nio.channels.spi.SelectorProvider"
+    , "java.nio.charset.CharacterCodingException"
+    , "java.nio.charset.Charset"
+    , "java.nio.charset.CharsetDecoder"
+    , "java.nio.charset.CharsetEncoder"
+    , "java.nio.charset.CoderMalfunctionError"
+    , "java.nio.charset.CoderResult"
+    , "java.nio.charset.CodingErrorAction"
+    , "java.nio.charset.IllegalCharsetNameException"
+    , "java.nio.charset.MalformedInputException"
+    , "java.nio.charset.UnmappableCharacterException"
+    , "java.nio.charset.UnsupportedCharsetException"
+    , "java.nio.charset.spi.CharsetProvider"
+    , "java.rmi.AccessException"
+    , "java.rmi.AlreadyBoundException"
+    , "java.rmi.ConnectException"
+    , "java.rmi.ConnectIOException"
+    , "java.rmi.MarshalException"
+    , "java.rmi.MarshalledObject"
+    , "java.rmi.Naming"
+    , "java.rmi.NoSuchObjectException"
+    , "java.rmi.NotBoundException"
+    , "java.rmi.RMISecurityException"
+    , "java.rmi.RMISecurityManager"
+    , "java.rmi.Remote"
+    , "java.rmi.RemoteException"
+    , "java.rmi.ServerError"
+    , "java.rmi.ServerException"
+    , "java.rmi.ServerRuntimeException"
+    , "java.rmi.StubNotFoundException"
+    , "java.rmi.UnexpectedException"
+    , "java.rmi.UnknownHostException"
+    , "java.rmi.UnmarshalException"
+    , "java.rmi.activation.Activatable"
+    , "java.rmi.activation.ActivateFailedException"
+    , "java.rmi.activation.ActivationDesc"
+    , "java.rmi.activation.ActivationException"
+    , "java.rmi.activation.ActivationGroup"
+    , "java.rmi.activation.ActivationGroupDesc"
+    , "java.rmi.activation.ActivationGroupDesc$CommandEnvironment"
+    , "java.rmi.activation.ActivationGroupID"
+    , "java.rmi.activation.ActivationGroup_Stub"
+    , "java.rmi.activation.ActivationID"
+    , "java.rmi.activation.ActivationInstantiator"
+    , "java.rmi.activation.ActivationMonitor"
+    , "java.rmi.activation.ActivationSystem"
+    , "java.rmi.activation.Activator"
+    , "java.rmi.activation.UnknownGroupException"
+    , "java.rmi.activation.UnknownObjectException"
+    , "java.rmi.dgc.DGC"
+    , "java.rmi.dgc.Lease"
+    , "java.rmi.dgc.VMID"
+    , "java.rmi.registry.LocateRegistry"
+    , "java.rmi.registry.Registry"
+    , "java.rmi.registry.RegistryHandler"
+    , "java.rmi.server.ExportException"
+    , "java.rmi.server.LoaderHandler"
+    , "java.rmi.server.LogStream"
+    , "java.rmi.server.ObjID"
+    , "java.rmi.server.Operation"
+    , "java.rmi.server.RMIClassLoader"
+    , "java.rmi.server.RMIClassLoaderSpi"
+    , "java.rmi.server.RMIClientSocketFactory"
+    , "java.rmi.server.RMIFailureHandler"
+    , "java.rmi.server.RMIServerSocketFactory"
+    , "java.rmi.server.RMISocketFactory"
+    , "java.rmi.server.RemoteCall"
+    , "java.rmi.server.RemoteObject"
+    , "java.rmi.server.RemoteObjectInvocationHandler"
+    , "java.rmi.server.RemoteRef"
+    , "java.rmi.server.RemoteServer"
+    , "java.rmi.server.RemoteStub"
+    , "java.rmi.server.ServerCloneException"
+    , "java.rmi.server.ServerNotActiveException"
+    , "java.rmi.server.ServerRef"
+    , "java.rmi.server.Skeleton"
+    , "java.rmi.server.SkeletonMismatchException"
+    , "java.rmi.server.SkeletonNotFoundException"
+    , "java.rmi.server.SocketSecurityException"
+    , "java.rmi.server.UID"
+    , "java.rmi.server.UnicastRemoteObject"
+    , "java.rmi.server.Unreferenced"
+    , "java.security.AccessControlContext"
+    , "java.security.AccessControlException"
+    , "java.security.AccessController"
+    , "java.security.AlgorithmParameterGenerator"
+    , "java.security.AlgorithmParameterGeneratorSpi"
+    , "java.security.AlgorithmParameters"
+    , "java.security.AlgorithmParametersSpi"
+    , "java.security.AllPermission"
+    , "java.security.AuthProvider"
+    , "java.security.BasicPermission"
+    , "java.security.Certificate"
+    , "java.security.CodeSigner"
+    , "java.security.CodeSource"
+    , "java.security.DigestException"
+    , "java.security.DigestInputStream"
+    , "java.security.DigestOutputStream"
+    , "java.security.DomainCombiner"
+    , "java.security.GeneralSecurityException"
+    , "java.security.Guard"
+    , "java.security.GuardedObject"
+    , "java.security.Identity"
+    , "java.security.IdentityScope"
+    , "java.security.InvalidAlgorithmParameterException"
+    , "java.security.InvalidKeyException"
+    , "java.security.InvalidParameterException"
+    , "java.security.Key"
+    , "java.security.KeyException"
+    , "java.security.KeyFactory"
+    , "java.security.KeyFactorySpi"
+    , "java.security.KeyManagementException"
+    , "java.security.KeyPair"
+    , "java.security.KeyPairGenerator"
+    , "java.security.KeyPairGeneratorSpi"
+    , "java.security.KeyRep"
+    , "java.security.KeyRep$Type"
+    , "java.security.KeyStore"
+    , "java.security.KeyStore$Builder"
+    , "java.security.KeyStore$CallbackHandlerProtection"
+    , "java.security.KeyStore$Entry"
+    , "java.security.KeyStore$LoadStoreParameter"
+    , "java.security.KeyStore$PasswordProtection"
+    , "java.security.KeyStore$PrivateKeyEntry"
+    , "java.security.KeyStore$ProtectionParameter"
+    , "java.security.KeyStore$SecretKeyEntry"
+    , "java.security.KeyStore$TrustedCertificateEntry"
+    , "java.security.KeyStoreException"
+    , "java.security.KeyStoreSpi"
+    , "java.security.MessageDigest"
+    , "java.security.MessageDigestSpi"
+    , "java.security.NoSuchAlgorithmException"
+    , "java.security.NoSuchProviderException"
+    , "java.security.Permission"
+    , "java.security.PermissionCollection"
+    , "java.security.Permissions"
+    , "java.security.Policy"
+    , "java.security.Policy$Parameters"
+    , "java.security.PolicySpi"
+    , "java.security.Principal"
+    , "java.security.PrivateKey"
+    , "java.security.PrivilegedAction"
+    , "java.security.PrivilegedActionException"
+    , "java.security.PrivilegedExceptionAction"
+    , "java.security.ProtectionDomain"
+    , "java.security.Provider"
+    , "java.security.Provider$Service"
+    , "java.security.ProviderException"
+    , "java.security.PublicKey"
+    , "java.security.SecureClassLoader"
+    , "java.security.SecureRandom"
+    , "java.security.SecureRandomSpi"
+    , "java.security.Security"
+    , "java.security.SecurityPermission"
+    , "java.security.Signature"
+    , "java.security.SignatureException"
+    , "java.security.SignatureSpi"
+    , "java.security.SignedObject"
+    , "java.security.Signer"
+    , "java.security.Timestamp"
+    , "java.security.URIParameter"
+    , "java.security.UnrecoverableEntryException"
+    , "java.security.UnrecoverableKeyException"
+    , "java.security.UnresolvedPermission"
+    , "java.security.acl.Acl"
+    , "java.security.acl.AclEntry"
+    , "java.security.acl.AclNotFoundException"
+    , "java.security.acl.Group"
+    , "java.security.acl.LastOwnerException"
+    , "java.security.acl.NotOwnerException"
+    , "java.security.acl.Owner"
+    , "java.security.acl.Permission"
+    , "java.security.cert.CRL"
+    , "java.security.cert.CRLException"
+    , "java.security.cert.CRLSelector"
+    , "java.security.cert.CertPath"
+    , "java.security.cert.CertPath$CertPathRep"
+    , "java.security.cert.CertPathBuilder"
+    , "java.security.cert.CertPathBuilderException"
+    , "java.security.cert.CertPathBuilderResult"
+    , "java.security.cert.CertPathBuilderSpi"
+    , "java.security.cert.CertPathParameters"
+    , "java.security.cert.CertPathValidator"
+    , "java.security.cert.CertPathValidatorException"
+    , "java.security.cert.CertPathValidatorResult"
+    , "java.security.cert.CertPathValidatorSpi"
+    , "java.security.cert.CertSelector"
+    , "java.security.cert.CertStore"
+    , "java.security.cert.CertStoreException"
+    , "java.security.cert.CertStoreParameters"
+    , "java.security.cert.CertStoreSpi"
+    , "java.security.cert.Certificate"
+    , "java.security.cert.Certificate$CertificateRep"
+    , "java.security.cert.CertificateEncodingException"
+    , "java.security.cert.CertificateException"
+    , "java.security.cert.CertificateExpiredException"
+    , "java.security.cert.CertificateFactory"
+    , "java.security.cert.CertificateFactorySpi"
+    , "java.security.cert.CertificateNotYetValidException"
+    , "java.security.cert.CertificateParsingException"
+    , "java.security.cert.CollectionCertStoreParameters"
+    , "java.security.cert.LDAPCertStoreParameters"
+    , "java.security.cert.PKIXBuilderParameters"
+    , "java.security.cert.PKIXCertPathBuilderResult"
+    , "java.security.cert.PKIXCertPathChecker"
+    , "java.security.cert.PKIXCertPathValidatorResult"
+    , "java.security.cert.PKIXParameters"
+    , "java.security.cert.PolicyNode"
+    , "java.security.cert.PolicyQualifierInfo"
+    , "java.security.cert.TrustAnchor"
+    , "java.security.cert.X509CRL"
+    , "java.security.cert.X509CRLEntry"
+    , "java.security.cert.X509CRLSelector"
+    , "java.security.cert.X509CertSelector"
+    , "java.security.cert.X509Certificate"
+    , "java.security.cert.X509Extension"
+    , "java.security.interfaces.DSAKey"
+    , "java.security.interfaces.DSAKeyPairGenerator"
+    , "java.security.interfaces.DSAParams"
+    , "java.security.interfaces.DSAPrivateKey"
+    , "java.security.interfaces.DSAPublicKey"
+    , "java.security.interfaces.ECKey"
+    , "java.security.interfaces.ECPrivateKey"
+    , "java.security.interfaces.ECPublicKey"
+    , "java.security.interfaces.RSAKey"
+    , "java.security.interfaces.RSAMultiPrimePrivateCrtKey"
+    , "java.security.interfaces.RSAPrivateCrtKey"
+    , "java.security.interfaces.RSAPrivateKey"
+    , "java.security.interfaces.RSAPublicKey"
+    , "java.security.spec.AlgorithmParameterSpec"
+    , "java.security.spec.DSAParameterSpec"
+    , "java.security.spec.DSAPrivateKeySpec"
+    , "java.security.spec.DSAPublicKeySpec"
+    , "java.security.spec.ECField"
+    , "java.security.spec.ECFieldF2m"
+    , "java.security.spec.ECFieldFp"
+    , "java.security.spec.ECGenParameterSpec"
+    , "java.security.spec.ECParameterSpec"
+    , "java.security.spec.ECPoint"
+    , "java.security.spec.ECPrivateKeySpec"
+    , "java.security.spec.ECPublicKeySpec"
+    , "java.security.spec.EllipticCurve"
+    , "java.security.spec.EncodedKeySpec"
+    , "java.security.spec.InvalidKeySpecException"
+    , "java.security.spec.InvalidParameterSpecException"
+    , "java.security.spec.KeySpec"
+    , "java.security.spec.MGF1ParameterSpec"
+    , "java.security.spec.PKCS8EncodedKeySpec"
+    , "java.security.spec.PSSParameterSpec"
+    , "java.security.spec.RSAKeyGenParameterSpec"
+    , "java.security.spec.RSAMultiPrimePrivateCrtKeySpec"
+    , "java.security.spec.RSAOtherPrimeInfo"
+    , "java.security.spec.RSAPrivateCrtKeySpec"
+    , "java.security.spec.RSAPrivateKeySpec"
+    , "java.security.spec.RSAPublicKeySpec"
+    , "java.security.spec.X509EncodedKeySpec"
+    , "java.sql.Array"
+    , "java.sql.BatchUpdateException"
+    , "java.sql.Blob"
+    , "java.sql.CallableStatement"
+    , "java.sql.ClientInfoStatus"
+    , "java.sql.Clob"
+    , "java.sql.Connection"
+    , "java.sql.DataTruncation"
+    , "java.sql.DatabaseMetaData"
+    , "java.sql.Date"
+    , "java.sql.Driver"
+    , "java.sql.DriverManager"
+    , "java.sql.DriverPropertyInfo"
+    , "java.sql.NClob"
+    , "java.sql.ParameterMetaData"
+    , "java.sql.PreparedStatement"
+    , "java.sql.Ref"
+    , "java.sql.ResultSet"
+    , "java.sql.ResultSetMetaData"
+    , "java.sql.RowId"
+    , "java.sql.RowIdLifetime"
+    , "java.sql.SQLClientInfoException"
+    , "java.sql.SQLData"
+    , "java.sql.SQLDataException"
+    , "java.sql.SQLException"
+    , "java.sql.SQLFeatureNotSupportedException"
+    , "java.sql.SQLInput"
+    , "java.sql.SQLIntegrityConstraintViolationException"
+    , "java.sql.SQLInvalidAuthorizationSpecException"
+    , "java.sql.SQLNonTransientConnectionException"
+    , "java.sql.SQLNonTransientException"
+    , "java.sql.SQLOutput"
+    , "java.sql.SQLPermission"
+    , "java.sql.SQLRecoverableException"
+    , "java.sql.SQLSyntaxErrorException"
+    , "java.sql.SQLTimeoutException"
+    , "java.sql.SQLTransactionRollbackException"
+    , "java.sql.SQLTransientConnectionException"
+    , "java.sql.SQLTransientException"
+    , "java.sql.SQLWarning"
+    , "java.sql.SQLXML"
+    , "java.sql.Savepoint"
+    , "java.sql.Statement"
+    , "java.sql.Struct"
+    , "java.sql.Time"
+    , "java.sql.Timestamp"
+    , "java.sql.Types"
+    , "java.sql.Wrapper"
+    , "java.text.Annotation"
+    , "java.text.AttributedCharacterIterator"
+    , "java.text.AttributedCharacterIterator$Attribute"
+    , "java.text.AttributedString"
+    , "java.text.Bidi"
+    , "java.text.BreakIterator"
+    , "java.text.CharacterIterator"
+    , "java.text.ChoiceFormat"
+    , "java.text.CollationElementIterator"
+    , "java.text.CollationKey"
+    , "java.text.Collator"
+    , "java.text.DateFormat"
+    , "java.text.DateFormat$Field"
+    , "java.text.DateFormatSymbols"
+    , "java.text.DecimalFormat"
+    , "java.text.DecimalFormatSymbols"
+    , "java.text.FieldPosition"
+    , "java.text.Format"
+    , "java.text.Format$Field"
+    , "java.text.MessageFormat"
+    , "java.text.MessageFormat$Field"
+    , "java.text.Normalizer"
+    , "java.text.Normalizer$Form"
+    , "java.text.NumberFormat"
+    , "java.text.NumberFormat$Field"
+    , "java.text.ParseException"
+    , "java.text.ParsePosition"
+    , "java.text.RuleBasedCollator"
+    , "java.text.SimpleDateFormat"
+    , "java.text.StringCharacterIterator"
+    , "java.text.spi.BreakIteratorProvider"
+    , "java.text.spi.CollatorProvider"
+    , "java.text.spi.DateFormatProvider"
+    , "java.text.spi.DateFormatSymbolsProvider"
+    , "java.text.spi.DecimalFormatSymbolsProvider"
+    , "java.text.spi.NumberFormatProvider"
+    , "java.util.AbstractCollection"
+    , "java.util.AbstractList"
+    , "java.util.AbstractMap"
+    , "java.util.AbstractMap$SimpleEntry"
+    , "java.util.AbstractMap$SimpleImmutableEntry"
+    , "java.util.AbstractQueue"
+    , "java.util.AbstractSequentialList"
+    , "java.util.AbstractSet"
+    , "java.util.ArrayDeque"
+    , "java.util.ArrayList"
+    , "java.util.Arrays"
+    , "java.util.BitSet"
+    , "java.util.Calendar"
+    , "java.util.Collection"
+    , "java.util.Collections"
+    , "java.util.Comparator"
+    , "java.util.ConcurrentModificationException"
+    , "java.util.Currency"
+    , "java.util.Date"
+    , "java.util.Deque"
+    , "java.util.Dictionary"
+    , "java.util.DuplicateFormatFlagsException"
+    , "java.util.EmptyStackException"
+    , "java.util.EnumMap"
+    , "java.util.EnumSet"
+    , "java.util.Enumeration"
+    , "java.util.EventListener"
+    , "java.util.EventListenerProxy"
+    , "java.util.EventObject"
+    , "java.util.FormatFlagsConversionMismatchException"
+    , "java.util.Formattable"
+    , "java.util.FormattableFlags"
+    , "java.util.Formatter"
+    , "java.util.Formatter$BigDecimalLayoutForm"
+    , "java.util.FormatterClosedException"
+    , "java.util.GregorianCalendar"
+    , "java.util.HashMap"
+    , "java.util.HashSet"
+    , "java.util.Hashtable"
+    , "java.util.IdentityHashMap"
+    , "java.util.IllegalFormatCodePointException"
+    , "java.util.IllegalFormatConversionException"
+    , "java.util.IllegalFormatException"
+    , "java.util.IllegalFormatFlagsException"
+    , "java.util.IllegalFormatPrecisionException"
+    , "java.util.IllegalFormatWidthException"
+    , "java.util.InputMismatchException"
+    , "java.util.InvalidPropertiesFormatException"
+    , "java.util.Iterator"
+    , "java.util.LinkedHashMap"
+    , "java.util.LinkedHashSet"
+    , "java.util.LinkedList"
+    , "java.util.List"
+    , "java.util.ListIterator"
+    , "java.util.ListResourceBundle"
+    , "java.util.Locale"
+    , "java.util.Map"
+    , "java.util.Map$Entry"
+    , "java.util.MissingFormatArgumentException"
+    , "java.util.MissingFormatWidthException"
+    , "java.util.MissingResourceException"
+    , "java.util.NavigableMap"
+    , "java.util.NavigableSet"
+    , "java.util.NoSuchElementException"
+    , "java.util.Observable"
+    , "java.util.Observer"
+    , "java.util.PriorityQueue"
+    , "java.util.Properties"
+    , "java.util.PropertyPermission"
+    , "java.util.PropertyResourceBundle"
+    , "java.util.Queue"
+    , "java.util.Random"
+    , "java.util.RandomAccess"
+    , "java.util.ResourceBundle"
+    , "java.util.ResourceBundle$Control"
+    , "java.util.Scanner"
+    , "java.util.ServiceConfigurationError"
+    , "java.util.ServiceLoader"
+    , "java.util.Set"
+    , "java.util.SimpleTimeZone"
+    , "java.util.SortedMap"
+    , "java.util.SortedSet"
+    , "java.util.Stack"
+    , "java.util.StringTokenizer"
+    , "java.util.TimeZone"
+    , "java.util.Timer"
+    , "java.util.TimerTask"
+    , "java.util.TooManyListenersException"
+    , "java.util.TreeMap"
+    , "java.util.TreeSet"
+    , "java.util.UUID"
+    , "java.util.UnknownFormatConversionException"
+    , "java.util.UnknownFormatFlagsException"
+    , "java.util.Vector"
+    , "java.util.WeakHashMap"
+    , "java.util.concurrent.AbstractExecutorService"
+    , "java.util.concurrent.ArrayBlockingQueue"
+    , "java.util.concurrent.BlockingDeque"
+    , "java.util.concurrent.BlockingQueue"
+    , "java.util.concurrent.BrokenBarrierException"
+    , "java.util.concurrent.Callable"
+    , "java.util.concurrent.CancellationException"
+    , "java.util.concurrent.CompletionService"
+    , "java.util.concurrent.ConcurrentHashMap"
+    , "java.util.concurrent.ConcurrentLinkedQueue"
+    , "java.util.concurrent.ConcurrentMap"
+    , "java.util.concurrent.ConcurrentNavigableMap"
+    , "java.util.concurrent.ConcurrentSkipListMap"
+    , "java.util.concurrent.ConcurrentSkipListSet"
+    , "java.util.concurrent.CopyOnWriteArrayList"
+    , "java.util.concurrent.CopyOnWriteArraySet"
+    , "java.util.concurrent.CountDownLatch"
+    , "java.util.concurrent.CyclicBarrier"
+    , "java.util.concurrent.DelayQueue"
+    , "java.util.concurrent.Delayed"
+    , "java.util.concurrent.Exchanger"
+    , "java.util.concurrent.ExecutionException"
+    , "java.util.concurrent.Executor"
+    , "java.util.concurrent.ExecutorCompletionService"
+    , "java.util.concurrent.ExecutorService"
+    , "java.util.concurrent.Executors"
+    , "java.util.concurrent.Future"
+    , "java.util.concurrent.FutureTask"
+    , "java.util.concurrent.LinkedBlockingDeque"
+    , "java.util.concurrent.LinkedBlockingQueue"
+    , "java.util.concurrent.PriorityBlockingQueue"
+    , "java.util.concurrent.RejectedExecutionException"
+    , "java.util.concurrent.RejectedExecutionHandler"
+    , "java.util.concurrent.RunnableFuture"
+    , "java.util.concurrent.RunnableScheduledFuture"
+    , "java.util.concurrent.ScheduledExecutorService"
+    , "java.util.concurrent.ScheduledFuture"
+    , "java.util.concurrent.ScheduledThreadPoolExecutor"
+    , "java.util.concurrent.Semaphore"
+    , "java.util.concurrent.SynchronousQueue"
+    , "java.util.concurrent.ThreadFactory"
+    , "java.util.concurrent.ThreadPoolExecutor"
+    , "java.util.concurrent.ThreadPoolExecutor$AbortPolicy"
+    , "java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"
+    , "java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy"
+    , "java.util.concurrent.ThreadPoolExecutor$DiscardPolicy"
+    , "java.util.concurrent.TimeUnit"
+    , "java.util.concurrent.TimeoutException"
+    , "java.util.concurrent.atomic.AtomicBoolean"
+    , "java.util.concurrent.atomic.AtomicInteger"
+    , "java.util.concurrent.atomic.AtomicIntegerArray"
+    , "java.util.concurrent.atomic.AtomicIntegerFieldUpdater"
+    , "java.util.concurrent.atomic.AtomicLong"
+    , "java.util.concurrent.atomic.AtomicLongArray"
+    , "java.util.concurrent.atomic.AtomicLongFieldUpdater"
+    , "java.util.concurrent.atomic.AtomicMarkableReference"
+    , "java.util.concurrent.atomic.AtomicReference"
+    , "java.util.concurrent.atomic.AtomicReferenceArray"
+    , "java.util.concurrent.atomic.AtomicReferenceFieldUpdater"
+    , "java.util.concurrent.atomic.AtomicStampedReference"
+    , "java.util.concurrent.locks.AbstractOwnableSynchronizer"
+    , "java.util.concurrent.locks.AbstractQueuedLongSynchronizer"
+    , "java.util.concurrent.locks.AbstractQueuedSynchronizer"
+    , "java.util.concurrent.locks.Condition"
+    , "java.util.concurrent.locks.Lock"
+    , "java.util.concurrent.locks.LockSupport"
+    , "java.util.concurrent.locks.ReadWriteLock"
+    , "java.util.concurrent.locks.ReentrantLock"
+    , "java.util.concurrent.locks.ReentrantReadWriteLock"
+    , "java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock"
+    , "java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock"
+    , "java.util.jar.Attributes"
+    , "java.util.jar.Attributes$Name"
+    , "java.util.jar.JarEntry"
+    , "java.util.jar.JarException"
+    , "java.util.jar.JarFile"
+    , "java.util.jar.JarInputStream"
+    , "java.util.jar.JarOutputStream"
+    , "java.util.jar.Manifest"
+    , "java.util.jar.Pack200"
+    , "java.util.jar.Pack200$Packer"
+    , "java.util.jar.Pack200$Unpacker"
+    , "java.util.logging.ConsoleHandler"
+    , "java.util.logging.ErrorManager"
+    , "java.util.logging.FileHandler"
+    , "java.util.logging.Filter"
+    , "java.util.logging.Formatter"
+    , "java.util.logging.Handler"
+    , "java.util.logging.Level"
+    , "java.util.logging.LogManager"
+    , "java.util.logging.LogRecord"
+    , "java.util.logging.Logger"
+    , "java.util.logging.LoggingMXBean"
+    , "java.util.logging.LoggingPermission"
+    , "java.util.logging.MemoryHandler"
+    , "java.util.logging.SimpleFormatter"
+    , "java.util.logging.SocketHandler"
+    , "java.util.logging.StreamHandler"
+    , "java.util.logging.XMLFormatter"
+    , "java.util.prefs.AbstractPreferences"
+    , "java.util.prefs.BackingStoreException"
+    , "java.util.prefs.InvalidPreferencesFormatException"
+    , "java.util.prefs.NodeChangeEvent"
+    , "java.util.prefs.NodeChangeListener"
+    , "java.util.prefs.PreferenceChangeEvent"
+    , "java.util.prefs.PreferenceChangeListener"
+    , "java.util.prefs.Preferences"
+    , "java.util.prefs.PreferencesFactory"
+    , "java.util.regex.MatchResult"
+    , "java.util.regex.Matcher"
+    , "java.util.regex.Pattern"
+    , "java.util.regex.PatternSyntaxException"
+    , "java.util.spi.CurrencyNameProvider"
+    , "java.util.spi.LocaleNameProvider"
+    , "java.util.spi.LocaleServiceProvider"
+    , "java.util.spi.TimeZoneNameProvider"
+    , "java.util.zip.Adler32"
+    , "java.util.zip.CRC32"
+    , "java.util.zip.CheckedInputStream"
+    , "java.util.zip.CheckedOutputStream"
+    , "java.util.zip.Checksum"
+    , "java.util.zip.DataFormatException"
+    , "java.util.zip.Deflater"
+    , "java.util.zip.DeflaterInputStream"
+    , "java.util.zip.DeflaterOutputStream"
+    , "java.util.zip.GZIPInputStream"
+    , "java.util.zip.GZIPOutputStream"
+    , "java.util.zip.Inflater"
+    , "java.util.zip.InflaterInputStream"
+    , "java.util.zip.InflaterOutputStream"
+    , "java.util.zip.ZipEntry"
+    , "java.util.zip.ZipError"
+    , "java.util.zip.ZipException"
+    , "java.util.zip.ZipFile"
+    , "java.util.zip.ZipInputStream"
+    , "java.util.zip.ZipOutputStream"
+    , "javax.accessibility.Accessible"
+    , "javax.accessibility.AccessibleAction"
+    , "javax.accessibility.AccessibleAttributeSequence"
+    , "javax.accessibility.AccessibleBundle"
+    , "javax.accessibility.AccessibleComponent"
+    , "javax.accessibility.AccessibleContext"
+    , "javax.accessibility.AccessibleEditableText"
+    , "javax.accessibility.AccessibleExtendedComponent"
+    , "javax.accessibility.AccessibleExtendedTable"
+    , "javax.accessibility.AccessibleExtendedText"
+    , "javax.accessibility.AccessibleHyperlink"
+    , "javax.accessibility.AccessibleHypertext"
+    , "javax.accessibility.AccessibleIcon"
+    , "javax.accessibility.AccessibleKeyBinding"
+    , "javax.accessibility.AccessibleRelation"
+    , "javax.accessibility.AccessibleRelationSet"
+    , "javax.accessibility.AccessibleResourceBundle"
+    , "javax.accessibility.AccessibleRole"
+    , "javax.accessibility.AccessibleSelection"
+    , "javax.accessibility.AccessibleState"
+    , "javax.accessibility.AccessibleStateSet"
+    , "javax.accessibility.AccessibleStreamable"
+    , "javax.accessibility.AccessibleTable"
+    , "javax.accessibility.AccessibleTableModelChange"
+    , "javax.accessibility.AccessibleText"
+    , "javax.accessibility.AccessibleTextSequence"
+    , "javax.accessibility.AccessibleValue"
+    , "javax.activation.ActivationDataFlavor"
+    , "javax.activation.CommandInfo"
+    , "javax.activation.CommandMap"
+    , "javax.activation.CommandObject"
+    , "javax.activation.DataContentHandler"
+    , "javax.activation.DataContentHandlerFactory"
+    , "javax.activation.DataHandler"
+    , "javax.activation.DataSource"
+    , "javax.activation.FileDataSource"
+    , "javax.activation.FileTypeMap"
+    , "javax.activation.MailcapCommandMap"
+    , "javax.activation.MimeType"
+    , "javax.activation.MimeTypeParameterList"
+    , "javax.activation.MimeTypeParseException"
+    , "javax.activation.MimetypesFileTypeMap"
+    , "javax.activation.URLDataSource"
+    , "javax.activation.UnsupportedDataTypeException"
+    , "javax.activity.ActivityCompletedException"
+    , "javax.activity.ActivityRequiredException"
+    , "javax.activity.InvalidActivityException"
+    , "javax.annotation.Generated"
+    , "javax.annotation.PostConstruct"
+    , "javax.annotation.PreDestroy"
+    , "javax.annotation.Resource"
+    , "javax.annotation.Resource$AuthenticationType"
+    , "javax.annotation.Resources"
+    , "javax.annotation.processing.AbstractProcessor"
+    , "javax.annotation.processing.Completion"
+    , "javax.annotation.processing.Completions"
+    , "javax.annotation.processing.Filer"
+    , "javax.annotation.processing.FilerException"
+    , "javax.annotation.processing.Messager"
+    , "javax.annotation.processing.ProcessingEnvironment"
+    , "javax.annotation.processing.Processor"
+    , "javax.annotation.processing.RoundEnvironment"
+    , "javax.annotation.processing.SupportedAnnotationTypes"
+    , "javax.annotation.processing.SupportedOptions"
+    , "javax.annotation.processing.SupportedSourceVersion"
+    , "javax.crypto.BadPaddingException"
+    , "javax.crypto.Cipher"
+    , "javax.crypto.CipherInputStream"
+    , "javax.crypto.CipherOutputStream"
+    , "javax.crypto.CipherSpi"
+    , "javax.crypto.EncryptedPrivateKeyInfo"
+    , "javax.crypto.ExemptionMechanism"
+    , "javax.crypto.ExemptionMechanismException"
+    , "javax.crypto.ExemptionMechanismSpi"
+    , "javax.crypto.IllegalBlockSizeException"
+    , "javax.crypto.KeyAgreement"
+    , "javax.crypto.KeyAgreementSpi"
+    , "javax.crypto.KeyGenerator"
+    , "javax.crypto.KeyGeneratorSpi"
+    , "javax.crypto.Mac"
+    , "javax.crypto.MacSpi"
+    , "javax.crypto.NoSuchPaddingException"
+    , "javax.crypto.NullCipher"
+    , "javax.crypto.SealedObject"
+    , "javax.crypto.SecretKey"
+    , "javax.crypto.SecretKeyFactory"
+    , "javax.crypto.SecretKeyFactorySpi"
+    , "javax.crypto.ShortBufferException"
+    , "javax.crypto.interfaces.DHKey"
+    , "javax.crypto.interfaces.DHPrivateKey"
+    , "javax.crypto.interfaces.DHPublicKey"
+    , "javax.crypto.interfaces.PBEKey"
+    , "javax.crypto.spec.DESKeySpec"
+    , "javax.crypto.spec.DESedeKeySpec"
+    , "javax.crypto.spec.DHGenParameterSpec"
+    , "javax.crypto.spec.DHParameterSpec"
+    , "javax.crypto.spec.DHPrivateKeySpec"
+    , "javax.crypto.spec.DHPublicKeySpec"
+    , "javax.crypto.spec.IvParameterSpec"
+    , "javax.crypto.spec.OAEPParameterSpec"
+    , "javax.crypto.spec.PBEKeySpec"
+    , "javax.crypto.spec.PBEParameterSpec"
+    , "javax.crypto.spec.PSource"
+    , "javax.crypto.spec.PSource$PSpecified"
+    , "javax.crypto.spec.RC2ParameterSpec"
+    , "javax.crypto.spec.RC5ParameterSpec"
+    , "javax.crypto.spec.SecretKeySpec"
+    , "javax.imageio.IIOException"
+    , "javax.imageio.IIOImage"
+    , "javax.imageio.IIOParam"
+    , "javax.imageio.IIOParamController"
+    , "javax.imageio.ImageIO"
+    , "javax.imageio.ImageReadParam"
+    , "javax.imageio.ImageReader"
+    , "javax.imageio.ImageTranscoder"
+    , "javax.imageio.ImageTypeSpecifier"
+    , "javax.imageio.ImageWriteParam"
+    , "javax.imageio.ImageWriter"
+    , "javax.imageio.event.IIOReadProgressListener"
+    , "javax.imageio.event.IIOReadUpdateListener"
+    , "javax.imageio.event.IIOReadWarningListener"
+    , "javax.imageio.event.IIOWriteProgressListener"
+    , "javax.imageio.event.IIOWriteWarningListener"
+    , "javax.imageio.metadata.IIOInvalidTreeException"
+    , "javax.imageio.metadata.IIOMetadata"
+    , "javax.imageio.metadata.IIOMetadataController"
+    , "javax.imageio.metadata.IIOMetadataFormat"
+    , "javax.imageio.metadata.IIOMetadataFormatImpl"
+    , "javax.imageio.metadata.IIOMetadataNode"
+    , "javax.imageio.plugins.bmp.BMPImageWriteParam"
+    , "javax.imageio.plugins.jpeg.JPEGHuffmanTable"
+    , "javax.imageio.plugins.jpeg.JPEGImageReadParam"
+    , "javax.imageio.plugins.jpeg.JPEGImageWriteParam"
+    , "javax.imageio.plugins.jpeg.JPEGQTable"
+    , "javax.imageio.spi.IIORegistry"
+    , "javax.imageio.spi.IIOServiceProvider"
+    , "javax.imageio.spi.ImageInputStreamSpi"
+    , "javax.imageio.spi.ImageOutputStreamSpi"
+    , "javax.imageio.spi.ImageReaderSpi"
+    , "javax.imageio.spi.ImageReaderWriterSpi"
+    , "javax.imageio.spi.ImageTranscoderSpi"
+    , "javax.imageio.spi.ImageWriterSpi"
+    , "javax.imageio.spi.RegisterableService"
+    , "javax.imageio.spi.ServiceRegistry"
+    , "javax.imageio.spi.ServiceRegistry$Filter"
+    , "javax.imageio.stream.FileCacheImageInputStream"
+    , "javax.imageio.stream.FileCacheImageOutputStream"
+    , "javax.imageio.stream.FileImageInputStream"
+    , "javax.imageio.stream.FileImageOutputStream"
+    , "javax.imageio.stream.IIOByteBuffer"
+    , "javax.imageio.stream.ImageInputStream"
+    , "javax.imageio.stream.ImageInputStreamImpl"
+    , "javax.imageio.stream.ImageOutputStream"
+    , "javax.imageio.stream.ImageOutputStreamImpl"
+    , "javax.imageio.stream.MemoryCacheImageInputStream"
+    , "javax.imageio.stream.MemoryCacheImageOutputStream"
+    , "javax.jws.HandlerChain"
+    , "javax.jws.Oneway"
+    , "javax.jws.WebMethod"
+    , "javax.jws.WebParam"
+    , "javax.jws.WebParam$Mode"
+    , "javax.jws.WebResult"
+    , "javax.jws.WebService"
+    , "javax.jws.soap.InitParam"
+    , "javax.jws.soap.SOAPBinding"
+    , "javax.jws.soap.SOAPBinding$ParameterStyle"
+    , "javax.jws.soap.SOAPBinding$Style"
+    , "javax.jws.soap.SOAPBinding$Use"
+    , "javax.jws.soap.SOAPMessageHandler"
+    , "javax.jws.soap.SOAPMessageHandlers"
+    , "javax.lang.model.SourceVersion"
+    , "javax.lang.model.element.AnnotationMirror"
+    , "javax.lang.model.element.AnnotationValue"
+    , "javax.lang.model.element.AnnotationValueVisitor"
+    , "javax.lang.model.element.Element"
+    , "javax.lang.model.element.ElementKind"
+    , "javax.lang.model.element.ElementVisitor"
+    , "javax.lang.model.element.ExecutableElement"
+    , "javax.lang.model.element.Modifier"
+    , "javax.lang.model.element.Name"
+    , "javax.lang.model.element.NestingKind"
+    , "javax.lang.model.element.PackageElement"
+    , "javax.lang.model.element.TypeElement"
+    , "javax.lang.model.element.TypeParameterElement"
+    , "javax.lang.model.element.UnknownAnnotationValueException"
+    , "javax.lang.model.element.UnknownElementException"
+    , "javax.lang.model.element.VariableElement"
+    , "javax.lang.model.type.ArrayType"
+    , "javax.lang.model.type.DeclaredType"
+    , "javax.lang.model.type.ErrorType"
+    , "javax.lang.model.type.ExecutableType"
+    , "javax.lang.model.type.MirroredTypeException"
+    , "javax.lang.model.type.MirroredTypesException"
+    , "javax.lang.model.type.NoType"
+    , "javax.lang.model.type.NullType"
+    , "javax.lang.model.type.PrimitiveType"
+    , "javax.lang.model.type.ReferenceType"
+    , "javax.lang.model.type.TypeKind"
+    , "javax.lang.model.type.TypeMirror"
+    , "javax.lang.model.type.TypeVariable"
+    , "javax.lang.model.type.TypeVisitor"
+    , "javax.lang.model.type.UnknownTypeException"
+    , "javax.lang.model.type.WildcardType"
+    , "javax.lang.model.util.AbstractAnnotationValueVisitor6"
+    , "javax.lang.model.util.AbstractElementVisitor6"
+    , "javax.lang.model.util.AbstractTypeVisitor6"
+    , "javax.lang.model.util.ElementFilter"
+    , "javax.lang.model.util.ElementKindVisitor6"
+    , "javax.lang.model.util.ElementScanner6"
+    , "javax.lang.model.util.Elements"
+    , "javax.lang.model.util.SimpleAnnotationValueVisitor6"
+    , "javax.lang.model.util.SimpleElementVisitor6"
+    , "javax.lang.model.util.SimpleTypeVisitor6"
+    , "javax.lang.model.util.TypeKindVisitor6"
+    , "javax.lang.model.util.Types"
+    , "javax.management.Attribute"
+    , "javax.management.AttributeChangeNotification"
+    , "javax.management.AttributeChangeNotificationFilter"
+    , "javax.management.AttributeList"
+    , "javax.management.AttributeNotFoundException"
+    , "javax.management.AttributeValueExp"
+    , "javax.management.BadAttributeValueExpException"
+    , "javax.management.BadBinaryOpValueExpException"
+    , "javax.management.BadStringOperationException"
+    , "javax.management.DefaultLoaderRepository"
+    , "javax.management.Descriptor"
+    , "javax.management.DescriptorAccess"
+    , "javax.management.DescriptorKey"
+    , "javax.management.DescriptorRead"
+    , "javax.management.DynamicMBean"
+    , "javax.management.ImmutableDescriptor"
+    , "javax.management.InstanceAlreadyExistsException"
+    , "javax.management.InstanceNotFoundException"
+    , "javax.management.IntrospectionException"
+    , "javax.management.InvalidApplicationException"
+    , "javax.management.InvalidAttributeValueException"
+    , "javax.management.JMException"
+    , "javax.management.JMRuntimeException"
+    , "javax.management.JMX"
+    , "javax.management.ListenerNotFoundException"
+    , "javax.management.MBeanAttributeInfo"
+    , "javax.management.MBeanConstructorInfo"
+    , "javax.management.MBeanException"
+    , "javax.management.MBeanFeatureInfo"
+    , "javax.management.MBeanInfo"
+    , "javax.management.MBeanNotificationInfo"
+    , "javax.management.MBeanOperationInfo"
+    , "javax.management.MBeanParameterInfo"
+    , "javax.management.MBeanPermission"
+    , "javax.management.MBeanRegistration"
+    , "javax.management.MBeanRegistrationException"
+    , "javax.management.MBeanServer"
+    , "javax.management.MBeanServerBuilder"
+    , "javax.management.MBeanServerConnection"
+    , "javax.management.MBeanServerDelegate"
+    , "javax.management.MBeanServerDelegateMBean"
+    , "javax.management.MBeanServerFactory"
+    , "javax.management.MBeanServerInvocationHandler"
+    , "javax.management.MBeanServerNotification"
+    , "javax.management.MBeanServerPermission"
+    , "javax.management.MBeanTrustPermission"
+    , "javax.management.MXBean"
+    , "javax.management.MalformedObjectNameException"
+    , "javax.management.NotCompliantMBeanException"
+    , "javax.management.Notification"
+    , "javax.management.NotificationBroadcaster"
+    , "javax.management.NotificationBroadcasterSupport"
+    , "javax.management.NotificationEmitter"
+    , "javax.management.NotificationFilter"
+    , "javax.management.NotificationFilterSupport"
+    , "javax.management.NotificationListener"
+    , "javax.management.ObjectInstance"
+    , "javax.management.ObjectName"
+    , "javax.management.OperationsException"
+    , "javax.management.PersistentMBean"
+    , "javax.management.Query"
+    , "javax.management.QueryEval"
+    , "javax.management.QueryExp"
+    , "javax.management.ReflectionException"
+    , "javax.management.RuntimeErrorException"
+    , "javax.management.RuntimeMBeanException"
+    , "javax.management.RuntimeOperationsException"
+    , "javax.management.ServiceNotFoundException"
+    , "javax.management.StandardEmitterMBean"
+    , "javax.management.StandardMBean"
+    , "javax.management.StringValueExp"
+    , "javax.management.ValueExp"
+    , "javax.management.loading.ClassLoaderRepository"
+    , "javax.management.loading.DefaultLoaderRepository"
+    , "javax.management.loading.MLet"
+    , "javax.management.loading.MLetContent"
+    , "javax.management.loading.MLetMBean"
+    , "javax.management.loading.PrivateClassLoader"
+    , "javax.management.loading.PrivateMLet"
+    , "javax.management.modelmbean.DescriptorSupport"
+    , "javax.management.modelmbean.InvalidTargetObjectTypeException"
+    , "javax.management.modelmbean.ModelMBean"
+    , "javax.management.modelmbean.ModelMBeanAttributeInfo"
+    , "javax.management.modelmbean.ModelMBeanConstructorInfo"
+    , "javax.management.modelmbean.ModelMBeanInfo"
+    , "javax.management.modelmbean.ModelMBeanInfoSupport"
+    , "javax.management.modelmbean.ModelMBeanNotificationBroadcaster"
+    , "javax.management.modelmbean.ModelMBeanNotificationInfo"
+    , "javax.management.modelmbean.ModelMBeanOperationInfo"
+    , "javax.management.modelmbean.RequiredModelMBean"
+    , "javax.management.modelmbean.XMLParseException"
+    , "javax.management.monitor.CounterMonitor"
+    , "javax.management.monitor.CounterMonitorMBean"
+    , "javax.management.monitor.GaugeMonitor"
+    , "javax.management.monitor.GaugeMonitorMBean"
+    , "javax.management.monitor.Monitor"
+    , "javax.management.monitor.MonitorMBean"
+    , "javax.management.monitor.MonitorNotification"
+    , "javax.management.monitor.MonitorSettingException"
+    , "javax.management.monitor.StringMonitor"
+    , "javax.management.monitor.StringMonitorMBean"
+    , "javax.management.openmbean.ArrayType"
+    , "javax.management.openmbean.CompositeData"
+    , "javax.management.openmbean.CompositeDataInvocationHandler"
+    , "javax.management.openmbean.CompositeDataSupport"
+    , "javax.management.openmbean.CompositeDataView"
+    , "javax.management.openmbean.CompositeType"
+    , "javax.management.openmbean.InvalidKeyException"
+    , "javax.management.openmbean.InvalidOpenTypeException"
+    , "javax.management.openmbean.KeyAlreadyExistsException"
+    , "javax.management.openmbean.OpenDataException"
+    , "javax.management.openmbean.OpenMBeanAttributeInfo"
+    , "javax.management.openmbean.OpenMBeanAttributeInfoSupport"
+    , "javax.management.openmbean.OpenMBeanConstructorInfo"
+    , "javax.management.openmbean.OpenMBeanConstructorInfoSupport"
+    , "javax.management.openmbean.OpenMBeanInfo"
+    , "javax.management.openmbean.OpenMBeanInfoSupport"
+    , "javax.management.openmbean.OpenMBeanOperationInfo"
+    , "javax.management.openmbean.OpenMBeanOperationInfoSupport"
+    , "javax.management.openmbean.OpenMBeanParameterInfo"
+    , "javax.management.openmbean.OpenMBeanParameterInfoSupport"
+    , "javax.management.openmbean.OpenType"
+    , "javax.management.openmbean.SimpleType"
+    , "javax.management.openmbean.TabularData"
+    , "javax.management.openmbean.TabularDataSupport"
+    , "javax.management.openmbean.TabularType"
+    , "javax.management.relation.InvalidRelationIdException"
+    , "javax.management.relation.InvalidRelationServiceException"
+    , "javax.management.relation.InvalidRelationTypeException"
+    , "javax.management.relation.InvalidRoleInfoException"
+    , "javax.management.relation.InvalidRoleValueException"
+    , "javax.management.relation.MBeanServerNotificationFilter"
+    , "javax.management.relation.Relation"
+    , "javax.management.relation.RelationException"
+    , "javax.management.relation.RelationNotFoundException"
+    , "javax.management.relation.RelationNotification"
+    , "javax.management.relation.RelationService"
+    , "javax.management.relation.RelationServiceMBean"
+    , "javax.management.relation.RelationServiceNotRegisteredException"
+    , "javax.management.relation.RelationSupport"
+    , "javax.management.relation.RelationSupportMBean"
+    , "javax.management.relation.RelationType"
+    , "javax.management.relation.RelationTypeNotFoundException"
+    , "javax.management.relation.RelationTypeSupport"
+    , "javax.management.relation.Role"
+    , "javax.management.relation.RoleInfo"
+    , "javax.management.relation.RoleInfoNotFoundException"
+    , "javax.management.relation.RoleList"
+    , "javax.management.relation.RoleNotFoundException"
+    , "javax.management.relation.RoleResult"
+    , "javax.management.relation.RoleStatus"
+    , "javax.management.relation.RoleUnresolved"
+    , "javax.management.relation.RoleUnresolvedList"
+    , "javax.management.remote.JMXAddressable"
+    , "javax.management.remote.JMXAuthenticator"
+    , "javax.management.remote.JMXConnectionNotification"
+    , "javax.management.remote.JMXConnector"
+    , "javax.management.remote.JMXConnectorFactory"
+    , "javax.management.remote.JMXConnectorProvider"
+    , "javax.management.remote.JMXConnectorServer"
+    , "javax.management.remote.JMXConnectorServerFactory"
+    , "javax.management.remote.JMXConnectorServerMBean"
+    , "javax.management.remote.JMXConnectorServerProvider"
+    , "javax.management.remote.JMXPrincipal"
+    , "javax.management.remote.JMXProviderException"
+    , "javax.management.remote.JMXServerErrorException"
+    , "javax.management.remote.JMXServiceURL"
+    , "javax.management.remote.MBeanServerForwarder"
+    , "javax.management.remote.NotificationResult"
+    , "javax.management.remote.SubjectDelegationPermission"
+    , "javax.management.remote.TargetedNotification"
+    , "javax.management.remote.rmi.RMIConnection"
+    , "javax.management.remote.rmi.RMIConnectionImpl"
+    , "javax.management.remote.rmi.RMIConnectionImpl_Stub"
+    , "javax.management.remote.rmi.RMIConnector"
+    , "javax.management.remote.rmi.RMIConnectorServer"
+    , "javax.management.remote.rmi.RMIIIOPServerImpl"
+    , "javax.management.remote.rmi.RMIJRMPServerImpl"
+    , "javax.management.remote.rmi.RMIServer"
+    , "javax.management.remote.rmi.RMIServerImpl"
+    , "javax.management.remote.rmi.RMIServerImpl_Stub"
+    , "javax.management.timer.Timer"
+    , "javax.management.timer.TimerMBean"
+    , "javax.management.timer.TimerNotification"
+    , "javax.naming.AuthenticationException"
+    , "javax.naming.AuthenticationNotSupportedException"
+    , "javax.naming.BinaryRefAddr"
+    , "javax.naming.Binding"
+    , "javax.naming.CannotProceedException"
+    , "javax.naming.CommunicationException"
+    , "javax.naming.CompositeName"
+    , "javax.naming.CompoundName"
+    , "javax.naming.ConfigurationException"
+    , "javax.naming.Context"
+    , "javax.naming.ContextNotEmptyException"
+    , "javax.naming.InitialContext"
+    , "javax.naming.InsufficientResourcesException"
+    , "javax.naming.InterruptedNamingException"
+    , "javax.naming.InvalidNameException"
+    , "javax.naming.LimitExceededException"
+    , "javax.naming.LinkException"
+    , "javax.naming.LinkLoopException"
+    , "javax.naming.LinkRef"
+    , "javax.naming.MalformedLinkException"
+    , "javax.naming.Name"
+    , "javax.naming.NameAlreadyBoundException"
+    , "javax.naming.NameClassPair"
+    , "javax.naming.NameNotFoundException"
+    , "javax.naming.NameParser"
+    , "javax.naming.NamingEnumeration"
+    , "javax.naming.NamingException"
+    , "javax.naming.NamingSecurityException"
+    , "javax.naming.NoInitialContextException"
+    , "javax.naming.NoPermissionException"
+    , "javax.naming.NotContextException"
+    , "javax.naming.OperationNotSupportedException"
+    , "javax.naming.PartialResultException"
+    , "javax.naming.RefAddr"
+    , "javax.naming.Reference"
+    , "javax.naming.Referenceable"
+    , "javax.naming.ReferralException"
+    , "javax.naming.ServiceUnavailableException"
+    , "javax.naming.SizeLimitExceededException"
+    , "javax.naming.StringRefAddr"
+    , "javax.naming.TimeLimitExceededException"
+    , "javax.naming.directory.Attribute"
+    , "javax.naming.directory.AttributeInUseException"
+    , "javax.naming.directory.AttributeModificationException"
+    , "javax.naming.directory.Attributes"
+    , "javax.naming.directory.BasicAttribute"
+    , "javax.naming.directory.BasicAttributes"
+    , "javax.naming.directory.DirContext"
+    , "javax.naming.directory.InitialDirContext"
+    , "javax.naming.directory.InvalidAttributeIdentifierException"
+    , "javax.naming.directory.InvalidAttributeValueException"
+    , "javax.naming.directory.InvalidAttributesException"
+    , "javax.naming.directory.InvalidSearchControlsException"
+    , "javax.naming.directory.InvalidSearchFilterException"
+    , "javax.naming.directory.ModificationItem"
+    , "javax.naming.directory.NoSuchAttributeException"
+    , "javax.naming.directory.SchemaViolationException"
+    , "javax.naming.directory.SearchControls"
+    , "javax.naming.directory.SearchResult"
+    , "javax.naming.event.EventContext"
+    , "javax.naming.event.EventDirContext"
+    , "javax.naming.event.NamespaceChangeListener"
+    , "javax.naming.event.NamingEvent"
+    , "javax.naming.event.NamingExceptionEvent"
+    , "javax.naming.event.NamingListener"
+    , "javax.naming.event.ObjectChangeListener"
+    , "javax.naming.ldap.BasicControl"
+    , "javax.naming.ldap.Control"
+    , "javax.naming.ldap.ControlFactory"
+    , "javax.naming.ldap.ExtendedRequest"
+    , "javax.naming.ldap.ExtendedResponse"
+    , "javax.naming.ldap.HasControls"
+    , "javax.naming.ldap.InitialLdapContext"
+    , "javax.naming.ldap.LdapContext"
+    , "javax.naming.ldap.LdapName"
+    , "javax.naming.ldap.LdapReferralException"
+    , "javax.naming.ldap.ManageReferralControl"
+    , "javax.naming.ldap.PagedResultsControl"
+    , "javax.naming.ldap.PagedResultsResponseControl"
+    , "javax.naming.ldap.Rdn"
+    , "javax.naming.ldap.SortControl"
+    , "javax.naming.ldap.SortKey"
+    , "javax.naming.ldap.SortResponseControl"
+    , "javax.naming.ldap.StartTlsRequest"
+    , "javax.naming.ldap.StartTlsResponse"
+    , "javax.naming.ldap.UnsolicitedNotification"
+    , "javax.naming.ldap.UnsolicitedNotificationEvent"
+    , "javax.naming.ldap.UnsolicitedNotificationListener"
+    , "javax.naming.spi.DirObjectFactory"
+    , "javax.naming.spi.DirStateFactory"
+    , "javax.naming.spi.DirStateFactory$Result"
+    , "javax.naming.spi.DirectoryManager"
+    , "javax.naming.spi.InitialContextFactory"
+    , "javax.naming.spi.InitialContextFactoryBuilder"
+    , "javax.naming.spi.NamingManager"
+    , "javax.naming.spi.ObjectFactory"
+    , "javax.naming.spi.ObjectFactoryBuilder"
+    , "javax.naming.spi.ResolveResult"
+    , "javax.naming.spi.Resolver"
+    , "javax.naming.spi.StateFactory"
+    , "javax.net.ServerSocketFactory"
+    , "javax.net.SocketFactory"
+    , "javax.net.ssl.CertPathTrustManagerParameters"
+    , "javax.net.ssl.HandshakeCompletedEvent"
+    , "javax.net.ssl.HandshakeCompletedListener"
+    , "javax.net.ssl.HostnameVerifier"
+    , "javax.net.ssl.HttpsURLConnection"
+    , "javax.net.ssl.KeyManager"
+    , "javax.net.ssl.KeyManagerFactory"
+    , "javax.net.ssl.KeyManagerFactorySpi"
+    , "javax.net.ssl.KeyStoreBuilderParameters"
+    , "javax.net.ssl.ManagerFactoryParameters"
+    , "javax.net.ssl.SSLContext"
+    , "javax.net.ssl.SSLContextSpi"
+    , "javax.net.ssl.SSLEngine"
+    , "javax.net.ssl.SSLEngineResult"
+    , "javax.net.ssl.SSLEngineResult$HandshakeStatus"
+    , "javax.net.ssl.SSLEngineResult$Status"
+    , "javax.net.ssl.SSLException"
+    , "javax.net.ssl.SSLHandshakeException"
+    , "javax.net.ssl.SSLKeyException"
+    , "javax.net.ssl.SSLParameters"
+    , "javax.net.ssl.SSLPeerUnverifiedException"
+    , "javax.net.ssl.SSLPermission"
+    , "javax.net.ssl.SSLProtocolException"
+    , "javax.net.ssl.SSLServerSocket"
+    , "javax.net.ssl.SSLServerSocketFactory"
+    , "javax.net.ssl.SSLSession"
+    , "javax.net.ssl.SSLSessionBindingEvent"
+    , "javax.net.ssl.SSLSessionBindingListener"
+    , "javax.net.ssl.SSLSessionContext"
+    , "javax.net.ssl.SSLSocket"
+    , "javax.net.ssl.SSLSocketFactory"
+    , "javax.net.ssl.TrustManager"
+    , "javax.net.ssl.TrustManagerFactory"
+    , "javax.net.ssl.TrustManagerFactorySpi"
+    , "javax.net.ssl.X509ExtendedKeyManager"
+    , "javax.net.ssl.X509KeyManager"
+    , "javax.net.ssl.X509TrustManager"
+    , "javax.print.AttributeException"
+    , "javax.print.CancelablePrintJob"
+    , "javax.print.Doc"
+    , "javax.print.DocFlavor"
+    , "javax.print.DocFlavor$BYTE_ARRAY"
+    , "javax.print.DocFlavor$CHAR_ARRAY"
+    , "javax.print.DocFlavor$INPUT_STREAM"
+    , "javax.print.DocFlavor$READER"
+    , "javax.print.DocFlavor$SERVICE_FORMATTED"
+    , "javax.print.DocFlavor$STRING"
+    , "javax.print.DocFlavor$URL"
+    , "javax.print.DocPrintJob"
+    , "javax.print.FlavorException"
+    , "javax.print.MultiDoc"
+    , "javax.print.MultiDocPrintJob"
+    , "javax.print.MultiDocPrintService"
+    , "javax.print.PrintException"
+    , "javax.print.PrintService"
+    , "javax.print.PrintServiceLookup"
+    , "javax.print.ServiceUI"
+    , "javax.print.ServiceUIFactory"
+    , "javax.print.SimpleDoc"
+    , "javax.print.StreamPrintService"
+    , "javax.print.StreamPrintServiceFactory"
+    , "javax.print.URIException"
+    , "javax.print.attribute.Attribute"
+    , "javax.print.attribute.AttributeSet"
+    , "javax.print.attribute.AttributeSetUtilities"
+    , "javax.print.attribute.DateTimeSyntax"
+    , "javax.print.attribute.DocAttribute"
+    , "javax.print.attribute.DocAttributeSet"
+    , "javax.print.attribute.EnumSyntax"
+    , "javax.print.attribute.HashAttributeSet"
+    , "javax.print.attribute.HashDocAttributeSet"
+    , "javax.print.attribute.HashPrintJobAttributeSet"
+    , "javax.print.attribute.HashPrintRequestAttributeSet"
+    , "javax.print.attribute.HashPrintServiceAttributeSet"
+    , "javax.print.attribute.IntegerSyntax"
+    , "javax.print.attribute.PrintJobAttribute"
+    , "javax.print.attribute.PrintJobAttributeSet"
+    , "javax.print.attribute.PrintRequestAttribute"
+    , "javax.print.attribute.PrintRequestAttributeSet"
+    , "javax.print.attribute.PrintServiceAttribute"
+    , "javax.print.attribute.PrintServiceAttributeSet"
+    , "javax.print.attribute.ResolutionSyntax"
+    , "javax.print.attribute.SetOfIntegerSyntax"
+    , "javax.print.attribute.Size2DSyntax"
+    , "javax.print.attribute.SupportedValuesAttribute"
+    , "javax.print.attribute.TextSyntax"
+    , "javax.print.attribute.URISyntax"
+    , "javax.print.attribute.UnmodifiableSetException"
+    , "javax.print.attribute.standard.Chromaticity"
+    , "javax.print.attribute.standard.ColorSupported"
+    , "javax.print.attribute.standard.Compression"
+    , "javax.print.attribute.standard.Copies"
+    , "javax.print.attribute.standard.CopiesSupported"
+    , "javax.print.attribute.standard.DateTimeAtCompleted"
+    , "javax.print.attribute.standard.DateTimeAtCreation"
+    , "javax.print.attribute.standard.DateTimeAtProcessing"
+    , "javax.print.attribute.standard.Destination"
+    , "javax.print.attribute.standard.DocumentName"
+    , "javax.print.attribute.standard.Fidelity"
+    , "javax.print.attribute.standard.Finishings"
+    , "javax.print.attribute.standard.JobHoldUntil"
+    , "javax.print.attribute.standard.JobImpressions"
+    , "javax.print.attribute.standard.JobImpressionsCompleted"
+    , "javax.print.attribute.standard.JobImpressionsSupported"
+    , "javax.print.attribute.standard.JobKOctets"
+    , "javax.print.attribute.standard.JobKOctetsProcessed"
+    , "javax.print.attribute.standard.JobKOctetsSupported"
+    , "javax.print.attribute.standard.JobMediaSheets"
+    , "javax.print.attribute.standard.JobMediaSheetsCompleted"
+    , "javax.print.attribute.standard.JobMediaSheetsSupported"
+    , "javax.print.attribute.standard.JobMessageFromOperator"
+    , "javax.print.attribute.standard.JobName"
+    , "javax.print.attribute.standard.JobOriginatingUserName"
+    , "javax.print.attribute.standard.JobPriority"
+    , "javax.print.attribute.standard.JobPrioritySupported"
+    , "javax.print.attribute.standard.JobSheets"
+    , "javax.print.attribute.standard.JobState"
+    , "javax.print.attribute.standard.JobStateReason"
+    , "javax.print.attribute.standard.JobStateReasons"
+    , "javax.print.attribute.standard.Media"
+    , "javax.print.attribute.standard.MediaName"
+    , "javax.print.attribute.standard.MediaPrintableArea"
+    , "javax.print.attribute.standard.MediaSize"
+    , "javax.print.attribute.standard.MediaSize$Engineering"
+    , "javax.print.attribute.standard.MediaSize$ISO"
+    , "javax.print.attribute.standard.MediaSize$JIS"
+    , "javax.print.attribute.standard.MediaSize$NA"
+    , "javax.print.attribute.standard.MediaSize$Other"
+    , "javax.print.attribute.standard.MediaSizeName"
+    , "javax.print.attribute.standard.MediaTray"
+    , "javax.print.attribute.standard.MultipleDocumentHandling"
+    , "javax.print.attribute.standard.NumberOfDocuments"
+    , "javax.print.attribute.standard.NumberOfInterveningJobs"
+    , "javax.print.attribute.standard.NumberUp"
+    , "javax.print.attribute.standard.NumberUpSupported"
+    , "javax.print.attribute.standard.OrientationRequested"
+    , "javax.print.attribute.standard.OutputDeviceAssigned"
+    , "javax.print.attribute.standard.PDLOverrideSupported"
+    , "javax.print.attribute.standard.PageRanges"
+    , "javax.print.attribute.standard.PagesPerMinute"
+    , "javax.print.attribute.standard.PagesPerMinuteColor"
+    , "javax.print.attribute.standard.PresentationDirection"
+    , "javax.print.attribute.standard.PrintQuality"
+    , "javax.print.attribute.standard.PrinterInfo"
+    , "javax.print.attribute.standard.PrinterIsAcceptingJobs"
+    , "javax.print.attribute.standard.PrinterLocation"
+    , "javax.print.attribute.standard.PrinterMakeAndModel"
+    , "javax.print.attribute.standard.PrinterMessageFromOperator"
+    , "javax.print.attribute.standard.PrinterMoreInfo"
+    , "javax.print.attribute.standard.PrinterMoreInfoManufacturer"
+    , "javax.print.attribute.standard.PrinterName"
+    , "javax.print.attribute.standard.PrinterResolution"
+    , "javax.print.attribute.standard.PrinterState"
+    , "javax.print.attribute.standard.PrinterStateReason"
+    , "javax.print.attribute.standard.PrinterStateReasons"
+    , "javax.print.attribute.standard.PrinterURI"
+    , "javax.print.attribute.standard.QueuedJobCount"
+    , "javax.print.attribute.standard.ReferenceUriSchemesSupported"
+    , "javax.print.attribute.standard.RequestingUserName"
+    , "javax.print.attribute.standard.Severity"
+    , "javax.print.attribute.standard.SheetCollate"
+    , "javax.print.attribute.standard.Sides"
+    , "javax.print.event.PrintEvent"
+    , "javax.print.event.PrintJobAdapter"
+    , "javax.print.event.PrintJobAttributeEvent"
+    , "javax.print.event.PrintJobAttributeListener"
+    , "javax.print.event.PrintJobEvent"
+    , "javax.print.event.PrintJobListener"
+    , "javax.print.event.PrintServiceAttributeEvent"
+    , "javax.print.event.PrintServiceAttributeListener"
+    , "javax.rmi.CORBA.ClassDesc"
+    , "javax.rmi.CORBA.PortableRemoteObjectDelegate"
+    , "javax.rmi.CORBA.Stub"
+    , "javax.rmi.CORBA.StubDelegate"
+    , "javax.rmi.CORBA.Tie"
+    , "javax.rmi.CORBA.Util"
+    , "javax.rmi.CORBA.UtilDelegate"
+    , "javax.rmi.CORBA.ValueHandler"
+    , "javax.rmi.CORBA.ValueHandlerMultiFormat"
+    , "javax.rmi.PortableRemoteObject"
+    , "javax.rmi.ssl.SslRMIClientSocketFactory"
+    , "javax.rmi.ssl.SslRMIServerSocketFactory"
+    , "javax.script.AbstractScriptEngine"
+    , "javax.script.Bindings"
+    , "javax.script.Compilable"
+    , "javax.script.CompiledScript"
+    , "javax.script.Invocable"
+    , "javax.script.ScriptContext"
+    , "javax.script.ScriptEngine"
+    , "javax.script.ScriptEngineFactory"
+    , "javax.script.ScriptEngineManager"
+    , "javax.script.ScriptException"
+    , "javax.script.SimpleBindings"
+    , "javax.script.SimpleScriptContext"
+    , "javax.security.auth.AuthPermission"
+    , "javax.security.auth.DestroyFailedException"
+    , "javax.security.auth.Destroyable"
+    , "javax.security.auth.Policy"
+    , "javax.security.auth.PrivateCredentialPermission"
+    , "javax.security.auth.RefreshFailedException"
+    , "javax.security.auth.Refreshable"
+    , "javax.security.auth.Subject"
+    , "javax.security.auth.SubjectDomainCombiner"
+    , "javax.security.auth.callback.Callback"
+    , "javax.security.auth.callback.CallbackHandler"
+    , "javax.security.auth.callback.ChoiceCallback"
+    , "javax.security.auth.callback.ConfirmationCallback"
+    , "javax.security.auth.callback.LanguageCallback"
+    , "javax.security.auth.callback.NameCallback"
+    , "javax.security.auth.callback.PasswordCallback"
+    , "javax.security.auth.callback.TextInputCallback"
+    , "javax.security.auth.callback.TextOutputCallback"
+    , "javax.security.auth.callback.UnsupportedCallbackException"
+    , "javax.security.auth.kerberos.DelegationPermission"
+    , "javax.security.auth.kerberos.KerberosKey"
+    , "javax.security.auth.kerberos.KerberosPrincipal"
+    , "javax.security.auth.kerberos.KerberosTicket"
+    , "javax.security.auth.kerberos.ServicePermission"
+    , "javax.security.auth.login.AccountException"
+    , "javax.security.auth.login.AccountExpiredException"
+    , "javax.security.auth.login.AccountLockedException"
+    , "javax.security.auth.login.AccountNotFoundException"
+    , "javax.security.auth.login.AppConfigurationEntry"
+    , "javax.security.auth.login.AppConfigurationEntry$LoginModuleControlFlag"
+    , "javax.security.auth.login.Configuration"
+    , "javax.security.auth.login.Configuration$Parameters"
+    , "javax.security.auth.login.ConfigurationSpi"
+    , "javax.security.auth.login.CredentialException"
+    , "javax.security.auth.login.CredentialExpiredException"
+    , "javax.security.auth.login.CredentialNotFoundException"
+    , "javax.security.auth.login.FailedLoginException"
+    , "javax.security.auth.login.LoginContext"
+    , "javax.security.auth.login.LoginException"
+    , "javax.security.auth.spi.LoginModule"
+    , "javax.security.auth.x500.X500Principal"
+    , "javax.security.auth.x500.X500PrivateCredential"
+    , "javax.security.cert.Certificate"
+    , "javax.security.cert.CertificateEncodingException"
+    , "javax.security.cert.CertificateException"
+    , "javax.security.cert.CertificateExpiredException"
+    , "javax.security.cert.CertificateNotYetValidException"
+    , "javax.security.cert.CertificateParsingException"
+    , "javax.security.cert.X509Certificate"
+    , "javax.security.sasl.AuthenticationException"
+    , "javax.security.sasl.AuthorizeCallback"
+    , "javax.security.sasl.RealmCallback"
+    , "javax.security.sasl.RealmChoiceCallback"
+    , "javax.security.sasl.Sasl"
+    , "javax.security.sasl.SaslClient"
+    , "javax.security.sasl.SaslClientFactory"
+    , "javax.security.sasl.SaslException"
+    , "javax.security.sasl.SaslServer"
+    , "javax.security.sasl.SaslServerFactory"
+    , "javax.sound.midi.ControllerEventListener"
+    , "javax.sound.midi.Instrument"
+    , "javax.sound.midi.InvalidMidiDataException"
+    , "javax.sound.midi.MetaEventListener"
+    , "javax.sound.midi.MetaMessage"
+    , "javax.sound.midi.MidiChannel"
+    , "javax.sound.midi.MidiDevice"
+    , "javax.sound.midi.MidiDevice$Info"
+    , "javax.sound.midi.MidiEvent"
+    , "javax.sound.midi.MidiFileFormat"
+    , "javax.sound.midi.MidiMessage"
+    , "javax.sound.midi.MidiSystem"
+    , "javax.sound.midi.MidiUnavailableException"
+    , "javax.sound.midi.Patch"
+    , "javax.sound.midi.Receiver"
+    , "javax.sound.midi.Sequence"
+    , "javax.sound.midi.Sequencer"
+    , "javax.sound.midi.Sequencer$SyncMode"
+    , "javax.sound.midi.ShortMessage"
+    , "javax.sound.midi.Soundbank"
+    , "javax.sound.midi.SoundbankResource"
+    , "javax.sound.midi.Synthesizer"
+    , "javax.sound.midi.SysexMessage"
+    , "javax.sound.midi.Track"
+    , "javax.sound.midi.Transmitter"
+    , "javax.sound.midi.VoiceStatus"
+    , "javax.sound.midi.spi.MidiDeviceProvider"
+    , "javax.sound.midi.spi.MidiFileReader"
+    , "javax.sound.midi.spi.MidiFileWriter"
+    , "javax.sound.midi.spi.SoundbankReader"
+    , "javax.sound.sampled.AudioFileFormat"
+    , "javax.sound.sampled.AudioFileFormat$Type"
+    , "javax.sound.sampled.AudioFormat"
+    , "javax.sound.sampled.AudioFormat$Encoding"
+    , "javax.sound.sampled.AudioInputStream"
+    , "javax.sound.sampled.AudioPermission"
+    , "javax.sound.sampled.AudioSystem"
+    , "javax.sound.sampled.BooleanControl"
+    , "javax.sound.sampled.BooleanControl$Type"
+    , "javax.sound.sampled.Clip"
+    , "javax.sound.sampled.CompoundControl"
+    , "javax.sound.sampled.CompoundControl$Type"
+    , "javax.sound.sampled.Control"
+    , "javax.sound.sampled.Control$Type"
+    , "javax.sound.sampled.DataLine"
+    , "javax.sound.sampled.DataLine$Info"
+    , "javax.sound.sampled.EnumControl"
+    , "javax.sound.sampled.EnumControl$Type"
+    , "javax.sound.sampled.FloatControl"
+    , "javax.sound.sampled.FloatControl$Type"
+    , "javax.sound.sampled.Line"
+    , "javax.sound.sampled.Line$Info"
+    , "javax.sound.sampled.LineEvent"
+    , "javax.sound.sampled.LineEvent$Type"
+    , "javax.sound.sampled.LineListener"
+    , "javax.sound.sampled.LineUnavailableException"
+    , "javax.sound.sampled.Mixer"
+    , "javax.sound.sampled.Mixer$Info"
+    , "javax.sound.sampled.Port"
+    , "javax.sound.sampled.Port$Info"
+    , "javax.sound.sampled.ReverbType"
+    , "javax.sound.sampled.SourceDataLine"
+    , "javax.sound.sampled.TargetDataLine"
+    , "javax.sound.sampled.UnsupportedAudioFileException"
+    , "javax.sound.sampled.spi.AudioFileReader"
+    , "javax.sound.sampled.spi.AudioFileWriter"
+    , "javax.sound.sampled.spi.FormatConversionProvider"
+    , "javax.sound.sampled.spi.MixerProvider"
+    , "javax.sql.CommonDataSource"
+    , "javax.sql.ConnectionEvent"
+    , "javax.sql.ConnectionEventListener"
+    , "javax.sql.ConnectionPoolDataSource"
+    , "javax.sql.DataSource"
+    , "javax.sql.PooledConnection"
+    , "javax.sql.RowSet"
+    , "javax.sql.RowSetEvent"
+    , "javax.sql.RowSetInternal"
+    , "javax.sql.RowSetListener"
+    , "javax.sql.RowSetMetaData"
+    , "javax.sql.RowSetReader"
+    , "javax.sql.RowSetWriter"
+    , "javax.sql.StatementEvent"
+    , "javax.sql.StatementEventListener"
+    , "javax.sql.XAConnection"
+    , "javax.sql.XADataSource"
+    , "javax.sql.rowset.BaseRowSet"
+    , "javax.sql.rowset.CachedRowSet"
+    , "javax.sql.rowset.FilteredRowSet"
+    , "javax.sql.rowset.JdbcRowSet"
+    , "javax.sql.rowset.JoinRowSet"
+    , "javax.sql.rowset.Joinable"
+    , "javax.sql.rowset.Predicate"
+    , "javax.sql.rowset.RowSetMetaDataImpl"
+    , "javax.sql.rowset.RowSetWarning"
+    , "javax.sql.rowset.WebRowSet"
+    , "javax.sql.rowset.serial.SQLInputImpl"
+    , "javax.sql.rowset.serial.SQLOutputImpl"
+    , "javax.sql.rowset.serial.SerialArray"
+    , "javax.sql.rowset.serial.SerialBlob"
+    , "javax.sql.rowset.serial.SerialClob"
+    , "javax.sql.rowset.serial.SerialDatalink"
+    , "javax.sql.rowset.serial.SerialException"
+    , "javax.sql.rowset.serial.SerialJavaObject"
+    , "javax.sql.rowset.serial.SerialRef"
+    , "javax.sql.rowset.serial.SerialStruct"
+    , "javax.sql.rowset.spi.SyncFactory"
+    , "javax.sql.rowset.spi.SyncFactoryException"
+    , "javax.sql.rowset.spi.SyncProvider"
+    , "javax.sql.rowset.spi.SyncProviderException"
+    , "javax.sql.rowset.spi.SyncResolver"
+    , "javax.sql.rowset.spi.TransactionalWriter"
+    , "javax.sql.rowset.spi.XmlReader"
+    , "javax.sql.rowset.spi.XmlWriter"
+    , "javax.swing.AbstractAction"
+    , "javax.swing.AbstractButton"
+    , "javax.swing.AbstractCellEditor"
+    , "javax.swing.AbstractListModel"
+    , "javax.swing.AbstractSpinnerModel"
+    , "javax.swing.Action"
+    , "javax.swing.ActionMap"
+    , "javax.swing.BorderFactory"
+    , "javax.swing.BoundedRangeModel"
+    , "javax.swing.Box"
+    , "javax.swing.Box$Filler"
+    , "javax.swing.BoxLayout"
+    , "javax.swing.ButtonGroup"
+    , "javax.swing.ButtonModel"
+    , "javax.swing.CellEditor"
+    , "javax.swing.CellRendererPane"
+    , "javax.swing.ComboBoxEditor"
+    , "javax.swing.ComboBoxModel"
+    , "javax.swing.ComponentInputMap"
+    , "javax.swing.DebugGraphics"
+    , "javax.swing.DefaultBoundedRangeModel"
+    , "javax.swing.DefaultButtonModel"
+    , "javax.swing.DefaultCellEditor"
+    , "javax.swing.DefaultComboBoxModel"
+    , "javax.swing.DefaultDesktopManager"
+    , "javax.swing.DefaultFocusManager"
+    , "javax.swing.DefaultListCellRenderer"
+    , "javax.swing.DefaultListCellRenderer$UIResource"
+    , "javax.swing.DefaultListModel"
+    , "javax.swing.DefaultListSelectionModel"
+    , "javax.swing.DefaultRowSorter"
+    , "javax.swing.DefaultRowSorter$ModelWrapper"
+    , "javax.swing.DefaultSingleSelectionModel"
+    , "javax.swing.DesktopManager"
+    , "javax.swing.DropMode"
+    , "javax.swing.FocusManager"
+    , "javax.swing.GrayFilter"
+    , "javax.swing.GroupLayout"
+    , "javax.swing.GroupLayout$Alignment"
+    , "javax.swing.Icon"
+    , "javax.swing.ImageIcon"
+    , "javax.swing.InputMap"
+    , "javax.swing.InputVerifier"
+    , "javax.swing.InternalFrameFocusTraversalPolicy"
+    , "javax.swing.JApplet"
+    , "javax.swing.JButton"
+    , "javax.swing.JCheckBox"
+    , "javax.swing.JCheckBoxMenuItem"
+    , "javax.swing.JColorChooser"
+    , "javax.swing.JComboBox"
+    , "javax.swing.JComboBox$KeySelectionManager"
+    , "javax.swing.JComponent"
+    , "javax.swing.JDesktopPane"
+    , "javax.swing.JDialog"
+    , "javax.swing.JEditorPane"
+    , "javax.swing.JFileChooser"
+    , "javax.swing.JFormattedTextField"
+    , "javax.swing.JFormattedTextField$AbstractFormatter"
+    , "javax.swing.JFormattedTextField$AbstractFormatterFactory"
+    , "javax.swing.JFrame"
+    , "javax.swing.JInternalFrame"
+    , "javax.swing.JInternalFrame$JDesktopIcon"
+    , "javax.swing.JLabel"
+    , "javax.swing.JLayeredPane"
+    , "javax.swing.JList"
+    , "javax.swing.JList$DropLocation"
+    , "javax.swing.JMenu"
+    , "javax.swing.JMenuBar"
+    , "javax.swing.JMenuItem"
+    , "javax.swing.JOptionPane"
+    , "javax.swing.JPanel"
+    , "javax.swing.JPasswordField"
+    , "javax.swing.JPopupMenu"
+    , "javax.swing.JPopupMenu$Separator"
+    , "javax.swing.JProgressBar"
+    , "javax.swing.JRadioButton"
+    , "javax.swing.JRadioButtonMenuItem"
+    , "javax.swing.JRootPane"
+    , "javax.swing.JScrollBar"
+    , "javax.swing.JScrollPane"
+    , "javax.swing.JSeparator"
+    , "javax.swing.JSlider"
+    , "javax.swing.JSpinner"
+    , "javax.swing.JSpinner$DateEditor"
+    , "javax.swing.JSpinner$DefaultEditor"
+    , "javax.swing.JSpinner$ListEditor"
+    , "javax.swing.JSpinner$NumberEditor"
+    , "javax.swing.JSplitPane"
+    , "javax.swing.JTabbedPane"
+    , "javax.swing.JTable"
+    , "javax.swing.JTable$DropLocation"
+    , "javax.swing.JTable$PrintMode"
+    , "javax.swing.JTextArea"
+    , "javax.swing.JTextField"
+    , "javax.swing.JTextPane"
+    , "javax.swing.JToggleButton"
+    , "javax.swing.JToggleButton$ToggleButtonModel"
+    , "javax.swing.JToolBar"
+    , "javax.swing.JToolBar$Separator"
+    , "javax.swing.JToolTip"
+    , "javax.swing.JTree"
+    , "javax.swing.JTree$DropLocation"
+    , "javax.swing.JTree$DynamicUtilTreeNode"
+    , "javax.swing.JTree$EmptySelectionModel"
+    , "javax.swing.JViewport"
+    , "javax.swing.JWindow"
+    , "javax.swing.KeyStroke"
+    , "javax.swing.LayoutFocusTraversalPolicy"
+    , "javax.swing.LayoutStyle"
+    , "javax.swing.LayoutStyle$ComponentPlacement"
+    , "javax.swing.ListCellRenderer"
+    , "javax.swing.ListModel"
+    , "javax.swing.ListSelectionModel"
+    , "javax.swing.LookAndFeel"
+    , "javax.swing.MenuElement"
+    , "javax.swing.MenuSelectionManager"
+    , "javax.swing.MutableComboBoxModel"
+    , "javax.swing.OverlayLayout"
+    , "javax.swing.Popup"
+    , "javax.swing.PopupFactory"
+    , "javax.swing.ProgressMonitor"
+    , "javax.swing.ProgressMonitorInputStream"
+    , "javax.swing.Renderer"
+    , "javax.swing.RepaintManager"
+    , "javax.swing.RootPaneContainer"
+    , "javax.swing.RowFilter"
+    , "javax.swing.RowFilter$ComparisonType"
+    , "javax.swing.RowFilter$Entry"
+    , "javax.swing.RowSorter"
+    , "javax.swing.RowSorter$SortKey"
+    , "javax.swing.ScrollPaneConstants"
+    , "javax.swing.ScrollPaneLayout"
+    , "javax.swing.ScrollPaneLayout$UIResource"
+    , "javax.swing.Scrollable"
+    , "javax.swing.SingleSelectionModel"
+    , "javax.swing.SizeRequirements"
+    , "javax.swing.SizeSequence"
+    , "javax.swing.SortOrder"
+    , "javax.swing.SortingFocusTraversalPolicy"
+    , "javax.swing.SpinnerDateModel"
+    , "javax.swing.SpinnerListModel"
+    , "javax.swing.SpinnerModel"
+    , "javax.swing.SpinnerNumberModel"
+    , "javax.swing.Spring"
+    , "javax.swing.SpringLayout"
+    , "javax.swing.SpringLayout$Constraints"
+    , "javax.swing.SwingConstants"
+    , "javax.swing.SwingUtilities"
+    , "javax.swing.SwingWorker"
+    , "javax.swing.SwingWorker$StateValue"
+    , "javax.swing.Timer"
+    , "javax.swing.ToolTipManager"
+    , "javax.swing.TransferHandler"
+    , "javax.swing.TransferHandler$DropLocation"
+    , "javax.swing.TransferHandler$TransferSupport"
+    , "javax.swing.UIDefaults"
+    , "javax.swing.UIDefaults$ActiveValue"
+    , "javax.swing.UIDefaults$LazyInputMap"
+    , "javax.swing.UIDefaults$LazyValue"
+    , "javax.swing.UIDefaults$ProxyLazyValue"
+    , "javax.swing.UIManager"
+    , "javax.swing.UIManager$LookAndFeelInfo"
+    , "javax.swing.UnsupportedLookAndFeelException"
+    , "javax.swing.ViewportLayout"
+    , "javax.swing.WindowConstants"
+    , "javax.swing.border.AbstractBorder"
+    , "javax.swing.border.BevelBorder"
+    , "javax.swing.border.Border"
+    , "javax.swing.border.CompoundBorder"
+    , "javax.swing.border.EmptyBorder"
+    , "javax.swing.border.EtchedBorder"
+    , "javax.swing.border.LineBorder"
+    , "javax.swing.border.MatteBorder"
+    , "javax.swing.border.SoftBevelBorder"
+    , "javax.swing.border.TitledBorder"
+    , "javax.swing.colorchooser.AbstractColorChooserPanel"
+    , "javax.swing.colorchooser.ColorChooserComponentFactory"
+    , "javax.swing.colorchooser.ColorSelectionModel"
+    , "javax.swing.colorchooser.DefaultColorSelectionModel"
+    , "javax.swing.event.AncestorEvent"
+    , "javax.swing.event.AncestorListener"
+    , "javax.swing.event.CaretEvent"
+    , "javax.swing.event.CaretListener"
+    , "javax.swing.event.CellEditorListener"
+    , "javax.swing.event.ChangeEvent"
+    , "javax.swing.event.ChangeListener"
+    , "javax.swing.event.DocumentEvent"
+    , "javax.swing.event.DocumentEvent$ElementChange"
+    , "javax.swing.event.DocumentEvent$EventType"
+    , "javax.swing.event.DocumentListener"
+    , "javax.swing.event.EventListenerList"
+    , "javax.swing.event.HyperlinkEvent"
+    , "javax.swing.event.HyperlinkEvent$EventType"
+    , "javax.swing.event.HyperlinkListener"
+    , "javax.swing.event.InternalFrameAdapter"
+    , "javax.swing.event.InternalFrameEvent"
+    , "javax.swing.event.InternalFrameListener"
+    , "javax.swing.event.ListDataEvent"
+    , "javax.swing.event.ListDataListener"
+    , "javax.swing.event.ListSelectionEvent"
+    , "javax.swing.event.ListSelectionListener"
+    , "javax.swing.event.MenuDragMouseEvent"
+    , "javax.swing.event.MenuDragMouseListener"
+    , "javax.swing.event.MenuEvent"
+    , "javax.swing.event.MenuKeyEvent"
+    , "javax.swing.event.MenuKeyListener"
+    , "javax.swing.event.MenuListener"
+    , "javax.swing.event.MouseInputAdapter"
+    , "javax.swing.event.MouseInputListener"
+    , "javax.swing.event.PopupMenuEvent"
+    , "javax.swing.event.PopupMenuListener"
+    , "javax.swing.event.RowSorterEvent"
+    , "javax.swing.event.RowSorterEvent$Type"
+    , "javax.swing.event.RowSorterListener"
+    , "javax.swing.event.SwingPropertyChangeSupport"
+    , "javax.swing.event.TableColumnModelEvent"
+    , "javax.swing.event.TableColumnModelListener"
+    , "javax.swing.event.TableModelEvent"
+    , "javax.swing.event.TableModelListener"
+    , "javax.swing.event.TreeExpansionEvent"
+    , "javax.swing.event.TreeExpansionListener"
+    , "javax.swing.event.TreeModelEvent"
+    , "javax.swing.event.TreeModelListener"
+    , "javax.swing.event.TreeSelectionEvent"
+    , "javax.swing.event.TreeSelectionListener"
+    , "javax.swing.event.TreeWillExpandListener"
+    , "javax.swing.event.UndoableEditEvent"
+    , "javax.swing.event.UndoableEditListener"
+    , "javax.swing.filechooser.FileFilter"
+    , "javax.swing.filechooser.FileNameExtensionFilter"
+    , "javax.swing.filechooser.FileSystemView"
+    , "javax.swing.filechooser.FileView"
+    , "javax.swing.plaf.ActionMapUIResource"
+    , "javax.swing.plaf.BorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$BevelBorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$CompoundBorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$EmptyBorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$EtchedBorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$LineBorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$MatteBorderUIResource"
+    , "javax.swing.plaf.BorderUIResource$TitledBorderUIResource"
+    , "javax.swing.plaf.ButtonUI"
+    , "javax.swing.plaf.ColorChooserUI"
+    , "javax.swing.plaf.ColorUIResource"
+    , "javax.swing.plaf.ComboBoxUI"
+    , "javax.swing.plaf.ComponentInputMapUIResource"
+    , "javax.swing.plaf.ComponentUI"
+    , "javax.swing.plaf.DesktopIconUI"
+    , "javax.swing.plaf.DesktopPaneUI"
+    , "javax.swing.plaf.DimensionUIResource"
+    , "javax.swing.plaf.FileChooserUI"
+    , "javax.swing.plaf.FontUIResource"
+    , "javax.swing.plaf.IconUIResource"
+    , "javax.swing.plaf.InputMapUIResource"
+    , "javax.swing.plaf.InsetsUIResource"
+    , "javax.swing.plaf.InternalFrameUI"
+    , "javax.swing.plaf.LabelUI"
+    , "javax.swing.plaf.ListUI"
+    , "javax.swing.plaf.MenuBarUI"
+    , "javax.swing.plaf.MenuItemUI"
+    , "javax.swing.plaf.OptionPaneUI"
+    , "javax.swing.plaf.PanelUI"
+    , "javax.swing.plaf.PopupMenuUI"
+    , "javax.swing.plaf.ProgressBarUI"
+    , "javax.swing.plaf.RootPaneUI"
+    , "javax.swing.plaf.ScrollBarUI"
+    , "javax.swing.plaf.ScrollPaneUI"
+    , "javax.swing.plaf.SeparatorUI"
+    , "javax.swing.plaf.SliderUI"
+    , "javax.swing.plaf.SpinnerUI"
+    , "javax.swing.plaf.SplitPaneUI"
+    , "javax.swing.plaf.TabbedPaneUI"
+    , "javax.swing.plaf.TableHeaderUI"
+    , "javax.swing.plaf.TableUI"
+    , "javax.swing.plaf.TextUI"
+    , "javax.swing.plaf.ToolBarUI"
+    , "javax.swing.plaf.ToolTipUI"
+    , "javax.swing.plaf.TreeUI"
+    , "javax.swing.plaf.UIResource"
+    , "javax.swing.plaf.ViewportUI"
+    , "javax.swing.plaf.basic.BasicArrowButton"
+    , "javax.swing.plaf.basic.BasicBorders"
+    , "javax.swing.plaf.basic.BasicBorders$ButtonBorder"
+    , "javax.swing.plaf.basic.BasicBorders$FieldBorder"
+    , "javax.swing.plaf.basic.BasicBorders$MarginBorder"
+    , "javax.swing.plaf.basic.BasicBorders$MenuBarBorder"
+    , "javax.swing.plaf.basic.BasicBorders$RadioButtonBorder"
+    , "javax.swing.plaf.basic.BasicBorders$RolloverButtonBorder"
+    , "javax.swing.plaf.basic.BasicBorders$SplitPaneBorder"
+    , "javax.swing.plaf.basic.BasicBorders$ToggleButtonBorder"
+    , "javax.swing.plaf.basic.BasicButtonListener"
+    , "javax.swing.plaf.basic.BasicButtonUI"
+    , "javax.swing.plaf.basic.BasicCheckBoxMenuItemUI"
+    , "javax.swing.plaf.basic.BasicCheckBoxUI"
+    , "javax.swing.plaf.basic.BasicColorChooserUI"
+    , "javax.swing.plaf.basic.BasicComboBoxEditor"
+    , "javax.swing.plaf.basic.BasicComboBoxEditor$UIResource"
+    , "javax.swing.plaf.basic.BasicComboBoxRenderer"
+    , "javax.swing.plaf.basic.BasicComboBoxRenderer$UIResource"
+    , "javax.swing.plaf.basic.BasicComboBoxUI"
+    , "javax.swing.plaf.basic.BasicComboPopup"
+    , "javax.swing.plaf.basic.BasicDesktopIconUI"
+    , "javax.swing.plaf.basic.BasicDesktopPaneUI"
+    , "javax.swing.plaf.basic.BasicDirectoryModel"
+    , "javax.swing.plaf.basic.BasicEditorPaneUI"
+    , "javax.swing.plaf.basic.BasicFileChooserUI"
+    , "javax.swing.plaf.basic.BasicFormattedTextFieldUI"
+    , "javax.swing.plaf.basic.BasicGraphicsUtils"
+    , "javax.swing.plaf.basic.BasicHTML"
+    , "javax.swing.plaf.basic.BasicIconFactory"
+    , "javax.swing.plaf.basic.BasicInternalFrameTitlePane"
+    , "javax.swing.plaf.basic.BasicInternalFrameUI"
+    , "javax.swing.plaf.basic.BasicLabelUI"
+    , "javax.swing.plaf.basic.BasicListUI"
+    , "javax.swing.plaf.basic.BasicLookAndFeel"
+    , "javax.swing.plaf.basic.BasicMenuBarUI"
+    , "javax.swing.plaf.basic.BasicMenuItemUI"
+    , "javax.swing.plaf.basic.BasicMenuUI"
+    , "javax.swing.plaf.basic.BasicOptionPaneUI"
+    , "javax.swing.plaf.basic.BasicOptionPaneUI$ButtonAreaLayout"
+    , "javax.swing.plaf.basic.BasicPanelUI"
+    , "javax.swing.plaf.basic.BasicPasswordFieldUI"
+    , "javax.swing.plaf.basic.BasicPopupMenuSeparatorUI"
+    , "javax.swing.plaf.basic.BasicPopupMenuUI"
+    , "javax.swing.plaf.basic.BasicProgressBarUI"
+    , "javax.swing.plaf.basic.BasicRadioButtonMenuItemUI"
+    , "javax.swing.plaf.basic.BasicRadioButtonUI"
+    , "javax.swing.plaf.basic.BasicRootPaneUI"
+    , "javax.swing.plaf.basic.BasicScrollBarUI"
+    , "javax.swing.plaf.basic.BasicScrollPaneUI"
+    , "javax.swing.plaf.basic.BasicSeparatorUI"
+    , "javax.swing.plaf.basic.BasicSliderUI"
+    , "javax.swing.plaf.basic.BasicSpinnerUI"
+    , "javax.swing.plaf.basic.BasicSplitPaneDivider"
+    , "javax.swing.plaf.basic.BasicSplitPaneUI"
+    , "javax.swing.plaf.basic.BasicTabbedPaneUI"
+    , "javax.swing.plaf.basic.BasicTableHeaderUI"
+    , "javax.swing.plaf.basic.BasicTableUI"
+    , "javax.swing.plaf.basic.BasicTextAreaUI"
+    , "javax.swing.plaf.basic.BasicTextFieldUI"
+    , "javax.swing.plaf.basic.BasicTextPaneUI"
+    , "javax.swing.plaf.basic.BasicTextUI"
+    , "javax.swing.plaf.basic.BasicTextUI$BasicCaret"
+    , "javax.swing.plaf.basic.BasicTextUI$BasicHighlighter"
+    , "javax.swing.plaf.basic.BasicToggleButtonUI"
+    , "javax.swing.plaf.basic.BasicToolBarSeparatorUI"
+    , "javax.swing.plaf.basic.BasicToolBarUI"
+    , "javax.swing.plaf.basic.BasicToolTipUI"
+    , "javax.swing.plaf.basic.BasicTreeUI"
+    , "javax.swing.plaf.basic.BasicViewportUI"
+    , "javax.swing.plaf.basic.ComboPopup"
+    , "javax.swing.plaf.basic.DefaultMenuLayout"
+    , "javax.swing.plaf.metal.DefaultMetalTheme"
+    , "javax.swing.plaf.metal.MetalBorders"
+    , "javax.swing.plaf.metal.MetalBorders$ButtonBorder"
+    , "javax.swing.plaf.metal.MetalBorders$Flush3DBorder"
+    , "javax.swing.plaf.metal.MetalBorders$InternalFrameBorder"
+    , "javax.swing.plaf.metal.MetalBorders$MenuBarBorder"
+    , "javax.swing.plaf.metal.MetalBorders$MenuItemBorder"
+    , "javax.swing.plaf.metal.MetalBorders$OptionDialogBorder"
+    , "javax.swing.plaf.metal.MetalBorders$PaletteBorder"
+    , "javax.swing.plaf.metal.MetalBorders$PopupMenuBorder"
+    , "javax.swing.plaf.metal.MetalBorders$RolloverButtonBorder"
+    , "javax.swing.plaf.metal.MetalBorders$ScrollPaneBorder"
+    , "javax.swing.plaf.metal.MetalBorders$TableHeaderBorder"
+    , "javax.swing.plaf.metal.MetalBorders$TextFieldBorder"
+    , "javax.swing.plaf.metal.MetalBorders$ToggleButtonBorder"
+    , "javax.swing.plaf.metal.MetalBorders$ToolBarBorder"
+    , "javax.swing.plaf.metal.MetalButtonUI"
+    , "javax.swing.plaf.metal.MetalCheckBoxIcon"
+    , "javax.swing.plaf.metal.MetalCheckBoxUI"
+    , "javax.swing.plaf.metal.MetalComboBoxButton"
+    , "javax.swing.plaf.metal.MetalComboBoxEditor"
+    , "javax.swing.plaf.metal.MetalComboBoxEditor$UIResource"
+    , "javax.swing.plaf.metal.MetalComboBoxIcon"
+    , "javax.swing.plaf.metal.MetalComboBoxUI"
+    , "javax.swing.plaf.metal.MetalDesktopIconUI"
+    , "javax.swing.plaf.metal.MetalFileChooserUI"
+    , "javax.swing.plaf.metal.MetalIconFactory"
+    , "javax.swing.plaf.metal.MetalIconFactory$FileIcon16"
+    , "javax.swing.plaf.metal.MetalIconFactory$FolderIcon16"
+    , "javax.swing.plaf.metal.MetalIconFactory$PaletteCloseIcon"
+    , "javax.swing.plaf.metal.MetalIconFactory$TreeControlIcon"
+    , "javax.swing.plaf.metal.MetalIconFactory$TreeFolderIcon"
+    , "javax.swing.plaf.metal.MetalIconFactory$TreeLeafIcon"
+    , "javax.swing.plaf.metal.MetalInternalFrameTitlePane"
+    , "javax.swing.plaf.metal.MetalInternalFrameUI"
+    , "javax.swing.plaf.metal.MetalLabelUI"
+    , "javax.swing.plaf.metal.MetalLookAndFeel"
+    , "javax.swing.plaf.metal.MetalMenuBarUI"
+    , "javax.swing.plaf.metal.MetalPopupMenuSeparatorUI"
+    , "javax.swing.plaf.metal.MetalProgressBarUI"
+    , "javax.swing.plaf.metal.MetalRadioButtonUI"
+    , "javax.swing.plaf.metal.MetalRootPaneUI"
+    , "javax.swing.plaf.metal.MetalScrollBarUI"
+    , "javax.swing.plaf.metal.MetalScrollButton"
+    , "javax.swing.plaf.metal.MetalScrollPaneUI"
+    , "javax.swing.plaf.metal.MetalSeparatorUI"
+    , "javax.swing.plaf.metal.MetalSliderUI"
+    , "javax.swing.plaf.metal.MetalSplitPaneUI"
+    , "javax.swing.plaf.metal.MetalTabbedPaneUI"
+    , "javax.swing.plaf.metal.MetalTextFieldUI"
+    , "javax.swing.plaf.metal.MetalTheme"
+    , "javax.swing.plaf.metal.MetalToggleButtonUI"
+    , "javax.swing.plaf.metal.MetalToolBarUI"
+    , "javax.swing.plaf.metal.MetalToolTipUI"
+    , "javax.swing.plaf.metal.MetalTreeUI"
+    , "javax.swing.plaf.metal.OceanTheme"
+    , "javax.swing.plaf.multi.MultiButtonUI"
+    , "javax.swing.plaf.multi.MultiColorChooserUI"
+    , "javax.swing.plaf.multi.MultiComboBoxUI"
+    , "javax.swing.plaf.multi.MultiDesktopIconUI"
+    , "javax.swing.plaf.multi.MultiDesktopPaneUI"
+    , "javax.swing.plaf.multi.MultiFileChooserUI"
+    , "javax.swing.plaf.multi.MultiInternalFrameUI"
+    , "javax.swing.plaf.multi.MultiLabelUI"
+    , "javax.swing.plaf.multi.MultiListUI"
+    , "javax.swing.plaf.multi.MultiLookAndFeel"
+    , "javax.swing.plaf.multi.MultiMenuBarUI"
+    , "javax.swing.plaf.multi.MultiMenuItemUI"
+    , "javax.swing.plaf.multi.MultiOptionPaneUI"
+    , "javax.swing.plaf.multi.MultiPanelUI"
+    , "javax.swing.plaf.multi.MultiPopupMenuUI"
+    , "javax.swing.plaf.multi.MultiProgressBarUI"
+    , "javax.swing.plaf.multi.MultiRootPaneUI"
+    , "javax.swing.plaf.multi.MultiScrollBarUI"
+    , "javax.swing.plaf.multi.MultiScrollPaneUI"
+    , "javax.swing.plaf.multi.MultiSeparatorUI"
+    , "javax.swing.plaf.multi.MultiSliderUI"
+    , "javax.swing.plaf.multi.MultiSpinnerUI"
+    , "javax.swing.plaf.multi.MultiSplitPaneUI"
+    , "javax.swing.plaf.multi.MultiTabbedPaneUI"
+    , "javax.swing.plaf.multi.MultiTableHeaderUI"
+    , "javax.swing.plaf.multi.MultiTableUI"
+    , "javax.swing.plaf.multi.MultiTextUI"
+    , "javax.swing.plaf.multi.MultiToolBarUI"
+    , "javax.swing.plaf.multi.MultiToolTipUI"
+    , "javax.swing.plaf.multi.MultiTreeUI"
+    , "javax.swing.plaf.multi.MultiViewportUI"
+    , "javax.swing.plaf.synth.ColorType"
+    , "javax.swing.plaf.synth.Region"
+    , "javax.swing.plaf.synth.SynthConstants"
+    , "javax.swing.plaf.synth.SynthContext"
+    , "javax.swing.plaf.synth.SynthGraphicsUtils"
+    , "javax.swing.plaf.synth.SynthLookAndFeel"
+    , "javax.swing.plaf.synth.SynthPainter"
+    , "javax.swing.plaf.synth.SynthStyle"
+    , "javax.swing.plaf.synth.SynthStyleFactory"
+    , "javax.swing.table.AbstractTableModel"
+    , "javax.swing.table.DefaultTableCellRenderer"
+    , "javax.swing.table.DefaultTableCellRenderer$UIResource"
+    , "javax.swing.table.DefaultTableColumnModel"
+    , "javax.swing.table.DefaultTableModel"
+    , "javax.swing.table.JTableHeader"
+    , "javax.swing.table.TableCellEditor"
+    , "javax.swing.table.TableCellRenderer"
+    , "javax.swing.table.TableColumn"
+    , "javax.swing.table.TableColumnModel"
+    , "javax.swing.table.TableModel"
+    , "javax.swing.table.TableRowSorter"
+    , "javax.swing.table.TableStringConverter"
+    , "javax.swing.text.AbstractDocument"
+    , "javax.swing.text.AbstractDocument$AttributeContext"
+    , "javax.swing.text.AbstractDocument$Content"
+    , "javax.swing.text.AbstractDocument$ElementEdit"
+    , "javax.swing.text.AbstractWriter"
+    , "javax.swing.text.AsyncBoxView"
+    , "javax.swing.text.AttributeSet"
+    , "javax.swing.text.AttributeSet$CharacterAttribute"
+    , "javax.swing.text.AttributeSet$ColorAttribute"
+    , "javax.swing.text.AttributeSet$FontAttribute"
+    , "javax.swing.text.AttributeSet$ParagraphAttribute"
+    , "javax.swing.text.BadLocationException"
+    , "javax.swing.text.BoxView"
+    , "javax.swing.text.Caret"
+    , "javax.swing.text.ChangedCharSetException"
+    , "javax.swing.text.ComponentView"
+    , "javax.swing.text.CompositeView"
+    , "javax.swing.text.DateFormatter"
+    , "javax.swing.text.DefaultCaret"
+    , "javax.swing.text.DefaultEditorKit"
+    , "javax.swing.text.DefaultEditorKit$BeepAction"
+    , "javax.swing.text.DefaultEditorKit$CopyAction"
+    , "javax.swing.text.DefaultEditorKit$CutAction"
+    , "javax.swing.text.DefaultEditorKit$DefaultKeyTypedAction"
+    , "javax.swing.text.DefaultEditorKit$InsertBreakAction"
+    , "javax.swing.text.DefaultEditorKit$InsertContentAction"
+    , "javax.swing.text.DefaultEditorKit$InsertTabAction"
+    , "javax.swing.text.DefaultEditorKit$PasteAction"
+    , "javax.swing.text.DefaultFormatter"
+    , "javax.swing.text.DefaultFormatterFactory"
+    , "javax.swing.text.DefaultHighlighter"
+    , "javax.swing.text.DefaultHighlighter$DefaultHighlightPainter"
+    , "javax.swing.text.DefaultStyledDocument"
+    , "javax.swing.text.DefaultStyledDocument$AttributeUndoableEdit"
+    , "javax.swing.text.DefaultStyledDocument$ElementSpec"
+    , "javax.swing.text.DefaultTextUI"
+    , "javax.swing.text.Document"
+    , "javax.swing.text.DocumentFilter"
+    , "javax.swing.text.DocumentFilter$FilterBypass"
+    , "javax.swing.text.EditorKit"
+    , "javax.swing.text.Element"
+    , "javax.swing.text.ElementIterator"
+    , "javax.swing.text.FieldView"
+    , "javax.swing.text.FlowView"
+    , "javax.swing.text.FlowView$FlowStrategy"
+    , "javax.swing.text.GapContent"
+    , "javax.swing.text.GlyphView"
+    , "javax.swing.text.GlyphView$GlyphPainter"
+    , "javax.swing.text.Highlighter"
+    , "javax.swing.text.Highlighter$Highlight"
+    , "javax.swing.text.Highlighter$HighlightPainter"
+    , "javax.swing.text.IconView"
+    , "javax.swing.text.InternationalFormatter"
+    , "javax.swing.text.JTextComponent"
+    , "javax.swing.text.JTextComponent$DropLocation"
+    , "javax.swing.text.JTextComponent$KeyBinding"
+    , "javax.swing.text.Keymap"
+    , "javax.swing.text.LabelView"
+    , "javax.swing.text.LayeredHighlighter"
+    , "javax.swing.text.LayeredHighlighter$LayerPainter"
+    , "javax.swing.text.LayoutQueue"
+    , "javax.swing.text.MaskFormatter"
+    , "javax.swing.text.MutableAttributeSet"
+    , "javax.swing.text.NavigationFilter"
+    , "javax.swing.text.NavigationFilter$FilterBypass"
+    , "javax.swing.text.NumberFormatter"
+    , "javax.swing.text.ParagraphView"
+    , "javax.swing.text.PasswordView"
+    , "javax.swing.text.PlainDocument"
+    , "javax.swing.text.PlainView"
+    , "javax.swing.text.Position"
+    , "javax.swing.text.Position$Bias"
+    , "javax.swing.text.Segment"
+    , "javax.swing.text.SimpleAttributeSet"
+    , "javax.swing.text.StringContent"
+    , "javax.swing.text.Style"
+    , "javax.swing.text.StyleConstants"
+    , "javax.swing.text.StyleConstants$CharacterConstants"
+    , "javax.swing.text.StyleConstants$ColorConstants"
+    , "javax.swing.text.StyleConstants$FontConstants"
+    , "javax.swing.text.StyleConstants$ParagraphConstants"
+    , "javax.swing.text.StyleContext"
+    , "javax.swing.text.StyledDocument"
+    , "javax.swing.text.StyledEditorKit"
+    , "javax.swing.text.StyledEditorKit$AlignmentAction"
+    , "javax.swing.text.StyledEditorKit$BoldAction"
+    , "javax.swing.text.StyledEditorKit$FontFamilyAction"
+    , "javax.swing.text.StyledEditorKit$FontSizeAction"
+    , "javax.swing.text.StyledEditorKit$ForegroundAction"
+    , "javax.swing.text.StyledEditorKit$ItalicAction"
+    , "javax.swing.text.StyledEditorKit$StyledTextAction"
+    , "javax.swing.text.StyledEditorKit$UnderlineAction"
+    , "javax.swing.text.TabExpander"
+    , "javax.swing.text.TabSet"
+    , "javax.swing.text.TabStop"
+    , "javax.swing.text.TabableView"
+    , "javax.swing.text.TableView"
+    , "javax.swing.text.TextAction"
+    , "javax.swing.text.Utilities"
+    , "javax.swing.text.View"
+    , "javax.swing.text.ViewFactory"
+    , "javax.swing.text.WrappedPlainView"
+    , "javax.swing.text.ZoneView"
+    , "javax.swing.text.html.BlockView"
+    , "javax.swing.text.html.CSS"
+    , "javax.swing.text.html.CSS$Attribute"
+    , "javax.swing.text.html.FormSubmitEvent"
+    , "javax.swing.text.html.FormSubmitEvent$MethodType"
+    , "javax.swing.text.html.FormView"
+    , "javax.swing.text.html.HTML"
+    , "javax.swing.text.html.HTML$Attribute"
+    , "javax.swing.text.html.HTML$Tag"
+    , "javax.swing.text.html.HTML$UnknownTag"
+    , "javax.swing.text.html.HTMLDocument"
+    , "javax.swing.text.html.HTMLDocument$Iterator"
+    , "javax.swing.text.html.HTMLEditorKit"
+    , "javax.swing.text.html.HTMLEditorKit$HTMLFactory"
+    , "javax.swing.text.html.HTMLEditorKit$HTMLTextAction"
+    , "javax.swing.text.html.HTMLEditorKit$InsertHTMLTextAction"
+    , "javax.swing.text.html.HTMLEditorKit$LinkController"
+    , "javax.swing.text.html.HTMLEditorKit$Parser"
+    , "javax.swing.text.html.HTMLEditorKit$ParserCallback"
+    , "javax.swing.text.html.HTMLFrameHyperlinkEvent"
+    , "javax.swing.text.html.HTMLWriter"
+    , "javax.swing.text.html.ImageView"
+    , "javax.swing.text.html.InlineView"
+    , "javax.swing.text.html.ListView"
+    , "javax.swing.text.html.MinimalHTMLWriter"
+    , "javax.swing.text.html.ObjectView"
+    , "javax.swing.text.html.Option"
+    , "javax.swing.text.html.ParagraphView"
+    , "javax.swing.text.html.StyleSheet"
+    , "javax.swing.text.html.StyleSheet$BoxPainter"
+    , "javax.swing.text.html.StyleSheet$ListPainter"
+    , "javax.swing.text.html.parser.AttributeList"
+    , "javax.swing.text.html.parser.ContentModel"
+    , "javax.swing.text.html.parser.DTD"
+    , "javax.swing.text.html.parser.DTDConstants"
+    , "javax.swing.text.html.parser.DocumentParser"
+    , "javax.swing.text.html.parser.Element"
+    , "javax.swing.text.html.parser.Entity"
+    , "javax.swing.text.html.parser.Parser"
+    , "javax.swing.text.html.parser.ParserDelegator"
+    , "javax.swing.text.html.parser.TagElement"
+    , "javax.swing.text.rtf.RTFEditorKit"
+    , "javax.swing.tree.AbstractLayoutCache"
+    , "javax.swing.tree.AbstractLayoutCache$NodeDimensions"
+    , "javax.swing.tree.DefaultMutableTreeNode"
+    , "javax.swing.tree.DefaultTreeCellEditor"
+    , "javax.swing.tree.DefaultTreeCellRenderer"
+    , "javax.swing.tree.DefaultTreeModel"
+    , "javax.swing.tree.DefaultTreeSelectionModel"
+    , "javax.swing.tree.ExpandVetoException"
+    , "javax.swing.tree.FixedHeightLayoutCache"
+    , "javax.swing.tree.MutableTreeNode"
+    , "javax.swing.tree.RowMapper"
+    , "javax.swing.tree.TreeCellEditor"
+    , "javax.swing.tree.TreeCellRenderer"
+    , "javax.swing.tree.TreeModel"
+    , "javax.swing.tree.TreeNode"
+    , "javax.swing.tree.TreePath"
+    , "javax.swing.tree.TreeSelectionModel"
+    , "javax.swing.tree.VariableHeightLayoutCache"
+    , "javax.swing.undo.AbstractUndoableEdit"
+    , "javax.swing.undo.CannotRedoException"
+    , "javax.swing.undo.CannotUndoException"
+    , "javax.swing.undo.CompoundEdit"
+    , "javax.swing.undo.StateEdit"
+    , "javax.swing.undo.StateEditable"
+    , "javax.swing.undo.UndoManager"
+    , "javax.swing.undo.UndoableEdit"
+    , "javax.swing.undo.UndoableEditSupport"
+    , "javax.tools.Diagnostic"
+    , "javax.tools.Diagnostic$Kind"
+    , "javax.tools.DiagnosticCollector"
+    , "javax.tools.DiagnosticListener"
+    , "javax.tools.FileObject"
+    , "javax.tools.ForwardingFileObject"
+    , "javax.tools.ForwardingJavaFileManager"
+    , "javax.tools.ForwardingJavaFileObject"
+    , "javax.tools.JavaCompiler"
+    , "javax.tools.JavaCompiler$CompilationTask"
+    , "javax.tools.JavaFileManager"
+    , "javax.tools.JavaFileManager$Location"
+    , "javax.tools.JavaFileObject"
+    , "javax.tools.JavaFileObject$Kind"
+    , "javax.tools.OptionChecker"
+    , "javax.tools.SimpleJavaFileObject"
+    , "javax.tools.StandardJavaFileManager"
+    , "javax.tools.StandardLocation"
+    , "javax.tools.Tool"
+    , "javax.tools.ToolProvider"
+    , "javax.transaction.InvalidTransactionException"
+    , "javax.transaction.TransactionRequiredException"
+    , "javax.transaction.TransactionRolledbackException"
+    , "javax.transaction.xa.XAException"
+    , "javax.transaction.xa.XAResource"
+    , "javax.transaction.xa.Xid"
+    , "javax.xml.XMLConstants"
+    , "javax.xml.bind.Binder"
+    , "javax.xml.bind.DataBindingException"
+    , "javax.xml.bind.DatatypeConverter"
+    , "javax.xml.bind.DatatypeConverterInterface"
+    , "javax.xml.bind.Element"
+    , "javax.xml.bind.JAXB"
+    , "javax.xml.bind.JAXBContext"
+    , "javax.xml.bind.JAXBElement"
+    , "javax.xml.bind.JAXBElement$GlobalScope"
+    , "javax.xml.bind.JAXBException"
+    , "javax.xml.bind.JAXBIntrospector"
+    , "javax.xml.bind.MarshalException"
+    , "javax.xml.bind.Marshaller"
+    , "javax.xml.bind.Marshaller$Listener"
+    , "javax.xml.bind.NotIdentifiableEvent"
+    , "javax.xml.bind.ParseConversionEvent"
+    , "javax.xml.bind.PrintConversionEvent"
+    , "javax.xml.bind.PropertyException"
+    , "javax.xml.bind.SchemaOutputResolver"
+    , "javax.xml.bind.TypeConstraintException"
+    , "javax.xml.bind.UnmarshalException"
+    , "javax.xml.bind.Unmarshaller"
+    , "javax.xml.bind.Unmarshaller$Listener"
+    , "javax.xml.bind.UnmarshallerHandler"
+    , "javax.xml.bind.ValidationEvent"
+    , "javax.xml.bind.ValidationEventHandler"
+    , "javax.xml.bind.ValidationEventLocator"
+    , "javax.xml.bind.ValidationException"
+    , "javax.xml.bind.Validator"
+    , "javax.xml.bind.annotation.DomHandler"
+    , "javax.xml.bind.annotation.W3CDomHandler"
+    , "javax.xml.bind.annotation.XmlAccessOrder"
+    , "javax.xml.bind.annotation.XmlAccessType"
+    , "javax.xml.bind.annotation.XmlAccessorOrder"
+    , "javax.xml.bind.annotation.XmlAccessorType"
+    , "javax.xml.bind.annotation.XmlAnyAttribute"
+    , "javax.xml.bind.annotation.XmlAnyElement"
+    , "javax.xml.bind.annotation.XmlAttachmentRef"
+    , "javax.xml.bind.annotation.XmlAttribute"
+    , "javax.xml.bind.annotation.XmlElement"
+    , "javax.xml.bind.annotation.XmlElement$DEFAULT"
+    , "javax.xml.bind.annotation.XmlElementDecl"
+    , "javax.xml.bind.annotation.XmlElementDecl$GLOBAL"
+    , "javax.xml.bind.annotation.XmlElementRef"
+    , "javax.xml.bind.annotation.XmlElementRef$DEFAULT"
+    , "javax.xml.bind.annotation.XmlElementRefs"
+    , "javax.xml.bind.annotation.XmlElementWrapper"
+    , "javax.xml.bind.annotation.XmlElements"
+    , "javax.xml.bind.annotation.XmlEnum"
+    , "javax.xml.bind.annotation.XmlEnumValue"
+    , "javax.xml.bind.annotation.XmlID"
+    , "javax.xml.bind.annotation.XmlIDREF"
+    , "javax.xml.bind.annotation.XmlInlineBinaryData"
+    , "javax.xml.bind.annotation.XmlList"
+    , "javax.xml.bind.annotation.XmlMimeType"
+    , "javax.xml.bind.annotation.XmlMixed"
+    , "javax.xml.bind.annotation.XmlNs"
+    , "javax.xml.bind.annotation.XmlNsForm"
+    , "javax.xml.bind.annotation.XmlRegistry"
+    , "javax.xml.bind.annotation.XmlRootElement"
+    , "javax.xml.bind.annotation.XmlSchema"
+    , "javax.xml.bind.annotation.XmlSchemaType"
+    , "javax.xml.bind.annotation.XmlSchemaType$DEFAULT"
+    , "javax.xml.bind.annotation.XmlSchemaTypes"
+    , "javax.xml.bind.annotation.XmlSeeAlso"
+    , "javax.xml.bind.annotation.XmlTransient"
+    , "javax.xml.bind.annotation.XmlType"
+    , "javax.xml.bind.annotation.XmlType$DEFAULT"
+    , "javax.xml.bind.annotation.XmlValue"
+    , "javax.xml.bind.annotation.adapters.CollapsedStringAdapter"
+    , "javax.xml.bind.annotation.adapters.HexBinaryAdapter"
+    , "javax.xml.bind.annotation.adapters.NormalizedStringAdapter"
+    , "javax.xml.bind.annotation.adapters.XmlAdapter"
+    , "javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter"
+    , "javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter$DEFAULT"
+    , "javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters"
+    , "javax.xml.bind.attachment.AttachmentMarshaller"
+    , "javax.xml.bind.attachment.AttachmentUnmarshaller"
+    , "javax.xml.bind.helpers.AbstractMarshallerImpl"
+    , "javax.xml.bind.helpers.AbstractUnmarshallerImpl"
+    , "javax.xml.bind.helpers.DefaultValidationEventHandler"
+    , "javax.xml.bind.helpers.NotIdentifiableEventImpl"
+    , "javax.xml.bind.helpers.ParseConversionEventImpl"
+    , "javax.xml.bind.helpers.PrintConversionEventImpl"
+    , "javax.xml.bind.helpers.ValidationEventImpl"
+    , "javax.xml.bind.helpers.ValidationEventLocatorImpl"
+    , "javax.xml.bind.util.JAXBResult"
+    , "javax.xml.bind.util.JAXBSource"
+    , "javax.xml.bind.util.ValidationEventCollector"
+    , "javax.xml.crypto.AlgorithmMethod"
+    , "javax.xml.crypto.Data"
+    , "javax.xml.crypto.KeySelector"
+    , "javax.xml.crypto.KeySelector$Purpose"
+    , "javax.xml.crypto.KeySelectorException"
+    , "javax.xml.crypto.KeySelectorResult"
+    , "javax.xml.crypto.MarshalException"
+    , "javax.xml.crypto.NoSuchMechanismException"
+    , "javax.xml.crypto.NodeSetData"
+    , "javax.xml.crypto.OctetStreamData"
+    , "javax.xml.crypto.URIDereferencer"
+    , "javax.xml.crypto.URIReference"
+    , "javax.xml.crypto.URIReferenceException"
+    , "javax.xml.crypto.XMLCryptoContext"
+    , "javax.xml.crypto.XMLStructure"
+    , "javax.xml.crypto.dom.DOMCryptoContext"
+    , "javax.xml.crypto.dom.DOMStructure"
+    , "javax.xml.crypto.dom.DOMURIReference"
+    , "javax.xml.crypto.dsig.CanonicalizationMethod"
+    , "javax.xml.crypto.dsig.DigestMethod"
+    , "javax.xml.crypto.dsig.Manifest"
+    , "javax.xml.crypto.dsig.Reference"
+    , "javax.xml.crypto.dsig.SignatureMethod"
+    , "javax.xml.crypto.dsig.SignatureProperties"
+    , "javax.xml.crypto.dsig.SignatureProperty"
+    , "javax.xml.crypto.dsig.SignedInfo"
+    , "javax.xml.crypto.dsig.Transform"
+    , "javax.xml.crypto.dsig.TransformException"
+    , "javax.xml.crypto.dsig.TransformService"
+    , "javax.xml.crypto.dsig.XMLObject"
+    , "javax.xml.crypto.dsig.XMLSignContext"
+    , "javax.xml.crypto.dsig.XMLSignature"
+    , "javax.xml.crypto.dsig.XMLSignature$SignatureValue"
+    , "javax.xml.crypto.dsig.XMLSignatureException"
+    , "javax.xml.crypto.dsig.XMLSignatureFactory"
+    , "javax.xml.crypto.dsig.XMLValidateContext"
+    , "javax.xml.crypto.dsig.dom.DOMSignContext"
+    , "javax.xml.crypto.dsig.dom.DOMValidateContext"
+    , "javax.xml.crypto.dsig.keyinfo.KeyInfo"
+    , "javax.xml.crypto.dsig.keyinfo.KeyInfoFactory"
+    , "javax.xml.crypto.dsig.keyinfo.KeyName"
+    , "javax.xml.crypto.dsig.keyinfo.KeyValue"
+    , "javax.xml.crypto.dsig.keyinfo.PGPData"
+    , "javax.xml.crypto.dsig.keyinfo.RetrievalMethod"
+    , "javax.xml.crypto.dsig.keyinfo.X509Data"
+    , "javax.xml.crypto.dsig.keyinfo.X509IssuerSerial"
+    , "javax.xml.crypto.dsig.spec.C14NMethodParameterSpec"
+    , "javax.xml.crypto.dsig.spec.DigestMethodParameterSpec"
+    , "javax.xml.crypto.dsig.spec.ExcC14NParameterSpec"
+    , "javax.xml.crypto.dsig.spec.HMACParameterSpec"
+    , "javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec"
+    , "javax.xml.crypto.dsig.spec.TransformParameterSpec"
+    , "javax.xml.crypto.dsig.spec.XPathFilter2ParameterSpec"
+    , "javax.xml.crypto.dsig.spec.XPathFilterParameterSpec"
+    , "javax.xml.crypto.dsig.spec.XPathType"
+    , "javax.xml.crypto.dsig.spec.XPathType$Filter"
+    , "javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec"
+    , "javax.xml.datatype.DatatypeConfigurationException"
+    , "javax.xml.datatype.DatatypeConstants"
+    , "javax.xml.datatype.DatatypeConstants$Field"
+    , "javax.xml.datatype.DatatypeFactory"
+    , "javax.xml.datatype.Duration"
+    , "javax.xml.datatype.XMLGregorianCalendar"
+    , "javax.xml.namespace.NamespaceContext"
+    , "javax.xml.namespace.QName"
+    , "javax.xml.parsers.DocumentBuilder"
+    , "javax.xml.parsers.DocumentBuilderFactory"
+    , "javax.xml.parsers.FactoryConfigurationError"
+    , "javax.xml.parsers.ParserConfigurationException"
+    , "javax.xml.parsers.SAXParser"
+    , "javax.xml.parsers.SAXParserFactory"
+    , "javax.xml.soap.AttachmentPart"
+    , "javax.xml.soap.Detail"
+    , "javax.xml.soap.DetailEntry"
+    , "javax.xml.soap.MessageFactory"
+    , "javax.xml.soap.MimeHeader"
+    , "javax.xml.soap.MimeHeaders"
+    , "javax.xml.soap.Name"
+    , "javax.xml.soap.Node"
+    , "javax.xml.soap.SAAJMetaFactory"
+    , "javax.xml.soap.SAAJResult"
+    , "javax.xml.soap.SOAPBody"
+    , "javax.xml.soap.SOAPBodyElement"
+    , "javax.xml.soap.SOAPConnection"
+    , "javax.xml.soap.SOAPConnectionFactory"
+    , "javax.xml.soap.SOAPConstants"
+    , "javax.xml.soap.SOAPElement"
+    , "javax.xml.soap.SOAPElementFactory"
+    , "javax.xml.soap.SOAPEnvelope"
+    , "javax.xml.soap.SOAPException"
+    , "javax.xml.soap.SOAPFactory"
+    , "javax.xml.soap.SOAPFault"
+    , "javax.xml.soap.SOAPFaultElement"
+    , "javax.xml.soap.SOAPHeader"
+    , "javax.xml.soap.SOAPHeaderElement"
+    , "javax.xml.soap.SOAPMessage"
+    , "javax.xml.soap.SOAPPart"
+    , "javax.xml.soap.Text"
+    , "javax.xml.stream.EventFilter"
+    , "javax.xml.stream.FactoryConfigurationError"
+    , "javax.xml.stream.Location"
+    , "javax.xml.stream.StreamFilter"
+    , "javax.xml.stream.XMLEventFactory"
+    , "javax.xml.stream.XMLEventReader"
+    , "javax.xml.stream.XMLEventWriter"
+    , "javax.xml.stream.XMLInputFactory"
+    , "javax.xml.stream.XMLOutputFactory"
+    , "javax.xml.stream.XMLReporter"
+    , "javax.xml.stream.XMLResolver"
+    , "javax.xml.stream.XMLStreamConstants"
+    , "javax.xml.stream.XMLStreamException"
+    , "javax.xml.stream.XMLStreamReader"
+    , "javax.xml.stream.XMLStreamWriter"
+    , "javax.xml.stream.events.Attribute"
+    , "javax.xml.stream.events.Characters"
+    , "javax.xml.stream.events.Comment"
+    , "javax.xml.stream.events.DTD"
+    , "javax.xml.stream.events.EndDocument"
+    , "javax.xml.stream.events.EndElement"
+    , "javax.xml.stream.events.EntityDeclaration"
+    , "javax.xml.stream.events.EntityReference"
+    , "javax.xml.stream.events.Namespace"
+    , "javax.xml.stream.events.NotationDeclaration"
+    , "javax.xml.stream.events.ProcessingInstruction"
+    , "javax.xml.stream.events.StartDocument"
+    , "javax.xml.stream.events.StartElement"
+    , "javax.xml.stream.events.XMLEvent"
+    , "javax.xml.stream.util.EventReaderDelegate"
+    , "javax.xml.stream.util.StreamReaderDelegate"
+    , "javax.xml.stream.util.XMLEventAllocator"
+    , "javax.xml.stream.util.XMLEventConsumer"
+    , "javax.xml.transform.ErrorListener"
+    , "javax.xml.transform.OutputKeys"
+    , "javax.xml.transform.Result"
+    , "javax.xml.transform.Source"
+    , "javax.xml.transform.SourceLocator"
+    , "javax.xml.transform.Templates"
+    , "javax.xml.transform.Transformer"
+    , "javax.xml.transform.TransformerConfigurationException"
+    , "javax.xml.transform.TransformerException"
+    , "javax.xml.transform.TransformerFactory"
+    , "javax.xml.transform.TransformerFactoryConfigurationError"
+    , "javax.xml.transform.URIResolver"
+    , "javax.xml.transform.dom.DOMLocator"
+    , "javax.xml.transform.dom.DOMResult"
+    , "javax.xml.transform.dom.DOMSource"
+    , "javax.xml.transform.sax.SAXResult"
+    , "javax.xml.transform.sax.SAXSource"
+    , "javax.xml.transform.sax.SAXTransformerFactory"
+    , "javax.xml.transform.sax.TemplatesHandler"
+    , "javax.xml.transform.sax.TransformerHandler"
+    , "javax.xml.transform.stax.StAXResult"
+    , "javax.xml.transform.stax.StAXSource"
+    , "javax.xml.transform.stream.StreamResult"
+    , "javax.xml.transform.stream.StreamSource"
+    , "javax.xml.validation.Schema"
+    , "javax.xml.validation.SchemaFactory"
+    , "javax.xml.validation.SchemaFactoryLoader"
+    , "javax.xml.validation.TypeInfoProvider"
+    , "javax.xml.validation.Validator"
+    , "javax.xml.validation.ValidatorHandler"
+    , "javax.xml.ws.Action"
+    , "javax.xml.ws.AsyncHandler"
+    , "javax.xml.ws.Binding"
+    , "javax.xml.ws.BindingProvider"
+    , "javax.xml.ws.BindingType"
+    , "javax.xml.ws.Dispatch"
+    , "javax.xml.ws.Endpoint"
+    , "javax.xml.ws.EndpointReference"
+    , "javax.xml.ws.FaultAction"
+    , "javax.xml.ws.Holder"
+    , "javax.xml.ws.LogicalMessage"
+    , "javax.xml.ws.ProtocolException"
+    , "javax.xml.ws.Provider"
+    , "javax.xml.ws.RequestWrapper"
+    , "javax.xml.ws.RespectBinding"
+    , "javax.xml.ws.RespectBindingFeature"
+    , "javax.xml.ws.Response"
+    , "javax.xml.ws.ResponseWrapper"
+    , "javax.xml.ws.Service"
+    , "javax.xml.ws.Service$Mode"
+    , "javax.xml.ws.ServiceMode"
+    , "javax.xml.ws.WebEndpoint"
+    , "javax.xml.ws.WebFault"
+    , "javax.xml.ws.WebServiceClient"
+    , "javax.xml.ws.WebServiceContext"
+    , "javax.xml.ws.WebServiceException"
+    , "javax.xml.ws.WebServiceFeature"
+    , "javax.xml.ws.WebServicePermission"
+    , "javax.xml.ws.WebServiceProvider"
+    , "javax.xml.ws.WebServiceRef"
+    , "javax.xml.ws.WebServiceRefs"
+    , "javax.xml.ws.handler.Handler"
+    , "javax.xml.ws.handler.HandlerResolver"
+    , "javax.xml.ws.handler.LogicalHandler"
+    , "javax.xml.ws.handler.LogicalMessageContext"
+    , "javax.xml.ws.handler.MessageContext"
+    , "javax.xml.ws.handler.MessageContext$Scope"
+    , "javax.xml.ws.handler.PortInfo"
+    , "javax.xml.ws.handler.soap.SOAPHandler"
+    , "javax.xml.ws.handler.soap.SOAPMessageContext"
+    , "javax.xml.ws.http.HTTPBinding"
+    , "javax.xml.ws.http.HTTPException"
+    , "javax.xml.ws.soap.Addressing"
+    , "javax.xml.ws.soap.AddressingFeature"
+    , "javax.xml.ws.soap.MTOM"
+    , "javax.xml.ws.soap.MTOMFeature"
+    , "javax.xml.ws.soap.SOAPBinding"
+    , "javax.xml.ws.soap.SOAPFaultException"
+    , "javax.xml.ws.spi.Provider"
+    , "javax.xml.ws.spi.ServiceDelegate"
+    , "javax.xml.ws.spi.WebServiceFeatureAnnotation"
+    , "javax.xml.ws.wsaddressing.W3CEndpointReference"
+    , "javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder"
+    , "javax.xml.xpath.XPath"
+    , "javax.xml.xpath.XPathConstants"
+    , "javax.xml.xpath.XPathException"
+    , "javax.xml.xpath.XPathExpression"
+    , "javax.xml.xpath.XPathExpressionException"
+    , "javax.xml.xpath.XPathFactory"
+    , "javax.xml.xpath.XPathFactoryConfigurationException"
+    , "javax.xml.xpath.XPathFunction"
+    , "javax.xml.xpath.XPathFunctionException"
+    , "javax.xml.xpath.XPathFunctionResolver"
+    , "javax.xml.xpath.XPathVariableResolver"
+    , "org.ietf.jgss.ChannelBinding"
+    , "org.ietf.jgss.GSSContext"
+    , "org.ietf.jgss.GSSCredential"
+    , "org.ietf.jgss.GSSException"
+    , "org.ietf.jgss.GSSManager"
+    , "org.ietf.jgss.GSSName"
+    , "org.ietf.jgss.MessageProp"
+    , "org.ietf.jgss.Oid"
+    , "org.omg.CORBA.ACTIVITY_COMPLETED"
+    , "org.omg.CORBA.ACTIVITY_REQUIRED"
+    , "org.omg.CORBA.ARG_IN"
+    , "org.omg.CORBA.ARG_INOUT"
+    , "org.omg.CORBA.ARG_OUT"
+    , "org.omg.CORBA.Any"
+    , "org.omg.CORBA.AnyHolder"
+    , "org.omg.CORBA.AnySeqHelper"
+    , "org.omg.CORBA.AnySeqHolder"
+    , "org.omg.CORBA.BAD_CONTEXT"
+    , "org.omg.CORBA.BAD_INV_ORDER"
+    , "org.omg.CORBA.BAD_OPERATION"
+    , "org.omg.CORBA.BAD_PARAM"
+    , "org.omg.CORBA.BAD_POLICY"
+    , "org.omg.CORBA.BAD_POLICY_TYPE"
+    , "org.omg.CORBA.BAD_POLICY_VALUE"
+    , "org.omg.CORBA.BAD_QOS"
+    , "org.omg.CORBA.BAD_TYPECODE"
+    , "org.omg.CORBA.BooleanHolder"
+    , "org.omg.CORBA.BooleanSeqHelper"
+    , "org.omg.CORBA.BooleanSeqHolder"
+    , "org.omg.CORBA.Bounds"
+    , "org.omg.CORBA.ByteHolder"
+    , "org.omg.CORBA.CODESET_INCOMPATIBLE"
+    , "org.omg.CORBA.COMM_FAILURE"
+    , "org.omg.CORBA.CTX_RESTRICT_SCOPE"
+    , "org.omg.CORBA.CharHolder"
+    , "org.omg.CORBA.CharSeqHelper"
+    , "org.omg.CORBA.CharSeqHolder"
+    , "org.omg.CORBA.CompletionStatus"
+    , "org.omg.CORBA.CompletionStatusHelper"
+    , "org.omg.CORBA.Context"
+    , "org.omg.CORBA.ContextList"
+    , "org.omg.CORBA.Current"
+    , "org.omg.CORBA.CurrentHelper"
+    , "org.omg.CORBA.CurrentHolder"
+    , "org.omg.CORBA.CurrentOperations"
+    , "org.omg.CORBA.CustomMarshal"
+    , "org.omg.CORBA.DATA_CONVERSION"
+    , "org.omg.CORBA.DataInputStream"
+    , "org.omg.CORBA.DataOutputStream"
+    , "org.omg.CORBA.DefinitionKind"
+    , "org.omg.CORBA.DefinitionKindHelper"
+    , "org.omg.CORBA.DomainManager"
+    , "org.omg.CORBA.DomainManagerOperations"
+    , "org.omg.CORBA.DoubleHolder"
+    , "org.omg.CORBA.DoubleSeqHelper"
+    , "org.omg.CORBA.DoubleSeqHolder"
+    , "org.omg.CORBA.DynAny"
+    , "org.omg.CORBA.DynAnyPackage.Invalid"
+    , "org.omg.CORBA.DynAnyPackage.InvalidSeq"
+    , "org.omg.CORBA.DynAnyPackage.InvalidValue"
+    , "org.omg.CORBA.DynAnyPackage.TypeMismatch"
+    , "org.omg.CORBA.DynArray"
+    , "org.omg.CORBA.DynEnum"
+    , "org.omg.CORBA.DynFixed"
+    , "org.omg.CORBA.DynSequence"
+    , "org.omg.CORBA.DynStruct"
+    , "org.omg.CORBA.DynUnion"
+    , "org.omg.CORBA.DynValue"
+    , "org.omg.CORBA.DynamicImplementation"
+    , "org.omg.CORBA.Environment"
+    , "org.omg.CORBA.ExceptionList"
+    , "org.omg.CORBA.FREE_MEM"
+    , "org.omg.CORBA.FieldNameHelper"
+    , "org.omg.CORBA.FixedHolder"
+    , "org.omg.CORBA.FloatHolder"
+    , "org.omg.CORBA.FloatSeqHelper"
+    , "org.omg.CORBA.FloatSeqHolder"
+    , "org.omg.CORBA.IDLType"
+    , "org.omg.CORBA.IDLTypeHelper"
+    , "org.omg.CORBA.IDLTypeOperations"
+    , "org.omg.CORBA.IMP_LIMIT"
+    , "org.omg.CORBA.INITIALIZE"
+    , "org.omg.CORBA.INTERNAL"
+    , "org.omg.CORBA.INTF_REPOS"
+    , "org.omg.CORBA.INVALID_ACTIVITY"
+    , "org.omg.CORBA.INVALID_TRANSACTION"
+    , "org.omg.CORBA.INV_FLAG"
+    , "org.omg.CORBA.INV_IDENT"
+    , "org.omg.CORBA.INV_OBJREF"
+    , "org.omg.CORBA.INV_POLICY"
+    , "org.omg.CORBA.IRObject"
+    , "org.omg.CORBA.IRObjectOperations"
+    , "org.omg.CORBA.IdentifierHelper"
+    , "org.omg.CORBA.IntHolder"
+    , "org.omg.CORBA.LocalObject"
+    , "org.omg.CORBA.LongHolder"
+    , "org.omg.CORBA.LongLongSeqHelper"
+    , "org.omg.CORBA.LongLongSeqHolder"
+    , "org.omg.CORBA.LongSeqHelper"
+    , "org.omg.CORBA.LongSeqHolder"
+    , "org.omg.CORBA.MARSHAL"
+    , "org.omg.CORBA.NO_IMPLEMENT"
+    , "org.omg.CORBA.NO_MEMORY"
+    , "org.omg.CORBA.NO_PERMISSION"
+    , "org.omg.CORBA.NO_RESOURCES"
+    , "org.omg.CORBA.NO_RESPONSE"
+    , "org.omg.CORBA.NVList"
+    , "org.omg.CORBA.NameValuePair"
+    , "org.omg.CORBA.NameValuePairHelper"
+    , "org.omg.CORBA.NamedValue"
+    , "org.omg.CORBA.OBJECT_NOT_EXIST"
+    , "org.omg.CORBA.OBJ_ADAPTER"
+    , "org.omg.CORBA.OMGVMCID"
+    , "org.omg.CORBA.ORB"
+    , "org.omg.CORBA.ORBPackage.InconsistentTypeCode"
+    , "org.omg.CORBA.ORBPackage.InvalidName"
+    , "org.omg.CORBA.Object"
+    , "org.omg.CORBA.ObjectHelper"
+    , "org.omg.CORBA.ObjectHolder"
+    , "org.omg.CORBA.OctetSeqHelper"
+    , "org.omg.CORBA.OctetSeqHolder"
+    , "org.omg.CORBA.PERSIST_STORE"
+    , "org.omg.CORBA.PRIVATE_MEMBER"
+    , "org.omg.CORBA.PUBLIC_MEMBER"
+    , "org.omg.CORBA.ParameterMode"
+    , "org.omg.CORBA.ParameterModeHelper"
+    , "org.omg.CORBA.ParameterModeHolder"
+    , "org.omg.CORBA.Policy"
+    , "org.omg.CORBA.PolicyError"
+    , "org.omg.CORBA.PolicyErrorCodeHelper"
+    , "org.omg.CORBA.PolicyErrorHelper"
+    , "org.omg.CORBA.PolicyErrorHolder"
+    , "org.omg.CORBA.PolicyHelper"
+    , "org.omg.CORBA.PolicyHolder"
+    , "org.omg.CORBA.PolicyListHelper"
+    , "org.omg.CORBA.PolicyListHolder"
+    , "org.omg.CORBA.PolicyOperations"
+    , "org.omg.CORBA.PolicyTypeHelper"
+    , "org.omg.CORBA.Principal"
+    , "org.omg.CORBA.PrincipalHolder"
+    , "org.omg.CORBA.REBIND"
+    , "org.omg.CORBA.RepositoryIdHelper"
+    , "org.omg.CORBA.Request"
+    , "org.omg.CORBA.ServerRequest"
+    , "org.omg.CORBA.ServiceDetail"
+    , "org.omg.CORBA.ServiceDetailHelper"
+    , "org.omg.CORBA.ServiceInformation"
+    , "org.omg.CORBA.ServiceInformationHelper"
+    , "org.omg.CORBA.ServiceInformationHolder"
+    , "org.omg.CORBA.SetOverrideType"
+    , "org.omg.CORBA.SetOverrideTypeHelper"
+    , "org.omg.CORBA.ShortHolder"
+    , "org.omg.CORBA.ShortSeqHelper"
+    , "org.omg.CORBA.ShortSeqHolder"
+    , "org.omg.CORBA.StringHolder"
+    , "org.omg.CORBA.StringSeqHelper"
+    , "org.omg.CORBA.StringSeqHolder"
+    , "org.omg.CORBA.StringValueHelper"
+    , "org.omg.CORBA.StructMember"
+    , "org.omg.CORBA.StructMemberHelper"
+    , "org.omg.CORBA.SystemException"
+    , "org.omg.CORBA.TCKind"
+    , "org.omg.CORBA.TIMEOUT"
+    , "org.omg.CORBA.TRANSACTION_MODE"
+    , "org.omg.CORBA.TRANSACTION_REQUIRED"
+    , "org.omg.CORBA.TRANSACTION_ROLLEDBACK"
+    , "org.omg.CORBA.TRANSACTION_UNAVAILABLE"
+    , "org.omg.CORBA.TRANSIENT"
+    , "org.omg.CORBA.TypeCode"
+    , "org.omg.CORBA.TypeCodeHolder"
+    , "org.omg.CORBA.TypeCodePackage.BadKind"
+    , "org.omg.CORBA.TypeCodePackage.Bounds"
+    , "org.omg.CORBA.ULongLongSeqHelper"
+    , "org.omg.CORBA.ULongLongSeqHolder"
+    , "org.omg.CORBA.ULongSeqHelper"
+    , "org.omg.CORBA.ULongSeqHolder"
+    , "org.omg.CORBA.UNKNOWN"
+    , "org.omg.CORBA.UNSUPPORTED_POLICY"
+    , "org.omg.CORBA.UNSUPPORTED_POLICY_VALUE"
+    , "org.omg.CORBA.UShortSeqHelper"
+    , "org.omg.CORBA.UShortSeqHolder"
+    , "org.omg.CORBA.UnionMember"
+    , "org.omg.CORBA.UnionMemberHelper"
+    , "org.omg.CORBA.UnknownUserException"
+    , "org.omg.CORBA.UnknownUserExceptionHelper"
+    , "org.omg.CORBA.UnknownUserExceptionHolder"
+    , "org.omg.CORBA.UserException"
+    , "org.omg.CORBA.VM_ABSTRACT"
+    , "org.omg.CORBA.VM_CUSTOM"
+    , "org.omg.CORBA.VM_NONE"
+    , "org.omg.CORBA.VM_TRUNCATABLE"
+    , "org.omg.CORBA.ValueBaseHelper"
+    , "org.omg.CORBA.ValueBaseHolder"
+    , "org.omg.CORBA.ValueMember"
+    , "org.omg.CORBA.ValueMemberHelper"
+    , "org.omg.CORBA.VersionSpecHelper"
+    , "org.omg.CORBA.VisibilityHelper"
+    , "org.omg.CORBA.WCharSeqHelper"
+    , "org.omg.CORBA.WCharSeqHolder"
+    , "org.omg.CORBA.WStringSeqHelper"
+    , "org.omg.CORBA.WStringSeqHolder"
+    , "org.omg.CORBA.WStringValueHelper"
+    , "org.omg.CORBA.WrongTransaction"
+    , "org.omg.CORBA.WrongTransactionHelper"
+    , "org.omg.CORBA.WrongTransactionHolder"
+    , "org.omg.CORBA._IDLTypeStub"
+    , "org.omg.CORBA._PolicyStub"
+    , "org.omg.CORBA.portable.ApplicationException"
+    , "org.omg.CORBA.portable.BoxedValueHelper"
+    , "org.omg.CORBA.portable.CustomValue"
+    , "org.omg.CORBA.portable.Delegate"
+    , "org.omg.CORBA.portable.IDLEntity"
+    , "org.omg.CORBA.portable.IndirectionException"
+    , "org.omg.CORBA.portable.InputStream"
+    , "org.omg.CORBA.portable.InvokeHandler"
+    , "org.omg.CORBA.portable.ObjectImpl"
+    , "org.omg.CORBA.portable.OutputStream"
+    , "org.omg.CORBA.portable.RemarshalException"
+    , "org.omg.CORBA.portable.ResponseHandler"
+    , "org.omg.CORBA.portable.ServantObject"
+    , "org.omg.CORBA.portable.Streamable"
+    , "org.omg.CORBA.portable.StreamableValue"
+    , "org.omg.CORBA.portable.UnknownException"
+    , "org.omg.CORBA.portable.ValueBase"
+    , "org.omg.CORBA.portable.ValueFactory"
+    , "org.omg.CORBA.portable.ValueInputStream"
+    , "org.omg.CORBA.portable.ValueOutputStream"
+    , "org.omg.CORBA_2_3.ORB"
+    , "org.omg.CORBA_2_3.portable.Delegate"
+    , "org.omg.CORBA_2_3.portable.InputStream"
+    , "org.omg.CORBA_2_3.portable.ObjectImpl"
+    , "org.omg.CORBA_2_3.portable.OutputStream"
+    , "org.omg.CosNaming.Binding"
+    , "org.omg.CosNaming.BindingHelper"
+    , "org.omg.CosNaming.BindingHolder"
+    , "org.omg.CosNaming.BindingIterator"
+    , "org.omg.CosNaming.BindingIteratorHelper"
+    , "org.omg.CosNaming.BindingIteratorHolder"
+    , "org.omg.CosNaming.BindingIteratorOperations"
+    , "org.omg.CosNaming.BindingIteratorPOA"
+    , "org.omg.CosNaming.BindingListHelper"
+    , "org.omg.CosNaming.BindingListHolder"
+    , "org.omg.CosNaming.BindingType"
+    , "org.omg.CosNaming.BindingTypeHelper"
+    , "org.omg.CosNaming.BindingTypeHolder"
+    , "org.omg.CosNaming.IstringHelper"
+    , "org.omg.CosNaming.NameComponent"
+    , "org.omg.CosNaming.NameComponentHelper"
+    , "org.omg.CosNaming.NameComponentHolder"
+    , "org.omg.CosNaming.NameHelper"
+    , "org.omg.CosNaming.NameHolder"
+    , "org.omg.CosNaming.NamingContext"
+    , "org.omg.CosNaming.NamingContextExt"
+    , "org.omg.CosNaming.NamingContextExtHelper"
+    , "org.omg.CosNaming.NamingContextExtHolder"
+    , "org.omg.CosNaming.NamingContextExtOperations"
+    , "org.omg.CosNaming.NamingContextExtPOA"
+    , "org.omg.CosNaming.NamingContextExtPackage.AddressHelper"
+    , "org.omg.CosNaming.NamingContextExtPackage.InvalidAddress"
+    , "org.omg.CosNaming.NamingContextExtPackage.InvalidAddressHelper"
+    , "org.omg.CosNaming.NamingContextExtPackage.InvalidAddressHolder"
+    , "org.omg.CosNaming.NamingContextExtPackage.StringNameHelper"
+    , "org.omg.CosNaming.NamingContextExtPackage.URLStringHelper"
+    , "org.omg.CosNaming.NamingContextHelper"
+    , "org.omg.CosNaming.NamingContextHolder"
+    , "org.omg.CosNaming.NamingContextOperations"
+    , "org.omg.CosNaming.NamingContextPOA"
+    , "org.omg.CosNaming.NamingContextPackage.AlreadyBound"
+    , "org.omg.CosNaming.NamingContextPackage.AlreadyBoundHelper"
+    , "org.omg.CosNaming.NamingContextPackage.AlreadyBoundHolder"
+    , "org.omg.CosNaming.NamingContextPackage.CannotProceed"
+    , "org.omg.CosNaming.NamingContextPackage.CannotProceedHelper"
+    , "org.omg.CosNaming.NamingContextPackage.CannotProceedHolder"
+    , "org.omg.CosNaming.NamingContextPackage.InvalidName"
+    , "org.omg.CosNaming.NamingContextPackage.InvalidNameHelper"
+    , "org.omg.CosNaming.NamingContextPackage.InvalidNameHolder"
+    , "org.omg.CosNaming.NamingContextPackage.NotEmpty"
+    , "org.omg.CosNaming.NamingContextPackage.NotEmptyHelper"
+    , "org.omg.CosNaming.NamingContextPackage.NotEmptyHolder"
+    , "org.omg.CosNaming.NamingContextPackage.NotFound"
+    , "org.omg.CosNaming.NamingContextPackage.NotFoundHelper"
+    , "org.omg.CosNaming.NamingContextPackage.NotFoundHolder"
+    , "org.omg.CosNaming.NamingContextPackage.NotFoundReason"
+    , "org.omg.CosNaming.NamingContextPackage.NotFoundReasonHelper"
+    , "org.omg.CosNaming.NamingContextPackage.NotFoundReasonHolder"
+    , "org.omg.CosNaming._BindingIteratorImplBase"
+    , "org.omg.CosNaming._BindingIteratorStub"
+    , "org.omg.CosNaming._NamingContextExtStub"
+    , "org.omg.CosNaming._NamingContextImplBase"
+    , "org.omg.CosNaming._NamingContextStub"
+    , "org.omg.Dynamic.Parameter"
+    , "org.omg.DynamicAny.AnySeqHelper"
+    , "org.omg.DynamicAny.DynAny"
+    , "org.omg.DynamicAny.DynAnyFactory"
+    , "org.omg.DynamicAny.DynAnyFactoryHelper"
+    , "org.omg.DynamicAny.DynAnyFactoryOperations"
+    , "org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode"
+    , "org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCodeHelper"
+    , "org.omg.DynamicAny.DynAnyHelper"
+    , "org.omg.DynamicAny.DynAnyOperations"
+    , "org.omg.DynamicAny.DynAnyPackage.InvalidValue"
+    , "org.omg.DynamicAny.DynAnyPackage.InvalidValueHelper"
+    , "org.omg.DynamicAny.DynAnyPackage.TypeMismatch"
+    , "org.omg.DynamicAny.DynAnyPackage.TypeMismatchHelper"
+    , "org.omg.DynamicAny.DynAnySeqHelper"
+    , "org.omg.DynamicAny.DynArray"
+    , "org.omg.DynamicAny.DynArrayHelper"
+    , "org.omg.DynamicAny.DynArrayOperations"
+    , "org.omg.DynamicAny.DynEnum"
+    , "org.omg.DynamicAny.DynEnumHelper"
+    , "org.omg.DynamicAny.DynEnumOperations"
+    , "org.omg.DynamicAny.DynFixed"
+    , "org.omg.DynamicAny.DynFixedHelper"
+    , "org.omg.DynamicAny.DynFixedOperations"
+    , "org.omg.DynamicAny.DynSequence"
+    , "org.omg.DynamicAny.DynSequenceHelper"
+    , "org.omg.DynamicAny.DynSequenceOperations"
+    , "org.omg.DynamicAny.DynStruct"
+    , "org.omg.DynamicAny.DynStructHelper"
+    , "org.omg.DynamicAny.DynStructOperations"
+    , "org.omg.DynamicAny.DynUnion"
+    , "org.omg.DynamicAny.DynUnionHelper"
+    , "org.omg.DynamicAny.DynUnionOperations"
+    , "org.omg.DynamicAny.DynValue"
+    , "org.omg.DynamicAny.DynValueBox"
+    , "org.omg.DynamicAny.DynValueBoxOperations"
+    , "org.omg.DynamicAny.DynValueCommon"
+    , "org.omg.DynamicAny.DynValueCommonOperations"
+    , "org.omg.DynamicAny.DynValueHelper"
+    , "org.omg.DynamicAny.DynValueOperations"
+    , "org.omg.DynamicAny.FieldNameHelper"
+    , "org.omg.DynamicAny.NameDynAnyPair"
+    , "org.omg.DynamicAny.NameDynAnyPairHelper"
+    , "org.omg.DynamicAny.NameDynAnyPairSeqHelper"
+    , "org.omg.DynamicAny.NameValuePair"
+    , "org.omg.DynamicAny.NameValuePairHelper"
+    , "org.omg.DynamicAny.NameValuePairSeqHelper"
+    , "org.omg.DynamicAny._DynAnyFactoryStub"
+    , "org.omg.DynamicAny._DynAnyStub"
+    , "org.omg.DynamicAny._DynArrayStub"
+    , "org.omg.DynamicAny._DynEnumStub"
+    , "org.omg.DynamicAny._DynFixedStub"
+    , "org.omg.DynamicAny._DynSequenceStub"
+    , "org.omg.DynamicAny._DynStructStub"
+    , "org.omg.DynamicAny._DynUnionStub"
+    , "org.omg.DynamicAny._DynValueStub"
+    , "org.omg.IOP.CodeSets"
+    , "org.omg.IOP.Codec"
+    , "org.omg.IOP.CodecFactory"
+    , "org.omg.IOP.CodecFactoryHelper"
+    , "org.omg.IOP.CodecFactoryOperations"
+    , "org.omg.IOP.CodecFactoryPackage.UnknownEncoding"
+    , "org.omg.IOP.CodecFactoryPackage.UnknownEncodingHelper"
+    , "org.omg.IOP.CodecOperations"
+    , "org.omg.IOP.CodecPackage.FormatMismatch"
+    , "org.omg.IOP.CodecPackage.FormatMismatchHelper"
+    , "org.omg.IOP.CodecPackage.InvalidTypeForEncoding"
+    , "org.omg.IOP.CodecPackage.InvalidTypeForEncodingHelper"
+    , "org.omg.IOP.CodecPackage.TypeMismatch"
+    , "org.omg.IOP.CodecPackage.TypeMismatchHelper"
+    , "org.omg.IOP.ComponentIdHelper"
+    , "org.omg.IOP.ENCODING_CDR_ENCAPS"
+    , "org.omg.IOP.Encoding"
+    , "org.omg.IOP.ExceptionDetailMessage"
+    , "org.omg.IOP.IOR"
+    , "org.omg.IOP.IORHelper"
+    , "org.omg.IOP.IORHolder"
+    , "org.omg.IOP.MultipleComponentProfileHelper"
+    , "org.omg.IOP.MultipleComponentProfileHolder"
+    , "org.omg.IOP.ProfileIdHelper"
+    , "org.omg.IOP.RMICustomMaxStreamFormat"
+    , "org.omg.IOP.ServiceContext"
+    , "org.omg.IOP.ServiceContextHelper"
+    , "org.omg.IOP.ServiceContextHolder"
+    , "org.omg.IOP.ServiceContextListHelper"
+    , "org.omg.IOP.ServiceContextListHolder"
+    , "org.omg.IOP.ServiceIdHelper"
+    , "org.omg.IOP.TAG_ALTERNATE_IIOP_ADDRESS"
+    , "org.omg.IOP.TAG_CODE_SETS"
+    , "org.omg.IOP.TAG_INTERNET_IOP"
+    , "org.omg.IOP.TAG_JAVA_CODEBASE"
+    , "org.omg.IOP.TAG_MULTIPLE_COMPONENTS"
+    , "org.omg.IOP.TAG_ORB_TYPE"
+    , "org.omg.IOP.TAG_POLICIES"
+    , "org.omg.IOP.TAG_RMI_CUSTOM_MAX_STREAM_FORMAT"
+    , "org.omg.IOP.TaggedComponent"
+    , "org.omg.IOP.TaggedComponentHelper"
+    , "org.omg.IOP.TaggedComponentHolder"
+    , "org.omg.IOP.TaggedProfile"
+    , "org.omg.IOP.TaggedProfileHelper"
+    , "org.omg.IOP.TaggedProfileHolder"
+    , "org.omg.IOP.TransactionService"
+    , "org.omg.Messaging.SYNC_WITH_TRANSPORT"
+    , "org.omg.Messaging.SyncScopeHelper"
+    , "org.omg.PortableInterceptor.ACTIVE"
+    , "org.omg.PortableInterceptor.AdapterManagerIdHelper"
+    , "org.omg.PortableInterceptor.AdapterNameHelper"
+    , "org.omg.PortableInterceptor.AdapterStateHelper"
+    , "org.omg.PortableInterceptor.ClientRequestInfo"
+    , "org.omg.PortableInterceptor.ClientRequestInfoOperations"
+    , "org.omg.PortableInterceptor.ClientRequestInterceptor"
+    , "org.omg.PortableInterceptor.ClientRequestInterceptorOperations"
+    , "org.omg.PortableInterceptor.Current"
+    , "org.omg.PortableInterceptor.CurrentHelper"
+    , "org.omg.PortableInterceptor.CurrentOperations"
+    , "org.omg.PortableInterceptor.DISCARDING"
+    , "org.omg.PortableInterceptor.ForwardRequest"
+    , "org.omg.PortableInterceptor.ForwardRequestHelper"
+    , "org.omg.PortableInterceptor.HOLDING"
+    , "org.omg.PortableInterceptor.INACTIVE"
+    , "org.omg.PortableInterceptor.IORInfo"
+    , "org.omg.PortableInterceptor.IORInfoOperations"
+    , "org.omg.PortableInterceptor.IORInterceptor"
+    , "org.omg.PortableInterceptor.IORInterceptorOperations"
+    , "org.omg.PortableInterceptor.IORInterceptor_3_0"
+    , "org.omg.PortableInterceptor.IORInterceptor_3_0Helper"
+    , "org.omg.PortableInterceptor.IORInterceptor_3_0Holder"
+    , "org.omg.PortableInterceptor.IORInterceptor_3_0Operations"
+    , "org.omg.PortableInterceptor.Interceptor"
+    , "org.omg.PortableInterceptor.InterceptorOperations"
+    , "org.omg.PortableInterceptor.InvalidSlot"
+    , "org.omg.PortableInterceptor.InvalidSlotHelper"
+    , "org.omg.PortableInterceptor.LOCATION_FORWARD"
+    , "org.omg.PortableInterceptor.NON_EXISTENT"
+    , "org.omg.PortableInterceptor.ORBIdHelper"
+    , "org.omg.PortableInterceptor.ORBInitInfo"
+    , "org.omg.PortableInterceptor.ORBInitInfoOperations"
+    , "org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName"
+    , "org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateNameHelper"
+    , "org.omg.PortableInterceptor.ORBInitInfoPackage.InvalidName"
+    , "org.omg.PortableInterceptor.ORBInitInfoPackage.InvalidNameHelper"
+    , "org.omg.PortableInterceptor.ORBInitInfoPackage.ObjectIdHelper"
+    , "org.omg.PortableInterceptor.ORBInitializer"
+    , "org.omg.PortableInterceptor.ORBInitializerOperations"
+    , "org.omg.PortableInterceptor.ObjectIdHelper"
+    , "org.omg.PortableInterceptor.ObjectReferenceFactory"
+    , "org.omg.PortableInterceptor.ObjectReferenceFactoryHelper"
+    , "org.omg.PortableInterceptor.ObjectReferenceFactoryHolder"
+    , "org.omg.PortableInterceptor.ObjectReferenceTemplate"
+    , "org.omg.PortableInterceptor.ObjectReferenceTemplateHelper"
+    , "org.omg.PortableInterceptor.ObjectReferenceTemplateHolder"
+    , "org.omg.PortableInterceptor.ObjectReferenceTemplateSeqHelper"
+    , "org.omg.PortableInterceptor.ObjectReferenceTemplateSeqHolder"
+    , "org.omg.PortableInterceptor.PolicyFactory"
+    , "org.omg.PortableInterceptor.PolicyFactoryOperations"
+    , "org.omg.PortableInterceptor.RequestInfo"
+    , "org.omg.PortableInterceptor.RequestInfoOperations"
+    , "org.omg.PortableInterceptor.SUCCESSFUL"
+    , "org.omg.PortableInterceptor.SYSTEM_EXCEPTION"
+    , "org.omg.PortableInterceptor.ServerIdHelper"
+    , "org.omg.PortableInterceptor.ServerRequestInfo"
+    , "org.omg.PortableInterceptor.ServerRequestInfoOperations"
+    , "org.omg.PortableInterceptor.ServerRequestInterceptor"
+    , "org.omg.PortableInterceptor.ServerRequestInterceptorOperations"
+    , "org.omg.PortableInterceptor.TRANSPORT_RETRY"
+    , "org.omg.PortableInterceptor.UNKNOWN"
+    , "org.omg.PortableInterceptor.USER_EXCEPTION"
+    , "org.omg.PortableServer.AdapterActivator"
+    , "org.omg.PortableServer.AdapterActivatorOperations"
+    , "org.omg.PortableServer.Current"
+    , "org.omg.PortableServer.CurrentHelper"
+    , "org.omg.PortableServer.CurrentOperations"
+    , "org.omg.PortableServer.CurrentPackage.NoContext"
+    , "org.omg.PortableServer.CurrentPackage.NoContextHelper"
+    , "org.omg.PortableServer.DynamicImplementation"
+    , "org.omg.PortableServer.ForwardRequest"
+    , "org.omg.PortableServer.ForwardRequestHelper"
+    , "org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID"
+    , "org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID"
+    , "org.omg.PortableServer.IMPLICIT_ACTIVATION_POLICY_ID"
+    , "org.omg.PortableServer.IdAssignmentPolicy"
+    , "org.omg.PortableServer.IdAssignmentPolicyOperations"
+    , "org.omg.PortableServer.IdAssignmentPolicyValue"
+    , "org.omg.PortableServer.IdUniquenessPolicy"
+    , "org.omg.PortableServer.IdUniquenessPolicyOperations"
+    , "org.omg.PortableServer.IdUniquenessPolicyValue"
+    , "org.omg.PortableServer.ImplicitActivationPolicy"
+    , "org.omg.PortableServer.ImplicitActivationPolicyOperations"
+    , "org.omg.PortableServer.ImplicitActivationPolicyValue"
+    , "org.omg.PortableServer.LIFESPAN_POLICY_ID"
+    , "org.omg.PortableServer.LifespanPolicy"
+    , "org.omg.PortableServer.LifespanPolicyOperations"
+    , "org.omg.PortableServer.LifespanPolicyValue"
+    , "org.omg.PortableServer.POA"
+    , "org.omg.PortableServer.POAHelper"
+    , "org.omg.PortableServer.POAManager"
+    , "org.omg.PortableServer.POAManagerOperations"
+    , "org.omg.PortableServer.POAManagerPackage.AdapterInactive"
+    , "org.omg.PortableServer.POAManagerPackage.AdapterInactiveHelper"
+    , "org.omg.PortableServer.POAManagerPackage.State"
+    , "org.omg.PortableServer.POAOperations"
+    , "org.omg.PortableServer.POAPackage.AdapterAlreadyExists"
+    , "org.omg.PortableServer.POAPackage.AdapterAlreadyExistsHelper"
+    , "org.omg.PortableServer.POAPackage.AdapterNonExistent"
+    , "org.omg.PortableServer.POAPackage.AdapterNonExistentHelper"
+    , "org.omg.PortableServer.POAPackage.InvalidPolicy"
+    , "org.omg.PortableServer.POAPackage.InvalidPolicyHelper"
+    , "org.omg.PortableServer.POAPackage.NoServant"
+    , "org.omg.PortableServer.POAPackage.NoServantHelper"
+    , "org.omg.PortableServer.POAPackage.ObjectAlreadyActive"
+    , "org.omg.PortableServer.POAPackage.ObjectAlreadyActiveHelper"
+    , "org.omg.PortableServer.POAPackage.ObjectNotActive"
+    , "org.omg.PortableServer.POAPackage.ObjectNotActiveHelper"
+    , "org.omg.PortableServer.POAPackage.ServantAlreadyActive"
+    , "org.omg.PortableServer.POAPackage.ServantAlreadyActiveHelper"
+    , "org.omg.PortableServer.POAPackage.ServantNotActive"
+    , "org.omg.PortableServer.POAPackage.ServantNotActiveHelper"
+    , "org.omg.PortableServer.POAPackage.WrongAdapter"
+    , "org.omg.PortableServer.POAPackage.WrongAdapterHelper"
+    , "org.omg.PortableServer.POAPackage.WrongPolicy"
+    , "org.omg.PortableServer.POAPackage.WrongPolicyHelper"
+    , "org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID"
+    , "org.omg.PortableServer.RequestProcessingPolicy"
+    , "org.omg.PortableServer.RequestProcessingPolicyOperations"
+    , "org.omg.PortableServer.RequestProcessingPolicyValue"
+    , "org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID"
+    , "org.omg.PortableServer.Servant"
+    , "org.omg.PortableServer.ServantActivator"
+    , "org.omg.PortableServer.ServantActivatorHelper"
+    , "org.omg.PortableServer.ServantActivatorOperations"
+    , "org.omg.PortableServer.ServantActivatorPOA"
+    , "org.omg.PortableServer.ServantLocator"
+    , "org.omg.PortableServer.ServantLocatorHelper"
+    , "org.omg.PortableServer.ServantLocatorOperations"
+    , "org.omg.PortableServer.ServantLocatorPOA"
+    , "org.omg.PortableServer.ServantLocatorPackage.CookieHolder"
+    , "org.omg.PortableServer.ServantManager"
+    , "org.omg.PortableServer.ServantManagerOperations"
+    , "org.omg.PortableServer.ServantRetentionPolicy"
+    , "org.omg.PortableServer.ServantRetentionPolicyOperations"
+    , "org.omg.PortableServer.ServantRetentionPolicyValue"
+    , "org.omg.PortableServer.THREAD_POLICY_ID"
+    , "org.omg.PortableServer.ThreadPolicy"
+    , "org.omg.PortableServer.ThreadPolicyOperations"
+    , "org.omg.PortableServer.ThreadPolicyValue"
+    , "org.omg.PortableServer._ServantActivatorStub"
+    , "org.omg.PortableServer._ServantLocatorStub"
+    , "org.omg.PortableServer.portable.Delegate"
+    , "org.omg.SendingContext.RunTime"
+    , "org.omg.SendingContext.RunTimeOperations"
+    , "org.omg.stub.java.rmi._Remote_Stub"
+    , "org.w3c.dom.Attr"
+    , "org.w3c.dom.CDATASection"
+    , "org.w3c.dom.CharacterData"
+    , "org.w3c.dom.Comment"
+    , "org.w3c.dom.DOMConfiguration"
+    , "org.w3c.dom.DOMError"
+    , "org.w3c.dom.DOMErrorHandler"
+    , "org.w3c.dom.DOMException"
+    , "org.w3c.dom.DOMImplementation"
+    , "org.w3c.dom.DOMImplementationList"
+    , "org.w3c.dom.DOMImplementationSource"
+    , "org.w3c.dom.DOMLocator"
+    , "org.w3c.dom.DOMStringList"
+    , "org.w3c.dom.Document"
+    , "org.w3c.dom.DocumentFragment"
+    , "org.w3c.dom.DocumentType"
+    , "org.w3c.dom.Element"
+    , "org.w3c.dom.Entity"
+    , "org.w3c.dom.EntityReference"
+    , "org.w3c.dom.NameList"
+    , "org.w3c.dom.NamedNodeMap"
+    , "org.w3c.dom.Node"
+    , "org.w3c.dom.NodeList"
+    , "org.w3c.dom.Notation"
+    , "org.w3c.dom.ProcessingInstruction"
+    , "org.w3c.dom.Text"
+    , "org.w3c.dom.TypeInfo"
+    , "org.w3c.dom.UserDataHandler"
+    , "org.w3c.dom.bootstrap.DOMImplementationRegistry"
+    , "org.w3c.dom.events.DocumentEvent"
+    , "org.w3c.dom.events.Event"
+    , "org.w3c.dom.events.EventException"
+    , "org.w3c.dom.events.EventListener"
+    , "org.w3c.dom.events.EventTarget"
+    , "org.w3c.dom.events.MouseEvent"
+    , "org.w3c.dom.events.MutationEvent"
+    , "org.w3c.dom.events.UIEvent"
+    , "org.w3c.dom.ls.DOMImplementationLS"
+    , "org.w3c.dom.ls.LSException"
+    , "org.w3c.dom.ls.LSInput"
+    , "org.w3c.dom.ls.LSLoadEvent"
+    , "org.w3c.dom.ls.LSOutput"
+    , "org.w3c.dom.ls.LSParser"
+    , "org.w3c.dom.ls.LSParserFilter"
+    , "org.w3c.dom.ls.LSProgressEvent"
+    , "org.w3c.dom.ls.LSResourceResolver"
+    , "org.w3c.dom.ls.LSSerializer"
+    , "org.w3c.dom.ls.LSSerializerFilter"
+    , "org.xml.sax.AttributeList"
+    , "org.xml.sax.Attributes"
+    , "org.xml.sax.ContentHandler"
+    , "org.xml.sax.DTDHandler"
+    , "org.xml.sax.DocumentHandler"
+    , "org.xml.sax.EntityResolver"
+    , "org.xml.sax.ErrorHandler"
+    , "org.xml.sax.HandlerBase"
+    , "org.xml.sax.InputSource"
+    , "org.xml.sax.Locator"
+    , "org.xml.sax.Parser"
+    , "org.xml.sax.SAXException"
+    , "org.xml.sax.SAXNotRecognizedException"
+    , "org.xml.sax.SAXNotSupportedException"
+    , "org.xml.sax.SAXParseException"
+    , "org.xml.sax.XMLFilter"
+    , "org.xml.sax.XMLReader"
+    , "org.xml.sax.ext.Attributes2"
+    , "org.xml.sax.ext.Attributes2Impl"
+    , "org.xml.sax.ext.DeclHandler"
+    , "org.xml.sax.ext.DefaultHandler2"
+    , "org.xml.sax.ext.EntityResolver2"
+    , "org.xml.sax.ext.LexicalHandler"
+    , "org.xml.sax.ext.Locator2"
+    , "org.xml.sax.ext.Locator2Impl"
+    , "org.xml.sax.helpers.AttributeListImpl"
+    , "org.xml.sax.helpers.AttributesImpl"
+    , "org.xml.sax.helpers.DefaultHandler"
+    , "org.xml.sax.helpers.LocatorImpl"
+    , "org.xml.sax.helpers.NamespaceSupport"
+    , "org.xml.sax.helpers.ParserAdapter"
+    , "org.xml.sax.helpers.ParserFactory"
+    , "org.xml.sax.helpers.XMLFilterImpl"
+    , "org.xml.sax.helpers.XMLReaderAdapter"
+    , "org.xml.sax.helpers.XMLReaderFactory" ]
+
+
diff --git a/src/Main.hss b/src/Main.hss
new file mode 100644
--- /dev/null
+++ b/src/Main.hss
@@ -0,0 +1,141 @@
+{-# LANGUAGE Haskell2010 #-}
+{-# OPTIONS
+    -Wall
+    -fno-warn-missing-signatures
+    -fno-warn-name-shadowing
+ #-}
+
+module Main where
+
+import Options
+import JavaSE6
+import Java2Haskell
+
+import Foreign.Java.Utils
+import Foreign.Java.JNI (javaBridgeVersion)
+
+import System.Console.GetOpt
+import System.Environment (getArgs, getProgName)
+
+import Data.NamedRecord
+import Data.List
+import Data.List.Split
+import Data.Word
+
+
+versionInfo = """
+    Java <-> Haskell Bindings Generator (using java-bridge #{javaBridgeVersion})"""
+
+helpText = """
+    
+    """
+
+-- | The flags (needed for the options list / GetOpt).
+data Flag = Help
+          | Version
+          | Packages [String]
+          | Classpath [String]
+          | SearchDepth Word32
+          | TargetDirectory String
+          | SaveReflectDump String
+          | LoadReflectDump String
+          | CompleteSE6
+          | OnlyReflect
+          | Filtered
+          | Verbose
+
+-- | The Command line options as fed to the GetOpt parser.
+options = [
+    Option "h" ["help"] (NoArg Help)
+        "Print this help text.",
+
+    Option "V" ["version"] (NoArg Version)
+        "Print version information.",
+
+    Option "c" ["classpath"] (ReqArg readClasspath "")
+        "The Java classpath to be used.",
+
+    Option "P" ["packages"] (ReqArg readPackages "")
+        "The packages to translate.",
+
+    Option "d" ["search-depth"] (ReqArg readSearchDepth "")
+        "The maximum search depth for dependent Java classes.",
+
+    Option "v" ["verbose"] (NoArg Verbose)
+        "Verbose output, prints extra diagnostic information.",
+
+    Option "D" ["dump-reflection-info"] (ReqArg SaveReflectDump "")
+        "Dump reflection information into the file specified by -r.",
+
+    Option "L" ["load-reflection-dump"] (ReqArg LoadReflectDump "")
+        "Load a reflection dump instead of looking it up.",
+
+    Option "X" ["java-se"] (NoArg CompleteSE6)
+        "Completely translate Java SE.",
+
+    Option "F" ["filtered"] (NoArg Filtered)
+        "Only translate a subset of the Java SE.",
+
+    Option "t" ["target-directory"] (ReqArg TargetDirectory "")
+        "The target directory for generated source files."
+ 
+ ] where
+    readPackages = Packages . splitOneOf ":;,"
+    readClasspath = Classpath . splitOneOf ":;,"
+    readSearchDepth = SearchDepth . read
+
+parseArgs :: IO (Either (Options, [String]) [String])
+-- ^ Parse command line arguments with the help of the GetOpt library.
+parseArgs = do
+    (opts, args, errs) <- getArgs >>= return . getOpt Permute options
+    if null errs
+        then return $ Left  (parseOpts newOptions opts, args)
+        else return $ Right errs
+  where
+    parseOpts opts [] = opts
+    parseOpts opts (x:xs) = flip parseOpts xs $
+        case x of
+            Help              -> opts `set` optShowHelp        := True
+            Version           -> opts `set` optShowVersion     := True
+            Verbose           -> opts `set` optVerbose         := True
+            Filtered          -> opts `set` optFiltered        := True
+            CompleteSE6       -> opts `set` optCompleteSE6     := True
+            OnlyReflect       -> opts `set` optOnlyReflect     := True
+            Classpath cp      -> opts `set` optClasspath       := cp
+            Packages pkgs     -> opts `set` optPackages        := pkgs
+            SearchDepth d     -> opts `set` optSearchDepth     := d
+            SaveReflectDump f -> opts `set` optSaveReflectDump := f
+            LoadReflectDump f -> opts `set` optLoadReflectDump := f
+            TargetDirectory t -> opts `set` optTargetDirectory := t
+
+main :: IO ()
+-- ^ main: parseArgs and either 'run' or show errors.
+main = parseArgs >>= either (uncurry run) (mapM_ putStr)
+
+run :: Options -> [String] -> IO ()
+-- ^ The actual main function.
+run opts _args -- arg are currently unused
+    | opts `get` optShowHelp = do
+        progName <- getProgName
+        putStrLn (usageInfo """
+            #{versionInfo}
+            
+            Usage: #{progName} [options]
+            
+            #{helpText}
+            """ options)
+
+    | opts `get` optShowVersion = putStrLn versionInfo
+    | opts `get` optCompleteSE6 =
+        if opts `get` optFiltered then j2hs opts (filter minimal  javaClassesSE6)
+                                  else j2hs opts (filter justJava javaClassesSE6)
+
+    | otherwise = getProgName >>= \progName -> putStr """
+        No command given. Use `#{progName} help' for help.
+        """
+  where
+    justJava = ("java" `isPrefixOf`)
+    minimal name = pkg `elem` (opts `get` optPackages)
+        where (pkg, _) = splitClassName name
+
+
diff --git a/src/Options.hs b/src/Options.hs
new file mode 100644
--- /dev/null
+++ b/src/Options.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE Haskell2010
+    , TemplateHaskell
+ #-}
+
+module Options where
+
+import Data.NamedRecord
+import Data.Word
+
+-- The options as used in the application later on.
+-- This is a named record, see Data.NamedRecord for
+-- more information.
+record' "Options"
+    `has` "optShowHelp"         := False
+    `has` "optShowVersion"      := False
+    `has` "optPackages"         := ["java.lang"]
+    `has` "optClasspath"        := ["."]
+    `has` "optSearchDepth"      := (100 :: Word32)
+    `has` "optVerbose"          := False
+    `has` "optCompleteSE6"      := False
+    `has` "optFiltered"         := False
+    `has` "optOnlyReflect"      := False
+    `has` "optTargetDirectory"  := "bindings"
+    `has` "optProjectName"      := "java-bindings"
+    `has` "optProjectVersion"   := "1.0"
+    `has` "optCabalProject"     := True
+    `has` "optSaveReflectDump"  := ""
+    `has` "optLoadReflectDump"  := ""
+
diff --git a/src/Translate.hss b/src/Translate.hss
new file mode 100644
--- /dev/null
+++ b/src/Translate.hss
@@ -0,0 +1,286 @@
+{-# LANGUAGE Haskell2010 #-}
+
+module Translate where
+
+import Typomatic
+
+import Foreign.Java.Utils
+import Data.Map (Map)
+
+import Language.Haskell.Reflect
+import Language.Java.Reflect
+
+import Data.Function
+
+import qualified Data.Char as Char
+import qualified Data.List as List
+import qualified Data.Set  as Set
+import qualified Data.Map  as Map
+
+import qualified Data.List.HIUtils as HI
+
+import Control.Arrow
+
+pkgModExports :: Map String JavaClass -> [JavaClass] -> String
+pkgModExports info classes = concatMap (\(t, b) -> """    -- * #{show t}s\n#{b}""")
+        $ map (second $ concatMap format)
+        $ HI.aggregateAL
+        $ zip (map classType classes) classes
+  where
+    format clazz =
+        let haskName  = takeClassName $ classModName clazz
+            javaName  = className clazz
+            dataDecl  = if classIface clazz then "" else
+                """    #{dataTName haskName} (..),\n"""
+        in """
+            -- ** #{show $ classType clazz} #{javaName}
+            -- | For constructors, methods, and so on, see: "#{classModName clazz}".
+            #{tyclTName haskName},
+        #{dataDecl}\
+            #{newtTName haskName} #{if classEnum clazz then "(..)" else ""},
+        """
+
+
+pkgModImports :: Map String JavaClass -> [JavaClass] -> String
+pkgModImports info classes = concatMap (format . classModName) classes
+  where format modName = """import #{modName}__ hiding (info')\n"""
+
+
+pkgModDecl :: Map String JavaClass -> [JavaClass] -> String
+pkgModDecl info classes = ""
+
+
+-- Modules and Boot files
+  
+classBootExports :: Map String JavaClass -> JavaClass -> String
+classBootExports info clazz = ""
+
+
+classBootImports :: Map String JavaClass -> JavaClass -> String
+classBootImports info clazz = ""
+
+
+classModImports :: Map String JavaClass -> JavaClass -> String
+classModImports info clazz = concatMap format references
+  where
+    format package = """import qualified #{package}\n"""
+    references = Set.toList
+        $ Set.map (fst . splitClassName . classModName . check . flip Map.lookup info)
+        $ Set.fromList (classFullName clazz : dependencies)
+    dependencies = classDependencies clazz
+    check = maybe (error """
+        classModImports in Foreign.Java.Bindings.Java2Haskell \
+        - class definition not found""") id
+
+
+classBootDecl :: Map String JavaClass -> JavaClass -> String
+classBootDecl info clazz = """
+    """
+
+classModExports :: Map String JavaClass -> JavaClass -> String
+classModExports info clazz = "    -- * Methods\n" ++ concatMap methodExport methodNames
+  where
+    methods = List.sortBy (compare `on` methodName) (classMethods clazz)
+    methodNames = mkMethodNames methods
+    methodExport name = name ++ ",    \n"
+
+
+classModDecl :: Map String JavaClass -> JavaClass -> String
+classModDecl info clazz = concatMap methodDecl $ zip methodNames methods
+  where
+    methods = List.sortBy (compare `on` methodName) (classMethods clazz)
+    methodNames = mkMethodNames methods
+    methodDecl (name, method)
+        | arrayTypes = """
+            #{name} :: #{signature}
+            #{name} = Prelude.undefined
+            """
+        | otherwise = """
+            #{haddock}
+            #{name} :: #{signature}
+            #{name}#{argsDecl} = do
+                (Prelude.Just clazz) <- JNI.getClass "#{classFullName clazz}"
+                (Prelude.Just method) <- clazz `JNI.#{getMethod}` #{jniSignature}
+            #{thisArg}\
+            #{readArgs}\
+                result <- JNI.#{callMethod} method #{argsRefs}
+                #{convertResult} result
+            """
+      where
+        arrayTypes
+--            | any isArrayType (methodParams method) = True
+            | (Just ret) <- fst (methodReturnType method) = isArrayType ret
+            | otherwise = False
+        isArrayType x = case x of JArr _ -> True ; _ -> False
+        isStatic = methodStatic method
+        javaSignature = fJavaSignature argsInfo
+        javaReturnType = fJavaReturnType argsInfo
+        jniSignature = fJniSignature argsInfo
+        signature = fSignature argsInfo
+        getMethod = if isStatic then "getStaticMethod" else "getMethod"
+        callMethod = if isStatic then "callStaticMethodE" else "callMethodE"
+        args = fArgNames argsInfo
+        argsNotThis = (if isStatic then id else tail) args
+        argsInfo = runTypomatic info (typomatic clazz method)
+        argsDecl = concatMap (' ':) args
+        argsRefs = concatMap (++ "' ") args
+        haddock = """
+            -- | @#{if isStatic then "static " else "virtual "}\
+            #{if methodSynchronized method then "synchronized " else ""}\
+            #{if methodNative method then "native " else ""}\
+            #{if methodFinal method then "final " else ""}\
+            #{javaSignature} -> #{javaReturnType}@"""
+        thisArg = if isStatic then "" else """    #{head args}' <- JNI.asObject #{head args}\n"""
+        readArgs = concatMap (("    " ++). uncurry readArg) (zip argsNotThis (map fst $ methodParams method))
+        readArg name jtype = case jtype of
+            JBoolean -> """#{name}' <- JNIS.toBoolean #{name}\n"""
+            JChar    -> """#{name}' <- JNIS.toChar #{name}\n"""
+            JByte    -> """#{name}' <- JNIS.toByte #{name}\n"""
+            JShort   -> """#{name}' <- JNIS.toShort #{name}\n"""
+            JInt     -> """#{name}' <- JNIS.toInt #{name}\n"""
+            JLong    -> """#{name}' <- JNIS.toLong #{name}\n"""
+            JFloat   -> """#{name}' <- JNIS.toFloat #{name}\n"""
+            JDouble  -> """#{name}' <- JNIS.toDouble #{name}\n"""
+            JObj _   -> """#{name}' <- Prelude.Just <$> JNI.asObject #{name}\n"""
+            JArr _   -> """#{name}' <- JNIS.asMaybeArrayObject #{name}\n"""
+        convertResult = ("JNIS." ++) $ case fst (methodReturnType method) of
+            Nothing -> "toVoidResult"
+            Just t -> case t of
+                JBoolean -> "toBooleanResult"
+                JChar    -> "toCharResult"
+                JByte    -> "toByteResult"
+                JShort   -> "toShortResult"
+                JInt     -> "toIntResult"
+                JLong    -> "toLongResult"
+                JFloat   -> "toFloatResult"
+                JDouble  -> "toDoubleResult"
+                JObj n   -> "toObjectResult"
+                JArr c   -> "toArrayResult"
+
+        
+
+mkMethodNames :: [JavaMethod] -> [String]
+mkMethodNames = concatMap (zipWith (flip (++)) (iterate (++"'") ""))
+                . List.group . map sanitize . map methodName
+  where
+    sanitize name
+        | Char.isUpper (head name) = '_' : name
+        | name `elem` haskellKeywords = name ++ "'"
+        | otherwise = name
+
+
+-- Hidden Modules and Boot files
+
+
+classModExports' :: Map String JavaClass -> JavaClass -> String
+classModExports' info clazz = """
+        #{tyclTName haskName},
+        #{dataTName haskName} (..),
+        #{newtTName haskName} #{if classEnum clazz then "(..)" else ""},
+    """
+  where
+    haskName = takeClassName $ classModName clazz
+    javaName = className clazz
+
+
+classBootExports' :: Map String JavaClass -> JavaClass -> String
+classBootExports' info clazz = """
+        #{tyclTName haskName},
+        #{dataTName haskName} (..),
+        #{newtTName haskName},
+    """
+  where
+    haskName = takeClassName $ classModName clazz
+    javaName = className clazz
+
+
+classBootImports' :: Map String JavaClass -> JavaClass -> String
+classBootImports' info clazz
+    = concatMap (format . classModName) supertypes
+  where
+    format modName = """import qualified #{modName}__\n"""
+    supertypes = map (check . flip Map.lookup info)
+               $ Set.toList
+               $ Set.fromList (classParents clazz ++ classIfaces clazz)
+    check = maybe (error """
+        classBootImports' in Foreign.Java.Bindings.Java2Haskell \
+        - class definition not found""") id
+
+
+classModImports' :: Map String JavaClass -> JavaClass -> String
+classModImports' info clazz = ""
+
+
+classBootDecl' :: Map String JavaClass -> JavaClass -> String
+classBootDecl' info clazz
+    | classEnum clazz = """
+        class #{tyclTDecl}
+        data #{newtTDecl} = #{enumConstants}
+        data #{dataTDecl} = #{dataCDecl}
+        """
+    | otherwise = """
+        class #{tyclTDecl}
+        newtype #{newtTDecl} = #{newtCDecl} JNI.JObject
+        data #{dataTDecl} = #{dataCDecl}
+        """
+  where baseName  = takeClassName $ classModName clazz
+        params    = concatMap (\(p:ps) -> ' ' : Char.toLower p : ps)
+                      $ map (tyVarName . paramName) $ classTypeParams clazz
+        newtTDecl = newtTName baseName ++ params
+        newtCDecl = newtCName baseName
+        dataTDecl = dataTName baseName ++ params
+        dataCDecl = dataCName baseName ++ params
+        tyclTDecl = """(JNI.JavaObject this#{context}) => #{tyclTName baseName} this"""
+        context = concatMap parentContext (classParents clazz)
+        parentContext parent = """, #{qualifiedName} this"""
+          where parentClass = info Map.! parent
+                modName = classModName parentClass
+                qualifiedName = modName ++ "__." ++ (tyclTName $ takeClassName modName)
+        enumConstants = concat $ List.intersperse " | " $ map sanitize $ map snd $ classEnumConstants clazz
+          where sanitize (x:xs) = Char.toUpper x : xs
+
+
+classModDecl' :: Map String JavaClass -> JavaClass -> String
+classModDecl' info clazz
+    | classEnum clazz = """
+        instance JNI.JavaObject (#{newtTDecl}) where
+            asObject = Prelude.undefined
+        instance #{tyclTName baseName} (#{newtTDecl})
+        instance JNIS.InstanceOf (#{dataTDecl}) where
+            type CoercedType (#{dataTDecl}) = (#{newtTDecl})
+        #{instances}
+        """
+    | otherwise = """
+        instance JNI.JavaObject (#{newtTDecl}) where
+            asObject (#{newtCName baseName} obj) = return obj
+        instance JNIS.UnsafeCast (#{newtTDecl}) where
+            unsafeFromJObject obj = return (#{newtCDecl} obj)
+        instance #{tyclTName baseName} (#{newtTDecl})
+        instance JNIS.InstanceOf (#{dataTDecl}) where
+            type CoercedType (#{dataTDecl}) = (#{newtTDecl})
+            coerce o t = do
+                obj <- JNI.asObject o
+                (Prelude.Just clazz) <- JNI.getClass "#{fullClassName}"
+                isInstanceOf <- obj `JNI.isInstanceOf` clazz
+                if isInstanceOf
+                    then Prelude.Just <$> (JNIS.unsafeFromJObject obj)
+                    else return Prelude.Nothing
+        #{instances}
+        """
+  where fullClassName = classFullName clazz
+        baseName  = takeClassName $ classModName clazz
+        params    = concatMap (\(p:ps) -> ' ' : Char.toLower p : ps)
+                      $ map (tyVarName . paramName) $ classTypeParams clazz
+        newtTDecl = newtTName baseName ++ params
+        newtCDecl = newtCName baseName
+        dataTDecl = dataTName baseName ++ params
+        dataCDecl = dataCName baseName ++ params
+        instances = concatMap parentInstance (classParents clazz)
+        parentInstance parent = """
+            instance #{qualifiedName} (#{newtTDecl})
+            """
+          where parentClass = info Map.! parent
+                modName = classModName parentClass
+                qualifiedName = modName ++ "__." ++ (tyclTName $ takeClassName modName)
+
+
diff --git a/src/Typomatic.hs b/src/Typomatic.hs
new file mode 100644
--- /dev/null
+++ b/src/Typomatic.hs
@@ -0,0 +1,411 @@
+{-# LANGUAGE Haskell2010
+    , GeneralizedNewtypeDeriving
+    , DeriveDataTypeable
+ #-}
+{-# OPTIONS
+    -Wall
+    -fno-warn-name-shadowing
+ #-}
+
+-- | INTERNAL module is used to infer Haskell types from Java types.
+module Typomatic (
+    runTypomatic,
+    typomatic,
+    ArgInfo (..),
+
+    dataTName,
+    dataCName,
+    newtTName,
+    newtCName,
+    tyclTName
+) where
+
+import Language.Java.Reflect
+
+import Control.Monad.State hiding (void)
+import qualified Control.Monad.State as State
+import Data.Functor.Identity
+import Data.Functor ((<$>))
+
+import Data.Generics
+
+import qualified Data.Set as Set
+import Data.Set (Set)
+import qualified Data.Map as Map
+import Data.Map (Map)
+import qualified Data.List as List
+
+dataTName, dataCName, newtTName, newtCName, tyclTName :: String -> String
+
+dataTName = (++ "''")
+dataCName = id -- (++ "")
+newtTName = (++ "'")
+newtCName = (++ "'")
+tyclTName = id -- (++ "")
+
+-- | This is the information which is ultimately
+-- gathered by the use of this module.
+data ArgInfo = ArgInfo {
+    fSignature :: String,
+    fArguments :: [TVar],
+    fReturnType :: TVar,
+    fArgNames :: [String],
+    fJavaSignature :: String,
+    fJavaReturnType :: String,
+    fJniSignature :: String
+  }
+
+tr :: Eq a => a -> a -> [a] -> [a]
+tr a b (x:xs)
+    | a == x    = b : tr a b xs
+    | otherwise = x : tr a b xs
+tr _ _ [] = []
+
+breakLast :: [a] -> ([a], a)
+breakLast [a] = ([], a)
+breakLast (a:as) =
+    let (init', last') = breakLast as
+    in  (a:init', last')
+breakLast _ = error "Foreign.Java.Util.breakLast: empty list"
+
+
+--------------------
+-- Type variables --
+--------------------
+
+data TVar = TVar String | TVars [TVar]
+    deriving (Eq, Ord, Show, Data, Typeable)
+
+printTVar :: TVar -> String
+printTVar var = case var of
+    (TVar v) -> v
+    (TVars vs) -> concat ["(", tail (concatMap ((' ':) . printTVar) vs), ")"]
+
+
+---------------
+-- Utilities --
+---------------
+
+printJniType :: JavaType -> String
+printJniType t = case t of
+    JBoolean -> "JNI.boolean"
+    JChar    -> "JNI.char"
+    JByte    -> "JNI.byte"
+    JShort   -> "JNI.short"
+    JInt     -> "JNI.int"
+    JLong    -> "JNI.long"
+    JFloat   -> "JNI.float"
+    JDouble  -> "JNI.double"
+    JObj n   -> "JNI.object \"" ++ n ++ "\""
+    -- arrays are treated as objects:
+    JArr c   -> "JNIS.object' \"[" ++ printJniRawType c ++ "\""
+
+
+printJniRawType :: JavaType -> String
+printJniRawType t = case t of
+    JBoolean -> "Z"
+    JChar    -> "C"
+    JByte    -> "B"
+    JShort   -> "S"
+    JInt     -> "I"
+    JLong    -> "J"
+    JFloat   -> "F"
+    JDouble  -> "D"
+    JObj n   -> 'L' : tr '.' '/' n ++ ";"
+    JArr c   -> '[' : printJniRawType c
+
+
+printJniSignature :: JavaMethod -> String
+printJniSignature method = show name ++ " JNI.::= " ++ args ++ ret
+  where
+    name = methodName method
+    args = concatMap ((++ " --> ") . printJniType) (map fst $ methodParams method)
+    ret  = maybe "JNI.void" printJniType (fst $ methodReturnType method)
+
+
+
+typomatic :: JavaClass -> JavaMethod -> Typomatic ArgInfo
+typomatic clazz method_ = do
+
+    let className = classFullName clazz
+        classParams = classTypeParams clazz
+
+        -- sanitize tyVars tied to the method by distinguishing
+        -- from tyVars tied to the class by adding an apostrophe
+        -- to the name of the tyVar if it is tied to the method.
+        methodTypeVars = map paramName (methodTypeParams method_)
+        safe var@(TyVar str)
+            | var `elem` methodTypeVars = TyVar (str ++ "'")
+            | otherwise = var
+        method = everywhere (mkT safe) method_
+
+        -- the following three functions create the list of
+        -- argument parameters, including @this@ (if the method
+        -- is not static) and the return type. The return type
+        -- is separated later on again.
+        thisParam = if null classParams
+            then NotSoGeneric className
+            else Parameterized {
+                    jgtBasetype = className,
+                    jgtParameters = (map (TypeVarReference . paramName) classParams)
+                  }
+        params = (if methodStatic method then [] else [thisParam])
+            ++ map snd (methodParams method)
+            ++ [maybe (TypeVarReference (TyVar "()"))
+                      (const $ snd $ methodReturnType method)
+                      (fst $ methodReturnType method)]
+        jtypes = (if methodStatic method then [] else [JObj className])
+            ++ map fst (methodParams method)
+
+        -- turns a JavaGenericType definition into type variables.
+        -- The names are taken from the monad via 'newVar'.
+        tvar param = case jgtType param of
+            WildcardT -> do
+                name <- newVar
+                return $ TVar name
+            ParameterizedT -> do
+                name <- newVar
+                params <- mapM tvar (jgtParameters param)
+                return $ TVars $ TVar name : params
+            GenericArrayT -> do
+                name <- newVar
+                return $ TVar name
+            TypeVarReferenceT -> do
+                let name = (tyVarName (jgtName param))
+                return $ TVar name
+            NotSoGenericT -> do
+                name <- newVar
+                return $ TVar name
+
+        -- creates a haskell signature (-> String)
+        signature typeVars returnVar = do
+            -- retrieve the context and turn each variable into a String.
+            contexts <- getContext >>= mapM (\(tvar, context) -> do
+                return $ context ++ " " ++ printTVar tvar)
+
+            let argTypes = concatMap ((++ " -> ") . printTVar) typeVars
+                -- the final type is wrapped in the Java monad
+                returnType = "JNI.Java " ++ printTVar returnVar
+                -- finally assemble the conetext.
+                context = if null contexts then "" else
+                    "(" ++ concat (List.intersperse ", " contexts) ++ ") => "
+            
+            -- return the full signature, consisting of the context,
+            -- the type of the arguments, and the return type.
+            return $ concat [context, argTypes, returnType]
+
+        -- create a java signature (-> String)
+        javaSignature = do
+            let name = methodName method
+                args = map printJavaType $ map fst $ methodParams method
+            return $ name ++ "(" ++ concat (List.intersperse ", " args) ++ ")"
+            
+
+    -- if this is not a static method the first argument
+    -- is /this/. This merely pushed the name into the list
+    -- of type variable names in the monad.
+    when (not $ methodStatic method) (pushVar "this")
+
+    -- get type variables for all arguments, including the
+    -- return type (as the return type may be the same as
+    -- one of the argument types).
+    --
+    -- Split the result into arguments and return var again,
+    -- since the return variable will get special treatment
+    -- henceforth.
+    (typeVars, returnVar_) <- breakLast <$> mapM tvar params
+
+    -- augment the return type variable, i.e. if it is not
+    -- a type variable at all, replace the variable name by
+    -- a constant reference to a specific type.
+    --
+    -- This is only the case with parameterized type variables
+    -- and not-so-generic ones.
+    returnVar <- case fst (methodReturnType method) of
+        Just (JObj typeName) -> case jgtType (snd $ methodReturnType method) of
+            ParameterizedT -> do
+                clazz <- getClass typeName
+                let (TVars (TVar _ : ts)) = returnVar_
+                return $ TVars (TVar (newtTName (classModName clazz)) : ts)
+            NotSoGenericT -> do
+                clazz <- getClass typeName
+                return $ TVar (newtTName (classModName clazz))
+            _ -> return returnVar_
+        _ -> return returnVar_
+
+    -- Add contexts for all arguments and augment array types
+    let makeContext typeVar jtype = case jtype of
+            JObj name -> do
+                clazz <- getClass name
+                addContext typeVar $ tyclTName $ classModName clazz
+                return typeVar
+            JArr componentType -> do
+                addContext typeVar "JNIS.Array"
+                return typeVar
+            JBoolean -> do
+                addContext typeVar "JNIS.JBoolean"
+                return typeVar
+            JChar -> do
+                addContext typeVar "JNIS.JChar"
+                return typeVar
+            JByte -> do
+                addContext typeVar "JNIS.JByte"
+                return typeVar
+            JShort -> do
+                addContext typeVar "JNIS.JShort"
+                return typeVar
+            JInt -> do
+                addContext typeVar "JNIS.JInt"
+                return typeVar
+            JLong -> do
+                addContext typeVar "JNIS.JLong"
+                return typeVar
+            JFloat -> do
+                addContext typeVar "JNIS.JFloat"
+                return typeVar
+            JDouble -> do
+                addContext typeVar "JNIS.JDouble"
+                return typeVar
+
+    -- Here makeContexts is applied (see above). In the same pass a new
+    -- set of typeVars (typeVars') is generated, since makeContexts
+    -- migth further investigate array and create type variables for
+    -- their component types.
+    typeVars' <- mapM (uncurry makeContext) (zip typeVars jtypes)
+
+    -- Create contexts for the ultimate return type.
+    returnVar' <- case fst (methodReturnType method) of
+            Nothing -> do
+                let tvar = TVar "void"
+                addContext tvar "JNIS.VoidResult"
+                return tvar
+            Just t -> case t of
+                JObj _   -> do
+                    let tvar = TVars [TVar "object", returnVar]
+                    addContext tvar "JNIS.ObjectResult"
+                    return tvar
+                JArr _   -> do
+                    let tvar = TVar "array"
+                    addContext tvar "JNIS.ArrayResult"
+                    return tvar
+                JBoolean -> do
+                    let tvar = TVar "boolean"
+                    addContext tvar "JNIS.BooleanResult"
+                    return tvar
+                JChar    -> do
+                    let tvar = TVar "char"
+                    addContext tvar "JNIS.CharResult"
+                    return tvar
+                JByte    -> do
+                    let tvar = TVar "byte"
+                    addContext tvar "JNIS.ByteResult"
+                    return tvar
+                JShort   -> do
+                    let tvar = TVar "short"
+                    addContext tvar "JNIS.ShortResult"
+                    return tvar
+                JInt     -> do
+                    let tvar = TVar "int"
+                    addContext tvar "JNIS.IntResult"
+                    return tvar
+                JLong    -> do
+                    let tvar = TVar "long"
+                    addContext tvar "JNIS.LongResult"
+                    return tvar
+                JFloat   -> do
+                    let tvar = TVar "float"
+                    addContext tvar "JNIS.FloatResult"
+                    return tvar
+                JDouble  -> do
+                    let tvar = TVar "double"
+                    addContext tvar "JNIS.DoubleResult"
+                    return tvar
+
+    -- generate the Haskell signature (a String)
+    sig <- signature typeVars' returnVar'
+
+    -- generate the Java signature (a String).
+    -- This is used for documentation purposed later on
+    -- (i.e. inserted as haddock docstring).
+    jsig <- javaSignature
+
+    -- generate the names of the arguments
+    let argNames = (if methodStatic method then id else ("this":) . init)
+            $ zipWith (\_ i -> 'a' : show i) typeVars [(1 :: Integer)..]
+
+    -- assemble and return all the calculated information
+    return $ ArgInfo {
+        fArguments  = typeVars,
+        fReturnType = returnVar',
+        fArgNames   = argNames,
+        fSignature  = sig,
+        fJavaSignature = jsig,
+        fJavaReturnType = maybe "void" printJavaType (fst $ methodReturnType method),
+        fJniSignature = printJniSignature method
+      }
+
+--------------------------------------------
+-- The following are utilities for the monad
+--------------------------------------------
+
+-- | The state of the monad.
+data TypomaticState = TypomaticState {
+    tVars :: [String],
+    tContext :: Set (TVar, String),
+    tParams :: [String],
+    tClasses :: Map String JavaClass
+  }
+
+-- | Retrieve the definition of a class.
+--
+-- The monad has an internal store of class names
+-- and their definitions. See 'tClasses'.
+getClass :: String -> Typomatic JavaClass
+getClass name = do
+    state <- State.get
+    return ((tClasses state) Map.! name)
+
+-- | Get the current context as a list.
+getContext :: Typomatic [(TVar, String)]
+getContext = State.get >>= return . Set.toList . tContext
+
+-- | Add a context for a specific type variable.
+addContext :: TVar -> String -> Typomatic ()
+addContext tvar string = do
+    state <- State.get
+    State.put (state {tContext = ((tvar, string) `Set.insert` tContext state)})
+
+-- | Introduce a new name.
+--
+-- This simply takes the next element in the infinite
+-- 'tVars' list and stores the tail back in the monad.
+newVar :: Typomatic String
+newVar = do
+    state <- State.get
+    let (v:vs) = tVars state
+    State.put (state { tVars = vs})
+    return v
+
+-- | Push a new name in the front of the available names.
+pushVar :: String -> Typomatic ()
+pushVar name = do
+    state <- State.get
+    State.put (state {tVars = (name : tVars state)})
+
+-- | The monad.
+newtype Typomatic a = Typomatic { _runTypomatic :: StateT TypomaticState Identity a }
+    deriving (Monad, MonadState TypomaticState, Functor)
+
+-- | Run a computation in the monad.
+runTypomatic :: Map String JavaClass -> Typomatic a -> a
+runTypomatic classes =
+    let state = TypomaticState { -- initial state
+        tVars = map (('v':) . show) [(1 :: Integer)..],
+        tContext = Set.empty,
+        tParams = [],
+        tClasses = classes
+    } in fst . runIdentity . flip runStateT state . _runTypomatic
+
+
+
+
