changeset 3067:b1da897ab209 8.0-b83

branch merge
author David Grieve<david.grieve@oracle.com>
date Wed, 27 Mar 2013 09:57:53 -0400
parents 93d571992564 564d047a6b4c
children b5866e91dc0b eee50af9e4d7 f4a1f66e87e0
files glass/glass/src/com/sun/glass/ui/ios/IosScreen.java glass/glass/src/com/sun/glass/ui/lens/LensScreen.java glass/glass/src/com/sun/glass/ui/mac/MacScreen.java glass/glass/src/com/sun/glass/ui/swt/SWTScreen.java glass/glass/src/com/sun/glass/ui/win/WinScreen.java
diffstat 151 files changed, 6376 insertions(+), 4099 deletions(-) [+]
line wrap: on
line diff
--- a/apps/samples/Ensemble8/src/app/ensemble/sampleproject/SampleProjectBuilder.java	Wed Mar 27 08:57:00 2013 -0400
+++ b/apps/samples/Ensemble8/src/app/ensemble/sampleproject/SampleProjectBuilder.java	Wed Mar 27 09:57:53 2013 -0400
@@ -102,7 +102,7 @@
             zipinputstream.close();
             //Put resources like images under src/
             File srcDestDir = new File(projectDir.getPath() + "/src/");
-            loadSampleResourceUrls(srcDestDir, sampleInfo.baseUri, sampleInfo.resourceUrls);
+            loadSampleResourceUrls(srcDestDir, sampleInfo.resourceUrls);
             // open project in netbeans
             //TODO:      loadProject(projectDir, mainSrcFile);
         } catch (Exception e) {
@@ -110,44 +110,18 @@
         }
     }
 
-    /* TODO: private static void loadProject(File projectDir, File mainSrcFile) {
-     ///System.out.println("Trying to load project in Netbeans...");
-     NBInstallation[] installations = UserDirScanner.suitableNBInstallations(new File(System.getProperty("user.home")),"6.9.0",
-     NBInstallation.LAST_USED_COMPARATOR);
-     if (installations.length > 0) {
-     NBInstallation installation = installations[0];
-     String launcher = NBInstallation.getPlatformLauncher();
-     ///System.out.println("launcher = " + launcher);
-     String cmdArray[] = new String[]{
-     installation.getExecDir().getAbsolutePath() + File.separator + launcher,
-     "--open",
-     projectDir.getAbsolutePath(),
-     mainSrcFile.getAbsolutePath()
-     };
-     ///System.out.println("Command line: " + Arrays.asList(cmdArray));
-     try {
-     Process proc = Runtime.getRuntime().exec(cmdArray, null, installation.getExecDir());
-     } catch (IOException e) {
-     e.printStackTrace();
-     }
-     } else {
-     ///System.out.println("Could not find netbeans installed.");
-     }
-     }
-     */
-    private static void loadSampleResourceUrls(File destDir, String baseUri, String[] resourceUrlArray) {
+    private static void loadSampleResourceUrls(File destDir, String[] resourceUrlArray) {
         List<String> resourceUrlList = Arrays.asList(resourceUrlArray);
         //create resource files for each of the resources we use
         if (!resourceUrlList.isEmpty()) {
-            File dirs = new File(destDir.getPath() + baseUri);
-            boolean outflag = dirs.mkdirs();
             for (String oneResourceUrl : resourceUrlList) {
-                String sampleResourceName = oneResourceUrl.substring(
-                        oneResourceUrl.lastIndexOf('/') + 1,
-                        oneResourceUrl.length());
+                String resourceSubdir = oneResourceUrl.substring(0, oneResourceUrl.lastIndexOf('/'));
                 try {
+                    File parentDir = new File(destDir.getPath() + resourceSubdir);
+                    parentDir.mkdirs();
                     Utils.copyFile(new URL(SampleProjectBuilder.class.getResource(oneResourceUrl).toExternalForm()),
-                                   dirs.getPath() + "/" + sampleResourceName);
+                            destDir.getPath() + oneResourceUrl);
+
                 } catch (MalformedURLException e) {
                     e.printStackTrace();
                 }
--- a/apps/samples/Ensemble8/src/generated/ensemble/generated/Samples.java	Wed Mar 27 08:57:00 2013 -0400
+++ b/apps/samples/Ensemble8/src/generated/ensemble/generated/Samples.java	Wed Mar 27 09:57:53 2013 -0400
@@ -4,286 +4,296 @@
 import javafx.application.ConditionalFeature;
 import java.util.HashMap;
 public class Samples{
-    private static final SampleInfo SAMPLE_0 = new SampleInfo("Interpolator","A sample that shows various types of interpolation between key frames in a timeline. There are five circles, each animated with a different interpolation method. The Linear interpolator is the default. Use the controls to reduce opacity to zero for some circles to compare with others, or change circle color to distinguish between individual interpolators. ","/Animation/Interpolator","/ensemble/samples/animation/interpolator","ensemble.samples.animation.interpolator.InterpolatorApp","/ensemble/samples/animation/interpolator/preview.png",new String[]{"/ensemble/samples/animation/interpolator/InterpolatorApp.java",},new String[]{"javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/interpolator/InterpolatorApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"-","name","LINEAR"),new PlaygroundProperty("circle1","opacity","min","0","max","1"),new PlaygroundProperty("circle1","fill"),new PlaygroundProperty(null,"-","name","EASE_BOTH"),new PlaygroundProperty("circle2","opacity","min","0","max","1"),new PlaygroundProperty("circle2","fill"),new PlaygroundProperty(null,"-","name","EASE_IN"),new PlaygroundProperty("circle3","opacity","min","0","max","1"),new PlaygroundProperty("circle3","fill"),new PlaygroundProperty(null,"-","name","EASE_OUT"),new PlaygroundProperty("circle4","opacity","min","0","max","1"),new PlaygroundProperty("circle4","fill"),new PlaygroundProperty(null,"-","name","SPLINE"),new PlaygroundProperty("circle5","opacity","min","0","max","1"),new PlaygroundProperty("circle5","fill"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_1 = new SampleInfo("Timeline","A sample that demonstrates the basics of timeline creation. ","/Animation/Timeline/Timeline","/ensemble/samples/animation/timeline/timeline","ensemble.samples.animation.timeline.timeline.TimelineApp","/ensemble/samples/animation/timeline/timeline/preview.png",new String[]{"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_2 = new SampleInfo("Timeline Events","A sample that demonstrates events triggered during time line play. The circle changes its radius in a linear fashion during each key frame and randomly jumps to a new location along the x coordinate at the end of the key frame. ","/Animation/Timeline/Timeline Events","/ensemble/samples/animation/timeline/timelineevents","ensemble.samples.animation.timeline.timelineevents.TimelineEventsApp","/ensemble/samples/animation/timeline/timelineevents/preview.png",new String[]{"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration","javafx.event.ActionEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_3 = new SampleInfo("Fade Transition","A sample in which the opacity of a node changes over a given time. ","/Animation/Transitions/Fade Transition","/ensemble/samples/animation/transitions/fadetransition","ensemble.samples.animation.transitions.fadetransition.FadeTransitionApp","/ensemble/samples/animation/transitions/fadetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",},new String[]{"javafx.animation.FadeTransition","javafx.animation.FadeTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_4 = new SampleInfo("Fill Transition","A sample in which the filling of a shape changes over a given time. ","/Animation/Transitions/Fill Transition","/ensemble/samples/animation/transitions/filltransition","ensemble.samples.animation.transitions.filltransition.FillTransitionApp","/ensemble/samples/animation/transitions/filltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",},new String[]{"javafx.animation.FillTransition","javafx.animation.FillTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_5 = new SampleInfo("Parallel Transition","A sample in which various transitions are executed in parallel. ","/Animation/Transitions/Parallel Transition","/ensemble/samples/animation/transitions/paralleltransition","ensemble.samples.animation.transitions.paralleltransition.ParallelTransitionApp","/ensemble/samples/animation/transitions/paralleltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",},new String[]{"javafx.animation.ParallelTransition","javafx.animation.ParallelTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_6 = new SampleInfo("Path Transition","A sample in which a node moves along a path from end to end over a given time. ","/Animation/Transitions/Path Transition","/ensemble/samples/animation/transitions/pathtransition","ensemble.samples.animation.transitions.pathtransition.PathTransitionApp","/ensemble/samples/animation/transitions/pathtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",},new String[]{"javafx.animation.PathTransition","javafx.animation.PathTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_7 = new SampleInfo("Pause Transition","A sample in which a node pauses over a given time. ","/Animation/Transitions/Pause Transition","/ensemble/samples/animation/transitions/pausetransition","ensemble.samples.animation.transitions.pausetransition.PauseTransitionApp","/ensemble/samples/animation/transitions/pausetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",},new String[]{"javafx.animation.PauseTransition","javafx.animation.PauseTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_8 = new SampleInfo("Rotate Transition","A sample in which a node rotates around its center over a given time. ","/Animation/Transitions/Rotate Transition","/ensemble/samples/animation/transitions/rotatetransition","ensemble.samples.animation.transitions.rotatetransition.RotateTransitionApp","/ensemble/samples/animation/transitions/rotatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",},new String[]{"javafx.animation.RotateTransition","javafx.animation.RotateTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_9 = new SampleInfo("Scale Transition","A sample in which a node scales larger and smaller over a given time. ","/Animation/Transitions/Scale Transition","/ensemble/samples/animation/transitions/scaletransition","ensemble.samples.animation.transitions.scaletransition.ScaleTransitionApp","/ensemble/samples/animation/transitions/scaletransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",},new String[]{"javafx.animation.ScaleTransition","javafx.animation.ScaleTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Aimation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_10 = new SampleInfo("Sequential Transition","A sample in which various transitions are executed sequentially. ","/Animation/Transitions/Sequential Transition","/ensemble/samples/animation/transitions/sequentialtransition","ensemble.samples.animation.transitions.sequentialtransition.SequentialTransitionApp","/ensemble/samples/animation/transitions/sequentialtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",},new String[]{"javafx.animation.SequentialTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_11 = new SampleInfo("Stroke Transition","A sample in which the stroke color of a shape changes over a given time. ","/Animation/Transitions/Stroke Transition","/ensemble/samples/animation/transitions/stroketransition","ensemble.samples.animation.transitions.stroketransition.StrokeTransitionApp","/ensemble/samples/animation/transitions/stroketransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",},new String[]{"javafx.animation.StrokeTransition","javafx.animation.StrokeTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_12 = new SampleInfo("Translate Transition","A sample in which a node moves from one location to another over a given time. ","/Animation/Transitions/Translate Transition","/ensemble/samples/animation/transitions/translatetransition","ensemble.samples.animation.transitions.translatetransition.TranslateTransitionApp","/ensemble/samples/animation/transitions/translatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",},new String[]{"javafx.animation.TranslateTransition","javafx.animation.TranslateTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition",},"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_13 = new SampleInfo("Fireworks","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Canvas/Fireworks","/ensemble/samples/canvas/fireworks","ensemble.samples.canvas.fireworks.FireworksApp","/ensemble/samples/canvas/fireworks/preview.png",new String[]{"/ensemble/samples/canvas/fireworks/FireworksApp.java","/ensemble/samples/canvas/fireworks/Particle.java","/ensemble/samples/shared-resources/sf.jpg","/ensemble/samples/canvas/fireworks/SanFranciscoFireworks.java",},new String[]{"javafx.scene.canvas.Canvas","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/canvas/fireworks/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_14 = new SampleInfo("Audio Area Chart","An area chart that shows audio spectrum of a music file being played. ","/Charts/Area/Audio Area Chart","/ensemble/samples/charts/area/audio","ensemble.samples.charts.area.audio.AudioAreaChartApp","/ensemble/samples/charts/area/audio/preview.png",new String[]{"/ensemble/samples/charts/area/audio/AudioAreaChart.css","/ensemble/samples/charts/area/audio/AudioAreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/area/audio/AudioAreaChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_15 = new SampleInfo("Area Chart","A chart that fills in the area between a line of data points and the axes. Good for comparing accumulated totals over time. ","/Charts/Area/Area Chart","/ensemble/samples/charts/area/chart","ensemble.samples.charts.area.chart.AreaChartApp","/ensemble/samples/charts/area/chart/preview.png",new String[]{"/ensemble/samples/charts/area/chart/AreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/area/chart/AreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_16 = new SampleInfo("Curve-Fitted Area Chart","An area chart that demonstrates curve fitting. Styling is done through CSS. ","/Charts/Area/Curve-Fitted Area Chart","/ensemble/samples/charts/area/curvefitted","ensemble.samples.charts.area.curvefitted.CurveFittedAreaChartApp","/ensemble/samples/charts/area/curvefitted/preview.png",new String[]{"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.css","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","1000","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-1000","max","2000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","1000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_17 = new SampleInfo("Stacked Area Chart","A sample that displays data in a stacked area chart. ","/Charts/Area/Stacked Area Chart","/ensemble/samples/charts/area/stacked","ensemble.samples.charts.area.stacked.StackedAreaChartApp","/ensemble/samples/charts/area/stacked/preview.png",new String[]{"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",},new String[]{"javafx.scene.chart.StackedAreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","20","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","40","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_18 = new SampleInfo("Audio Bar Chart","Bar chart that shows audio spectrum of a music file being played. ","/Charts/Bar/Audio Bar Chart","/ensemble/samples/charts/bar/audio","ensemble.samples.charts.bar.audio.AudioBarChartApp","/ensemble/samples/charts/bar/audio/preview.png",new String[]{"/ensemble/samples/charts/bar/audio/AudioBarChart.css","/ensemble/samples/charts/bar/audio/AudioBarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.Chart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_19 = new SampleInfo("Bar Chart","A chart that displays rectangular bars with heights indicating data values for categories. Used for displaying information when at least one axis has discontinuous or discrete data. ","/Charts/Bar/Bar Chart","/ensemble/samples/charts/bar/chart","ensemble.samples.charts.bar.chart.BarChartApp","/ensemble/samples/charts/bar/chart/preview.png",new String[]{"/ensemble/samples/charts/bar/chart/BarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/bar/chart/BarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("yAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_20 = new SampleInfo("Horizontal Bar Chart","Horizontal bar chart with a variety of actions and settable properties for experimenting with the charts features. ","/Charts/Bar/Horizontal Bar Chart","/ensemble/samples/charts/bar/horizontal","ensemble.samples.charts.bar.horizontal.HorizontalBarChartApp","/ensemble/samples/charts/bar/horizontal/preview.png",new String[]{"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("xAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","gapStartAndEnd"),new PlaygroundProperty("yAxis","startMargin"),new PlaygroundProperty("yAxis","endMargin"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_21 = new SampleInfo("Image Bar Chart","A bar chart that uses CSS to display stacks of car images to indicate data values for categories. ","/Charts/Bar/Image Bar Chart","/ensemble/samples/charts/bar/image","ensemble.samples.charts.bar.image.ImageBarChartApp","/ensemble/samples/charts/bar/image/preview.png",new String[]{"/ensemble/samples/charts/bar/image/ImageBarChart.css","/ensemble/samples/charts/bar/image/ImageBarChartApp.java","/ensemble/samples/charts/bar/image/sedan-s.png","/ensemble/samples/charts/bar/image/suv-s.png","/ensemble/samples/charts/bar/image/truck-s.png","/ensemble/samples/charts/bar/image/van-s.png",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/image/ImageBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_22 = new SampleInfo("Stacked Bar Chart","A sample that displays data in a stacked bar chart. ","/Charts/Bar/Stacked Bar Chart","/ensemble/samples/charts/bar/stacked","ensemble.samples.charts.bar.stacked.StackedBarChartApp","/ensemble/samples/charts/bar/stacked/preview.png",new String[]{"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",},new String[]{"javafx.scene.chart.StackedBarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Bar/Bar Chart",},"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-3000","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","8000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","5000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_23 = new SampleInfo("Bubble Chart","An advanced bubble chart with a variety of actions and settable properties. ","/Charts/Bubble/Bubble Chart","/ensemble/samples/charts/bubble/chart","ensemble.samples.charts.bubble.chart.BubbleChartApp","/ensemble/samples/charts/bubble/chart/preview.png",new String[]{"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",},new String[]{"javafx.scene.chart.BubbleChart","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_24 = new SampleInfo("Candle Stick Chart","A custom candlestick chart. This sample shows how to extend XYChart base class to create your own two axis chart type. ","/Charts/Custom/Candle Stick Chart","/ensemble/samples/charts/custom/candlestick","ensemble.samples.charts.custom.candlestick.CandleStickChartApp","/ensemble/samples/charts/custom/candlestick/preview.png",new String[]{"/ensemble/samples/charts/custom/candlestick/Candle.java","/ensemble/samples/charts/custom/candlestick/CandleStickChart.css","/ensemble/samples/charts/custom/candlestick/CandleStickChart.java","/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java","/ensemble/samples/charts/custom/candlestick/CandleStickExtraValues.java","/ensemble/samples/charts/custom/candlestick/TooltipContent.java",},new String[]{"javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Scatter/Scatter Chart","/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","30","step","1"),new PlaygroundProperty("yAxis","upperBound","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","0.5"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_25 = new SampleInfo("Category Line Chart","A line chart demonstrating a CategoryAxis implementation. ","/Charts/Line/Category Line Chart","/ensemble/samples/charts/line/category","ensemble.samples.charts.line.category.CategoryLineChartApp","/ensemble/samples/charts/line/category/preview.png",new String[]{"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",},new String[]{"javafx.scene.chart.CategoryAxis","javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_26 = new SampleInfo("Line Chart","A chart in which lines connect a series of data points. Useful for viewing data trends over time. ","/Charts/Line/Line Chart","/ensemble/samples/charts/line/chart","ensemble.samples.charts.line.chart.LineChartApp","/ensemble/samples/charts/line/chart/preview.png",new String[]{"/ensemble/samples/charts/line/chart/LineChartApp.java",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/line/chart/LineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.2"),new PlaygroundProperty("xAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("xAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.2"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("yAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_27 = new SampleInfo("Stock Line Chart","A simulated stock line chart. ","/Charts/Line/Stock Line Chart","/ensemble/samples/charts/line/stock","ensemble.samples.charts.line.stock.StockLineChartApp","/ensemble/samples/charts/line/stock/preview.png",new String[]{"/ensemble/samples/charts/line/stock/StockLineChart.css","/ensemble/samples/charts/line/stock/StockLineChartApp.java",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/stock/StockLineChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_28 = new SampleInfo("Pie Chart","A circular chart divided into segments. The value of each segment represents a proportion of the total. ","/Charts/Pie/Pie Chart","/ensemble/samples/charts/pie/chart","ensemble.samples.charts.pie.chart.PieChartApp","/ensemble/samples/charts/pie/chart/preview.png",new String[]{"/ensemble/samples/charts/pie/chart/PieChartApp.java",},new String[]{"javafx.scene.chart.PieChart",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/chart/PieChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty("chart","clockwise"),new PlaygroundProperty("chart","labelLineLength"),new PlaygroundProperty("chart","labelsVisible"),new PlaygroundProperty("chart","startAngle","max","360"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_29 = new SampleInfo("Drilldown Pie Chart","A pie chart that provides the ability to drill down through data. Selecting a segment in the initial pie chart causes the pie chart to display detailed data for the selected segment. ","/Charts/Pie/Drilldown Pie Chart","/ensemble/samples/charts/pie/drilldown","ensemble.samples.charts.pie.drilldown.DrilldownPieChartApp","/ensemble/samples/charts/pie/drilldown/preview.png",new String[]{"/ensemble/samples/charts/pie/drilldown/DrilldownChart.css","/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java",},new String[]{"javafx.event.EventHandler","javafx.scene.chart.PieChart","javafx.scene.input.MouseEvent",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_30 = new SampleInfo("Live Scatter Chart","A live scatter chart. ","/Charts/Scatter/Live Scatter Chart","/ensemble/samples/charts/scatter/animated","ensemble.samples.charts.scatter.animated.LiveScatterChartApp","/ensemble/samples/charts/scatter/animated/preview.png",new String[]{"/ensemble/samples/charts/scatter/animated/LiveScatterChart.css","/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis","javafx.animation.Timeline","javafx.animation.SequentialTransition",},new String[]{},new String[]{},"/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_31 = new SampleInfo("Scatter Chart","A chart that displays plotted symbols for a series of data points. Useful for viewing the distribution of data to see if there is any pattern, indicating a correlation. ","/Charts/Scatter/Scatter Chart","/ensemble/samples/charts/scatter/chart","ensemble.samples.charts.scatter.chart.ScatterChartApp","/ensemble/samples/charts/scatter/chart/preview.png",new String[]{"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Area/Area Chart",},"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.25"),new PlaygroundProperty("xAxis","upperBound","max","20","step","0.25"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.25"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.25"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_32 = new SampleInfo("Service","A sample showing use of a Service to retrieve data in a background thread. Selecting the Refresh button restarts the Service. ","/Concurrency/Service","/ensemble/samples/concurrency/service","ensemble.samples.concurrency.service.ServiceApp","/ensemble/samples/concurrency/service/preview.png",new String[]{"/ensemble/samples/concurrency/service/DailySales.java","/ensemble/samples/concurrency/service/GetDailySalesService.java","/ensemble/samples/concurrency/service/GetDailySalesTask.java","/ensemble/samples/concurrency/service/ServiceApp.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Service","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/service/ServiceApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_33 = new SampleInfo("Task","A sample showing use of an an asynchronous Task to populate a table. ","/Concurrency/Task","/ensemble/samples/concurrency/task","ensemble.samples.concurrency.task.TaskApp","/ensemble/samples/concurrency/task/preview.png",new String[]{"/ensemble/samples/concurrency/task/DailySales.java","/ensemble/samples/concurrency/task/GetDailySalesTask.java","/ensemble/samples/concurrency/task/TaskApp.java","/ensemble/samples/concurrency/task/TaskApp.java.orig","/ensemble/samples/concurrency/task/TaskApp.java.save",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/task/TaskApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_34 = new SampleInfo("Accordion","An example of an accordion control. You can use accordion controls to define individual panes and  display them one at a time. ","/Controls/Accordion","/ensemble/samples/controls/accordion","ensemble.samples.controls.accordion.AccordionApp","/ensemble/samples/controls/accordion/preview.png",new String[]{"/ensemble/samples/controls/accordion/AccordionApp.java",},new String[]{"javafx.scene.control.Accordion",},new String[]{},new String[]{"/Controls/Toggle Button","/Controls/Toolbar/ToolBar",},"/ensemble/samples/controls/accordion/AccordionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_35 = new SampleInfo("Check Box","An example of CheckBoxes in various states. ","/Controls/Check Box","/ensemble/samples/controls/checkbox","ensemble.samples.controls.checkbox.CheckBoxApp","/ensemble/samples/controls/checkbox/preview.png",new String[]{"/ensemble/samples/controls/checkbox/CheckBoxApp.java",},new String[]{"javafx.scene.control.CheckBox",},new String[]{},new String[]{"/Controls/Radiobutton/Radio Button",},"/ensemble/samples/controls/checkbox/CheckBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_36 = new SampleInfo("ChoiceBox","An example of a ChoiceBox with several options. The ChoiceBox control displays a default or current selection, with an icon to click that expands the list for a selection. ","/Controls/ChoiceBox","/ensemble/samples/controls/choicebox","ensemble.samples.controls.choicebox.ChoiceBoxApp","/ensemble/samples/controls/choicebox/preview.png",new String[]{"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",},new String[]{"javafx.scene.control.ChoiceBox",},new String[]{},new String[]{},"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_37 = new SampleInfo("ColorPicker","A sample that demonstrates the ColorPicker. ","/Controls/ColorPicker","/ensemble/samples/controls/colorpicker","ensemble.samples.controls.colorpicker.ColorPickerApp","/ensemble/samples/controls/colorpicker/preview.png",new String[]{"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",},new String[]{"javafx.scene.control.ColorPicker",},new String[]{},new String[]{},"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_38 = new SampleInfo("HyperLink","A sample that shows a simple hyperlink and a hyperlink with an image. ","/Controls/HyperLink","/ensemble/samples/controls/hyperlink","ensemble.samples.controls.hyperlink.HyperLinkApp","/ensemble/samples/controls/hyperlink/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/hyperlink/HyperLinkApp.java",},new String[]{"javafx.scene.control.Hyperlink",},new String[]{},new String[]{},"/ensemble/samples/controls/hyperlink/HyperLinkApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_39 = new SampleInfo("Menu","An example of a menu bar. The example includes use of the system bar, if the current platform supports a system bar. ","/Controls/Menu","/ensemble/samples/controls/menu","ensemble.samples.controls.menu.MenuApp","/ensemble/samples/controls/menu/preview.png",new String[]{"/ensemble/samples/shared-resources/menuInfo.png","/ensemble/samples/controls/menu/MenuApp.java",},new String[]{"javafx.scene.control.MenuBar","javafx.scene.control.Menu","javafx.scene.control.MenuItem",},new String[]{},new String[]{},"/ensemble/samples/controls/menu/MenuApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_40 = new SampleInfo("Pagination","A sample that demonstrates pagination. ","/Controls/Pagination","/ensemble/samples/controls/pagination","ensemble.samples.controls.pagination.PaginationApp","/ensemble/samples/controls/pagination/preview.png",new String[]{"/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/controls/pagination/PaginationApp.java",},new String[]{"javafx.scene.control.Pagination",},new String[]{},new String[]{},"/ensemble/samples/controls/pagination/PaginationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_41 = new SampleInfo("Progress Bar","A sample that demonstrates the ProgressBar control. ","/Controls/Progress Bar","/ensemble/samples/controls/progressbar","ensemble.samples.controls.progressbar.ProgressBarApp","/ensemble/samples/controls/progressbar/preview.png",new String[]{"/ensemble/samples/controls/progressbar/ProgressBarApp.java",},new String[]{"javafx.scene.control.ProgressBar",},new String[]{},new String[]{"/Controls/Progress Indicator",},"/ensemble/samples/controls/progressbar/ProgressBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_42 = new SampleInfo("Progress Indicator","A sample that demonstrates the Progress Indicator control in various modes. ","/Controls/Progress Indicator","/ensemble/samples/controls/progressindicator","ensemble.samples.controls.progressindicator.ProgressIndicatorApp","/ensemble/samples/controls/progressindicator/preview.png",new String[]{"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",},new String[]{"javafx.scene.control.ProgressIndicator",},new String[]{},new String[]{"/Controls/Progress Bar",},"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_43 = new SampleInfo("Radio Button","An example of radio buttons in various states. ","/Controls/Radio Button","/ensemble/samples/controls/radiobutton","ensemble.samples.controls.radiobutton.RadioButtonApp","/ensemble/samples/controls/radiobutton/preview.png",new String[]{"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",},new String[]{"javafx.scene.control.RadioButton",},new String[]{},new String[]{"/Controls/Check Box",},"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_44 = new SampleInfo("ScrollBar","A sample showing horizontal and vertical scroll bars. ","/Controls/ScrollBar","/ensemble/samples/controls/scrollbar","ensemble.samples.controls.scrollbar.ScrollBarApp","/ensemble/samples/controls/scrollbar/preview.png",new String[]{"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",},new String[]{"javafx.scene.control.ScrollBar",},new String[]{},new String[]{},"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_45 = new SampleInfo("Toggle Button","Toggle buttons in a toggle group. ","/Controls/Toggle Button","/ensemble/samples/controls/togglebutton","ensemble.samples.controls.togglebutton.ToggleButtonApp","/ensemble/samples/controls/togglebutton/preview.png",new String[]{"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Choice Box","/Controls/Accordion","/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_46 = new SampleInfo("TreeView","An implementation of the TreeView control displaying an expandable tree root node. ","/Controls/TreeView","/ensemble/samples/controls/treeview","ensemble.samples.controls.treeview.TreeViewApp","/ensemble/samples/controls/treeview/preview.png",new String[]{"/ensemble/samples/controls/treeview/TreeViewApp.java",},new String[]{"javafx.scene.control.TreeView",},new String[]{},new String[]{},"/ensemble/samples/controls/treeview/TreeViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_47 = new SampleInfo("Colored Buttons","An example of Buttons with different background colors. ","/Controls/Button/Colored Buttons","/ensemble/samples/controls/button/colorbutton","ensemble.samples.controls.button.colorbutton.ColorButtonApp","/ensemble/samples/controls/button/colorbutton/preview.png",new String[]{"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Graphic Button",},"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_48 = new SampleInfo("Graphic Button","A button with an embedded image. ","/Controls/Button/Graphic Button","/ensemble/samples/controls/button/graphicbutton","ensemble.samples.controls.button.graphicbutton.GraphicButtonApp","/ensemble/samples/controls/button/graphicbutton/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Colored Buttons",},"/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_49 = new SampleInfo("Pill Button","This sample demonstrates styling toggle buttons with CSS. ","/Controls/Button/Pill Button","/ensemble/samples/controls/button/pillbutton","ensemble.samples.controls.button.pillbutton.PillButtonApp","/ensemble/samples/controls/button/pillbutton/preview.png",new String[]{"/ensemble/samples/controls/button/pillbutton/PillButton.css","/ensemble/samples/controls/button/pillbutton/PillButtonApp.java",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Button/Toggle Button",},"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_50 = new SampleInfo("HorizontalListView","A sample showing an implementation of the ListView control, in which a list of items is displayed in a horizontal row. ListView is a powerful multi-row control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable non-homogenous row heights. ","/Controls/Listview/HorizontalListView","/ensemble/samples/controls/listview/horizontallistview","ensemble.samples.controls.listview.horizontallistview.HorizontalListViewApp","/ensemble/samples/controls/listview/horizontallistview/preview.png",new String[]{"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/ListViewCellFactory","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_51 = new SampleInfo("ListViewCellFactory","A simple implementation of the ListView control that uses a CellFactory to customize the ListView cell contents. Positive values in the list are green, and negative values are red and enclosed in parentheses. Zero values are black. ","/Controls/Listview/ListViewCellFactory","/ensemble/samples/controls/listview/listviewcellfactory","ensemble.samples.controls.listview.listviewcellfactory.ListViewCellFactoryApp","/ensemble/samples/controls/listview/listviewcellfactory/preview.png",new String[]{"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java","/ensemble/samples/controls/listview/listviewcellfactory/MoneyFormatCell.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_52 = new SampleInfo("Simple ListView","A simple implementation of the ListView control, in which a list of items is displayed vertically.  ListView is a powerful multirow control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable nonhomogenous row heights. ","/Controls/Listview/Simple ListView","/ensemble/samples/controls/listview/simplelistview","ensemble.samples.controls.listview.simplelistview.SimpleListViewApp","/ensemble/samples/controls/listview/simplelistview/preview.png",new String[]{"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/ListViewCellFactory",},"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_53 = new SampleInfo("Hidden SplitPane","A sample that demonstrates styling a hidden split pane with CSS. ","/Controls/Splitpane/Hidden SplitPane","/ensemble/samples/controls/splitpane/hiddensplitpane","ensemble.samples.controls.splitpane.hiddensplitpane.HiddenSplitPaneApp","/ensemble/samples/controls/splitpane/hiddensplitpane/preview.png",new String[]{"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPane.css","/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java",},new String[]{"javafx.scene.control.SplitPane",},new String[]{},new String[]{},"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_54 = new SampleInfo("TabPane","Some implementations of tabs using the TabPane class. ","/Controls/Tab/TabPane","/ensemble/samples/controls/tab/tabpane","ensemble.samples.controls.tab.tabpane.TabPaneApp","/ensemble/samples/controls/tab/tabpane/preview.png",new String[]{"/ensemble/samples/controls/tab/tabpane/tab_16.png","/ensemble/samples/controls/tab/tabpane/TabPaneApp.java",},new String[]{"javafx.scene.control.Tab","javafx.scene.control.TabPane","javafx.scene.control.TabBuilder",},new String[]{},new String[]{},"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_55 = new SampleInfo("TableCellFactory","A simple table that uses cell factories to add a control to a table column and to enable editing of first/last name and email. ","/Controls/Table/TableCellFactory","/ensemble/samples/controls/table/tablecellfactory","ensemble.samples.controls.table.tablecellfactory.TableCellFactoryApp","/ensemble/samples/controls/table/tablecellfactory/preview.png",new String[]{"/ensemble/samples/controls/table/tablecellfactory/CheckBoxTableCell.java","/ensemble/samples/controls/table/tablecellfactory/EditingCell.java","/ensemble/samples/controls/table/tablecellfactory/Person.java","/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",},new String[]{"javafx.scene.control.TableCell","javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_56 = new SampleInfo("TableView","A simple table with a header row. ","/Controls/Table/TableView","/ensemble/samples/controls/table/tableview","ensemble.samples.controls.table.tableview.TableViewApp","/ensemble/samples/controls/table/tableview/preview.png",new String[]{"/ensemble/samples/controls/table/tableview/Person.java","/ensemble/samples/controls/table/tableview/TableViewApp.java",},new String[]{"javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tableview/TableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_57 = new SampleInfo("Advanced Label","Several Label controls, displayed in various alignments with respect to an image. ","/Controls/Text/Advanced Label","/ensemble/samples/controls/text/advancedlabel","ensemble.samples.controls.text.advancedlabel.AdvancedLabelApp","/ensemble/samples/controls/text/advancedlabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Controls/Button/Graphic Button",},"/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_58 = new SampleInfo("Inset Text","A sample that shows styling of text through CSS. ","/Controls/Text/Inset Text","/ensemble/samples/controls/text/insettext","ensemble.samples.controls.text.insettext.InsetTextApp","/ensemble/samples/controls/text/insettext/preview.png",new String[]{"/ensemble/samples/controls/text/insettext/InsetText.css","/ensemble/samples/controls/text/insettext/InsetTextApp.java",},new String[]{"javafx.geometry.Insets","javafx.scene.control.LabelBuilder",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_59 = new SampleInfo("Search Box","A sample that demonstrates use of CSS to create a search box. ","/Controls/Text/Search Box","/ensemble/samples/controls/text/searchbox","ensemble.samples.controls.text.searchbox.SearchBoxApp","/ensemble/samples/controls/text/searchbox/preview.png",new String[]{"/ensemble/samples/controls/text/searchbox/SearchBox.css","/ensemble/samples/controls/text/searchbox/SearchBox.java","/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_60 = new SampleInfo("Simple Label","A simple implementation of the Label control, with an image to the left of the label. ","/Controls/Text/Simple Label","/ensemble/samples/controls/text/simplelabel","ensemble.samples.controls.text.simplelabel.SimpleLabelApp","/ensemble/samples/controls/text/simplelabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Advanced Label","/Controls/Button/Graphic Button","/Controls/Text/Inset Text",},"/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_61 = new SampleInfo("Text Field","Demonstrates a TextField control that allows you to enter text. ","/Controls/Text/Text Field","/ensemble/samples/controls/text/textfield","ensemble.samples.controls.text.textfield.TextFieldApp","/ensemble/samples/controls/text/textfield/preview.png",new String[]{"/ensemble/samples/controls/text/textfield/TextFieldApp.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textfield/TextFieldApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_62 = new SampleInfo("Text Validator","A sample that demonstrates text validation. If the value in the TextField is a small number, the field becomes yellow. If the value in the TextField is not a number, the field becomes red. ","/Controls/Text/Text Validator","/ensemble/samples/controls/text/textvalidator","ensemble.samples.controls.text.textvalidator.TextValidatorApp","/ensemble/samples/controls/text/textvalidator/preview.png",new String[]{"/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java","/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java","/ensemble/samples/controls/text/textvalidator/ValidationEvent.java","/ensemble/samples/controls/text/textvalidator/ValidationResult.java","/ensemble/samples/controls/text/textvalidator/Validator.java","/ensemble/samples/controls/text/textvalidator/ValidatorPane.java","/ensemble/samples/controls/text/textvalidator/Validators.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_63 = new SampleInfo("Styled Tool Bar","A sample that shows three ToolBars, two of which are styled specifically with a separate CSS style sheet. ","/Controls/Toolbar/Styled Tool Bar","/ensemble/samples/controls/toolbar/styledtoolbar","ensemble.samples.controls.toolbar.styledtoolbar.StyledToolBarApp","/ensemble/samples/controls/toolbar/styledtoolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBar.css","/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{"/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_64 = new SampleInfo("Tool Bar","A toolbar with three buttons. ","/Controls/Toolbar/Tool Bar","/ensemble/samples/controls/toolbar/toolbar","ensemble.samples.controls.toolbar.toolbar.ToolBarApp","/ensemble/samples/controls/toolbar/toolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java","/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java.orig","/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java.save",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{},"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_65 = new SampleInfo("Colorful Circles","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Graphics/Colorful Circles","/ensemble/samples/graphics/colorfulcircles","ensemble.samples.graphics.colorfulcircles.ColorfulCirclesApp","/ensemble/samples/graphics/colorfulcircles/preview.png",new String[]{"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",},new String[]{"javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_66 = new SampleInfo("Digital Clock","A digital clock application that demonstrates JavaFX animation, images, and effects. ","/Graphics/Digital Clock","/ensemble/samples/graphics/digitalclock","ensemble.samples.graphics.digitalclock.DigitalClockApp","/ensemble/samples/graphics/digitalclock/preview.png",new String[]{"/ensemble/samples/graphics/digitalclock/Clock.java","/ensemble/samples/graphics/digitalclock/Digit.java","/ensemble/samples/shared-resources/DigitalClock-background.png","/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",},new String[]{"javafx.scene.effect.Glow","javafx.scene.shape.Polygon","javafx.scene.transform.Shear",},new String[]{},new String[]{},"/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_67 = new SampleInfo("Display Shelf","A display shelf of images using the PerspectiveTransform effect. ","/Graphics/Display Shelf","/ensemble/samples/graphics/displayshelf","ensemble.samples.graphics.displayshelf.DisplayShelfApp","/ensemble/samples/graphics/displayshelf/preview.png",new String[]{"/ensemble/samples/graphics/displayshelf/DisplayShelf.java","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/shared-resources/Animal8.jpg","/ensemble/samples/shared-resources/Animal9.jpg","/ensemble/samples/shared-resources/Animal10.jpg","/ensemble/samples/shared-resources/Animal11.jpg","/ensemble/samples/shared-resources/Animal12.jpg","/ensemble/samples/shared-resources/Animal13.jpg","/ensemble/samples/shared-resources/Animal14.jpg","/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java","/ensemble/samples/graphics/displayshelf/PerspectiveImage.java",},new String[]{"javafx.scene.effect.PerspectiveTransform","javafx.scene.effect.Reflection","javafx.scene.control.ScrollBar","javafx.scene.input.MouseEvent","javafx.scene.input.KeyEvent",},new String[]{},new String[]{},"/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_68 = new SampleInfo("Puzzle Pieces","A sample in which an image is broken into pieces to create a jigsaw puzzle. ","/Graphics/Puzzle Pieces","/ensemble/samples/graphics/puzzle","ensemble.samples.graphics.puzzle.PuzzlePiecesApp","/ensemble/samples/graphics/puzzle/preview.png",new String[]{"/ensemble/samples/graphics/puzzle/Desk.java","/ensemble/samples/graphics/puzzle/Piece.java","/ensemble/samples/shared-resources/PuzzlePieces-picture.jpg","/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.control.Button","javafx.scene.layout.Pane","javafx.scene.input.MouseEvent","javafx.scene.effect.DropShadow",},new String[]{},new String[]{},"/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_69 = new SampleInfo("Stopwatch","An animated stopwatch. Click the green button to start the stopwatch and click the red button to stop it. ","/Graphics/Stopwatch","/ensemble/samples/graphics/stopwatch","ensemble.samples.graphics.stopwatch.StopWatchApp","/ensemble/samples/graphics/stopwatch/preview.png",new String[]{"/ensemble/samples/graphics/stopwatch/Dial.java","/ensemble/samples/graphics/stopwatch/DigitalClock.java","/ensemble/samples/graphics/stopwatch/StopWatchApp.java","/ensemble/samples/graphics/stopwatch/StopWatchButton.java","/ensemble/samples/shared-resources/stopwatch.png","/ensemble/samples/graphics/stopwatch/Watch.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.GaussianBlur","javafx.scene.effect.Light","javafx.scene.effect.Lighting","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.shape.Ellipse","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.scene.text.TextAlignment","javafx.scene.text.TextBoundsType","javafx.scene.transform.Rotate","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics/stopwatch/StopWatchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_70 = new SampleInfo("Drop Shadow","A sample that demonstrates how a drop shadow effect is affected by various settings. ","/Graphics/Effects/Drop Shadow","/ensemble/samples/graphics/effects/dropshadow","ensemble.samples.graphics.effects.dropshadow.DropShadowApp","/ensemble/samples/graphics/effects/dropshadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("dropShadow","radius","min","0","max","20","name","Drop Shadow Radius"),new PlaygroundProperty("dropShadow","offsetX","min","-10","max","10","name","Drop Shadow Offset X"),new PlaygroundProperty("dropShadow","offsetY","min","-10","max","10","name","Drop Shadow Offset Y"),new PlaygroundProperty("dropShadow","radius","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_71 = new SampleInfo("Gaussian Blur","A sample that demonstrates a Gaussian blur effect on an image, with varying degrees of blurriness. ","/Graphics/Effects/Gaussian Blur","/ensemble/samples/graphics/effects/gaussianblur","ensemble.samples.graphics.effects.gaussianblur.GaussianBlurApp","/ensemble/samples/graphics/effects/gaussianblur/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",},new String[]{"javafx.scene.effect.GaussianBlur","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",new PlaygroundProperty[]{new PlaygroundProperty("gaussianBlur","radius","min","0","max","15","name","Gaussian Blur Level"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_72 = new SampleInfo("Inner Shadow","A sample that demonstrates how an inner shadow effect is affected by various settings. ","/Graphics/Effects/Inner Shadow","/ensemble/samples/graphics/effects/innershadow","ensemble.samples.graphics.effects.innershadow.InnerShadowApp","/ensemble/samples/graphics/effects/innershadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",},new String[]{"javafx.scene.effect.InnerShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sample","fill","name","Text Fill"),new PlaygroundProperty("innerShadow","radius","min","0","max","20","name","Inner Shadow Radius"),new PlaygroundProperty("innerShadow","offsetX","min","-10","max","10","name","Inner Shadow Offset X"),new PlaygroundProperty("innerShadow","offsetY","min","-10","max","10","name","Inner Shadow Offset Y"),new PlaygroundProperty("innerShadow","color","name","Inner Shadow Color"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_73 = new SampleInfo("Reflection","A sample that demonstrates how a reflection effect is affected by various settings. ","/Graphics/Effects/Reflection","/ensemble/samples/graphics/effects/reflection","ensemble.samples.graphics.effects.reflection.ReflectionApp","/ensemble/samples/graphics/effects/reflection/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",},new String[]{"javafx.scene.effect.Reflection","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",new PlaygroundProperty[]{new PlaygroundProperty("reflection","bottomOpacity","min","0","max","1","name","Reflection Bottom Opacity"),new PlaygroundProperty("reflection","topOpacity","min","0","max","1","name","Reflection Top Opacity"),new PlaygroundProperty("reflection","fraction","min","0","max","1","name","Reflection Fraction"),new PlaygroundProperty("reflection","topOffset","min","-10","max","10","name","Reflection Top Offset"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_74 = new SampleInfo("Sepia Tone","A sample that demonstrates varying degrees of a sepia tone effect. ","/Graphics/Effects/Sepia Tone","/ensemble/samples/graphics/effects/sepiatone","ensemble.samples.graphics.effects.sepiatone.SepiaToneApp","/ensemble/samples/graphics/effects/sepiatone/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",},new String[]{"javafx.scene.effect.SepiaTone","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sepiaTone","level","min","0","max","1","name","SepiaTone Level"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_75 = new SampleInfo("Image Creation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Creation","/ensemble/samples/graphics/images/imagecreation","ensemble.samples.graphics.images.imagecreation.ImageCreationApp","/ensemble/samples/graphics/images/imagecreation/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_76 = new SampleInfo("Image Operation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Operation","/ensemble/samples/graphics/images/imageoperator","ensemble.samples.graphics.images.imageoperator.ImageOperationApp","/ensemble/samples/graphics/images/imageoperator/preview.png",new String[]{"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"gridSize","min","0","max","10","name","Grid Size"),new PlaygroundProperty(null,"hueFactor","min","0","max","32","name","Hue Factor"),new PlaygroundProperty(null,"hueOffset","min","0","max","360","name","Hue Offset"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_77 = new SampleInfo("Image Properties","A sample that demonstrates how to resize images and use the Viewport property. ","/Graphics/Images/Image Properties","/ensemble/samples/graphics/images/imageproperties","ensemble.samples.graphics.images.imageproperties.ImagePropertiesApp","/ensemble/samples/graphics/images/imageproperties/preview.png",new String[]{"/ensemble/samples/shared-resources/sanfran.jpg","/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_78 = new SampleInfo("Color","Rectangles filled with colors. ","/Graphics/Paints/Color","/ensemble/samples/graphics/paints/color","ensemble.samples.graphics.paints.color.ColorApp","/ensemble/samples/graphics/paints/color/preview.png",new String[]{"/ensemble/samples/graphics/paints/color/ColorApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color","javafx.scene.paint.Paint",},new String[]{},new String[]{"/Graphics/Paints/Radial Gradient","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/color/ColorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_79 = new SampleInfo("Linear Gradient","A sample with two rectangles, one filled with a simple linear gradient and one filled with a more complex gradient using the reflection cycle method. ","/Graphics/Paints/Linear Gradient","/ensemble/samples/graphics/paints/lineargradient","ensemble.samples.graphics.paints.lineargradient.LinearGradientApp","/ensemble/samples/graphics/paints/lineargradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",},new String[]{"javafx.scene.paint.LinearGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Radial Gradient",},"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_80 = new SampleInfo("Radial Gradient","A sample that demonstrates two circles, one filled with a simple radial gradient and one filled with a more complex radial gradient. ","/Graphics/Paints/Radial Gradient","/ensemble/samples/graphics/paints/radialgradient","ensemble.samples.graphics.paints.radialgradient.RadialGradientApp","/ensemble/samples/graphics/paints/radialgradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",},new String[]{"javafx.scene.paint.RadialGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_81 = new SampleInfo("Arc","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Arc","/ensemble/samples/graphics/shapes/arc","ensemble.samples.graphics.shapes.arc.ArcApp","/ensemble/samples/graphics/shapes/arc/preview.png",new String[]{"/ensemble/samples/graphics/shapes/arc/ArcApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/arc/ArcApp.java",new PlaygroundProperty[]{new PlaygroundProperty("arc1","fill","name","Arc1 Fill"),new PlaygroundProperty("arc1","startAngle","min","0","max","360","name","Arc 1 Start Angle"),new PlaygroundProperty("arc1","length","min","0","max","360","name","Arc 1 Length"),new PlaygroundProperty("arc2","stroke","name","Arc 2 Stroke"),new PlaygroundProperty("arc2","strokeWidth","min","0","max","5","name","Arc 2 Stroke Width"),new PlaygroundProperty("arc2","radiusX","min","0","max","50","name","Arc 2 Radius X"),new PlaygroundProperty("arc2","radiusY","min","0","max","50","name","Arc 2 Radius Y"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_82 = new SampleInfo("Circle","A sample showing two circles with controls to change fill, stroke, and radius. ","/Graphics/Shapes/Circle","/ensemble/samples/graphics/shapes/circle","ensemble.samples.graphics.shapes.circle.CircleApp","/ensemble/samples/graphics/shapes/circle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/circle/CircleApp.java",},new String[]{"javafx.scene.shape.Circle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Arc","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/circle/CircleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("circle1","fill","name","Circle 1 Fill"),new PlaygroundProperty("circle1","radius","min","10","max","40","name","Circle 1 Radius"),new PlaygroundProperty("circle2","stroke","name","Circle 1 Stroke"),new PlaygroundProperty("circle2","strokeWidth","min","1","max","5","name","Circle 2 Stroke Width"),new PlaygroundProperty("circle2","radius","min","10","max","40","name","Circle 2 Radius"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_83 = new SampleInfo("Cubic Curve","A sample showing how various settings change a cubic B??zier parametric curve. ","/Graphics/Shapes/Cubic Curve","/ensemble/samples/graphics/shapes/cubiccurve","ensemble.samples.graphics.shapes.cubiccurve.CubicCurveApp","/ensemble/samples/graphics/shapes/cubiccurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",},new String[]{"javafx.scene.shape.CubicCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("cubicCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("cubicCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("cubicCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("cubicCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("cubicCurve","controlX1","min","0","max","180","name","Cubic Curve Control X1"),new PlaygroundProperty("cubicCurve","controlY1","min","0","max","90","name","Cubic Curve Control Y1"),new PlaygroundProperty("cubicCurve","controlX2","min","0","max","180","name","Cubic Curve Control X2"),new PlaygroundProperty("cubicCurve","controlY2","min","0","max","90","name","Cubic Curve Control Y2"),new PlaygroundProperty("cubicCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("cubicCurve","endY","min","0","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_84 = new SampleInfo("Ellipse","A sample that demonstrates how various settings affect two elliptical shapes. ","/Graphics/Shapes/Ellipse","/ensemble/samples/graphics/shapes/ellipse","ensemble.samples.graphics.shapes.ellipse.EllipseApp","/ensemble/samples/graphics/shapes/ellipse/preview.png",new String[]{"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",},new String[]{"javafx.scene.shape.Ellipse","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Arc",},"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",new PlaygroundProperty[]{new PlaygroundProperty("ellipse1","fill","name","Ellipse 1 Fill"),new PlaygroundProperty("ellipse1","radiusX","min","10","max","40","name","Ellipse 1 Width"),new PlaygroundProperty("ellipse1","radiusY","min","10","max","45","name","Ellipse 1 Height"),new PlaygroundProperty("ellipse2","stroke","name","Ellipse 2 Stroke"),new PlaygroundProperty("ellipse2","strokeWidth","min","1","max","5","name","Ellipse 2 Stroke Width"),new PlaygroundProperty("ellipse2","radiusX","min","10","max","40","name","Ellipse 2 Width"),new PlaygroundProperty("ellipse2","radiusY","min","10","max","45","name","Ellipse 2 Height"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_85 = new SampleInfo("Line","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Line","/ensemble/samples/graphics/shapes/line","ensemble.samples.graphics.shapes.line.LineApp","/ensemble/samples/graphics/shapes/line/preview.png",new String[]{"/ensemble/samples/graphics/shapes/line/LineApp.java",},new String[]{"javafx.scene.shape.Line","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/line/LineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("exampleLine","startX","min","50","max","550"),new PlaygroundProperty("exampleLine","startY","min","50","max","350"),new PlaygroundProperty("exampleLine","endX","min","50","max","550"),new PlaygroundProperty("exampleLine","endY","min","50","max","350"),new PlaygroundProperty("exampleLine","stroke"),new PlaygroundProperty("exampleLine","strokeWidth","min","0.1","max","50"),new PlaygroundProperty("exampleLine","strokeLineCap"),new PlaygroundProperty("exampleLine","getStrokeDashArray"),new PlaygroundProperty("exampleLine","strokeDashOffset","min","0","max","500"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_86 = new SampleInfo("Path","A sample that demonstrates two path shapes. ","/Graphics/Shapes/Path","/ensemble/samples/graphics/shapes/path","ensemble.samples.graphics.shapes.path.PathApp","/ensemble/samples/graphics/shapes/path/preview.png",new String[]{"/ensemble/samples/graphics/shapes/path/PathApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.shape.ArcTo","javafx.scene.shape.ClosePath","javafx.scene.shape.CubicCurveTo","javafx.scene.shape.HLineTo","javafx.scene.shape.LineTo","javafx.scene.shape.MoveTo","javafx.scene.shape.QuadCurveTo","javafx.scene.shape.VLineTo","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/path/PathApp.java",new PlaygroundProperty[]{new PlaygroundProperty("path1","stroke","name","Path 1 Stroke"),new PlaygroundProperty("path2","stroke","name","Path 2 Stroke"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_87 = new SampleInfo("Polygon","A sample that demonstrates polygon construction. ","/Graphics/Shapes/Polygon","/ensemble/samples/graphics/shapes/polygon","ensemble.samples.graphics.shapes.polygon.PolygonApp","/ensemble/samples/graphics/shapes/polygon/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",},new String[]{"javafx.scene.shape.Polygon","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polygon1","fill","name","Polygon 1 Fill"),new PlaygroundProperty("polygon2","stroke","name","Polygon 2 Stroke"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_88 = new SampleInfo("Polyline","A sample that demonstrates polyline construction with stroke and fill. ","/Graphics/Shapes/Polyline","/ensemble/samples/graphics/shapes/polyline","ensemble.samples.graphics.shapes.polyline.PolylineApp","/ensemble/samples/graphics/shapes/polyline/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",},new String[]{"javafx.scene.shape.Polyline","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polyline1","fill","name","Polyline 1 Fill"),new PlaygroundProperty("polyline1","stroke","name","Polyline 1 Stroke"),new PlaygroundProperty("polyline2","stroke","name","Polyline 2 Stroke"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_89 = new SampleInfo("Quad Curve","An example of how various settings affect a quadratic B??zier parametric curve. ","/Graphics/Shapes/Quad Curve","/ensemble/samples/graphics/shapes/quadcurve","ensemble.samples.graphics.shapes.quadcurve.QuadCurveApp","/ensemble/samples/graphics/shapes/quadcurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",},new String[]{"javafx.scene.shape.QuadCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("quadCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("quadCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("quadCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("quadCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("quadCurve","controlX","min","0","max","180","name","Cubic Curve Control X"),new PlaygroundProperty("quadCurve","controlY","min","0","max","90","name","Cubic Curve Control Y"),new PlaygroundProperty("quadCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("quadCurve","endY","min","10","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_90 = new SampleInfo("Rectangle","A sample showing how various settings effect two rectangles. ","/Graphics/Shapes/Rectangle","/ensemble/samples/graphics/shapes/rectangle","ensemble.samples.graphics.shapes.rectangle.RectangleApp","/ensemble/samples/graphics/shapes/rectangle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",},new String[]{"javafx.scene.shape.Rectangle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rect1","fill","name","Rectangle 1 Fill"),new PlaygroundProperty("rect1","width","min","10","max","50","name","Rectangle 1 Width"),new PlaygroundProperty("rect1","height","min","10","max","50","name","Rectangle 1 Height"),new PlaygroundProperty("rect1","arcWidth","min","0","max","50","name","Rectangle 1 Arc Width"),new PlaygroundProperty("rect1","arcHeight","min","0","max","50","name","Rectangle 1 Arc Height"),new PlaygroundProperty("rect2","stroke","name","Rectangle 2 Stroke"),new PlaygroundProperty("rect2","strokeWidth","min","1","max","5","name","Rectangle 2 Stroke Width"),new PlaygroundProperty("rect2","width","min","10","max","50","name","Rectangle 2 Width"),new PlaygroundProperty("rect2","height","min","10","max","50","name","Rectangle 2 Height"),new PlaygroundProperty("rect2","arcWidth","min","0","max","50","name","Rectangle 2 Arc Width"),new PlaygroundProperty("rect2","arcHeight","min","0","max","50","name","Rectangle 2 Arc Height"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_91 = new SampleInfo("3D Cubes","A sample that demonstrates an animated rotation of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/3D Cubes","/ensemble/samples/graphics3d/cube","ensemble.samples.graphics3d.cube.CubeApp","/ensemble/samples/graphics3d/cube/preview.png",new String[]{"/ensemble/samples/graphics3d/cube/Cube.java","/ensemble/samples/graphics3d/cube/CubeApp.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_92 = new SampleInfo("3D Cube System","A sample that demonstrates an animated rotation of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/3D Cube System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.CubeSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/Cube.java","/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Xform.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_93 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/preview.png",new String[]{"/ensemble/samples/graphics3d/xylophone/Cube.java","/ensemble/samples/graphics3d/xylophone/Xform.java","/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_94 = new SampleInfo("ChangeListener","A sample that demonstrates how to add or remove a change listener on a node (for example, a Rectangle node) for some property (for example, Rectangle.hover). Once you add a listener, the text field  shows the hover property change. ","/Language/Beans/ChangeListener","/ensemble/samples/language/beans/changelistener","ensemble.samples.language.beans.changelistener.ChangeListenerApp","/ensemble/samples/language/beans/changelistener/preview.png",new String[]{"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.beans.InvalidationListener","javafx.beans.value.ObservableValue",},new String[]{},new String[]{},"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_95 = new SampleInfo("String Binding","A sample that demonstrates how to bind text properties so the value of the bound property is updated automatically when the value of the original property is changed. ","/Language/Beans/String Binding","/ensemble/samples/language/beans/stringbinding","ensemble.samples.language.beans.stringbinding.StringBindingApp","/ensemble/samples/language/beans/stringbinding/preview.png",new String[]{"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",},new String[]{"javafx.beans.binding.StringBinding","javafx.scene.control.TextField","javafx.scene.control.Label",},new String[]{},new String[]{},"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_96 = new SampleInfo("ObservableList","A sample that demonstrates the ObservableList interface, which extends the java.util.List interface. Click the button to change an integer to a new random number in a random position in the list. Once you add a listener, the index of the changed number is displayed to the left of the list. ","/Language/Collections/ObservableList","/ensemble/samples/language/collections/observablelist","ensemble.samples.language.collections.observablelist.ObservableListApp","/ensemble/samples/language/collections/observablelist/preview.png",new String[]{"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.collections.FXCollections","javafx.collections.ListChangeListener","javafx.collections.ObservableList",},new String[]{},new String[]{},"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_97 = new SampleInfo("AnchorPane","A simple example of an AnchorPane layout. ","/Layout/AnchorPane","/ensemble/samples/layout/anchorpane","ensemble.samples.layout.anchorpane.AnchorPaneApp","/ensemble/samples/layout/anchorpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",},new String[]{"javafx.scene.layout.AnchorPane","javafx.collections.ObservableList",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_98 = new SampleInfo("BorderPane","An example of  a BorderPane layout, with placement of children in the top, left, center, right, and bottom positions. ","/Layout/BorderPane","/ensemble/samples/layout/borderpane","ensemble.samples.layout.borderpane.BorderPaneApp","/ensemble/samples/layout/borderpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/borderpane/BorderPaneApp.java",},new String[]{"javafx.scene.layout.BorderPane",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Graphics/Images/Image Creation",},"/ensemble/samples/layout/borderpane/BorderPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_99 = new SampleInfo("FlowPane","A simple example of a FlowPane layout. ","/Layout/FlowPane","/ensemble/samples/layout/flowpane","ensemble.samples.layout.flowpane.FlowPaneApp","/ensemble/samples/layout/flowpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/shared-resources/icon-68x68.png","/ensemble/samples/shared-resources/icon-88x88.png","/ensemble/samples/layout/flowpane/FlowPaneApp.java",},new String[]{"javafx.scene.layout.FlowPane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/flowpane/FlowPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_100 = new SampleInfo("GridPane","An example of a GridPane layout. There is more than one approach to using a GridPane. The code can specify which rows and/or columns should contain the content. Alternatively, the code can alter the constraints of the rows and/or columns themselves, either by specifying the preferred minimum or  maximum heights or widths, or by specifying the percentage of the GridPane that belongs to certain rows or columns.  Note that grid lines can be made visible to help in debugging. ","/Layout/GridPane","/ensemble/samples/layout/gridpane","ensemble.samples.layout.gridpane.GridPaneApp","/ensemble/samples/layout/gridpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/gridpane/GridPaneApp.java",},new String[]{"javafx.scene.layout.GridPane",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/gridpane/GridPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_101 = new SampleInfo("HBox","A simple example of an HBox layout. ","/Layout/HBox","/ensemble/samples/layout/hbox","ensemble.samples.layout.hbox.HBoxApp","/ensemble/samples/layout/hbox/preview.png",new String[]{"/ensemble/samples/layout/hbox/HBoxApp.java",},new String[]{"javafx.scene.layout.HBox",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/layout/hbox/HBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_102 = new SampleInfo("StackPane","A simple example of a StackPane layout. ","/Layout/StackPane","/ensemble/samples/layout/stackpane","ensemble.samples.layout.stackpane.StackPaneApp","/ensemble/samples/layout/stackpane/preview.png",new String[]{"/ensemble/samples/layout/stackpane/StackPaneApp.java",},new String[]{"javafx.scene.layout.StackPane",},new String[]{},new String[]{},"/ensemble/samples/layout/stackpane/StackPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_103 = new SampleInfo("TilePane","An example of a TilePane layout. ","/Layout/TilePane","/ensemble/samples/layout/tilepane","ensemble.samples.layout.tilepane.TilePaneApp","/ensemble/samples/layout/tilepane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/tilepane/TilePaneApp.java",},new String[]{"javafx.scene.layout.TilePane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/tilepane/TilePaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_104 = new SampleInfo("VBox","A simple example of a VBox layout. ","/Layout/VBox","/ensemble/samples/layout/vbox","ensemble.samples.layout.vbox.VBoxApp","/ensemble/samples/layout/vbox/preview.png",new String[]{"/ensemble/samples/layout/vbox/VBoxApp.java",},new String[]{"javafx.scene.layout.VBox",},new String[]{},new String[]{},"/ensemble/samples/layout/vbox/VBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_105 = new SampleInfo("Advanced Media","An advanced media player with controls for play/pause, seek, and volume. ","/Media/Advanced Media","/ensemble/samples/media/advancedmedia","ensemble.samples.media.advancedmedia.AdvancedMediaApp","/ensemble/samples/media/advancedmedia/preview.png",new String[]{"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java","/ensemble/samples/shared-resources/playbutton.png","/ensemble/samples/shared-resources/pausebutton.png","/ensemble/samples/media/advancedmedia/MediaControl.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Alpha Media Player","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_106 = new SampleInfo("Alpha Media Player","An alpha media player with 2 different media views and alpha channels. ","/Media/Alpha Media Player","/ensemble/samples/media/alphamediaplayer","ensemble.samples.media.alphamediaplayer.AlphaMediaPlayerApp","/ensemble/samples/media/alphamediaplayer/preview.png",new String[]{"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayer.css","/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java","/ensemble/samples/media/alphamediaplayer/PlanetaryPlayerPane.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"arthPos","min","-100","max","100","name","Arth Position"),new PlaygroundProperty(null,"fierPos","min","-100","max","100","name","Fier Position"),new PlaygroundProperty(null,"arthRate","min","0.1","max","1","name","Arth Rate"),new PlaygroundProperty(null,"fierRate","min","0.1","max","1","name","Fier Rate"),},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_107 = new SampleInfo("Audio Clip","A sample that demonstrates the basics of AudioClips. ","/Media/Audio Clip","/ensemble/samples/media/audioclip","ensemble.samples.media.audioclip.AudioClipApp","/ensemble/samples/media/audioclip/preview.png",new String[]{"/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/media/audioclip/AudioClipApp.java",},new String[]{"javafx.scene.media.AudioClip",},new String[]{},new String[]{"/Graphics3d/Xylophone",},"/ensemble/samples/media/audioclip/AudioClipApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_108 = new SampleInfo("Overlay Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player also demonstrates overlaying the player controls on top of the media. ","/Media/Overlay Media Player","/ensemble/samples/media/overlaymediaplayer","ensemble.samples.media.overlaymediaplayer.OverlayMediaPlayerApp","/ensemble/samples/media/overlaymediaplayer/preview.png",new String[]{"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayer.css","/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java","/ensemble/samples/media/overlaymediaplayer/PlayerPane.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_109 = new SampleInfo("Streaming Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player is playing media via HTTP Live Streaming, also known as HLS. ","/Media/Streaming Media Player","/ensemble/samples/media/streamingmediaplayer","ensemble.samples.media.streamingmediaplayer.StreamingMediaPlayerApp","/ensemble/samples/media/streamingmediaplayer/preview.png",new String[]{"/ensemble/samples/media/streamingmediaplayer/PlayerPane.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Overlay Media Player",},"/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_110 = new SampleInfo("Cursor","A sample that demonstrates changing the cursor icon. ","/Scenegraph/Events/Cursor","/ensemble/samples/scenegraph/events/cursor","ensemble.samples.scenegraph.events.cursor.CursorApp","/ensemble/samples/scenegraph/events/cursor/preview.png",new String[]{"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",},new String[]{"javafx.scene.Cursor",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_111 = new SampleInfo("KeyEvent","A sample that demonstrates various key events and their usage. Type in the text box to view the triggered events: key pressed, key typed and key released. Pressing the Shift, Ctrl, and Alt keys also trigger events. ","/Scenegraph/Events/KeyEvent","/ensemble/samples/scenegraph/events/keyevent","ensemble.samples.scenegraph.events.keyevent.KeyEventApp","/ensemble/samples/scenegraph/events/keyevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",},new String[]{"javafx.scene.input.KeyCode","javafx.scene.input.KeyEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_112 = new SampleInfo("Key Stroke Motion","An example of animation generated from key events. Click the grey area to give it focus and try typing letters. ","/Scenegraph/Events/Key Stroke Motion","/ensemble/samples/scenegraph/events/keystrokemotion","ensemble.samples.scenegraph.events.keystrokemotion.KeyStrokeMotionApp","/ensemble/samples/scenegraph/events/keystrokemotion/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java","/ensemble/samples/scenegraph/events/keystrokemotion/LettersPane.java",},new String[]{"javafx.scene.input.KeyEvent","javafx.animation.Interpolator",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_113 = new SampleInfo("MouseEvent","A sample that demonstrates various mouse and scroll events and their usage. Click the circles and drag them across the screen. Scroll the whole screen. All events are logged to the console. ","/Scenegraph/Events/MouseEvent","/ensemble/samples/scenegraph/events/mouseevent","ensemble.samples.scenegraph.events.mouseevent.MouseEventApp","/ensemble/samples/scenegraph/events/mouseevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",},new String[]{"javafx.scene.Cursor","javafx.scene.input.MouseEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_114 = new SampleInfo("Multi-Touch","A sample that demonstrates multi-touch support. You can zoom in and out of the images and also rotate the images with multi-touch. ","/Scenegraph/Events/Multi-Touch","/ensemble/samples/scenegraph/events/multitouch","ensemble.samples.scenegraph.events.multitouch.MultiTouchApp","/ensemble/samples/scenegraph/events/multitouch/preview.png",new String[]{"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java","/ensemble/samples/scenegraph/events/multitouch/MultiTouchImageView.java","/ensemble/samples/shared-resources/warning.png","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/scenegraph/events/multitouch/MultiTouchPane.java",},new String[]{"javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.scene.input.RotateEvent","javafx.scene.input.ZoomEvent",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.INPUT_MULTITOUCH,});
-    private static final SampleInfo SAMPLE_115 = new SampleInfo("Custom Node","A sample that demonstrates how to create a custom node by extending the Parent class. ","/Scenegraph/Node/Custom Node","/ensemble/samples/scenegraph/node/customnode","ensemble.samples.scenegraph.node.customnode.CustomNodeApp","/ensemble/samples/scenegraph/node/customnode/preview.png",new String[]{"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java","/ensemble/samples/scenegraph/node/customnode/MyNode.java",},new String[]{"javafx.scene.Parent","javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_116 = new SampleInfo("Node Properties","A sample that demonstrates some properties of nodes. Use the radio buttons to send any of the rectangles to the front or back. Use the controls to change opacity or horizontal position. ","/Scenegraph/Node/Node Properties","/ensemble/samples/scenegraph/node/nodeproperties","ensemble.samples.scenegraph.node.nodeproperties.NodePropertiesApp","/ensemble/samples/scenegraph/node/nodeproperties/preview.png",new String[]{"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",},new String[]{"javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rectA","translateX","min","0","max","50","name","Rectangle A translate X"),new PlaygroundProperty("rectB","translateX","min","0","max","50","name","Rectangle B translate X"),new PlaygroundProperty("rectC","translateX","min","0","max","50","name","Rectangle C translate X"),new PlaygroundProperty("rectA","opacity","min","0","max","1","name","Rectangle A Opacity"),new PlaygroundProperty("rectB","opacity","min","0","max","1","name","Rectangle B Opacity"),new PlaygroundProperty("rectC","opacity","min","0","max","1","name","Rectangle C Opacity"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_117 = new SampleInfo("Advanced Stage","A sample with a control that creates a transparent stage that is centered on your desktop. You can drag the stage with your mouse or use the scene controls to minimize or close it. With a transparent stage, you must add your own event handlers to perform these actions. ","/Scenegraph/Stage/Advanced Stage","/ensemble/samples/scenegraph/stage/advancedstage","ensemble.samples.scenegraph.stage.advancedstage.AdvancedStageApp","/ensemble/samples/scenegraph/stage/advancedstage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene","javafx.stage.StageStyle","javafx.application.Platform",},new String[]{},new String[]{"/Scenegraph/Stage/Stage",},"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_118 = new SampleInfo("Stage","A sample with a control that creates a decorated stage that is centered on your desktop. ","/Scenegraph/Stage/Stage","/ensemble/samples/scenegraph/stage/stage","ensemble.samples.scenegraph.stage.stage.StageApp","/ensemble/samples/scenegraph/stage/stage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/stage/StageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene",},new String[]{},new String[]{"/Scenegraph/Stage/Advanced Stage",},"/ensemble/samples/scenegraph/stage/stage/StageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_119 = new SampleInfo("HTML Editor","A sample that demonstrates the HTML Editor. You can make changes to the example text, and the resulting generated HTML is displayed. ","/Web/HTML Editor","/ensemble/samples/web/htmleditor","ensemble.samples.web.htmleditor.HTMLEditorApp","/ensemble/samples/web/htmleditor/preview.png",new String[]{"/ensemble/samples/web/htmleditor/HTMLEditorApp.java","/ensemble/samples/web/htmleditor/HTMLEditorApp.java.orig","/ensemble/samples/web/htmleditor/HTMLEditorApp.java.save",},new String[]{"javafx.scene.web.HTMLEditor",},new String[]{},new String[]{"controls/text/SimpleLabel",},"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_120 = new SampleInfo("WebView","A sample that demonstrates a WebView object accessing a web page. ","/Web/WebView","/ensemble/samples/web/webview","ensemble.samples.web.webview.WebViewApp","/ensemble/samples/web/webview/preview.png",new String[]{"/ensemble/samples/web/webview/WebViewApp.java",},new String[]{"javafx.scene.web.WebView","javafx.scene.web.WebEngine",},new String[]{},new String[]{},"/ensemble/samples/web/webview/WebViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    public static final SampleCategory ROOT = new SampleCategory("ROOT",null,null,new SampleCategory[]{new SampleCategory("Animation",new SampleInfo[]{SAMPLE_0,},new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,},new SampleCategory[]{new SampleCategory("Timeline",new SampleInfo[]{SAMPLE_1,SAMPLE_2,},null,null),new SampleCategory("Transitions",new SampleInfo[]{SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,},null,null),}),new SampleCategory("Canvas",new SampleInfo[]{SAMPLE_13,},new SampleInfo[]{SAMPLE_13,},null),new SampleCategory("Charts",null,new SampleInfo[]{SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,SAMPLE_25,SAMPLE_26,SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,},new SampleCategory[]{new SampleCategory("Area",new SampleInfo[]{SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,},null,null),new SampleCategory("Bar",new SampleInfo[]{SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,},null,null),new SampleCategory("Bubble",new SampleInfo[]{SAMPLE_23,},null,null),new SampleCategory("Custom",new SampleInfo[]{SAMPLE_24,},null,null),new SampleCategory("Line",new SampleInfo[]{SAMPLE_25,SAMPLE_26,SAMPLE_27,},null,null),new SampleCategory("Pie",new SampleInfo[]{SAMPLE_28,SAMPLE_29,},null,null),new SampleCategory("Scatter",new SampleInfo[]{SAMPLE_30,SAMPLE_31,},null,null),}),new SampleCategory("Concurrency",new SampleInfo[]{SAMPLE_32,SAMPLE_33,},new SampleInfo[]{SAMPLE_32,SAMPLE_33,},null),new SampleCategory("Controls",new SampleInfo[]{SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,},new SampleInfo[]{SAMPLE_34,SAMPLE_47,SAMPLE_48,SAMPLE_49,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_50,SAMPLE_51,SAMPLE_52,SAMPLE_39,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_53,SAMPLE_54,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_45,SAMPLE_63,SAMPLE_64,SAMPLE_46,},new SampleCategory[]{new SampleCategory("Button",new SampleInfo[]{SAMPLE_47,SAMPLE_48,SAMPLE_49,},null,null),new SampleCategory("Listview",new SampleInfo[]{SAMPLE_50,SAMPLE_51,SAMPLE_52,},null,null),new SampleCategory("Splitpane",new SampleInfo[]{SAMPLE_53,},null,null),new SampleCategory("Tab",new SampleInfo[]{SAMPLE_54,},null,null),new SampleCategory("Table",new SampleInfo[]{SAMPLE_55,SAMPLE_56,},null,null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,},null,null),new SampleCategory("Toolbar",new SampleInfo[]{SAMPLE_63,SAMPLE_64,},null,null),}),new SampleCategory("Graphics",new SampleInfo[]{SAMPLE_65,SAMPLE_66,SAMPLE_67,SAMPLE_68,SAMPLE_69,},new SampleInfo[]{SAMPLE_65,SAMPLE_66,SAMPLE_67,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_74,SAMPLE_75,SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_68,SAMPLE_81,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_69,},new SampleCategory[]{new SampleCategory("Effects",new SampleInfo[]{SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_74,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_75,SAMPLE_76,SAMPLE_77,},null,null),new SampleCategory("Paints",new SampleInfo[]{SAMPLE_78,SAMPLE_79,SAMPLE_80,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_81,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_91,SAMPLE_92,SAMPLE_93,},new SampleInfo[]{SAMPLE_91,SAMPLE_92,SAMPLE_93,},null),new SampleCategory("Language",null,new SampleInfo[]{SAMPLE_94,SAMPLE_95,SAMPLE_96,},new SampleCategory[]{new SampleCategory("Beans",new SampleInfo[]{SAMPLE_94,SAMPLE_95,},null,null),new SampleCategory("Collections",new SampleInfo[]{SAMPLE_96,},null,null),}),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,SAMPLE_103,SAMPLE_104,},new SampleInfo[]{SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,SAMPLE_103,SAMPLE_104,},null),new SampleCategory("Media",new SampleInfo[]{SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,},new SampleInfo[]{SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,},null),new SampleCategory("Scenegraph",null,new SampleInfo[]{SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,SAMPLE_117,SAMPLE_118,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_113,SAMPLE_114,},null,null),new SampleCategory("Node",new SampleInfo[]{SAMPLE_115,SAMPLE_116,},null,null),new SampleCategory("Stage",new SampleInfo[]{SAMPLE_117,SAMPLE_118,},null,null),}),new SampleCategory("Web",new SampleInfo[]{SAMPLE_119,SAMPLE_120,},new SampleInfo[]{SAMPLE_119,SAMPLE_120,},null),});
-    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_24,SAMPLE_107,};
-    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(155);
+    private static final SampleInfo SAMPLE_0 = new SampleInfo("Pie Chart","A circular chart divided into segments. The value of each segment represents a proportion of the total. ","/Charts/Pie/Pie Chart","/ensemble/samples/charts/pie/chart","ensemble.samples.charts.pie.chart.PieChartApp","/ensemble/samples/charts/pie/chart/preview.png",new String[]{"/ensemble/samples/charts/pie/chart/PieChartApp.java",},new String[]{"javafx.scene.chart.PieChart",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/chart/PieChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty("chart","clockwise"),new PlaygroundProperty("chart","labelLineLength"),new PlaygroundProperty("chart","labelsVisible"),new PlaygroundProperty("chart","startAngle","max","360"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_1 = new SampleInfo("Drilldown Pie Chart","A pie chart that provides the ability to drill down through data. Selecting a segment in the initial pie chart causes the pie chart to display detailed data for the selected segment. ","/Charts/Pie/Drilldown Pie Chart","/ensemble/samples/charts/pie/drilldown","ensemble.samples.charts.pie.drilldown.DrilldownPieChartApp","/ensemble/samples/charts/pie/drilldown/preview.png",new String[]{"/ensemble/samples/charts/pie/drilldown/DrilldownChart.css","/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java",},new String[]{"javafx.event.EventHandler","javafx.scene.chart.PieChart","javafx.scene.input.MouseEvent",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_2 = new SampleInfo("Bubble Chart","An advanced bubble chart with a variety of actions and settable properties. ","/Charts/Bubble/Bubble Chart","/ensemble/samples/charts/bubble/chart","ensemble.samples.charts.bubble.chart.BubbleChartApp","/ensemble/samples/charts/bubble/chart/preview.png",new String[]{"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",},new String[]{"javafx.scene.chart.BubbleChart","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_3 = new SampleInfo("Audio Area Chart","An area chart that shows audio spectrum of a music file being played. ","/Charts/Area/Audio Area Chart","/ensemble/samples/charts/area/audio","ensemble.samples.charts.area.audio.AudioAreaChartApp","/ensemble/samples/charts/area/audio/preview.png",new String[]{"/ensemble/samples/charts/area/audio/AudioAreaChart.css","/ensemble/samples/charts/area/audio/AudioAreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/area/audio/AudioAreaChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_4 = new SampleInfo("Stacked Area Chart","A sample that displays data in a stacked area chart. ","/Charts/Area/Stacked Area Chart","/ensemble/samples/charts/area/stacked","ensemble.samples.charts.area.stacked.StackedAreaChartApp","/ensemble/samples/charts/area/stacked/preview.png",new String[]{"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",},new String[]{"javafx.scene.chart.StackedAreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","20","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","40","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_5 = new SampleInfo("Curve-Fitted Area Chart","An area chart that demonstrates curve fitting. Styling is done through CSS. ","/Charts/Area/Curve-Fitted Area Chart","/ensemble/samples/charts/area/curvefitted","ensemble.samples.charts.area.curvefitted.CurveFittedAreaChartApp","/ensemble/samples/charts/area/curvefitted/preview.png",new String[]{"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.css","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","1000","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-1000","max","2000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","1000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_6 = new SampleInfo("Area Chart","A chart that fills in the area between a line of data points and the axes. Good for comparing accumulated totals over time. ","/Charts/Area/Area Chart","/ensemble/samples/charts/area/chart","ensemble.samples.charts.area.chart.AreaChartApp","/ensemble/samples/charts/area/chart/preview.png",new String[]{"/ensemble/samples/charts/area/chart/AreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/area/chart/AreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_7 = new SampleInfo("Stock Line Chart","A simulated stock line chart. ","/Charts/Line/Stock Line Chart","/ensemble/samples/charts/line/stock","ensemble.samples.charts.line.stock.StockLineChartApp","/ensemble/samples/charts/line/stock/preview.png",new String[]{"/ensemble/samples/charts/line/stock/StockLineChartApp.java","/ensemble/samples/charts/line/stock/StockLineChart.css",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/stock/StockLineChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_8 = new SampleInfo("Line Chart","A chart in which lines connect a series of data points. Useful for viewing data trends over time. ","/Charts/Line/Line Chart","/ensemble/samples/charts/line/chart","ensemble.samples.charts.line.chart.LineChartApp","/ensemble/samples/charts/line/chart/preview.png",new String[]{"/ensemble/samples/charts/line/chart/LineChartApp.java",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/line/chart/LineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.2"),new PlaygroundProperty("xAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("xAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.2"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("yAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_9 = new SampleInfo("Category Line Chart","A line chart demonstrating a CategoryAxis implementation. ","/Charts/Line/Category Line Chart","/ensemble/samples/charts/line/category","ensemble.samples.charts.line.category.CategoryLineChartApp","/ensemble/samples/charts/line/category/preview.png",new String[]{"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",},new String[]{"javafx.scene.chart.CategoryAxis","javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_10 = new SampleInfo("Audio Bar Chart","Bar chart that shows audio spectrum of a music file being played. ","/Charts/Bar/Audio Bar Chart","/ensemble/samples/charts/bar/audio","ensemble.samples.charts.bar.audio.AudioBarChartApp","/ensemble/samples/charts/bar/audio/preview.png",new String[]{"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java","/ensemble/samples/charts/bar/audio/AudioBarChart.css",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.Chart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_11 = new SampleInfo("Horizontal Bar Chart","Horizontal bar chart with a variety of actions and settable properties for experimenting with the charts features. ","/Charts/Bar/Horizontal Bar Chart","/ensemble/samples/charts/bar/horizontal","ensemble.samples.charts.bar.horizontal.HorizontalBarChartApp","/ensemble/samples/charts/bar/horizontal/preview.png",new String[]{"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("xAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","gapStartAndEnd"),new PlaygroundProperty("yAxis","startMargin"),new PlaygroundProperty("yAxis","endMargin"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_12 = new SampleInfo("Stacked Bar Chart","A sample that displays data in a stacked bar chart. ","/Charts/Bar/Stacked Bar Chart","/ensemble/samples/charts/bar/stacked","ensemble.samples.charts.bar.stacked.StackedBarChartApp","/ensemble/samples/charts/bar/stacked/preview.png",new String[]{"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",},new String[]{"javafx.scene.chart.StackedBarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Bar/Bar Chart",},"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-3000","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","8000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","5000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_13 = new SampleInfo("Image Bar Chart","A bar chart that uses CSS to display stacks of car images to indicate data values for categories. ","/Charts/Bar/Image Bar Chart","/ensemble/samples/charts/bar/image","ensemble.samples.charts.bar.image.ImageBarChartApp","/ensemble/samples/charts/bar/image/preview.png",new String[]{"/ensemble/samples/charts/bar/image/suv-s.png","/ensemble/samples/charts/bar/image/ImageBarChart.css","/ensemble/samples/charts/bar/image/sedan-s.png","/ensemble/samples/charts/bar/image/ImageBarChartApp.java","/ensemble/samples/charts/bar/image/van-s.png","/ensemble/samples/charts/bar/image/truck-s.png",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/image/ImageBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_14 = new SampleInfo("Bar Chart","A chart that displays rectangular bars with heights indicating data values for categories. Used for displaying information when at least one axis has discontinuous or discrete data. ","/Charts/Bar/Bar Chart","/ensemble/samples/charts/bar/chart","ensemble.samples.charts.bar.chart.BarChartApp","/ensemble/samples/charts/bar/chart/preview.png",new String[]{"/ensemble/samples/charts/bar/chart/BarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/bar/chart/BarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("yAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_15 = new SampleInfo("Live Scatter Chart","A live scatter chart. ","/Charts/Scatter/Live Scatter Chart","/ensemble/samples/charts/scatter/animated","ensemble.samples.charts.scatter.animated.LiveScatterChartApp","/ensemble/samples/charts/scatter/animated/preview.png",new String[]{"/ensemble/samples/charts/scatter/animated/LiveScatterChart.css","/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis","javafx.animation.Timeline","javafx.animation.SequentialTransition",},new String[]{},new String[]{},"/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_16 = new SampleInfo("Scatter Chart","A chart that displays plotted symbols for a series of data points. Useful for viewing the distribution of data to see if there is any pattern, indicating a correlation. ","/Charts/Scatter/Scatter Chart","/ensemble/samples/charts/scatter/chart","ensemble.samples.charts.scatter.chart.ScatterChartApp","/ensemble/samples/charts/scatter/chart/preview.png",new String[]{"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Area/Area Chart",},"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.25"),new PlaygroundProperty("xAxis","upperBound","max","20","step","0.25"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.25"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.25"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_17 = new SampleInfo("Candle Stick Chart","A custom candlestick chart. This sample shows how to extend XYChart base class to create your own two axis chart type. ","/Charts/Custom/Candle Stick Chart","/ensemble/samples/charts/custom/candlestick","ensemble.samples.charts.custom.candlestick.CandleStickChartApp","/ensemble/samples/charts/custom/candlestick/preview.png",new String[]{"/ensemble/samples/charts/custom/candlestick/CandleStickExtraValues.java","/ensemble/samples/charts/custom/candlestick/TooltipContent.java","/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java","/ensemble/samples/charts/custom/candlestick/Candle.java","/ensemble/samples/charts/custom/candlestick/CandleStickChart.css","/ensemble/samples/charts/custom/candlestick/CandleStickChart.java",},new String[]{"javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Scatter/Scatter Chart","/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","30","step","1"),new PlaygroundProperty("yAxis","upperBound","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","0.5"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_18 = new SampleInfo("Task","A sample showing use of an an asynchronous Task to populate a table. ","/Concurrency/Task","/ensemble/samples/concurrency/task","ensemble.samples.concurrency.task.TaskApp","/ensemble/samples/concurrency/task/preview.png",new String[]{"/ensemble/samples/concurrency/task/GetDailySalesTask.java","/ensemble/samples/concurrency/task/TaskApp.java","/ensemble/samples/concurrency/task/DailySales.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/task/TaskApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_19 = new SampleInfo("Service","A sample showing use of a Service to retrieve data in a background thread. Selecting the Refresh button restarts the Service. ","/Concurrency/Service","/ensemble/samples/concurrency/service","ensemble.samples.concurrency.service.ServiceApp","/ensemble/samples/concurrency/service/preview.png",new String[]{"/ensemble/samples/concurrency/service/ServiceApp.java","/ensemble/samples/concurrency/service/GetDailySalesService.java","/ensemble/samples/concurrency/service/GetDailySalesTask.java","/ensemble/samples/concurrency/service/DailySales.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Service","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/service/ServiceApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_20 = new SampleInfo("Audio Clip","A sample that demonstrates the basics of AudioClips. ","/Media/Audio Clip","/ensemble/samples/media/audioclip","ensemble.samples.media.audioclip.AudioClipApp","/ensemble/samples/media/audioclip/preview.png",new String[]{"/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/media/audioclip/AudioClipApp.java",},new String[]{"javafx.scene.media.AudioClip",},new String[]{},new String[]{"/Graphics3d/Xylophone",},"/ensemble/samples/media/audioclip/AudioClipApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_21 = new SampleInfo("Advanced Media","An advanced media player with controls for play/pause, seek, and volume. ","/Media/Advanced Media","/ensemble/samples/media/advancedmedia","ensemble.samples.media.advancedmedia.AdvancedMediaApp","/ensemble/samples/media/advancedmedia/preview.png",new String[]{"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java","/ensemble/samples/shared-resources/playbutton.png","/ensemble/samples/shared-resources/pausebutton.png","/ensemble/samples/media/advancedmedia/MediaControl.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Alpha Media Player","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_22 = new SampleInfo("Alpha Media Player","An alpha media player with 2 different media views and alpha channels. ","/Media/Alpha Media Player","/ensemble/samples/media/alphamediaplayer","ensemble.samples.media.alphamediaplayer.AlphaMediaPlayerApp","/ensemble/samples/media/alphamediaplayer/preview.png",new String[]{"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java","/ensemble/samples/media/alphamediaplayer/PlanetaryPlayerPane.java","/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"arthPos","min","-100","max","100","name","Arth Position"),new PlaygroundProperty(null,"fierPos","min","-100","max","100","name","Fier Position"),new PlaygroundProperty(null,"arthRate","min","0.1","max","1","name","Arth Rate"),new PlaygroundProperty(null,"fierRate","min","0.1","max","1","name","Fier Rate"),},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_23 = new SampleInfo("Streaming Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player is playing media via HTTP Live Streaming, also known as HLS. ","/Media/Streaming Media Player","/ensemble/samples/media/streamingmediaplayer","ensemble.samples.media.streamingmediaplayer.StreamingMediaPlayerApp","/ensemble/samples/media/streamingmediaplayer/preview.png",new String[]{"/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css","/ensemble/samples/media/streamingmediaplayer/PlayerPane.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Overlay Media Player",},"/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_24 = new SampleInfo("Overlay Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player also demonstrates overlaying the player controls on top of the media. ","/Media/Overlay Media Player","/ensemble/samples/media/overlaymediaplayer","ensemble.samples.media.overlaymediaplayer.OverlayMediaPlayerApp","/ensemble/samples/media/overlaymediaplayer/preview.png",new String[]{"/ensemble/samples/media/overlaymediaplayer/PlayerPane.java","/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java","/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_25 = new SampleInfo("Display Shelf","A display shelf of images using the PerspectiveTransform effect. ","/Graphics/Display Shelf","/ensemble/samples/graphics/displayshelf","ensemble.samples.graphics.displayshelf.DisplayShelfApp","/ensemble/samples/graphics/displayshelf/preview.png",new String[]{"/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/shared-resources/Animal8.jpg","/ensemble/samples/shared-resources/Animal9.jpg","/ensemble/samples/shared-resources/Animal10.jpg","/ensemble/samples/shared-resources/Animal11.jpg","/ensemble/samples/shared-resources/Animal12.jpg","/ensemble/samples/shared-resources/Animal13.jpg","/ensemble/samples/shared-resources/Animal14.jpg","/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java","/ensemble/samples/graphics/displayshelf/PerspectiveImage.java","/ensemble/samples/graphics/displayshelf/DisplayShelf.java",},new String[]{"javafx.scene.effect.PerspectiveTransform","javafx.scene.effect.Reflection","javafx.scene.control.ScrollBar","javafx.scene.input.MouseEvent","javafx.scene.input.KeyEvent",},new String[]{},new String[]{},"/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_26 = new SampleInfo("Digital Clock","A digital clock application that demonstrates JavaFX animation, images, and effects. ","/Graphics/Digital Clock","/ensemble/samples/graphics/digitalclock","ensemble.samples.graphics.digitalclock.DigitalClockApp","/ensemble/samples/graphics/digitalclock/preview.png",new String[]{"/ensemble/samples/graphics/digitalclock/Clock.java","/ensemble/samples/shared-resources/DigitalClock-background.png","/ensemble/samples/graphics/digitalclock/DigitalClockApp.java","/ensemble/samples/graphics/digitalclock/Digit.java",},new String[]{"javafx.scene.effect.Glow","javafx.scene.shape.Polygon","javafx.scene.transform.Shear",},new String[]{},new String[]{},"/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_27 = new SampleInfo("Calculator","A calculator that performs simple math exercises. ","/Graphics/Calculator","/ensemble/samples/graphics/calc","ensemble.samples.graphics.calc.CalculatorApp","/ensemble/samples/graphics/calc/preview.png",new String[]{"/ensemble/samples/graphics/calc/Util.java","/ensemble/samples/graphics/calc/Calculator.java","/ensemble/samples/graphics/calc/Key.java","/ensemble/samples/graphics/calc/CalculatorApp.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.Group","javafx.scene.Parent","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.LinearGradient","javafx.scene.paint.Stop","javafx.scene.input.KeyEvent","javafx.scene.input.MouseEvent","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.event.EventHandler","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics/calc/CalculatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_28 = new SampleInfo("Stopwatch","An animated stopwatch. Click the green button to start the stopwatch and click the red button to stop it. ","/Graphics/Stopwatch","/ensemble/samples/graphics/stopwatch","ensemble.samples.graphics.stopwatch.StopWatchApp","/ensemble/samples/graphics/stopwatch/preview.png",new String[]{"/ensemble/samples/graphics/stopwatch/DigitalClock.java","/ensemble/samples/graphics/stopwatch/StopWatchApp.java","/ensemble/samples/shared-resources/stopwatch.png","/ensemble/samples/graphics/stopwatch/Watch.java","/ensemble/samples/graphics/stopwatch/Dial.java","/ensemble/samples/graphics/stopwatch/StopWatchButton.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.GaussianBlur","javafx.scene.effect.Light","javafx.scene.effect.Lighting","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.shape.Ellipse","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.scene.text.TextAlignment","javafx.scene.text.TextBoundsType","javafx.scene.transform.Rotate","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics/stopwatch/StopWatchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_29 = new SampleInfo("Puzzle Pieces","A sample in which an image is broken into pieces to create a jigsaw puzzle. ","/Graphics/Puzzle Pieces","/ensemble/samples/graphics/puzzle","ensemble.samples.graphics.puzzle.PuzzlePiecesApp","/ensemble/samples/graphics/puzzle/preview.png",new String[]{"/ensemble/samples/graphics/puzzle/Desk.java","/ensemble/samples/shared-resources/PuzzlePieces-picture.jpg","/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java","/ensemble/samples/graphics/puzzle/Piece.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.control.Button","javafx.scene.layout.Pane","javafx.scene.input.MouseEvent","javafx.scene.effect.DropShadow",},new String[]{},new String[]{},"/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_30 = new SampleInfo("Colorful Circles","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Graphics/Colorful Circles","/ensemble/samples/graphics/colorfulcircles","ensemble.samples.graphics.colorfulcircles.ColorfulCirclesApp","/ensemble/samples/graphics/colorfulcircles/preview.png",new String[]{"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",},new String[]{"javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_31 = new SampleInfo("Bouncing Balls","A sample that shows animated bouncing balls. Select a ball to start or stop the animation. Select the reset button to stop all the balls. ","/Graphics/Bouncing Balls","/ensemble/samples/graphics/bouncingballs","ensemble.samples.graphics.bouncingballs.BouncingBallsApp","/ensemble/samples/graphics/bouncingballs/preview.png",new String[]{"/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java","/ensemble/samples/graphics/bouncingballs/BallsScreen.java","/ensemble/samples/graphics/bouncingballs/Constants.java","/ensemble/samples/graphics/bouncingballs/Ball.java","/ensemble/samples/graphics/bouncingballs/BallsPane.java",},new String[]{"java.util.ArrayList","java.util.List","javafx.util.Duration","javafx.stage.Stage","javafx.stage.Screen","javafx.scene.Parent","javafx.scene.Group","javafx.scene.Scene","javafx.scene.Node","javafx.scene.effect.Reflection","javafx.scene.shape.Rectangle","javafx.scene.shape.Line","javafx.scene.shape.Circle","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.RadialGradient","javafx.scene.paint.Stop","javafx.scene.control.Button","javafx.scene.text.Text","javafx.application.Application","javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.animation.Animation.Status","javafx.event.EventHandler","javafx.event.ActionEvent","javafx.scene.input.MouseEvent","javafx.geometry.Insets",},new String[]{},new String[]{},"/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_32 = new SampleInfo("Arc","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Arc","/ensemble/samples/graphics/shapes/arc","ensemble.samples.graphics.shapes.arc.ArcApp","/ensemble/samples/graphics/shapes/arc/preview.png",new String[]{"/ensemble/samples/graphics/shapes/arc/ArcApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/arc/ArcApp.java",new PlaygroundProperty[]{new PlaygroundProperty("arc1","fill","name","Arc1 Fill"),new PlaygroundProperty("arc1","startAngle","min","0","max","360","name","Arc 1 Start Angle"),new PlaygroundProperty("arc1","length","min","0","max","360","name","Arc 1 Length"),new PlaygroundProperty("arc2","stroke","name","Arc 2 Stroke"),new PlaygroundProperty("arc2","strokeWidth","min","0","max","5","name","Arc 2 Stroke Width"),new PlaygroundProperty("arc2","radiusX","min","0","max","50","name","Arc 2 Radius X"),new PlaygroundProperty("arc2","radiusY","min","0","max","50","name","Arc 2 Radius Y"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_33 = new SampleInfo("Rectangle","A sample showing how various settings effect two rectangles. ","/Graphics/Shapes/Rectangle","/ensemble/samples/graphics/shapes/rectangle","ensemble.samples.graphics.shapes.rectangle.RectangleApp","/ensemble/samples/graphics/shapes/rectangle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",},new String[]{"javafx.scene.shape.Rectangle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rect1","fill","name","Rectangle 1 Fill"),new PlaygroundProperty("rect1","width","min","10","max","50","name","Rectangle 1 Width"),new PlaygroundProperty("rect1","height","min","10","max","50","name","Rectangle 1 Height"),new PlaygroundProperty("rect1","arcWidth","min","0","max","50","name","Rectangle 1 Arc Width"),new PlaygroundProperty("rect1","arcHeight","min","0","max","50","name","Rectangle 1 Arc Height"),new PlaygroundProperty("rect2","stroke","name","Rectangle 2 Stroke"),new PlaygroundProperty("rect2","strokeWidth","min","1","max","5","name","Rectangle 2 Stroke Width"),new PlaygroundProperty("rect2","width","min","10","max","50","name","Rectangle 2 Width"),new PlaygroundProperty("rect2","height","min","10","max","50","name","Rectangle 2 Height"),new PlaygroundProperty("rect2","arcWidth","min","0","max","50","name","Rectangle 2 Arc Width"),new PlaygroundProperty("rect2","arcHeight","min","0","max","50","name","Rectangle 2 Arc Height"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_34 = new SampleInfo("Quad Curve","An example of how various settings affect a quadratic Bézier parametric curve. ","/Graphics/Shapes/Quad Curve","/ensemble/samples/graphics/shapes/quadcurve","ensemble.samples.graphics.shapes.quadcurve.QuadCurveApp","/ensemble/samples/graphics/shapes/quadcurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",},new String[]{"javafx.scene.shape.QuadCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("quadCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("quadCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("quadCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("quadCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("quadCurve","controlX","min","0","max","180","name","Cubic Curve Control X"),new PlaygroundProperty("quadCurve","controlY","min","0","max","90","name","Cubic Curve Control Y"),new PlaygroundProperty("quadCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("quadCurve","endY","min","10","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_35 = new SampleInfo("Line","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Line","/ensemble/samples/graphics/shapes/line","ensemble.samples.graphics.shapes.line.LineApp","/ensemble/samples/graphics/shapes/line/preview.png",new String[]{"/ensemble/samples/graphics/shapes/line/LineApp.java",},new String[]{"javafx.scene.shape.Line","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/line/LineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("exampleLine","startX","min","50","max","550"),new PlaygroundProperty("exampleLine","startY","min","50","max","350"),new PlaygroundProperty("exampleLine","endX","min","50","max","550"),new PlaygroundProperty("exampleLine","endY","min","50","max","350"),new PlaygroundProperty("exampleLine","stroke"),new PlaygroundProperty("exampleLine","strokeWidth","min","0.1","max","50"),new PlaygroundProperty("exampleLine","strokeLineCap"),new PlaygroundProperty("exampleLine","getStrokeDashArray"),new PlaygroundProperty("exampleLine","strokeDashOffset","min","0","max","500"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_36 = new SampleInfo("Circle","A sample showing two circles with controls to change fill, stroke, and radius. ","/Graphics/Shapes/Circle","/ensemble/samples/graphics/shapes/circle","ensemble.samples.graphics.shapes.circle.CircleApp","/ensemble/samples/graphics/shapes/circle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/circle/CircleApp.java",},new String[]{"javafx.scene.shape.Circle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Arc","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/circle/CircleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("circle1","fill","name","Circle 1 Fill"),new PlaygroundProperty("circle1","radius","min","10","max","40","name","Circle 1 Radius"),new PlaygroundProperty("circle2","stroke","name","Circle 1 Stroke"),new PlaygroundProperty("circle2","strokeWidth","min","1","max","5","name","Circle 2 Stroke Width"),new PlaygroundProperty("circle2","radius","min","10","max","40","name","Circle 2 Radius"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_37 = new SampleInfo("Polyline","A sample that demonstrates polyline construction with stroke and fill. ","/Graphics/Shapes/Polyline","/ensemble/samples/graphics/shapes/polyline","ensemble.samples.graphics.shapes.polyline.PolylineApp","/ensemble/samples/graphics/shapes/polyline/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",},new String[]{"javafx.scene.shape.Polyline","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polyline1","fill","name","Polyline 1 Fill"),new PlaygroundProperty("polyline1","stroke","name","Polyline 1 Stroke"),new PlaygroundProperty("polyline2","stroke","name","Polyline 2 Stroke"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_38 = new SampleInfo("Cubic Curve","A sample showing how various settings change a cubic Bézier parametric curve. ","/Graphics/Shapes/Cubic Curve","/ensemble/samples/graphics/shapes/cubiccurve","ensemble.samples.graphics.shapes.cubiccurve.CubicCurveApp","/ensemble/samples/graphics/shapes/cubiccurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",},new String[]{"javafx.scene.shape.CubicCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("cubicCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("cubicCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("cubicCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("cubicCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("cubicCurve","controlX1","min","0","max","180","name","Cubic Curve Control X1"),new PlaygroundProperty("cubicCurve","controlY1","min","0","max","90","name","Cubic Curve Control Y1"),new PlaygroundProperty("cubicCurve","controlX2","min","0","max","180","name","Cubic Curve Control X2"),new PlaygroundProperty("cubicCurve","controlY2","min","0","max","90","name","Cubic Curve Control Y2"),new PlaygroundProperty("cubicCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("cubicCurve","endY","min","0","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_39 = new SampleInfo("Polygon","A sample that demonstrates polygon construction. ","/Graphics/Shapes/Polygon","/ensemble/samples/graphics/shapes/polygon","ensemble.samples.graphics.shapes.polygon.PolygonApp","/ensemble/samples/graphics/shapes/polygon/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",},new String[]{"javafx.scene.shape.Polygon","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polygon1","fill","name","Polygon 1 Fill"),new PlaygroundProperty("polygon2","stroke","name","Polygon 2 Stroke"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_40 = new SampleInfo("Path","A sample that demonstrates two path shapes. ","/Graphics/Shapes/Path","/ensemble/samples/graphics/shapes/path","ensemble.samples.graphics.shapes.path.PathApp","/ensemble/samples/graphics/shapes/path/preview.png",new String[]{"/ensemble/samples/graphics/shapes/path/PathApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.shape.ArcTo","javafx.scene.shape.ClosePath","javafx.scene.shape.CubicCurveTo","javafx.scene.shape.HLineTo","javafx.scene.shape.LineTo","javafx.scene.shape.MoveTo","javafx.scene.shape.QuadCurveTo","javafx.scene.shape.VLineTo","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/path/PathApp.java",new PlaygroundProperty[]{new PlaygroundProperty("path1","stroke","name","Path 1 Stroke"),new PlaygroundProperty("path2","stroke","name","Path 2 Stroke"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_41 = new SampleInfo("Ellipse","A sample that demonstrates how various settings affect two elliptical shapes. ","/Graphics/Shapes/Ellipse","/ensemble/samples/graphics/shapes/ellipse","ensemble.samples.graphics.shapes.ellipse.EllipseApp","/ensemble/samples/graphics/shapes/ellipse/preview.png",new String[]{"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",},new String[]{"javafx.scene.shape.Ellipse","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Arc",},"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",new PlaygroundProperty[]{new PlaygroundProperty("ellipse1","fill","name","Ellipse 1 Fill"),new PlaygroundProperty("ellipse1","radiusX","min","10","max","40","name","Ellipse 1 Width"),new PlaygroundProperty("ellipse1","radiusY","min","10","max","45","name","Ellipse 1 Height"),new PlaygroundProperty("ellipse2","stroke","name","Ellipse 2 Stroke"),new PlaygroundProperty("ellipse2","strokeWidth","min","1","max","5","name","Ellipse 2 Stroke Width"),new PlaygroundProperty("ellipse2","radiusX","min","10","max","40","name","Ellipse 2 Width"),new PlaygroundProperty("ellipse2","radiusY","min","10","max","45","name","Ellipse 2 Height"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_42 = new SampleInfo("Drop Shadow","A sample that demonstrates how a drop shadow effect is affected by various settings. ","/Graphics/Effects/Drop Shadow","/ensemble/samples/graphics/effects/dropshadow","ensemble.samples.graphics.effects.dropshadow.DropShadowApp","/ensemble/samples/graphics/effects/dropshadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("dropShadow","radius","min","0","max","20","name","Drop Shadow Radius"),new PlaygroundProperty("dropShadow","offsetX","min","-10","max","10","name","Drop Shadow Offset X"),new PlaygroundProperty("dropShadow","offsetY","min","-10","max","10","name","Drop Shadow Offset Y"),new PlaygroundProperty("dropShadow","radius","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_43 = new SampleInfo("Inner Shadow","A sample that demonstrates how an inner shadow effect is affected by various settings. ","/Graphics/Effects/Inner Shadow","/ensemble/samples/graphics/effects/innershadow","ensemble.samples.graphics.effects.innershadow.InnerShadowApp","/ensemble/samples/graphics/effects/innershadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",},new String[]{"javafx.scene.effect.InnerShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sample","fill","name","Text Fill"),new PlaygroundProperty("innerShadow","radius","min","0","max","20","name","Inner Shadow Radius"),new PlaygroundProperty("innerShadow","offsetX","min","-10","max","10","name","Inner Shadow Offset X"),new PlaygroundProperty("innerShadow","offsetY","min","-10","max","10","name","Inner Shadow Offset Y"),new PlaygroundProperty("innerShadow","color","name","Inner Shadow Color"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_44 = new SampleInfo("Sepia Tone","A sample that demonstrates varying degrees of a sepia tone effect. ","/Graphics/Effects/Sepia Tone","/ensemble/samples/graphics/effects/sepiatone","ensemble.samples.graphics.effects.sepiatone.SepiaToneApp","/ensemble/samples/graphics/effects/sepiatone/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",},new String[]{"javafx.scene.effect.SepiaTone","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sepiaTone","level","min","0","max","1","name","SepiaTone Level"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_45 = new SampleInfo("Gaussian Blur","A sample that demonstrates a Gaussian blur effect on an image, with varying degrees of blurriness. ","/Graphics/Effects/Gaussian Blur","/ensemble/samples/graphics/effects/gaussianblur","ensemble.samples.graphics.effects.gaussianblur.GaussianBlurApp","/ensemble/samples/graphics/effects/gaussianblur/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",},new String[]{"javafx.scene.effect.GaussianBlur","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",new PlaygroundProperty[]{new PlaygroundProperty("gaussianBlur","radius","min","0","max","15","name","Gaussian Blur Level"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_46 = new SampleInfo("Reflection","A sample that demonstrates how a reflection effect is affected by various settings. ","/Graphics/Effects/Reflection","/ensemble/samples/graphics/effects/reflection","ensemble.samples.graphics.effects.reflection.ReflectionApp","/ensemble/samples/graphics/effects/reflection/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",},new String[]{"javafx.scene.effect.Reflection","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",new PlaygroundProperty[]{new PlaygroundProperty("reflection","bottomOpacity","min","0","max","1","name","Reflection Bottom Opacity"),new PlaygroundProperty("reflection","topOpacity","min","0","max","1","name","Reflection Top Opacity"),new PlaygroundProperty("reflection","fraction","min","0","max","1","name","Reflection Fraction"),new PlaygroundProperty("reflection","topOffset","min","-10","max","10","name","Reflection Top Offset"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_47 = new SampleInfo("Color","Rectangles filled with colors. ","/Graphics/Paints/Color","/ensemble/samples/graphics/paints/color","ensemble.samples.graphics.paints.color.ColorApp","/ensemble/samples/graphics/paints/color/preview.png",new String[]{"/ensemble/samples/graphics/paints/color/ColorApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color","javafx.scene.paint.Paint",},new String[]{},new String[]{"/Graphics/Paints/Radial Gradient","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/color/ColorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_48 = new SampleInfo("Linear Gradient","A sample with two rectangles, one filled with a simple linear gradient and one filled with a more complex gradient using the reflection cycle method. ","/Graphics/Paints/Linear Gradient","/ensemble/samples/graphics/paints/lineargradient","ensemble.samples.graphics.paints.lineargradient.LinearGradientApp","/ensemble/samples/graphics/paints/lineargradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",},new String[]{"javafx.scene.paint.LinearGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Radial Gradient",},"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_49 = new SampleInfo("Radial Gradient","A sample that demonstrates two circles, one filled with a simple radial gradient and one filled with a more complex radial gradient. ","/Graphics/Paints/Radial Gradient","/ensemble/samples/graphics/paints/radialgradient","ensemble.samples.graphics.paints.radialgradient.RadialGradientApp","/ensemble/samples/graphics/paints/radialgradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",},new String[]{"javafx.scene.paint.RadialGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_50 = new SampleInfo("Image Properties","A sample that demonstrates how to resize images and use the Viewport property. ","/Graphics/Images/Image Properties","/ensemble/samples/graphics/images/imageproperties","ensemble.samples.graphics.images.imageproperties.ImagePropertiesApp","/ensemble/samples/graphics/images/imageproperties/preview.png",new String[]{"/ensemble/samples/shared-resources/sanfran.jpg","/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_51 = new SampleInfo("Image Creation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Creation","/ensemble/samples/graphics/images/imagecreation","ensemble.samples.graphics.images.imagecreation.ImageCreationApp","/ensemble/samples/graphics/images/imagecreation/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_52 = new SampleInfo("Image Operation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Operation","/ensemble/samples/graphics/images/imageoperator","ensemble.samples.graphics.images.imageoperator.ImageOperationApp","/ensemble/samples/graphics/images/imageoperator/preview.png",new String[]{"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"gridSize","min","0","max","10","name","Grid Size"),new PlaygroundProperty(null,"hueFactor","min","0","max","32","name","Hue Factor"),new PlaygroundProperty(null,"hueOffset","min","0","max","360","name","Hue Offset"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_53 = new SampleInfo("Toggle Button","Toggle buttons in a toggle group. ","/Controls/Toggle Button","/ensemble/samples/controls/togglebutton","ensemble.samples.controls.togglebutton.ToggleButtonApp","/ensemble/samples/controls/togglebutton/preview.png",new String[]{"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Choice Box","/Controls/Accordion","/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_54 = new SampleInfo("Accordion","An example of an accordion control. You can use accordion controls to define individual panes and  display them one at a time. ","/Controls/Accordion","/ensemble/samples/controls/accordion","ensemble.samples.controls.accordion.AccordionApp","/ensemble/samples/controls/accordion/preview.png",new String[]{"/ensemble/samples/controls/accordion/AccordionApp.java",},new String[]{"javafx.scene.control.Accordion",},new String[]{},new String[]{"/Controls/Toggle Button","/Controls/Toolbar/ToolBar",},"/ensemble/samples/controls/accordion/AccordionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_55 = new SampleInfo("Radio Button","An example of radio buttons in various states. ","/Controls/Radio Button","/ensemble/samples/controls/radiobutton","ensemble.samples.controls.radiobutton.RadioButtonApp","/ensemble/samples/controls/radiobutton/preview.png",new String[]{"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",},new String[]{"javafx.scene.control.RadioButton",},new String[]{},new String[]{"/Controls/Check Box",},"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_56 = new SampleInfo("Pagination","A sample that demonstrates pagination. ","/Controls/Pagination","/ensemble/samples/controls/pagination","ensemble.samples.controls.pagination.PaginationApp","/ensemble/samples/controls/pagination/preview.png",new String[]{"/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/controls/pagination/PaginationApp.java",},new String[]{"javafx.scene.control.Pagination",},new String[]{},new String[]{},"/ensemble/samples/controls/pagination/PaginationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_57 = new SampleInfo("ScrollBar","A sample showing horizontal and vertical scroll bars. ","/Controls/ScrollBar","/ensemble/samples/controls/scrollbar","ensemble.samples.controls.scrollbar.ScrollBarApp","/ensemble/samples/controls/scrollbar/preview.png",new String[]{"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",},new String[]{"javafx.scene.control.ScrollBar",},new String[]{},new String[]{},"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_58 = new SampleInfo("HyperLink","A sample that shows a simple hyperlink and a hyperlink with an image. ","/Controls/HyperLink","/ensemble/samples/controls/hyperlink","ensemble.samples.controls.hyperlink.HyperLinkApp","/ensemble/samples/controls/hyperlink/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/hyperlink/HyperLinkApp.java",},new String[]{"javafx.scene.control.Hyperlink",},new String[]{},new String[]{},"/ensemble/samples/controls/hyperlink/HyperLinkApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_59 = new SampleInfo("Menu","An example of a menu bar. The example includes use of the system bar, if the current platform supports a system bar. ","/Controls/Menu","/ensemble/samples/controls/menu","ensemble.samples.controls.menu.MenuApp","/ensemble/samples/controls/menu/preview.png",new String[]{"/ensemble/samples/shared-resources/menuInfo.png","/ensemble/samples/controls/menu/MenuApp.java",},new String[]{"javafx.scene.control.MenuBar","javafx.scene.control.Menu","javafx.scene.control.MenuItem",},new String[]{},new String[]{},"/ensemble/samples/controls/menu/MenuApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_60 = new SampleInfo("Check Box","An example of CheckBoxes in various states. ","/Controls/Check Box","/ensemble/samples/controls/checkbox","ensemble.samples.controls.checkbox.CheckBoxApp","/ensemble/samples/controls/checkbox/preview.png",new String[]{"/ensemble/samples/controls/checkbox/CheckBoxApp.java",},new String[]{"javafx.scene.control.CheckBox",},new String[]{},new String[]{"/Controls/Radiobutton/Radio Button",},"/ensemble/samples/controls/checkbox/CheckBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_61 = new SampleInfo("ColorPicker","A sample that demonstrates the ColorPicker. ","/Controls/ColorPicker","/ensemble/samples/controls/colorpicker","ensemble.samples.controls.colorpicker.ColorPickerApp","/ensemble/samples/controls/colorpicker/preview.png",new String[]{"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",},new String[]{"javafx.scene.control.ColorPicker",},new String[]{},new String[]{},"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_62 = new SampleInfo("Progress Indicator","A sample that demonstrates the Progress Indicator control in various modes. ","/Controls/Progress Indicator","/ensemble/samples/controls/progressindicator","ensemble.samples.controls.progressindicator.ProgressIndicatorApp","/ensemble/samples/controls/progressindicator/preview.png",new String[]{"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",},new String[]{"javafx.scene.control.ProgressIndicator",},new String[]{},new String[]{"/Controls/Progress Bar",},"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_63 = new SampleInfo("TreeView","An implementation of the TreeView control displaying an expandable tree root node. ","/Controls/TreeView","/ensemble/samples/controls/treeview","ensemble.samples.controls.treeview.TreeViewApp","/ensemble/samples/controls/treeview/preview.png",new String[]{"/ensemble/samples/controls/treeview/TreeViewApp.java",},new String[]{"javafx.scene.control.TreeView",},new String[]{},new String[]{},"/ensemble/samples/controls/treeview/TreeViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_64 = new SampleInfo("ChoiceBox","An example of a ChoiceBox with several options. The ChoiceBox control displays a default or current selection, with an icon to click that expands the list for a selection. ","/Controls/ChoiceBox","/ensemble/samples/controls/choicebox","ensemble.samples.controls.choicebox.ChoiceBoxApp","/ensemble/samples/controls/choicebox/preview.png",new String[]{"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",},new String[]{"javafx.scene.control.ChoiceBox",},new String[]{},new String[]{},"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_65 = new SampleInfo("Progress Bar","A sample that demonstrates the ProgressBar control. ","/Controls/Progress Bar","/ensemble/samples/controls/progressbar","ensemble.samples.controls.progressbar.ProgressBarApp","/ensemble/samples/controls/progressbar/preview.png",new String[]{"/ensemble/samples/controls/progressbar/ProgressBarApp.java",},new String[]{"javafx.scene.control.ProgressBar",},new String[]{},new String[]{"/Controls/Progress Indicator",},"/ensemble/samples/controls/progressbar/ProgressBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_66 = new SampleInfo("TableCellFactory","A simple table that uses cell factories to add a control to a table column and to enable editing of first/last name and email. ","/Controls/Table/TableCellFactory","/ensemble/samples/controls/table/tablecellfactory","ensemble.samples.controls.table.tablecellfactory.TableCellFactoryApp","/ensemble/samples/controls/table/tablecellfactory/preview.png",new String[]{"/ensemble/samples/controls/table/tablecellfactory/Person.java","/ensemble/samples/controls/table/tablecellfactory/EditingCell.java","/ensemble/samples/controls/table/tablecellfactory/CheckBoxTableCell.java","/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",},new String[]{"javafx.scene.control.TableCell","javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_67 = new SampleInfo("TableView","A simple table with a header row. ","/Controls/Table/TableView","/ensemble/samples/controls/table/tableview","ensemble.samples.controls.table.tableview.TableViewApp","/ensemble/samples/controls/table/tableview/preview.png",new String[]{"/ensemble/samples/controls/table/tableview/TableViewApp.java","/ensemble/samples/controls/table/tableview/Person.java",},new String[]{"javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tableview/TableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_68 = new SampleInfo("Styled Tool Bar","A sample that shows three ToolBars, two of which are styled specifically with a separate CSS style sheet. ","/Controls/Toolbar/Styled Tool Bar","/ensemble/samples/controls/toolbar/styledtoolbar","ensemble.samples.controls.toolbar.styledtoolbar.StyledToolBarApp","/ensemble/samples/controls/toolbar/styledtoolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBar.css","/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{"/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_69 = new SampleInfo("Tool Bar","A toolbar with three buttons. ","/Controls/Toolbar/Tool Bar","/ensemble/samples/controls/toolbar/toolbar","ensemble.samples.controls.toolbar.toolbar.ToolBarApp","/ensemble/samples/controls/toolbar/toolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{},"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_70 = new SampleInfo("Hidden SplitPane","A sample that demonstrates styling a hidden split pane with CSS. ","/Controls/Splitpane/Hidden SplitPane","/ensemble/samples/controls/splitpane/hiddensplitpane","ensemble.samples.controls.splitpane.hiddensplitpane.HiddenSplitPaneApp","/ensemble/samples/controls/splitpane/hiddensplitpane/preview.png",new String[]{"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPane.css","/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java",},new String[]{"javafx.scene.control.SplitPane",},new String[]{},new String[]{},"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_71 = new SampleInfo("ListViewCellFactory","A simple implementation of the ListView control that uses a CellFactory to customize the ListView cell contents. Positive values in the list are green, and negative values are red and enclosed in parentheses. Zero values are black. ","/Controls/Listview/ListViewCellFactory","/ensemble/samples/controls/listview/listviewcellfactory","ensemble.samples.controls.listview.listviewcellfactory.ListViewCellFactoryApp","/ensemble/samples/controls/listview/listviewcellfactory/preview.png",new String[]{"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java","/ensemble/samples/controls/listview/listviewcellfactory/MoneyFormatCell.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_72 = new SampleInfo("Simple ListView","A simple implementation of the ListView control, in which a list of items is displayed vertically.  ListView is a powerful multirow control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable nonhomogenous row heights. ","/Controls/Listview/Simple ListView","/ensemble/samples/controls/listview/simplelistview","ensemble.samples.controls.listview.simplelistview.SimpleListViewApp","/ensemble/samples/controls/listview/simplelistview/preview.png",new String[]{"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/ListViewCellFactory",},"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_73 = new SampleInfo("HorizontalListView","A sample showing an implementation of the ListView control, in which a list of items is displayed in a horizontal row. ListView is a powerful multi-row control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable non-homogenous row heights. ","/Controls/Listview/HorizontalListView","/ensemble/samples/controls/listview/horizontallistview","ensemble.samples.controls.listview.horizontallistview.HorizontalListViewApp","/ensemble/samples/controls/listview/horizontallistview/preview.png",new String[]{"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/ListViewCellFactory","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_74 = new SampleInfo("Pill Button","This sample demonstrates styling toggle buttons with CSS. ","/Controls/Button/Pill Button","/ensemble/samples/controls/button/pillbutton","ensemble.samples.controls.button.pillbutton.PillButtonApp","/ensemble/samples/controls/button/pillbutton/preview.png",new String[]{"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java","/ensemble/samples/controls/button/pillbutton/PillButton.css",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Button/Toggle Button",},"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_75 = new SampleInfo("Graphic Button","A button with an embedded image. ","/Controls/Button/Graphic Button","/ensemble/samples/controls/button/graphicbutton","ensemble.samples.controls.button.graphicbutton.GraphicButtonApp","/ensemble/samples/controls/button/graphicbutton/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Colored Buttons",},"/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_76 = new SampleInfo("Colored Buttons","An example of Buttons with different background colors. ","/Controls/Button/Colored Buttons","/ensemble/samples/controls/button/colorbutton","ensemble.samples.controls.button.colorbutton.ColorButtonApp","/ensemble/samples/controls/button/colorbutton/preview.png",new String[]{"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Graphic Button",},"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_77 = new SampleInfo("TabPane","Some implementations of tabs using the TabPane class. ","/Controls/Tab/TabPane","/ensemble/samples/controls/tab/tabpane","ensemble.samples.controls.tab.tabpane.TabPaneApp","/ensemble/samples/controls/tab/tabpane/preview.png",new String[]{"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java","/ensemble/samples/controls/tab/tabpane/tab_16.png",},new String[]{"javafx.scene.control.Tab","javafx.scene.control.TabPane","javafx.scene.control.TabBuilder",},new String[]{},new String[]{},"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_78 = new SampleInfo("Simple Label","A simple implementation of the Label control, with an image to the left of the label. ","/Controls/Text/Simple Label","/ensemble/samples/controls/text/simplelabel","ensemble.samples.controls.text.simplelabel.SimpleLabelApp","/ensemble/samples/controls/text/simplelabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Advanced Label","/Controls/Button/Graphic Button","/Controls/Text/Inset Text",},"/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_79 = new SampleInfo("Search Box","A sample that demonstrates use of CSS to create a search box. ","/Controls/Text/Search Box","/ensemble/samples/controls/text/searchbox","ensemble.samples.controls.text.searchbox.SearchBoxApp","/ensemble/samples/controls/text/searchbox/preview.png",new String[]{"/ensemble/samples/controls/text/searchbox/SearchBox.css","/ensemble/samples/controls/text/searchbox/SearchBoxApp.java","/ensemble/samples/controls/text/searchbox/SearchBox.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_80 = new SampleInfo("Text Validator","A sample that demonstrates text validation. If the value in the TextField is a small number, the field becomes yellow. If the value in the TextField is not a number, the field becomes red. ","/Controls/Text/Text Validator","/ensemble/samples/controls/text/textvalidator","ensemble.samples.controls.text.textvalidator.TextValidatorApp","/ensemble/samples/controls/text/textvalidator/preview.png",new String[]{"/ensemble/samples/controls/text/textvalidator/ValidationEvent.java","/ensemble/samples/controls/text/textvalidator/Validator.java","/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java","/ensemble/samples/controls/text/textvalidator/ValidationResult.java","/ensemble/samples/controls/text/textvalidator/Validators.css","/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java","/ensemble/samples/controls/text/textvalidator/ValidatorPane.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_81 = new SampleInfo("Text Field","Demonstrates a TextField control that allows you to enter text. ","/Controls/Text/Text Field","/ensemble/samples/controls/text/textfield","ensemble.samples.controls.text.textfield.TextFieldApp","/ensemble/samples/controls/text/textfield/preview.png",new String[]{"/ensemble/samples/controls/text/textfield/TextFieldApp.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textfield/TextFieldApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_82 = new SampleInfo("Inset Text","A sample that shows styling of text through CSS. ","/Controls/Text/Inset Text","/ensemble/samples/controls/text/insettext","ensemble.samples.controls.text.insettext.InsetTextApp","/ensemble/samples/controls/text/insettext/preview.png",new String[]{"/ensemble/samples/controls/text/insettext/InsetText.css","/ensemble/samples/controls/text/insettext/InsetTextApp.java",},new String[]{"javafx.geometry.Insets","javafx.scene.control.LabelBuilder",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_83 = new SampleInfo("Advanced Label","Several Label controls, displayed in various alignments with respect to an image. ","/Controls/Text/Advanced Label","/ensemble/samples/controls/text/advancedlabel","ensemble.samples.controls.text.advancedlabel.AdvancedLabelApp","/ensemble/samples/controls/text/advancedlabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Controls/Button/Graphic Button",},"/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_84 = new SampleInfo("Fireworks","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Canvas/Fireworks","/ensemble/samples/canvas/fireworks","ensemble.samples.canvas.fireworks.FireworksApp","/ensemble/samples/canvas/fireworks/preview.png",new String[]{"/ensemble/samples/shared-resources/sf.jpg","/ensemble/samples/canvas/fireworks/SanFranciscoFireworks.java","/ensemble/samples/canvas/fireworks/FireworksApp.java","/ensemble/samples/canvas/fireworks/Particle.java",},new String[]{"javafx.scene.canvas.Canvas","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/canvas/fireworks/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_85 = new SampleInfo("Stage","A sample with a control that creates a decorated stage that is centered on your desktop. ","/Scenegraph/Stage/Stage","/ensemble/samples/scenegraph/stage/stage","ensemble.samples.scenegraph.stage.stage.StageApp","/ensemble/samples/scenegraph/stage/stage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/stage/StageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene",},new String[]{},new String[]{"/Scenegraph/Stage/Advanced Stage",},"/ensemble/samples/scenegraph/stage/stage/StageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_86 = new SampleInfo("Advanced Stage","A sample with a control that creates a transparent stage that is centered on your desktop. You can drag the stage with your mouse or use the scene controls to minimize or close it. With a transparent stage, you must add your own event handlers to perform these actions. ","/Scenegraph/Stage/Advanced Stage","/ensemble/samples/scenegraph/stage/advancedstage","ensemble.samples.scenegraph.stage.advancedstage.AdvancedStageApp","/ensemble/samples/scenegraph/stage/advancedstage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene","javafx.stage.StageStyle","javafx.application.Platform",},new String[]{},new String[]{"/Scenegraph/Stage/Stage",},"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_87 = new SampleInfo("MouseEvent","A sample that demonstrates various mouse and scroll events and their usage. Click the circles and drag them across the screen. Scroll the whole screen. All events are logged to the console. ","/Scenegraph/Events/MouseEvent","/ensemble/samples/scenegraph/events/mouseevent","ensemble.samples.scenegraph.events.mouseevent.MouseEventApp","/ensemble/samples/scenegraph/events/mouseevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",},new String[]{"javafx.scene.Cursor","javafx.scene.input.MouseEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_88 = new SampleInfo("Multi-Touch","A sample that demonstrates multi-touch support. You can zoom in and out of the images and also rotate the images with multi-touch. ","/Scenegraph/Events/Multi-Touch","/ensemble/samples/scenegraph/events/multitouch","ensemble.samples.scenegraph.events.multitouch.MultiTouchApp","/ensemble/samples/scenegraph/events/multitouch/preview.png",new String[]{"/ensemble/samples/scenegraph/events/multitouch/MultiTouchImageView.java","/ensemble/samples/shared-resources/warning.png","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/scenegraph/events/multitouch/MultiTouchPane.java","/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",},new String[]{"javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.scene.input.RotateEvent","javafx.scene.input.ZoomEvent",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.INPUT_MULTITOUCH,});
+    private static final SampleInfo SAMPLE_89 = new SampleInfo("KeyEvent","A sample that demonstrates various key events and their usage. Type in the text box to view the triggered events: key pressed, key typed and key released. Pressing the Shift, Ctrl, and Alt keys also trigger events. ","/Scenegraph/Events/KeyEvent","/ensemble/samples/scenegraph/events/keyevent","ensemble.samples.scenegraph.events.keyevent.KeyEventApp","/ensemble/samples/scenegraph/events/keyevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",},new String[]{"javafx.scene.input.KeyCode","javafx.scene.input.KeyEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_90 = new SampleInfo("Key Stroke Motion","An example of animation generated from key events. Click the grey area to give it focus and try typing letters. ","/Scenegraph/Events/Key Stroke Motion","/ensemble/samples/scenegraph/events/keystrokemotion","ensemble.samples.scenegraph.events.keystrokemotion.KeyStrokeMotionApp","/ensemble/samples/scenegraph/events/keystrokemotion/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java","/ensemble/samples/scenegraph/events/keystrokemotion/LettersPane.java",},new String[]{"javafx.scene.input.KeyEvent","javafx.animation.Interpolator",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_91 = new SampleInfo("Cursor","A sample that demonstrates changing the cursor icon. ","/Scenegraph/Events/Cursor","/ensemble/samples/scenegraph/events/cursor","ensemble.samples.scenegraph.events.cursor.CursorApp","/ensemble/samples/scenegraph/events/cursor/preview.png",new String[]{"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",},new String[]{"javafx.scene.Cursor",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_92 = new SampleInfo("Custom Node","A sample that demonstrates how to create a custom node by extending the Parent class. ","/Scenegraph/Node/Custom Node","/ensemble/samples/scenegraph/node/customnode","ensemble.samples.scenegraph.node.customnode.CustomNodeApp","/ensemble/samples/scenegraph/node/customnode/preview.png",new String[]{"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java","/ensemble/samples/scenegraph/node/customnode/MyNode.java",},new String[]{"javafx.scene.Parent","javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_93 = new SampleInfo("Node Properties","A sample that demonstrates some properties of nodes. Use the radio buttons to send any of the rectangles to the front or back. Use the controls to change opacity or horizontal position. ","/Scenegraph/Node/Node Properties","/ensemble/samples/scenegraph/node/nodeproperties","ensemble.samples.scenegraph.node.nodeproperties.NodePropertiesApp","/ensemble/samples/scenegraph/node/nodeproperties/preview.png",new String[]{"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",},new String[]{"javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rectA","translateX","min","0","max","50","name","Rectangle A translate X"),new PlaygroundProperty("rectB","translateX","min","0","max","50","name","Rectangle B translate X"),new PlaygroundProperty("rectC","translateX","min","0","max","50","name","Rectangle C translate X"),new PlaygroundProperty("rectA","opacity","min","0","max","1","name","Rectangle A Opacity"),new PlaygroundProperty("rectB","opacity","min","0","max","1","name","Rectangle B Opacity"),new PlaygroundProperty("rectC","opacity","min","0","max","1","name","Rectangle C Opacity"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_94 = new SampleInfo("Interpolator","A sample that shows various types of interpolation between key frames in a timeline. There are five circles, each animated with a different interpolation method. The Linear interpolator is the default. Use the controls to reduce opacity to zero for some circles to compare with others, or change circle color to distinguish between individual interpolators. ","/Animation/Interpolator","/ensemble/samples/animation/interpolator","ensemble.samples.animation.interpolator.InterpolatorApp","/ensemble/samples/animation/interpolator/preview.png",new String[]{"/ensemble/samples/animation/interpolator/InterpolatorApp.java",},new String[]{"javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/interpolator/InterpolatorApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"-","name","LINEAR"),new PlaygroundProperty("circle1","opacity","min","0","max","1"),new PlaygroundProperty("circle1","fill"),new PlaygroundProperty(null,"-","name","EASE_BOTH"),new PlaygroundProperty("circle2","opacity","min","0","max","1"),new PlaygroundProperty("circle2","fill"),new PlaygroundProperty(null,"-","name","EASE_IN"),new PlaygroundProperty("circle3","opacity","min","0","max","1"),new PlaygroundProperty("circle3","fill"),new PlaygroundProperty(null,"-","name","EASE_OUT"),new PlaygroundProperty("circle4","opacity","min","0","max","1"),new PlaygroundProperty("circle4","fill"),new PlaygroundProperty(null,"-","name","SPLINE"),new PlaygroundProperty("circle5","opacity","min","0","max","1"),new PlaygroundProperty("circle5","fill"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_95 = new SampleInfo("Timeline","A sample that demonstrates the basics of timeline creation. ","/Animation/Timeline/Timeline","/ensemble/samples/animation/timeline/timeline","ensemble.samples.animation.timeline.timeline.TimelineApp","/ensemble/samples/animation/timeline/timeline/preview.png",new String[]{"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_96 = new SampleInfo("Timeline Events","A sample that demonstrates events triggered during time line play. The circle changes its radius in a linear fashion during each key frame and randomly jumps to a new location along the x coordinate at the end of the key frame. ","/Animation/Timeline/Timeline Events","/ensemble/samples/animation/timeline/timelineevents","ensemble.samples.animation.timeline.timelineevents.TimelineEventsApp","/ensemble/samples/animation/timeline/timelineevents/preview.png",new String[]{"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration","javafx.event.ActionEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_97 = new SampleInfo("Stroke Transition","A sample in which the stroke color of a shape changes over a given time. ","/Animation/Transitions/Stroke Transition","/ensemble/samples/animation/transitions/stroketransition","ensemble.samples.animation.transitions.stroketransition.StrokeTransitionApp","/ensemble/samples/animation/transitions/stroketransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",},new String[]{"javafx.animation.StrokeTransition","javafx.animation.StrokeTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_98 = new SampleInfo("Fade Transition","A sample in which the opacity of a node changes over a given time. ","/Animation/Transitions/Fade Transition","/ensemble/samples/animation/transitions/fadetransition","ensemble.samples.animation.transitions.fadetransition.FadeTransitionApp","/ensemble/samples/animation/transitions/fadetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",},new String[]{"javafx.animation.FadeTransition","javafx.animation.FadeTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_99 = new SampleInfo("Sequential Transition","A sample in which various transitions are executed sequentially. ","/Animation/Transitions/Sequential Transition","/ensemble/samples/animation/transitions/sequentialtransition","ensemble.samples.animation.transitions.sequentialtransition.SequentialTransitionApp","/ensemble/samples/animation/transitions/sequentialtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",},new String[]{"javafx.animation.SequentialTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_100 = new SampleInfo("Scale Transition","A sample in which a node scales larger and smaller over a given time. ","/Animation/Transitions/Scale Transition","/ensemble/samples/animation/transitions/scaletransition","ensemble.samples.animation.transitions.scaletransition.ScaleTransitionApp","/ensemble/samples/animation/transitions/scaletransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",},new String[]{"javafx.animation.ScaleTransition","javafx.animation.ScaleTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Aimation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_101 = new SampleInfo("Fill Transition","A sample in which the filling of a shape changes over a given time. ","/Animation/Transitions/Fill Transition","/ensemble/samples/animation/transitions/filltransition","ensemble.samples.animation.transitions.filltransition.FillTransitionApp","/ensemble/samples/animation/transitions/filltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",},new String[]{"javafx.animation.FillTransition","javafx.animation.FillTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_102 = new SampleInfo("Pause Transition","A sample in which a node pauses over a given time. ","/Animation/Transitions/Pause Transition","/ensemble/samples/animation/transitions/pausetransition","ensemble.samples.animation.transitions.pausetransition.PauseTransitionApp","/ensemble/samples/animation/transitions/pausetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",},new String[]{"javafx.animation.PauseTransition","javafx.animation.PauseTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_103 = new SampleInfo("Parallel Transition","A sample in which various transitions are executed in parallel. ","/Animation/Transitions/Parallel Transition","/ensemble/samples/animation/transitions/paralleltransition","ensemble.samples.animation.transitions.paralleltransition.ParallelTransitionApp","/ensemble/samples/animation/transitions/paralleltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",},new String[]{"javafx.animation.ParallelTransition","javafx.animation.ParallelTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_104 = new SampleInfo("Path Transition","A sample in which a node moves along a path from end to end over a given time. ","/Animation/Transitions/Path Transition","/ensemble/samples/animation/transitions/pathtransition","ensemble.samples.animation.transitions.pathtransition.PathTransitionApp","/ensemble/samples/animation/transitions/pathtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",},new String[]{"javafx.animation.PathTransition","javafx.animation.PathTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_105 = new SampleInfo("Translate Transition","A sample in which a node moves from one location to another over a given time. ","/Animation/Transitions/Translate Transition","/ensemble/samples/animation/transitions/translatetransition","ensemble.samples.animation.transitions.translatetransition.TranslateTransitionApp","/ensemble/samples/animation/transitions/translatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",},new String[]{"javafx.animation.TranslateTransition","javafx.animation.TranslateTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition",},"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_106 = new SampleInfo("Rotate Transition","A sample in which a node rotates around its center over a given time. ","/Animation/Transitions/Rotate Transition","/ensemble/samples/animation/transitions/rotatetransition","ensemble.samples.animation.transitions.rotatetransition.RotateTransitionApp","/ensemble/samples/animation/transitions/rotatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",},new String[]{"javafx.animation.RotateTransition","javafx.animation.RotateTransitionBuilder","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_107 = new SampleInfo("HBox","A simple example of an HBox layout. ","/Layout/HBox","/ensemble/samples/layout/hbox","ensemble.samples.layout.hbox.HBoxApp","/ensemble/samples/layout/hbox/preview.png",new String[]{"/ensemble/samples/layout/hbox/HBoxApp.java",},new String[]{"javafx.scene.layout.HBox",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/layout/hbox/HBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_108 = new SampleInfo("BorderPane","An example of  a BorderPane layout, with placement of children in the top, left, center, right, and bottom positions. ","/Layout/BorderPane","/ensemble/samples/layout/borderpane","ensemble.samples.layout.borderpane.BorderPaneApp","/ensemble/samples/layout/borderpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/borderpane/BorderPaneApp.java",},new String[]{"javafx.scene.layout.BorderPane",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Graphics/Images/Image Creation",},"/ensemble/samples/layout/borderpane/BorderPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_109 = new SampleInfo("VBox","A simple example of a VBox layout. ","/Layout/VBox","/ensemble/samples/layout/vbox","ensemble.samples.layout.vbox.VBoxApp","/ensemble/samples/layout/vbox/preview.png",new String[]{"/ensemble/samples/layout/vbox/VBoxApp.java",},new String[]{"javafx.scene.layout.VBox",},new String[]{},new String[]{},"/ensemble/samples/layout/vbox/VBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_110 = new SampleInfo("TilePane","An example of a TilePane layout. ","/Layout/TilePane","/ensemble/samples/layout/tilepane","ensemble.samples.layout.tilepane.TilePaneApp","/ensemble/samples/layout/tilepane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/tilepane/TilePaneApp.java",},new String[]{"javafx.scene.layout.TilePane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/tilepane/TilePaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_111 = new SampleInfo("AnchorPane","A simple example of an AnchorPane layout. ","/Layout/AnchorPane","/ensemble/samples/layout/anchorpane","ensemble.samples.layout.anchorpane.AnchorPaneApp","/ensemble/samples/layout/anchorpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",},new String[]{"javafx.scene.layout.AnchorPane","javafx.collections.ObservableList",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_112 = new SampleInfo("GridPane","An example of a GridPane layout. There is more than one approach to using a GridPane. The code can specify which rows and/or columns should contain the content. Alternatively, the code can alter the constraints of the rows and/or columns themselves, either by specifying the preferred minimum or  maximum heights or widths, or by specifying the percentage of the GridPane that belongs to certain rows or columns.  Note that grid lines can be made visible to help in debugging. ","/Layout/GridPane","/ensemble/samples/layout/gridpane","ensemble.samples.layout.gridpane.GridPaneApp","/ensemble/samples/layout/gridpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/gridpane/GridPaneApp.java",},new String[]{"javafx.scene.layout.GridPane",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/gridpane/GridPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_113 = new SampleInfo("FlowPane","A simple example of a FlowPane layout. ","/Layout/FlowPane","/ensemble/samples/layout/flowpane","ensemble.samples.layout.flowpane.FlowPaneApp","/ensemble/samples/layout/flowpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/shared-resources/icon-68x68.png","/ensemble/samples/shared-resources/icon-88x88.png","/ensemble/samples/layout/flowpane/FlowPaneApp.java",},new String[]{"javafx.scene.layout.FlowPane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/flowpane/FlowPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_114 = new SampleInfo("StackPane","A simple example of a StackPane layout. ","/Layout/StackPane","/ensemble/samples/layout/stackpane","ensemble.samples.layout.stackpane.StackPaneApp","/ensemble/samples/layout/stackpane/preview.png",new String[]{"/ensemble/samples/layout/stackpane/StackPaneApp.java",},new String[]{"javafx.scene.layout.StackPane",},new String[]{},new String[]{},"/ensemble/samples/layout/stackpane/StackPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_115 = new SampleInfo("HTML Editor","A sample that demonstrates the HTML Editor. You can make changes to the example text, and the resulting generated HTML is displayed. ","/Web/HTML Editor","/ensemble/samples/web/htmleditor","ensemble.samples.web.htmleditor.HTMLEditorApp","/ensemble/samples/web/htmleditor/preview.png",new String[]{"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",},new String[]{"javafx.scene.web.HTMLEditor",},new String[]{},new String[]{"controls/text/SimpleLabel",},"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_116 = new SampleInfo("WebView","A sample that demonstrates a WebView object accessing a web page. ","/Web/WebView","/ensemble/samples/web/webview","ensemble.samples.web.webview.WebViewApp","/ensemble/samples/web/webview/preview.png",new String[]{"/ensemble/samples/web/webview/WebViewApp.java",},new String[]{"javafx.scene.web.WebView","javafx.scene.web.WebEngine",},new String[]{},new String[]{},"/ensemble/samples/web/webview/WebViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_117 = new SampleInfo("ChangeListener","A sample that demonstrates how to add or remove a change listener on a node (for example, a Rectangle node) for some property (for example, Rectangle.hover). Once you add a listener, the text field  shows the hover property change. ","/Language/Beans/ChangeListener","/ensemble/samples/language/beans/changelistener","ensemble.samples.language.beans.changelistener.ChangeListenerApp","/ensemble/samples/language/beans/changelistener/preview.png",new String[]{"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.beans.InvalidationListener","javafx.beans.value.ObservableValue",},new String[]{},new String[]{},"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_118 = new SampleInfo("String Binding","A sample that demonstrates how to bind text properties so the value of the bound property is updated automatically when the value of the original property is changed. ","/Language/Beans/String Binding","/ensemble/samples/language/beans/stringbinding","ensemble.samples.language.beans.stringbinding.StringBindingApp","/ensemble/samples/language/beans/stringbinding/preview.png",new String[]{"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",},new String[]{"javafx.beans.binding.StringBinding","javafx.scene.control.TextField","javafx.scene.control.Label",},new String[]{},new String[]{},"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_119 = new SampleInfo("ObservableList","A sample that demonstrates the ObservableList interface, which extends the java.util.List interface. Click the button to change an integer to a new random number in a random position in the list. Once you add a listener, the index of the changed number is displayed to the left of the list. ","/Language/Collections/ObservableList","/ensemble/samples/language/collections/observablelist","ensemble.samples.language.collections.observablelist.ObservableListApp","/ensemble/samples/language/collections/observablelist/preview.png",new String[]{"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.collections.FXCollections","javafx.collections.ListChangeListener","javafx.collections.ObservableList",},new String[]{},new String[]{},"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_120 = new SampleInfo("3D Cube System","A sample that demonstrates an animated rotation of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/3D Cube System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.CubeSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Cube.java","/ensemble/samples/graphics3d/cubesystem/Xform.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_121 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/preview.png",new String[]{"/ensemble/samples/graphics3d/xylophone/Cube.java","/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/graphics3d/xylophone/XylophoneApp.java","/ensemble/samples/graphics3d/xylophone/Xform.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_122 = new SampleInfo("3D Cubes","A sample that demonstrates an animated rotation of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/3D Cubes","/ensemble/samples/graphics3d/cube","ensemble.samples.graphics3d.cube.CubeApp","/ensemble/samples/graphics3d/cube/preview.png",new String[]{"/ensemble/samples/graphics3d/cube/CubeApp.java","/ensemble/samples/graphics3d/cube/Cube.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    public static final SampleCategory ROOT = new SampleCategory("ROOT",null,null,new SampleCategory[]{new SampleCategory("Charts",null,new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,SAMPLE_13,SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,},new SampleCategory[]{new SampleCategory("Pie",new SampleInfo[]{SAMPLE_0,SAMPLE_1,},null,null),new SampleCategory("Bubble",new SampleInfo[]{SAMPLE_2,},null,null),new SampleCategory("Area",new SampleInfo[]{SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,},null,null),new SampleCategory("Line",new SampleInfo[]{SAMPLE_7,SAMPLE_8,SAMPLE_9,},null,null),new SampleCategory("Bar",new SampleInfo[]{SAMPLE_10,SAMPLE_11,SAMPLE_12,SAMPLE_13,SAMPLE_14,},null,null),new SampleCategory("Scatter",new SampleInfo[]{SAMPLE_15,SAMPLE_16,},null,null),new SampleCategory("Custom",new SampleInfo[]{SAMPLE_17,},null,null),}),new SampleCategory("Concurrency",new SampleInfo[]{SAMPLE_18,SAMPLE_19,},new SampleInfo[]{SAMPLE_18,SAMPLE_19,},null),new SampleCategory("Media",new SampleInfo[]{SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,},new SampleInfo[]{SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,},null),new SampleCategory("Graphics",new SampleInfo[]{SAMPLE_25,SAMPLE_26,SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,},new SampleInfo[]{SAMPLE_25,SAMPLE_32,SAMPLE_33,SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_40,SAMPLE_41,SAMPLE_26,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,SAMPLE_47,SAMPLE_48,SAMPLE_49,SAMPLE_50,SAMPLE_51,SAMPLE_52,},new SampleCategory[]{new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_32,SAMPLE_33,SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_40,SAMPLE_41,},null,null),new SampleCategory("Effects",new SampleInfo[]{SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,},null,null),new SampleCategory("Paints",new SampleInfo[]{SAMPLE_47,SAMPLE_48,SAMPLE_49,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_50,SAMPLE_51,SAMPLE_52,},null,null),}),new SampleCategory("Controls",new SampleInfo[]{SAMPLE_53,SAMPLE_54,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_63,SAMPLE_64,SAMPLE_65,},new SampleInfo[]{SAMPLE_53,SAMPLE_54,SAMPLE_66,SAMPLE_67,SAMPLE_55,SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_63,SAMPLE_64,SAMPLE_65,SAMPLE_74,SAMPLE_75,SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,SAMPLE_83,},new SampleCategory[]{new SampleCategory("Table",new SampleInfo[]{SAMPLE_66,SAMPLE_67,},null,null),new SampleCategory("Toolbar",new SampleInfo[]{SAMPLE_68,SAMPLE_69,},null,null),new SampleCategory("Splitpane",new SampleInfo[]{SAMPLE_70,},null,null),new SampleCategory("Listview",new SampleInfo[]{SAMPLE_71,SAMPLE_72,SAMPLE_73,},null,null),new SampleCategory("Button",new SampleInfo[]{SAMPLE_74,SAMPLE_75,SAMPLE_76,},null,null),new SampleCategory("Tab",new SampleInfo[]{SAMPLE_77,},null,null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,SAMPLE_83,},null,null),}),new SampleCategory("Canvas",new SampleInfo[]{SAMPLE_84,},new SampleInfo[]{SAMPLE_84,},null),new SampleCategory("Scenegraph",null,new SampleInfo[]{SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,},new SampleCategory[]{new SampleCategory("Stage",new SampleInfo[]{SAMPLE_85,SAMPLE_86,},null,null),new SampleCategory("Events",new SampleInfo[]{SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,},null,null),new SampleCategory("Node",new SampleInfo[]{SAMPLE_92,SAMPLE_93,},null,null),}),new SampleCategory("Animation",new SampleInfo[]{SAMPLE_94,},new SampleInfo[]{SAMPLE_95,SAMPLE_96,SAMPLE_94,SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,SAMPLE_103,SAMPLE_104,SAMPLE_105,SAMPLE_106,},new SampleCategory[]{new SampleCategory("Timeline",new SampleInfo[]{SAMPLE_95,SAMPLE_96,},null,null),new SampleCategory("Transitions",new SampleInfo[]{SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,SAMPLE_103,SAMPLE_104,SAMPLE_105,SAMPLE_106,},null,null),}),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_113,SAMPLE_114,},new SampleInfo[]{SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_113,SAMPLE_114,},null),new SampleCategory("Web",new SampleInfo[]{SAMPLE_115,SAMPLE_116,},new SampleInfo[]{SAMPLE_115,SAMPLE_116,},null),new SampleCategory("Language",null,new SampleInfo[]{SAMPLE_117,SAMPLE_118,SAMPLE_119,},new SampleCategory[]{new SampleCategory("Beans",new SampleInfo[]{SAMPLE_117,SAMPLE_118,},null,null),new SampleCategory("Collections",new SampleInfo[]{SAMPLE_119,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_120,SAMPLE_121,SAMPLE_122,},new SampleInfo[]{SAMPLE_120,SAMPLE_121,SAMPLE_122,},null),});
+    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_17,SAMPLE_20,};
+    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(163);
     static {
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_7,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_100,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransitionBuilder",new SampleInfo[]{SAMPLE_9,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_80,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransitionBuilder",new SampleInfo[]{SAMPLE_7,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_118,SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_43,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_83,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_98,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_95,SAMPLE_59,SAMPLE_61,SAMPLE_62,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_86,SAMPLE_85,SAMPLE_84,SAMPLE_83,SAMPLE_89,SAMPLE_88,SAMPLE_79,SAMPLE_87,SAMPLE_78,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_81,SAMPLE_82,SAMPLE_80,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_96,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransitionBuilder",new SampleInfo[]{SAMPLE_12,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_54,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_63,SAMPLE_64,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_108,SAMPLE_109,SAMPLE_106,SAMPLE_105,SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_97,SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_42,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_69,SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_10,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_24,SAMPLE_23,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_26,SAMPLE_17,SAMPLE_16,SAMPLE_25,SAMPLE_15,SAMPLE_27,SAMPLE_14,SAMPLE_30,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_46,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_39,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransitionBuilder",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_5,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_108,SAMPLE_109,SAMPLE_106,SAMPLE_105,SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_24,SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_38,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_13,SAMPLE_69,SAMPLE_65,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_2,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_36,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_55,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_88,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_50,SAMPLE_51,SAMPLE_52,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_85,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_67,SAMPLE_44,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_55,SAMPLE_56,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_35,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_84,SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_39,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_107,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabBuilder",new SampleInfo[]{SAMPLE_54,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_55,SAMPLE_56,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_21,SAMPLE_20,SAMPLE_19,SAMPLE_18,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_114,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_26,SAMPLE_25,SAMPLE_27,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.RectangleBuilder",new SampleInfo[]{SAMPLE_91,SAMPLE_92,SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_118,SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_73,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransitionBuilder",new SampleInfo[]{SAMPLE_6,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_47,SAMPLE_48,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_69,SAMPLE_91,SAMPLE_92,SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_50,SAMPLE_51,SAMPLE_52,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_37,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_99,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_30,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_23,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_13,SAMPLE_65,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_2,SAMPLE_114,SAMPLE_113,SAMPLE_29,SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_86,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_24,SAMPLE_19,SAMPLE_31,SAMPLE_26,SAMPLE_17,SAMPLE_25,SAMPLE_16,SAMPLE_15,SAMPLE_27,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_114,SAMPLE_67,SAMPLE_113,SAMPLE_68,SAMPLE_29,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_6,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_13,SAMPLE_79,SAMPLE_65,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_101,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.LabelBuilder",new SampleInfo[]{SAMPLE_58,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_97,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransitionBuilder",new SampleInfo[]{SAMPLE_3,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_13,SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_65,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_89,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_25,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_9,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_73,SAMPLE_72,SAMPLE_74,SAMPLE_70,SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_3,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_75,SAMPLE_77,SAMPLE_76,SAMPLE_69,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_12,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_104,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_94,SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_8,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_41,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_69,SAMPLE_90,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_54,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_58,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_55,SAMPLE_56,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_4,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_116,SAMPLE_115,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_95,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_22,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_39,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_119,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_115,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_113,SAMPLE_110,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_79,SAMPLE_78,SAMPLE_80,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_13,SAMPLE_65,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_114,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_17,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_16,SAMPLE_15,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_34,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_87,SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransitionBuilder",new SampleInfo[]{SAMPLE_5,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_13,SAMPLE_69,SAMPLE_65,SAMPLE_82,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransitionBuilder",new SampleInfo[]{SAMPLE_8,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_67,SAMPLE_112,SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransitionBuilder",new SampleInfo[]{SAMPLE_4,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_0,SAMPLE_112,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_75,SAMPLE_77,SAMPLE_76,SAMPLE_69,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_4,SAMPLE_12,SAMPLE_3,SAMPLE_11,SAMPLE_10,SAMPLE_9,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_72,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_86,SAMPLE_85,SAMPLE_84,SAMPLE_83,SAMPLE_89,SAMPLE_88,SAMPLE_79,SAMPLE_87,SAMPLE_78,SAMPLE_90,SAMPLE_81,SAMPLE_82,SAMPLE_80,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_60,SAMPLE_95,SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_53,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_55,SAMPLE_56,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_49,SAMPLE_45,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_86,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_112,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransitionBuilder",new SampleInfo[]{SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_117,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransitionBuilder",new SampleInfo[]{SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_49,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_86,SAMPLE_85,SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_55,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_38,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_26,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_108,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_79,SAMPLE_118,SAMPLE_81,SAMPLE_80,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_42,SAMPLE_29,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_122,SAMPLE_120,SAMPLE_121,SAMPLE_27,SAMPLE_49,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_47,SAMPLE_48,SAMPLE_39,SAMPLE_41,SAMPLE_31,SAMPLE_40,SAMPLE_32,SAMPLE_33,SAMPLE_34,SAMPLE_35,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_19,SAMPLE_119,SAMPLE_18,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransitionBuilder",new SampleInfo[]{SAMPLE_105,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_86,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_77,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_69,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_3,SAMPLE_24,SAMPLE_23,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_119,SAMPLE_111,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_62,});
+        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_45,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_99,SAMPLE_15,});
+        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_19,SAMPLE_18,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_114,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_4,SAMPLE_13,SAMPLE_3,SAMPLE_12,SAMPLE_2,SAMPLE_11,SAMPLE_10,SAMPLE_17,SAMPLE_16,SAMPLE_15,SAMPLE_14,SAMPLE_9,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_1,SAMPLE_0,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_63,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_59,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransitionBuilder",new SampleInfo[]{SAMPLE_97,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_103,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_117,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_26,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_3,SAMPLE_24,SAMPLE_23,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_3,SAMPLE_10,SAMPLE_17,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_58,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_84,SAMPLE_30,SAMPLE_31,SAMPLE_28,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_96,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_66,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_64,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_37,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_73,SAMPLE_72,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_25,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_31,SAMPLE_35,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_57,SAMPLE_25,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_67,SAMPLE_19,SAMPLE_66,SAMPLE_18,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_60,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_89,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_41,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_59,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabBuilder",new SampleInfo[]{SAMPLE_77,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_67,SAMPLE_66,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_13,SAMPLE_11,SAMPLE_10,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_84,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_88,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_44,});
+        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.RectangleBuilder",new SampleInfo[]{SAMPLE_122,SAMPLE_120,SAMPLE_121,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_86,SAMPLE_85,SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_31,SAMPLE_46,SAMPLE_25,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_56,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_116,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransitionBuilder",new SampleInfo[]{SAMPLE_104,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_75,SAMPLE_76,SAMPLE_29,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_122,SAMPLE_120,SAMPLE_121,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_73,SAMPLE_72,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_61,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_119,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_16,SAMPLE_15,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_2,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_84,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_3,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_1,SAMPLE_89,SAMPLE_88,SAMPLE_96,SAMPLE_87,SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_29,SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_4,SAMPLE_3,SAMPLE_9,SAMPLE_17,SAMPLE_5,SAMPLE_16,SAMPLE_6,SAMPLE_7,SAMPLE_14,SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_95,SAMPLE_94,SAMPLE_96,SAMPLE_31,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_1,SAMPLE_88,SAMPLE_87,SAMPLE_29,SAMPLE_31,SAMPLE_25,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_104,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_84,SAMPLE_48,SAMPLE_30,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.LabelBuilder",new SampleInfo[]{SAMPLE_82,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_111,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransitionBuilder",new SampleInfo[]{SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_84,SAMPLE_95,SAMPLE_94,SAMPLE_96,SAMPLE_30,SAMPLE_31,SAMPLE_15,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_13,SAMPLE_12,SAMPLE_11,SAMPLE_10,SAMPLE_9,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_34,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_42,SAMPLE_45,SAMPLE_46,SAMPLE_43,SAMPLE_44,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_29,SAMPLE_50,SAMPLE_51,SAMPLE_52,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_105,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_95,SAMPLE_94,SAMPLE_96,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_28,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_119,SAMPLE_117,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_106,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_97,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_29,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_65,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_31,SAMPLE_28,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_31,SAMPLE_33,SAMPLE_28,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_77,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_31,SAMPLE_82,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_67,SAMPLE_66,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_92,SAMPLE_93,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_12,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_86,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_59,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_115,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_87,SAMPLE_91,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_92,SAMPLE_31,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_49,SAMPLE_47,SAMPLE_48,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_116,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_84,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_88,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_4,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_3,SAMPLE_5,SAMPLE_6,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_39,SAMPLE_26,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_54,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransitionBuilder",new SampleInfo[]{SAMPLE_103,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_36,SAMPLE_84,SAMPLE_30,SAMPLE_31,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransitionBuilder",new SampleInfo[]{SAMPLE_106,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_89,SAMPLE_90,SAMPLE_25,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransitionBuilder",new SampleInfo[]{SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_84,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_94,SAMPLE_90,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_29,SAMPLE_50,SAMPLE_51,SAMPLE_52,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_99,SAMPLE_98,SAMPLE_106,SAMPLE_104,SAMPLE_97,SAMPLE_105,SAMPLE_101,SAMPLE_100,SAMPLE_103,SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_3,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_36,SAMPLE_49,SAMPLE_37,SAMPLE_38,SAMPLE_47,SAMPLE_39,SAMPLE_48,SAMPLE_41,SAMPLE_40,SAMPLE_32,SAMPLE_33,SAMPLE_34,SAMPLE_35,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_83,SAMPLE_78,SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_67,SAMPLE_19,SAMPLE_66,SAMPLE_18,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_95,SAMPLE_94,SAMPLE_96,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_74,SAMPLE_53,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_40,});
     }
     public static SampleInfo[] getSamplesForDoc(String docUrl) {
         return DOCS_URL_TO_SAMPLE.get(docUrl);
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.fdt has changed
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.fdx has changed
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.frq has changed
--- a/apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.nrm	Wed Mar 27 08:57:00 2013 -0400
+++ b/apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.nrm	Wed Mar 27 09:57:53 2013 -0400
@@ -1,1 +1,1 @@
-NRM||yyyyyyyyyyy|xyxxxyxxxyxxyxyxxy|||yyyy|||||y||yyy|y|||yyyyyyyxy|yyyyyy|yyyy|yyy||y|||||y||yx||y|||||||||yxyxx||x|yyyy|y||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||ywvyyyxyxwxxyxyxxyyyxxxxxxxxwxxxxyxxxyxyxwxw|yy|y|y||xxxyyyxyx||||||||yyxxxy|yyxwyx|vyyyyyyyyxxxxxxyxyyyyxxyxxxxyxwxvxxxxxxyxxxxxxxwxxxwywyyxxwyxxyxxvxxxwxxxyxyxxxxxyxxyxyxxvxxxxxxxxxxxxyv|xyyxyxxyxxyxxyxxyyyyyxyyyxxxxxxxxxxxxxvxxxxxxxxxxyxxxxxxwwxxxyyyy||xxyxxxxwyyyyywvwvxxxxwwyxxxxxxyxyyyyxyxyy|y|wy||y|ywwwxxxxwvuvvxwxxxvuxxxvwxxxxvxwxwyvyxwxyyvuxyyxxxxxyww|vxwx||xxxyxyx|ywxxxxxxxwxx|wwx|yvvwywyyvyxxvw|y|ywxxyxqwruuvtvuuvuttutuvusutvvswtxurxttvtwxvxtxvqrqtxxvwvvvtxuvvvvsxtxutuvuuuuvuuuxstuuutuuwxvuutrrrrsrxtxpxxxxuuxsswrtstusqutvoxvxxxvyvxutttxxmvvvvvvvvvvvvtsqvvtstuuuuttttvtuuuxvxutxxxxxxxxxxxxxututxvvvvvvvvvtsqvvtstuuuuttttvtuuutvvvvvvvvvxtsquvvvwuuvvvyvxuuuuuuuuuuuuvxkuvvsuuuuuvttttvxnvtvxsxxvyuvtvxsxuxxxxxxxxuxxvvxyuuuvvvvvvvvvyuuuuuyuuuuuuvyylxsvxuwvuutvvtvvvpvvwttwvvvxxxxxxxwttvvvvvvvwwvyvuuxuuuuumxxxyxxxxxxwxxxxxxvvvvvvvywxxxyvxuuuuuuuuussrwtttuuv|uuutvvxvwvvvwxxxxvxxxvutvwvvvvvvwvuyuvxuuuuuupxxxxwvptxruuyvxxvuvxwututuuvtuxwxxxxxxuuuvttxtxxvyutttvtvvvtvvvvvvvvvvxxvuvxtwuuxuwxxxvxuvvyvwwuxuuuuuuuuuttuyxvvxttttyvxuuuyvxuuuuuyxvxuuuuuuuunyruvuuxuuuuvvvvssrxxtwttvvuxuvu|uuuxuuxuuouwxxmttttttttttrrtttttsttttttuvuuuuuuutttttttttttttssstststtsststststtttttttttttsstttttttttttttttttttttssttttttstttutttuuuuttttttttttttttttttttssttttttstttttttttttttttttttttttttttuusstststtsststststttttttttuuuuuuuuuuuuuuuuuttttttttttttttttvutttttunxvuxxxxxxvuvvvvxyuvxuuutuupyuxxyvvuyvxuuuuptuvxxxvxxuttwvtuvvxuuvuuwwuqtuuvxvwttwwxvuuyxvvxttttyvxuuuuuuujvwvvvvwuvvsuvxxvxvxxvvvtvvvtvvvyuvuxuuuuuyyuwwwuuvxuuuuuuuuuywwxwvxttuuuuuyuvuuuvxuuuuuuutttsuuuwutstxvxuuuuuuutttsuuyyvvxvvxyutstwwwwxxxwvvvwuqxyuxxxxxxyuvvvvxyvxuuuuyvxuuussrwttuuv|uuuxuotttvtuxxvvvtvytyuxxvvyuyvuxuvuupuussuuuxxuvvyuupxxxxxxvvxyvxuuvvuvutvvuwxtuxwxuuvtxvtxvvtvvuuyvuxuuuhuuuxvttuuuwvvvwxvvttuvxv|vuustvuuvxvuywtvttttwvtxxxxxtuxvutvvvvvvvywuyuuuuotwxtvxwxxxxvvvuyvxuupyvyttxvvvtuxvu|vtpyvyttttxvvvtuxvu|utmyvyrttxvvutuxvt|vtmvvvuvvxxxvvvvwtuxv|vuuupyvyttttxvvvtuxvu|utmxxxvyvxumuxxuuuvxxxxxxxxvvvvxuuxvu|vuuupytyuttuxvvtuxvu|vttqytyuttuxvvtuxvu|uttpytyuttuxvvtuxvu|vttqytyuttuxvvtuxvu|uttvvxvvxxxxvvvwyvuuxujwttututtuuuuuuuuuuututtuuuuuuuutuvuuvyvxttuwvxuukvsrvsvuvxvxwvxvvvuvwtstwwtsvxuutvvwwwwwwvwvwvvwwwvwwwvvvvvvvvvvvvvvvvvvvvvvvvwvvwwvwwwwvwwvvwwwwvvvvvvvvvvvvvvvvvvwvwwwvvvvvvvvvvvvwvwvwvwvwvvvvvvwwwvwwvvvwvvvwwvvvvwvvwwwwvwwwwvwvqxxxyxxxxxxxxxyxvvvvvyuvuxuuuuvxuuuuxuttxxxxxuxvvvvvuttyvxuuuuuluuvuuuyvxttoxxxxxxxxxxxxxxxxxxxxxvvvvvvvwyvxuuuuuuujuutyuvxuuutvyuxxxxxxxxvxvuvvvvvuntvuutsytyvxxxxxxxvxxxuuvvtttuvvvtsuvtuxuuuuuuuuxvutu|vuuuupuytuyuttuxvxtvtuxvuu|vttquytuyuttuxvxtvtuxvuu|uttpuytuyuttuxvxtvtuxvuu|vttquytuyuttuxvxtvtuxvuu|uttsuuvuwuultvxxttvtqyvxtturtxxuuwwvvvvwvpxxyuuuusuxvvxsxxvvvvvvxyxyuuuuuuuuuyvvvvvvvvvlyuvvuutpuuuuuuuuuuuuuuxxxxxxxxvvvvvvvvuuwyvuuuuxuuuupuuuuvvuuuuxxxxxxvvvvvvwvvyvuuuuxuuuuvvvxuxvxxxtxxwxwxxwwxxxxnxtxxtxvvyvuxuxyyvxuuuuwwvxxwwvvvxuuuuwwtwxxtxxxxvvuvuxuuuuuyyvxvxuuxxxxxvvvxyvxuunyxttuuuxxxxxxyxxttuuvvvvvvvuyvxuuuuuuumtuvxxxvxxuttwvtuuuuuuuuuuvxxxxxuuuuuvuuuuuuwwuqtuuvxvwttwwxvuuwvvuttuuhuttsvxxxwwxuuwwxvvvwvtvttvvvvuuuoxywywwxywxyxxxxxxxxxwywwxvvvvvvvvvywyuvuxuuuuuuurtuutuuuwtwwuuututtttuuuuwuyxwxvvvxxvvxxxxxxvvvvwyvuuxuuxxxxxxxxxvvvxxxxtvxxuwuyvurvvvmutpvpxwwxpuywxwuywxxxxxuxvvvvvwyvuxuuuumwwxvxxxwwvvvvtvxvxwyvxttuuuuupywxwywxxxxuvvvvxwyvxuuuuptuvxxxvxxuttwvtuuuuuuuuxvxxxxuuuuvuuuuxxxxxvttssrvxyvxuuuwwuqtuuvxvwttwwxvuujuutytutuuuvvsuxxvtxvxxxxtvytuuvvvuvvvvtuyvuxuuuuutvvuvvuuxxvvunutttsstxtsxxuwuuwvxuuvuuruuvtuuuvuvuovwvtstutwwwuvttuvutuuuttvvuuvtttttutqywwxwwxuxuxxvuuuttsvuvvtvuvuuvwryxxxyxvvyvxuustxxuuwwuuvvvuvvvuwxryvxxyvvvyvxuunuvrtystxystrwstttsstvuxvxxxwwxxuxxxxvttttttvwutvuwvvvvvvwuvwtwstttttsstvtuhvtwwtsttvuvvsuxxuuvtvxvvxuuvxvtwxvuvtttrrrqvtvtutttvtwwtuyvttxuuttunttxxtrrvyuvttxjvtvvuvvsutxvtvvxxvvvtuvvuyvxuurxxvwxyvxuuutwwutuuuvxvyvxupvvwxvvyvxulvvvvxvxuxttxvvxssvvrwwwttxxxuwwwvxuuuyttxxxvvvyttyvxuuukxxxwwwuvxuuuuuuluuxtrxwwuutxxxxxxxxxtvvvvvvvvrxwwvyvxuuuuuuuuquuuvv|vuwxxwswsxvxuuqtqxyywywwxwxyyxxxxxxxxxwywwxvvvvvvvvvwyuvuuxuuuuuuxvvxtptvvxxwxuuttutvwxwvxuuuxxxxwxyuvxuuuptuvxxxvxxuttwvtuuuuuuuuxxxvxxuuuuvuuuuuwwuqtuuvxvwttwwxvuutvvsssssrttvvvvvsvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwxoutwxvvwvvunvtwstttsyttttvsvyvxuumxvxxuxxxxxxvuwxxxxtxxuxxxxxwyywvvwwwutuvxwtuvuuxuuuvxuvvxxuxtxuutuvxwtuvuuxuuupuwwwxwwwuuxuuvuvuvuvuvxxxuulttuuxtvvvvuwvtvvupuxwxwwwpuxuxwwuvvxvvyvxuptwvwxwvwvrxuxwttwvwxvxxxxxxxxxxxxwxxxvwvvvvvvvvvvvvvvvrxuxwtuyuttuuuuuuuuuuuuxxxvpyyyyxxvvpxxxxxxvvvxxxpwwwvxxxxwwwvvvvvxxxxvxxvvyuuttyuqxxyxyyxxxyxxxxxxxxvvvvvvvyyxyvuuxuuuuuvvvvvvxxxxvvvvvvwluuvvvvtwwvwuvxuuuuuuttyvxuuuuttssrvtwtttvuxv|uuuurxxxxvvwxxyvxuupwtuuvxxwxvxxuttuwvmxttvxxtvv|vtsxtuxvuwxxxxvxvvurwyxxuvvyywyyxyxttuuyvyytyyuyuxtuxyuutvwtqwtuuuwvtxvwttuvwxlttttxututvstvttvtttttxtxuvvvxuwxxututvuustvvutttutvvvvwxvttt|vuuuttttuuptuvxxxvxxuttwvtuuuuuuuuxxxxvxuuuuvuuuuuwwuqtuuvxvwttwwxvuupwtuuvxxwxvxxusttwvtxxxxxxrwvyywyyxxttuuuxvyuutvwtqwtuuuwvtxvwsttvwxqswwxwuuqxvxvxxvxwxwwvxwxxvuxyvxuutttxxxwwwuuxxkwxxvvvtxwxxvvxuvvuvvvuvvwtxuuwwxxvvvtxwxxvvxvxwwxxxxxxxvwwxxxxxxxxxxxxxuxxxxuvvuvvvuvvyxwvuvvvvwwwvuvvvvvvvvvwwvtxxuuwvnuuyuuuuuuvxuuuuuuuuuuuuuuuuuottwvtswvvttvvvxwwwuuvwvtuuuvuuvvvswvvyvxuuuuuuuuumwuvxxxxxvxtuutuuwwwwwovvxxvvyvttxttuyvxttuuuunuvywxywuvwyvxttumuwxyvvvxxvxuuuvwxxyxxxxxxuxwyxwtxyxxxvvvxxtvvvvvvvvvvvtvvxuwuyvxttuuuuuuuttuuuwxwvyvxutyyyxxvxuuuuoxxvuvuyyyyxyxtxqxyxxxxxyxvvvuyvxuuuunutxwwvvvvvvujutsvvxxuuwwvvvwwvwuuuwutsvwvvtvvvvvuvvrxxxxvvwxxyvxuurvvvxvvtvvtvxttttugvuvwuvwuxwtxxvuwyxvuuvvvuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvytxuxtttxvuuuutttvuvvwuvustwuxwtxxwvusxxxxxvtxxxxxyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxxxvwtvxxxwtxwyxtsuxxxxxxxxxxuxvuuttsttvttsttvtttttvuuuuuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvyttttttuuxtsttttsuxtttxttttttttvvvvvvvvvvtvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvuvvvtvstuuvuuxuuuuyuuuuttuuuuuuuuuuuuutttttttttttttttttttttttttttttttttttttttuuttuuuuuuttttuuuuuuuvusutvtwuxxtvtvuuuyvxuunuuuuuvtuuuuuuttttttttttttttttutttttttutttttttttttuuuuuvuuuuutuvtuuttttttttttttttttutttttttutttttttttttuvuxuvuptuvxxxvxxuttwvtxtutuvvvuwwuqtuuvxvwttwwxputxxxxuutuuutunuuuxxuvuutttuvtutuutuxutxxxxwuumtxtqtuvttuuuunyvvyttvvuuvvvvmvvxtvvxwxwvxtvvwuwuyvttxuuutwuvvxxxxlxyvttxpyvxvuuuuuuuuuvuuuuuuuutvuuxxxxxxxxxxpvxnuxxwuuvyvttxupuvvvvvxvvuxuvtuuuuuuvyttsvvvwxvxyvxuvvvxvwyvxttuvvxvuypyxvvyxxxxuxvvvvvvuuyvxuuuupyyxuvyvxuvvpuuuxxvvuyvxuuumyttttttttxxxxxxxxxyttttvvvvvvvvvttttyvxuuuuuuuuuxxxwxxxxxxxxxxxxxwvvvvvvvxxxyvuxuuuuuuutxvvysuyvvwuytxxvxxvvtuvvvvvwxxxxxxxxxxvvwyvuxuuuuyysuuttrrrrrttrrrruxvxutvtuttttututtuyywuttuvttxvxuututtttututtvyyywuttuvttxvxuuuvxxwyvxttxwyvxttwyvttxtyvvvvvvxvvtyvvvvvvxvwuwyuvuvuvuvuvuvxwutuutuutuvuxvtrsyvxttuuuuuuuuuttvvvvnsvutxxxsvuxxxxwtxxxxxxvvvvvttxtyuuuuuxxuulvvxvvxwwxwxuuuupustuxwxuvtuurxxwvvvxvwxvvvtvvvvxlvxvxuutxwvxwtwvwouuuuyxxuuuuuuqvvxptuptuqvxvxvxxvwyvxuvwvxuuuuwxunswv|uuouuuuuuuuuuuxxxxxxvvvvvvuuwyvuuxuuuupvvvvvvxxxxvvvvwvvyvuuxuusuuuuttvtwwvwuvuuxuuuuuttnvtvxlx|xxxvv|yvxuuuruwwqtuvttqtuvwttruwwqtuvttqtuvvttruwwqtuvttqtuvwttruwwqtuvttqtuvwttquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvwxxouuwxvvwutquvwxxouuwxvvwtttuwwttqtuuvtttuqtuuvtwtturuwwqtuvttqtuvwtttttuwwttqtuuvtsttqtuuvtwsttruwwqtuvttqtuvwttruxxtttuwwttqtuuvtttuqtuuvtwtturuwwqtuvttqtuvwttrvvxxvvvvxxtxxxxxvvvvvvwxvvttuuuyvvvvywtuxvvxuuuuyuuvxuuuupuxyuuuxxxxxxyvvvvvuuyuvxuuuuqtttuxsvvvvuuvvuttxtttuvvvvsuxxtxxxxxxxxxxxxxsxxvxxqprquvuvuvuvuuqquvuvtuvvvvvvtvvtvvvvtvvvvvtttttxrsyuuvuuxuuuuuuuuuuutuvu|vuqwwvvvwwxvxutxxvvvvvvvvvxxxvvvututvvvvvvvvwuuuwwwuyuvxuuunttxxwwvtvvpxuywxwxuywxxxxxxuxvvvvvvwyuvuxuuuuoxxxxxxxxxxxxxxxxxxxvvvvvvvwxxyvxuuuuuuuuuuuuuxvxutvvvxxxvvvxxxututuuuvvvvvvwuuuuuyvxuuuuuuouuuyvvvxvwwuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvwwyvuuuxuuuuuuuussrwttuv|uuunvxtxxwyxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvwyyxxttwvvxtxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxyvwtxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvttwwvvvtvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvsuuuyyxxuyvuxuuuuuutttttttttttttttttttttttttttttttttttttttuttuivvvuxxttuvtvvuutxxxxxxxxxxxttyuuvvvvvttttruxvywtuxwwrvxxvuxuvvvxxxxxxxxxxxvvvvvvvvuxuyuvttxuuuuuukttxxxvvvvvvvwvtvvuuuunxttvxxwuuwwvxxxwxvttxxxxxxxxxxxxxvxxwxxxuuwwvvvvvvvvuvvvvvvvvvxxxwuuyvuttxuuuuuutuuuuuuuuvvuuuotttvuuuuututtvvuuvvqtvtvxxxtvvvvtyvxuuuqvxqyvxxyvvvyvxuunuxxwuuvyvttxulvxxuuuuuuxvwxuxwttvxtvvuxtwxxxuuuuuuxxxxxxxxuuuuuuxtttyutvttvttttttywtxuxwpwtuuvxxxvxxuttuwwvtxxxxxrwyxvyyyxxttuuyyyvwytvwtqwtuuuvtxvwttuvwwxxywyxwxyxxxxxxwyxvvvvvvwyuvuxuuuumuvutvvtuwutxxvxxxxxxtxvvvvvvvvvvutvvtuwttxxxxxxxxxvvvyuuuyuuuttuuuuuurvvttxvxutvvxxvvxxututvvvvvvwuuttyvxuuuuxuuuuuuxxxxxxxxxxxxxxxxxxxxtuwxwtuwxwtuwxwtuwxwtuwxwtuwxwtuwxwvtvuvuutwtxxxxtvwwtuuuuvvuvvxtwwttrstsxtttxttttuxxvxnvwvxuxvvuuvxvvvwxxxxxxxxwxxxxwvxuxvvvvvvvvvvvvvvuuvxyuvxuuuuuuuuuuuxxxxxvvvvvyvuxuuuuwvvxvxxvvxuuovwvxkyvvvuytyuwqtptxtvyvttxuttussrtwtttuuv|uuuvvssrxtwttvuuxvu|uuukvvuvvsuxvvtvvuvuuyvxkuxxxxxxwxyuuxxxxxvxxxwtwxxxxxxxxxwvvvvvvvvvvvuxxxyvxuuttuuuuuuuuuuuuquxtwwvuxuptuvxxxvxxuttwvuuruxxttttvutttvutttvvvttttvtutwwuuqtuuvxvwttwwxuuuupywxwywxxxxuvvvvxwyvxuuuutuutyyvwtwtuxwtuxwtuxwtuxwtuxwtuxwptwxtuxwtxtuxuuvvxxvxvxxxxxxxvvvvvvvxyvuxuuuutvtvxxvvwyvuxurssnttxvwvuuuurtsqxxxxxyyvvwxwxxxxxxxxxxyxyvxwuwwtwxxwtyxyxxutvvwxvutvtwuvtututwxxxwvvyvuuuxttuuuuuuuttuuuvxvxttvxxxvtxvxvvvvv|unwtuuuxwtvttsxttxtyxxxwxwuuuttuuuxvxxxvutvvvtvuvuyvvtxvvtsvxuytvvuvtutttxxxxxxxxuxxxtxtxuwyxxxxvvtxtvvvvvvvvvvvvvvvtvvtsvxuyvuuxuuuuuuuuuuuuuttuuuxvttttuu|uttuuuuutttuuuuuuttuuuuuuuutrwxxwruwxxwpxvxxvv|vuuttxsuvvvvvxuiusuwxttuxssuvrsuwxxxxxxxxxxututxxxttusxuutusuvvvuuvuvvstrtvvuttuuvuuxvvtuvxvttt|vuuuttututtunxwxxxxxxvwxxxxxxxvxwtuvtvvvvxxxxxxupuuyvttxuuuuuuuuttevxuuuuuxvwxuxwttvuxytvtwxxuuuuuxxxxxxxxuuuuuxtttvtttttttwtxuwuuwwxwpuvxvvuvvxuuwwuvxvxxtxxxxxxxxxuxxvvvvvvvvvvvvvuvvxwuuwwuuqxxvvtvuxxxxxxxvvvvvvvtxxyvxttuuuuuupuuyuvxuuuuuuuuuuuquuxuvxvxxuxvvvxuyvxuuusytytsxvtuxvu|vsytytsxvtuxvu|usytytsxvtuxvu|vsytytsxvtuxvu|ukvxvsuvvtxxvvuvvvxyvxuuxwvwxuwyxxvxwyuuttvuyvvwuwxxxwxxxxxxuvuxxwvvwuvutwvwvwvvywuwuvvvvxwtvuwyttuuuujuvywwxxvxxvuuvvsuxvvtxvxxxxxxxxxvvywwxxuuvvuvvvvvvvvxxvuyvxuuuuuuuunxuyvxttuvvpxxyxxxyvxyxxxuvtvuyvuuxuxxuwtxxvvtxnwxvuxxwvvxyvxuusyxxyxyvxttnvvxxvvyvttxttunuwwxwvuxtuwvwxtxxxxxxxwuxxvvvvvvvvvuxutyvuxuuuuuuuntttxuxtwwwwwvvuvuosuxxttvvxuuuvvvwvuuvxuuuuuuuuuxvuuwvxtxuxttrqvxutvxutttxtvvvvvvvvvxvvvxutttvutvvtsxxutttututtuttuuvuuvvttuuxytxmvvxwuvvyuuuuuxvxutttvvvxxxutttutvvvwuuuuuyvxuuuouuuyvvvxvvvuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvvvyvuuuxuuuuuuuuotuuttvtvwxttuuvvxv|vuixvuxuuttvutxyvyvuvxxuxuxxutvuuwuuuutvttvwtuutxvtt|vuuunswv|uuuuvxttvxxvtxvvvvv|ulwtuuuxwtvttsxttxtyxxxwxwuuuttuuuxvxxxvutvvvxvtttt|utttttrwxxptuuttvtvwxttuuvvxv|vuiutututututuuwxsvtstuvrttvtuuttutxxxuxxtvvvxxxutxwxuxututxuxvututuuswxutusuvvtttuuvvuvuvvvvtsttrvuvvtvvuttuuvuuxvvtuvxvttt|vuutttttuutuuuttuultttututuuwsvtvttvtuttutsuxxtvvvxutwuxuvutuuwussvutttuvuuvvuvvxvt|vutttttutumxxxwxxwuswurwwtvvsxurrrwrvrwvuwvvvvtsuutuxxxxxxuvtxvuvuwvvvvvvvvvvtuuvvxuuuuuujvtvvuvvsutxvtvxvxvvvuvtvuyvxuuuuxxrxxvwxyvxuuurtvuurvvrtvvrtvrtvpxxwwxxwxwxxwwuxxwvxxxvuwxwxwxwxxxwvvuxxwxwxtuuvvvvvvvvvxwwuuuwuuuuuuuuuuwwuvuuuuwwwxvxtwvuwxvyxxxxxxyxwxvxxwxxxxxxxxxuytttu|uxuuxuxuxuxuxuxtvvvwuwwuwwuwuyxuutuwtuuuuuuuttttuutuquuuuuttttuurxvyvvvvwvxvyxxttvuxwvxxxxxxxxxxxxyvxxvvvvwvttwxvtvvvvvvvvvvvvvuyxxyuuuuuuuuuuuuttxwvuvvvvkvxxvwxuxwxvuvvxwwxvwxxvwxuxwmuuvuuuuuutxwwtxwwtxwwutxwwtxwwuxwsxwrvvyvtvtvvuttssrytuttxrrvvvvvtxxxxxtwrsutttvvtttuvvvvuuvtuxvvuxxvvxvvuuwvvwxvxxxvxxxxxxuvvwuuxtuuuuuunttxxxwvtvvjkmqkqnnlklpqmqnmnllpnnomlmmmlqomlollmnqjmponnoijlnjglolnjjinolmllklmlhikhltnjikmllnnlnmllnnmmmmnnmmnomlmmmmnklnlmkoomklllkjiilgjjhikijjljnmiklnjkmkkkikkjmihjljijlgjikjmmmmjmmlnmlnnkllpomljijthuljvljvjgthhumoppnqmollmjlijjjjkjkljinljkilijkgiqkiihihonjnjqhpkjljnjlijpmorlmkmpkmljlplmljlklkklkllmjommnmmnnkhlikkmhinghkjjloqlilnnmiihjmnipllhhkmlgglihgjlllmilheknkihrnmlllokippopnqlmiominjnlgmjnhlnqnlvpsvpvoqtqlllnjttog||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||yyyywwwxxxxxxxwwwwwwwvvvvvvvvvvwwwwwwwwvvvvvxxxxxxxxxxxxwwxxxxwwwwwwwwwwwwwwwwwwxxxxxyyyyyyyyxxxxxxxxyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyywwyyyyyxxxxxxyyyyyxxxxxxxxxxxxxwwwwwwwwwwwwwwwwxxxxxxxxxxxxvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxxxxxxwyyyyyxxxxxxxxxwwvvvvwwxxvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwxxxxxxxxxyyyyxxxxxxxyyywwwwwwwwwwvvwwwwwxxxxxxvvvvvwwvvvvvvvxxxxxvvv
\ No newline at end of file
+NRMyxyxxxyxyxxxxxyxyx||yyxxxy||y|||y|||yyyyy|||yyy|yyyyyy|||yxyy||||y|y|y|||yyyy|yyyyyy||y|y|x|yy|y|yyyyyyyyyy||||||||y||y|x|y||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||ywvyyyxyxwxxyxyxxyyyxxxxxxxxwxxxxyxxxyxyxwxw|yy|y|y||xxxyyyxyx||||||||yyxxxy|yyxwyx|vyxyxxvxxxxxxxxxxxxyv|xyyxyxxyxxyyyyyxyyyxxxxxxxxxxxxxvxxxxwwxxxyyyy||xxyxxxxwyyyyywvwvxxxxwwyxxxxxxyxyyyyxyxyy|y|wy||y|ywwwxxxxwvuvvxwxxxvuxxxvwxxxxvxwxwyvyxwxyyvuxyyxxxxxyww|vxwx||xxxyxyx|ywxxxxxxxwxx|wwx|yvvwywyyvyxxvw|y|ywxxyxurvuvutxtwuuvtsxtsvtxuussvuuuuuvuxwuuuuvuuwtuttxstuuuxttxwtxvxvvtxxvrqqutxvxwvvvsvvutuqstrtwuswrquuvuuvvttuxtxxxpxxtvrsrrrroxvxxxvyvxutttxxmvvvvvvvvvvvvtsqvvtstuuuuttttvtuuuxvxutxxxxxxxxxxxxxututxvvvvvvvvvtsqvvtstuuuuttttvtuuutvvvvvvvvvxtsquvvvwuuvvvyvxuuuuuuuuuuuuvxkuvvsuuuuuvttttvxnvtvxsxxvyuvtvxsxuxxxxxxxxuxxvvxyuuuvvvvvvvvvyuuuuuyuuuuuuvyylxsvxuwvuutvvtvvvpvvwttwvvvxxxxxxxwttvvvvvvvwwvyvuuxuuuuumxxxyxxxxxxwxxxxxxvvvvvvvywxxxyvxuuuuuuuuussrwtttuuv|uuutvvxvwvvvwxxxxvxxxvutvwvvvvvvwvuyuvxuuuuuupxxxxwvptxruuyvxxvuvxwututuuvtuxwxxxxxxuuuvttxtxxvyutttvtvvvtvvvvvvvvvvxxvuvxtwuuxuwxxxvxuvvyvwwuxuuuuuuuuuttuyxvvxttttyvxuuuyvxuuuuuyxvxuuuuuuuunyruvuuxuuuuvvvvssrxxtwttvvuxuvu|uuuxuuxuuouwxxmttttttttttrrtttttsttttttuvuuuuuuutttttttttttttssstststtsststststtttttttttttsstttttttttttttttttttttssttttttstttutttuuuuttttttttttttttttttttssttttttstttttttttttttttttttttttttttuusstststtsststststttttttttuuuuuuuuuuuuuuuuuttttttttttttttttvutttttunxvuxxxxxxvuvvvvxyuvxuuutuupyuxxyvvuyvxuuuuptuvxxxvxxuttwvtuwvvvxuuvuwuvwwuqtuuvxvwttwwxvuuyxvvxttttyvxuuuuuuujvwvvvvwuvvsuvxxvxvxxvvvtvvvtvvvyuvuxuuuuuyyuwwwuuvxuuuuuuuuuywwxwvxttuuuuuyuvuuuvxuuuuuuutttsuuuwutstxvxuuuuuuutttsuuyyvvxvvxyutstwwwwxxxwvvvwuqxyuxxxxxxyuvvvvxyvxuuuuyvxuuussrwttuuv|uuuxuotttvtuxxvvvtvytyuxxvvyuyvuxuvuupuussuuuxxuvvyuupxxxxxxvvxyvxuuvvuvutvvuwxtuxwxuuvtxvtxvvtvvuuyvuxuuuhuuuxvttuuuwvvvwxvvttuvxv|vuustvuuvxvuywtvttttwvtxxxxxtuxvutvvvvvvvywuyuuuuotwxtvxwxxxxvvvuyvxuupyvyttxvvvtuxvu|vtpyvyttttxvvvtuxvu|utmyvyrttxvvutuxvt|vtmvvvuvvxxxvvvvwtuxv|vuuupyvyttttxvvvtuxvu|utmxxxvyvxumuxxuuuvxxxxxxxxvvvvxuuxvu|vuuupytyuttuxvvtuxvu|vttqytyuttuxvvtuxvu|uttpytyuttuxvvtuxvu|vttqytyuttuxvvtuxvu|uttvvxvvxxxxvvvwyvuuxujwttututtuuuuuuuuuuututtuuuuuuuutuvuuvyvxttuwvxuukvsrvsvuvxvxwvxvvvuvwtstwwtsvxuutvvwwwwwwvwvwvvwwwvwwwvvvvvvvvvvvvvvvvvvvvvvvvwvvwwvwwwwvwwvvwwwwvvvvvvvvvvvvvvvvvvwvwwwvvvvvvvvvvvvwvwvwvwvwvvvvvvwwwvwwvvvwvvvwwvvvvwvvwwwwvwwwwvwvqxxxyxxxxxxxxxyxvvvvvyuvuxuuuuvxuuuuxuttxxxxxuxvvvvvuttyvxuuuuuluuvuuuyvxttoxxxxxxxxxxxxxxxxxxxxxvvvvvvvwyvxuuuuuuujuutyvuxuuutvyxxxxxxxxvuxvuvvvvvuntvuutsytyvxxxxxxxvxxxuuvvtttuvvvtsuvtuxuuuuuuuuxvutu|vuuuupuytuyuttuxvxtvtuxvuu|vttquytuyuttuxvxtvtuxvuu|uttpuytuyuttuxvxtvtuxvuu|vttquytuyuttuxvxtvtuxvuu|uttsuuvuwuultvxxttvtqyvxtturtxxuuwwvvvvwvpxxyuuuusuxvvxsxxvvvvvvxyxyuuuuuuuuuyvvvvvvvvvlyuvvuutpuuuuuuuuuuuuuuxxxxxxxxvvvvvvvvuuwyvuuuuxuuuupuuuuvvuuuuxxxxxxvvvvvvwvvyvuuuuxuuuuvvvxuxvxxxtxxwxwxxwwxxxxnxtxxtxvvyvuxuxyyvxuuuuwwvxxwwvvvxuuuuwwtwxxtxxxxvvuvuxuuuuuyyvxvxuuxxxxxvvvxyvxuunyxttuuuxxxxxxyxxttuuvvvvvvvuyvxuuuuuuumtuvxxxvxxuttwvtuuuuuwuuuuuvvxxxxxuuuuuvuuuuupwuuwwuqtuuvxvwttwwxvuuwvvuttuuhuttsvxxxwwxuuwwxvvvwvtvttvvvvuuuoxywywwxywxyxxxxxxxxxwywwxvvvvvvvvvywyuvuxuuuuuuurtuutuuuwtwwuuututtttuuuuwuyxwxvvvxxvvxxxxxxvvvvwyvuuxuuxxxxxxxxxvvvxxxxtvxxuwuyvurvvvmutpvpxwwxpuywxwuywxxxxxuxvvvvvwyvuxuuuumwwxvxxxwwvvvvtvxvxwyvxttuuuuupywxwywxxxxuvvvvxwyvxuuuuptuvxxxvxxuttwvtuuuuwuuuuxvvxxxxuuuuvuuuuxxxxxvttssrvxyvxuupwuuwwuqtuuvxvwttwwxvuujuutytutuuuvvsuxxvtxvxxxxtvytuuvvvuvvvvtuyvuxuuuuutvvuvvuuxxvvunutttsstxtsxxuwuuwvxuuvuuruuvtuuuvuvuovwvtstutwwwuvttuvutuuuttvvuuvtttttutqywwxwwxuxuxxvuuuttsvuvvtvuvuuvwryxxxyxvvyvxuustxxuuwwuuvvvuvvvuwxryvxxyvvvyvxuunuvrtystxystrwstttsstvuxvxxxwwxxuxxxxvttttttvwutvuwvvvvvvwuvwtwstttttsstvtuhvtwwtsttvuvvsuxxuuvtvxvvxuuvxvtwxvuvtttrrrqvtvtutttvtwwtuyvttxuuttunttxxtrrvyuvttxjvtvvuvvsutxvtvvxxvvvtuvvuyvxuurxxvwxyvxuuutwwutuuuvxvyvxupvvwxvvyvxulvvvvxvxuxttxvvxssvvrwwwttxxxuwwwvxuuuyttxxxvvvyttyvxuuukxxxwwwuvxuuuuuuluuxtrxwwuutxxxxxxxxxtvvvvvvvvrxwwvyvxuuuuuuuuquuuvv|vuwxxwswsxvxuuqtqxyywywwxwxyyxxxxxxxxxwywwxvvvvvvvvvwyuvuuxuuuuuuxvvxtptvvxxwxuuttutvwxwvxuuuxxxxwxyuvxuuuptuvxxxvxxuttwvtuuuuwuuuuxxxvvxxuuuuvuuuupwuuwwuqtuuvxvwttwwxvuutvvsssssrttvvvvvsvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwxoutwxvvwvvunvtwstttsyttttvsvyvxuumxvxxuxxxxxxvuwxxxxtxxuxxxxxwyywvvwwwutuvxwtuvuuxuuuvxuvvxxuxtxuutuvxwtuvuuxuuupuwwwxwwwuuxuuvuvuvuvuvxxxuulttuuxtvvvvuwvtvvupuxwxwwwpuxuxwwuvvxvvyvxuptwvwxwvwvrxuxwttwvwxvxxxxxxxxxxxxwxxxvwvvvvvvvvvvvvvvvrxuxwtuyuttuuuuuuuuuuuuxxxvpyyyyxxvvpxxxxxxvvvxxxpwwwvxxxxwwwvvvvvxxxxvxxvvyuuttyuqxxyxyyxxxyxxxxxxxxvvvvvvvyyxyvuuxuuuuuvvvvvvxxxxvvvvvvwluuvvvvtwwvwuvxuuuuuuttyvxuuuuttssrvtwtttvuxv|uuuurxxxxvvwxxyvxuupwtuuvxxwxvxxuttuwvmxttvxxtvv|vtlxtuxvuwxxxxvxvvurwyxxuvvyywyyxyxttuuyvyytyyuyuxtuxyuutvwtqwtuuuwvtxvwttuvwxlttttxututvustvttvtttttxtxuvvvxuxwxxututvuuustvvutttutvvvvvwxvttt|vuuuttttuuuptuvxxxvxxuttwvtuuuuwuuuuxxxxvvxuuuuvuuuupwuuwwuqtuuvxvwttwwxvuupwtuuvxxwxvxxusttwvtxxxxxxrwvyywyyxxttuuuxvyuutvwtqwtuuuwvtxvwsttvwxqswwxwuuqxvxvxxvxwxwwvxwxxvuxyvxuutttxxxwwwuuxxkwxxvvvtxwxxvvxuvvuvvvuvvwtxuuwwxxvvvtxwxxvvxvxwwxxxxxxxvwwxxxxxxxxxxxxxuxxxxuvvuvvvuvvyxwvuvvvvwwwvuvvvvvvvvvwwvtxxuuwvnuuyuuuuuuvxuuuuuuuuuuuuuuuuuottwvtswvvttvvvxwwwuuvwvtuuuvuuvvvswvvyvxuuuuuuuuumwuvxxxxxvxtuutuuwwwwwovvxxvvyvttxttuyvxttuuuunuvywxywuvwyvxttumuwxyvvvxxvxuuuvwxxyxxxxxxuxwyxwtxyxxxvvvxxtvvvvvvvvvvvtvvxuwuyvxttuuuuuuuttuuuwxwvyvxutyyyxxvxuuuuoxxvuvuyyyyxyxtxqxyxxxxxyxvvvuyvxuuuunutxwwvvvvvvujutsvvxxuuwwvvvwwvwuuuwutsvwvvtvvvvvuvvrxxxxvvwxxyvxuurvvvxvvtvvtvxttttugvuvwuvwuxwtxxvuwyxvuuvvvuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvytxuxtttxvuuuutttvuvvwuvustwuxwtxxwvusxxxxxvtxxxxxyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxxxvwtvxxxwtxwyxtsuxxxxxxxxxxuxvuuttsttvttsttvtttttvuuuuuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvyttttttuuxtsttttsuxtttxttttttttvvvvvvvvvvtvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvuvvvtvstuuvuuxuuuuyuuuuttuuuuuuuuuuuuutttttttttttttttttttttttttttttttttttttttuuttuuuuuuttttuuuuuuuvusutvtwuxxtvtvuuuyvxuunuuuuuvtuuuuuuttttttttttttttttutttttttutttttttttttuuuuuvuuuuutuvtuuttttttttttttttttutttttttutttttttttttuvuxuvuptuvxxxvxxuttwvtxtutuvvvuwwuqtuuvxvwttwwxputxxxxuutuuutunuuuxxuvuutttuvtutuutuxutxxxxwuumtxtqtuvttuuuunyvvyttvvuuvvvvmvvxtvvxwxwvxtvvwuwuyvttxuuutwuvvxxxxlxyvttxpyvxvuuuuuuuuuvuuuuuuuutvuuxxxxxxxxxxpvxnuxxwuuvyvttxupuvvvvvxvvuxuvtuuuuuuvyttsvvvwxvxyvxuvvvxvwyvxttuvvxvuypyxvvyxxxxuxvvvvvvuuyvxuuuupyyxuvyvxuvvpuuuxxvvuyvxuuumyttttttttxxxxxxxxxyttttvvvvvvvvvttttyvxuuuuuuuuuxxxwxxxxxxxxxxxxxwvvvvvvvxxxyvuxuuuuuuutxvvysuyvvwuytxxvxxvvtuvvvvvwxxxxxxxxxxvvwyvuxuuuuyysuuttrrrrrttrrrruxvxutvtuttttututtuyywuttuvttxvxuututtttututtvyyywuttuvttxvxuuuvxxwyvxttxwyvxttwyvttxtyvvvvvvxvvtyvvvvvvxvwuwyuvuvuvuvuvuvxwutuutuutuvuxvtrsyvxttuuuuuuuuuttvvvvnsvutxxxsvuxxxxwtxxxxxxvvvvvttxtyuuuuuxxuulvvxvvxwwxwxuuuupustuxwxuvtuurxxwvvvxvwxvvvtvvvvxlvxvxuutxwvxwtwvwouuuuyxxuuuuuuqvvxptuptuqvxvxvxxvwyvxuvwvxuuuuwxunswv|uuouuuuuuuuuuuxxxxxxvvvvvvuuwyvuuxuuuupvvvvvvxxxxvvvvwvvyvuuxuusuuuuttvtwwvwuvuuxuuuuuttnvtvxlx|xxxvv|yvxuuuwvwqtuvttqtuvwttwvwqtuvttqtuvvttwvwqtuvttqtuvwttwvwqtuvttqtuvwttquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvwxxouuwxvvwutquvwxxouuwxvvwtttywttqtuuvtttuqtuuvtwttuwvwqtuvttqtuvwtttttywwttqtuuvtsttqtuuvtwsttwqtuvttqtuvwttxxtttywwttqtuuvtttuqtuuvtwttuwqtuvttqtuvwttrvvxxvvvvxxtxxxxxvvvvvvwxvvttuuuyvvvvywtuxvvxuuuuyuuvxuuuupuxyuuuxxxxxxyvvvvvuuyuvxuuuuqtttuxsvvvvuuvvuttxtttuvvvvsuxxtxxxxxxxxxxxxxsxxvxxqprquvuvuvuvuuqquvuvtuvvvvvvtvvtvvvvtvvvvvtttttxrsyuuvuuxuuuuuuuuuuutuvu|vuqwwvvvwwxvxutxxvvvvvvvvvxxxvvvututvvvvvvvvwuuuwwwuyuvxuuunttxxwwvtvvpxuywxwxuywxxxxxxuxvvvvvvwyuvuxuuuuoxxxxxxxxxxxxxxxxxxxvvvvvvvwxxyvxuuuuuuuuuuuuuxvxutvvvxxxvvvxxxututuuuvvvvvvwuuuuuyvxuuuuuuouuuyvvvxvwwuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvwwyvuuuxuuuuuuuussrwttuv|uuunvxtxxwyxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvwyyxxttwvvxtxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxyvwtxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvttwwvvvtvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvsuuuyyxxuyvuxuuuuuutttttttttttttttttttttttttttttttttttttttuttuivvvuxxttuvtvvuutxxxxxxxxxxxttyuuvvvvvttttruxvywtuxwwrvxxvuxuvvvxxxxxxxxxxxvvvvvvvvuxuyuvttxuuuuuukttxxxvvvvvvvwvtvvuuuunxttvxxwuwwvxxxwxvttxxxxxxxxxxxxvxxwxxxuwwvvvvvvvvvvvvvvvvxxxwuuyvuttxuuuuuuuuuuuuuuvuuuotttvuuuuututtvvuuvvqtvtvxxxtvvvvtyvxuuuqvxqyvxxyvvvyvxuunuxxwuuvyvttxulvxxuuuuuuxvwxuxwttvxtvvuxtwxxxuuuuuuxxxxxxxxuuuuuuxtttyutvttvttttttywtxuxwpwtuuvxxxvxxuttuwwvtxxxxxrwyxvyyyxxttuuyyyvwytvwtqwtuuuvtxvwttuvwwxxywyxwxyxxxxxxwyxvvvvvvwyuvuxuuuumuvutvvtuwutxxvxxxxxxtxvvvvvvvvvvutvvtuwttxxxxxxxxxvvvyuuuyuuuttuuuuuurvvttxvxutvvxxvvxxututvvvvvvwuuttyvxuuuuxuuuuuuxxxxxxxxxxxxxxxxxxxxtuwxwtuwxwtuwxwtuwxwtuwxwtuwxwtuwxwvtvuvuutwtxxxxtvwwtuuuuvvuvvxtwwttrstsxtttxttttuxxvxnvwvxuxvvuuvxvvvwxxxxxxxxwxxxxwvxuxvvvvvvvvvvvvvvuuvxyuvxuuuuuuuuuuuxxxxxvvvvvyvuxuuuuwvvxvxxvvxuuovwvxkyvvvuytyuwqtptxtvyvttxuttussrtwtttuuv|uuuvvssrxtwttvuuxvu|uuukvvuvvsuxvvtvvuvuuyvxkuxxxxxxwxyuuxxxxxvxxxwtwxxxxxxxxxwvvvvvvvvvvvuxxxyvxuuttuuuuuuuuuuuuquxtwwvuxuptuvxxxvxxuttwvuuruxxttttvutttvutttvvvttttvtutwwuuqtuuvxvwttwwxuuuupywxwywxxxxuvvvvxwyvxuuuutuutyyvwtwtuxwtuxwtuxwtuxwtuxwtuxwptwxtuxwtxtuxuuvvxxvxvxxxxxxxvvvvvvvxyvuxuuuutvtvxxvvwyvuxurssnttxvwvuuuurtsqxxxxxyyvvwxwxxxxxxxxxxyxyvxwuwwtwxxwtyxyxxutvvwxvutvtwuvtututwxxxwvvyvuuuxttuuuuuuuttuuuvxvxttvxxxvtxvxvvvvv|unwtuuuxwtvttsxttxtyxxxwxwuuuttuuuxvxxxvutvvvtvuvuyvvtxvvtsvxuytvvuvtutttxxxxxxxxuxxxtxtxuwyxxxxvvtxtvvvvvvvvvvvvvvvtvvtsvxuyvuuxuuuuuuuuuuuuuttuuuxvttttuu|uttuuuuutttuuuuuuttuuuuuuuutrwxxwruwxxwpxvxxvv|vuuttxsuvvvvvxuiutsuwxttvuxsusutvrsuwxxxxxxxxxxxxuxtutxxxttvusxuutusuvvvuuuvuvuvuusturtvvuttuuvuuxvvtuvxvttt|vuuutttututttunxwxxxxxxvwxxxxxxxvxwtuvtvvvvxxxxxxupuuyvttxuuuuuuuuttevxuuuuuxvwxuxwttvuxytvtwxxuuuuuxxxxxxxxuuuuuxtttvtttttttwtxuwuuwwxwpuvxvvuvvxuuwwuvxvxxtxxxxxxxxxuxxvvvvvvvvvvvvvuvvxwuuwwuuqxxvvtvuxxxxxxxvvvvvvvtxxyvxttuuuuuupuuyuvxuuuuuuuuuuuquuxuvxvxxuxvvvxuyvxuuusytytsxvtuxvu|vsytytsxvtuxvu|usytytsxvtuxvu|vsytytsxvtuxvu|ukvxvsuvvtxxvvuvvvxyvxuuxwvwxuwyxxvxwyuuttvuyvvwuwxxxwxxxxxxuvuxxwvvwuvutwvwvwvvywuwuvvvvxwtvuwyttuuuujuvywwxxvxxvuuvvsuxvvtxvxxxxxxxxxvvywwxxuuvvuvvvvvvvvxxvuyvxuuuuuuuunxuyvxttuvvpxxyxxxyvxyxxxuvtvuyvuuxuxxuwtxxvvtxnwxvuxxwvvxyvxuusyxxyxyvxttnvvxxvvyvttxttunuwwxwvuxtuwvwxtxxxxxxxwuxxvvvvvvvvvuxutyvuxuuuuuuuntttxuxtwwwwwvvuvuosuxxttvvxuuuvvvwvuuvxuuuuuuuuuxvuuwvxtxuxttrqvxutvxutttxtvvvvvvvvvxvvvxutttvutvvtsxxutttututtuttuuvuuvvttuuxytxmvvxwuvvyuuuuuxvxutttvvvxxxutttutvvvwuuuuuyvxuuuouuuyvvvxvvvuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvvvyvuuuxuuuuuuuuotuuttvtvwxttuuvvxv|vuixvuxuuttvutxyvyvuvxxuxuxxutvuuwuuuutvttvwtuutxvtt|vuuunswv|uuuuvxttvxxvtxvvvvv|ulwtuuuxwtvttsxttxtyxxxwxwuuuttuuuxvxxxvutvvvxvtttt|utttttrwxxptuuttvtvwxttuuvvxv|vuiuttututututuvuwxsvtustutvrttvtuuttutxxxxuxxtvvvxxxxutxwxuxxututxuxvututuvuswxutusuvvtttuuuvvuvuvuvvvutustturvuvvtvvuttuuvuuxvvtuvxvttt|vuuttttttuutuuutttuultttututuuwsvtvttvtuttutsuxxtvvvxutwuxuvutuuwussvutttuvuuvvuvvxvt|vutttttutumxxxwxxwuswurwwtvvsxurrrwrvrwvuwvvvvtsuutuxxxxxxuvtxvuvuwvvvvvvvvvvtuuvvxuuuuuujvtvvuvvsutxvtvxvxvvvuvtvuyvxuuuuxxrxxvwxyvxuuurtvuurvvrtvvrtvrtvpxxwwxxwxwxxwwuxxwvxxxvuwxwxwxwxxxwvvuxxwxwxtuuvvvvvvvvvxwwuuuwuuuuuuuuuuwwuvuuuuwwwxvxtwvuwxvyxxxxxxyxwxvxxwxxxxxxxxxuytttu|uxuuxuxuxuxuxuxtvvvwuwwuwwuwuyxuutuwtuuuuuuuttttuutuquuuuuttttuurxvyvvvvwvxvyxxttvuxwvxxxxxxxxxxxxyvxxvvvvwvttwxvtvvvvvvvvvvvvvuyxxyuuuuuuuuuuuuttxwvuvvvvkvxxvwxuxwxvuvvxwwxvwxxvwxuxwmuuvuuuuuutxwwtxwwtxwwutxwwtxwwuxwsxwrvvyvtvtvvuttssrytuttxrrvvvvvtxxxxxtwrsutttvvtttuvvvvuuvtuxvvuxxvvxvvuuwvvwxvxxxvxxxxxxuvvwuuxtuuuuuunttxxxwvtvvjkmqkqnnlklpqmqnmnllpnnomlmmmlqomlollmnqjmponnoijlnjglolnjjinolmllklmlhikhltnjikmllnnmmmmjmmlnmlnnkllpomljijthuljvljvmoppnqmollmjlijjjjkjklqkiihihonjnjqhpkjljnjlijpmorlmkmpkmljlplmljlklkklkllmjommnmmnnkhlikkmhinghkjjloqlilnnmiihjmnipllhhkmlgglihgjlllmilheknkihrnmlllokippopnqlmiominjnlgmjnhlnqnlvpsvpvoqtqlllnjttog||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||yyyywwwxxxxxxxwwwwwwwvvvvvvvvvvwwwwwwwwvvvvvxxxxxxxxxxxxwwxxxxwwwwwwwwwwwwwwwwwwxxxxxxxxxwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxxxxxxwyyyyyxxxxxxxxxwwvvvvwwxxvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwxxxxxxxxxyyyyxxxxxxxyyywwwwwwwwwwvvwwwwwxxxxxxvvvvvwwvvvvvvvxxxxxvvv
\ No newline at end of file
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.prx has changed
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.tii has changed
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/_0.tis has changed
--- a/apps/samples/Ensemble8/src/generated/ensemble/search/index/listAll.txt	Wed Mar 27 08:57:00 2013 -0400
+++ b/apps/samples/Ensemble8/src/generated/ensemble/search/index/listAll.txt	Wed Mar 27 09:57:53 2013 -0400
@@ -1,10 +1,10 @@
-_0.fdt:6352614
-_0.fdx:98764
+_0.nrm:110614
 _0.fnm:116
-_0.frq:399602
-_0.nrm:111109
-_0.prx:365463
-_0.tii:15509
-_0.tis:1030951
+_0.tis:1019597
+segments_1:237
+_0.fdx:98324
+_0.fdt:6362140
+_0.prx:320798
 segments.gen:20
-segments_1:233
+_0.frq:373302
+_0.tii:15713
Binary file apps/samples/Ensemble8/src/generated/ensemble/search/index/segments_1 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/Ball.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.bouncingballs;
+
+import static ensemble.samples.graphics.bouncingballs.Constants.*;
+import javafx.animation.Animation.Status;
+import javafx.animation.Interpolator;
+import javafx.animation.KeyFrame;
+import javafx.animation.KeyValue;
+import javafx.animation.Timeline;
+import javafx.event.EventHandler;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.shape.Circle;
+import javafx.util.Duration;
+
+public class Ball extends Circle {
+
+    private static final Duration DURATION = Duration.millis(850);
+    private static final double FLOOR = HEIGHT / 2 - HEIGHT_CORRECTION - 10;
+    private Timeline timeline;
+    
+    public Ball(final int index) {
+        initBall(index);
+    }
+
+    private void initBall(final int index) {
+        setRadius(BALL_RADIUS);
+        setCenterX((index + 1) * 2 * BALL_RADIUS + index * SPACE_X);
+        setCenterY(INFOPANEL_HEIGHT + BALL_RADIUS);
+        setCache(true);
+        setFill(BALL_GRADIENT);
+        createTimeline();
+        setOnMousePressed(new EventHandler<MouseEvent>() {
+            public void handle(MouseEvent me) {
+                if (timeline.getStatus() != Status.RUNNING) {
+                    timeline.play();
+                } else {
+                    timeline.pause();
+                }
+            }
+        });
+
+    }
+
+    
+    private void createTimeline() {
+        timeline = new Timeline();
+        timeline.setCycleCount(Timeline.INDEFINITE);
+        timeline.setAutoReverse(true);
+
+        final KeyValue kv = new KeyValue(
+                translateYProperty(),
+                FLOOR ,
+                Interpolator.SPLINE(0.05f, 0, 0.5f, 0));
+        final KeyFrame kf = new KeyFrame(DURATION, kv);
+        timeline.getKeyFrames().setAll(kf);
+    }
+
+    public void reset() {
+        timeline.stop();
+        setTranslateY(0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/BallsPane.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.bouncingballs;
+
+import static ensemble.samples.graphics.bouncingballs.Constants.*;
+import java.util.ArrayList;
+import java.util.List;
+import javafx.scene.Parent;
+import javafx.scene.effect.Reflection;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+
+public class BallsPane extends Parent{
+
+    private List<Ball> balls;
+
+    public BallsPane(){
+        init();
+    }
+
+    private void init(){
+        balls = new ArrayList<Ball>();
+        for (int i = 0; i < NR_OF_BALLS; i++) {
+            balls.add(new Ball(i));
+        }
+        
+        getChildren().add(createBackground());
+        getChildren().addAll(balls);
+
+
+        createReflectionEffect();
+    }
+
+    private void createReflectionEffect() {
+        final Reflection reflection = new Reflection();
+        setEffect(reflection);
+    }
+
+    private Rectangle createBackground(){
+        final Rectangle rectangle = new Rectangle();
+        rectangle.setWidth(WIDTH);
+        rectangle.setHeight(HEIGHT/2 + BALL_RADIUS);
+        rectangle.setTranslateY(INFOPANEL_HEIGHT);
+        rectangle.setFill(Color.TRANSPARENT);
+        return rectangle;
+    }
+
+    public void resetBalls(){
+        for(Ball b: balls){
+            b.reset();
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/BallsScreen.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.bouncingballs;
+
+import javafx.scene.Group;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Line;
+import javafx.scene.control.Button;
+import javafx.stage.Screen;
+import javafx.stage.Stage;
+
+import static ensemble.samples.graphics.bouncingballs.Constants.*;
+
+public class BallsScreen extends Parent {
+
+    private final Line line = createLine();
+    private final BallsPane ballsPane = createBallsPane();
+
+    public BallsPane getPane(){
+        return ballsPane;
+    }
+
+    public BallsScreen() {
+        getChildren().addAll(line, ballsPane);
+    }
+
+    private Line createLine() {
+        final Line line = new Line();
+        line.setEndX(WIDTH);
+        line.setTranslateY(HEIGHT / 2 + INFOPANEL_HEIGHT + BALL_RADIUS);
+        line.setStrokeWidth(5f);
+        line.setStroke(Color.BLACK);
+        return line;
+    }
+
+    private BallsPane createBallsPane() {
+        final BallsPane ballsPane = new BallsPane();
+        return ballsPane;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.bouncingballs;
+
+import javafx.application.Application;
+import javafx.stage.Stage;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.paint.Color;
+import javafx.scene.Group;
+import javafx.scene.layout.VBox;
+import javafx.scene.control.Button;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Insets;
+
+/**
+ * A sample that shows animated bouncing balls. 
+ * Select a ball to start or stop the animation. 
+ * Select the reset button to stop all the balls.
+ *  
+ * @sampleName Bouncing Balls
+ * @preview preview.png 
+ *  
+ * @see java.util.ArrayList
+ * @see java.util.List
+ * @see javafx.util.Duration
+ * @see javafx.stage.Stage
+ * @see javafx.stage.Screen
+ * @see javafx.scene.Parent
+ * @see javafx.scene.Group
+ * @see javafx.scene.Scene
+ * @see javafx.scene.Node
+ * @see javafx.scene.effect.Reflection
+ * @see javafx.scene.shape.Rectangle
+ * @see javafx.scene.shape.Line
+ * @see javafx.scene.shape.Circle
+ * @see javafx.scene.paint.Color
+ * @see javafx.scene.paint.CycleMethod
+ * @see javafx.scene.paint.RadialGradient
+ * @see javafx.scene.paint.Stop
+ * @see javafx.scene.control.Button
+ * @see javafx.scene.text.Text
+ * @see javafx.application.Application
+ * @see javafx.animation.Interpolator
+ * @see javafx.animation.KeyFrame
+ * @see javafx.animation.KeyValue
+ * @see javafx.animation.Timeline
+ * @see javafx.animation.Animation.Status
+ * @see javafx.event.EventHandler
+ * @see javafx.event.ActionEvent
+ * @see javafx.scene.input.MouseEvent 
+ * @see javafx.geometry.Insets 
+ */
+
+public class BouncingBallsApp extends Application {
+    private BallsScreen ballsscreen;
+
+    public Parent createContent() {
+        ballsscreen = new BallsScreen();
+        ballsscreen.setLayoutX(15);
+        ballsscreen.setLayoutY(20);
+        final BallsPane pane = ballsscreen.getPane();
+
+        Button resetButton = new Button("Reset");
+        resetButton.setOnAction(new EventHandler<ActionEvent>() {
+            public void handle(ActionEvent event) {
+                pane.resetBalls();
+            }
+        });
+        VBox vb = new VBox(10);
+        vb.getChildren().addAll(resetButton, ballsscreen);
+        vb.setPadding(new Insets(15, 24, 15, 24));
+        vb.setMaxSize(VBox.USE_PREF_SIZE, VBox.USE_PREF_SIZE);
+        vb.setMinSize(VBox.USE_PREF_SIZE, VBox.USE_PREF_SIZE);
+        return vb;
+    }
+
+    @Override public void start(Stage primaryStage) throws Exception {
+        primaryStage.setResizable(false);
+        primaryStage.setScene(new Scene(createContent()));
+        primaryStage.show();
+    }
+
+    /**
+     * Java main for when running without JavaFX launcher
+     */
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/Constants.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.bouncingballs;
+
+import javafx.scene.paint.Color;
+import javafx.scene.paint.CycleMethod;
+import javafx.scene.paint.RadialGradient;
+import javafx.scene.paint.Stop;
+
+public final class Constants {
+
+    private Constants() {
+    }
+    public static final String TITLE = "Bouncing Balls Demo";
+    public static final int NR_OF_BALLS = 5;
+    public static final float WIDTH = 700f;
+    public static final float HEIGHT = 400f;
+    public static final int INFOPANEL_HEIGHT = 50;
+    // due to native OS stripe in stage
+    public static final float HEIGHT_CORRECTION = 30f;
+    public static final float BALL_RADIUS = 40f;
+    public static final int SPACE_X = (int) ((WIDTH - NR_OF_BALLS * BALL_RADIUS * 2) / (NR_OF_BALLS + 1));
+    private static final Stop[] STOPS = new Stop[]{new Stop(0, Color.WHITE), new Stop(1, Color.BLACK)};
+    public static final RadialGradient BALL_GRADIENT = new RadialGradient(45, 0.35f, 0, 0, 1, true, CycleMethod.NO_CYCLE, STOPS);
+}
Binary file apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/preview.png has changed
Binary file apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/bouncingballs/preview@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/calc/Calculator.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,462 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.calc;
+
+import ensemble.samples.graphics.calc.Key.Code;
+import javafx.event.EventHandler;
+import javafx.geometry.VPos;
+import javafx.scene.Parent;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.CycleMethod;
+import javafx.scene.paint.LinearGradient;
+import javafx.scene.paint.Stop;
+import javafx.scene.shape.Rectangle;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+
+
+public class Calculator extends Parent {
+
+    private static final double BORDER = 7.0;
+    private static final double TR_Y = 44.0;
+    private static final double WIDHT = Key.WIDTH * 4 + BORDER * 2;
+    private static final double HEIGHT = Key.HEIGHT * 5 + BORDER * 2 + TR_Y;
+    private static final Stop[] LINE_STOPS = new Stop[]{new Stop(0, Color.BLACK), new Stop(0.2, Color.GRAY)};
+    private static final LinearGradient LINE_FILL = new LinearGradient(0, 0, 0, HEIGHT, false, CycleMethod.NO_CYCLE, LINE_STOPS);
+    private static final int MAX_DIGITS = 10;
+
+    private Rectangle background;
+    private Rectangle numberBackground;
+    private Text numberText;
+    private Text operationText;
+    private Text memoryText;
+
+    private Key[] keys = new Key[Util.KEY_CODES[0].length * Util.KEY_CODES.length];
+
+    private String number = "0";
+    private String operation = "";
+    private String memory = "";
+    private boolean reset;
+    private boolean decimal;
+    private boolean opActive;
+    private int opCode = -1;
+    private double opNum1;
+    private double opNum2;
+    private double memNum;
+    private int selIndex;
+    
+    private boolean keyNavigatorActive;
+
+    public Calculator() {
+        init();
+        getChildren().addAll(background, numberBackground, numberText, operationText, memoryText);
+        getChildren().addAll(keys);
+    }
+
+    private void init() {
+        createBackground();
+        createNumberBackground();
+        createNumberText();
+        createOperationText();
+        createMemoryText();
+        createKeys();
+        addKeyListener();
+    }
+
+    private void addKeyListener() {
+        setOnKeyPressed(new EventHandler<KeyEvent>() {
+
+            @Override
+            public void handle(KeyEvent ke) {
+                processKeyEvent(ke);
+            }
+        });
+        setFocusTraversable(true);
+        requestFocus();
+    }
+
+    private void createBackground() {
+        background = new Rectangle(3, 3, WIDHT, HEIGHT);
+        final Stop[] stops = new Stop[]{new Stop(0, Color.GRAY), new Stop(0.2, Color.BLACK)};
+        final LinearGradient fill = new LinearGradient(0, 0, 0, HEIGHT, false, CycleMethod.NO_CYCLE, stops);
+        background.setFill(fill);
+        background.setStroke(LINE_FILL);
+        background.setStrokeWidth(3);
+        background.setArcHeight(20);
+        background.setArcWidth(20);
+    }
+
+    private void createNumberBackground() {
+        numberBackground = new Rectangle(3 + BORDER, 3 + BORDER, WIDHT - 2 * BORDER, 35);
+        final Stop[] stops = new Stop[]{new Stop(0, Color.GRAY), new Stop(0.2, Color.WHITE)};
+        final LinearGradient fill = new LinearGradient(0, 0, 0, HEIGHT, false, CycleMethod.NO_CYCLE, stops);
+        numberBackground.setFill(fill);
+        numberBackground.setStroke(LINE_FILL);
+        numberBackground.setStrokeWidth(1);
+        numberBackground.setArcHeight(10);
+        numberBackground.setArcWidth(10);
+    }
+
+    private void createNumberText() {
+        numberText = new Text();
+        numberText.setTranslateY(8 + BORDER);
+        numberText.setFont(Font.font("monospaced", 25));
+        numberText.setFill(Color.BLACK);
+        numberText.setTextOrigin(VPos.TOP);
+        numberText.setText(number);
+        onNewNumber();
+    }
+
+    private void createOperationText() {
+        operationText = new Text();
+        operationText.setTranslateX(8 + BORDER);
+        operationText.setTranslateY(13 + BORDER);
+        operationText.setFont(Font.font("monospaced", 10));
+        operationText.setFill(Color.BLACK);
+        operationText.setTextOrigin(VPos.TOP);
+        onNewOperation();
+    }
+
+    private void createMemoryText() {
+        memoryText = new Text();
+        memoryText.setTranslateX(8 + BORDER);
+        memoryText.setTranslateY(24 + BORDER);
+        memoryText.setFont(Font.font("monospaced", 10));
+        memoryText.setFill(Color.BLACK);
+        memoryText.setTextOrigin(VPos.TOP);
+        onNewMemoryOperation();
+    }
+
+    private void createKeys() {
+        for (int i = 0; i < Util.KEY_CODES.length; i++) {
+            for (int j = 0; j < Util.KEY_CODES[0].length; j++) {
+                final Key key = new Key(Util.KEY_CODES[i][j]);
+                key.setTranslateX(background.getX() + (Key.WIDTH + 1) * j + BORDER);
+                key.setTranslateY(background.getY() + (Key.HEIGHT + 1) * i + BORDER + TR_Y);
+                key.setOnMousePressed(new EventHandler<MouseEvent>() {
+
+                    @Override public void handle(MouseEvent me) {
+                        onKey(key);
+                    }
+                });
+                keys[i * Util.KEY_CODES[0].length + j] = key;
+                
+            }
+        }
+    }
+
+    private void onKey(Key key) {
+        final Code code = key.getCode();
+        if (code.getValue() >= 0 && code.getValue() <= 9) {
+            onDigit(code);
+        } else if (code == Code.M_PLUS || code == Code.M_MINUS || code == Code.M) {
+            onMemory(code);
+        } else if (code == Code.DECIMAL) {
+            onDecimal();
+        } else if (code == Code.EQUALS) {
+            onEquals();
+        } else if (code == Code.CLEAR) {
+            onClear();
+        } else if (code == Code.ADD || code == Code.SUBTRACT || code == Code.MULTIPLY
+                || code == Code.DIVIDE) {
+            onOperations(code);
+        }
+        refreshDisplay();
+    }
+
+    private void onDigit(Code code) {
+        opActive = false;
+        checkReset();
+        String tempText = number;
+        if (tempText.equals("0")) {
+            tempText = "";
+        }
+        number = tempText + code.getValue();
+        refreshDisplay();
+    }
+
+    private void onMemory(Code code) {
+        double tempNum = 0f;
+        try {
+            tempNum = Double.parseDouble(number);
+        } catch (Exception ex) {
+        }
+        if (code == Code.M) {
+
+            if (opCode == -1) {
+                opNum1 = memNum;
+            } else {
+                opNum2 = memNum;
+            }
+            number = String.valueOf(memNum);
+            return;
+
+        } else if (code == Code.M_PLUS) {
+            memory = "M";
+            memNum = memNum + tempNum;
+        } else if (code == Code.M_MINUS) {
+            memory = "M";
+            memNum = memNum - tempNum;
+        }
+
+        opCode = -1;
+        reset = true;
+        decimal = false;
+        operation = "";
+    }
+
+    private void onDecimal() {
+        opActive = false;
+        checkReset();
+        if (!decimal) {
+            number += ".";
+            decimal = true;
+        }
+    }
+
+    private void onEquals() {
+        performMathsOperation(!operation.isEmpty());
+        reset = true;
+        decimal = false;
+        operation = "";
+        opActive = false;
+    }
+
+    private void onClear() {
+        reset = true;
+        decimal = false;
+        opCode = -1;
+        opNum1 = opNum2 = memNum = 0;
+        number = "0";
+        operation = "";
+        opActive = false;
+    }
+
+    private void onOperations(Code code) {
+        if(operation.isEmpty()){
+            opCode = -1;
+        }
+        operation = code.getText();
+        if(opActive){
+            opCode = code.getValue();
+            return;
+        }
+        opActive = true;
+        if (opCode == -1) {
+            try {
+                opNum1 = Double.parseDouble(number);
+            } catch (Exception ex) {
+            }
+            reset = true;
+        } else {
+            performMathsOperation(true);
+        }
+        opCode = code.getValue();
+        decimal = false;
+    }
+
+    private void checkReset() {
+        if (reset) {
+            number = "";
+            reset = false;
+        }
+    }
+
+    private void refreshDisplay() {
+        onNewNumber();
+        onNewOperation();
+        onNewMemoryOperation();
+    }
+
+    /**
+     *
+     * @param getOpNum2 false, if the last operation should be performed again, true otherwise
+     */
+    private void performMathsOperation(boolean getOpNum2) {
+        reset = true;
+        if(getOpNum2){
+            try {
+                opNum2 = Double.parseDouble(number);
+            } catch (Exception ex) {
+            }
+        }
+        if (opCode == Code.DIVIDE.getValue()) {
+            opNum1 = opNum1 / opNum2;
+        } else if (opCode == Code.MULTIPLY.getValue()) {
+            opNum1 = opNum1 * opNum2;
+        } else if (opCode == Code.ADD.getValue()) {
+            opNum1 = opNum1 + opNum2;
+        } else if (opCode == Code.SUBTRACT.getValue()) {
+            opNum1 = opNum1 - opNum2;
+        }
+        number = String.valueOf(opNum1);
+    }
+
+    private void onNewOperation() {
+        operationText.setText(operation.toString());
+    }
+
+    private void onNewNumber() {
+        formatNumber();
+        numberText.setText(number);
+        numberText.setTranslateX(WIDHT - numberText.getLayoutBounds().getWidth() - 20);
+    }
+
+    private void onNewMemoryOperation() {
+        if (memNum != 0) {
+            memory = "M";
+        } else {
+            memory = "";
+        }
+        memoryText.setText(memory);
+    }
+
+    private void formatNumber() {
+        int dotIndex = number.indexOf(".");
+        if (dotIndex != -1) {
+            int eIndex = number.indexOf("E");
+            if (eIndex != -1) {
+                String eTemp = number.substring(eIndex);
+                if(number.length() > MAX_DIGITS){
+                    number = number.substring(0, MAX_DIGITS - eTemp.length()) + eTemp;
+                }
+            }
+        }
+        if(number.equals(".")){
+            number = "0.";
+        }
+        if (number.length() > MAX_DIGITS) {
+            number = number.substring(0, MAX_DIGITS);
+        }
+    }
+
+    private void processKeyEvent(KeyEvent e) {
+        String text = e.getText();
+        if(text.equals("0")){
+            onDigit(Code.DIGIT_0);
+        } else if(text.equals("1")){
+            onDigit(Code.DIGIT_1);
+        } else if(text.equals("2")){
+            onDigit(Code.DIGIT_2);
+        } else if(text.equals("3")){
+            onDigit(Code.DIGIT_3);
+        } else if(text.equals("4")){
+            onDigit(Code.DIGIT_4);
+        } else if(text.equals("5")){
+            onDigit(Code.DIGIT_5);
+        } else if(text.equals("6")){
+            onDigit(Code.DIGIT_6);
+        } else if(text.equals("7")){
+            onDigit(Code.DIGIT_7);
+        } else if(text.equals("8")){
+            onDigit(Code.DIGIT_8);
+        } else if(text.equals("9")){
+            onDigit(Code.DIGIT_9);
+        } else if(text.equals("+")){
+            onOperations(Code.ADD);
+        } else if(text.equals("-")){
+            onOperations(Code.SUBTRACT);
+        } else if(text.equals("*")){
+            onOperations(Code.MULTIPLY);
+        } else if(text.equals("/")){
+            onOperations(Code.DIVIDE);
+        } else if(text.equals(".")){
+            onDecimal();
+        } else if(text.equals("=")){
+            onEquals();
+        }
+        
+        switch (e.getCode()) {
+            case DELETE:
+                onClear();
+                break;
+            case LEFT:
+                selIndex--;
+                if (selIndex < 0) {
+                    selIndex = 19;
+                }
+                setSelKey(selIndex);
+                break;
+            case RIGHT:
+                selIndex++;
+                if (selIndex > 19) {
+                    selIndex = 0;
+                }
+                setSelKey(selIndex);
+                break;
+            case UP:
+                selIndex = selIndex - 4;
+                if (selIndex < 0) {
+                    selIndex = 20 + selIndex;
+                }
+                setSelKey(selIndex);
+                break;
+            case DOWN:
+                selIndex = selIndex + 4;
+                if (selIndex > 19) {
+                    selIndex = selIndex - 20;
+                }
+                setSelKey(selIndex);
+                break;
+            case ENTER:
+                if(keyNavigatorActive){
+                    Key key = keys[selIndex];
+                    onKey(key);
+                } else {
+                    onEquals();
+                }
+                break;
+            case ESCAPE:
+                clearSelKey();
+                break;
+        }
+        refreshDisplay();
+    }
+
+    private void setSelKey(int index) {
+        for (Key key : keys) {
+            key.setCellStroke(false);
+        }
+        keys[index].setCellStroke(true);
+        keyNavigatorActive = true;
+    }
+    
+    private void clearSelKey(){
+        for(Key key : keys){
+            key.setCellStroke(false);
+        }
+        keyNavigatorActive = false;
+    }
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/calc/CalculatorApp.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,89 @@
+
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.calc;
+
+import javafx.application.Application;
+import javafx.stage.Stage;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.Group;
+import javafx.scene.paint.Color;
+
+
+/**
+ * A calculator that performs simple math exercises.
+ *
+ * @sampleName Calculator
+ * @preview preview.png 
+ *  
+ * @see javafx.application.Application
+ * @see javafx.stage.Stage
+ * @see javafx.scene.Scene
+ * @see javafx.scene.Group
+ * @see javafx.scene.Parent
+ * @see javafx.scene.paint.Color
+ * @see javafx.scene.paint.CycleMethod
+ * @see javafx.scene.paint.LinearGradient
+ * @see javafx.scene.paint.Stop
+ * @see javafx.scene.input.KeyEvent
+ * @see javafx.scene.input.MouseEvent
+ * @see javafx.scene.shape.Rectangle
+ * @see javafx.scene.text.Font
+ * @see javafx.scene.text.Text
+ * @see javafx.event.EventHandler
+ * @see javafx.geometry.VPos
+ */
+
+public class CalculatorApp extends Application {
+    
+
+    public Parent createContent() {
+        final Calculator calculator = new Calculator();
+        return calculator;
+    }
+
+    @Override public void start(Stage primaryStage) throws Exception {
+        primaryStage.setResizable(false);
+        final Scene scene = new Scene(new Group());
+        scene.setRoot(createContent());
+        primaryStage.setScene(scene);
+        primaryStage.show();
+    }
+
+    /**
+     * Java main for when running without JavaFX launcher
+     */
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/calc/Key.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.calc;
+
+import javafx.event.EventHandler;
+import javafx.scene.Parent;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.CycleMethod;
+import javafx.scene.paint.LinearGradient;
+import javafx.scene.paint.Stop;
+import javafx.scene.shape.Rectangle;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+
+public class Key extends Parent {
+    
+    public enum Code {
+        
+        DIGIT_0(0, "0"), DIGIT_1(1, "1"), DIGIT_2(2, "2"), DIGIT_3(3, "3"),
+        DIGIT_4(4, "4"), DIGIT_5(5, "5"), DIGIT_6(6, "6"), DIGIT_7(7, "7"),
+        DIGIT_8(8, "8"), DIGIT_9(9, "9"), M_PLUS(10, "M+"), M_MINUS(11, "M-"),
+        M(12, "M"), DIVIDE(13, "/"), MULTIPLY(14, "X"), ADD(15, "+"),
+        SUBTRACT(16, "-"), EQUALS(17, "="), CLEAR(18, "C"), DECIMAL(19, ".");
+        
+        private String text;
+        private int value;
+        
+        Code(int value, String text){
+            this.value = value;
+            this.text = text;
+        }
+
+        public String getText() {
+            return text;
+        }
+
+        public int getValue() {
+            return value;
+        }
+        
+    }
+
+    public static final double WIDTH = 50;
+    public static final double HEIGHT = 37;
+    private static final Stop[] CELL_STOPS = new Stop[]{new Stop(0, Color.GRAY), new Stop(0.5, Color.BLACK)};
+    private static final LinearGradient CELL_FILL = new LinearGradient(0, 3, 0, 28, false, CycleMethod.NO_CYCLE, CELL_STOPS);
+    private static final Stop[] CELL_SEL_STOPS = new Stop[]{new Stop(0, Color.BLACK), new Stop(0.3, Color.GRAY), new Stop(0.99, Color.BLACK)};
+    private static final LinearGradient CELL_SEL_FILL = new LinearGradient(0, 0, 0, 28, false, CycleMethod.NO_CYCLE, CELL_SEL_STOPS);
+
+    private Code code;
+
+    private Rectangle background;
+    private Text text;
+
+    public Key(Code code) {
+        this.code = code;
+        init();
+        getChildren().addAll(background, text);
+    }
+
+    private void init() {
+        createBackground();
+        createText();
+
+        initListeners();
+    }
+
+    private void initListeners() {
+        setOnMouseEntered(new EventHandler<MouseEvent>() {
+            @Override public void handle(MouseEvent me) {
+                background.setFill(CELL_SEL_FILL);
+            }
+        });
+
+        setOnMouseExited(new EventHandler<MouseEvent>() {
+            @Override public void handle(MouseEvent me) {
+                background.setFill(CELL_FILL);
+            }
+        });
+    }
+
+    private void createBackground() {
+        background = new Rectangle(WIDTH, HEIGHT);
+        background.setFill(CELL_FILL);
+
+    }
+
+    private void createText() {
+        text = new Text();
+        text.setFont(new Font("Amble Bold Condensed", 12));
+        text.setTranslateX(21);
+        text.setTranslateY(17);
+        text.setFill(Color.WHITE);
+        text.setY(5);
+        text.setText(code.getText());
+    }
+
+    public void setCellStroke(boolean selected) {
+        background.setStroke(selected ? Color.WHITE : Color.TRANSPARENT);
+    }
+
+    public Code getCode() {
+        return code;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/calc/Util.java	Wed Mar 27 09:57:53 2013 -0400
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.graphics.calc;
+
+import ensemble.samples.graphics.calc.Key.Code;
+
+public final class Util {
+
+    private Util() {
+    }
+    public static final double WIDTH = 221;
+    public static final double HEIGHT = 249;
+    public static final String TITLE = "Calculator";
+    public static final Code[][] KEY_CODES = new Code[][]{
+        {Code.M_PLUS, Code.M_MINUS, Code.M, Code.DIVIDE},
+        {Code.DIGIT_7, Code.DIGIT_8, Code.DIGIT_9, Code.MULTIPLY},
+        {Code.DIGIT_4, Code.DIGIT_5, Code.DIGIT_6, Code.ADD},
+        {Code.DIGIT_1, Code.DIGIT_2, Code.DIGIT_3, Code.SUBTRACT},
+        {Code.DIGIT_0, Code.DECIMAL, Code.CLEAR, Code.EQUALS}
+    };
+}
Binary file apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/calc/preview.png has changed
Binary file apps/samples/Ensemble8/src/samples/ensemble/samples/graphics/calc/preview@2x.png has changed
--- a/build.gradle	Wed Mar 27 08:57:00 2013 -0400
+++ b/build.gradle	Wed Mar 27 09:57:53 2013 -0400
@@ -1,11 +1,47 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.concurrent.ConcurrentHashMap
 import java.util.concurrent.CountDownLatch
+import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
 import java.util.concurrent.Future
 
 /**
  * The main build script for JavaFX.
  *
- * Tasks to complete:
+ * MUST FIX tasks to complete:
+ *  - build check -- making sure the final artifact has the right bits
+ *  - JavaDoc needs to use the -javafx flag (waiting for fix in JDK 8 to be able to use this)
+ *      - I've seen 'gradle javadoc' fail, whereas 'gradle :javadoc' succeeds. Need to investigate.
+ *  - Perform sanity checking to make sure a JDK exists with javac, javah, etc
+ *  - Support building with no known JDK location, as long as javac, javah, etc are on the path
+ *  - Check all of the native flags. We're adding weight to some libs that don't need it, and so forth.
+ *
+ * Additional projects to work on as we go:
+ *  - The genVSproperties.bat doesn't find the directory where RC.exe lives. So it is hard coded. Might be a problem.
  *  - special tasks for common needs, such as:
  *      - updating copyright headers
  *      - stripping trailing whitespace (?)
@@ -13,141 +49,233 @@
  *  - findbugs
  *  - re needs?
  *  - sqe testing
- *  - build check -- making sure the final artifact has the right bits
  *  - API change check
- *  - JavaDoc
- *      - There is a built in task, but I need to exclude any API that doesn't start with javafx as the package name.
- *        Also I need to link in to the Java 8 javadocs. Also need to link to public FX docs in the binary stub sdk
  *  - Pushing results to a repo?
- *  - partial builds for compileXXX shaders isn't working (they also get compiled)
+ *  - partial builds for compileXXX shaders isn't working until after 2 compiles
  *  - ServiceWithSecurityManagerTest fails to complete when run from gradle.
  *  - Integrate Parfait reports for C code
  *  - jar everything with includeEmptyDirs set to false
- *  - Need to compile hlsl files
  *  - FXML Project tests are not running
-// ENV has:
-//   JAVA_ARCH
-// Can also get JAVA_HOME, JDK_HOME, etc IFF the environment variables are set
-//println System.getenv();
-// Properties has:
-//   os.arch
-//   java.specification.version
-//   java.vm.specification.version
-//   java.runtime.version
-//   file.separator
-//   os.name
-//   path.separator
-//
-//println System.getProperties()
-
  */
 defaultTasks = ["assemble"]
 
 /******************************************************************************
- *        Utility methods, variables                                          *
+ *                              Utility methods                               *
  *****************************************************************************/
-String readSetting(String settingName, String defaultValue) {
-    boolean hasProperty = System.getProperties().containsKey(settingName);
-    if (hasProperty) return System.getProperty(settingName);
 
-    boolean hasLowerProperty = System.getProperties().containsKey(settingName.toLowerCase());
-    if (hasLowerProperty) return System.getProperty(settingName.toLowerCase());
-
-    boolean hasEnv = System.getenv().containsKey(settingName);
-    if (hasEnv) return System.getenv(settingName);
-
-    return defaultValue;
+/**
+ * If the given named property is not defined, then this method will define
+ * it with the given defaultValue. Any properties defined by this method can
+ * be substituted on the command line by using -P, or by specifying a
+ * gradle.properties file in the user home dir
+ *
+ * @param name The name of the property to define
+ * @param defaultValue The default value to assign the property
+ */
+void defineProperty(String name, String defaultValue) {
+    if (!project.hasProperty(name)) {
+        project.ext.set(name, defaultValue);
+    }
 }
 
-def is64Arch() {
-    return System.properties['os.arch'].toLowerCase().contains('64')
+/**
+ * If the given named property is not defined, then this method will attempt to
+ * look up the property in the props map, and use the defaultValue if it cannot be found.
+ *
+ * @param name The name of the property to look up and/or define
+ * @param props The properties to look for the named property in, if it has not already been defined
+ * @param defaultValue The default value if the property has not been defined and the
+ *                     props map does not contain the named property
+ */
+void defineProperty(String name, Properties props, String defaultValue) {
+    if (!project.hasProperty(name)) {
+        project.ext.set(name, props.getProperty(name, defaultValue));
+    }
 }
 
-ext.osName = System.properties["os.name"].toLowerCase();
-ext.isMac = osName.contains("mac") || osName.contains("darwin")
-ext.isWindows = osName.contains("windows")
-ext.isLinux = osName.contains("linux")
-ext.isiOS = false;
-ext.isLinuxARM = false;
-ext.isSWT = true;
-ext.isCygwin = isWindows; // At this time, we assume on Windows you must have CYGWIN installed
-ext.objExt = isWindows ? "dll" : isMac ? "dylib" : "so"
+/******************************************************************************
+ *                                                                            *
+ *                   Definition of project properties                         *
+ *                                                                            *
+ *  All properties defined using ext. are immediately available throughout    *
+ *  the script as variables that can be used. These variables are attached    *
+ *  to the root project (whereas if they were defined as def variables then   *
+ *  they would only be available within the root project scope).              *
+ *                                                                            *
+ *  All properties defined using the "defineProperty" method can be replaced  *
+ *  on the command line by using the -P flag. For example, to override the    *
+ *  location of the binary plug, you would specify -PBINARY_PLUG=some/where   *
+ *                                                                            *
+ *****************************************************************************/
 
-ext.javaHome = System.getProperty("java.home")
-ext.jdkHome = readSetting("JDK.HOME", javaHome.endsWith("jre") ? javaHome.substring(0, javaHome.length() - 4) : javaHome)
-ext.binaryStub = file(readSetting("JFXRT", jdkHome + "/jre/lib/ext/jfxrt.jar"))
-ext.javac = "$jdkHome/bin/javac"
+// These variables indicate what the platform is that is doing the build. Is
+// this build running on a Mac, Windows, or Linux machine? 32 or 64 bit?
+ext.OS_NAME = System.getProperty("os.name").toLowerCase();
+ext.IS_64 = System.getProperty("os.arch").toLowerCase().contains("64");
+ext.IS_MAC = OS_NAME.contains("mac") || OS_NAME.contains("darwin");
+ext.IS_WINDOWS = OS_NAME.contains("windows");
+ext.IS_LINUX = OS_NAME.contains("linux");
 
-// Set when needed in loadVisualStudioProperties
-ext.WINDOWS_VS_VSINSTALLDIR = readSetting("VSINSTALLDIR", "C:/Program Files (x86)/Microsoft Visual Studio 10.0")
-ext.WINDOWS_SDK_DIR = readSetting("WINDOWS_SDK_DIR", "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A")
-ext.WINDOWS_VS_VCINSTALLDIR = "$WINDOWS_VS_VSINSTALLDIR/VC"
-ext.WINDOWS_VS_DEVENVDIR = "$WINDOWS_VS_VSINSTALLDIR/Common7/IDE"
-//ext.WINDOWS_VS_DEVENVCMD = "$WINDOWS_VS_DEVENVDIR/VCExpress.exe" // NOT PRESENTLY USED
-ext.WINDOWS_VS_MSVCDIR = WINDOWS_VS_VCINSTALLDIR
-ext.WINDOWS_DXSDK_DIR = System.getenv().get("DXSDK_DIR")
-ext.WINDOWS_VS_INCLUDE = "$WINDOWS_VS_VCINSTALLDIR/INCLUDE;" + "$WINDOWS_SDK_DIR/include;"
-ext.WINDOWS_VS_LIB = "$WINDOWS_VS_VCINSTALLDIR/LIB;" + "$WINDOWS_SDK_DIR/lib;"
-ext.WINDOWS_VS_LIBPATH = "$WINDOWS_VS_VCINSTALLDIR/LIB;"
-ext.WINDOWS_VS_PATH = "$WINDOWS_VS_DEVENVDIR;" +
-        "$WINDOWS_VS_VSINSTALLDIR/VC/BIN;" +
-        "$WINDOWS_VS_VSINSTALLDIR/Common7/Tools;" +
-        "$WINDOWS_VS_VCINSTALLDIR/VCPackages;" +
-        "$WINDOWS_SDK_DIR/bin/NETFX 4.0 Tools;" +
-        "$WINDOWS_SDK_DIR/bin;" +
-        System.getenv().get("PATH")
+// CompileTarget defines what we are trying to compile to. By default the CompileTarget
+// will be the same as the platform running this build -- that is, Mac, Windows, or Linux.
+// You may be performing a cross-compile (compiling for a platform other than the one
+// you are using, such as iOS, ARM Hard Float (armhf) or ARM Soft Float (armvfp)
+enum CompileTarget {
+    MAC("mac", true),
+    WIN("win", true),
+    LINUX("linux", "gtk", true),
+    IOS("ios", false),
+    SWT("swt", true),
+    ARM_HF("armhf", "lens", false),
+    ARM_VFP("armvfp", "lens", false)
 
-ext.MACOSX_SDK_PATH = readSetting("MACOSX_SDK_PATH", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk")
-ext.MACOSX_JDK_FRAMEWORK = readSetting("MACOSX_JDK_FRAMEWORK", "/System/Library/Frameworks/JavaVM.framework")
+    final String name;
+    final String glassName;
+    final boolean isDesktop;
 
-ext.CONF = readSetting("CONF", "Release");
-ext.LINT = readSetting("LINT", "none");
-ext.isDebug = CONF == "Debug"
-ext.isLint = LINT != "none"
-ext.numCompileThreads = Runtime.runtime.availableProcessors()
+    CompileTarget(String name, boolean isDesktop) {
+        this.name = name;
+        this.glassName = name;
+        this.isDesktop = isDesktop;
+    }
 
-// SMALL, FAST, REAL_FAST flag needed
+    CompileTarget(String name, String glassName, boolean isDesktop) {
+        this.name = name;
+        this.glassName = glassName;
+        this.isDesktop = isDesktop;
+    }
+}
 
-ext.hudsonJobName       = readSetting("HUDSON.JOB.NAME", "not_hudson")
-ext.hudsonBuildNumber   = readSetting("HUDSON.BUILD.NUMBER", "0000")
-ext.promotedBuildNumber = readSetting("PROMOTED.BUILD.NUMBER", "00")
-ext.productName          = readSetting("PRODUCT.NAME", "OpenJFX")
-ext.rawVersion           = readSetting("RAW.VERSION", "8.0.0")
-ext.releaseName          = readSetting("RELEASE.NAME", "8.0")
-ext.releaseMilestone     = readSetting("RELEASE.MILESTONE", "ea")
+// Check whether the COMPILE_TARGET property has been specified (if so, it was done by
+// the user and not by this script). If it has been defined, then convert it from a
+// String to a CompileTarget, and do some sanity checking.
+if (hasProperty("COMPILE_TARGET")) {
+    // Convert from whatever String was assigned to COMPILE_TARGET to an object
+    for (CompileTarget target : CompileTarget.values()) {
+        if (target.name.equals(COMPILE_TARGET)) {
+            COMPILE_TARGET = target;
+            break;
+        }
+    }
+    // Sanity checking
+    if (COMPILE_TARGET == CompileTarget.MAC && !IS_MAC) throw new Exception("Must be on MacOSX to compile for MacOSX");
+    if (COMPILE_TARGET == CompileTarget.LINUX && !IS_LINUX) throw new Exception("Must be on Linux to compile for Linux");
+    if (COMPILE_TARGET == CompileTarget.WIN && !IS_WINDOWS) throw new Exception("Must be on Windows to compile for Windows");
+    if (COMPILE_TARGET == CompileTarget.IOS && !IS_MAC) throw new Exception("Must be on MacOSX to cross compile for iOS");
+    if (COMPILE_TARGET == CompileTarget.ARM_HF && !IS_LINUX) throw new Exception("Must be on Linux x86 to cross compile for ARM Hard Float");
+    if (COMPILE_TARGET == CompileTarget.ARM_SF && !IS_LINUX) throw new Exception("Must be on Linux x86 to cross compile for ARM Soft Float");
+} else {
+    // Default to the right compile target for the platform
+    ext.COMPILE_TARGET = IS_MAC ? CompileTarget.MAC : IS_WINDOWS ? CompileTarget.WIN : IS_LINUX ? CompileTarget.LINUX : null;
+    // Sanity check that we're not building from a platform we didn't anticipate
+    if (COMPILE_TARGET == null) throw new Exception("Unable to determine compilation platform, or COMPILE_TARGET!");
+}
 
-ext.CC = readSetting("CC", isWindows ? "$WINDOWS_VS_VSINSTALLDIR/VC/BIN/cl.exe" : isLinux ? "g++" : "gcc");
-ext.LINK = readSetting("LINK", isWindows ? "$WINDOWS_VS_VSINSTALLDIR/VC/BIN/link.exe" : "g++");
-ext.RC = readSetting("RC", isWindows ? "$WINDOWS_SDK_DIR/Bin/RC.Exe" : ""); // only used on Windows
+// It turns out that the type of library to create is related to the platform you compile from
+// because on Mac you can only target platforms supporting .dylib and on Linux .so
+ext.LIBRARY_EXT = IS_WINDOWS ? "dll" : IS_MAC ? "dylib" : "so"
+ext.GLASS_PLATFORM = COMPILE_TARGET.glassName;
 
-logger.info("OS_NAME: $osName")
-logger.info("JAVA.HOME: $javaHome")
-logger.info("JDK.HOME: $jdkHome")
-logger.info("JFXRT: $binaryStub")
-logger.info("HUDSON.JOB.NAME: $hudsonJobName")
-logger.info("HUDSON.BUILD.NUMBER: $hudsonBuildNumber")
-logger.info("PROMOTED.BUILD.NUMBER: $promotedBuildNumber")
-logger.info("PRODUCT.NAME: $productName")
-logger.info("RAW.VERSION: $rawVersion")
-logger.info("RELEASE.NAME: $releaseName")
-logger.info("RELEASE.MILESTONE: $releaseMilestone")
-logger.info("sun.boot.class.path: ${System.getProperty('sun.boot.class.path')}")
-logger.info(System.getProperties().toString())
-logger.info(System.getenv().toString())
+// Get the JDK_HOME automatically based on the version of Java used to execute gradle. Or, if specified,
+// use a user supplied JDK_HOME, BINARY_STUB, JAVAC, and/or JAVAH, all of which may be specified
+// independently (or we'll try to get the right one based on other supplied info). There is a really
+// odd situation on windows where you can have two JRE's on the same system(!!!):
+//    c:\Program Files (x86)\Java\jdk1.8.0\jre
+//    c:\Program Files (x86)\Java\jre8\
+// Because of this, you may sometimes get the jdk's JRE (in which case the logic we used to have here
+// was correct and consistent with all other platforms), or it might be the standalone JRE (for the love!).
+// So what we have to do is add some special windows-only logic here to figure out the JDK based on the
+// wrong JRE, if we happen to have gotten the wrong JRE.
+ext.JAVA_HOME = System.getProperty("java.home");
+def javaHomeFile = file(JAVA_HOME);
+defineProperty("JDK_HOME",
+        javaHomeFile.name == "jre" ?
+        javaHomeFile.getParent().toString() :
+        javaHomeFile.name.startsWith("jre") ?
+        new File(javaHomeFile.getParent(), "jdk1.${javaHomeFile.name.substring(3)}.0").toString() :
+        JAVA_HOME); // we have to bail and set it to something and this is as good as any!
+defineProperty("JAVA", "$JDK_HOME/bin/java");
+defineProperty("JAVAC", "$JDK_HOME/bin/javac");
+defineProperty("JAVAH", "$JDK_HOME/bin/javah");
+defineProperty("JDK_DOCS", "http://download.oracle.com/javase/7/docs/api");
+defineProperty("BINARY_STUB", "file://$JDK_HOME/jre/lib/ext/jfxrt.jar");
+BINARY_STUB = files(BINARY_STUB); // convert from String to FileCollection
 
-def swtFileName = { ->
-    String fileName = "";
-    if (isMac) {
-        fileName = "org.eclipse.swt.cocoa.macosx.x86_64_3.7.2.v3740f.jar"
-    } else if (isWindows) {
-        fileName = "org.eclipse.swt.win32.win32.x86_3.7.2.v3740f.jar"
-//                fileName = "org.eclipse.swt.win32.win32.x86_64_3.7.2.v3740f.jar"
-    } else if (isLinux) {
-        fileName = "org.eclipse.swt.gtk.linux.x86_3.7.2.v3740f.jar"
-//                fileName = "org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f.jar"
-    }
-    return fileName;
-}
+// Define the SWT.jar that we are going to have to download during the build process based
+// on what platform we are compiling from (not based on our target). SWT in particular is
+// only used when we are compiling for desktop platforms.
+ext.SWT_FILE_NAME = IS_MAC ? "org.eclipse.swt.cocoa.macosx.x86_64_3.7.2.v3740f.jar" :
+    IS_WINDOWS && IS_64 ? "org.eclipse.swt.win32.win32.x86_64_3.7.2.v3740f.jar" :
+    IS_WINDOWS && !IS_64 ? "org.eclipse.swt.win32.win32.x86_3.7.2.v3740f.jar" :
+    IS_LINUX && IS_64 ? "org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f.jar" :
+    IS_LINUX && !IS_64 ? "org.eclipse.swt.gtk.linux.x86_3.7.2.v3740f.jar" : "";
+
+// Specify the build configuration (Release or Debug) and whether we're checking warnings during compilation (LINT)
+defineProperty("CONF", "Release");
+defineProperty("LINT", "none");
+defineProperty("DOC_LINT", "none");
+ext.IS_DEBUG = CONF == "Debug";
+ext.IS_LINT = LINT != "none";
+ext.IS_DOC_LINT = DOC_LINT != "none";
+// Define the number of threads to use when compiling (specifically for native compilation)
+defineProperty("NUM_COMPILE_THREADS", "${Runtime.runtime.availableProcessors()}");
+
+// Now we need to define the native compilation tasks. The set of parameters to
+// CC / LINK depends on the target platform (and also to some extent what platform
+// you are compiling on). These settings are contained in various gradle files
+// such as mac.gradle and linux.gradle and armhf.gradle. Additionally, the developer
+// can specify COMPILE_FLAGS_FILE to be a URL or path to a different gradle file
+// that will contain the appropriate flags.
+defineProperty("COMPILE_FLAGS_FILE", "${COMPILE_TARGET.name}.gradle");
+apply from: COMPILE_FLAGS_FILE;
+
+// Define the programs to use for compiling and linking native code.
+defineProperty("CC", "g++");
+defineProperty("LINK", "g++");
+
+// Define settings used when creating the VersionInfo. These settings are generally left alone
+// by developers and set only from Hudson. We have to manually rev this version number from
+// release to release.
+defineProperty("HUDSON_JOB_NAME", "not_hudson");
+defineProperty("HUDSON_BUILD_NUMBER","0000");
+defineProperty("PROMOTED_BUILD_NUMBER", "00");
+defineProperty("PRODUCT_NAME", "OpenJFX");
+defineProperty("RAW_VERSION", "8.0.0");
+defineProperty("RELEASE_NAME", "8.0");
+defineProperty("RELEASE_MILESTONE", "ea");
+
+// Log some of the settings we've determined. We could log more here, it doesn't really hurt.
+logger.info("OS_NAME: $OS_NAME");
+logger.info("JAVA_HOME: $JAVA_HOME");
+logger.info("JDK_HOME: $JDK_HOME");
+logger.info("BINARY_STUB: $BINARY_STUB.asPath");
+logger.info("HUDSON_JOB_NAME: $HUDSON_JOB_NAME");
+logger.info("HUDSON_BUILD_NUMBER: $HUDSON_BUILD_NUMBER");
+logger.info("PROMOTED_BUILD_NUMBER: $PROMOTED_BUILD_NUMBER");
+logger.info("PRODUCT_NAME: $PRODUCT_NAME");
+logger.info("RAW_VERSION: $RAW_VERSION");
+logger.info("RELEASE_NAME: $RELEASE_NAME");
+logger.info("RELEASE_MILESTONE: $RELEASE_MILESTONE");
+
+/******************************************************************************
+ *                                                                            *
+ *                Definition of Native Code Compilation Tasks                 *
+ *                                                                            *
+ *  Three custom tasks are defined here to aid in compiling native code. This *
+ *  approach removes the need to use make files for any of the projects under *
+ *  our control (webkit and gstreamer both still require 'make' to build).    *
+ *                                                                            *
+ *    - JavaHeaderTask is used to run javah. The JAVAH property will point at *
+ *      the version of javah to be used (i.e.: a path to javah)               *
+ *    - CCTask compiles native code. Specifically it will compile .m, .c,     *
+ *      .cpp, or .cc files. It uses the headers provided by the               *
+ *      JavaHeaderTask plus additional platform specific headers. It will     *
+ *      compile into .obj files. The CC property defines the compiler to use  *
+ *      On Windows it will also process resource files.                       *
+ *    - LinkTask will perform native linking and create the .dll / .so /      *
+ *      .dylib as necessary. It uses the linker defined by the LINK property  *
+ *                                                                            *
+ *****************************************************************************/
 
 class JavaHeaderTask extends DefaultTask {
     @OutputDirectory File output;
@@ -171,246 +299,271 @@
     }
 
     @TaskAction void runJavaH() {
-        // TODO!!! Make sure the stupid jfxrt.jar is out of lib.ext when running javah!!
         // For each .java file we need to figure out what class
         // the .java file belongs in and convert to a class name.
-        def classNames = [];
-        def files = project.files(source).getAsFileTree().matching(patternSet);
-        files.visit { fileTreeElement ->
-            if (!fileTreeElement.isDirectory() && fileTreeElement.name.endsWith(".java")) {
-                def path = fileTreeElement.path;
-                def className = path.substring(0, path.length() - 5).replace("/", ".");
+        List classNames = [];
+        FileTree files = project.files(source).getAsFileTree().matching(patternSet);
+        files.visit({ fileTreeElement ->
+            if (!fileTreeElement.isDirectory() && fileTreeElement.getName().endsWith(".class")) {
+                String path = fileTreeElement.getPath();
+                String className = path.substring(0, path.length() - 6).replace("/", ".");
                 classNames.add(className)
             }
-        }
-        // Execute JavaH
-        project.exec {
-            commandLine "$project.jdkHome/bin/javah", "-d", "$output", "-classpath", "${classpath.asPath}"
-            args classNames
-        }
+        })
+        // Execute javah
+        project.exec({
+            commandLine("$project.JAVAH", "-J-Djava.ext.dirs=", "-d", "$output", "-classpath", "${classpath.asPath}");
+            args(classNames);
+        });
     }
 }
 
-class CCTask extends SourceTask {
-    @Optional String compiler;
-    List<String> ccParams;
+class NativeCompileTask extends DefaultTask {
+    @Optional String matches; // regex for matching input files
+    List<String> params = new ArrayList<String>();
     List sourceRoots = new ArrayList();
-    @InputDirectory File headers;
     @OutputDirectory File output;
+    private final PatternFilterable patternSet = new PatternSet();
 
-    @InputFiles @Override public void setSource(Object source) {
-        super.setSource(source);
+    @InputFiles public void setSource(Object source) {
         sourceRoots.clear();
         sourceRoots.add(source);
     }
 
-    @Override public SourceTask source(Object... sources) {
+    public NativeCompileTask source(Object... sources) {
         for (Object source : sources) {
             sourceRoots.add(source);
         }
-        return super.source(sources);
+        return this;
+    }
+
+    public NativeCompileTask include(String... includes) {
+        patternSet.include(includes);
+        return this;
+    }
+
+    public NativeCompileTask include(Iterable<String> includes) {
+        patternSet.include(includes);
+        return this;
     }
 
     @TaskAction void compile() {
-        // Compile
-        project.mkdir output
-        def files = source.filter{it.name.matches(".*c|.*cpp|.*m|.*cc")}.files; // OOPS! Matched .rc and shouldn't have
-        def executor = Executors.newFixedThreadPool(Integer.parseInt(project.numCompileThreads.toString()));
-        def latch = new CountDownLatch(files.size());
-        final def p = project;
-        final def me = this;
-        def futures = new ArrayList<Future>();
-        files.each { sourceFile ->
-            def outFileName = sourceFile.getName()
-            outFileName = outFileName.substring(0, outFileName.lastIndexOf(".")) + ".obj"
+        // Get the existing native-dependencies file from build/dependency-cache and load its contents into
+        // memory. If the file doesn't exist, then we will just have an empty dependency map.
+        final Map<String, Map> dependencies = new ConcurrentHashMap<>();
+        final File nativeDependenciesFile = project.file("$project.buildDir/dependency-cache/native-dependencies");
+        if (nativeDependenciesFile.exists()) {
+            nativeDependenciesFile.splitEachLine("\t", { strings ->
+                dependencies.put(strings[0], ["DATE":Long.parseLong(strings[1]), "SIZE":Long.parseLong(strings[2])]);
+            });
+        }
+
+        project.mkdir(output);
+        // Combine the different source roots into a single FileCollection based on all files in each source root
+        def allFiles = [];
+        sourceRoots.each {
+            println project.file(it).toString()
+            allFiles += project.file(it).listFiles()
+        }
+        def source = project.files(allFiles);
+        final Set<File> files = matches == null ? new HashSet<File>(source.files) : source.filter{it.name.matches(matches)}.files;
+        boolean shouldCompileAnyway = false;
+        final boolean forceCompile = shouldCompileAnyway;
+        final ExecutorService executor = Executors.newFixedThreadPool(Integer.parseInt(project.NUM_COMPILE_THREADS.toString()));
+        final CountDownLatch latch = new CountDownLatch(files.size());
+        List futures = new ArrayList<Future>();
+        files.each { File sourceFile ->
             futures.add(executor.submit(new Runnable() {
                 @Override public void run() {
                     try {
-                        p.exec {
-                            commandLine "${me.compiler == null ? p.CC : me.compiler}"
-
-                            args "-I$me.headers"
-
-                            // Add the source roots in as include directories
-                            me.sourceRoots.each { root ->
-                                def file = root instanceof File ? (File) root :
-                                    p.file(root)
-                                args "-I$file"
-                            }
-
-                            // Add in any additional compilation params
-                            if (me.ccParams != null) args me.ccParams
-
-                            // Add the name of the source file to compile
-                            if (p.isWindows) {
-                                args "/Fo$me.output/$outFileName", "$sourceFile"
-                            } else {
-                                args "-o", "$me.output/$outFileName", "$sourceFile"
-                            }
-
-                            if (p.isWindows){
-                                environment([
-                                        "VCINSTALLDIR"         : p.WINDOWS_VS_VCINSTALLDIR,
-                                        "VSINSTALLDIR"         : p.WINDOWS_VS_VSINSTALLDIR,
-                                        "DEVENVDIR"            : p.WINDOWS_VS_DEVENVDIR,
-                                        "MSVCDIR"              : p.WINDOWS_VS_MSVCDIR,
-                                        "PATH"                 : p.WINDOWS_VS_PATH,
-                                        "INCLUDE"              : p.WINDOWS_VS_INCLUDE,
-                                        "LIB"                  : p.WINDOWS_VS_LIB,
-                                        "LIBPATH"              : p.WINDOWS_VS_LIBPATH,
-                                        "DXSDK_DIR"            : p.WINDOWS_DXSDK_DIR
-                                ])
-                            }
+                        final File outputFile = outputFile(sourceFile);
+                        // If the source file is not listed in dependencies, then we must compile it.
+                        // If the target file(s) (.rc or .cur in the case of resources, .pdb or .obj for sources)
+                        //    do not exist, then compile.
+                        // If the source file date or size differs from dependencies, then compile it.
+                        final Map sourceFileData = dependencies.get(sourceFile.toString());
+                        if (forceCompile || sourceFileData == null || !outputFile.exists() ||
+                                !sourceFileData["DATE"].equals(sourceFile.lastModified()) ||
+                                !sourceFileData["SIZE"].equals(sourceFile.length()))
+                        {
+                            doCompile(sourceFile, outputFile)
                         }
+                        dependencies.put(sourceFile.toString(), ["DATE":sourceFile.lastModified(), "SIZE":sourceFile.length()]);
                     } finally {
-                        latch.countDown()
+                        latch.countDown();
                     }
                 }
             }));
         }
-        latch.await()
-        // will throw an exception if something goes wrong
-        futures.each {it.get()}
+        latch.await();
+        // Looking for whether an exception occurred while executing any of the futures.
+        // By calling "get()" on each future an exception will be thrown if one had occurred
+        // on the background thread.
+        futures.each {it.get();}
 
-        if (project.isWindows) {
-            def resources = source.filter{it.name.matches(".*rc|.*cur")}.files;
-            resources.each { res ->
-                def outFileName = res.getName()
-                outFileName = outFileName.substring(0, outFileName.lastIndexOf(".")) + ".res"
-                p.exec {
-                    commandLine "$project.RC", "/nologo", "/fo$me.output/$outFileName", "$res"
-                    if (p.isWindows){
-                        environment([
-                                "VCINSTALLDIR"         : p.WINDOWS_VS_VCINSTALLDIR,
-                                "VSINSTALLDIR"         : p.WINDOWS_VS_VSINSTALLDIR,
-                                "DEVENVDIR"            : p.WINDOWS_VS_DEVENVDIR,
-                                "MSVCDIR"              : p.WINDOWS_VS_MSVCDIR,
-                                "PATH"                 : p.WINDOWS_VS_PATH,
-                                "INCLUDE"              : p.WINDOWS_VS_INCLUDE,
-                                "LIB"                  : p.WINDOWS_VS_LIB,
-                                "LIBPATH"              : p.WINDOWS_VS_LIBPATH,
-                                "DXSDK_DIR"            : p.WINDOWS_DXSDK_DIR
-                        ])
-                    }
+        // Update the native-dependencies file
+        if (nativeDependenciesFile.exists()) nativeDependenciesFile.delete();
+        nativeDependenciesFile.getParentFile().mkdirs();
+        nativeDependenciesFile.createNewFile();
+        dependencies.each { key, value ->
+            nativeDependenciesFile << key << "\t" << value["DATE"] << "\t" << value["SIZE"] << "\n";
+        }
+    }
+
+    protected void doCompile(File sourceFile, File outputFile){ }
+    protected File outputFile(File sourceFile) { return null; }
+}
+
+class CompileResourceTask extends NativeCompileTask {
+
+    protected File outputFile(File sourceFile) {
+        final String outFileName = sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf("."));
+        new File("$output/${outFileName}.res");
+    }
+
+    protected void doCompile(File sourceFile, File outputFile){
+        project.exec({
+            commandLine("$project.RC", "/nologo", "/fo$outputFile", "$sourceFile");
+            environment(project.WINDOWS_NATIVE_COMPILE_ENVIRONMENT);
+        });
+    }
+}
+
+class CompileHLSLTask extends NativeCompileTask {
+    protected File outputFile(File sourceFile) {
+        new File("$output/${sourceFile.name.replace('.hlsl', '.obj')}");
+    }
+
+    protected void doCompile(File sourceFile, File outputFile){
+        project.exec({
+            commandLine = ["$project.FXC", "/nologo", "/T", "ps_3_0", "/Fo", "$outputFile", "$sourceFile"]
+            environment(project.WINDOWS_NATIVE_COMPILE_ENVIRONMENT);
+        });
+    }
+}
+
+class CCTask extends NativeCompileTask {
+    @Optional String compiler;
+    @InputDirectory File headers;
+
+    protected File outputFile(File sourceFile) {
+        final String outFileName = sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf("."));
+        new File("$output/${outFileName}.obj");
+    }
+
+    protected void doCompile(File sourceFile, File outputFile) {
+        // or compile sources using CC
+        final File pdbFile = new File("$output/${outputFile.name.replace('.obj', '.pdb')}");
+
+        // TODO the PDB file is never being built -- maybe because it is only built during
+        // debug builds, otherwise that flag is ignored "/Fd" or "-Fd"
+        project.exec({
+            commandLine("${compiler == null ? project.CC : compiler}", "-I$headers");
+
+            // Add the source roots in as include directories
+            sourceRoots.each { root ->
+                final File file = root instanceof File ? (File) root : project.file(root)
+                args("-I$file");
+            }
+
+            // Add in any additional compilation params
+            if (params != null) {
+                // A little hack. Only use the -std=c99 flag if compiling .c or .m
+                if (sourceFile.name.endsWith(".cpp") || sourceFile.name.endsWith(".cc")) {
+                    def stripped = params;
+                    stripped.remove("-std=c99");
+                    args(stripped)
+                } else {
+                    args(params)
                 }
+            };
+
+            // Add the name of the source file to compile
+            if (project.IS_WINDOWS) {
+                args("/Fd$pdbFile", "/Fo$outputFile", "$sourceFile");
+            } else {
+                args("-Fd$pdbFile", "-o", "$outputFile", "$sourceFile");
             }
-        }
+
+            if (project.IS_WINDOWS){
+                environment(project.WINDOWS_NATIVE_COMPILE_ENVIRONMENT);
+            }
+        });
     }
 }
 
 class LinkTask extends DefaultTask {
-    List<String> linkParams;
+    List<String> linkParams = new ArrayList<String>();
     @InputDirectory File objectDir;
     @OutputFile File lib;
     @TaskAction void compile() {
         // Link & generate the library (.dll, .so, .dylib)
         lib.getParentFile().mkdirs();
-        project.exec {
-            commandLine "$project.LINK"
-            args objectDir.listFiles()
-            if (project.isWindows) {
-                args "/out:$lib"
+        project.exec({
+            commandLine("$project.LINK");
+            args(objectDir.listFiles());
+            if (project.IS_WINDOWS) {
+                args("/out:$lib");
             } else {
-                args "-o", "$lib"
+                args("-o", "$lib");
             }
-            if (project.isDebug && !project.isWindows) args "-g"
-            if (linkParams != null) args linkParams
-            if (project.isWindows){
-                environment([
-                        "VCINSTALLDIR"         : project.WINDOWS_VS_VCINSTALLDIR,
-                        "VSINSTALLDIR"         : project.WINDOWS_VS_VSINSTALLDIR,
-                        "DEVENVDIR"            : project.WINDOWS_VS_DEVENVDIR,
-                        "MSVCDIR"              : project.WINDOWS_VS_MSVCDIR,
-                        "PATH"                 : project.WINDOWS_VS_PATH,
-                        "INCLUDE"              : project.WINDOWS_VS_INCLUDE,
-                        "LIB"                  : project.WINDOWS_VS_LIB,
-                        "LIBPATH"              : project.WINDOWS_VS_LIBPATH,
-                        "DXSDK_DIR"            : project.WINDOWS_DXSDK_DIR
-                ])
+            if (project.IS_DEBUG && !project.IS_WINDOWS) args("-g");
+            if (linkParams != null) args(linkParams);
+            if (project.IS_WINDOWS){
+                final String libPath = lib.toString();
+                final String libPrefix = libPath.substring(0, libPath.lastIndexOf("."))
+                args("/pdb:${libPrefix}.pdb",
+                    "/map:${libPrefix}.map");
+                environment(project.WINDOWS_NATIVE_COMPILE_ENVIRONMENT);
             }
-        }
+        });
     }
 }
 
-def addNative = { project, String name ->
+/**
+* Convenience lambda for creating javah, cc, link, and "native" tasks in the given project. These
+* tasks are parameterized by name, so that we can produce, for example, javahGlass, ccGlass, etc
+* named tasks.
+*/
+void addNative(Project project, String name) {
     def javahTask = project.task("javah$name", type: JavaHeaderTask, dependsOn: project.classes, group: "Build") {
-        source = project.sourceSets.main.java.srcDirs.iterator().next()
-        classpath = project.files(project.sourceSets.main.output.classesDir, project.binaryStub)
+        description = "Generates JNI Headers for $name"
+        source = project.sourceSets.main.output.classesDir
+        classpath = project.files(project.sourceSets.main.output.classesDir, project.BINARY_STUB)
         output = project.file("$project.buildDir/headers/$name")
     }
     def ccTask = project.task("cc$name", type: CCTask, dependsOn: javahTask, group: "Build") {
+        description = "Compiles native sources for $name"
+        matches = ".*\\.c|.*\\.cpp|.*\\.m|.*\\.cc"
         headers = project.file("$project.buildDir/headers/$name")
         output(file("$project.buildDir/native/$name"))
     }
     def linkTask = project.task("link$name", type: LinkTask, dependsOn: ccTask, group: "Build") {
+        description = "Creates native dynamic library for $name"
         objectDir = file("$project.buildDir/native/$name")
     }
-    project.task("native$name", dependsOn: linkTask, group: "Build");
+    if (IS_WINDOWS) {
+        def rcTask = project.task("rc$name", type: CompileResourceTask, dependsOn: javahTask, group: "Build") {
+            description = "Compiles native sources for $name"
+            matches = ".*\\.rc|.*\\.cur"
+            output(file("$project.buildDir/native/$name"))
+        }
+        linkTask.dependsOn rcTask;
+    }
+    project.task("native$name", dependsOn: linkTask, group: "Build") {
+        description = "Generates JNI headers, compiles, and builds native dynamic library for $name"
+    }
     project.assemble.dependsOn("native$name")
+    project.task("cleanNative$name", group: "Build") {
+        project.delete("$project.buildDir/headers")
+        project.delete("$project.buildDir/native")
+        //project.delete("$project.buildDir/libs/${COMPILE_TARGET.name}")
+    }
 }
 
 /******************************************************************************
- *        Project definitions (dependencies, etc)                             *
- *****************************************************************************/
-
-task jfxrt(type: Jar) {
-    archiveName = "build/sdk/rt/lib/ext/jfxrt.jar"
-    from "modules/base/build/classes/main",
-         "modules/base/build/resources/main",
-         "modules/graphics/build/classes/main",
-         "modules/graphics/build/resources/main",
-         "modules/controls/build/classes/main",
-         "modules/controls/build/resources/main",
-         "modules/swing/build/classes/main",
-         "modules/swing/build/resources/main",
-         "modules/swt/build/classes/main",
-         "modules/swt/build/resources/main",
-         "modules/fxml/build/classes/main",
-         "modules/fxml/build/resources/main",
-         "modules/graphics/effects-jsl/build/classes/main",
-         "modules/graphics/effects-jsl/build/resources/main",
-         "modules/graphics/prism-jsl/build/classes/main",
-         "modules/graphics/prism-jsl/build/resources/main"
-    exclude "Compile*", // the Decora compiler classes must be excluded
-            "PrismLoaderBackend*", // More decora stuff
-            "**/*.stg",  // any glue files for decora must be excluded
-            "**/*.java"  // Builder java files are in build/classes and should be excluded
-
-    // Filter out platform specific stuff when building for a different platform
-    if (!isWindows) exclude "**/*.hlsl", "com/sun/glass/ui/win"
-    if (!isiOS) exclude "com/sun/glass/ui/ios"
-    if (!isMac) exclude "com/sun/glass/events/mac", "com/sun/glass/ui/mac"
-    if (!isLinux) exclude "com/sun/glass/ui/gtk"
-    if (!isLinuxARM) exclude "com/sun/glass/ui/lens"
-    if (!isSWT) exclude "com/sun/glass/ui/swt"
-}
-
-task sdk {
-    doLast {
-        // Copy all of the .dll / .so / .dylib native libraries into build/sdk/rt/lib/
-        copy {
-            from "modules/graphics/build/libs/libdecora-sse.$objExt",
-                 "modules/graphics/build/libs/libprism-common.$objExt",
-                 "modules/graphics/build/libs/libprism-sw.$objExt"
-            if (isMac) from "modules/graphics/build/libs/glass-lib-macosx/libglass.$objExt"
-            if (isWindows) from "modules/graphics/build/libs/glass-lib-windows/libglass.$objExt"
-            if (isLinux) from "modules/graphics/build/libs/glass-lib-gtk/libglass.$objExt"
-            if (isWindows) {
-                rename "lib(.*).dll", "\$1.dll"
-            }
-            if (isMac) {
-                into "build/sdk/rt/lib"
-            } else if (isWindows) {
-                into "build/sdk/rt/bin"
-            }
-            else into "build/sdk/rt/lib/i386"
-        }
-        // Create the javafx.properties file
-        def javafxProperties = file("build/sdk/rt/lib/javafx.properties")
-        javafxProperties << "javafx.runtime.version=$rawVersion"
-    }
-    dependsOn jfxrt
-}
+*        Project definitions (dependencies, etc)                             *
+*****************************************************************************/
 
 allprojects {
     // We want to configure all projects as java projects and use the same compile settings
@@ -421,37 +574,70 @@
     sourceCompatibility = 1.7
     // The following block is a workaround for the fact that presently Gradle
     // can't set the -XDignore.symbol.file flag, because it appears that the
-    // Javac API is lacking support for it. So what we'll do is find any Compile
+    // javac API is lacking support for it. So what we'll do is find any Compile
     // task and manually provide the options necessary to fire up the
     // compiler with the right settings.
     //
-    // Also, we need to remove jfxrt.jar from the boot classpath (if it is there)
+    // Also, we need to remove jfxrt.jar from the ext classpath (if it is there)
     // and instead each module that depends on closed bits is going to need to
-    // add binaryStub to its list of dependencies.
-    mkdir "$buildDir/builder-src"
+    // add BINARY_STUB to its list of dependencies.
     tasks.withType(Compile) { compile ->
+        // Defer actually creating builder-src until compilation
+        doFirst {
+            mkdir("$buildDir/builder-src");
+        }
         // It looks like we have to use ant to compile instead of the built-in gradle
         // compiler stuff because otherwise it won't compile on CYGWIN
         // TODO need to file issue with Gradle
         compile.options.useAnt = true
-        compile.options.debug = isDebug
+        compile.options.debug = IS_DEBUG
         compile.options.fork = true
-        compile.options.forkOptions.executable = javac
-        compile.options.warnings = isLint
-        // Somewhat dangerous in case there is a source set other than "test" or "main"!
+        compile.options.forkOptions.executable = JAVAC
+        compile.options.warnings = IS_LINT
+        // Somewhat dangerous in case there is a java source set other than "test" or "stub" or "main"!
+        // Note that the compileFooJava task is automatically created whenever a source set is
+        // defined. So the "test" source set automatically creates a "compileTestJava" task (among others).
         if (name == "compileTestJava") {
             compile.options.compilerArgs = ["-Djava.ext.dirs=", "-XDignore.symbol.file"]
-            classpath = sourceSets.test.compileClasspath + rootProject.files(binaryStub)
+            classpath = sourceSets.test.compileClasspath + BINARY_STUB
         } else if (name == "compileStubJava") {
             compile.options.compilerArgs = ["-Djava.ext.dirs=", "-XDignore.symbol.file"]
-            classpath = sourceSets.stub.compileClasspath + rootProject.files(binaryStub)
+            classpath = sourceSets.stub.compileClasspath + BINARY_STUB
         } else {
             compile.options.compilerArgs = ["-Djava.ext.dirs=", "-XDignore.symbol.file", "-s", "$buildDir/builder-src"]
-            classpath = sourceSets.main.compileClasspath + rootProject.files(binaryStub)
+            // Both controls & graphics need to use the annotation processor, but not the other guys.
+            if (["graphics", "controls", "swing", "swt", "base", "fxml"].contains(project.name)){
+                compile.options.compilerArgs += ["-processor", "javafx.builder.processor.BuilderProcessor"]
+            }
+            classpath = sourceSets.main.compileClasspath + BINARY_STUB
+        }
+        doLast {
+            // Workaround: there are a number of packages which are now getting builders
+            // generated even though they they didn't before since we combined sources
+            // into fewer projects. So I have to strip out the .class files after compilation!
+            // Alternatively we can go through and add @NoBuilder to all these classes
+            // (or stop using automatic builder generation, but that's another story).
+            delete(files("$buildDir/builder-src/javafx/beans",
+                         "$buildDir/builder-src/javafx/concurrent",
+                         "$buildDir/builder-src/javafx/event",
+                         "$buildDir/builder-src/javafx/fxml",
+                         "$buildDir/builder-src/javafx/collections",
+                         "$buildDir/builder-src/javafx/util"));
+            delete(files("$buildDir/classes/main/javafx/beans",
+                         "$buildDir/classes/main/javafx/concurrent",
+                         "$buildDir/classes/main/javafx/event",
+                         "$buildDir/classes/main/javafx/fxml",
+                         "$buildDir/classes/main/javafx/collections",
+                         "$buildDir/classes/main/javafx/util").getAsFileTree().filter( { file ->
+                file.getName().endsWith("Builder.class")
+            } ));
         }
     }
     // Setup the repositories that we'll download libraries from. Maven Central is
-    // just easy for most things. The custom "ivy" repo is for downloading SWT
+    // just easy for most things. The custom "ivy" repo is for downloading SWT. The way it
+    // works is to setup the download URL such that it will resolve to the actual jar file
+    // to download. See SWT_FILE_NAME for the name of the jar that will be used as the
+    // "artifact" in the pattern below.
     repositories {
         mavenCentral()
         ivy {
@@ -462,50 +648,77 @@
         }
     }
 
-    project.rootProject.jfxrt.dependsOn assemble
-
+    // By default all of our projects require junit for testing so we can just
+    // setup this dependency here.
     dependencies {
-        testCompile "junit:junit:4.8.2"
+        testCompile("junit:junit:4.8.2");
     }
 
     // At the moment the ASM library shipped with Gradle that is used to
     // discover the different test classes fails on Java 8, so in order
     // to have sourceCompatibility set to 1.8 I have to also turn scanForClasses off
-    // and manually specify the includes / excludes
+    // and manually specify the includes / excludes. At the moment we use
+    // Java 7 but when we switch to 8 this will be needed, and probably again when
+    // we start building with Java 9.
     test {
-        jvmArgs "-Djava.ext.dirs="
-        classpath = classpath + rootProject.files(binaryStub)
-        enableAssertions = true
-        testLogging.exceptionFormat = "full"
-        scanForTestClasses = false
-        include '**/*Test.*'
-        exclude '**/*Abstract*.*'
+        jvmArgs("-Djava.ext.dirs=");
+        classpath = classpath + BINARY_STUB;
+        executable = JAVA;
+        enableAssertions = true;
+        testLogging.exceptionFormat = "full";
+        scanForTestClasses = false;
+        include("**/*Test.*");
+        exclude("**/DepthTest.*")
+        exclude("**/*Abstract*.*");
     }
 
+    // Exclude any non-public-API classes from having javadoc generated
+    javadoc {
+        exclude("com/**/*", "javafx/scene/ParentDesignInfo*", "Compile*", "javafx/builder/**/*");
+        executable = JAVA;
+        options.windowTitle("JavaFX Project ${project.name} ${RELEASE_NAME}")
+        options.links(JDK_DOCS);
+        options.addBooleanOption("XDignore.symbol.file").setValue(true);
+        options.addBooleanOption("Xdoclint:none").setValue(!IS_DOC_LINT);
+        options.addBooleanOption("javafx").setValue(true);
+    }
+
+    // Configure all projects to include $buildDir/builder-src in the generated IDEA project files.
+    // Also need to un-exclude the build-dir since we put stuff in it, and then re-exclude other stuff
+    configurations {
+      binaryStub
+      binaryStub.extendsFrom(compile)
+    }
+
+    dependencies {
+      binaryStub BINARY_STUB
+    }
 }
 
 // The build-tools project contains the annotation processor that is used to generate the
 // builders, the decora compiler used for effects, and various annotations we use for FXML
 // etc. Nothing in build-tools should *ever* be shipped with the runtime.
 project(":build-tools") {
+    sourceSets {
+        main.java.srcDirs = ["src/main/java", "$buildDir/generated-src/antlr"]
+    }
+
     // Workaround for lack of Antlr 3 support in Gradle. By defining a configuration,
     // we can then give it a class path and use that classpath to execute a java command
-    configurations {
-        antlr3
-    }
+    getConfigurations().add("antlr3");
 
-    dependencies {
-        compile "org.antlr:antlr-runtime:3.4"
-        antlr3 "org.antlr:antlr-runtime:3.4"
-        antlr3 "org.antlr:stringtemplate:4.0.2@jar"
-        antlr3 "org.antlr:antlr:3.4@jar"
-    }
+    dependencies({
+        compile("org.antlr:antlr-runtime:3.4");
+        antlr3("org.antlr:antlr-runtime:3.4",
+               "org.antlr:stringtemplate:4.0.2@jar",
+               "org.antlr:antlr:3.4@jar");
+    });
 
+    // This is the task that will call antlr to generate the sources
     task generateGrammarSource(type: JavaExec) {
-        // TODO need to fix bootclasspath
         description = "Generate JSL parser from Antlr3 grammars"
-        def dest = "$buildDir/generated-src/antlr/com/sun/scenario/effect/compiler"
-        def src = "src/main/antlr"
+        String dest = "$buildDir/generated-src/antlr/com/sun/scenario/effect/compiler"
+        String src = "src/main/antlr"
         inputs.dir file(src)
         outputs.dir file(dest)
         def grammars = fileTree(src).include("**/*.g")
@@ -514,9 +727,11 @@
         args = ["-o", dest, grammars.files].flatten()
     }
 
+    // Configure the compileJava task so that it relies on the task for generating
+    // the grammar source, and also so that it uses the generated-src as input
+    // for compilation.
     compileJava {
-        dependsOn generateGrammarSource
-        source "$buildDir/generated-src"
+        dependsOn(generateGrammarSource);
     }
 }
 
@@ -531,13 +746,13 @@
     // properties within it
     mkdir "$buildDir/generated-src/version-info" // TODO Ought to be done during processing not dep analysis phase
     def replacements = ["BUILD_TIMESTAMP": new java.util.Date(),
-        "HUDSON_JOB_NAME": hudsonJobName,
-        "HUDSON_BUILD_NUMBER": hudsonBuildNumber,
-        "PROMOTED_BUILD_NUMBER": promotedBuildNumber,
-        "PRODUCT_NAME": productName,
-        "RAW_VERSION": rawVersion,
-        "RELEASE_NAME": releaseName,
-        "RELEASE_MILESTONE": releaseMilestone];
+        "HUDSON_JOB_NAME": HUDSON_JOB_NAME,
+        "HUDSON_BUILD_NUMBER": HUDSON_BUILD_NUMBER,
+        "PROMOTED_BUILD_NUMBER": PROMOTED_BUILD_NUMBER,
+        "PRODUCT_NAME": PRODUCT_NAME,
+        "RAW_VERSION": RAW_VERSION,
+        "RELEASE_NAME": RELEASE_NAME,
+        "RELEASE_MILESTONE": RELEASE_MILESTONE];
     task processVersion(type: Copy, description: "Replace params in VersionInfo and copy file to destination") {
         from "src/main/version-info"
         into "$buildDir/generated-src/version-info/com/sun/javafx/runtime"
@@ -571,226 +786,121 @@
 
     dependencies {
         compile project(":base"), project(":build-tools")
-        compile ":$swtFileName:"
+        compile ":$SWT_FILE_NAME:"
         compile files(rootDir.toString() + "/../crap/plugin_exports.jar")
-        stubCompile "junit:junit:4.8.2", project(":base").sourceSets.test.output
+        stubCompile "junit:junit:4.8.2", project(":base").sourceSets.test.output, sourceSets.main.output
     }
 
+    // The graphics project needs to completely replace the "test" task because the
+    // tests have been split among the normal tests and the stub tests. I want to make sure
+    // that invoking "graphics:test" runs both of these tasks, rather than only one of them.
     tasks.replace("test")
+    test {
+        group = "Verification"
+        description = "Runs all the unit tests for Graphics"
+    }
     task testWithoutStub(type: Test, dependsOn: ":graphics:compileJava") {
         jvmArgs "-Djava.ext.dirs="
-        classpath = sourceSets.test.runtimeClasspath + rootProject.files(binaryStub)
-        enableAssertions = true
-        testLogging.exceptionFormat = "full"
-        scanForTestClasses = false
-        include "**/*Test.*"
-        exclude "**/*Abstract*.*"
+        classpath = sourceSets.test.runtimeClasspath + BINARY_STUB
     }
     task testWithStub(type: Test, dependsOn: [":graphics:compileJava"]) {
         jvmArgs "-Djava.ext.dirs=", "-Djavafx.toolkit=com.sun.javafx.pgstub.StubToolkit", "-DCSS_META_DATA_TEST_DIR=${file('$buildDir/classes/main/javafx')}"
-        classpath = sourceSets.stub.runtimeClasspath + sourceSets.main.runtimeClasspath + rootProject.files(binaryStub)
+        classpath = sourceSets.stub.runtimeClasspath + sourceSets.main.runtimeClasspath + BINARY_STUB
         testClassesDir = file("$buildDir/classes/stub")
         testResultsDir = file("$buildDir/stub-results")
         testReportDir = file("$buildDir/reports/stub")
-        enableAssertions = true
-        testLogging.exceptionFormat = "full"
-        scanForTestClasses = false
-        include "**/*Test.*"
-        exclude "**/*Abstract*.*"
+    }
+    [testWithoutStub, testWithStub].each { test ->
+        test.enableAssertions = true
+        test.testLogging.exceptionFormat = "full"
+        test.scanForTestClasses = false
+        test.include "**/*Test.*"
+        test.exclude "**/*Abstract*.*"
     }
     test.dependsOn testWithoutStub, testWithStub
 
     addNative(project, "Glass")
-    addNative(project, "Decora")
-    addNative(project, "Prism")
-    addNative(project, "PrismSW")
-
-    def _linkParams = [];
-    def _ccParams = [];
-    def nativeGlassProject = "";
-    def _includes = [];
-    def _excludes = [];
-    def nativeObjDir = file("$project.buildDir/native")
-
-    if (isMac) {
-        _includes = ["com/sun/glass/events/**",
+    javahGlass {
+        include("com/sun/glass/events/**",
                 "com/sun/glass/ui/*",
-                "com/sun/glass/ui/mac/*",
-                "com/sun/glass/ui/accessible/mac/*"]
-        _excludes = [""]
-
-        def commonParams = ["-mmacosx-version-min=10.7", "-isysroot", "$MACOSX_SDK_PATH", "-arch", "x86_64", "-F$MACOSX_JDK_FRAMEWORK/Frameworks"]
-        _linkParams = ["-framework", "AppKit",
-                "-framework", "ApplicationServices",
-                "-framework", "JavaVM",
-                "-framework", "JavaRuntimeSupport",
-                "-framework", "OpenGL",
-                "-framework", "QuartzCore",
-                "-dynamiclib", "-lobjc"];
-        _linkParams.addAll(commonParams);
-        _ccParams = ["-std=c99", "-Fd$nativeObjDir", "-c", "-I$jdkHome/include", "-I$jdkHome/include/darwin"]
-        _ccParams.addAll(commonParams);
-        if (isDebug) {
-            _ccParams.add("-DDEBUG")
-        } else {
-            _ccParams.addAll(["-O3", "-ffast-math", "-DNDEBUG"])
-        }
-        nativeGlassProject = "glass-lib-macosx";
-    } else if (isWindows) {
-        _includes = ["com/sun/glass/events/**",
-                "com/sun/glass/ui/*",
-                "com/sun/glass/ui/win/*"]
-        _excludes = [""]
-
-        def commonParams = ["/nologo"]
-        _ccParams.addAll(commonParams);
-        _ccParams.addAll(["/W3", "/EHsc", "/Fd$nativeObjDir", "/c"]) // "/WX" can't be used because of PrismSW which has some warnings
-        _ccParams.addAll(["/D_STATIC_CPP_LIB", "/D_DISABLE_DEPRECATE_STATIC_CPPLIB", "/DINLINE=__inline", "/DUNICODE", "/D_UNICODE", "/DWIN32", "/DIAL", "/D_LITTLE_ENDIAN", "/DWIN32_LEAN_AND_MEAN"])
-        _ccParams.addAll(["/I$jdkHome/include", "/I$jdkHome/include/win32"])
-        _ccParams.addAll(["/arch:SSE", "/fp:fast"])
-        if (isDebug) {
-            //"/DLOGGING",
-            _ccParams.addAll(["/MDd", "/Od", "/Zi", "/DDEBUG"])
-        } else {
-            _ccParams.addAll(["/O2", "/MD"])
-        }
-
-        _linkParams.addAll(commonParams)
-        _linkParams.addAll(["/dll", "/manifest", "/opt:REF", "/incremental:no"])
-        if (isDebug) _linkParams.add("/debug")
-        nativeGlassProject = "glass-lib-windows";
-    } else {
-        // Linux, Solaris, LinuxARM, others..?
-        _includes = ["com/sun/glass/events/**",
-                "com/sun/glass/ui/*",
-                "com/sun/glass/ui/gtk/*"]
-        _excludes = [""]
-
-        def commonParams = ["-fno-strict-aliasing", "-fPIC", "-W", "-Wall", "-Wno-unused", "-Wno-parentheses", "-fno-omit-frame-pointer", "-Werror=implicit-function-declaration"]
-        _ccParams.addAll(commonParams)
-        // I think the -Fd flag is wrong, because the obj are actually in a subdirectory!
-        _ccParams.addAll(["-Fd$nativeObjDir", "-I$jdkHome/include", "-I$jdkHome/include/linux", "-c"])
-        //_ccParams.add("-g"); // extra_cflags
-        def results = new ByteArrayOutputStream();
-        exec {
-            commandLine "pkg-config", "--cflags", "gtk+-2.0", "gthread-2.0", "xtst"
-            standardOutput = results
-        }
-        _ccParams.addAll(Arrays.asList(results.toString().trim().split(" ")))
-        if (isDebug) {
-            _ccParams.addAll(["-ggdb", "-DVERBOSE"])
-        } else {
-            _ccParams.addAll(["-O2", "-ffast-math"])
-        }
-        //_ccParams.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
-        _ccParams.add("-DINLINE=inline")
-
-        _linkParams.add("-shared")
-        _linkParams.addAll(commonParams)
-        results = new ByteArrayOutputStream();
-        exec {
-            commandLine "pkg-config", "--libs", "gtk+-2.0", "gthread-2.0", "xtst"
-            standardOutput = results
-        }
-        _linkParams.addAll(Arrays.asList(results.toString().trim().split(" ")))
-
-        nativeGlassProject = "glass-lib-gtk";
-    }
-
-    javahGlass {
-        include _includes
+                "com/sun/glass/ui/$GLASS_PLATFORM/*",
+                "com/sun/glass/ui/accessible/$GLASS_PLATFORM/*")
     }
 
     ccGlass {
-        ccParams = _ccParams
-        source file("src/main/native/$nativeGlassProject")
+        params.addAll(CC_PARAMS)
+        if (IS_WINDOWS) params.add("/WX");
+        source(file("src/main/native-glass/$GLASS_PLATFORM"));
     }
 
     linkGlass {
-        lib = file("$project.buildDir/libs/$nativeGlassProject/libglass.$objExt")
-        if (isWindows) {
-            def p = ["/pdb:$project.buildDir/libs/$nativeGlassProject/libglass.pdb",
-                    "/map:$project.buildDir/libs/$nativeGlassProject/libglass.map"]
-            p.addAll(_linkParams)
+        lib = file("$project.buildDir/libs/${COMPILE_TARGET.name}/libglass.$LIBRARY_EXT")
+        if (IS_WINDOWS) {
+            def p = []
+            p.addAll(LINK_PARAMS)
             p.addAll(["delayimp.lib", "gdi32.lib", "urlmon.lib", "Comdlg32.lib", "winmm.lib", "imm32.lib", "shell32.lib", "Uiautomationcore.lib", "dwmapi.lib", "/DELAYLOAD:user32.dll", "/DELAYLOAD:urlmon.dll", "/DELAYLOAD:winmm.dll", "/DELAYLOAD:shell32.dll", "/DELAYLOAD:Uiautomationcore.dll", "/DELAYLOAD:dwmapi.dll"])
             linkParams = p
         } else {
-            linkParams = _linkParams
+            linkParams.addAll(LINK_PARAMS);
         }
     }
 
+    addNative(project, "Decora")
     javahDecora {
         include "com/sun/scenario/effect/**/*"
     }
 
     ccDecora {
-        ccParams = _ccParams
-        source file("src/main/native/decora-sse-native")
+        params.addAll(CC_PARAMS);
+        source file("src/main/native-decora")
     }
 
     linkDecora {
-        lib = file("$project.buildDir/libs/libdecora-sse.$objExt")
-        if (isWindows) {
-            def p = ["/pdb:$project.buildDir/libs/libdecora.pdb",
-                    "/map:$project.buildDir/libs/libdecora.map"]
-            p.addAll(_linkParams)
-            linkParams = p
-        } else {
-            linkParams = _linkParams
-        }
+        lib = file("$project.buildDir/libs/libdecora-sse.$LIBRARY_EXT")
+        linkParams.addAll(LINK_PARAMS);
     }
 
+    addNative(project, "Prism")
     javahPrism {
-        include "com/sun/prism/impl/**/*",
-            "com/sun/prism/PresentableState*"
+        include "com/sun/prism/impl/**/*", "com/sun/prism/PresentableState*"
     }
 
     ccPrism {
-        if (isLinux) compiler = "cc"
-        ccParams = _ccParams
-        source file("src/main/native/prism-common-native")
+        if (IS_LINUX) compiler = "cc"
+        params.addAll(CC_PARAMS);
+        source file("src/main/native-prism")
     }
 
     linkPrism {
-        lib = file("$project.buildDir/libs/libprism-common.$objExt")
-        if (isWindows) {
-            def p = ["/pdb:$project.buildDir/libs/libprism-common.pdb",
-                    "/map:$project.buildDir/libs/libprism-common.map"]
-            p.addAll(_linkParams)
-            linkParams = p
-        } else {
-            linkParams = _linkParams
-        }
+        lib = file("$project.buildDir/libs/libprism-common.$LIBRARY_EXT")
+        linkParams.addAll(LINK_PARAMS);
     }
 
+    addNative(project, "PrismSW")
     javahPrismSW {
         include "com/sun/pisces/**/*"
     }
 
     ccPrismSW {
-        if (isLinux) compiler = "cc"
-        ccParams = _ccParams
-        source file("src/main/native/prism-sw-native")
+        if (IS_LINUX) compiler = "cc"
+        params.addAll(CC_PARAMS);
+        source file("src/main/native-prism-sw")
     }
 
     linkPrismSW {
-        lib = file("$project.buildDir/libs/libprism-sw.$objExt")
-        if (isWindows) {
-            def p = ["/pdb:$project.buildDir/libs/libprism-sw.pdb",
-                    "/map:$project.buildDir/libs/libprism-sw.map"]
-            p.addAll(_linkParams)
-            linkParams = p
-        } else {
-            linkParams = _linkParams
-        }
+        lib = file("$project.buildDir/libs/libprism-sw.$LIBRARY_EXT")
+        linkParams.addAll(LINK_PARAMS);
     }
 
-    task("native", dependsOn: [nativeGlass, nativePrism, nativePrismSW, nativeDecora])
+    task("native", dependsOn: [nativeGlass, nativePrism, nativePrismSW, nativeDecora]) {
+        group = "Build"
+        description = "Compiles and Builds all native libraries for Graphics"
+    }
 }
 
 project(":controls") {
     dependencies {
-        compile project(":build-tools"), project(":base"), project(":graphics")
+        compile project(":build-tools"), project(":base"), project(":graphics"), project(":designTime")
         testCompile project(":graphics").sourceSets.stub.output
     }
 
@@ -803,15 +913,19 @@
 }
 
 project(":swing") {
+    // Skip Swing compilation when not on a compile target for MAC, WIN, LINUX
+    //enabled = COMPILE_TARGET == CompileTarget.WIN || COMPILE_TARGET == CompileTarget.MAC || COMPILE_TARGET == CompileTarget.LINUX;
     dependencies {
         compile project(":build-tools"), project(":base"), project(":graphics")
     }
 }
 
 project(":swt") {
+    // Skip SWT compilation when not on a compile target for MAC, WIN, LINUX
+    //enabled = COMPILE_TARGET == CompileTarget.WIN || COMPILE_TARGET == CompileTarget.MAC || COMPILE_TARGET == CompileTarget.LINUX;
     dependencies {
         compile project(":build-tools"), project(":base"), project(":graphics")
-        compile ":$swtFileName:"
+        compile ":$SWT_FILE_NAME:"
     }
 }
 
@@ -826,175 +940,22 @@
     dependencies {
         compile project(":build-tools"), project(":base"), project(":graphics"),
                 project(":controls"), /*project(":media"), project(":web"),*/ project(":swt"), project(":swing")
+        testCompile project(":graphics").sourceSets.stub.output
+    }
+    test {
+        // StubToolkit is not *really* needed here, but because some code inadvertently invokes performance
+        // tracker and this attemps to fire up the toolkit and this looks for native libraries and fails,
+        // we have to use the stub toolkit for now.
+        jvmArgs "-Djavafx.toolkit=com.sun.javafx.pgstub.StubToolkit"
     }
 }
 
 project(":designTime") {
     dependencies {
-        compile project(":graphics"), project(":controls")
+        compile project(":graphics")
     }
 }
 
-//project(":graphics:native") {
-//    dependencies {
-//        compile project(":graphics")
-//    }
-//
-////    task compileGlassLibGTK(type:Exec, dependsOn:configurations.compile) {
-////        inputs.dir "src/main/glass-lib-gtk"
-////        outputs.dir "$buildDir/main/glass-lib-gtk"
-////        outputs.dir "$buildDir/libs"
-////        workingDir "src/main/glass-lib-gtk"
-////        environment([
-////                "BUILD_DIR"            : "../../../$buildDir/main/glass-lib-gtk",
-////                "DIST_DIR"             : "../../../$buildDir/libs"
-//////                "DECORA_SSE_CLASS_DIR" : "../../../../$buildDir/classes/main",
-////        ])
-////        commandLine "make"
-////    }
-//
-////    task compileGlassLibiOS(type:Exec, dependsOn:configurations.compile) {
-////        inputs.dir "src/main/glass-lib-ios"
-////        outputs.dir "$buildDir/main/glass-lib-ios"
-////        outputs.dir "$buildDir/libs"
-////        workingDir "src/main/glass-lib-ios"
-////        environment([
-////                "BUILD_DIR"            : "../../../$buildDir/main/glass-lib-ios",
-////                "DIST_DIR"             : "../../../$buildDir/libs"
-//////                "DECORA_SSE_CLASS_DIR" : "../../../../$buildDir/classes/main",
-////        ])
-////        commandLine "make"
-////    }
-////
-////    task compileGlassLibLens(type:Exec, dependsOn:configurations.compile) {
-////        inputs.dir "src/main/glass-lib-lens"
-////        outputs.dir "$buildDir/main/glass-lib-lens"
-////        outputs.dir "$buildDir/libs"
-////        workingDir "src/main/glass-lib-lens"
-////        environment([
-////                "BUILD_DIR"            : "../../../$buildDir/main/glass-lib-lens",
-////                "DIST_DIR"             : "../../../$buildDir/libs"
-//////                "DECORA_SSE_CLASS_DIR" : "../../../../$buildDir/classes/main",
-////        ])
-////        commandLine "make"
-////    }
-//
-//    task compileGlassLibWindows(type:Exec, dependsOn:configurations.compile) {
-//        enabled = isWindows
-//        inputs.dir "src/main/glass-lib-windows"
-//        outputs.dir "$buildDir/main/glass-lib-windows"
-//        outputs.dir "$buildDir/libs/glass-lib-windows"
-//        workingDir "src/main/glass-lib-windows"
-//        environment([
-//                "JDK_HOME"             : shortCygwinPath(jdkHome, isCygwin),
-//                "VCINSTALLDIR"         : WINDOWS_VS_VCINSTALLDIR,
-//                "VSINSTALLDIR"         : WINDOWS_VS_VSINSTALLDIR,
-//                "DEVENVDIR"            : WINDOWS_VS_DEVENVDIR,
-//                "MSVCDIR"              : WINDOWS_VS_MSVCDIR,
-//                "PATH"                 : WINDOWS_VS_PATH,
-//                "INCLUDE"              : WINDOWS_VS_INCLUDE,
-//                "LIB"                  : WINDOWS_VS_LIB,
-//                "LIBPATH"              : WINDOWS_VS_LIBPATH,
-//                "DXSDK_DIR"            : WINDOWS_DXSDK_DIR,
-//                "CONF"                 : CONF,
-//                "BUILD_DIR"            : "../../../$buildDir/main/glass-lib-windows",
-//                "DIST_DIR"             : "../../../$buildDir/libs",
-//                "CLASS_DIR"            : "../../../../$buildDir/classes/main",
-//                "SRC_DIR"              : "src",
-//                "OUT_LIB"              : "../../../$buildDir/libs/glass-lib-windows/libglass.dll",
-//                "OUT_MAP"              : "../../../$buildDir/libs/glass-lib-windows/libglass.map",
-//                "OUT_PDB"              : "../../../$buildDir/libs/glass-lib-windows/libglass.pdb"
-//        ])
-//        commandLine "make", "all"
-//    }
-//
-//    task compileDecoraSSENative(type:Exec, dependsOn:configurations.compile) {
-//        inputs.dir "src/main/decora-sse-native"
-//        outputs.dir "$buildDir/main/decora-sse-native"
-//        outputs.dir "$buildDir/libs"
-//        workingDir "src/main/decora-sse-native"
-//        environment([
-//                "JDK_HOME"             : shortCygwinPath(jdkHome, isCygwin),
-//                "BUILD_DIR"            : "../../../$buildDir/main/decora-sse-native",
-//                "DIST_DIR"             : "../../../$buildDir/libs",
-//                "DECORA_SSE_CLASS_DIR" : "../../../../$buildDir/classes/main",
-//                "DECORA_DEP_CP"        : "../../../../$buildDir/classes/main",
-//                "DECORA_GEN_CPP"       : "$buildDir/generated-src"
-//        ])
-//        if (isWindows) {
-//            environment([
-//                    "VCINSTALLDIR"         : WINDOWS_VS_VCINSTALLDIR,
-//                    "VSINSTALLDIR"         : WINDOWS_VS_VSINSTALLDIR,
-//                    "DEVENVDIR"            : WINDOWS_VS_DEVENVDIR,
-//                    "MSVCDIR"              : WINDOWS_VS_MSVCDIR,
-//                    "PATH"                 : WINDOWS_VS_PATH,
-//                    "INCLUDE"              : WINDOWS_VS_INCLUDE,
-//                    "LIB"                  : WINDOWS_VS_LIB,
-//                    "LIBPATH"              : WINDOWS_VS_LIBPATH,
-//                    "DXSDK_DIR"            : WINDOWS_DXSDK_DIR,
-//            ])
-//        }
-//        commandLine "make", "all"
-//    }
-//
-//    task compilePrismCommon(type:Exec, dependsOn:configurations.compile) {
-//        inputs.dir "src/main/prism-common-native"
-//        outputs.dir "$buildDir/main/prism-common-native"
-//        outputs.dir "$buildDir/libs"
-//        workingDir "src/main/prism-common-native"
-//        environment([
-//                "JDK_HOME"             : shortCygwinPath(jdkHome, isCygwin),
-//                "BUILD_DIR"      : "../../../$buildDir/main/prism-common-native",
-//                "DIST_DIR"       : "../../../$buildDir/libs",
-//                "PRISM_COM_CP"   : "../../../../$buildDir/classes/main",
-//                "JAVAFX_GEOM_CP" : "../../../../$buildDir/classes/main",
-//        ])
-//        if (isWindows) {
-//            environment([
-//                    "VCINSTALLDIR"         : WINDOWS_VS_VCINSTALLDIR,
-//                    "VSINSTALLDIR"         : WINDOWS_VS_VSINSTALLDIR,
-//                    "DEVENVDIR"            : WINDOWS_VS_DEVENVDIR,
-//                    "MSVCDIR"              : WINDOWS_VS_MSVCDIR,
-//                    "PATH"                 : WINDOWS_VS_PATH,
-//                    "INCLUDE"              : WINDOWS_VS_INCLUDE,
-//                    "LIB"                  : WINDOWS_VS_LIB,
-//                    "LIBPATH"              : WINDOWS_VS_LIBPATH,
-//                    "DXSDK_DIR"            : WINDOWS_DXSDK_DIR,
-//            ])
-//        }
-//        commandLine "make", "all"
-//    }
-//
-//    task compilePrismSW(type:Exec, dependsOn:configurations.compile) {
-//        inputs.dir "src/main/prism-sw-native"
-//        outputs.dir "$buildDir/main/prism-sw-native"
-//        outputs.dir "$buildDir/libs"
-//        workingDir "src/main/prism-sw-native"
-//        environment([
-//                "JDK_HOME"             : shortCygwinPath(jdkHome, isCygwin),
-//                "BUILD_DIR"            : "../../../$buildDir/main/prism-sw-native",
-//                "DIST_DIR"             : "../../../$buildDir/libs",
-//                "PRISM-SW_CP"          : "../../../../$buildDir/classes/main",
-//        ])
-//        if (isWindows) {
-//            environment([
-//                    "VCINSTALLDIR"         : WINDOWS_VS_VCINSTALLDIR,
-//                    "VSINSTALLDIR"         : WINDOWS_VS_VSINSTALLDIR,
-//                    "DEVENVDIR"            : WINDOWS_VS_DEVENVDIR,
-//                    "MSVCDIR"              : WINDOWS_VS_MSVCDIR,
-//                    "PATH"                 : WINDOWS_VS_PATH,
-//                    "INCLUDE"              : WINDOWS_VS_INCLUDE,
-//                    "LIB"                  : WINDOWS_VS_LIB,
-//                    "LIBPATH"              : WINDOWS_VS_LIBPATH,
-//                    "DXSDK_DIR"            : WINDOWS_DXSDK_DIR,
-//            ])
-//        }
-//        commandLine "make", "all"
-//    }
-//    classes.dependsOn compileDecoraSSENative, compilePrismCommon, compilePrismSW,
-//            compileGlassLibMacOS, compileGlassLibWindows
-//}
-
 project(":graphics:effects-jsl") {
     dependencies {
         compile project(":graphics")
@@ -1045,6 +1006,16 @@
     }
     classes.dependsOn compileDecoraJava
 
+    if (IS_WINDOWS){
+        task compileDecoraHLSL(dependsOn: compileJSL, type: CompileHLSLTask) {
+            description = "Compile Decora HLSL files into .obj files"
+            matches = ".*\\.hlsl"
+            source "$buildDir/generated-src/jsl/decora-d3d/build/gensrc/com/sun/scenario/effect/impl/hw/d3d/hlsl/"
+            output file("$buildDir/hlsl")
+        }
+        classes.dependsOn compileDecoraHLSL