changeset 7752:5f6c2a2877d1

Automated merge with ssh://hg.openjdk.java.net/openjfx/8u/rt
author kcr
date Thu, 21 Aug 2014 10:27:31 -0700
parents 0f946155b41b eceb2234f22b
children 946598c40f55
files
diffstat 122 files changed, 4695 insertions(+), 1770 deletions(-) [+]
line wrap: on
line diff
--- a/apps/samples/Ensemble8/src/generated/java/ensemble/generated/Samples.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/generated/java/ensemble/generated/Samples.java	Thu Aug 21 10:27:31 2014 -0700
@@ -4,348 +4,351 @@
 import javafx.application.ConditionalFeature;
 import java.util.HashMap;
 public class Samples{
-    private static final SampleInfo SAMPLE_0 = new SampleInfo("FXML Login Demo","FXML-based Login screen sample ","/Language/FXML Login Demo","/ensemble/samples/language/fxml","ensemble.samples.language.fxml.FXMLLoginDemoApp","/ensemble/samples/language/fxml/preview.png",new String[]{"/ensemble/samples/language/fxml/Authenticator.java","/ensemble/samples/language/fxml/User.java","/ensemble/samples/language/fxml/FXMLLoginDemoApp.java","/ensemble/samples/language/fxml/LoginController.java","/ensemble/samples/language/fxml/ProfileController.java","/ensemble/samples/language/fxml/Login.fxml","/ensemble/samples/language/fxml/Login.css","/ensemble/samples/language/fxml/Profile.fxml",},new String[]{"java.util.HashMap","java.util.Map","java.io.InputStream","java.util.logging.Level","java.util.logging.Logger","javafx.fxml.FXML","javafx.fxml.FXMLLoader","javafx.fxml.Initializable","javafx.fxml.JavaFXBuilderFactory","javafx.stage.Stage",},new String[]{},new String[]{},"/ensemble/samples/language/fxml/FXMLLoginDemoApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_1 = 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 above the buttons. ","/Language/ObservableList","/ensemble/samples/language/observablelist","ensemble.samples.language.observablelist.ObservableListApp","/ensemble/samples/language/observablelist/preview.png",new String[]{"/ensemble/samples/language/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/observablelist/ObservableListApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_2 = new SampleInfo("SwingInterop","A sample that invokes SwingInterop to run in a separate JVM.  SwingInterop shows how to embed JavaFX components, like Chart and WebView components, in a Swing application. ","/Language/SwingInterop","/ensemble/samples/language/swing","ensemble.samples.language.swing.SwingInteropApp","/ensemble/samples/language/swing/preview.png",new String[]{"/ensemble/samples/language/swing/SwingInteropService.java","/ensemble/samples/language/swing/SwingInterop.java","/ensemble/samples/language/swing/SwingInteropTask.java","/ensemble/samples/language/swing/SampleTableModel.java","/ensemble/samples/language/swing/SwingInteropApp.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.web.WebEngine","javafx.scene.web.WebView",},new String[]{},new String[]{},"/ensemble/samples/language/swing/SwingInteropApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SWING,},false);
-    private static final SampleInfo SAMPLE_3 = 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/String Binding","/ensemble/samples/language/stringbinding","ensemble.samples.language.stringbinding.StringBindingApp","/ensemble/samples/language/stringbinding/preview.png",new String[]{"/ensemble/samples/language/stringbinding/StringBindingApp.java",},new String[]{"javafx.beans.binding.StringBinding","javafx.scene.control.TextField","javafx.scene.control.Label",},new String[]{},new String[]{},"/ensemble/samples/language/stringbinding/StringBindingApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_0 = new SampleInfo("FXML Login Demo","FXML-based Login screen sample ","/Language/FXML Login Demo","/ensemble/samples/language/fxml","ensemble.samples.language.fxml.FXMLLoginDemoApp","/ensemble/samples/language/fxml/preview.png",new String[]{"/ensemble/samples/language/fxml/FXMLLoginDemoApp.java","/ensemble/samples/language/fxml/LoginController.java","/ensemble/samples/language/fxml/ProfileController.java","/ensemble/samples/language/fxml/User.java","/ensemble/samples/language/fxml/Authenticator.java","/ensemble/samples/language/fxml/Login.css","/ensemble/samples/language/fxml/Profile.fxml","/ensemble/samples/language/fxml/Login.fxml",},new String[]{"java.util.HashMap","java.util.Map","java.io.InputStream","java.util.logging.Level","java.util.logging.Logger","javafx.fxml.FXML","javafx.fxml.FXMLLoader","javafx.fxml.Initializable","javafx.fxml.JavaFXBuilderFactory","javafx.stage.Stage",},new String[]{},new String[]{},"/ensemble/samples/language/fxml/FXMLLoginDemoApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_1 = 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/String Binding","/ensemble/samples/language/stringbinding","ensemble.samples.language.stringbinding.StringBindingApp","/ensemble/samples/language/stringbinding/preview.png",new String[]{"/ensemble/samples/language/stringbinding/StringBindingApp.java",},new String[]{"javafx.beans.binding.StringBinding","javafx.scene.control.TextField","javafx.scene.control.Label",},new String[]{},new String[]{},"/ensemble/samples/language/stringbinding/StringBindingApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_2 = 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 above the buttons. ","/Language/ObservableList","/ensemble/samples/language/observablelist","ensemble.samples.language.observablelist.ObservableListApp","/ensemble/samples/language/observablelist/preview.png",new String[]{"/ensemble/samples/language/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/observablelist/ObservableListApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_3 = new SampleInfo("SwingInterop","A sample that invokes SwingInterop to run in a separate JVM.  SwingInterop shows how to embed JavaFX components, like Chart and WebView components, in a Swing application. ","/Language/SwingInterop","/ensemble/samples/language/swing","ensemble.samples.language.swing.SwingInteropApp","/ensemble/samples/language/swing/preview.png",new String[]{"/ensemble/samples/language/swing/SwingInteropTask.java","/ensemble/samples/language/swing/SwingInterop.java","/ensemble/samples/language/swing/SwingInteropApp.java","/ensemble/samples/language/swing/SampleTableModel.java","/ensemble/samples/language/swing/SwingInteropService.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.web.WebEngine","javafx.scene.web.WebView",},new String[]{},new String[]{},"/ensemble/samples/language/swing/SwingInteropApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SWING,},false);
     private static final SampleInfo SAMPLE_4 = 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/ChangeListener","/ensemble/samples/language/changelistener","ensemble.samples.language.changelistener.ChangeListenerApp","/ensemble/samples/language/changelistener/preview.png",new String[]{"/ensemble/samples/language/changelistener/ChangeListenerApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.beans.InvalidationListener","javafx.beans.value.ObservableValue",},new String[]{},new String[]{},"/ensemble/samples/language/changelistener/ChangeListenerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_5 = new SampleInfo("Service","A sample showing use of a Service to retrieve data in a background thread. Selecting the Refresh button restarts the Service. ","/Language/Concurrency/Service","/ensemble/samples/language/concurrency/service","ensemble.samples.language.concurrency.service.ServiceApp","/ensemble/samples/language/concurrency/service/preview.png",new String[]{"/ensemble/samples/language/concurrency/service/GetDailySalesService.java","/ensemble/samples/language/concurrency/service/ServiceApp.java","/ensemble/samples/language/concurrency/service/DailySales.java","/ensemble/samples/language/concurrency/service/GetDailySalesTask.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/language/concurrency/service/ServiceApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_6 = new SampleInfo("Task","A sample showing use of an an asynchronous Task to populate a table. ","/Language/Concurrency/Task","/ensemble/samples/language/concurrency/task","ensemble.samples.language.concurrency.task.TaskApp","/ensemble/samples/language/concurrency/task/preview.png",new String[]{"/ensemble/samples/language/concurrency/task/DailySales.java","/ensemble/samples/language/concurrency/task/TaskApp.java","/ensemble/samples/language/concurrency/task/GetDailySalesTask.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/language/concurrency/task/TaskApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_7 = new SampleInfo("3D Sphere System","A sample that demonstrates an animated rotation of 3D spheres. ","/Graphics 3d/3D Sphere System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.SphereSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Cube.java","/ensemble/samples/graphics3d/cubesystem/Xform.java","/ensemble/samples/graphics3d/cubesystem/Xsphere.java",},new String[]{"javafx.scene.shape.Sphere","javafx.scene.paint.PhongMaterial","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.scene.paint.Color","javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.SceneAntialiasing","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_8 = new SampleInfo("3D Cubes","A sample that demonstrates an animated rotation of 3D cubes. ","/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.shape.Box","javafx.scene.paint.PhongMaterial","javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.SceneAntialiasing","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_9 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. It is animated and plays sounds when clicked. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/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/graphics3d/xylophone/XylophoneApp.java","/ensemble/samples/graphics3d/xylophone/Xform.java",},new String[]{"javafx.scene.shape.Box","javafx.scene.paint.PhongMaterial","javafx.scene.media.AudioClip","javafx.scene.PerspectiveCamera","javafx.scene.transform.Rotate","javafx.scene.transform.Scale","javafx.animation.Timeline","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Interpolator","javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.util.Duration","javafx.scene.Group","javafx.scene.SceneAntialiasing","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_10 = new SampleInfo("3D Box","A sample that shows a 3D box and uses a perspective camera for rendering the scene. Hint: Switch to Line draw mode to see how cullFace property works. ","/Graphics 3d/3D Box","/ensemble/samples/graphics3d/simple3dbox","ensemble.samples.graphics3d.simple3dbox.Simple3DBoxApp","/ensemble/samples/graphics3d/simple3dbox/preview.png",new String[]{"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",},new String[]{"javafx.scene.shape.Box","javafx.scene.PerspectiveCamera","javafx.scene.paint.PhongMaterial","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.scene.SceneAntialiasing","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",new PlaygroundProperty[]{new PlaygroundProperty("testBox","drawMode"),new PlaygroundProperty("testBox","cullFace"),new PlaygroundProperty("material","diffuseColor"),},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_11 = new SampleInfo("3D Sphere","A sample that demonstrates features of PhongMaterial applied to a 3D Sphere. Provided is a playground to exercise the following properties of material: diffuse map and color, specular map, color and power, bump map, self illumination map. ","/Graphics 3d/3D Sphere","/ensemble/samples/graphics3d/sphere","ensemble.samples.graphics3d.sphere.Simple3DSphereApp","/ensemble/samples/graphics3d/sphere/preview.png",new String[]{"/ensemble/samples/graphics3d/sphere/Simple3DSphereApp.java","/ensemble/samples/graphics3d/sphere/earth-d.jpg","/ensemble/samples/graphics3d/sphere/earth-l.jpg","/ensemble/samples/graphics3d/sphere/earth-n.jpg","/ensemble/samples/graphics3d/sphere/earth-s.jpg",},new String[]{"javafx.scene.paint.PhongMaterial","javafx.scene.shape.Sphere","javafx.animation.Animation","javafx.animation.Interpolator","javafx.animation.RotateTransition","javafx.beans.binding.Bindings","javafx.beans.property.BooleanProperty","javafx.beans.property.DoubleProperty","javafx.beans.property.SimpleBooleanProperty","javafx.beans.property.SimpleDoubleProperty","javafx.scene.AmbientLight","javafx.scene.Group","javafx.scene.PerspectiveCamera","javafx.scene.PointLight","javafx.scene.SceneAntialiasing","javafx.scene.SubScene","javafx.scene.image.Image","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/sphere/Simple3DSphereApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"-","name","Material"),new PlaygroundProperty("material","diffuseColor"),new PlaygroundProperty(null,"diffuseMap"),new PlaygroundProperty("material","specularColor"),new PlaygroundProperty(null,"specularMap"),new PlaygroundProperty("material","specularPower","min","0","max","64"),new PlaygroundProperty(null,"bumpMap"),new PlaygroundProperty(null,"selfIlluminationMap"),new PlaygroundProperty(null,"-","name","Light"),new PlaygroundProperty("sun","color"),new PlaygroundProperty(null,"sunLight"),new PlaygroundProperty(null,"sunDistance","min","5","max","150"),new PlaygroundProperty(null,"-","name","Sphere"),new PlaygroundProperty("earth","drawMode"),new PlaygroundProperty("earth","cullFace"),},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_12 = new SampleInfo("Timeline","A sample that demonstrates the basics of timeline creation. ","/Animation/Timeline","/ensemble/samples/animation/timeline","ensemble.samples.animation.timeline.TimelineApp","/ensemble/samples/animation/timeline/preview.png",new String[]{"/ensemble/samples/animation/timeline/TimelineApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{"/Animation/Timeline Events",},"/ensemble/samples/animation/timeline/TimelineApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_13 = 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 Events","/ensemble/samples/animation/timelineevents","ensemble.samples.animation.timelineevents.TimelineEventsApp","/ensemble/samples/animation/timelineevents/preview.png",new String[]{"/ensemble/samples/animation/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[]{"/Animation/Timeline",},"/ensemble/samples/animation/timelineevents/TimelineEventsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_14 = 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[]{},true);
-    private static final SampleInfo SAMPLE_15 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_16 = 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[]{},true);
-    private static final SampleInfo SAMPLE_17 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_18 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_19 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_20 = 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.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/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_21 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_22 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_23 = 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.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[]{},true);
-    private static final SampleInfo SAMPLE_24 = 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.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[]{},false);
-    private static final SampleInfo SAMPLE_25 = new SampleInfo("Bubble Chart","An advanced bubble chart with a variety of actions and settable properties. ","/Charts/Bubble Chart","/ensemble/samples/charts/bubble","ensemble.samples.charts.bubble.BubbleChartApp","/ensemble/samples/charts/bubble/preview.png",new String[]{"/ensemble/samples/charts/bubble/BubbleChartApp.java",},new String[]{"javafx.scene.chart.BubbleChart","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/bubble/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","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[]{},false);
-    private static final SampleInfo SAMPLE_26 = 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/Candle Stick Chart","/ensemble/samples/charts/candlestick","ensemble.samples.charts.candlestick.CandleStickChartApp","/ensemble/samples/charts/candlestick/preview.png",new String[]{"/ensemble/samples/charts/candlestick/Candle.java","/ensemble/samples/charts/candlestick/CandleStickExtraValues.java","/ensemble/samples/charts/candlestick/CandleStickChartApp.java","/ensemble/samples/charts/candlestick/TooltipContent.java","/ensemble/samples/charts/candlestick/CandleStickChart.java","/ensemble/samples/charts/candlestick/CandleStickChart.css",},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/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","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[]{},false);
-    private static final SampleInfo SAMPLE_27 = 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","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","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[]{},false);
-    private static final SampleInfo SAMPLE_28 = 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","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","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[]{},true);
-    private static final SampleInfo SAMPLE_29 = 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/ImageBarChartApp.java","/ensemble/samples/charts/bar/image/truck-s.png","/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/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","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","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","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[]{},false);
-    private static final SampleInfo SAMPLE_30 = 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","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[]{},false);
-    private static final SampleInfo SAMPLE_31 = 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,ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_32 = 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","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[]{},true);
-    private static final SampleInfo SAMPLE_33 = 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/LiveScatterChartApp.java","/ensemble/samples/charts/scatter/animated/LiveScatterChart.css",},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[]{},false);
-    private static final SampleInfo SAMPLE_34 = 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","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[]{},false);
-    private static final SampleInfo SAMPLE_35 = 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","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[]{},true);
-    private static final SampleInfo SAMPLE_36 = 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/CurveFittedAreaChartApp.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.css",},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","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","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","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[]{},false);
-    private static final SampleInfo SAMPLE_37 = 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/AudioAreaChartApp.java","/ensemble/samples/charts/area/audio/AudioAreaChart.css",},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[]{ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_38 = 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[]{},true);
-    private static final SampleInfo SAMPLE_39 = 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/DrilldownPieChartApp.java","/ensemble/samples/charts/pie/drilldown/DrilldownChart.css",},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[]{},false);
-    private static final SampleInfo SAMPLE_40 = 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","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[]{},true);
-    private static final SampleInfo SAMPLE_41 = 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[]{},false);
-    private static final SampleInfo SAMPLE_42 = 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","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[]{},false);
-    private static final SampleInfo SAMPLE_43 = 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/Advanced Stage","/ensemble/samples/scenegraph/advancedstage","ensemble.samples.scenegraph.advancedstage.AdvancedStageApp","/ensemble/samples/scenegraph/advancedstage/preview.png",new String[]{"/ensemble/samples/scenegraph/advancedstage/AdvancedStageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene","javafx.stage.StageStyle","javafx.application.Platform",},new String[]{},new String[]{"/Scenegraph/Stage",},"/ensemble/samples/scenegraph/advancedstage/AdvancedStageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_44 = new SampleInfo("Stage","A sample with a control that creates a decorated stage that is centered on your desktop. ","/Scenegraph/Stage","/ensemble/samples/scenegraph/stage","ensemble.samples.scenegraph.stage.StageApp","/ensemble/samples/scenegraph/stage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/StageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene",},new String[]{},new String[]{"/Scenegraph/Advanced Stage",},"/ensemble/samples/scenegraph/stage/StageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_45 = new SampleInfo("Custom Node","A sample that demonstrates how to create a custom node by extending the Parent class. ","/Scenegraph/Custom Node","/ensemble/samples/scenegraph/customnode","ensemble.samples.scenegraph.customnode.CustomNodeApp","/ensemble/samples/scenegraph/customnode/preview.png",new String[]{"/ensemble/samples/scenegraph/customnode/MyNode.java","/ensemble/samples/scenegraph/customnode/CustomNodeApp.java",},new String[]{"javafx.scene.Parent","javafx.scene.Node",},new String[]{},new String[]{"/Scenegraph/Node Properties",},"/ensemble/samples/scenegraph/customnode/CustomNodeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_46 = 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 Properties","/ensemble/samples/scenegraph/nodeproperties","ensemble.samples.scenegraph.nodeproperties.NodePropertiesApp","/ensemble/samples/scenegraph/nodeproperties/preview.png",new String[]{"/ensemble/samples/scenegraph/nodeproperties/NodePropertiesApp.java",},new String[]{"javafx.scene.Node",},new String[]{},new String[]{"/Scenegraph/Custom Node",},"/ensemble/samples/scenegraph/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[]{},false);
-    private static final SampleInfo SAMPLE_47 = 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[]{},false);
-    private static final SampleInfo SAMPLE_48 = new SampleInfo("Gesture Event","A sample that demonstrates various multi-touch gesture events and their usage. Tap, scroll and pan to move the rectangle. Use pinch close and open zoom gestures to resize it. User rotate touch gesture to rotate it. Swipe events are reported but not wired to any other behavior. All events are logged to the console. You can also observe inertia scrolling. ","/Scenegraph/Events/Gesture Event","/ensemble/samples/scenegraph/events/gestureevent","ensemble.samples.scenegraph.events.gestureevent.GestureEventApp","/ensemble/samples/scenegraph/events/gestureevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",},new String[]{"javafx.scene.input.RotateEvent","javafx.scene.input.ScrollEvent","javafx.scene.input.SwipeEvent","javafx.scene.input.TouchEvent","javafx.scene.input.ZoomEvent","javafx.scene.Cursor","javafx.collections.FXCollections","javafx.collections.ObservableList","javafx.event.EventHandler","javafx.scene.control.ListView","javafx.scene.layout.VBox","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.LinearGradient","javafx.scene.paint.Stop","javafx.scene.shape.Rectangle","javafx.scene.layout.Pane",},new String[]{},new String[]{"/Scenegraph/Events/MouseEvent","/Scenegraph/Events/Multi-Touch",},"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_49 = 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/LettersPane.java","/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.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[]{},false);
-    private static final SampleInfo SAMPLE_50 = 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[]{},false);
-    private static final SampleInfo SAMPLE_51 = 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","javafx.scene.effect.BlurType","javafx.scene.effect.DropShadow","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.layout.Region","javafx.scene.layout.StackPane","javafx.scene.paint.Color","javafx.scene.shape.Rectangle",},new String[]{},new String[]{"/Scenegraph/Events/Gesture Event",},"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_52 = 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[]{},true);
-    private static final SampleInfo SAMPLE_53 = 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[]{},true);
-    private static final SampleInfo SAMPLE_54 = new SampleInfo("Hidden SplitPane","A sample that demonstrates styling a hidden split pane with CSS. ","/Controls/Hidden SplitPane","/ensemble/samples/controls/splitpane","ensemble.samples.controls.splitpane.HiddenSplitPaneApp","/ensemble/samples/controls/splitpane/preview.png",new String[]{"/ensemble/samples/controls/splitpane/HiddenSplitPaneApp.java","/ensemble/samples/controls/splitpane/HiddenSplitPane.css",},new String[]{"javafx.scene.control.SplitPane",},new String[]{},new String[]{},"/ensemble/samples/controls/splitpane/HiddenSplitPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_55 = 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[]{},true);
-    private static final SampleInfo SAMPLE_56 = new SampleInfo("WebView","A sample that demonstrates a WebView object accessing a web page. ","/Controls/WebView","/ensemble/samples/controls/webview","ensemble.samples.controls.webview.WebViewApp","/ensemble/samples/controls/webview/preview.png",new String[]{"/ensemble/samples/controls/webview/WebViewApp.java",},new String[]{"javafx.scene.web.WebView","javafx.scene.web.WebEngine",},new String[]{},new String[]{"/Controls/HTML Editor",},"/ensemble/samples/controls/webview/WebViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,},false);
-    private static final SampleInfo SAMPLE_57 = 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/Radio Button",},"/ensemble/samples/controls/checkbox/CheckBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_58 = 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[]{},true);
-    private static final SampleInfo SAMPLE_59 = new SampleInfo("TabPane","Some implementations of tabs using the TabPane class. ","/Controls/TabPane","/ensemble/samples/controls/tab","ensemble.samples.controls.tab.TabPaneApp","/ensemble/samples/controls/tab/preview.png",new String[]{"/ensemble/samples/controls/tab/TabPaneApp.java","/ensemble/samples/controls/tab/tab_16.png",},new String[]{"javafx.scene.control.Tab","javafx.scene.control.TabPane",},new String[]{},new String[]{},"/ensemble/samples/controls/tab/TabPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_60 = 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[]{},true);
-    private static final SampleInfo SAMPLE_61 = 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[]{},true);
-    private static final SampleInfo SAMPLE_62 = 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/ChoiceBox","/Controls/Accordion","/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_63 = 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. ","/Controls/HTML Editor","/ensemble/samples/controls/htmleditor","ensemble.samples.controls.htmleditor.HTMLEditorApp","/ensemble/samples/controls/htmleditor/preview.png",new String[]{"/ensemble/samples/controls/htmleditor/HTMLEditorApp.java",},new String[]{"javafx.scene.web.HTMLEditor","javafx.scene.control.ScrollPane","javafx.scene.control.ScrollPane.ScrollBarPolicy","javafx.scene.control.Button","javafx.event.ActionEvent","javafx.event.EventHandler","javafx.geometry.Pos","javafx.scene.control.Label","javafx.scene.layout.VBox",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Controls/WebView",},"/ensemble/samples/controls/htmleditor/HTMLEditorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,},false);
-    private static final SampleInfo SAMPLE_64 = 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[]{},true);
-    private static final SampleInfo SAMPLE_65 = 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[]{},true);
-    private static final SampleInfo SAMPLE_66 = 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/Tool Bar",},"/ensemble/samples/controls/accordion/AccordionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_67 = new SampleInfo("TreeTableView","A simple implementation of TreeTableView. The Notes column is editable. ","/Controls/TreeTableView","/ensemble/samples/controls/treetableview","ensemble.samples.controls.treetableview.TreeTableViewApp","/ensemble/samples/controls/treetableview/preview.png",new String[]{"/ensemble/samples/controls/treetableview/Inventory.java","/ensemble/samples/controls/treetableview/Data.java","/ensemble/samples/controls/treetableview/TreeTableViewApp.java",},new String[]{"javafx.scene.control.cell.TextFieldTreeTableCell","javafx.scene.control.cell.TreeItemPropertyValueFactory","javafx.scene.control.TreeItem","javafx.scene.control.TreeTableCell","javafx.scene.control.TreeTableColumn","javafx.scene.control.TreeTableView","javafx.beans.property.SimpleStringProperty","javafx.beans.property.StringProperty","javafx.beans.property.ObjectProperty","javafx.beans.property.SimpleObjectProperty",},new String[]{},new String[]{},"/ensemble/samples/controls/treetableview/TreeTableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_68 = 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[]{},false);
-    private static final SampleInfo SAMPLE_69 = 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[]{},false);
-    private static final SampleInfo SAMPLE_70 = 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[]{},true);
-    private static final SampleInfo SAMPLE_71 = new SampleInfo("TableCellFactory","A simple table that uses cell factories to enable editing of boolean and String values in the table. ","/Controls/TableCellFactory","/ensemble/samples/controls/tablecellfactory","ensemble.samples.controls.tablecellfactory.TableCellFactoryApp","/ensemble/samples/controls/tablecellfactory/preview.png",new String[]{"/ensemble/samples/controls/tablecellfactory/Person.java","/ensemble/samples/controls/tablecellfactory/TableCellFactoryApp.java",},new String[]{"javafx.scene.control.TableCell","javafx.scene.control.TableColumn","javafx.scene.control.TableView","javafx.scene.control.cell.CheckBoxTableCell","javafx.scene.control.cell.PropertyValueFactory","javafx.scene.control.cell.TextFieldTableCell","javafx.util.StringConverter","javafx.collections.FXCollections","javafx.collections.ObservableList","javafx.beans.property.BooleanProperty","javafx.beans.property.SimpleBooleanProperty","javafx.beans.property.SimpleStringProperty","javafx.beans.property.StringProperty",},new String[]{},new String[]{"/Controls/TableView",},"/ensemble/samples/controls/tablecellfactory/TableCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_72 = new SampleInfo("DatePicker","A sample that demonstrates the DatePicker. There is an option to switch locales and see how DatePicker control picks it up. ","/Controls/DatePicker","/ensemble/samples/controls/datepicker","ensemble.samples.controls.datepicker.DatePickerApp","/ensemble/samples/controls/datepicker/preview.png",new String[]{"/ensemble/samples/controls/datepicker/DatePickerApp.java",},new String[]{"javafx.scene.control.DateCell","javafx.scene.control.DatePicker",},new String[]{},new String[]{},"/ensemble/samples/controls/datepicker/DatePickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_73 = new SampleInfo("TableView","A simple table with a header row. ","/Controls/TableView","/ensemble/samples/controls/tableview","ensemble.samples.controls.tableview.TableViewApp","/ensemble/samples/controls/tableview/preview.png",new String[]{"/ensemble/samples/controls/tableview/TableViewApp.java","/ensemble/samples/controls/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[]{"/Controls/TableCellFactory",},"/ensemble/samples/controls/tableview/TableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_5 = new SampleInfo("Service","A sample showing use of a Service to retrieve data in a background thread. Selecting the Refresh button restarts the Service. ","/Language/Concurrency/Service","/ensemble/samples/language/concurrency/service","ensemble.samples.language.concurrency.service.ServiceApp","/ensemble/samples/language/concurrency/service/preview.png",new String[]{"/ensemble/samples/language/concurrency/service/GetDailySalesTask.java","/ensemble/samples/language/concurrency/service/DailySales.java","/ensemble/samples/language/concurrency/service/ServiceApp.java","/ensemble/samples/language/concurrency/service/GetDailySalesService.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/language/concurrency/service/ServiceApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_6 = new SampleInfo("Task","A sample showing use of an an asynchronous Task to populate a table. ","/Language/Concurrency/Task","/ensemble/samples/language/concurrency/task","ensemble.samples.language.concurrency.task.TaskApp","/ensemble/samples/language/concurrency/task/preview.png",new String[]{"/ensemble/samples/language/concurrency/task/GetDailySalesTask.java","/ensemble/samples/language/concurrency/task/DailySales.java","/ensemble/samples/language/concurrency/task/TaskApp.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/language/concurrency/task/TaskApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_7 = new SampleInfo("Stage","A sample with a control that creates a decorated stage that is centered on your desktop. ","/Scenegraph/Stage","/ensemble/samples/scenegraph/stage","ensemble.samples.scenegraph.stage.StageApp","/ensemble/samples/scenegraph/stage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/StageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene",},new String[]{},new String[]{"/Scenegraph/Advanced Stage",},"/ensemble/samples/scenegraph/stage/StageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_8 = 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 Properties","/ensemble/samples/scenegraph/nodeproperties","ensemble.samples.scenegraph.nodeproperties.NodePropertiesApp","/ensemble/samples/scenegraph/nodeproperties/preview.png",new String[]{"/ensemble/samples/scenegraph/nodeproperties/NodePropertiesApp.java",},new String[]{"javafx.scene.Node",},new String[]{},new String[]{"/Scenegraph/Custom Node",},"/ensemble/samples/scenegraph/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[]{},false);
+    private static final SampleInfo SAMPLE_9 = new SampleInfo("Custom Node","A sample that demonstrates how to create a custom node by extending the Parent class. ","/Scenegraph/Custom Node","/ensemble/samples/scenegraph/customnode","ensemble.samples.scenegraph.customnode.CustomNodeApp","/ensemble/samples/scenegraph/customnode/preview.png",new String[]{"/ensemble/samples/scenegraph/customnode/MyNode.java","/ensemble/samples/scenegraph/customnode/CustomNodeApp.java",},new String[]{"javafx.scene.Parent","javafx.scene.Node",},new String[]{},new String[]{"/Scenegraph/Node Properties",},"/ensemble/samples/scenegraph/customnode/CustomNodeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_10 = 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/Advanced Stage","/ensemble/samples/scenegraph/advancedstage","ensemble.samples.scenegraph.advancedstage.AdvancedStageApp","/ensemble/samples/scenegraph/advancedstage/preview.png",new String[]{"/ensemble/samples/scenegraph/advancedstage/AdvancedStageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene","javafx.stage.StageStyle","javafx.application.Platform",},new String[]{},new String[]{"/Scenegraph/Stage",},"/ensemble/samples/scenegraph/advancedstage/AdvancedStageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_11 = 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[]{},false);
+    private static final SampleInfo SAMPLE_12 = 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[]{},true);
+    private static final SampleInfo SAMPLE_13 = 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/scenegraph/events/multitouch/MultiTouchApp.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","javafx.scene.effect.BlurType","javafx.scene.effect.DropShadow","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.layout.Region","javafx.scene.layout.StackPane","javafx.scene.paint.Color","javafx.scene.shape.Rectangle",},new String[]{},new String[]{"/Scenegraph/Events/Gesture Event",},"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_14 = 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[]{},false);
+    private static final SampleInfo SAMPLE_15 = 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[]{},false);
+    private static final SampleInfo SAMPLE_16 = new SampleInfo("Gesture Event","A sample that demonstrates various multi-touch gesture events and their usage. Tap, scroll and pan to move the rectangle. Use pinch close and open zoom gestures to resize it. User rotate touch gesture to rotate it. Swipe events are reported but not wired to any other behavior. All events are logged to the console. You can also observe inertia scrolling. ","/Scenegraph/Events/Gesture Event","/ensemble/samples/scenegraph/events/gestureevent","ensemble.samples.scenegraph.events.gestureevent.GestureEventApp","/ensemble/samples/scenegraph/events/gestureevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",},new String[]{"javafx.scene.input.RotateEvent","javafx.scene.input.ScrollEvent","javafx.scene.input.SwipeEvent","javafx.scene.input.TouchEvent","javafx.scene.input.ZoomEvent","javafx.scene.Cursor","javafx.collections.FXCollections","javafx.collections.ObservableList","javafx.event.EventHandler","javafx.scene.control.ListView","javafx.scene.layout.VBox","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.LinearGradient","javafx.scene.paint.Stop","javafx.scene.shape.Rectangle","javafx.scene.layout.Pane",},new String[]{},new String[]{"/Scenegraph/Events/MouseEvent","/Scenegraph/Events/Multi-Touch",},"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_17 = new SampleInfo("3D Box","A sample that shows a 3D box and uses a perspective camera for rendering the scene. Hint: Switch to Line draw mode to see how cullFace property works. ","/Graphics 3d/3D Box","/ensemble/samples/graphics3d/simple3dbox","ensemble.samples.graphics3d.simple3dbox.Simple3DBoxApp","/ensemble/samples/graphics3d/simple3dbox/preview.png",new String[]{"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",},new String[]{"javafx.scene.shape.Box","javafx.scene.PerspectiveCamera","javafx.scene.paint.PhongMaterial","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.scene.SceneAntialiasing","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",new PlaygroundProperty[]{new PlaygroundProperty("testBox","drawMode"),new PlaygroundProperty("testBox","cullFace"),new PlaygroundProperty("material","diffuseColor"),},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_18 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. It is animated and plays sounds when clicked. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/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/graphics3d/xylophone/XylophoneApp.java","/ensemble/samples/graphics3d/xylophone/Xform.java",},new String[]{"javafx.scene.shape.Box","javafx.scene.paint.PhongMaterial","javafx.scene.media.AudioClip","javafx.scene.PerspectiveCamera","javafx.scene.transform.Rotate","javafx.scene.transform.Scale","javafx.animation.Timeline","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Interpolator","javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.util.Duration","javafx.scene.Group","javafx.scene.SceneAntialiasing","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_19 = new SampleInfo("3D Sphere","A sample that demonstrates features of PhongMaterial applied to a 3D Sphere. Provided is a playground to exercise the following properties of material: diffuse map and color, specular map, color and power, bump map, self illumination map. ","/Graphics 3d/3D Sphere","/ensemble/samples/graphics3d/sphere","ensemble.samples.graphics3d.sphere.Simple3DSphereApp","/ensemble/samples/graphics3d/sphere/preview.png",new String[]{"/ensemble/samples/graphics3d/sphere/Simple3DSphereApp.java","/ensemble/samples/graphics3d/sphere/earth-d.jpg","/ensemble/samples/graphics3d/sphere/earth-s.jpg","/ensemble/samples/graphics3d/sphere/earth-n.jpg","/ensemble/samples/graphics3d/sphere/earth-l.jpg",},new String[]{"javafx.scene.paint.PhongMaterial","javafx.scene.shape.Sphere","javafx.animation.Animation","javafx.animation.Interpolator","javafx.animation.RotateTransition","javafx.beans.binding.Bindings","javafx.beans.property.BooleanProperty","javafx.beans.property.DoubleProperty","javafx.beans.property.SimpleBooleanProperty","javafx.beans.property.SimpleDoubleProperty","javafx.scene.AmbientLight","javafx.scene.Group","javafx.scene.PerspectiveCamera","javafx.scene.PointLight","javafx.scene.SceneAntialiasing","javafx.scene.SubScene","javafx.scene.image.Image","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/sphere/Simple3DSphereApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"-","name","Material"),new PlaygroundProperty("material","diffuseColor"),new PlaygroundProperty(null,"diffuseMap"),new PlaygroundProperty("material","specularColor"),new PlaygroundProperty(null,"specularMap"),new PlaygroundProperty("material","specularPower","min","0","max","64"),new PlaygroundProperty(null,"bumpMap"),new PlaygroundProperty(null,"selfIlluminationMap"),new PlaygroundProperty(null,"-","name","Light"),new PlaygroundProperty("sun","color"),new PlaygroundProperty(null,"sunLight"),new PlaygroundProperty(null,"sunDistance","min","5","max","150"),new PlaygroundProperty(null,"-","name","Sphere"),new PlaygroundProperty("earth","drawMode"),new PlaygroundProperty("earth","cullFace"),},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_20 = new SampleInfo("3D Sphere System","A sample that demonstrates an animated rotation of 3D spheres. ","/Graphics 3d/3D Sphere System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.SphereSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Xsphere.java","/ensemble/samples/graphics3d/cubesystem/Xform.java","/ensemble/samples/graphics3d/cubesystem/Cube.java",},new String[]{"javafx.scene.shape.Sphere","javafx.scene.paint.PhongMaterial","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.scene.paint.Color","javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.SceneAntialiasing","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_21 = new SampleInfo("3D Cubes","A sample that demonstrates an animated rotation of 3D cubes. ","/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.shape.Box","javafx.scene.paint.PhongMaterial","javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.SceneAntialiasing","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_22 = 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/Candle Stick Chart","/ensemble/samples/charts/candlestick","ensemble.samples.charts.candlestick.CandleStickChartApp","/ensemble/samples/charts/candlestick/preview.png",new String[]{"/ensemble/samples/charts/candlestick/Candle.java","/ensemble/samples/charts/candlestick/CandleStickChart.java","/ensemble/samples/charts/candlestick/CandleStickExtraValues.java","/ensemble/samples/charts/candlestick/TooltipContent.java","/ensemble/samples/charts/candlestick/CandleStickChartApp.java","/ensemble/samples/charts/candlestick/CandleStickChartApp.java.orig","/ensemble/samples/charts/candlestick/CandleStickChart.css",},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/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","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[]{},false);
+    private static final SampleInfo SAMPLE_23 = new SampleInfo("Bubble Chart","An advanced bubble chart with a variety of actions and settable properties. ","/Charts/Bubble Chart","/ensemble/samples/charts/bubble","ensemble.samples.charts.bubble.BubbleChartApp","/ensemble/samples/charts/bubble/preview.png",new String[]{"/ensemble/samples/charts/bubble/BubbleChartApp.java","/ensemble/samples/charts/bubble/BubbleChartApp.java.orig",},new String[]{"javafx.scene.chart.BubbleChart","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/bubble/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","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[]{},false);
+    private static final SampleInfo SAMPLE_24 = 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.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java.orig","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.css",},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","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","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","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[]{},false);
+    private static final SampleInfo SAMPLE_25 = 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/AudioAreaChartApp.java","/ensemble/samples/charts/area/audio/AudioAreaChart.css",},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[]{ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_26 = 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.orig","/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","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[]{},true);
+    private static final SampleInfo SAMPLE_27 = 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","/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java.orig",},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","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[]{},false);
+    private static final SampleInfo SAMPLE_28 = 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","/ensemble/samples/charts/scatter/chart/ScatterChartApp.java.orig",},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","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[]{},true);
+    private static final SampleInfo SAMPLE_29 = 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/LiveScatterChartApp.java","/ensemble/samples/charts/scatter/animated/LiveScatterChart.css",},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[]{},false);
+    private static final SampleInfo SAMPLE_30 = 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","/ensemble/samples/charts/line/chart/LineChartApp.java.orig",},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","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[]{},true);
+    private static final SampleInfo SAMPLE_31 = 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[]{},false);
+    private static final SampleInfo SAMPLE_32 = 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","/ensemble/samples/charts/line/category/CategoryLineChartApp.java.orig",},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","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[]{},false);
+    private static final SampleInfo SAMPLE_33 = 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/DrilldownPieChartApp.java","/ensemble/samples/charts/pie/drilldown/DrilldownChart.css",},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[]{},false);
+    private static final SampleInfo SAMPLE_34 = 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[]{},true);
+    private static final SampleInfo SAMPLE_35 = 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","/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java.orig",},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","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[]{},false);
+    private static final SampleInfo SAMPLE_36 = 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,ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_37 = 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.orig","/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","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","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[]{},true);
+    private static final SampleInfo SAMPLE_38 = 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/ImageBarChartApp.java.orig","/ensemble/samples/charts/bar/image/ImageBarChartApp.java","/ensemble/samples/charts/bar/image/van-s.png","/ensemble/samples/charts/bar/image/sedan-s.png","/ensemble/samples/charts/bar/image/ImageBarChart.css","/ensemble/samples/charts/bar/image/truck-s.png","/ensemble/samples/charts/bar/image/suv-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","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","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","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[]{},false);
+    private static final SampleInfo SAMPLE_39 = 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","/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java.orig",},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","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","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[]{},false);
+    private static final SampleInfo SAMPLE_40 = new SampleInfo("TableView","A simple table with a header row. ","/Controls/TableView","/ensemble/samples/controls/tableview","ensemble.samples.controls.tableview.TableViewApp","/ensemble/samples/controls/tableview/preview.png",new String[]{"/ensemble/samples/controls/tableview/TableViewApp.java","/ensemble/samples/controls/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[]{"/Controls/TableCellFactory",},"/ensemble/samples/controls/tableview/TableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_41 = new SampleInfo("TableCellFactory","A simple table that uses cell factories to enable editing of boolean and String values in the table. ","/Controls/TableCellFactory","/ensemble/samples/controls/tablecellfactory","ensemble.samples.controls.tablecellfactory.TableCellFactoryApp","/ensemble/samples/controls/tablecellfactory/preview.png",new String[]{"/ensemble/samples/controls/tablecellfactory/Person.java","/ensemble/samples/controls/tablecellfactory/TableCellFactoryApp.java",},new String[]{"javafx.scene.control.TableCell","javafx.scene.control.TableColumn","javafx.scene.control.TableView","javafx.scene.control.cell.CheckBoxTableCell","javafx.scene.control.cell.PropertyValueFactory","javafx.scene.control.cell.TextFieldTableCell","javafx.util.StringConverter","javafx.collections.FXCollections","javafx.collections.ObservableList","javafx.beans.property.BooleanProperty","javafx.beans.property.SimpleBooleanProperty","javafx.beans.property.SimpleStringProperty","javafx.beans.property.StringProperty",},new String[]{},new String[]{"/Controls/TableView",},"/ensemble/samples/controls/tablecellfactory/TableCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_42 = 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. ","/Controls/HTML Editor","/ensemble/samples/controls/htmleditor","ensemble.samples.controls.htmleditor.HTMLEditorApp","/ensemble/samples/controls/htmleditor/preview.png",new String[]{"/ensemble/samples/controls/htmleditor/HTMLEditorApp.java",},new String[]{"javafx.scene.web.HTMLEditor","javafx.scene.control.ScrollPane","javafx.scene.control.ScrollPane.ScrollBarPolicy","javafx.scene.control.Button","javafx.event.ActionEvent","javafx.event.EventHandler","javafx.geometry.Pos","javafx.scene.control.Label","javafx.scene.layout.VBox",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Controls/WebView",},"/ensemble/samples/controls/htmleditor/HTMLEditorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,},false);
+    private static final SampleInfo SAMPLE_43 = new SampleInfo("TreeTableView","A simple implementation of TreeTableView. The Notes column is editable. ","/Controls/TreeTableView","/ensemble/samples/controls/treetableview","ensemble.samples.controls.treetableview.TreeTableViewApp","/ensemble/samples/controls/treetableview/preview.png",new String[]{"/ensemble/samples/controls/treetableview/TreeTableViewApp.java","/ensemble/samples/controls/treetableview/Data.java","/ensemble/samples/controls/treetableview/Inventory.java",},new String[]{"javafx.scene.control.cell.TextFieldTreeTableCell","javafx.scene.control.cell.TreeItemPropertyValueFactory","javafx.scene.control.TreeItem","javafx.scene.control.TreeTableCell","javafx.scene.control.TreeTableColumn","javafx.scene.control.TreeTableView","javafx.beans.property.SimpleStringProperty","javafx.beans.property.StringProperty","javafx.beans.property.ObjectProperty","javafx.beans.property.SimpleObjectProperty",},new String[]{},new String[]{},"/ensemble/samples/controls/treetableview/TreeTableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_44 = 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[]{},true);
+    private static final SampleInfo SAMPLE_45 = 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[]{},true);
+    private static final SampleInfo SAMPLE_46 = 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[]{},false);
+    private static final SampleInfo SAMPLE_47 = new SampleInfo("Hidden SplitPane","A sample that demonstrates styling a hidden split pane with CSS. ","/Controls/Hidden SplitPane","/ensemble/samples/controls/splitpane","ensemble.samples.controls.splitpane.HiddenSplitPaneApp","/ensemble/samples/controls/splitpane/preview.png",new String[]{"/ensemble/samples/controls/splitpane/HiddenSplitPaneApp.java","/ensemble/samples/controls/splitpane/HiddenSplitPane.css",},new String[]{"javafx.scene.control.SplitPane",},new String[]{},new String[]{},"/ensemble/samples/controls/splitpane/HiddenSplitPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_48 = 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[]{},true);
+    private static final SampleInfo SAMPLE_49 = 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/ChoiceBox","/Controls/Accordion","/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_50 = new SampleInfo("TabPane","Some implementations of tabs using the TabPane class. ","/Controls/TabPane","/ensemble/samples/controls/tab","ensemble.samples.controls.tab.TabPaneApp","/ensemble/samples/controls/tab/preview.png",new String[]{"/ensemble/samples/controls/tab/TabPaneApp.java","/ensemble/samples/controls/tab/tab_16.png",},new String[]{"javafx.scene.control.Tab","javafx.scene.control.TabPane",},new String[]{},new String[]{},"/ensemble/samples/controls/tab/TabPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_51 = 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[]{},true);
+    private static final SampleInfo SAMPLE_52 = new SampleInfo("WebView","A sample that demonstrates a WebView object accessing a web page. ","/Controls/WebView","/ensemble/samples/controls/webview","ensemble.samples.controls.webview.WebViewApp","/ensemble/samples/controls/webview/preview.png",new String[]{"/ensemble/samples/controls/webview/WebViewApp.java",},new String[]{"javafx.scene.web.WebView","javafx.scene.web.WebEngine",},new String[]{},new String[]{"/Controls/HTML Editor",},"/ensemble/samples/controls/webview/WebViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,},false);
+    private static final SampleInfo SAMPLE_53 = new SampleInfo("DatePicker","A sample that demonstrates the DatePicker. There is an option to switch locales and see how DatePicker control picks it up. ","/Controls/DatePicker","/ensemble/samples/controls/datepicker","ensemble.samples.controls.datepicker.DatePickerApp","/ensemble/samples/controls/datepicker/preview.png",new String[]{"/ensemble/samples/controls/datepicker/DatePickerApp.java",},new String[]{"javafx.scene.control.DateCell","javafx.scene.control.DatePicker",},new String[]{},new String[]{},"/ensemble/samples/controls/datepicker/DatePickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_54 = 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[]{},false);
+    private static final SampleInfo SAMPLE_55 = 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[]{},true);
+    private static final SampleInfo SAMPLE_56 = 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[]{},true);
+    private static final SampleInfo SAMPLE_57 = 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/Tool Bar",},"/ensemble/samples/controls/accordion/AccordionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_58 = 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/Radio Button",},"/ensemble/samples/controls/checkbox/CheckBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_59 = 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[]{},true);
+    private static final SampleInfo SAMPLE_60 = 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[]{},true);
+    private static final SampleInfo SAMPLE_61 = new SampleInfo("TextFlow","Demonstrates some simple uses of rich text and TextFlow.The first example shows use of text with different fonts in a TextFlow. Use the Playground to experiment with different Text properties. The second example shows TextFlow and embedded objects. ","/Controls/Text/TextFlow","/ensemble/samples/controls/text/textflow","ensemble.samples.controls.text.textflow.TextFlowApp","/ensemble/samples/controls/text/textflow/preview.png",new String[]{"/ensemble/samples/shared-resources/oracle.png","/ensemble/samples/controls/text/textflow/TextFlowApp.java",},new String[]{"javafx.scene.text.Font","javafx.scene.text.FontPosture","javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textflow/TextFlowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("textHello","strikethrough","name","Hello strikethrough"),new PlaygroundProperty("textHello","underline","name","Hello underline"),new PlaygroundProperty("textHello","fill","name","Hello fill"),new PlaygroundProperty("textHello","rotate","min","-180","max","180","name","Hello rotate"),new PlaygroundProperty("textHello","translateX","name","Hello translateX"),new PlaygroundProperty("textHello","translateY","name","Hello translateY"),new PlaygroundProperty("textBold","strikethrough","name","Bold strikethrough"),new PlaygroundProperty("textBold","underline","name","Bold underline"),new PlaygroundProperty("textBold","fill","name","Bold fill"),new PlaygroundProperty("textBold","rotate","min","-180","max","180","name","Bold rotate"),new PlaygroundProperty("textBold","translateX","name","Bold translateX"),new PlaygroundProperty("textBold","translateY","name","Bold translateY"),new PlaygroundProperty("textWorld","strikethrough","name","World strikethrough"),new PlaygroundProperty("textWorld","underline","name","World underline"),new PlaygroundProperty("textWorld","fill","name","World fill"),new PlaygroundProperty("textWorld","rotate","min","-180","max","180","name","World rotate"),new PlaygroundProperty("textWorld","translateX","name","World translateX"),new PlaygroundProperty("textWorld","translateY","name","World translateY"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_62 = 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/SearchBoxApp.java","/ensemble/samples/controls/text/searchbox/SearchBox.java","/ensemble/samples/controls/text/searchbox/SearchBox.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_63 = new SampleInfo("Text Formatter","Demonstrates a TextField control with a TextFormatter that filters and formats the content. ","/Controls/Text/Text Formatter","/ensemble/samples/controls/text/textformatter","ensemble.samples.controls.text.textformatter.TextFormatterApp","/ensemble/samples/controls/text/textformatter/preview.png",new String[]{"/ensemble/samples/controls/text/textformatter/TextFormatterApp.java",},new String[]{"javafx.scene.control.TextFormatter","javafx.scene.control.TextField","javafx.scene.control.TextInputControl",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textformatter/TextFormatterApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"price","min","0","max","10000"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_64 = new SampleInfo("Bidi","Demonstrates bi-directional text. ","/Controls/Text/Bidi","/ensemble/samples/controls/text/bidi","ensemble.samples.controls.text.bidi.BidiApp","/ensemble/samples/controls/text/bidi/preview.png",new String[]{"/ensemble/samples/controls/text/bidi/BidiApp.java",},new String[]{"javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/controls/text/bidi/BidiApp.java",new PlaygroundProperty[]{new PlaygroundProperty("text1","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text1","underline","name","He said... underline"),new PlaygroundProperty("text1","fill","name","He said... fill"),new PlaygroundProperty("text1","rotate","min","-180","max","180","name","He said... rotate"),new PlaygroundProperty("text1","translateX","name","He said... translateX"),new PlaygroundProperty("text1","translateY","name","He said... translateY"),new PlaygroundProperty("text2","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text2","underline","name","...to me. underline"),new PlaygroundProperty("text2","fill","name","...to me. fill"),new PlaygroundProperty("text2","rotate","min","-180","max","180","name","...to me. rotate"),new PlaygroundProperty("text2","translateX","name","...to me. translateX"),new PlaygroundProperty("text2","translateY","name","...to me. translateY"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_65 = 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[]{},false);
+    private static final SampleInfo SAMPLE_66 = 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/InsetTextApp.java","/ensemble/samples/controls/text/insettext/InsetText.css",},new String[]{"javafx.geometry.Insets",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_67 = 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[]{},true);
+    private static final SampleInfo SAMPLE_68 = 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/ValidatorPane.java","/ensemble/samples/controls/text/textvalidator/ValidationResult.java","/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java","/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java","/ensemble/samples/controls/text/textvalidator/Validator.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[]{},false);
+    private static final SampleInfo SAMPLE_69 = 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[]{},true);
+    private static final SampleInfo SAMPLE_70 = 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[]{},true);
+    private static final SampleInfo SAMPLE_71 = 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[]{},false);
+    private static final SampleInfo SAMPLE_72 = 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[]{},true);
+    private static final SampleInfo SAMPLE_73 = 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/StyledToolBarApp.java","/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBar.css",},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[]{},false);
     private static final SampleInfo SAMPLE_74 = 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[]{},true);
-    private static final SampleInfo SAMPLE_75 = 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/StyledToolBarApp.java","/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBar.css",},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[]{},false);
-    private static final SampleInfo SAMPLE_76 = 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[]{},true);
-    private static final SampleInfo SAMPLE_77 = 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[]{},true);
-    private static final SampleInfo SAMPLE_78 = 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[]{},true);
-    private static final SampleInfo SAMPLE_79 = 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/InsetTextApp.java","/ensemble/samples/controls/text/insettext/InsetText.css",},new String[]{"javafx.geometry.Insets",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_80 = 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[]{},true);
-    private static final SampleInfo SAMPLE_81 = 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/SearchBoxApp.java","/ensemble/samples/controls/text/searchbox/SearchBox.java","/ensemble/samples/controls/text/searchbox/SearchBox.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_82 = 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[]{},false);
-    private static final SampleInfo SAMPLE_83 = new SampleInfo("Bidi","Demonstrates bi-directional text. ","/Controls/Text/Bidi","/ensemble/samples/controls/text/bidi","ensemble.samples.controls.text.bidi.BidiApp","/ensemble/samples/controls/text/bidi/preview.png",new String[]{"/ensemble/samples/controls/text/bidi/BidiApp.java",},new String[]{"javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/controls/text/bidi/BidiApp.java",new PlaygroundProperty[]{new PlaygroundProperty("text1","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text1","underline","name","He said... underline"),new PlaygroundProperty("text1","fill","name","He said... fill"),new PlaygroundProperty("text1","rotate","min","-180","max","180","name","He said... rotate"),new PlaygroundProperty("text1","translateX","name","He said... translateX"),new PlaygroundProperty("text1","translateY","name","He said... translateY"),new PlaygroundProperty("text2","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text2","underline","name","...to me. underline"),new PlaygroundProperty("text2","fill","name","...to me. fill"),new PlaygroundProperty("text2","rotate","min","-180","max","180","name","...to me. rotate"),new PlaygroundProperty("text2","translateX","name","...to me. translateX"),new PlaygroundProperty("text2","translateY","name","...to me. translateY"),},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_84 = new SampleInfo("TextFlow","Demonstrates some simple uses of rich text and TextFlow.The first example shows use of text with different fonts in a TextFlow. Use the Playground to experiment with different Text properties. The second example shows TextFlow and embedded objects. ","/Controls/Text/TextFlow","/ensemble/samples/controls/text/textflow","ensemble.samples.controls.text.textflow.TextFlowApp","/ensemble/samples/controls/text/textflow/preview.png",new String[]{"/ensemble/samples/shared-resources/oracle.png","/ensemble/samples/controls/text/textflow/TextFlowApp.java",},new String[]{"javafx.scene.text.Font","javafx.scene.text.FontPosture","javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textflow/TextFlowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("textHello","strikethrough","name","Hello strikethrough"),new PlaygroundProperty("textHello","underline","name","Hello underline"),new PlaygroundProperty("textHello","fill","name","Hello fill"),new PlaygroundProperty("textHello","rotate","min","-180","max","180","name","Hello rotate"),new PlaygroundProperty("textHello","translateX","name","Hello translateX"),new PlaygroundProperty("textHello","translateY","name","Hello translateY"),new PlaygroundProperty("textBold","strikethrough","name","Bold strikethrough"),new PlaygroundProperty("textBold","underline","name","Bold underline"),new PlaygroundProperty("textBold","fill","name","Bold fill"),new PlaygroundProperty("textBold","rotate","min","-180","max","180","name","Bold rotate"),new PlaygroundProperty("textBold","translateX","name","Bold translateX"),new PlaygroundProperty("textBold","translateY","name","Bold translateY"),new PlaygroundProperty("textWorld","strikethrough","name","World strikethrough"),new PlaygroundProperty("textWorld","underline","name","World underline"),new PlaygroundProperty("textWorld","fill","name","World fill"),new PlaygroundProperty("textWorld","rotate","min","-180","max","180","name","World rotate"),new PlaygroundProperty("textWorld","translateX","name","World translateX"),new PlaygroundProperty("textWorld","translateY","name","World translateY"),},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_85 = 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[]{},true);
-    private static final SampleInfo SAMPLE_86 = 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/Validator.java","/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java","/ensemble/samples/controls/text/textvalidator/ValidationEvent.java","/ensemble/samples/controls/text/textvalidator/ValidatorPane.java","/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java","/ensemble/samples/controls/text/textvalidator/ValidationResult.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[]{},false);
-    private static final SampleInfo SAMPLE_87 = 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[]{},false);
-    private static final SampleInfo SAMPLE_88 = 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[]{},true);
-    private static final SampleInfo SAMPLE_89 = 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[]{},true);
-    private static final SampleInfo SAMPLE_90 = 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/PlanetaryPlayerPane.java","/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.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,ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_91 = 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,ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_92 = 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[]{"/Graphics 3d/Xylophone",},"/ensemble/samples/media/audioclip/AudioClipApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_93 = 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,ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_94 = 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/StreamingMediaPlayerApp.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css",},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,ConditionalFeature.MEDIA,},false);
-    private static final SampleInfo SAMPLE_95 = 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 2d/Images/Image Creation",},"/ensemble/samples/layout/borderpane/BorderPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_96 = 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[]{},true);
-    private static final SampleInfo SAMPLE_97 = 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[]{},true);
-    private static final SampleInfo SAMPLE_98 = 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 2d/Images/Image Creation",},"/ensemble/samples/layout/flowpane/FlowPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_99 = 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[]{},true);
-    private static final SampleInfo SAMPLE_100 = 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 2d/Images/Image Creation",},"/ensemble/samples/layout/tilepane/TilePaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_101 = 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[]{},true);
-    private static final SampleInfo SAMPLE_102 = 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[]{},true);
-    private static final SampleInfo SAMPLE_103 = 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 2d/Bouncing Balls","/ensemble/samples/graphics2d/bouncingballs","ensemble.samples.graphics2d.bouncingballs.BouncingBallsApp","/ensemble/samples/graphics2d/bouncingballs/preview.png",new String[]{"/ensemble/samples/graphics2d/bouncingballs/Ball.java","/ensemble/samples/graphics2d/bouncingballs/BallsScreen.java","/ensemble/samples/graphics2d/bouncingballs/Constants.java","/ensemble/samples/graphics2d/bouncingballs/BouncingBallsApp.java","/ensemble/samples/graphics2d/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/graphics2d/bouncingballs/BouncingBallsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_104 = new SampleInfo("Puzzle Pieces","A sample in which an image is broken into pieces to create a jigsaw puzzle. ","/Graphics 2d/Puzzle Pieces","/ensemble/samples/graphics2d/puzzle","ensemble.samples.graphics2d.puzzle.PuzzlePiecesApp","/ensemble/samples/graphics2d/puzzle/preview.png",new String[]{"/ensemble/samples/shared-resources/PuzzlePieces-picture.jpg","/ensemble/samples/graphics2d/puzzle/PuzzlePiecesApp.java","/ensemble/samples/graphics2d/puzzle/Desk.java","/ensemble/samples/graphics2d/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/graphics2d/puzzle/PuzzlePiecesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_105 = new SampleInfo("Stopwatch","An animated stopwatch. Click the green button to start the stopwatch and click the red button to stop it. ","/Graphics 2d/Stopwatch","/ensemble/samples/graphics2d/stopwatch","ensemble.samples.graphics2d.stopwatch.StopWatchApp","/ensemble/samples/graphics2d/stopwatch/preview.png",new String[]{"/ensemble/samples/graphics2d/stopwatch/DigitalClock.java","/ensemble/samples/graphics2d/stopwatch/Dial.java","/ensemble/samples/graphics2d/stopwatch/StopWatchApp.java","/ensemble/samples/graphics2d/stopwatch/StopWatchButton.java","/ensemble/samples/shared-resources/stopwatch.png","/ensemble/samples/graphics2d/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/graphics2d/stopwatch/StopWatchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_106 = new SampleInfo("Display Shelf","A display shelf of images using the PerspectiveTransform effect. ","/Graphics 2d/Display Shelf","/ensemble/samples/graphics2d/displayshelf","ensemble.samples.graphics2d.displayshelf.DisplayShelfApp","/ensemble/samples/graphics2d/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/graphics2d/displayshelf/DisplayShelfApp.java","/ensemble/samples/graphics2d/displayshelf/PerspectiveImage.java","/ensemble/samples/graphics2d/displayshelf/DisplayShelf.java","/ensemble/samples/graphics2d/displayshelf/DisplayShelf.css",},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/graphics2d/displayshelf/DisplayShelfApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_107 = new SampleInfo("Digital Clock","A digital clock application that demonstrates JavaFX animation, images, and effects. ","/Graphics 2d/Digital Clock","/ensemble/samples/graphics2d/digitalclock","ensemble.samples.graphics2d.digitalclock.DigitalClockApp","/ensemble/samples/graphics2d/digitalclock/preview.png",new String[]{"/ensemble/samples/graphics2d/digitalclock/Digit.java","/ensemble/samples/graphics2d/digitalclock/Clock.java","/ensemble/samples/shared-resources/DigitalClock-background.png","/ensemble/samples/graphics2d/digitalclock/DigitalClockApp.java",},new String[]{"javafx.scene.effect.Glow","javafx.scene.shape.Polygon","javafx.scene.transform.Shear",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/digitalclock/DigitalClockApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_108 = 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 2d/Colorful Circles","/ensemble/samples/graphics2d/colorfulcircles","ensemble.samples.graphics2d.colorfulcircles.ColorfulCirclesApp","/ensemble/samples/graphics2d/colorfulcircles/preview.png",new String[]{"/ensemble/samples/graphics2d/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/graphics2d/colorfulcircles/ColorfulCirclesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_109 = new SampleInfo("Brick Breaker","The main purpose of the game is to break all the bricks and not drop the ball. ","/Graphics 2d/Brick Breaker","/ensemble/samples/graphics2d/brickbreaker","ensemble.samples.graphics2d.brickbreaker.BrickBreakerApp","/ensemble/samples/graphics2d/brickbreaker/preview.png",new String[]{"/ensemble/samples/graphics2d/brickbreaker/Bat.java","/ensemble/samples/graphics2d/brickbreaker/Ball.java","/ensemble/samples/graphics2d/brickbreaker/Bonus.java","/ensemble/samples/graphics2d/brickbreaker/Brick.java","/ensemble/samples/shared-resources/brickImages/background.png","/ensemble/samples/shared-resources/brickImages/bat/left.png","/ensemble/samples/shared-resources/brickImages/bat/center.png","/ensemble/samples/shared-resources/brickImages/bat/right.png","/ensemble/samples/shared-resources/brickImages/ball/ball0.png","/ensemble/samples/shared-resources/brickImages/ball/ball1.png","/ensemble/samples/shared-resources/brickImages/ball/ball2.png","/ensemble/samples/shared-resources/brickImages/ball/ball3.png","/ensemble/samples/shared-resources/brickImages/ball/ball4.png","/ensemble/samples/shared-resources/brickImages/ball/ball5.png","/ensemble/samples/shared-resources/brickImages/logo.png","/ensemble/samples/shared-resources/brickImages/splash/brick.png","/ensemble/samples/shared-resources/brickImages/splash/brickshadow.png","/ensemble/samples/shared-resources/brickImages/splash/breaker.png","/ensemble/samples/shared-resources/brickImages/splash/breakershadow.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykey.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykeyshadow.png","/ensemble/samples/shared-resources/brickImages/splash/strike.png","/ensemble/samples/shared-resources/brickImages/splash/strikeshadow.png","/ensemble/samples/shared-resources/brickImages/splash/sun.png","/ensemble/samples/shared-resources/brickImages/ready.png","/ensemble/samples/shared-resources/brickImages/gameover.png","/ensemble/samples/shared-resources/brickImages/brick/blue.png","/ensemble/samples/shared-resources/brickImages/brick/broken1.png","/ensemble/samples/shared-resources/brickImages/brick/broken2.png","/ensemble/samples/shared-resources/brickImages/brick/brown.png","/ensemble/samples/shared-resources/brickImages/brick/cyan.png","/ensemble/samples/shared-resources/brickImages/brick/green.png","/ensemble/samples/shared-resources/brickImages/brick/grey.png","/ensemble/samples/shared-resources/brickImages/brick/magenta.png","/ensemble/samples/shared-resources/brickImages/brick/orange.png","/ensemble/samples/shared-resources/brickImages/brick/red.png","/ensemble/samples/shared-resources/brickImages/brick/violet.png","/ensemble/samples/shared-resources/brickImages/brick/white.png","/ensemble/samples/shared-resources/brickImages/brick/yellow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballslow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballfast.png","/ensemble/samples/shared-resources/brickImages/bonus/catch.png","/ensemble/samples/shared-resources/brickImages/bonus/batgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/batreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/ballgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/strike.png","/ensemble/samples/shared-resources/brickImages/bonus/extralife.png","/ensemble/samples/graphics2d/brickbreaker/Config.java","/ensemble/samples/graphics2d/brickbreaker/LevelData.java","/ensemble/samples/shared-resources/brickImages/vline.png","/ensemble/samples/graphics2d/brickbreaker/Level.java","/ensemble/samples/graphics2d/brickbreaker/Splash.java","/ensemble/samples/graphics2d/brickbreaker/BrickBreakerApp.java","/ensemble/samples/graphics2d/brickbreaker/Utils.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.util.Duration","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.application.Application","javafx.application.Platform","javafx.collections.ObservableList","javafx.geometry.Rectangle2D","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/brickbreaker/BrickBreakerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_110 = new SampleInfo("Speed Gauge","A sample that demonstrates a simple gauge. ","/Graphics 2d/Speed Gauge","/ensemble/samples/graphics2d/gauge","ensemble.samples.graphics2d.gauge.SpeedGaugeApp","/ensemble/samples/graphics2d/gauge/preview.png",new String[]{"/ensemble/samples/shared-resources/gaugeBackground.png","/ensemble/samples/shared-resources/needle.png","/ensemble/samples/graphics2d/gauge/SpeedGaugeApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/gauge/SpeedGaugeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_111 = new SampleInfo("Canvas Fireworks","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Graphics 2d/Canvas Fireworks","/ensemble/samples/graphics2d/canvas","ensemble.samples.graphics2d.canvas.FireworksApp","/ensemble/samples/graphics2d/canvas/preview.png",new String[]{"/ensemble/samples/shared-resources/sf.jpg","/ensemble/samples/graphics2d/canvas/SanFranciscoFireworks.java","/ensemble/samples/graphics2d/canvas/Particle.java","/ensemble/samples/graphics2d/canvas/FireworksApp.java",},new String[]{"javafx.scene.canvas.Canvas","javafx.animation.AnimationTimer","javafx.scene.paint.RadialGradient","javafx.scene.effect.BlendMode","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.Reflection","javafx.scene.image.ImageView","javafx.scene.layout.Pane","javafx.scene.paint.Color","javafx.scene.paint.Paint","javafx.scene.paint.CycleMethod","javafx.scene.paint.Stop",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/canvas/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_112 = new SampleInfo("Calculator","A calculator that performs simple math exercises. ","/Graphics 2d/Calculator","/ensemble/samples/graphics2d/calc","ensemble.samples.graphics2d.calc.CalculatorApp","/ensemble/samples/graphics2d/calc/preview.png",new String[]{"/ensemble/samples/graphics2d/calc/Calculator.java","/ensemble/samples/graphics2d/calc/Util.java","/ensemble/samples/graphics2d/calc/CalculatorApp.java","/ensemble/samples/graphics2d/calc/Key.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/graphics2d/calc/CalculatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_113 = 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 2d/Paints/Radial Gradient","/ensemble/samples/graphics2d/paints/radialgradient","ensemble.samples.graphics2d.paints.radialgradient.RadialGradientApp","/ensemble/samples/graphics2d/paints/radialgradient/preview.png",new String[]{"/ensemble/samples/graphics2d/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 2d/Paints/Color","/Graphics 2d/Paints/Linear Gradient",},"/ensemble/samples/graphics2d/paints/radialgradient/RadialGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_114 = 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 2d/Paints/Linear Gradient","/ensemble/samples/graphics2d/paints/lineargradient","ensemble.samples.graphics2d.paints.lineargradient.LinearGradientApp","/ensemble/samples/graphics2d/paints/lineargradient/preview.png",new String[]{"/ensemble/samples/graphics2d/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 2d/Paints/Color","/Graphics 2d/Paints/Radial Gradient",},"/ensemble/samples/graphics2d/paints/lineargradient/LinearGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_75 = 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[]{},true);
+    private static final SampleInfo SAMPLE_76 = 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/MoneyFormatCell.java","/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.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[]{},true);
+    private static final SampleInfo SAMPLE_77 = 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[]{},true);
+    private static final SampleInfo SAMPLE_78 = 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,ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_79 = 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/PlanetaryPlayerPane.java","/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.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,ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_80 = 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/StreamingMediaPlayerApp.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css",},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,ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_81 = 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,ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_82 = 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[]{"/Graphics 3d/Xylophone",},"/ensemble/samples/media/audioclip/AudioClipApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,ConditionalFeature.MEDIA,},false);
+    private static final SampleInfo SAMPLE_83 = 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 2d/Images/Image Creation",},"/ensemble/samples/layout/borderpane/BorderPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_84 = 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[]{},true);
+    private static final SampleInfo SAMPLE_85 = 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[]{},true);
+    private static final SampleInfo SAMPLE_86 = 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[]{},true);
+    private static final SampleInfo SAMPLE_87 = 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 2d/Images/Image Creation",},"/ensemble/samples/layout/flowpane/FlowPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_88 = 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 2d/Images/Image Creation",},"/ensemble/samples/layout/tilepane/TilePaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_89 = 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[]{},true);
+    private static final SampleInfo SAMPLE_90 = 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[]{},true);
+    private static final SampleInfo SAMPLE_91 = 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[]{},true);
+    private static final SampleInfo SAMPLE_92 = 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 Events","/ensemble/samples/animation/timelineevents","ensemble.samples.animation.timelineevents.TimelineEventsApp","/ensemble/samples/animation/timelineevents/preview.png",new String[]{"/ensemble/samples/animation/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[]{"/Animation/Timeline",},"/ensemble/samples/animation/timelineevents/TimelineEventsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_93 = new SampleInfo("Timeline","A sample that demonstrates the basics of timeline creation. ","/Animation/Timeline","/ensemble/samples/animation/timeline","ensemble.samples.animation.timeline.TimelineApp","/ensemble/samples/animation/timeline/preview.png",new String[]{"/ensemble/samples/animation/timeline/TimelineApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{"/Animation/Timeline Events",},"/ensemble/samples/animation/timeline/TimelineApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_94 = 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.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[]{},false);
+    private static final SampleInfo SAMPLE_95 = 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.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[]{},true);
+    private static final SampleInfo SAMPLE_96 = 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.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/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_97 = 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.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[]{},true);
+    private static final SampleInfo SAMPLE_98 = 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.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[]{},true);
+    private static final SampleInfo SAMPLE_99 = 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.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[]{},true);
+    private static final SampleInfo SAMPLE_100 = 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.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[]{},true);
+    private static final SampleInfo SAMPLE_101 = 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[]{},true);
+    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.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[]{},true);
+    private static final SampleInfo SAMPLE_103 = 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.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[]{},true);
+    private static final SampleInfo SAMPLE_104 = new SampleInfo("Display Shelf","A display shelf of images using the PerspectiveTransform effect. ","/Graphics 2d/Display Shelf","/ensemble/samples/graphics2d/displayshelf","ensemble.samples.graphics2d.displayshelf.DisplayShelfApp","/ensemble/samples/graphics2d/displayshelf/preview.png",new String[]{"/ensemble/samples/graphics2d/displayshelf/PerspectiveImage.java","/ensemble/samples/graphics2d/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/graphics2d/displayshelf/DisplayShelfApp.java","/ensemble/samples/graphics2d/displayshelf/DisplayShelf.css",},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/graphics2d/displayshelf/DisplayShelfApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_105 = new SampleInfo("Digital Clock","A digital clock application that demonstrates JavaFX animation, images, and effects. ","/Graphics 2d/Digital Clock","/ensemble/samples/graphics2d/digitalclock","ensemble.samples.graphics2d.digitalclock.DigitalClockApp","/ensemble/samples/graphics2d/digitalclock/preview.png",new String[]{"/ensemble/samples/shared-resources/DigitalClock-background.png","/ensemble/samples/graphics2d/digitalclock/DigitalClockApp.java","/ensemble/samples/graphics2d/digitalclock/Digit.java","/ensemble/samples/graphics2d/digitalclock/Clock.java",},new String[]{"javafx.scene.effect.Glow","javafx.scene.shape.Polygon","javafx.scene.transform.Shear",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/digitalclock/DigitalClockApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_106 = new SampleInfo("Puzzle Pieces","A sample in which an image is broken into pieces to create a jigsaw puzzle. ","/Graphics 2d/Puzzle Pieces","/ensemble/samples/graphics2d/puzzle","ensemble.samples.graphics2d.puzzle.PuzzlePiecesApp","/ensemble/samples/graphics2d/puzzle/preview.png",new String[]{"/ensemble/samples/shared-resources/PuzzlePieces-picture.jpg","/ensemble/samples/graphics2d/puzzle/PuzzlePiecesApp.java","/ensemble/samples/graphics2d/puzzle/Desk.java","/ensemble/samples/graphics2d/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/graphics2d/puzzle/PuzzlePiecesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_107 = new SampleInfo("Stopwatch","An animated stopwatch. Click the green button to start the stopwatch and click the red button to stop it. ","/Graphics 2d/Stopwatch","/ensemble/samples/graphics2d/stopwatch","ensemble.samples.graphics2d.stopwatch.StopWatchApp","/ensemble/samples/graphics2d/stopwatch/preview.png",new String[]{"/ensemble/samples/graphics2d/stopwatch/Dial.java","/ensemble/samples/shared-resources/stopwatch.png","/ensemble/samples/graphics2d/stopwatch/Watch.java","/ensemble/samples/graphics2d/stopwatch/StopWatchButton.java","/ensemble/samples/graphics2d/stopwatch/DigitalClock.java","/ensemble/samples/graphics2d/stopwatch/StopWatchApp.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/graphics2d/stopwatch/StopWatchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_108 = new SampleInfo("Brick Breaker","The main purpose of the game is to break all the bricks and not drop the ball. ","/Graphics 2d/Brick Breaker","/ensemble/samples/graphics2d/brickbreaker","ensemble.samples.graphics2d.brickbreaker.BrickBreakerApp","/ensemble/samples/graphics2d/brickbreaker/preview.png",new String[]{"/ensemble/samples/graphics2d/brickbreaker/Bat.java","/ensemble/samples/graphics2d/brickbreaker/Ball.java","/ensemble/samples/graphics2d/brickbreaker/Splash.java","/ensemble/samples/graphics2d/brickbreaker/LevelData.java","/ensemble/samples/graphics2d/brickbreaker/Brick.java","/ensemble/samples/shared-resources/brickImages/vline.png","/ensemble/samples/graphics2d/brickbreaker/Level.java","/ensemble/samples/graphics2d/brickbreaker/Utils.java","/ensemble/samples/shared-resources/brickImages/background.png","/ensemble/samples/shared-resources/brickImages/bat/left.png","/ensemble/samples/shared-resources/brickImages/bat/center.png","/ensemble/samples/shared-resources/brickImages/bat/right.png","/ensemble/samples/shared-resources/brickImages/ball/ball0.png","/ensemble/samples/shared-resources/brickImages/ball/ball1.png","/ensemble/samples/shared-resources/brickImages/ball/ball2.png","/ensemble/samples/shared-resources/brickImages/ball/ball3.png","/ensemble/samples/shared-resources/brickImages/ball/ball4.png","/ensemble/samples/shared-resources/brickImages/ball/ball5.png","/ensemble/samples/shared-resources/brickImages/logo.png","/ensemble/samples/shared-resources/brickImages/splash/brick.png","/ensemble/samples/shared-resources/brickImages/splash/brickshadow.png","/ensemble/samples/shared-resources/brickImages/splash/breaker.png","/ensemble/samples/shared-resources/brickImages/splash/breakershadow.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykey.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykeyshadow.png","/ensemble/samples/shared-resources/brickImages/splash/strike.png","/ensemble/samples/shared-resources/brickImages/splash/strikeshadow.png","/ensemble/samples/shared-resources/brickImages/splash/sun.png","/ensemble/samples/shared-resources/brickImages/ready.png","/ensemble/samples/shared-resources/brickImages/gameover.png","/ensemble/samples/shared-resources/brickImages/brick/blue.png","/ensemble/samples/shared-resources/brickImages/brick/broken1.png","/ensemble/samples/shared-resources/brickImages/brick/broken2.png","/ensemble/samples/shared-resources/brickImages/brick/brown.png","/ensemble/samples/shared-resources/brickImages/brick/cyan.png","/ensemble/samples/shared-resources/brickImages/brick/green.png","/ensemble/samples/shared-resources/brickImages/brick/grey.png","/ensemble/samples/shared-resources/brickImages/brick/magenta.png","/ensemble/samples/shared-resources/brickImages/brick/orange.png","/ensemble/samples/shared-resources/brickImages/brick/red.png","/ensemble/samples/shared-resources/brickImages/brick/violet.png","/ensemble/samples/shared-resources/brickImages/brick/white.png","/ensemble/samples/shared-resources/brickImages/brick/yellow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballslow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballfast.png","/ensemble/samples/shared-resources/brickImages/bonus/catch.png","/ensemble/samples/shared-resources/brickImages/bonus/batgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/batreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/ballgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/strike.png","/ensemble/samples/shared-resources/brickImages/bonus/extralife.png","/ensemble/samples/graphics2d/brickbreaker/Config.java","/ensemble/samples/graphics2d/brickbreaker/BrickBreakerApp.java","/ensemble/samples/graphics2d/brickbreaker/Bonus.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.util.Duration","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.application.Application","javafx.application.Platform","javafx.collections.ObservableList","javafx.geometry.Rectangle2D","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/brickbreaker/BrickBreakerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_109 = 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 2d/Bouncing Balls","/ensemble/samples/graphics2d/bouncingballs","ensemble.samples.graphics2d.bouncingballs.BouncingBallsApp","/ensemble/samples/graphics2d/bouncingballs/preview.png",new String[]{"/ensemble/samples/graphics2d/bouncingballs/Ball.java","/ensemble/samples/graphics2d/bouncingballs/BallsPane.java.orig","/ensemble/samples/graphics2d/bouncingballs/BouncingBallsApp.java.orig","/ensemble/samples/graphics2d/bouncingballs/BallsPane.java","/ensemble/samples/graphics2d/bouncingballs/Constants.java","/ensemble/samples/graphics2d/bouncingballs/Constants.java.orig","/ensemble/samples/graphics2d/bouncingballs/BallsScreen.java","/ensemble/samples/graphics2d/bouncingballs/BouncingBallsApp.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/graphics2d/bouncingballs/BouncingBallsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_110 = new SampleInfo("Canvas Fireworks","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Graphics 2d/Canvas Fireworks","/ensemble/samples/graphics2d/canvas","ensemble.samples.graphics2d.canvas.FireworksApp","/ensemble/samples/graphics2d/canvas/preview.png",new String[]{"/ensemble/samples/graphics2d/canvas/Particle.java","/ensemble/samples/shared-resources/sf.jpg","/ensemble/samples/graphics2d/canvas/SanFranciscoFireworks.java","/ensemble/samples/graphics2d/canvas/FireworksApp.java",},new String[]{"javafx.scene.canvas.Canvas","javafx.animation.AnimationTimer","javafx.scene.paint.RadialGradient","javafx.scene.effect.BlendMode","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.Reflection","javafx.scene.image.ImageView","javafx.scene.layout.Pane","javafx.scene.paint.Color","javafx.scene.paint.Paint","javafx.scene.paint.CycleMethod","javafx.scene.paint.Stop",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/canvas/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_111 = new SampleInfo("Speed Gauge","A sample that demonstrates a simple gauge. ","/Graphics 2d/Speed Gauge","/ensemble/samples/graphics2d/gauge","ensemble.samples.graphics2d.gauge.SpeedGaugeApp","/ensemble/samples/graphics2d/gauge/preview.png",new String[]{"/ensemble/samples/shared-resources/gaugeBackground.png","/ensemble/samples/shared-resources/needle.png","/ensemble/samples/graphics2d/gauge/SpeedGaugeApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/gauge/SpeedGaugeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_112 = new SampleInfo("Calculator","A calculator that performs simple math exercises. ","/Graphics 2d/Calculator","/ensemble/samples/graphics2d/calc","ensemble.samples.graphics2d.calc.CalculatorApp","/ensemble/samples/graphics2d/calc/preview.png",new String[]{"/ensemble/samples/graphics2d/calc/CalculatorApp.java","/ensemble/samples/graphics2d/calc/Calculator.java","/ensemble/samples/graphics2d/calc/Key.java","/ensemble/samples/graphics2d/calc/Util.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/graphics2d/calc/CalculatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_113 = 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 2d/Colorful Circles","/ensemble/samples/graphics2d/colorfulcircles","ensemble.samples.graphics2d.colorfulcircles.ColorfulCirclesApp","/ensemble/samples/graphics2d/colorfulcircles/preview.png",new String[]{"/ensemble/samples/graphics2d/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/graphics2d/colorfulcircles/ColorfulCirclesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_114 = 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 2d/Paints/Radial Gradient","/ensemble/samples/graphics2d/paints/radialgradient","ensemble.samples.graphics2d.paints.radialgradient.RadialGradientApp","/ensemble/samples/graphics2d/paints/radialgradient/preview.png",new String[]{"/ensemble/samples/graphics2d/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 2d/Paints/Color","/Graphics 2d/Paints/Linear Gradient",},"/ensemble/samples/graphics2d/paints/radialgradient/RadialGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
     private static final SampleInfo SAMPLE_115 = new SampleInfo("Color","Rectangles filled with colors. ","/Graphics 2d/Paints/Color","/ensemble/samples/graphics2d/paints/color","ensemble.samples.graphics2d.paints.color.ColorApp","/ensemble/samples/graphics2d/paints/color/preview.png",new String[]{"/ensemble/samples/graphics2d/paints/color/ColorApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color","javafx.scene.paint.Paint",},new String[]{},new String[]{"/Graphics 2d/Paints/Radial Gradient","/Graphics 2d/Paints/Linear Gradient",},"/ensemble/samples/graphics2d/paints/color/ColorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_116 = new SampleInfo("Sepia Tone","A sample that demonstrates varying degrees of a sepia tone effect. ","/Graphics 2d/Effects/Sepia Tone","/ensemble/samples/graphics2d/effects/sepiatone","ensemble.samples.graphics2d.effects.sepiatone.SepiaToneApp","/ensemble/samples/graphics2d/effects/sepiatone/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics2d/effects/sepiatone/SepiaToneApp.java",},new String[]{"javafx.scene.effect.SepiaTone","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/effects/sepiatone/SepiaToneApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sepiaTone","level","min","0","max","1","name","SepiaTone Level"),},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_117 = new SampleInfo("Reflection","A sample that demonstrates how a reflection effect is affected by various settings. ","/Graphics 2d/Effects/Reflection","/ensemble/samples/graphics2d/effects/reflection","ensemble.samples.graphics2d.effects.reflection.ReflectionApp","/ensemble/samples/graphics2d/effects/reflection/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics2d/effects/reflection/ReflectionApp.java",},new String[]{"javafx.scene.effect.Reflection","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_118 = new SampleInfo("Drop Shadow","A sample that demonstrates how a drop shadow effect is affected by various settings. ","/Graphics 2d/Effects/Drop Shadow","/ensemble/samples/graphics2d/effects/dropshadow","ensemble.samples.graphics2d.effects.dropshadow.DropShadowApp","/ensemble/samples/graphics2d/effects/dropshadow/preview.png",new String[]{"/ensemble/samples/graphics2d/effects/dropshadow/DropShadowApp.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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","spread","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_119 = new SampleInfo("Inner Shadow","A sample that demonstrates how an inner shadow effect is affected by various settings. ","/Graphics 2d/Effects/Inner Shadow","/ensemble/samples/graphics2d/effects/innershadow","ensemble.samples.graphics2d.effects.innershadow.InnerShadowApp","/ensemble/samples/graphics2d/effects/innershadow/preview.png",new String[]{"/ensemble/samples/graphics2d/effects/innershadow/InnerShadowApp.java",},new String[]{"javafx.scene.effect.InnerShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_120 = new SampleInfo("Gaussian Blur","A sample that demonstrates a Gaussian blur effect on an image, with varying degrees of blurriness. ","/Graphics 2d/Effects/Gaussian Blur","/ensemble/samples/graphics2d/effects/gaussianblur","ensemble.samples.graphics2d.effects.gaussianblur.GaussianBlurApp","/ensemble/samples/graphics2d/effects/gaussianblur/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics2d/effects/gaussianblur/GaussianBlurApp.java",},new String[]{"javafx.scene.effect.GaussianBlur","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/effects/gaussianblur/GaussianBlurApp.java",new PlaygroundProperty[]{new PlaygroundProperty("gaussianBlur","radius","min","0","max","15","name","Gaussian Blur Level"),},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_121 = new SampleInfo("Image Creation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics 2d/Images/Image Creation","/ensemble/samples/graphics2d/images/imagecreation","ensemble.samples.graphics2d.images.imagecreation.ImageCreationApp","/ensemble/samples/graphics2d/images/imagecreation/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics2d/images/imagecreation/ImageCreationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/images/imagecreation/ImageCreationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_122 = new SampleInfo("Image Properties","A sample that demonstrates how to resize images and use the Viewport property. ","/Graphics 2d/Images/Image Properties","/ensemble/samples/graphics2d/images/imageproperties","ensemble.samples.graphics2d.images.imageproperties.ImagePropertiesApp","/ensemble/samples/graphics2d/images/imageproperties/preview.png",new String[]{"/ensemble/samples/shared-resources/sanfran.jpg","/ensemble/samples/graphics2d/images/imageproperties/ImagePropertiesApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{"/Graphics 2d/Images/Image Creation",},"/ensemble/samples/graphics2d/images/imageproperties/ImagePropertiesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_123 = new SampleInfo("Image Operation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics 2d/Images/Image Operation","/ensemble/samples/graphics2d/images/imageoperator","ensemble.samples.graphics2d.images.imageoperator.ImageOperationApp","/ensemble/samples/graphics2d/images/imageoperator/preview.png",new String[]{"/ensemble/samples/graphics2d/images/imageoperator/ImageOperationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},false);
-    private static final SampleInfo SAMPLE_124 = new SampleInfo("Ellipse","A sample that demonstrates how various settings affect two elliptical shapes. ","/Graphics 2d/Shapes/Ellipse","/ensemble/samples/graphics2d/shapes/ellipse","ensemble.samples.graphics2d.shapes.ellipse.EllipseApp","/ensemble/samples/graphics2d/shapes/ellipse/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/ellipse/EllipseApp.java",},new String[]{"javafx.scene.shape.Ellipse","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics 2d/Shapes/Circle","/Graphics 2d/Shapes/Arc",},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_125 = new SampleInfo("Arc","A sample that demonstrates how various settings affect a line shape. ","/Graphics 2d/Shapes/Arc","/ensemble/samples/graphics2d/shapes/arc","ensemble.samples.graphics2d.shapes.arc.ArcApp","/ensemble/samples/graphics2d/shapes/arc/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/arc/ArcApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics 2d/Shapes/Circle","/Graphics 2d/Shapes/Ellipse",},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_126 = new SampleInfo("Path","A sample that demonstrates two path shapes. ","/Graphics 2d/Shapes/Path","/ensemble/samples/graphics2d/shapes/path","ensemble.samples.graphics2d.shapes.path.PathApp","/ensemble/samples/graphics2d/shapes/path/preview.png",new String[]{"/ensemble/samples/graphics2d/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/graphics2d/shapes/path/PathApp.java",new PlaygroundProperty[]{new PlaygroundProperty("path1","stroke","name","Path 1 Stroke"),new PlaygroundProperty("path2","stroke","name","Path 2 Stroke"),},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_127 = new SampleInfo("Polygon","A sample that demonstrates polygon construction. ","/Graphics 2d/Shapes/Polygon","/ensemble/samples/graphics2d/shapes/polygon","ensemble.samples.graphics2d.shapes.polygon.PolygonApp","/ensemble/samples/graphics2d/shapes/polygon/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/polygon/PolygonApp.java",},new String[]{"javafx.scene.shape.Polygon","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/shapes/polygon/PolygonApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polygon1","fill","name","Polygon 1 Fill"),new PlaygroundProperty("polygon2","stroke","name","Polygon 2 Stroke"),},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_128 = new SampleInfo("Cubic Curve","A sample showing how various settings change a cubic Bézier parametric curve. ","/Graphics 2d/Shapes/Cubic Curve","/ensemble/samples/graphics2d/shapes/cubiccurve","ensemble.samples.graphics2d.shapes.cubiccurve.CubicCurveApp","/ensemble/samples/graphics2d/shapes/cubiccurve/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/cubiccurve/CubicCurveApp.java",},new String[]{"javafx.scene.shape.CubicCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_129 = new SampleInfo("Line","A sample that demonstrates how various settings affect a line shape. ","/Graphics 2d/Shapes/Line","/ensemble/samples/graphics2d/shapes/line","ensemble.samples.graphics2d.shapes.line.LineApp","/ensemble/samples/graphics2d/shapes/line/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/line/LineApp.java",},new String[]{"javafx.scene.shape.Line","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_130 = new SampleInfo("Polyline","A sample that demonstrates polyline construction with stroke and fill. ","/Graphics 2d/Shapes/Polyline","/ensemble/samples/graphics2d/shapes/polyline","ensemble.samples.graphics2d.shapes.polyline.PolylineApp","/ensemble/samples/graphics2d/shapes/polyline/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/polyline/PolylineApp.java",},new String[]{"javafx.scene.shape.Polyline","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_131 = new SampleInfo("Circle","A sample showing two circles with controls to change fill, stroke, and radius. ","/Graphics 2d/Shapes/Circle","/ensemble/samples/graphics2d/shapes/circle","ensemble.samples.graphics2d.shapes.circle.CircleApp","/ensemble/samples/graphics2d/shapes/circle/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/circle/CircleApp.java",},new String[]{"javafx.scene.shape.Circle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics 2d/Shapes/Arc","/Graphics 2d/Shapes/Ellipse",},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_132 = new SampleInfo("Rectangle","A sample showing how various settings effect two rectangles. ","/Graphics 2d/Shapes/Rectangle","/ensemble/samples/graphics2d/shapes/rectangle","ensemble.samples.graphics2d.shapes.rectangle.RectangleApp","/ensemble/samples/graphics2d/shapes/rectangle/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/rectangle/RectangleApp.java",},new String[]{"javafx.scene.shape.Rectangle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    private static final SampleInfo SAMPLE_133 = new SampleInfo("Quad Curve","An example of how various settings affect a quadratic Bézier parametric curve. ","/Graphics 2d/Shapes/Quad Curve","/ensemble/samples/graphics2d/shapes/quadcurve","ensemble.samples.graphics2d.shapes.quadcurve.QuadCurveApp","/ensemble/samples/graphics2d/shapes/quadcurve/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/quadcurve/QuadCurveApp.java",},new String[]{"javafx.scene.shape.QuadCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
-    public static final SampleCategory ROOT = new SampleCategory("ROOT",null,null,new SampleCategory[]{new SampleCategory("Language",new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_3,SAMPLE_4,},new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_5,SAMPLE_6,SAMPLE_3,SAMPLE_4,},new SampleCategory[]{new SampleCategory("Concurrency",new SampleInfo[]{SAMPLE_5,SAMPLE_6,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,},new SampleInfo[]{SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,},null),new SampleCategory("Animation",new SampleInfo[]{SAMPLE_12,SAMPLE_13,SAMPLE_14,},new SampleInfo[]{SAMPLE_12,SAMPLE_15,SAMPLE_16,SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,SAMPLE_13,SAMPLE_14,},new SampleCategory[]{new SampleCategory("Transitions",new SampleInfo[]{SAMPLE_15,SAMPLE_16,SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,},null,null),}),new SampleCategory("Charts",new SampleInfo[]{SAMPLE_25,SAMPLE_26,},new SampleInfo[]{SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,SAMPLE_32,SAMPLE_33,SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_25,SAMPLE_26,},new SampleCategory[]{new SampleCategory("Bar",new SampleInfo[]{SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,},null,null),new SampleCategory("Scatter",new SampleInfo[]{SAMPLE_32,SAMPLE_33,},null,null),new SampleCategory("Area",new SampleInfo[]{SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,},null,null),new SampleCategory("Pie",new SampleInfo[]{SAMPLE_38,SAMPLE_39,},null,null),new SampleCategory("Line",new SampleInfo[]{SAMPLE_40,SAMPLE_41,SAMPLE_42,},null,null),}),new SampleCategory("Scenegraph",new SampleInfo[]{SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,},new SampleInfo[]{SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_47,SAMPLE_48,SAMPLE_49,SAMPLE_50,SAMPLE_51,SAMPLE_52,SAMPLE_46,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_47,SAMPLE_48,SAMPLE_49,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,SAMPLE_66,SAMPLE_67,SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,},new SampleInfo[]{SAMPLE_74,SAMPLE_75,SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_53,SAMPLE_54,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_63,SAMPLE_64,SAMPLE_65,SAMPLE_66,SAMPLE_67,SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,},new SampleCategory[]{new SampleCategory("Toolbar",new SampleInfo[]{SAMPLE_74,SAMPLE_75,},null,null),new SampleCategory("Listview",new SampleInfo[]{SAMPLE_76,SAMPLE_77,SAMPLE_78,},null,null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,},null,null),new SampleCategory("Button",new SampleInfo[]{SAMPLE_87,SAMPLE_88,SAMPLE_89,},null,null),}),new SampleCategory("Media",new SampleInfo[]{SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,},new SampleInfo[]{SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,},null),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_95,SAMPLE_96,SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,},new SampleInfo[]{SAMPLE_95,SAMPLE_96,SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,},null),new SampleCategory("Graphics 2d",new SampleInfo[]{SAMPLE_103,SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,},new SampleInfo[]{SAMPLE_103,SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_116,SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_124,SAMPLE_125,SAMPLE_126,SAMPLE_127,SAMPLE_128,SAMPLE_129,SAMPLE_130,SAMPLE_131,SAMPLE_132,SAMPLE_133,},new SampleCategory[]{new SampleCategory("Paints",new SampleInfo[]{SAMPLE_113,SAMPLE_114,SAMPLE_115,},null,null),new SampleCategory("Effects",new SampleInfo[]{SAMPLE_116,SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_120,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_121,SAMPLE_122,SAMPLE_123,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_124,SAMPLE_125,SAMPLE_126,SAMPLE_127,SAMPLE_128,SAMPLE_129,SAMPLE_130,SAMPLE_131,SAMPLE_132,SAMPLE_133,},null,null),}),});
-    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_34,SAMPLE_26,SAMPLE_84,SAMPLE_92,};
-    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(204);
+    private static final SampleInfo SAMPLE_116 = 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 2d/Paints/Linear Gradient","/ensemble/samples/graphics2d/paints/lineargradient","ensemble.samples.graphics2d.paints.lineargradient.LinearGradientApp","/ensemble/samples/graphics2d/paints/lineargradient/preview.png",new String[]{"/ensemble/samples/graphics2d/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 2d/Paints/Color","/Graphics 2d/Paints/Radial Gradient",},"/ensemble/samples/graphics2d/paints/lineargradient/LinearGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_117 = new SampleInfo("Image Creation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics 2d/Images/Image Creation","/ensemble/samples/graphics2d/images/imagecreation","ensemble.samples.graphics2d.images.imagecreation.ImageCreationApp","/ensemble/samples/graphics2d/images/imagecreation/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics2d/images/imagecreation/ImageCreationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/images/imagecreation/ImageCreationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_118 = new SampleInfo("Image Properties","A sample that demonstrates how to resize images and use the Viewport property. ","/Graphics 2d/Images/Image Properties","/ensemble/samples/graphics2d/images/imageproperties","ensemble.samples.graphics2d.images.imageproperties.ImagePropertiesApp","/ensemble/samples/graphics2d/images/imageproperties/preview.png",new String[]{"/ensemble/samples/shared-resources/sanfran.jpg","/ensemble/samples/graphics2d/images/imageproperties/ImagePropertiesApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{"/Graphics 2d/Images/Image Creation",},"/ensemble/samples/graphics2d/images/imageproperties/ImagePropertiesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_119 = new SampleInfo("Image Operation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics 2d/Images/Image Operation","/ensemble/samples/graphics2d/images/imageoperator","ensemble.samples.graphics2d.images.imageoperator.ImageOperationApp","/ensemble/samples/graphics2d/images/imageoperator/preview.png",new String[]{"/ensemble/samples/graphics2d/images/imageoperator/ImageOperationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},false);
+    private static final SampleInfo SAMPLE_120 = new SampleInfo("Ellipse","A sample that demonstrates how various settings affect two elliptical shapes. ","/Graphics 2d/Shapes/Ellipse","/ensemble/samples/graphics2d/shapes/ellipse","ensemble.samples.graphics2d.shapes.ellipse.EllipseApp","/ensemble/samples/graphics2d/shapes/ellipse/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/ellipse/EllipseApp.java",},new String[]{"javafx.scene.shape.Ellipse","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics 2d/Shapes/Circle","/Graphics 2d/Shapes/Arc",},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_121 = new SampleInfo("Polyline","A sample that demonstrates polyline construction with stroke and fill. ","/Graphics 2d/Shapes/Polyline","/ensemble/samples/graphics2d/shapes/polyline","ensemble.samples.graphics2d.shapes.polyline.PolylineApp","/ensemble/samples/graphics2d/shapes/polyline/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/polyline/PolylineApp.java",},new String[]{"javafx.scene.shape.Polyline","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_122 = new SampleInfo("Quad Curve","An example of how various settings affect a quadratic Bézier parametric curve. ","/Graphics 2d/Shapes/Quad Curve","/ensemble/samples/graphics2d/shapes/quadcurve","ensemble.samples.graphics2d.shapes.quadcurve.QuadCurveApp","/ensemble/samples/graphics2d/shapes/quadcurve/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/quadcurve/QuadCurveApp.java",},new String[]{"javafx.scene.shape.QuadCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_123 = new SampleInfo("Cubic Curve","A sample showing how various settings change a cubic Bézier parametric curve. ","/Graphics 2d/Shapes/Cubic Curve","/ensemble/samples/graphics2d/shapes/cubiccurve","ensemble.samples.graphics2d.shapes.cubiccurve.CubicCurveApp","/ensemble/samples/graphics2d/shapes/cubiccurve/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/cubiccurve/CubicCurveApp.java",},new String[]{"javafx.scene.shape.CubicCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_124 = new SampleInfo("Polygon","A sample that demonstrates polygon construction. ","/Graphics 2d/Shapes/Polygon","/ensemble/samples/graphics2d/shapes/polygon","ensemble.samples.graphics2d.shapes.polygon.PolygonApp","/ensemble/samples/graphics2d/shapes/polygon/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/polygon/PolygonApp.java",},new String[]{"javafx.scene.shape.Polygon","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/shapes/polygon/PolygonApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polygon1","fill","name","Polygon 1 Fill"),new PlaygroundProperty("polygon2","stroke","name","Polygon 2 Stroke"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_125 = new SampleInfo("Line","A sample that demonstrates how various settings affect a line shape. ","/Graphics 2d/Shapes/Line","/ensemble/samples/graphics2d/shapes/line","ensemble.samples.graphics2d.shapes.line.LineApp","/ensemble/samples/graphics2d/shapes/line/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/line/LineApp.java",},new String[]{"javafx.scene.shape.Line","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_126 = new SampleInfo("Rectangle","A sample showing how various settings effect two rectangles. ","/Graphics 2d/Shapes/Rectangle","/ensemble/samples/graphics2d/shapes/rectangle","ensemble.samples.graphics2d.shapes.rectangle.RectangleApp","/ensemble/samples/graphics2d/shapes/rectangle/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/rectangle/RectangleApp.java",},new String[]{"javafx.scene.shape.Rectangle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_127 = new SampleInfo("Arc","A sample that demonstrates how various settings affect a line shape. ","/Graphics 2d/Shapes/Arc","/ensemble/samples/graphics2d/shapes/arc","ensemble.samples.graphics2d.shapes.arc.ArcApp","/ensemble/samples/graphics2d/shapes/arc/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/arc/ArcApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics 2d/Shapes/Circle","/Graphics 2d/Shapes/Ellipse",},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_128 = new SampleInfo("Path","A sample that demonstrates two path shapes. ","/Graphics 2d/Shapes/Path","/ensemble/samples/graphics2d/shapes/path","ensemble.samples.graphics2d.shapes.path.PathApp","/ensemble/samples/graphics2d/shapes/path/preview.png",new String[]{"/ensemble/samples/graphics2d/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/graphics2d/shapes/path/PathApp.java",new PlaygroundProperty[]{new PlaygroundProperty("path1","stroke","name","Path 1 Stroke"),new PlaygroundProperty("path2","stroke","name","Path 2 Stroke"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_129 = new SampleInfo("Circle","A sample showing two circles with controls to change fill, stroke, and radius. ","/Graphics 2d/Shapes/Circle","/ensemble/samples/graphics2d/shapes/circle","ensemble.samples.graphics2d.shapes.circle.CircleApp","/ensemble/samples/graphics2d/shapes/circle/preview.png",new String[]{"/ensemble/samples/graphics2d/shapes/circle/CircleApp.java",},new String[]{"javafx.scene.shape.Circle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics 2d/Shapes/Arc","/Graphics 2d/Shapes/Ellipse",},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_130 = new SampleInfo("Inner Shadow","A sample that demonstrates how an inner shadow effect is affected by various settings. ","/Graphics 2d/Effects/Inner Shadow","/ensemble/samples/graphics2d/effects/innershadow","ensemble.samples.graphics2d.effects.innershadow.InnerShadowApp","/ensemble/samples/graphics2d/effects/innershadow/preview.png",new String[]{"/ensemble/samples/graphics2d/effects/innershadow/InnerShadowApp.java",},new String[]{"javafx.scene.effect.InnerShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_131 = new SampleInfo("Reflection","A sample that demonstrates how a reflection effect is affected by various settings. ","/Graphics 2d/Effects/Reflection","/ensemble/samples/graphics2d/effects/reflection","ensemble.samples.graphics2d.effects.reflection.ReflectionApp","/ensemble/samples/graphics2d/effects/reflection/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics2d/effects/reflection/ReflectionApp.java",},new String[]{"javafx.scene.effect.Reflection","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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[]{},true);
+    private static final SampleInfo SAMPLE_132 = new SampleInfo("Gaussian Blur","A sample that demonstrates a Gaussian blur effect on an image, with varying degrees of blurriness. ","/Graphics 2d/Effects/Gaussian Blur","/ensemble/samples/graphics2d/effects/gaussianblur","ensemble.samples.graphics2d.effects.gaussianblur.GaussianBlurApp","/ensemble/samples/graphics2d/effects/gaussianblur/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics2d/effects/gaussianblur/GaussianBlurApp.java",},new String[]{"javafx.scene.effect.GaussianBlur","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/effects/gaussianblur/GaussianBlurApp.java",new PlaygroundProperty[]{new PlaygroundProperty("gaussianBlur","radius","min","0","max","15","name","Gaussian Blur Level"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_133 = new SampleInfo("Sepia Tone","A sample that demonstrates varying degrees of a sepia tone effect. ","/Graphics 2d/Effects/Sepia Tone","/ensemble/samples/graphics2d/effects/sepiatone","ensemble.samples.graphics2d.effects.sepiatone.SepiaToneApp","/ensemble/samples/graphics2d/effects/sepiatone/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics2d/effects/sepiatone/SepiaToneApp.java",},new String[]{"javafx.scene.effect.SepiaTone","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/effects/sepiatone/SepiaToneApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sepiaTone","level","min","0","max","1","name","SepiaTone Level"),},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_134 = new SampleInfo("Drop Shadow","A sample that demonstrates how a drop shadow effect is affected by various settings. ","/Graphics 2d/Effects/Drop Shadow","/ensemble/samples/graphics2d/effects/dropshadow","ensemble.samples.graphics2d.effects.dropshadow.DropShadowApp","/ensemble/samples/graphics2d/effects/dropshadow/preview.png",new String[]{"/ensemble/samples/graphics2d/effects/dropshadow/DropShadowApp.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics2d/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","spread","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{},false);
+    public static final SampleCategory ROOT = new SampleCategory("ROOT",null,null,new SampleCategory[]{new SampleCategory("Language",new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_3,SAMPLE_4,},new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_5,SAMPLE_6,SAMPLE_3,SAMPLE_4,},new SampleCategory[]{new SampleCategory("Concurrency",new SampleInfo[]{SAMPLE_5,SAMPLE_6,},null,null),}),new SampleCategory("Scenegraph",new SampleInfo[]{SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,},new SampleInfo[]{SAMPLE_7,SAMPLE_8,SAMPLE_11,SAMPLE_12,SAMPLE_13,SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_9,SAMPLE_10,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_11,SAMPLE_12,SAMPLE_13,SAMPLE_14,SAMPLE_15,SAMPLE_16,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,},new SampleInfo[]{SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,},null),new SampleCategory("Charts",new SampleInfo[]{SAMPLE_22,SAMPLE_23,},new SampleInfo[]{SAMPLE_24,SAMPLE_25,SAMPLE_26,SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_22,SAMPLE_30,SAMPLE_31,SAMPLE_32,SAMPLE_33,SAMPLE_34,SAMPLE_23,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,},new SampleCategory[]{new SampleCategory("Area",new SampleInfo[]{SAMPLE_24,SAMPLE_25,SAMPLE_26,SAMPLE_27,},null,null),new SampleCategory("Scatter",new SampleInfo[]{SAMPLE_28,SAMPLE_29,},null,null),new SampleCategory("Line",new SampleInfo[]{SAMPLE_30,SAMPLE_31,SAMPLE_32,},null,null),new SampleCategory("Pie",new SampleInfo[]{SAMPLE_33,SAMPLE_34,},null,null),new SampleCategory("Bar",new SampleInfo[]{SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,},null,null),}),new SampleCategory("Controls",new SampleInfo[]{SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,SAMPLE_47,SAMPLE_48,SAMPLE_49,SAMPLE_50,SAMPLE_51,SAMPLE_52,SAMPLE_53,SAMPLE_54,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,},new SampleInfo[]{SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_61,SAMPLE_62,SAMPLE_63,SAMPLE_64,SAMPLE_65,SAMPLE_66,SAMPLE_67,SAMPLE_68,SAMPLE_69,SAMPLE_44,SAMPLE_45,SAMPLE_46,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_47,SAMPLE_48,SAMPLE_49,SAMPLE_50,SAMPLE_51,SAMPLE_73,SAMPLE_74,SAMPLE_75,SAMPLE_76,SAMPLE_77,SAMPLE_52,SAMPLE_53,SAMPLE_54,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,},new SampleCategory[]{new SampleCategory("Text",new SampleInfo[]{SAMPLE_61,SAMPLE_62,SAMPLE_63,SAMPLE_64,SAMPLE_65,SAMPLE_66,SAMPLE_67,SAMPLE_68,SAMPLE_69,},null,null),new SampleCategory("Button",new SampleInfo[]{SAMPLE_70,SAMPLE_71,SAMPLE_72,},null,null),new SampleCategory("Toolbar",new SampleInfo[]{SAMPLE_73,SAMPLE_74,},null,null),new SampleCategory("Listview",new SampleInfo[]{SAMPLE_75,SAMPLE_76,SAMPLE_77,},null,null),}),new SampleCategory("Media",new SampleInfo[]{SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,},new SampleInfo[]{SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,},null),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,},new SampleInfo[]{SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,},null),new SampleCategory("Animation",new SampleInfo[]{SAMPLE_91,SAMPLE_92,SAMPLE_93,},new SampleInfo[]{SAMPLE_91,SAMPLE_92,SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,SAMPLE_103,SAMPLE_93,},new SampleCategory[]{new SampleCategory("Transitions",new SampleInfo[]{SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,SAMPLE_102,SAMPLE_103,},null,null),}),new SampleCategory("Graphics 2d",new SampleInfo[]{SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_113,},new SampleInfo[]{SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,SAMPLE_114,SAMPLE_115,SAMPLE_116,SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_113,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_124,SAMPLE_125,SAMPLE_126,SAMPLE_127,SAMPLE_128,SAMPLE_129,SAMPLE_130,SAMPLE_131,SAMPLE_132,SAMPLE_133,SAMPLE_134,},new SampleCategory[]{new SampleCategory("Paints",new SampleInfo[]{SAMPLE_114,SAMPLE_115,SAMPLE_116,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_117,SAMPLE_118,SAMPLE_119,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_124,SAMPLE_125,SAMPLE_126,SAMPLE_127,SAMPLE_128,SAMPLE_129,},null,null),new SampleCategory("Effects",new SampleInfo[]{SAMPLE_130,SAMPLE_131,SAMPLE_132,SAMPLE_133,SAMPLE_134,},null,null),}),});
+    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_27,SAMPLE_22,SAMPLE_61,SAMPLE_82,};
+    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(206);
     static {
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_16,SAMPLE_15,SAMPLE_24,SAMPLE_23,SAMPLE_22,SAMPLE_21,SAMPLE_20,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_129,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_1,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_107,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.FontPosture",new SampleInfo[]{SAMPLE_84,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_103,SAMPLE_98,SAMPLE_102,SAMPLE_97,SAMPLE_96,SAMPLE_95,SAMPLE_94,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_109,SAMPLE_125,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_2,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_105,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.FontPosture",new SampleInfo[]{SAMPLE_61,});
         DOCS_URL_TO_SAMPLE.put("java.util.Map",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_78,SAMPLE_77,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Rectangle2D",new SampleInfo[]{SAMPLE_109,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.PropertyValueFactory",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Translate",new SampleInfo[]{SAMPLE_7,SAMPLE_8,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_105,SAMPLE_48,SAMPLE_112,SAMPLE_103,SAMPLE_51,SAMPLE_132,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_108,SAMPLE_9,SAMPLE_105,SAMPLE_112,SAMPLE_11,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DateCell",new SampleInfo[]{SAMPLE_72,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.BooleanProperty",new SampleInfo[]{SAMPLE_71,SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_25,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_9,SAMPLE_49,SAMPLE_14,SAMPLE_11,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.TouchEvent",new SampleInfo[]{SAMPLE_48,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollPane.ScrollBarPolicy",new SampleInfo[]{SAMPLE_63,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_24,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.CheckBoxTableCell",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_71,SAMPLE_109,SAMPLE_48,SAMPLE_1,SAMPLE_99,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.StringProperty",new SampleInfo[]{SAMPLE_71,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.SubScene",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_104,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTreeTableCell",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeItem",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_71,SAMPLE_5,SAMPLE_48,SAMPLE_6,SAMPLE_1,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.Bindings",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableView",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_60,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_105,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_17,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_109,SAMPLE_105,SAMPLE_104,SAMPLE_123,SAMPLE_111,SAMPLE_122,SAMPLE_51,SAMPLE_110,SAMPLE_121,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_77,SAMPLE_76,SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Rectangle2D",new SampleInfo[]{SAMPLE_108,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.PropertyValueFactory",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Translate",new SampleInfo[]{SAMPLE_19,SAMPLE_17,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_109,SAMPLE_16,SAMPLE_126,SAMPLE_107,SAMPLE_13,SAMPLE_112,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_109,SAMPLE_19,SAMPLE_18,SAMPLE_107,SAMPLE_112,SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DateCell",new SampleInfo[]{SAMPLE_53,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.BooleanProperty",new SampleInfo[]{SAMPLE_19,SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_23,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_109,SAMPLE_19,SAMPLE_91,SAMPLE_18,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.TouchEvent",new SampleInfo[]{SAMPLE_16,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollPane.ScrollBarPolicy",new SampleInfo[]{SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.CheckBoxTableCell",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_94,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_108,SAMPLE_16,SAMPLE_2,SAMPLE_41,SAMPLE_84,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.StringProperty",new SampleInfo[]{SAMPLE_43,SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.SubScene",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_106,SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTreeTableCell",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeItem",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_16,SAMPLE_5,SAMPLE_6,SAMPLE_2,SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.Bindings",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableView",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_44,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_108,SAMPLE_119,SAMPLE_107,SAMPLE_118,SAMPLE_106,SAMPLE_117,SAMPLE_13,SAMPLE_111,SAMPLE_110,});
         DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_4,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_109,SAMPLE_105,SAMPLE_104,SAMPLE_123,SAMPLE_122,SAMPLE_11,SAMPLE_51,SAMPLE_110,SAMPLE_121,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_9,SAMPLE_39,SAMPLE_48,SAMPLE_47,SAMPLE_13,SAMPLE_112,SAMPLE_103,SAMPLE_52,SAMPLE_63,SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_107,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_48,SAMPLE_97,SAMPLE_63,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_108,SAMPLE_119,SAMPLE_19,SAMPLE_107,SAMPLE_118,SAMPLE_106,SAMPLE_117,SAMPLE_13,SAMPLE_111,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_109,SAMPLE_92,SAMPLE_18,SAMPLE_16,SAMPLE_13,SAMPLE_112,SAMPLE_12,SAMPLE_11,SAMPLE_33,SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextInputControl",new SampleInfo[]{SAMPLE_63,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_105,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_16,SAMPLE_42,SAMPLE_85,});
         DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_4,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_48,SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_104,SAMPLE_48,SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_16,SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_16,SAMPLE_106,SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_54,});
         DOCS_URL_TO_SAMPLE.put("javafx.fxml.JavaFXBuilderFactory",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_105,SAMPLE_124,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_105,SAMPLE_112,SAMPLE_84,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,SAMPLE_2,SAMPLE_31,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_37,SAMPLE_2,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_22,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_20,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_23,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_87,SAMPLE_62,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_115,SAMPLE_111,SAMPLE_114,SAMPLE_113,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Scale",new SampleInfo[]{SAMPLE_9,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_29,SAMPLE_28,SAMPLE_27,SAMPLE_26,SAMPLE_37,SAMPLE_25,SAMPLE_36,SAMPLE_35,SAMPLE_34,SAMPLE_33,SAMPLE_2,SAMPLE_32,SAMPLE_31,SAMPLE_42,SAMPLE_30,SAMPLE_41,SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_119,SAMPLE_116,SAMPLE_118,SAMPLE_117,SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.SceneAntialiasing",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_133,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_112,SAMPLE_44,SAMPLE_103,SAMPLE_2,SAMPLE_43,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_56,SAMPLE_2,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_48,SAMPLE_78,SAMPLE_77,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_27,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_92,SAMPLE_9,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleStringProperty",new SampleInfo[]{SAMPLE_71,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_105,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.DoubleProperty",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTableCell",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_127,SAMPLE_107,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.SwipeEvent",new SampleInfo[]{SAMPLE_48,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_107,SAMPLE_120,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_107,SAMPLE_112,SAMPLE_61,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_38,SAMPLE_37,SAMPLE_36,SAMPLE_3,SAMPLE_35,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_25,SAMPLE_36,SAMPLE_3,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_99,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_96,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_71,SAMPLE_49,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_116,SAMPLE_115,SAMPLE_114,SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Scale",new SampleInfo[]{SAMPLE_18,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_29,SAMPLE_28,SAMPLE_39,SAMPLE_27,SAMPLE_38,SAMPLE_26,SAMPLE_37,SAMPLE_25,SAMPLE_36,SAMPLE_3,SAMPLE_24,SAMPLE_35,SAMPLE_23,SAMPLE_22,SAMPLE_32,SAMPLE_31,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_134,SAMPLE_133,SAMPLE_130,SAMPLE_132,SAMPLE_131,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.SceneAntialiasing",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_122,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_109,SAMPLE_7,SAMPLE_3,SAMPLE_112,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_3,SAMPLE_52,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_16,SAMPLE_77,SAMPLE_76,SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_39,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_82,SAMPLE_18,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleStringProperty",new SampleInfo[]{SAMPLE_43,SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.DoubleProperty",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTableCell",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_105,SAMPLE_124,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.SwipeEvent",new SampleInfo[]{SAMPLE_16,});
         DOCS_URL_TO_SAMPLE.put("java.util.logging.Level",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_71,SAMPLE_5,SAMPLE_6,SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_79,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_109,SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_14,SAMPLE_13,SAMPLE_12,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_93,SAMPLE_91,SAMPLE_90,SAMPLE_37,SAMPLE_31,SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_5,SAMPLE_6,SAMPLE_64,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_52,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_82,SAMPLE_80,SAMPLE_3,SAMPLE_63,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Sphere",new SampleInfo[]{SAMPLE_7,SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ScrollEvent",new SampleInfo[]{SAMPLE_48,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Box",new SampleInfo[]{SAMPLE_9,SAMPLE_8,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableColumn",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TreeItemPropertyValueFactory",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleBooleanProperty",new SampleInfo[]{SAMPLE_71,SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_112,SAMPLE_44,SAMPLE_103,SAMPLE_2,SAMPLE_43,SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_43,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_105,SAMPLE_8,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.PointLight",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_101,SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_34,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_109,SAMPLE_112,SAMPLE_103,SAMPLE_2,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_59,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollPane",new SampleInfo[]{SAMPLE_63,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableCell",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DatePicker",new SampleInfo[]{SAMPLE_72,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_108,SAMPLE_105,SAMPLE_103,SAMPLE_131,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_105,SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_116,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_54,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_109,SAMPLE_108,SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_14,SAMPLE_13,SAMPLE_12,SAMPLE_33,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_49,SAMPLE_106,SAMPLE_112,SAMPLE_52,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_109,SAMPLE_43,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_39,SAMPLE_38,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_106,SAMPLE_117,SAMPLE_111,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.AnimationTimer",new SampleInfo[]{SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Region",new SampleInfo[]{SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.PhongMaterial",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_98,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_100,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_37,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_58,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleDoubleProperty",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_95,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_53,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.AmbientLight",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_128,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_18,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextFlow",new SampleInfo[]{SAMPLE_84,SAMPLE_83,});
-        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.PerspectiveCamera",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_5,SAMPLE_6,SAMPLE_41,SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_109,SAMPLE_66,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_93,SAMPLE_109,SAMPLE_92,SAMPLE_108,SAMPLE_91,SAMPLE_18,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_81,SAMPLE_80,SAMPLE_25,SAMPLE_36,SAMPLE_79,SAMPLE_78,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_46,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_5,SAMPLE_48,SAMPLE_6,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_12,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_67,SAMPLE_1,SAMPLE_65,SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_54,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Sphere",new SampleInfo[]{SAMPLE_19,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ScrollEvent",new SampleInfo[]{SAMPLE_16,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Box",new SampleInfo[]{SAMPLE_18,SAMPLE_17,SAMPLE_21,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableColumn",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TreeItemPropertyValueFactory",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleBooleanProperty",new SampleInfo[]{SAMPLE_19,SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_109,SAMPLE_7,SAMPLE_3,SAMPLE_112,SAMPLE_10,SAMPLE_0,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_107,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.PointLight",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_90,SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextFormatter",new SampleInfo[]{SAMPLE_63,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_109,SAMPLE_108,SAMPLE_3,SAMPLE_112,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollPane",new SampleInfo[]{SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_50,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableCell",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DatePicker",new SampleInfo[]{SAMPLE_53,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_107,SAMPLE_132,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_109,SAMPLE_107,SAMPLE_129,SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_133,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_93,SAMPLE_109,SAMPLE_92,SAMPLE_108,SAMPLE_91,SAMPLE_18,SAMPLE_29,SAMPLE_21,SAMPLE_113,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_104,SAMPLE_14,SAMPLE_112,SAMPLE_12,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_108,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_34,SAMPLE_33,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_109,SAMPLE_104,SAMPLE_110,SAMPLE_131,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.AnimationTimer",new SampleInfo[]{SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Region",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.PhongMaterial",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_87,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_88,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_25,SAMPLE_36,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_60,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleDoubleProperty",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_83,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_55,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.AmbientLight",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_123,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextFlow",new SampleInfo[]{SAMPLE_64,SAMPLE_61,});
+        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.PerspectiveCamera",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_103,});
         DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXMLLoader",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_111,SAMPLE_103,SAMPLE_113,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_105,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlurType",new SampleInfo[]{SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_7,SAMPLE_127,SAMPLE_8,SAMPLE_115,SAMPLE_126,SAMPLE_129,SAMPLE_128,SAMPLE_48,SAMPLE_112,SAMPLE_111,SAMPLE_133,SAMPLE_11,SAMPLE_103,SAMPLE_114,SAMPLE_125,SAMPLE_10,SAMPLE_113,SAMPLE_124,SAMPLE_130,SAMPLE_51,SAMPLE_132,SAMPLE_131,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_119,});
-        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_28,SAMPLE_26,SAMPLE_37,SAMPLE_36,SAMPLE_35,SAMPLE_34,SAMPLE_32,SAMPLE_42,SAMPLE_41,SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_75,SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_46,SAMPLE_45,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.util.StringConverter",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_48,SAMPLE_47,SAMPLE_50,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_59,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleObjectProperty",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_16,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_127,SAMPLE_115,SAMPLE_126,SAMPLE_129,SAMPLE_128,SAMPLE_133,SAMPLE_114,SAMPLE_125,SAMPLE_113,SAMPLE_124,SAMPLE_130,SAMPLE_132,SAMPLE_131,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_104,SAMPLE_89,SAMPLE_88,SAMPLE_103,SAMPLE_63,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_3,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Pos",new SampleInfo[]{SAMPLE_63,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_109,SAMPLE_114,SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlurType",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_89,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_109,SAMPLE_116,SAMPLE_127,SAMPLE_115,SAMPLE_126,SAMPLE_129,SAMPLE_128,SAMPLE_19,SAMPLE_17,SAMPLE_16,SAMPLE_13,SAMPLE_112,SAMPLE_123,SAMPLE_122,SAMPLE_114,SAMPLE_125,SAMPLE_21,SAMPLE_124,SAMPLE_20,SAMPLE_110,SAMPLE_121,SAMPLE_120,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_130,});
+        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_28,SAMPLE_27,SAMPLE_26,SAMPLE_37,SAMPLE_25,SAMPLE_24,SAMPLE_22,SAMPLE_32,SAMPLE_31,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_74,SAMPLE_73,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_109,SAMPLE_9,SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_58,});
+        DOCS_URL_TO_SAMPLE.put("javafx.util.StringConverter",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_54,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_16,SAMPLE_15,SAMPLE_11,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.SimpleObjectProperty",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_50,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_29,SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_116,SAMPLE_127,SAMPLE_115,SAMPLE_126,SAMPLE_129,SAMPLE_128,SAMPLE_123,SAMPLE_122,SAMPLE_114,SAMPLE_125,SAMPLE_124,SAMPLE_121,SAMPLE_120,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_109,SAMPLE_70,SAMPLE_106,SAMPLE_42,SAMPLE_72,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_1,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Pos",new SampleInfo[]{SAMPLE_42,});
         DOCS_URL_TO_SAMPLE.put("javafx.fxml.Initializable",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_48,SAMPLE_112,SAMPLE_111,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_108,SAMPLE_48,SAMPLE_112,SAMPLE_114,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_26,SAMPLE_37,SAMPLE_2,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_112,SAMPLE_45,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_108,SAMPLE_111,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_109,SAMPLE_16,SAMPLE_112,SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_116,SAMPLE_16,SAMPLE_112,SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_25,SAMPLE_36,SAMPLE_3,SAMPLE_22,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_109,SAMPLE_9,SAMPLE_112,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_113,SAMPLE_110,});
         DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_5,SAMPLE_6,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_71,SAMPLE_5,SAMPLE_6,SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_81,SAMPLE_3,SAMPLE_86,SAMPLE_85,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_48,SAMPLE_112,SAMPLE_111,SAMPLE_103,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_5,SAMPLE_6,SAMPLE_41,SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_86,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_1,SAMPLE_63,SAMPLE_62,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_109,SAMPLE_16,SAMPLE_112,SAMPLE_110,});
         DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_5,});
         DOCS_URL_TO_SAMPLE.put("java.util.logging.Logger",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_55,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_56,});
         DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXML",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_105,SAMPLE_112,SAMPLE_103,SAMPLE_84,SAMPLE_83,});
-        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_109,SAMPLE_9,SAMPLE_7,SAMPLE_105,SAMPLE_8,SAMPLE_14,SAMPLE_13,SAMPLE_12,SAMPLE_11,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_99,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_37,SAMPLE_36,SAMPLE_35,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_93,SAMPLE_91,SAMPLE_90,SAMPLE_37,SAMPLE_31,SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_105,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_61,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_106,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_9,SAMPLE_39,SAMPLE_104,SAMPLE_47,SAMPLE_106,SAMPLE_112,SAMPLE_103,SAMPLE_51,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_109,SAMPLE_107,SAMPLE_112,SAMPLE_64,SAMPLE_61,});
+        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_93,SAMPLE_109,SAMPLE_92,SAMPLE_108,SAMPLE_19,SAMPLE_91,SAMPLE_18,SAMPLE_107,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_84,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_26,SAMPLE_25,SAMPLE_24,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_81,SAMPLE_80,SAMPLE_25,SAMPLE_36,SAMPLE_79,SAMPLE_78,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_59,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_104,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_109,SAMPLE_18,SAMPLE_104,SAMPLE_106,SAMPLE_13,SAMPLE_112,SAMPLE_11,SAMPLE_33,});
         DOCS_URL_TO_SAMPLE.put("java.util.HashMap",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_130,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_33,SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_42,SAMPLE_41,SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_108,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_109,SAMPLE_112,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_48,SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_15,SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_56,SAMPLE_2,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_109,SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_14,SAMPLE_13,SAMPLE_12,SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.ObjectProperty",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_29,SAMPLE_28,SAMPLE_27,SAMPLE_2,SAMPLE_31,SAMPLE_42,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_105,SAMPLE_104,SAMPLE_118,SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_21,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_13,SAMPLE_103,SAMPLE_63,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_63,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_4,SAMPLE_1,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_121,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_32,SAMPLE_31,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_108,SAMPLE_112,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_16,SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation",new SampleInfo[]{SAMPLE_19,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_19,SAMPLE_95,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_3,SAMPLE_52,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_93,SAMPLE_109,SAMPLE_92,SAMPLE_108,SAMPLE_91,SAMPLE_18,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.property.ObjectProperty",new SampleInfo[]{SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_39,SAMPLE_38,SAMPLE_37,SAMPLE_36,SAMPLE_3,SAMPLE_35,SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_107,SAMPLE_106,SAMPLE_13,SAMPLE_134,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_45,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_97,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_109,SAMPLE_92,SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_4,SAMPLE_2,});
         DOCS_URL_TO_SAMPLE.put("java.io.InputStream",new SampleInfo[]{SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_106,SAMPLE_65,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_104,SAMPLE_51,});
     }
     public static SampleInfo[] getSamplesForDoc(String docUrl) {
         return DOCS_URL_TO_SAMPLE.get(docUrl);
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.fdt has changed
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.fdx has changed
--- a/apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.fnm	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.fnm	Thu Aug 21 10:27:31 2014 -0700
@@ -1,2 +1,1 @@
-
-documentTypenamedescriptionshortDescriptionensemblePathpackageurl	className	bookTitlechapter
\ No newline at end of file
+documentTypenamedescriptionshortDescriptionensemblePathpackageurl	className
\ No newline at end of file
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.frq has changed
--- a/apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.nrm	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.nrm	Thu Aug 21 10:27:31 2014 -0700
@@ -1,1 +1,1 @@
-NRM||yyyyyyyyyyyxyxxxyxxxyxxyxyxxy|yyyy|||y|||y||yyy|y|||y|yyyy|yyxy|||yy|yyyyyyy|yyyyy|yyy||y|||||y||yxyy||||x|y|||||||||yxyxxyy|y|x|yy|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||wvxxyyxxyyxyyxywv|yyyyyyyyxxyyxxxxvvwwxxwxy|ywvvvv|yyxyxwxxyxyxxyyyxxxxxxxxwxxxxyxxxyxyxwxw|yy|y|y||xxxyyyxyx||||||||yyyyxxxy|yyxwyx|vyyyyyyyyxxxxxxyxyyyyxxyxxxxwxvxxxxxxyxxxxxxxwxxxwywyyxxwyxxxvxyxxxwxxxyxxyyxxxxxyxxyyxxyxyxxvxxxxxxxxxxxxyv|xyyxyxxyxxyxxyxxyyyyyxyyyxxxxxxxxxxxxxvxxxxxxxxxxyxxxxxxwwxxxyyyy||xxyxxxxwyyyyywvwvxxxxwwyxxxxxxyxyyyxxwvxxwwvxxxvxywyxyy|y|wy|y|ywwwxxxxwvuvvxwxxxvuxxxvwxxxxvxwxwyvyxwxyyvuxyyxxxxxyww|vxwxxwxxxyxyx|ywxxxxxxxwxx|wwx|yy|ywxxxyxqwruuvtvuuvututuvusutvvswtxurxttwxvxtxttvqrqtxxvwvvvtxuxvvvvrsxtxvuvtuwttuvuuuuvxuuuxstuuuuuuwxvuutvvsrtrtvwrssxtxpxxxxuuxssquwprtstsuoxvxxxvtxxvmvvvvvvvvvvvvtsqvvtstuuuuttttvtuuuxvxutxxxxxxxxxxxxxututxvvvvvvvvvtsqvvtstuuuuttttvtuuutvvvvvvvvvxtsquvvvwuuvvvkuvvsuuuuuvttttnvtvxsxxvyuvtvxsxuxxxxxxxxuxxvvxyuuuvvvvvvvvvyuuuuuvyylxsvxuwvuutvvtvvvpvvwttwvvvxxxxxxxwttvvvvvvvwwvmxxxyxxxxxxwxxxxxxvvvvvvvywxxxuuttssrvtwtttvuuttvvxvwvvvwxxxxvxxxvutvwvvvvvvwvupxxxxwvptxruuyvxxvuvxwututuuvtuxwxxxxxxuuuvttxtxxvyutttvtvvvtvvvvvvvvvvxxvuvxtwuuxuwxxxvxuvvyvwwyuuyxtvywxvyyxttxytvtvuuxxuunyuurruuruvvvvssrxxtwttvvuxuuxuuouwxxmttttttttttrrtttttsttttttuvuuuuuuutttttttttttttssstststtsststststttttttttttttttsstttttttttttttttttttttsstttttttttstttutttuuuuttttttttttttttttttttssttttttstttttttttttttttttttttttttttuusstststtsststststttttttttuuuuuuuuuuuuuuuuuuttttttttttttttttvutttttunxvuxxxxxxvuvvvvxtuupyuxxyvvuuuptuvxxxvxxuttwvtuwvvvxuuvupwuvwwuqtuuvxvwttwwxvuuuyutuuxvyyuttxxtjvwvvvvwuvvsuvxxvxvxxvvvtvvvtvvvuuywwwwwwwwwwwtuwwwyvutvvuwwxwyuuuuttttuvuvutttsuuuwutstxutttsuuyyvvxvvxyutstwwwwxxxwvvvwuqxyuxxxxxxyuvvvvxssrwttuuxuotttvtuxxvvvtvytyuxxvvvuupuussmtttxxttvvpxxxxxxvvxvvuvutvvuwxtuxwxuuvtxvtxvvtvvuuguuuxvtruuuwvvvwxvvttuvstvuuvxvuywtvttttwvtxxxxxtuxvutvvvvvvvywotwxtvxwxxxxvvvpyvyttxvvvtupyvyttttxvvvtumyvyrttxvvutumvvvuvvxxxvvvvwtuvpyvyttttxvvvtumxxxvnuxxuuuvxxxxxxxxvvvvxuupytyuttuxvvtuqytyuttuxvvtupytyuttuxvvtuqytyuttuxvvtuvvxvvxxxxvvvwjwttututtuuuuuuuuuuuuuutuuuuuuuvuvwvvvuwuukvsrvsvuvxvxwvxvvvuvwtstwwtsvxuutvvwwwwwwvwvwvvwwwvwwwvvvvvvvvvvvvvvvvvvvvvvvvwvvwwvwwwwvwwvvwwwwvvvvvvvvvvvvvvvvvvwvwwwvvvvvvvvvvvvwvwvwvwvwvvvvvvwwwvwwvvvwvvvwwvvvvwvvwwwwvwwwwvwvqxxxyxxxxxxxxxyxvvvvvuxuttxxxxxuxvvvvvuttluuvuuuoxxxxxxxxxxxxxxxxxxxxxvvvvvvvwjuutyvuxuuutvyxxxxxxxxvuxvuvvvvvuntvuuuuvutsytyvxxxxxxxvxxxuuuuvuvvvvvvvvvtsuvtupuytuyuttuxvxtvtuquytuyuttuxvxtvtupuytuyuttuxvxtvtuquytuyuttuxvxtvtusuuvuwuultvxxttvtqrtxxuuwwvvvvwvvpxxyuuuusuxvvxsxxvvvvvvxyxyvvvvvvvvvvvvvvvvtvsluuvvuuspuuuuuuuuuuuuuuxxxxxxxxvvvvvvvvuuwpuuuuvvuuuuxxxxxxvvvvvvwvvuuvvvxuxvxxxtxxwxwxxwwxxxxnxtxxtxvvuuwwvxxwwvvruwwtwxxtxxxpvunuutyuuuvtyxxxxxvvuvuxvvuvuxuuuuuyyvxxxxxxvvvxnyxttuuuxxxxxxyxxttuuvvvvvvvumtuvxxxvxxuttwvtuuuuuwuuuuuvvxxxxxuuuuuvuuuuupwuuwwuqtuuvxvwttwwxvuuwvvuttuuhuttsvxxxwwxuuwwxvvvwvtvttvvvvuuuoxywywwxywxyxxxxxxxxxwywwxvvvvvvvvvywrtuutuuuwtwwuuututtttuuuuwuyxwxvvvxxvvxxxxxxvvvvwxxxxxxxxxvvvxxxxtvxxuwuyvurvvvmutpvpxwwxpuywxwuywxxxxxuxvvvvvwmwwsxvxxxxwwsvvvvvtvxvxwuupywxwywxxxxuvvvvxwuxvxuxuxuptuvxxxvxxuttwvtuuuuwuuuuxvvxxxxuuuuvuuuuxxxxxvttssrvxpwuuwwuqtuuvxvwttwwxvuujuutytutuuuvvsuxxvtxvxxxxtvytuuvvvuvvvvttvvuvvuuxxvvunutttttsstxtsxxuwuuwvuuruuvtuuuvuvuovwvtstutwwwuvttuvutvvututuuuttvvuuvtttttutqywwxwwxuxuxvuuuttsvuvvuvuvuuvxwwxxwxxwxxuxuxvxxxxxxwxwxxxxxxwwxxxxxxxxxxxryxxxyxvvstxxuuwwuuvvvuvvvuwxryvxxyvvvnuvrtystxystrwstttsstvuxvxxxwwxxuxxxxvttttttvwutvuwvvvvvvwuvwtwstttttsstvtuhvtwwtsttvuvvsuxxuuvtvxvvxuuvxvtwuuxvuvtttrrrqttvtvtutttvtwwtnttxvxtuurrvjvtvvuvvsutxvvtvvxxvuvvtuvvrxxvwxuutwwutuuutvxuvpvvwxvvlvvvvvxvvxxuxttxvvxssvvrwwwttxxxuwwwyttxxxvvvyttkxxxwwwuluuxtrxwwuutxxxxxxxxxtvvvvvvvvrxwwvquuuvuwxxwswsxqtqxyywywwxwxyyxxxxxxxxxwywwxvvvvvvvvvwxvptvvxxwvxuuttutvwxwuxxxxwxyptuvxxxvxxuttwvtuuuuwuuuuxxxvvxxuuuuvuuuupwuuwwuqtuuvxvwttwwxvuutvvsssssrttvvvvvsvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwxoutwxvvwvvunvtwstttsyyttttvsvmxvxxuxxxxxxvuwxxxxtxxuxxxxxwyywvvwwwurwwwwwwwwwwwwwwwovwvvvuutuvxwtvxuvvxxuxtxuutuvxwtpuwwwxwwwuuxuuvuvuvxuvuvxxxuulttuuxtvvvvuwvtvvupuxwxwwwpuxuxwwuvvxvvptwvwxwvwvrxuxwttwvwxvxxxxxxxxxxxxwxxxvwvvvvvvvvvvvvvvvrxuxxwtxxxvpyyyyxxvvpxxxxxxvvvxxxpwwwvxxxxwwwvvvvvxxxxvtxxvvuuqxxyxyyxxxyxxxxxxxxvvvvvvvyyxvvvvvvxxxxvvvvvvwluuvvvvtwwvwuttssrvtwtttvuurxxxxvvwxxpwwtuuvxxwxvxxuttuwwvmxtrvxxtvtlxtuxvuwxxxxvxvvurwwyxxuvvyywyyxyxttuuyvyytyyuyuxtuwxyuutvwtqwwtuuuwvtxvwttuvwwxitttutxututvustvttvttttutxtwxuvvvxuxwxxututvuuustvuvutttutvvvvvwvptuvxxxvxxuttwvtuuuuwuuuuxxxxvvxuuuuvuuuupwuuwwuqtuuvxvwttwwxvuupwwtuuvxxwxvxxusttwwvtxxxxxxrwwvyywyyxxttuuuxvywuutvwtqwwtuuuwvtxvwsttvwwxqswwxwuuqxvxvxxvxwxwwvxwxxvuxtxxxwwwuuxxkwxxvvvtxwxxvvxuvvuvvvuvvwtxuuwwxxvvvtxwxxvwvxvxwwxxxxxxxvwwxxxxxxxxxxxxxuxxxxuvvuvvvuvvyxwvuvvvvwwwvuvvvvvvvvvwwvtxxuuwvnuuottwvtswvvttvvvxwwwuuvwvtuuuvuuvvvswvvmvvtwwuvxxxxxvxvvtwtvvvvuwwwwwovvxxvvnuwvywxyxuvwwmuwxyvvvxxvxuuuvwxxyxxxxxxuwxwyxwtxyxxxvvvxxtvvvvvvvvvvvtvvxuwwxwvtyyyxxuuoxxvuvuyyyyxyxtxqxyxxxxxyxvvvuunutxwwvvvvvvujutsvvxxuuwwvvvwwvwuuuuwutsvwvvtvvvvvuvvrxxxxvvwxxrvvvxvvtvvtvgvuvwuvwuxwtxxvuwyxvuuvvvuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvytxuxtttxvuuuuttvtvuvvwuvustwuxwtxxwvusxxxxxvtxxxxxyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuwxxxxxxvwtvxxxwtxwyxtsxxxxxxxxxxuxvuuttsttvttsttvttsttttvuuuuuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvyttttttuuxtsttttsuxtttxttttttttvvvvvvvvvvtvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvuvvvtvstuuvuuxuuuuuwuuvusutvtwuxxtvtvuuunuuuuuvtuuuuuuttttttttttttttttutttttttutttttttttttuuuuuvuuuuutuvtuuttttttttttttttttutttttttutttttttttttuvuxuvuptuvxxxvxxuttwvtvtuxtutuvvvuwwuqtuuvxvwttwwxputrvxtuvxvqvuuutxxvtutttvuttutututxvtutttvuttutututxuuutuuutuvunuuuxxuvuutttuvtutuutuxutxxxxwuumtxtqtuvttuuuunyvvyttvvuuvvvvmvvxtvvxwxwvxtvvwuwuwuvvxxxxlxqyvxvuuuuuuuuuvuuuuuuuutvxxxxxxxxxxpnuxxwuuvpuvvvvvxvvuxuvtuuuuuuuvxsvvvwxxvvvxvwvvxvpyxvvyxxxxuxvvvvvvuupyyxuvvvluuuxxvvumyttttttttxxxxxxxxxyttttvvvvvvvvvttttuxxxxxxuxxxxxxxxxxvvvvvvvxxxutxvvysuyvvwuytxxvxxvvtvvvvvwxxxxxxxxxvvwqrrrrssrruttuuttrrrrrttrrrrtxvxutvtuttttututtuyywuttuvttxvtuttttututtvyyywuttuvttxvxwxwwtyvvvvvvxvvtyvvvvvvwxvwuwyuvuvuvuvuvuvxwutuutuutuvuxvtrsvvvvnuvvsvutxxxuvvsvuxxxxxxxwtxxxxxxvvvvvvvvttxtuuxxuulvvxvvxwwxwxuuuupustuxwxuvtuurxxwvvvxvwxvvvtvvvvxlvxvxuutxwvxwtwvwouuuuyxxuuuuuuqvptuptuqvxvxvxxvwvwuuwxunswouuuuuuuuuuuxxxxxxvvvvvvuuwpvvvvvvxxxxvvvvwvvsuuuuttvtwwvwunvtlxxxxxvvxwvwqtuvttqtuvwttwvwqtuvttqtuvvttwvwqtuvttqtuvwttwvwqtuvttqtuvwttquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvwxxouuwxvvwutquvwxxouuwxvvwtttywttqtuuvtttuqtuuvtwttuwvwqtuvttqtuvwtttttywwttqtuuvtsttqtuuvtwsttwqtuvttqtuvwttxxtttywwttqtuuvtttuqtuuvtwttuwqtuvttqtuvwttrvvxxvvvvxxtxxxxxvvvvvvwxvvttuuuyvvvvywtuxvpuxyuuuxxxxxxyvvvvvuuqtttuxsvvvvuuvvuttxtttuvvvvsuxxtxxxxxxxxxxxxxsxxvxxqppquvuvuvuvuuqquvuvtuvvvvvvtvvtvvvvtvvvvvtuuuuttttxrstuqwwvvvwwxvxutxxvvvvvvvvvxxxvvvututvvvvvvvvwuuuwwwnttxxwwvtvvpxuywxwxuywxxxxxxuxvvvvvvwoxxxxxxxxxxxxxxxxxxxvvvvvvvwxxuuuuuuxvxutvvvxxxvvvxxxututuuuvvvvvvwuuuuuouuuyvvvxvwwuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvwwssrwttumvxtxxwyxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvwyyxxttwvvxtxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxywtxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvttwwvvvtvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvsuuuyyxxtvxivvvuxxttuvtvvuutxxxxxxxxxxxttyuuvvvvvttttruxvywtuxwwrvxxvuxuvvvxxxxxxxxxxxvvvvvvvvuxukttxxxuuvvvvvvvwvtvvuuuunxttvxxwuwwvxxxwxvttxxxxxxxxxxxxvxxwxxxuwwvvvvvvvvvvvvvvvvxxxwuuvuvuuotttvuuuuututtvvuuvvqtvtvxxxtvvvvtqqyvxxyvvvnuxxwuuvkvxxuuuuuuxvwxuxwttvvtvvuxtwxxxuuuuuuxxxxxxxxuuuuuuxtttyutvttvttttttywtxuxwpwwtuuvxxwxvxxuttuwwvtxxxxxrwwyxvyywyxxttuuyyyvwytvwtqwwtuuuwvtxvwttuvwwxxywyxwxyxxxxxxwyxvvvvvvwmuvutvvtuwutxxvxxxxxxtxvvvvvvvvvvutvvtuwttxxxxxxxxxvvvrvvttxvxutvvxxvvxxututvvvvvvwuuttxuuuuuuxxxxxxxxxxxxxxxxxxxxxwxxwxxwxxwxxwxxwxxwxvtvuvuutwtxxxxtvwwttssssttuvxtwwtqpqqqxuuuutttuxxvxnvwvxuxvvuuvxvvvwxxxxxxxxwxxxxwvxuxvvvvvvvvvvvvvvuuvxxxxxxvvvvvwvvxxvxuuxuvxvxxvovwkyvvvuytyuwqtptxtvttssrvtwtttvuuvvssrxtwttvuukvvuvvsuxvvtvvuuvukvuxxxxxxwxyvuxuuxxxxxvxxxwtwxxxxxxxxxwvruvvvvvvvvvvuxxxuuuquxtwwptuvxxxvxxuttwvuuruxxttttvutttvutttvvvttttvtutwwuuqtuuvxvwttwwxuuuupywxwywxxxxuvvvvxwtuutyywvwtwtuxwtuxwtuxwtuxwtuxwtuxwptwxtuxwtxtuxuuvvxxvxvxxxxxxxxwvvvvvvxtvtvxxvvwrssowxuttuuuuuuutvnttxvwvuuuurtsqxxxxxyyvvwxwxxxxxxxxxxyxyvxwuwwwtwxxwtyxyxxutvvwxvutvtwuvtututwxxxwvvqxvxtrvxxxvtxvxvvvvnwtuuutxwtvttsxttxtyxxxxwxwuuuttuuuvtxvxxxvutvvvvuusvuvuyvvtxvvtvxuytvvuvtutttxxxxxxxxuwxxtxtxuwyxxxxvvtxtvvvvvvvvvvvvvvtvvtvxuyvuuuuutrwxxwruwxxwpxvxxvruuttvutyvvvvxuusttuvvvvtvvuusvvgutsuuwxttvuxsusutvrsuuwxxxxwxxxxxxxxuxtutxxxttvusxuutusuvuvvuuuvuvuvuusturtvvuttuuvuuxvvtrtttvuttyvvuvvwvuusstttuvvtvuusnxwxxxxxxvwxxxxxxxvxwtuvtvvvvxxxxxxupuuevxuuuuuxvwxuxwttvuxytvtwxxuuuuuxxxxxxxxuuuuuxtttvtttttttwtxuwuuwwxwpuvxvvuvvxuuwwuvxvxxtxxxxxxxxxxxvvvvvvvvvvvvvuvvxwuuuwwuuqxxvvtvuxxxxxxxvvvvvvvtxxpuuquuxuvxvxxuxvvvxsytytsxvtusytytsxvtusytytsxvtusytytsxvtukvxvsuvvtxxvvuvvvxuxwvwxuwyxxvxwyuuttvuyvvwuwxxxwxxxxxxuvuxxwvvwuvutwvwvwvvywuwuvvvvxwtvuwjuvywwxxvxxvuuvvsuxvvtxvxxxxxxxxxvvywwxxuuvvuvvvvvvvvxxvnxuvvpxxyxxxyvxyxxxuvtvxxuwtxxvvtxnwxvuxxwvvxsyxxyxnvvxxvvnuwwxwvuxtuwvwxtxxxwxxxxwuxxvvvvvvvvvuxutntttxuxtwwwwwvvuvuosuxxttvvxuuuvvvwvuuuxvuuwvxtxuxttrqvxutvxutttxtvvvvvvvvvxvvvxutttvutvvtsxxutttututtuttuuvuuvvttuuxvutuutvxmvvxwuvvuuuxvxutttvvvxxxutttutvvvwuuuuuouuuyvvvxvvvuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvvvotuutrvtvwxttuuvvixvuxuuttvutxyvyvuvxxuxuxxutvuuwuuuutvttvwtuuttvnswuuqxtrvxxvtxvuvvlwtuuutxwtvttsxttxtyxxxxwxwuuuttuuuvtxvxxxvutvvvvuurwxwxptuutrvtvwxttuuvvhuttuuuttuvuwxsvtustutvrtvtuutuutxxxxxwxtxxxxutxwxuxxututxuxvtuvuswxutusuvuvuuuvvuvuvuvvvutustturvuvvvtvvuttuuvuuxvvtrtvuyvvuvvvuutuvvtvuusitttuututuuwsvtvttvtuttuutsuxwxtvvvxutwuxuvutuuwussvuutttuvuuvvuvvvlwuvwxwwvuwvvvvtsuutuxxxxxxuvtxvuvuwvvvvvvvvvvtuuvvjvtvvuvvsutxvtvxvxvuvvuvtvuuxxrxxvwxuurtvuurvvrtvvrtvrtvixxwwxxvwxwxxwuwxxwvxxvxuwxxwxwxwxxxxwvvuxxvwxwuxtuuvuvuuuuvvvxwuwnxwwtttwwuvuuuuwwwxvxtwvuwwvyxxxxxxyxwwvxtxxxxxxxxxxxuyxuuxuxuxuxuxuxtvvvwuwwuwwuwuyxquuuuuttttuurxvyvvvvwvxvyxxttvuxwvxxxxxxxxxxxxyvxxvvvvwvttwxvtvvvvvvvvvvvvvuyxxttxwvuvvvvkvxxvwxuxwxvuvvxwwxvwxxvwxuxwmuuwvuuuuuutxwwtxwwtxwwutxwwtxwwuxwstrxwrvvyvtvtvvuttssrytuttxrrvvvvvtxxxxxtwrstttvvtttuvvvvuuvtuxvvuxxvvxvvuuwvvwxvxxxvxxxxxxuvvwnttxxxwvtvvnjmminnnolllmkmihpnpnpnpmqmnponljpiilihmmhmnkllnmmpkpnnlklpqmqmmnllonnomlmmmlnomlollmmqjmponnoijlnjglolnjjinolmllklmlthitkhltnjikmllnnlnmllnnmmmmnnmmnomlmmmmnklmkoomklllkjiilgjjhikijjljnmiklnjkkkimkkkjmihjlnljijlgjijklikjmmmmjmmlnmlnnkllpomljijthuljvljvjgthhumoppnqmollmjlijjjjkjkljinljkilijkgiqkiihihonjnjqhpkjljnjlijplnrlmkmpkmljlplmmjlklkklkhtmlnnqknksmnlllmjommnmmnkilikkmhinghkjjloqlilnnmiihjmnipllhgkmlgglihgjlllmilheknkihrnmlgeokippopnqlmiominjnlgmjnhlnlknjtjtni|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvvvvvvvvvvvvvvwwwwwwwwwvvvvvvvvvvvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||yyxxyyyywwwwwwwwwwwwwwxxxxxxxxxvvxxvvvxxxxyyyyyyyyywwwxxxxxxxwwwwwwwvvvvvvvvvvwwwwwwwwvvvvvxxxxxxxxxxxxwwxxxxwwwwwwwwwwwwwwwwwwwwxxxxxyyyyyyyyxxxxxxxxyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyywwyyyxxxyyxxxyyyyyxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwxxxxxxxxxxxxvvvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxxxxxxwyyyyyxxxxxxxxxwwvvvvwwxxvvxxwwwwwwwwwvvvvvvvvvvvvvyyyyyyyyyyyxxxxxxxxxyyxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwxxxxxxxxxyyyyxxxxxxxyyywwwwwwwwwwvvwwwwwxxxxxxxxxxxvvvv
\ No newline at end of file
+NRMxy||||||y||yx|yyyy|yxyxxyxyxxyxxxyyxxyxx||y||yy|yyyyyy||yyyyyy||xy||y||||||y|yxxxyy|||||||||yyyyyyyyyyy|yyy|yyyy|y|yyyyy||yy||||||y|yyy||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||wsrtvsrussrttwpuqstrvvuutvtxstxwruvuustvxttvrvvxuvvsvxtxwvxvvxvvtxqrqvttvutxxwsusuxtxxxxxpxqrtuuvuutvvuwvuututtxwtxsuuutuvuuxuuuwuuuuvuoxvxxxvtxxvmvvvvvvvvvvvvtsqvvtstuuuuttttvtuuuxvxutxxxxxxxxxxxxxututxvvvvvvvvvtsqvvtstuuuuttttvtuuutvvvvvvvvvxtsquvvvwuuvvvkuvvsuuuuuvttttnvtvxsxxvyuvtvxsxuxxxxxxxxuxxvvxyuuuvvvvvvvvvyuuuuuvyylxsvxuwvuutvvtvvvpvvwttwvvvxxxxxxxwttvvvvvvvwwvmxxxyxxxxxxwxxxxxxvvvvvvvywxxxuuttssrvtwtttvuuttvvxvwvvvwxxxxvxxxvutvwvvvvvvwvupxxxxwvptxruuyvxxvuvxwututuuvtuxwxxxxxxuuuvttxtxxvyutttvtvvvtvvvvvvvvvvxxvuvxtwuuxuwxxxvxuvvyvwwyuuyxtvywxvyyxttxytvtvuuxxuunyuurruuruvvvvssrxxtwttvvuxuuxuuouwxxmttttttttttrrtttttsttttttuvuuuuuuutttttttttttttssstststtsststststttttttttttttttsstttttttttttttttttttttsstttttttttstttutttuuuuttttttttttttttttttttssttttttstttttttttttttttttttttttttttuusstststtsststststttttttttuuuuuuuuuuuuuuuuuuttttttttttttttttvutttttunxvuxxxxxxvuvvvvxtuupyuxxyvvuuuptuvxxxvxxuttwvtuwvvvxuuvupwuvwwuqtuuvxvwttwwxvuuuyutuuxvyyuttxxtjvwvvvvwuvvsuvxxvxvxxvvvtvvvtvvvuuywwwwwwwwwwwtuwwwyvutvvuwwxwyuuuuttttuvuvutttsuuuwutstxutttsuuyyvvxvvxyutstwwwwxxxwvvvwuqxyuxxxxxxyuvvvvxssrwttuuxuotttvtuxxvvvtvytyuxxvvvuupuussmtttxxttvvpxxxxxxvvxvvuvutvvuwxtuxwxuuvtxvtxvvtvvuuguuuxvtruuuwvvvwxvvttuvstvuuvxvuywtvttttwvtxxxxxtuxvutvvvvvvvywotwxtvxwxxxxvvvpyvyttxvvvtupyvyttttxvvvtumyvyrttxvvutumvvvuvvxxxvvvvwtuvpyvyttttxvvvtumxxxvnuxxuuuvxxxxxxxxvvvvxuupytyuttuxvvtuqytyuttuxvvtupytyuttuxvvtuqytyuttuxvvtuvvxvvxxxxvvvwjwttututtuuuuuuuuuuuuuutuuuuuuuvuvwvvvuwuukvsrvsvuvxvxwvxvvvuvwtstwwtsvxuutvvwwwwwwvwvwvvwwwvwwwvvvvvvvvvvvvvvvvvvvvvvvvwvvwwvwwwwvwwvvwwwwvvvvvvvvvvvvvvvvvvwvwwwvvvvvvvvvvvvwvwvwvwvwvvvvvvwwwvwwvvvwvvvwwvvvvwvvwwwwvwwwwvwvqxxxyxxxxxxxxxyxvvvvvuxuttxxxxxuxvvvvvuttluuvuuuoxxxxxxxxxxxxxxxxxxxxxvvvvvvvwjuutyvuxuuutvyxxxxxxxxvuxvuvvvvvuntvuuuuvutsytyvxxxxxxxvxxxuuuuvuvvvvvvvvvtsuvtupuytuyuttuxvxtvtuquytuyuttuxvxtvtupuytuyuttuxvxtvtuquytuyuttuxvxtvtupuuvuwuultvxxttvtqrtxxuuwwvvvvwvvpxxyuuuusuxvvxsxxvvvvvvxyxyvvvvvvvvvvvvvvvvtvsluuvvuuspuuuuuuuuuuuuuuxxxxxxxxvvvvvvvvuuwpuuuuvvuuuuxxxxxxvvvvvvwvvuuvvvxuxvxxxtxxwxwxxwwxxxxnxtxxtxvvuuwwvxxwwvvruwwtwxxtxxxpvunuutyuuuvtyxxxxxvvuvuxvvuvuxuuuuuyyvxxxxxxvvvxnyxttuuuxxxxxxyxxttuuvvvvvvvumtuvxxxvxxuttwvtuuuuuwuuuuuvvxxxxxuuuuuvuuuuupwuuwwuqtuuvxvwttwwxvuuwvvuttuuhuttsvxxxwwxuuwwxvvvwvtvttvvvvuuuoxywywwxywxyxxxxxxxxxwywwxvvvvvvvvvywrtuutuuuwtwwuuututtttuuuuwuyxwxvvvxxvvxxxxxxvvvvwxxxxxxxxxvvvxxxxtvxxuwuyvurvvvmutpvpxwwxpuywxwuywxxxxxuxvvvvvwmwwsxvxxxxwwsvvvvvtvxvxwuupywxwywxxxxuvvvvxwuxvxuxuxuptuvxxxvxxuttwvtuuuuwuuuuxvvxxxxuuuuvuuuuxxxxxvttssrvxpwuuwwuqtuuvxvwttwwxvuujuutytutuuuvvsuxxvtxvxxxxtvytuuvvvuvvvvttvvuvvuuxxvvunutttttsstxtsxxuwuuwvuuruuvtuuuvuvuovwvtstutwwwuvttuvutvvututuuuttvvuuvtttttutqywwxwwxuxuxvuuuttsvuvvuvuvuuvxwwxxwxxwxxuxuxvxxxxxxwxwxxxxxxwwxxxxxxxxxxxryxxxyxvvstxxuuwwuuvvvuvvvuwxryvxxyvvvnuvrtystxystrwstttsstvuxvxxxwwxxuxxxxvttttttvwutvuwvvvvvvwuvwtwstttttsstvtuhvtwwtsttvuvvsuxxuuvtvxvvxuuvxvtwuuxvuvtttrrrqttvtvtutttvtwwtnttxvxtuurrvjvtvvuvvsutxvvtvvxxvuvvtuvvrxxvwxuutwwutuuutvxuvpvvwxvvlvvvvvxvvxxuxttxvvxssvvrwwwttxxxuwwwyttxxxvvvyttkxxxwwwuluuxtrxwwuutxxxxxxxxxtvvvvvvvvrxwwvquuuvuwxxwswsxqtqxyywywwxwxyyxxxxxxxxxwywwxvvvvvvvvvwxvptvvxxwvxuuttutvwxwuxxxxwxyptuvxxxvxxuttwvtuuuuwuuuuxxxvvxxuuuuvuuuupwuuwwuqtuuvxvwttwwxvuutvvsssssrttvvvvvsvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwwxoutwxvvwvvptuuutxxxwttwxoutwxvvwvvunvtwstttsyyttttvsvmxvxxuxxxxxxvuwxxxxtxxuxxxxxwyywvvwwwurwwwwwwwwwwwwwwwovwvvvuutuvxwtvxuvvxxuxtxuutuvxwtpuwwwxwwwuuxuuvuvuvxuvuvxxxuulttuuxtvvvvuwvtvvupuxwxwwwpuxuxwwuvvxvvptwvwxwvwvrxuxwttwvwxvxxxxxxxxxxxxwxxxvwvvvvvvvvvvvvvvvrxuxxwtxxxvpyyyyxxvvpxxxxxxvvvxxxpwwwvxxxxwwwvvvvvxxxxvtxxvvuuqxxyxyyxxxyxxxxxxxxvvvvvvvyyxvvvvvvxxxxvvvvvvwluuvvvvtwwvwuttssrvtwtttvuurxxxxvvwxxpwwtuuvxxwxvxxuttuwwvmxtrvxxtvtlxtuxvuwxxxxvxvvurwwyxxuvvyywyyxyxttuuyvyytyyuyuxtuwxyuutvwtqwwtuuuwvtxvwttuvwwxitttutxututvustvttvttttutxtwxuvvvxuxwxxututvuuustvuvutttutvvvvvwvptuvxxxvxxuttwvtuuuuwuuuuxxxxvvxuuuuvuuuupwuuwwuqtuuvxvwttwwxvuupwwtuuvxxwxvxxusttwwvtxxxxxxrwwvyywyyxxttuuuxvywuutvwtqwwtuuuwvtxvwsttvwwxqswwxwuuqxvxvxxvxwxwwvxwxxvuxtxxxwwwuuxxkwxxvvvtxwxxvvxuvvuvvvuvvwtxuuwwxxvvvtxwxxvwvxvxwwxxxxxxxvwwxxxxxxxxxxxxxuxxxxuvvuvvvuvvyxwvuvvvvwwwvuvvvvvvvvvwwvtxxuuwvnuuottwvtswvvttvvvxwwwuuvwvtuuuvuuvvvswvvmvvtwwuvxxxxxvxvvtwtvvvvuwwwwwovvxxvvnuwvywxyxuvwwmuwxyvvvxxvxuuuvwxxyxxxxxxuwxwyxwtxyxxxvvvxxtvvvvvvvvvvvtvvxuwwxwvtyyyxxuuoxxvuvuyyyyxyxtxqxyxxxxxyxvvvuunutxwwvvvvvvujutsvvxxuuwwvvvwwvwuuuuwutsvwvvtvvvvvuvvrxxxxvvwxxrvvvxvvtvvtvgvuvwuvwuxwtxxvuwyxvuuvvvuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvytxuxtttxvuuuuttvtvuvvwuvustwuxwtxxwvusxxxxxvtxxxxxyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuwxxxxxxvwtvxxxwtxwyxtsxxxxxxxxxxuxvuuttsttvttsttvttsttttvuuuuuxuustuuutttttttuttvvtuuuvvvuvttttvuvuvuvvyttttttuuxtsttttsuxtttxttttttttvvvvvvvvvvtvvvvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvuvvvtvstuuvuuxuuuuuwuuvusutvtwuxxtvtvuuunuuuuuvtuuuuuuttttttttttttttttutttttttutttttttttttuuuuuvuuuuutuvtuuttttttttttttttttutttttttutttttttttttuvuxuvuptuvxxxvxxuttwvtvtuxtutuvvvuwwuqtuuvxvwttwwxputrvxtuvxvqvuuutxxvtutttvuttutututxvtutttvuttutututxuuutuuutuvunuuuxxuvuutttuvtutuutuxutxxxxwuumtxtqtuvttuuuunyvvyttvvuuvvvvmvvxtvvxwxwvxtvvwuwuwuvvxxxxlxqyvxvuuuuuuuuuvuuuuuuuutvxxxxxxxxxxpnuxxwuuvpuvvvvvxvvuxuvtuuuuuuuvxsvvvwxxvvvxvwvvxvpyxvvyxxxxuxvvvvvvuupyyxuvvvluuuxxvvumyttttttttxxxxxxxxxyttttvvvvvvvvvttttouxxxxxxuxxxxxxxxxxvvvvvvvxxxutxvvysuyvvwuytxxvxxvvtvvvvvwxxxxxxxxxvvwqrrrrssrruttuuttrrrrrttrrrrnxvxutvtuttttututtuyywuttuvttxvtuttttututtvyyywuttuvttxvxwxwwtyvvvvvvxvvtyvvvvvvwxvwuwyuvuvuvuvuvuvxwutuutuutuvuxvtrsvvvvnuvvsvutxxxuvvsvuxxxxxxxwtxxxxxxvvvvvvvvttxtuuxxuulvvxvvxwwxwxuuuupustuxwxuvtuurxxwvvvxvwxvvvtvvvvxlvxvxuutxwvxwtwvwouuuuyxxuuuuuuqvptuptuqvxvxvxxvwvwuuwxunswouuuuuuuuuuuxxxxxxvvvvvvuuwpvvvvvvxxxxvvvvwvvsuuuuttvtwwvwunvtlxxxxxvvxwvwqtuvttqtuvwttwvwqtuvttqtuvvttwvwqtuvttqtuvwttwvwqtuvttqtuvwttquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvxxxouuwxvvwquvwxxouuwxvvwutquvwxxouuwxvvwtttywttqtuuvtttuqtuuvtwttuwvwqtuvttqtuvwtttttywwttqtuuvtsttqtuuvtwsttwqtuvttqtuvwttxxtttywwttqtuuvtttuqtuuvtwttuwqtuvttqtuvwttrvvxxvvvvxxtxxxxxvvvvvvwxvvttuuuyvvvvywtuxvpuxyuuuxxxxxxyvvvvvuuqtttuxsvvvvuuvvuttxtttuvvvvsuxxtxxxxxxxxxxxxxsxxvxxqppquvuvuvuvuuqquvuvtuvvvvvvtvvtvvvvtvvvvvtuuuuttttxrstuqwwvvvwwxvxutxxvvvvvvvvvxxxvvvututvvvvvvvvwuuuwwwnttxxwwvtvvpxuywxwxuywxxxxxxuxvvvvvvwoxxxxxxxxxxxxxxxxxxxvvvvvvvwxxuuuuuuxvxutvvvxxxvvvxxxututuuuvvvvvvwuuuuuouuuyvvvxvwwuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvwwssrwttumvxtxxwyxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvwyyxxttwvvxtxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuxxxxywtxtustuuutttttttuttvvtuuuvvvuvuuuuvuuuvuvttwwvvvtvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvsuuuyyxxtvxivvvuxxttuvtvvuutxxxxxxxxxxxttyuuvvvvvttttruxvywtuxwwrvxxvuxuvvvxxxxxxxxxxxvvvvvvvvuxukttxxxuuvvvvvvvwvtvvuuuunxttvxxwuwwvxxxwxvttxxxxxxxxxxxxvxxwxxxuwwvvvvvvvvvvvvvvvvxxxwuuvuvuuotttvuuuuututtvvuuvvqtvtvxxxtvvvvtqqyvxxyvvvnuxxwuuvkvxxuuuuuuxvwxuxwttvvtvvuxtwxxxuuuuuuxxxxxxxxuuuuuuxtttyutvttvttttttywtxuxwpwwtuuvxxwxvxxuttuwwvtxxxxxrwwyxvyywyxxttuuyyyvwytvwtqwwtuuuwvtxvwttuvwwxxywyxwxyxxxxxxwyxvvvvvvwmuvutvvtuwutxxvxxxxxxtxvvvvvvvvvvutvvtuwttxxxxxxxxxvvvrvvttxvxutvvxxvvxxututvvvvvvwuuttxuuuuuuxxxxxxxxxxxxxxxxxxxxxwxxwxxwxxwxxwxxwxxwxvtvuvuutwtxxxxtvwwttssssttuvxtwwtqpqqqxuuuutttuxxvxnvwvxuxvvuuvxvvvwxxxxxxxxwxxxxwvxuxvvvvvvvvvvvvvvuuvxxxxxxvvvvvwvvxxvxuuxuvxvxxvovwkyvvvuytyuwqtptxtvttssrvtwtttvuuvvssrxtwttvuukvvuvvsuxvvtvvuuvukvuxxxxxxwxyvuxuuxxxxxvxxxwtwxxxxxxxxxwvruvvvvvvvvvvuxxxuuuquxtwwptuvxxxvxxuttwvuuruxxttttvutttvutttvvvttttvtutwwuuqtuuvxvwttwwxuuuupywxwywxxxxuvvvvxwtuutyywvwtwtuxwtuxwtuxwtuxwtuxwtuxwptwxtuxwtxtuxuuqvxxvxvxxxxxxxxwvvvvvvxtvtvxxvvwrssowxuttuuuuuuutvnttxvwvuuuurtsqxxxxxyyvvwxwxxxxxxxxxxyxyvxwuwwwtwxxwtyxyxxutvvwxvutvtwuvtututwxxxwvvqxvxtrvxxxvtxvxvvvvnwtuuutxwtvttsxttxtyxxxxwxwuuuttuuuvtxvxxxvutvvvvuusvuvuyvvtxvvtvxuytvvuvtutttxxxxxxxxuwxxtxtxuwyxxxxvvtxtvvvvvvvvvvvvvvtvvtvxuyvuuuuutrwxxwruwxxwpxvxxvruuttvutyvvvvxuusttuvvvvtvvuusvvgutsuuwxttvuxsusutvrsuuwxxxxwxxxxxxxxuxtutxxxttvusxuutusuvuvvuuuvuvuvuusturtvvuttuuvuuxvvtrtttvuttyvvuvvwvuusstttuvvtvuusnxwxxxxxxvwxxxxxxxvxwtuvtvvvvxxxxxxupuuevxuuuuuxvwxuxwttvuxytvtwxxuuuuuxxxxxxxxuuuuuxtttvtttttttwtxuwuuwwxwpuvxvvuvvxuuwwuvxvxxtxxxxxxxxxxxvvvvvvvvvvvvvuvvxwuuuwwuuqxxvvtvuxxxxxxxvvvvvvvtxxpuuquuxuvxvxxuxvvvxsytytsxvtusytytsxvtusytytsxvtusytytsxvtukvxvsuvvtxxvvuvvvxuxwvwxuwyxxvxwyuuttvuyvvwuwxxxwxxxxxxuvuxxwvvwuvutwvwvwvvywuwuvvvvxwtvuwjuvywwxxvxxvuuvvsuxvvtxvxxxxxxxxxvvywwxxuuvvuvvvvvvvvxxvnxuvvpxxyxxxyvxyxxxuvtvxxuwtxxvvtxnwxvuxxwvvxsyxxyxnvvxxvvnuwwxwvuxtuwvwxtxxxwxxxxwuxxvvvvvvvvvuxutntttxuxtwwwwwvvuvuosuxxttvvxuuuvvvwvuuuxvuuwvxtxuxttrqvxutvxutttxtvvvvvvvvvxvvvxutttvutvvtsxxutttututtuttuuvuuvvttuuxvutuutvxmvvxwuvvuuuxvxutttvvvxxxutttutvvvwuuuuuouuuyvvvxvvvuuuyvvvxxxxxxxxxxxuxvvvvvvvvvvvvvvotuutrvtvwxttuuvvixvuxuuttvutxyvyvuvxxuxuxxutvuuwuuuutvttvwtuuttvnswuuqxtrvxxvtxvuvvlwtuuutxwtvttsxttxtyxxxxwxwuuuttuuuvtxvxxxvutvvvvuurwxwxptuutrvtvwxttuuvvhuttuuuttuvuwxsvtustutvrtvtuutuutxxxxxwxtxxxxutxwxuxxututxuxvtuvuswxutusuvuvuuuvvuvuvuvvvutustturvuvvvtvvuttuuvuuxvvtrtvuyvvuvvvuutuvvtvuusitttuututuuwsvtvttvtuttuutsuxwxtvvvxutwuxuvutuuwussvuutttuvuuvvuvvvlwuxwxwxvuwvvvvtsuutuxxxxxxuvtxvuvuwvvvvvvvvvvtuuvvjvtvvuvvsutxvtvxvxvuvvuvtvuuxxrxxvwxuurtvuurvvrtvvrtvrtvixxwwxxvwxwxxwuwxxwvxxvxuwxxwxwxwxxxxwvvuxxvwxwuxtuuvuvuuuuvvvxwuwnxwwtttwwuvuuuuwwwxvxtwvuwwvyxxxxxxyxwwvxtxxxxxxxxxxxuyxuuxuxuxuxuxuxtvvvwuwwuwwuwuyxquuuuuttttuurxvyvvvvwvxvyxxttvuxwvxxxxxxxxxxxxyvxxvvvvwvttwxvtvvvvvvvvvvvvvuyxxttxwvuvvvvkvxxvwxuxwxvuvvxwwxvwxxvwxuxwmuuwvuuuuuutxwwtxwwtxwwutxwwtxwwuxwstrxwrvvyvtvtvvuttssrytuttxrrvvvvvtxxxxxtwrstttvvtttuvvvvuuvtuxvvuxxvvxvvuuwvvwxvxxxvxxxxxxuvvwnttxxxwvtvv||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
\ No newline at end of file
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.prx has changed
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.tii has changed
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/_0.tis has changed
--- a/apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/listAll.txt	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/listAll.txt	Thu Aug 21 10:27:31 2014 -0700
@@ -1,10 +1,10 @@
+_0.fdx:81284
+segments_1:240
+_0.tii:12956
 segments.gen:20
-segments_1:230
-_0.fdt:3331603
-_0.fdx:85028
-_0.fnm:116
-_0.frq:378636
-_0.nrm:95656
-_0.prx:370533
-_0.tii:13655
-_0.tis:906303
+_0.frq:259491
+_0.fnm:96
+_0.tis:829654
+_0.prx:187643
+_0.fdt:3255379
+_0.nrm:71124
Binary file apps/samples/Ensemble8/src/generated/resources/ensemble/search/index/segments_1 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textformatter/TextFormatterApp.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+package ensemble.samples.controls.text.textformatter;
+
+import javafx.application.Application;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.TextField;
+import javafx.scene.control.TextFormatter;
+import javafx.stage.Stage;
+import javafx.util.converter.FormatStringConverter;
+
+import java.text.NumberFormat;
+
+/**
+ * Demonstrates a TextField control with a TextFormatter that filters and formats the content.
+ *
+ * @sampleName Text Formatter
+ * @preview preview.png
+ * @see javafx.scene.control.TextFormatter
+ * @see javafx.scene.control.TextField
+ * @see javafx.scene.control.TextInputControl
+ * @playground price (min=0, max=10000)
+ * @embedded
+ */
+public class TextFormatterApp extends Application{
+
+    private DoubleProperty price = new SimpleDoubleProperty(1200.555);
+
+    public Parent createContent() {
+        TextField text = new TextField();
+        final NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();
+        String symbol = currencyInstance.getCurrency().getSymbol();
+        TextFormatter<Number> formatter = new TextFormatter<>(new FormatStringConverter<>(currencyInstance));
+        formatter.valueProperty().bindBidirectional(price);
+        text.setTextFormatter(formatter);
+        text.setMaxSize(140, TextField.USE_COMPUTED_SIZE);
+        return text;
+    }
+
+    @Override
+    public void start(Stage primaryStage) throws Exception {
+        primaryStage.setScene(new Scene(createContent()));
+        primaryStage.show();
+    }
+
+    /**
+     * Java main for when running without JavaFX launcher
+     * @param args command line arguments
+     */
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/streamingmediaplayer/PlayerPane.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/streamingmediaplayer/PlayerPane.java	Thu Aug 21 10:27:31 2014 -0700
@@ -178,8 +178,7 @@
 
         // Play label
         playTime = new Label();
-        playTime.setPrefWidth(130);
-        playTime.setMinWidth(50);
+        playTime.setMinWidth(Control.USE_PREF_SIZE);
         playTime.setTextFill(Color.WHITE);
         mediaTopBar.getChildren().add(playTime);
 
@@ -193,8 +192,7 @@
         volumeSlider = new Slider();
         volumeSlider.setId("media-slider");
         volumeSlider.setPrefWidth(120);
-        volumeSlider.setMinWidth(30);
-        volumeSlider.setMaxWidth(Region.USE_PREF_SIZE);
+        volumeSlider.setMaxWidth(Double.MAX_VALUE);
         volumeSlider.valueProperty().addListener((Observable ov) -> {
         });
         volumeSlider.valueProperty().addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
@@ -202,6 +200,7 @@
                 mp.setVolume(volumeSlider.getValue() / 100.0);
             }
         });
+        HBox.setHgrow(volumeSlider, Priority.ALWAYS);
         mediaTopBar.getChildren().add(volumeSlider);
 
         setTop(mediaTopBar);
Binary file apps/samples/Ensemble8/src/samples/resources/ensemble/samples/controls/text/textformatter/preview.png has changed
--- a/apps/samples/Ensemble8/src/samples/resources/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayer.css	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/samples/resources/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayer.css	Thu Aug 21 10:27:31 2014 -0700
@@ -53,8 +53,7 @@
     -fx-background-radius: 2.5, 2.5, 1.5;
     -fx-padding: 0.208333em; 
     -fx-background-image: url("../../shared-resources/slider.png");
-    -fx-background-image-width: 10;
-    -fx-background-image-slice: 0 fill;
+    -fx-background-repeat: round no-repeat;
 }
 
 #media-slider .thumb {
--- a/apps/samples/Ensemble8/src/samples/resources/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayer.css	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/samples/resources/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayer.css	Thu Aug 21 10:27:31 2014 -0700
@@ -73,8 +73,7 @@
     -fx-background-radius: 2.5, 2.5, 1.5;
     -fx-padding: 0.208333em; 
     -fx-background-image: url("../../shared-resources/slider.png");
-    -fx-background-image-width: 10;
-    -fx-background-image-slice: 0 fill;
+    -fx-background-repeat: round no-repeat;
 }
 
 #media-slider .thumb {
--- a/apps/samples/Ensemble8/src/samples/resources/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/samples/Ensemble8/src/samples/resources/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css	Thu Aug 21 10:27:31 2014 -0700
@@ -53,8 +53,7 @@
     -fx-background-radius: 2.5, 2.5, 1.5;
     -fx-padding: 0.208333em; 
     -fx-background-image: url("../../shared-resources/slider.png");
-    -fx-background-image-width: 10;
-    -fx-background-image-slice: 0 fill;
+    -fx-background-repeat: round no-repeat;
 }
 
 #media-slider .thumb {
--- a/apps/scenebuilder/SceneBuilderApp/src/com/oracle/javafx/scenebuilder/app/css/ThemeDark.css	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderApp/src/com/oracle/javafx/scenebuilder/app/css/ThemeDark.css	Thu Aug 21 10:27:31 2014 -0700
@@ -1209,8 +1209,7 @@
 }
 
 .theme-presets.SBKIT-css-panel .note-label .text {
-    /*-fx-font-size: 0.750em;*/
-    -fx-font-size: 9px; /* workaround for DTL-6745 / RT-37787 */
+    -fx-font-size: 0.750em;
     -fx-fill: -sb-content-text-dimmed;
 }
 
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/css/Theme.css	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/css/Theme.css	Thu Aug 21 10:27:31 2014 -0700
@@ -1105,8 +1105,7 @@
 }
 
 .theme-presets.SBKIT-css-panel .note-label .text {
-    /*-fx-font-size: 0.750em;*/
-    -fx-font-size: 9px; /* workaround for DTL-6745 / RT-37787 */
+    -fx-font-size: 0.750em;
     -fx-fill: -sb-content-text-dimmed;
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/BatchDocumentJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2014, 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 com.oracle.javafx.scenebuilder.kit.editor.job;
+
+import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This Job updates the FXOM document at execution time. The selection is not
+ * updated.
+ *
+ * The sub jobs are FIRST all created, THEN executed.
+ */
+public abstract class BatchDocumentJob extends CompositeJob2 {
+
+    private List<Job> subJobs;
+
+    public BatchDocumentJob(EditorController editorController) {
+        super(editorController);
+    }
+
+    @Override
+    public final List<Job> getSubJobs() {
+        if (subJobs == null) {
+            subJobs = Collections.unmodifiableList(makeSubJobs());
+            assert subJobs != null;
+        }
+        return subJobs;
+    }
+
+    @Override
+    public final boolean isExecutable() {
+        return getSubJobs().isEmpty() == false;
+    }
+
+    @Override
+    public final void execute() {
+        final FXOMDocument fxomDocument
+                = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        for (Job subJob : getSubJobs()) {
+            subJob.execute();
+        }
+        fxomDocument.endUpdate();
+    }
+
+    @Override
+    public final void undo() {
+        final FXOMDocument fxomDocument
+                = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        for (int i = getSubJobs().size() - 1; i >= 0; i--) {
+            getSubJobs().get(i).undo();
+        }
+        fxomDocument.endUpdate();
+    }
+
+    @Override
+    public final void redo() {
+        final FXOMDocument fxomDocument
+                = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        for (Job subJob : getSubJobs()) {
+            subJob.redo();
+        }
+        fxomDocument.endUpdate();
+    }
+
+    protected abstract List<Job> makeSubJobs();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/BatchSelectionJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2014, 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 com.oracle.javafx.scenebuilder.kit.editor.job;
+
+import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
+import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This Job updates the FXOM document AND the selection at execution time.
+ *
+ * The sub jobs are FIRST all created, THEN executed.
+ */
+public abstract class BatchSelectionJob extends CompositeJob2 {
+
+    private List<Job> subJobs;
+    private AbstractSelectionGroup oldSelectionGroup;
+    private AbstractSelectionGroup newSelectionGroup;
+
+    public BatchSelectionJob(EditorController editorController) {
+        super(editorController);
+    }
+
+    protected final AbstractSelectionGroup getOldSelectionGroup() {
+        return oldSelectionGroup;
+    }
+    
+    protected abstract AbstractSelectionGroup getNewSelectionGroup();
+
+    @Override
+    public final List<Job> getSubJobs() {
+        if (subJobs == null) {
+            subJobs = makeSubJobs();
+            assert subJobs != null;
+            subJobs = Collections.unmodifiableList(subJobs);
+        }
+        return subJobs;
+    }
+
+    @Override
+    public final boolean isExecutable() {
+        return getSubJobs().isEmpty() == false;
+    }
+
+    @Override
+    public final void execute() {
+        final Selection selection = getEditorController().getSelection();
+        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
+        try {
+            fxomDocument.beginUpdate();
+            selection.beginUpdate();
+            oldSelectionGroup = selection.getGroup() == null ? null
+                    : selection.getGroup().clone();
+            for (Job subJob : getSubJobs()) {
+                subJob.execute();
+            }
+            newSelectionGroup = getNewSelectionGroup();
+            selection.select(newSelectionGroup);
+            selection.endUpdate();
+            fxomDocument.endUpdate();
+
+        } catch (CloneNotSupportedException x) {
+            // Emergency code
+            throw new RuntimeException(x);
+        }
+    }
+
+    @Override
+    public final void undo() {
+        final Selection selection = getEditorController().getSelection();
+        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        selection.beginUpdate();
+        for (int i = getSubJobs().size() - 1; i >= 0; i--) {
+            getSubJobs().get(i).undo();
+        }
+        selection.select(oldSelectionGroup);
+        selection.endUpdate();
+        fxomDocument.endUpdate();
+    }
+
+    @Override
+    public final void redo() {
+        final Selection selection = getEditorController().getSelection();
+        final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        selection.beginUpdate();
+        for (Job subJob : getSubJobs()) {
+            subJob.redo();
+        }
+        selection.select(newSelectionGroup);
+        selection.endUpdate();
+        fxomDocument.endUpdate();
+    }
+
+    protected abstract List<Job> makeSubJobs();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/CompositeJob2.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2014, 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 com.oracle.javafx.scenebuilder.kit.editor.job;
+
+import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import java.util.List;
+
+/**
+ * This Job handles a list of sub jobs and a description.
+ */
+public abstract class CompositeJob2 extends Job {
+
+    private String description;
+
+    public CompositeJob2(EditorController editorController) {
+        super(editorController);
+    }
+
+    @Override
+    public final String getDescription() {
+        if (description == null) {
+            description = makeDescription();
+            assert description != null;
+        }
+        return description;
+    }
+
+    public abstract List<Job> getSubJobs();
+    protected abstract String makeDescription();
+}
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/DeleteObjectJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/DeleteObjectJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -39,35 +39,29 @@
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMIntrinsic;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMPropertyC;
+import java.util.ArrayList;
+import java.util.List;
 import javafx.scene.chart.Axis;
 
 /**
  *
  */
-public class DeleteObjectJob extends Job {
-    
+public class DeleteObjectJob extends InlineDocumentJob {
+
     private final FXOMObject targetFxomObject;
-    private String description; // final but initialized lazily
-
-    private BatchJob subJob;
 
     public DeleteObjectJob(FXOMObject fxomObject, EditorController editorController) {
         super(editorController);
-        
+
         assert fxomObject != null;
-        
+
         this.targetFxomObject = fxomObject;
     }
-    
-    
-    /*
-     * Job
-     */
 
     @Override
     public boolean isExecutable() {
         final boolean result;
-        
+
         if (targetFxomObject == targetFxomObject.getFxomDocument().getFxomRoot()) {
             // targetFxomObject is the root
             result = true;
@@ -77,24 +71,22 @@
         } else {
             result = (targetFxomObject.getParentProperty() != null);
         }
-        
+
         return result;
     }
 
     @Override
-    public void execute() {
-        assert subJob == null;
-        
-        subJob = new BatchJob(getEditorController(), true /* shouldRefreshSceneGraph */, null);
-        
-        if (targetFxomObject.getParentProperty() == null) { 
+    protected List<Job> makeAndExecuteSubJobs() {
+
+        final List<Job> result = new ArrayList<>();
+        if (targetFxomObject.getParentProperty() == null) {
             /*
              * targetFxomObject is the root object
              */
-            subJob.addSubJob(new SetDocumentRootJob(null, getEditorController()));
-            
+            result.add(new SetDocumentRootJob(null, getEditorController()));
+
         } else {
-            
+
             /*
              * Two cases:
              *    1) targetFxomObject is the last value of its parent property
@@ -113,65 +105,50 @@
             if ((parentProperty.getValues().size() == 1) && (parentInstance != null)) {
                 // We make a job for removing the property
                 final Job removePropJob = new RemovePropertyJob(
-                        targetFxomObject.getParentProperty(), 
+                        targetFxomObject.getParentProperty(),
                         getEditorController());
-                subJob.addSubJob(removePropJob);
+                result.add(removePropJob);
             }
 
             // Then we make a job for removing the value
             final Job removeValueJob = new RemovePropertyValueJob(
-                    targetFxomObject, 
+                    targetFxomObject,
                     getEditorController());
-            subJob.addSubJob(removeValueJob);
-            
+            result.add(removeValueJob);
+        }
+
+        for (Job subJob : result) {
+            subJob.execute();
         }
         
-        // Now execute the batch
-        subJob.execute();
+        assert targetFxomObject.getParentProperty() == null;
         
-        assert targetFxomObject.getParentProperty() == null;
+        return result;
     }
 
     @Override
-    public void undo() {
-        assert subJob != null;
-        subJob.undo();
-    }
+    protected String makeDescription() {
+        final StringBuilder sb = new StringBuilder();
 
-    @Override
-    public void redo() {
-        assert subJob != null;
-        getEditorController().getSelection().clear();
-        subJob.redo();
-    }
+        sb.append("Delete ");
 
-    @Override
-    public String getDescription() {
-        if (description == null) {
-            final StringBuilder sb = new StringBuilder();
+        if (targetFxomObject instanceof FXOMInstance) {
+            final Object sceneGraphObject = targetFxomObject.getSceneGraphObject();
+            if (sceneGraphObject != null) {
+                sb.append(sceneGraphObject.getClass().getSimpleName());
+            } else {
+                sb.append("Unresolved Object");
+            }
+        } else if (targetFxomObject instanceof FXOMCollection) {
+            sb.append("Collection");
+        } else if (targetFxomObject instanceof FXOMIntrinsic) {
+            sb.append(targetFxomObject.getGlueElement().getTagName());
+        } else {
+            assert false;
+            sb.append(targetFxomObject.getClass().getSimpleName());
+        }
 
-            sb.append("Delete ");
-
-            if (targetFxomObject instanceof FXOMInstance) {
-                final Object sceneGraphObject = targetFxomObject.getSceneGraphObject();
-                if (sceneGraphObject != null) {
-                    sb.append(sceneGraphObject.getClass().getSimpleName());
-                } else {
-                    sb.append("Unresolved Object");
-                }
-            } else if (targetFxomObject instanceof FXOMCollection) {
-                sb.append("Collection");
-            } else if (targetFxomObject instanceof FXOMIntrinsic) {
-                sb.append(targetFxomObject.getGlueElement().getTagName());
-            } else {
-                assert false;
-                sb.append(targetFxomObject.getClass().getSimpleName());
-            }
-
-            description = sb.toString();
-        }
-        
-        return description;
+        return sb.toString();
     }
     
     FXOMObject getTargetFxomObject() {
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/DeleteObjectSelectionJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/DeleteObjectSelectionJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -34,8 +34,7 @@
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
 import com.oracle.javafx.scenebuilder.kit.editor.i18n.I18N;
 import com.oracle.javafx.scenebuilder.kit.editor.job.togglegroup.AdjustAllToggleGroupJob;
-import com.oracle.javafx.scenebuilder.kit.editor.job.v2.ClearSelectionJob;
-import com.oracle.javafx.scenebuilder.kit.editor.job.v2.CompositeJob;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
@@ -45,17 +44,12 @@
 /**
  * Delete job for ObjectSelectionGroup.
  */
-public class DeleteObjectSelectionJob extends CompositeJob {
+public class DeleteObjectSelectionJob extends BatchSelectionJob {
 
     public DeleteObjectSelectionJob(EditorController editorController) {
         super(editorController);
-        
     }
 
-    /*
-     * CompositeJob
-     */
-
     @Override
     protected List<Job> makeSubJobs() {
         final Selection selection = getEditorController().getSelection();
@@ -63,9 +57,6 @@
         final ObjectSelectionGroup osg = (ObjectSelectionGroup) selection.getGroup();
         final List<Job> result = new ArrayList<>();
         
-        // First we clear the selection
-        result.add(new ClearSelectionJob(getEditorController()));
-        
         // Next we make one DeleteObjectJob for each selected objects
         int cannotDeleteCount = 0;
         for (FXOMObject candidate : osg.getFlattenItems()) {
@@ -93,22 +84,27 @@
     @Override
     protected String makeDescription() {
         final String result;
-        final List<Job> subJobs = getSubJobs();
-        final int subJobCount = subJobs.size();
-        assert (subJobCount == 0) || (subJobCount >= 3);
+        final int subJobCount = getSubJobs().size();
+        assert (subJobCount == 0) || (subJobCount >= 2);
         
         switch (subJobCount) {
             case 0:
                 result = "Unexecutable Delete"; // NO18N
                 break;
-            case 3: // Clear + one delete + one AdjustAllToggleGroup
-                result = subJobs.get(1).getDescription();
+            case 2: // one delete + one AdjustAllToggleGroup
+                result = getSubJobs().get(0).getDescription();
                 break;
             default:
-                result = I18N.getString("label.action.edit.delete.n", subJobCount-2);
+                result = I18N.getString("label.action.edit.delete.n", subJobCount-1);
                 break;
         }
         
         return result;
     }
+
+    @Override
+    protected AbstractSelectionGroup getNewSelectionGroup() {
+        // Selection emptied
+        return null;
+    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/FitToParentObjectJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/FitToParentObjectJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,7 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMInstance;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMPropertyC;
 import com.oracle.javafx.scenebuilder.kit.metadata.Metadata;
@@ -56,13 +55,11 @@
 /**
  *
  */
-public class FitToParentObjectJob extends Job {
+public class FitToParentObjectJob extends BatchDocumentJob {
 
     private final FXOMInstance fxomInstance;
     private final FXOMPropertyC parentProperty;
     private final FXOMInstance parentInstance;
-    private final List<BatchModifyObjectJob> subJobs = new ArrayList<>();
-    private String description; // final but initialized lazily
 
     private enum Sizing {
 
@@ -81,88 +78,35 @@
         this.fxomInstance = fxomInstance;
         this.parentProperty = fxomInstance.getParentProperty();
         this.parentInstance = (parentProperty == null) ? null : parentProperty.getParentInstance();
-
-        buildSubJobs();
-    }
-
-    /*
-     * Job
-     */
-    @Override
-    public boolean isExecutable() {
-        return subJobs.isEmpty() == false;
     }
 
     @Override
-    public void execute() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (BatchModifyObjectJob subJob : subJobs) {
-            subJob.execute();
-        }
-        fxomDocument.endUpdate();
-    }
+    protected List<Job> makeSubJobs() {
 
-    @Override
-    public void undo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (int i = subJobs.size() - 1; i >= 0; i--) {
-            subJobs.get(i).undo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public void redo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (BatchModifyObjectJob subJob : subJobs) {
-            subJob.redo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public String getDescription() {
-        if (description == null) {
-            final StringBuilder sb = new StringBuilder();
-            sb.append("Fit to Parent ");
-            final Object sceneGraphObject = fxomInstance.getSceneGraphObject();
-            assert sceneGraphObject != null;
-            sb.append(sceneGraphObject.getClass().getSimpleName());
-            description = sb.toString();
-        }
-        return description;
-    }
-
-    private void buildSubJobs() {
+        final List<Job> result = new ArrayList<>();
 
         // Object cannot be root
         if (parentProperty == null) {
-            return; // subJobs is empty => isExecutable will return false
+            return result; // subJobs is empty => isExecutable will return false
         }
         // Object must be a node
         final Object childObject = fxomInstance.getSceneGraphObject();
         if ((childObject instanceof Node) == false) {
-            return; // subJobs is empty => isExecutable will return false
+            return result; // subJobs is empty => isExecutable will return false
         }
         // Preview version : Node must be resizable (as in SB 1.1)
         // TODO : if the object is not resizable, 
         // update its bounds but do not anchor it.
         final Node childNode = (Node) childObject;
         if (childNode.isResizable() == false) {
-            return; // subJobs is empty => isExecutable will return false
+            return result; // subJobs is empty => isExecutable will return false
         }
         // Preview version : Parent node must be an AnchorPane (as in SB 1.1)
         // TODO : if the object container is a Pane, 
         // update its bounds but do not anchor it.
         final Object parentObject = parentInstance.getSceneGraphObject();
         if ((parentObject instanceof AnchorPane) == false) {
-            return; // subJobs is empty => isExecutable will return false
+            return result; // subJobs is empty => isExecutable will return false
         }
 
         final AnchorPane parentNode = (AnchorPane) parentObject;
@@ -190,53 +134,64 @@
 
         // Modify pref size jobs
         //----------------------------------------------------------------------
-        final BatchModifyObjectJob prefWidthJob = modifyJob("prefWidth", prefWidthValue);
+        final Job prefWidthJob = modifyJob("prefWidth", prefWidthValue);
         if (prefWidthJob.isExecutable()) { // Update if new value differs from old one
-            subJobs.add(prefWidthJob);
+            result.add(prefWidthJob);
         }
-        final BatchModifyObjectJob prefHeightJob = modifyJob("prefHeight", prefHeightValue);
+        final Job prefHeightJob = modifyJob("prefHeight", prefHeightValue);
         if (prefHeightJob.isExecutable()) { // Update if new value differs from old one
-            subJobs.add(prefHeightJob);
+            result.add(prefHeightJob);
         }
 
         // Modify Anchors Jobs
         //----------------------------------------------------------------------
-        final BatchModifyObjectJob leftAnchorJob = modifyAnchorJob(Anchor.LEFT, leftAnchorValue);
+        final Job leftAnchorJob = modifyAnchorJob(Anchor.LEFT, leftAnchorValue);
         if (leftAnchorJob.isExecutable()) { // Update if new value differs from old one
-            subJobs.add(leftAnchorJob);
+            result.add(leftAnchorJob);
         }
-        final BatchModifyObjectJob topAnchorJob = modifyAnchorJob(Anchor.TOP, topAnchorValue);
+        final Job topAnchorJob = modifyAnchorJob(Anchor.TOP, topAnchorValue);
         if (topAnchorJob.isExecutable()) { // Update if new value differs from old one
-            subJobs.add(topAnchorJob);
+            result.add(topAnchorJob);
         }
         if (isResizableX) {
-            final BatchModifyObjectJob rightAnchorJob = modifyAnchorJob(Anchor.RIGHT, 0.0);
+            final Job rightAnchorJob = modifyAnchorJob(Anchor.RIGHT, 0.0);
             if (rightAnchorJob.isExecutable()) { // Update if new value differs from old one
-                subJobs.add(rightAnchorJob);
+                result.add(rightAnchorJob);
             }
         }
         if (isResizableY) {
-            final BatchModifyObjectJob bottomAnchorJob = modifyAnchorJob(Anchor.BOTTOM, 0.0);
+            final Job bottomAnchorJob = modifyAnchorJob(Anchor.BOTTOM, 0.0);
             if (bottomAnchorJob.isExecutable()) { // Update if new value differs from old one
-                subJobs.add(bottomAnchorJob);
+                result.add(bottomAnchorJob);
             }
         }
+        return result;
+    }
+    
+    @Override
+    protected String makeDescription() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("Fit to Parent ");
+        final Object sceneGraphObject = fxomInstance.getSceneGraphObject();
+        assert sceneGraphObject != null;
+        sb.append(sceneGraphObject.getClass().getSimpleName());
+        return sb.toString();
     }
 
-    private BatchModifyObjectJob modifyJob(final Class<?> clazz, final String name, double value) {
+    private Job modifyJob(final Class<?> clazz, final String name, double value) {
         final PropertyName pn = new PropertyName(name, clazz);
         final ValuePropertyMetadata vpm
                 = Metadata.getMetadata().queryValueProperty(fxomInstance, pn);
-        final BatchModifyObjectJob subJob = new BatchModifyObjectJob(
+        final ModifyObjectJob subJob = new ModifyObjectJob(
                 fxomInstance, vpm, value, getEditorController());
         return subJob;
     }
 
-    private BatchModifyObjectJob modifyJob(final String name, double value) {
+    private Job modifyJob(final String name, double value) {
         return modifyJob(null, name, value);
     }
 
-    private BatchModifyObjectJob modifyAnchorJob(final Anchor anchor, double value) {
+    private Job modifyAnchorJob(final Anchor anchor, double value) {
         final String name = anchor.name().toLowerCase(Locale.ROOT) + "Anchor";
         return modifyJob(AnchorPane.class, name, value);
     }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/FitToParentSelectionJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/FitToParentSelectionJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,10 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.GridSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMInstance;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import java.util.ArrayList;
@@ -46,70 +46,16 @@
 /**
  *
  */
-public class FitToParentSelectionJob extends Job {
-
-    private final List<FitToParentObjectJob> subJobs = new ArrayList<>();
-    private String description; // Final but constructed lazily
+public class FitToParentSelectionJob extends BatchSelectionJob {
 
     public FitToParentSelectionJob(EditorController editorController) {
         super(editorController);
-        buildSubJobs();
-    }
-
-    /*
-     * Job
-     */
-    @Override
-    public boolean isExecutable() {
-        return subJobs.isEmpty() == false;
     }
 
     @Override
-    public void execute() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (FitToParentObjectJob subJob : subJobs) {
-            subJob.execute();
-        }
-        fxomDocument.endUpdate();
-    }
+    protected List<Job> makeSubJobs() {
 
-    @Override
-    public void undo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (int i = subJobs.size() - 1; i >= 0; i--) {
-            subJobs.get(i).undo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public void redo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (FitToParentObjectJob subJob : subJobs) {
-            subJob.redo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public String getDescription() {
-        if (description == null) {
-            buildDescription();
-        }
-
-        return description;
-    }
-
-    /*
-     * Private
-     */
-    private void buildSubJobs() {
+        final List<Job> result = new ArrayList<>();
 
         final Set<FXOMInstance> candidates = new HashSet<>();
         final Selection selection = getEditorController().getSelection();
@@ -132,34 +78,44 @@
             final FitToParentObjectJob subJob
                     = new FitToParentObjectJob(candidate, getEditorController());
             if (subJob.isExecutable()) {
-                subJobs.add(subJob);
+                result.add(subJob);
             } else {
                 // Should we do best effort here ?
                 // Do not clear subJobs list but keep only executable ones
-                subJobs.clear(); // -> isExecutable() will return false
+                result.clear(); // -> isExecutable() will return false
                 break;
             }
         }
+        return result;
     }
 
-    private void buildDescription() {
-        switch (subJobs.size()) {
+    @Override
+    protected String makeDescription() {
+        final String result;
+        switch (getSubJobs().size()) {
             case 0:
-                description = "Unexecutable Fit To Parent"; // NO18N
+                result = "Unexecutable Fit To Parent"; // NO18N
                 break;
             case 1:
-                description = subJobs.get(0).getDescription();
+                result = getSubJobs().get(0).getDescription();
                 break;
             default:
-                description = makeMultipleSelectionDescription();
+                result = makeMultipleSelectionDescription();
                 break;
         }
+        return result;
+    }
+
+    @Override
+    protected AbstractSelectionGroup getNewSelectionGroup() {
+        // Selection unchanged
+        return getOldSelectionGroup();
     }
 
     private String makeMultipleSelectionDescription() {
         final StringBuilder result = new StringBuilder();
         result.append("Fit To Parent ");
-        result.append(subJobs.size());
+        result.append(getSubJobs().size());
         result.append(" Objects");
         return result.toString();
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/InlineDocumentJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2014, 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 com.oracle.javafx.scenebuilder.kit.editor.job;
+
+import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This Job updates the FXOM document at execution time. The selection is not
+ * updated.
+ *
+ * The sub jobs are created and executed just after.
+ */
+public abstract class InlineDocumentJob extends CompositeJob2 {
+
+    private List<Job> subJobs;
+
+    public InlineDocumentJob(EditorController editorController) {
+        super(editorController);
+    }
+
+    @Override
+    public final List<Job> getSubJobs() {
+        return subJobs;
+    }
+
+    @Override
+    public final void execute() {
+        final FXOMDocument fxomDocument
+                = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        subJobs = Collections.unmodifiableList(makeAndExecuteSubJobs());
+        fxomDocument.endUpdate();
+    }
+
+    @Override
+    public final void undo() {
+        final FXOMDocument fxomDocument
+                = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        for (int i = getSubJobs().size() - 1; i >= 0; i--) {
+            getSubJobs().get(i).undo();
+        }
+        fxomDocument.endUpdate();
+    }
+
+    @Override
+    public final void redo() {
+        final FXOMDocument fxomDocument
+                = getEditorController().getFxomDocument();
+        fxomDocument.beginUpdate();
+        for (Job subJob : getSubJobs()) {
+            subJob.redo();
+        }
+        fxomDocument.endUpdate();
+    }
+
+    protected abstract List<Job> makeAndExecuteSubJobs();
+}
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/PasteJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/PasteJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -34,9 +34,8 @@
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
 import com.oracle.javafx.scenebuilder.kit.editor.i18n.I18N;
 import com.oracle.javafx.scenebuilder.kit.editor.job.togglegroup.AdjustAllToggleGroupJob;
-import com.oracle.javafx.scenebuilder.kit.editor.job.v2.ClearSelectionJob;
-import com.oracle.javafx.scenebuilder.kit.editor.job.v2.CompositeJob;
-import com.oracle.javafx.scenebuilder.kit.editor.job.v2.UpdateSelectionJob;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMCollection;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
@@ -52,19 +51,16 @@
 /**
  *
  */
-public class PasteJob extends CompositeJob {
+public class PasteJob extends BatchSelectionJob {
     
     private final List<Job> insertJobs = new ArrayList<>();
     private FXOMObject targetObject;
+    private List<FXOMObject> newObjects;
 
     public PasteJob(EditorController editorController) {
         super(editorController);
     }
 
-    /*
-     * CompositeJob
-     */
-    
     @Override
     protected List<Job> makeSubJobs() {
         final List<Job> result = new ArrayList<>();
@@ -75,8 +71,7 @@
             // Retrieve the FXOMObjects from the clipboard
             final ClipboardDecoder clipboardDecoder
                     = new ClipboardDecoder(Clipboard.getSystemClipboard());
-            final List<FXOMObject> newObjects 
-                    = clipboardDecoder.decode(fxomDocument);
+            newObjects = clipboardDecoder.decode(fxomDocument);
             assert newObjects != null; // But possible empty
 
             if (newObjects.isEmpty() == false) {
@@ -103,14 +98,12 @@
                 if (targetObject == null) {
                     // Document is empty : only one object can be inserted
                     if (newObjects.size() == 1) {
-                        result.add(new ClearSelectionJob(getEditorController()));
                         final FXOMObject newObject0 = newObjects.get(0);
                         final SetDocumentRootJob subJob = new SetDocumentRootJob(
                                 newObject0,
                                 getEditorController());
                         result.add(subJob);
                         result.add(new AdjustAllToggleGroupJob(getEditorController()));
-                        result.add(new UpdateSelectionJob(newObject0, getEditorController()));
                         insertJobs.add(subJob);
                     }
                 } else {
@@ -126,7 +119,6 @@
                         } else {
                             relocateDelta = 0.0;
                         }
-                        result.add(new ClearSelectionJob(getEditorController()));
                         for (FXOMObject newObject : newObjects) {
                             final InsertAsSubComponentJob subJob = new InsertAsSubComponentJob(
                                     newObject,
@@ -147,7 +139,6 @@
                             }
                         }
                         result.add(new AdjustAllToggleGroupJob(getEditorController()));
-                        result.add(new UpdateSelectionJob(newObjects, getEditorController()));
                     }
                 }
             }
@@ -170,6 +161,16 @@
         return result;
     }
 
+    @Override
+    protected AbstractSelectionGroup getNewSelectionGroup() {
+        assert newObjects != null; // But possibly empty
+        if (newObjects.isEmpty()) {
+            return null;
+        } else {
+            return new ObjectSelectionGroup(newObjects, newObjects.iterator().next(), null);
+        }
+    }
+
     /*
      * Private
      */
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/UseComputedSizesObjectJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/UseComputedSizesObjectJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,7 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMInstance;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import com.oracle.javafx.scenebuilder.kit.metadata.Metadata;
@@ -50,106 +49,62 @@
 /**
  *
  */
-public class UseComputedSizesObjectJob extends Job {
+public class UseComputedSizesObjectJob extends BatchDocumentJob {
 
     private final FXOMInstance fxomInstance;
-    private final List<BatchModifyObjectJob> subJobs = new ArrayList<>();
-    private String description; // final but initialized lazily
 
     public UseComputedSizesObjectJob(FXOMInstance fxomInstance, EditorController editorController) {
         super(editorController);
         assert fxomInstance != null;
         this.fxomInstance = fxomInstance;
-        buildSubJobs();
-    }
-
-    /*
-     * Job
-     */
-    @Override
-    public boolean isExecutable() {
-        return subJobs.isEmpty() == false;
     }
 
     @Override
-    public void execute() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (BatchModifyObjectJob subJob : subJobs) {
-            subJob.execute();
-        }
-        fxomDocument.endUpdate();
-    }
+    protected List<Job> makeSubJobs() {
 
-    @Override
-    public void undo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (int i = subJobs.size() - 1; i >= 0; i--) {
-            subJobs.get(i).undo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public void redo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (BatchModifyObjectJob subJob : subJobs) {
-            subJob.redo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public String getDescription() {
-        if (description == null) {
-            final StringBuilder sb = new StringBuilder();
-            sb.append("Use Computed Sizes on ");
-            final Object sceneGraphObject = fxomInstance.getSceneGraphObject();
-            assert sceneGraphObject != null;
-            sb.append(sceneGraphObject.getClass().getSimpleName());
-            description = sb.toString();
-        }
-        return description;
-    }
-
-    private void buildSubJobs() {
-
+        final List<Job> result = new ArrayList<>();
         final Object sceneGraphObject = fxomInstance.getSceneGraphObject();
 
         // RowConstraints: only height property is meaningfull
         if (sceneGraphObject instanceof RowConstraints) {
-            subJobs.addAll(modifyHeightJobs(fxomInstance));
+            result.addAll(modifyHeightJobs(fxomInstance));
         } //
         // ColumnConstraints: only width property is meaningfull
         else if (sceneGraphObject instanceof ColumnConstraints) {
-            subJobs.addAll(modifyWidthJobs(fxomInstance));
+            result.addAll(modifyWidthJobs(fxomInstance));
         } //
         // Region: both height and width properties are meaningfull
         else if (sceneGraphObject instanceof Region) {
             // First remove anchors if any
-            subJobs.addAll(removeAnchorsJobs());
+            result.addAll(removeAnchorsJobs());
             // Then modify height / width
-            subJobs.addAll(modifyHeightJobs(fxomInstance));
-            subJobs.addAll(modifyWidthJobs(fxomInstance));
+            result.addAll(modifyHeightJobs(fxomInstance));
+            result.addAll(modifyWidthJobs(fxomInstance));
         } //
         // Use computed sizes on ImageView => set the fit size to (0,0)
         else if (sceneGraphObject instanceof ImageView) {
-            subJobs.addAll(modifyFitHeightJob(fxomInstance));
-            subJobs.addAll(modifyFitWidthJob(fxomInstance));
+            result.addAll(modifyFitHeightJob(fxomInstance));
+            result.addAll(modifyFitWidthJob(fxomInstance));
         } //
         // TableColumnBase: only width property is meaningfull
         else if (sceneGraphObject instanceof TableColumnBase) {
-            subJobs.addAll(modifyWidthJobs(fxomInstance));
+            result.addAll(modifyWidthJobs(fxomInstance));
         }
+        return result;
     }
 
-    private List<BatchModifyObjectJob> removeAnchorsJobs() {
-        final List<BatchModifyObjectJob> result = new ArrayList<>();
+    @Override
+    protected String makeDescription() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("Use Computed Sizes on ");
+        final Object sceneGraphObject = fxomInstance.getSceneGraphObject();
+        assert sceneGraphObject != null;
+        sb.append(sceneGraphObject.getClass().getSimpleName());
+        return sb.toString();
+    }
+
+    private List<Job> removeAnchorsJobs() {
+        final List<Job> result = new ArrayList<>();
         final FXOMObject parentObject = fxomInstance.getParentObject();
 
         if (parentObject != null && parentObject.getSceneGraphObject() instanceof AnchorPane) {
@@ -170,7 +125,7 @@
                 topAnchorVPM, rightAnchorVPM, bottomAnchorVPM, leftAnchorVPM}) {
 
                 if (vpm.getValueObject(fxomInstance) != null) {
-                    final BatchModifyObjectJob subJob = new BatchModifyObjectJob(
+                    final ModifyObjectJob subJob = new ModifyObjectJob(
                             fxomInstance, vpm, null, getEditorController());
                     result.add(subJob);
                 }
@@ -179,8 +134,8 @@
         return result;
     }
 
-    private List<BatchModifyObjectJob> modifyHeightJobs(final FXOMInstance candidate) {
-        final List<BatchModifyObjectJob> result = new ArrayList<>();
+    private List<Job> modifyHeightJobs(final FXOMInstance candidate) {
+        final List<Job> result = new ArrayList<>();
 
         final PropertyName maxHeight = new PropertyName("maxHeight");
         final PropertyName minHeight = new PropertyName("minHeight");
@@ -193,11 +148,11 @@
         final ValuePropertyMetadata prefHeightVPM
                 = Metadata.getMetadata().queryValueProperty(candidate, prefHeight);
 
-        final BatchModifyObjectJob maxHeightJob = new BatchModifyObjectJob(
+        final ModifyObjectJob maxHeightJob = new ModifyObjectJob(
                 candidate, maxHeightVPM, -1.0, getEditorController());
-        final BatchModifyObjectJob minHeightJob = new BatchModifyObjectJob(
+        final ModifyObjectJob minHeightJob = new ModifyObjectJob(
                 candidate, minHeightVPM, -1.0, getEditorController());
-        final BatchModifyObjectJob prefHeightJob = new BatchModifyObjectJob(
+        final ModifyObjectJob prefHeightJob = new ModifyObjectJob(
                 candidate, prefHeightVPM, -1.0, getEditorController());
 
         if (maxHeightJob.isExecutable()) {
@@ -212,8 +167,8 @@
         return result;
     }
 
-    private List<BatchModifyObjectJob> modifyWidthJobs(final FXOMInstance candidate) {
-        final List<BatchModifyObjectJob> result = new ArrayList<>();
+    private List<Job> modifyWidthJobs(final FXOMInstance candidate) {
+        final List<Job> result = new ArrayList<>();
 
         final PropertyName maxWidth = new PropertyName("maxWidth");
         final PropertyName minWidth = new PropertyName("minWidth");
@@ -226,11 +181,11 @@
         final ValuePropertyMetadata prefWidthVPM
                 = Metadata.getMetadata().queryValueProperty(candidate, prefWidth);
 
-        final BatchModifyObjectJob maxWidthJob = new BatchModifyObjectJob(
+        final ModifyObjectJob maxWidthJob = new ModifyObjectJob(
                 candidate, maxWidthVPM, -1.0, getEditorController());
-        final BatchModifyObjectJob minWidthJob = new BatchModifyObjectJob(
+        final ModifyObjectJob minWidthJob = new ModifyObjectJob(
                 candidate, minWidthVPM, -1.0, getEditorController());
-        final BatchModifyObjectJob prefWidthJob = new BatchModifyObjectJob(
+        final ModifyObjectJob prefWidthJob = new ModifyObjectJob(
                 candidate, prefWidthVPM, -1.0, getEditorController());
 
         if (maxWidthJob.isExecutable()) {
@@ -245,13 +200,13 @@
         return result;
     }
 
-    private List<BatchModifyObjectJob> modifyFitHeightJob(final FXOMInstance candidate) {
-        final List<BatchModifyObjectJob> result = new ArrayList<>();
+    private List<Job> modifyFitHeightJob(final FXOMInstance candidate) {
+        final List<Job> result = new ArrayList<>();
 
         final PropertyName fitHeight = new PropertyName("fitHeight");
         final ValuePropertyMetadata fitHeightVPM
                 = Metadata.getMetadata().queryValueProperty(candidate, fitHeight);
-        final BatchModifyObjectJob fitHeightJob = new BatchModifyObjectJob(
+        final ModifyObjectJob fitHeightJob = new ModifyObjectJob(
                 candidate, fitHeightVPM, 0.0, getEditorController());
 
         if (fitHeightJob.isExecutable()) {
@@ -260,13 +215,13 @@
         return result;
     }
 
-    private List<BatchModifyObjectJob> modifyFitWidthJob(final FXOMInstance candidate) {
-        final List<BatchModifyObjectJob> result = new ArrayList<>();
+    private List<Job> modifyFitWidthJob(final FXOMInstance candidate) {
+        final List<Job> result = new ArrayList<>();
 
         final PropertyName fitWidth = new PropertyName("fitWidth");
         final ValuePropertyMetadata fitWidthVPM
                 = Metadata.getMetadata().queryValueProperty(candidate, fitWidth);
-        final BatchModifyObjectJob fitWidthJob = new BatchModifyObjectJob(
+        final ModifyObjectJob fitWidthJob = new ModifyObjectJob(
                 candidate, fitWidthVPM, 0.0, getEditorController());
 
         if (fitWidthJob.isExecutable()) {
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/UseComputedSizesSelectionJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/UseComputedSizesSelectionJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,10 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
+import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.GridSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMInstance;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import com.oracle.javafx.scenebuilder.kit.metadata.util.DesignHierarchyMask;
@@ -47,70 +47,16 @@
 /**
  *
  */
-public class UseComputedSizesSelectionJob extends Job {
-
-    private final List<UseComputedSizesObjectJob> subJobs = new ArrayList<>();
-    private String description; // Final but constructed lazily
+public class UseComputedSizesSelectionJob extends BatchSelectionJob {
 
     public UseComputedSizesSelectionJob(EditorController editorController) {
         super(editorController);
-        buildSubJobs();
-    }
-
-    /*
-     * Job
-     */
-    @Override
-    public boolean isExecutable() {
-        return subJobs.isEmpty() == false;
     }
 
     @Override
-    public void execute() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (UseComputedSizesObjectJob subJob : subJobs) {
-            subJob.execute();
-        }
-        fxomDocument.endUpdate();
-    }
+    protected List<Job> makeSubJobs() {
 
-    @Override
-    public void undo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (int i = subJobs.size() - 1; i >= 0; i--) {
-            subJobs.get(i).undo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public void redo() {
-        final FXOMDocument fxomDocument
-                = getEditorController().getFxomDocument();
-        fxomDocument.beginUpdate();
-        for (UseComputedSizesObjectJob subJob : subJobs) {
-            subJob.redo();
-        }
-        fxomDocument.endUpdate();
-    }
-
-    @Override
-    public String getDescription() {
-        if (description == null) {
-            buildDescription();
-        }
-
-        return description;
-    }
-
-    /*
-     * Private
-     */
-    private void buildSubJobs() {
+        final List<Job> result = new ArrayList<>();
 
         final Set<FXOMInstance> candidates = new HashSet<>();
         final Selection selection = getEditorController().getSelection();
@@ -136,7 +82,7 @@
                         break;
                     default:
                         assert false;
-                        return;
+                        return result;
                 }
                 assert constraints instanceof FXOMInstance;
                 candidates.add((FXOMInstance) constraints);
@@ -150,29 +96,40 @@
             final UseComputedSizesObjectJob subJob
                     = new UseComputedSizesObjectJob(candidate, getEditorController());
             if (subJob.isExecutable()) {
-                subJobs.add(subJob);
+                result.add(subJob);
             }
         }
+
+        return result;
     }
 
-    private void buildDescription() {
-        switch (subJobs.size()) {
+    @Override
+    protected String makeDescription() {
+        final String result;
+        switch (getSubJobs().size()) {
             case 0:
-                description = "Unexecutable Use Computed Sizes"; // NO18N
+                result = "Unexecutable Use Computed Sizes"; // NO18N
                 break;
             case 1:
-                description = subJobs.get(0).getDescription();
+                result = getSubJobs().get(0).getDescription();
                 break;
             default:
-                description = makeMultipleSelectionDescription();
+                result = makeMultipleSelectionDescription();
                 break;
         }
+        return result;
+    }
+
+    @Override
+    protected AbstractSelectionGroup getNewSelectionGroup() {
+        // Selection unchanged
+        return getOldSelectionGroup();
     }
 
     private String makeMultipleSelectionDescription() {
         final StringBuilder result = new StringBuilder();
         result.append("Use Computed Sizes on ");
-        result.append(subJobs.size());
+        result.append(getSubJobs().size());
         result.append(" Objects");
         return result.toString();
     }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/AbstractWrapInContentJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/AbstractWrapInContentJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -55,7 +55,7 @@
     }
 
     @Override
-    protected List<Job> wrapInJobs(final List<FXOMObject> children) {
+    protected List<Job> wrapChildrenJobs(final List<FXOMObject> children) {
 
         final List<Job> jobs = new ArrayList<>();
 
@@ -73,12 +73,12 @@
         //------------------------------------------------------------------
         // The selection is multiple :
         // - we set the new container CONTENT property to a new AnchorPane sub container
-        // - we update the children bounds and add them to the new AnchorPane sub container
+        // - we add the children to the new AnchorPane sub container
         //------------------------------------------------------------------
         if (children.size() > 1) {
 
             // Create the AnchorPane sub container
-            final FXOMInstance subContainer = makeContainerInstance(AnchorPane.class);
+            final FXOMInstance subContainer = makeNewContainerInstance(AnchorPane.class);
             final DesignHierarchyMask subContainerMask
                     = new DesignHierarchyMask(subContainer);
 
@@ -97,16 +97,11 @@
                     getEditorController());
             jobs.add(addValueJob);
 
-            // Update children bounds before adding them to the sub container
-            assert subContainerMask.isFreeChildPositioning();
-            final List<Job> modifyChildrenLayoutJobs
-                    = modifyChildrenLayoutJobs(children);
-            jobs.addAll(modifyChildrenLayoutJobs);
+            // Update children before adding them to the sub container
+            jobs.addAll(modifyChildrenJobs(subContainer, children));
 
             // Add the children to the sub container
-            final List<Job> addChildrenJobs
-                    = addChildrenToPropertyJobs(subContainerProperty, children);
-            jobs.addAll(addChildrenJobs);
+            jobs.addAll(addChildrenJobs(subContainerProperty, children));
 
             // Add the sub container property to the sub container instance
             assert subContainerProperty.getParentInstance() == null;
@@ -122,13 +117,10 @@
         //------------------------------------------------------------------
         else {
             // Update children before adding them to the new container
-            final List<Job> modifyChildrenJobs = modifyChildrenJobs(children);
-            jobs.addAll(modifyChildrenJobs);
+            jobs.addAll(modifyChildrenJobs(newContainer, children));
 
             // Add the children to the new container
-            final List<Job> addChildrenJobs
-                    = addChildrenToPropertyJobs(newContainerProperty, children);
-            jobs.addAll(addChildrenJobs);
+            jobs.addAll(addChildrenJobs(newContainerProperty, children));
         }
 
         // Add the new container property to the new container instance
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/AbstractWrapInJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/AbstractWrapInJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -33,7 +33,6 @@
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
 import com.oracle.javafx.scenebuilder.kit.editor.job.BatchJob;
-import com.oracle.javafx.scenebuilder.kit.editor.job.DeleteObjectJob;
 import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
 import com.oracle.javafx.scenebuilder.kit.editor.job.JobUtils;
 import com.oracle.javafx.scenebuilder.kit.editor.job.ModifyFxControllerJob;
@@ -41,6 +40,7 @@
 import com.oracle.javafx.scenebuilder.kit.editor.job.SetDocumentRootJob;
 import com.oracle.javafx.scenebuilder.kit.editor.job.ToggleFxRootJob;
 import com.oracle.javafx.scenebuilder.kit.editor.job.v2.AddPropertyValueJob;
+import com.oracle.javafx.scenebuilder.kit.editor.job.v2.RemovePropertyValueJob;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.AbstractSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.ObjectSelectionGroup;
 import com.oracle.javafx.scenebuilder.kit.editor.selection.Selection;
@@ -58,7 +58,6 @@
 import javafx.geometry.Point2D;
 import javafx.scene.Node;
 import javafx.scene.Parent;
-import javafx.scene.layout.Region;
 
 /**
  * Main class used for the wrap jobs.
@@ -187,43 +186,36 @@
         assert asg instanceof ObjectSelectionGroup; // Because of (1)
         final ObjectSelectionGroup osg = (ObjectSelectionGroup) asg;
 
-        // Retrieve the current container
+        // Retrieve the old container
         oldContainer = (FXOMInstance) osg.getAncestor();
 
         // Retrieve the children to be wrapped
         final List<FXOMObject> children = osg.getSortedItems();
 
         // Create the new container
-        newContainer = makeContainerInstance();
+        newContainer = makeNewContainerInstance();
+        // Update the new container
+        modifyNewContainer(children);
 
         //==================================================================
-        // STEP #1 UPDATE THE NEW CONTAINER
+        // STEP #1
         //==================================================================
         // If the target object is NOT the FXOM root :
-        // - we update the new container bounds and add it to the current container
-        // - we remove the children from the current container
+        // - we add the new container to the old container
+        // - we remove the children from the old container
         //------------------------------------------------------------------
         if (oldContainer != null) {
 
-            // Retrieve the current container property name in use
+            // Retrieve the old container property name in use
             final PropertyName oldContainerPropertyName
                     = WrapJobUtils.getContainerPropertyName(oldContainer, children);
-            // Retrieve the current container property (already defined and not null)
+            // Retrieve the old container property (already defined and not null)
             final FXOMPropertyC oldContainerProperty
                     = (FXOMPropertyC) oldContainer.getProperties().get(oldContainerPropertyName);
             assert oldContainerProperty != null
                     && oldContainerProperty.getParentInstance() != null;
 
-            // Update the new container before adding it to the old container
-            final DesignHierarchyMask oldContainerMask
-                    = new DesignHierarchyMask(oldContainer);
-            if (oldContainerMask.isFreeChildPositioning()
-                    && Region.class.isAssignableFrom(newContainer.getDeclaredClass())) { // Do not include Group new container
-                modifyContainerLayout(children);
-            }
-            modifyContainer(children);
-
-            // Add the new container to the current container
+            // Add the new container to the old container
             final int newContainerIndex = getIndex(oldContainer, children);
             final Job newContainerAddValueJob = new AddPropertyValueJob(
                     newContainer,
@@ -231,9 +223,9 @@
                     newContainerIndex, getEditorController());
             batchJob.addSubJob(newContainerAddValueJob);
 
-            // Remove children from the current container
-            final List<Job> deleteChildrenJobs = deleteChildrenJobs(children);
-            batchJob.addSubJobs(deleteChildrenJobs);
+            // Remove children from the old container
+            final List<Job> removeChildrenJobs = removeChildrenJobs(oldContainerProperty, children);
+            batchJob.addSubJobs(removeChildrenJobs);
         } //
         //------------------------------------------------------------------
         // If the target object is the FXOM root :
@@ -272,15 +264,24 @@
         }
 
         //==================================================================
-        // STEP #2 UPDATE THE NEW CONTAINER CHILDREN
+        // STEP #2
         //==================================================================
         // This step depends on the new container property 
         // (either either the SUB COMPONENT or the CONTENT property)
         //------------------------------------------------------------------
-        batchJob.addSubJobs(wrapInJobs(children));
+        batchJob.addSubJobs(wrapChildrenJobs(children));
     }
 
-    protected List<Job> addChildrenToPropertyJobs(
+    /**
+     * Used to wrap the specified children in the new container. May use either
+     * the SUB COMPONENT or the CONTENT property.
+     *
+     * @param children The children to be wrapped.
+     * @return A list of jobs.
+     */
+    protected abstract List<Job> wrapChildrenJobs(final List<FXOMObject> children);
+
+    protected List<Job> addChildrenJobs(
             final FXOMPropertyC containerProperty,
             final Collection<FXOMObject> children) {
 
@@ -298,91 +299,89 @@
         return jobs;
     }
 
-    protected List<Job> deleteChildrenJobs(final List<FXOMObject> children) {
+    protected List<Job> removeChildrenJobs(
+            final FXOMPropertyC containerProperty,
+            final List<FXOMObject> children) {
 
         final List<Job> jobs = new ArrayList<>();
         for (FXOMObject child : children) {
             assert child instanceof FXOMInstance;
-            final Job deleteObjectJob = new DeleteObjectJob(
-                    child, getEditorController());
-            jobs.add(deleteObjectJob);
+            final Job removeValueJob = new RemovePropertyValueJob(
+                    child,
+                    getEditorController());
+            jobs.add(removeValueJob);
         }
         return jobs;
     }
 
     /**
-     * Used to wrap the children in the new container.
-     * May use either the SUB COMPONENT or the CONTENT property.
+     * Used to modify the specified children.
      *
-     * @param children
-     * @return
-     */
-    protected abstract List<Job> wrapInJobs(final List<FXOMObject> children);
-
-    /**
-     * Used to modify the children before adding them to this container.
-     *
+     * @param container
      * @param children The children to be modified.
      * @return A list of jobs.
      */
-    protected abstract List<Job> modifyChildrenJobs(final List<FXOMObject> children);
-
-    /**
-     * Used to modify this container before adding it to the specified container.
-     *
-     * Note that unlike the modifyChildrenJobs method, we must not use any job
-     * here but directly set the properties.
-     * Indeed, the new container is not yet part of the model.
-     *
-     * @param children The children of this container.
-     */
-    protected abstract void modifyContainer(final List<FXOMObject> children);
-
-    /**
-     * Used to modify the children layout properties.
-     *
-     * @param children The children.
-     * @return
-     */
-    protected List<Job> modifyChildrenLayoutJobs(final List<FXOMObject> children) {
+    protected List<Job> modifyChildrenJobs(final FXOMInstance container, final List<FXOMObject> children) {
 
         final List<Job> jobs = new ArrayList<>();
-        final Bounds unionOfBounds = WrapJobUtils.getUnionOfBounds(children);
+        final DesignHierarchyMask newContainerMask = new DesignHierarchyMask(container);
 
-        for (FXOMObject child : children) {
-            assert child.getSceneGraphObject() instanceof Node;
-            final Node childNode = (Node) child.getSceneGraphObject();
-            final Bounds childBounds = childNode.getLayoutBounds();
+        if (newContainerMask.isFreeChildPositioning()) {
+            final Bounds unionOfBounds = WrapJobUtils.getUnionOfBounds(children);
 
-            final Point2D point = childNode.localToParent(
-                    childBounds.getMinX(), childBounds.getMinY());
-            double layoutX = point.getX() - unionOfBounds.getMinX();
-            double layoutY = point.getY() - unionOfBounds.getMinY();
-            final ModifyObjectJob modifyLayoutX = WrapJobUtils.modifyObjectJob(
-                    (FXOMInstance) child, "layoutX", layoutX, getEditorController());
-            jobs.add(modifyLayoutX);
-            final ModifyObjectJob modifyLayoutY = WrapJobUtils.modifyObjectJob(
-                    (FXOMInstance) child, "layoutY", layoutY, getEditorController());
-            jobs.add(modifyLayoutY);
+            for (FXOMObject child : children) {
+                assert child.getSceneGraphObject() instanceof Node;
+                final Node childNode = (Node) child.getSceneGraphObject();
+                final Bounds childBounds = childNode.getLayoutBounds();
+
+                final Point2D point = childNode.localToParent(
+                        childBounds.getMinX(), childBounds.getMinY());
+                double layoutX = point.getX() - unionOfBounds.getMinX();
+                double layoutY = point.getY() - unionOfBounds.getMinY();
+                final ModifyObjectJob modifyLayoutX = WrapJobUtils.modifyObjectJob(
+                        (FXOMInstance) child, "layoutX", layoutX, getEditorController());
+                jobs.add(modifyLayoutX);
+                final ModifyObjectJob modifyLayoutY = WrapJobUtils.modifyObjectJob(
+                        (FXOMInstance) child, "layoutY", layoutY, getEditorController());
+                jobs.add(modifyLayoutY);
+            }
+        } else {
+            for (FXOMObject child : children) {
+                assert child.getSceneGraphObject() instanceof Node;
+
+                final ModifyObjectJob modifyLayoutX = WrapJobUtils.modifyObjectJob(
+                        (FXOMInstance) child, "layoutX", 0.0, getEditorController());
+                jobs.add(modifyLayoutX);
+                final ModifyObjectJob modifyLayoutY = WrapJobUtils.modifyObjectJob(
+                        (FXOMInstance) child, "layoutY", 0.0, getEditorController());
+                jobs.add(modifyLayoutY);
+            }
         }
         return jobs;
     }
 
     /**
-     * Used to modify the container layout properties.
+     * Used to modify the new container.
+     *
+     * Note that unlike the modifyChildrenJobs method, we do not use any job
+     * here but directly set the properties.
      *
      * @param children The children.
      */
-    protected void modifyContainerLayout(final List<FXOMObject> children) {
-
-        final Bounds unionOfBounds = WrapJobUtils.getUnionOfBounds(children);
-        JobUtils.setLayoutX(newContainer, Node.class, unionOfBounds.getMinX());
-        JobUtils.setLayoutY(newContainer, Node.class, unionOfBounds.getMinY());
+    protected void modifyNewContainer(final List<FXOMObject> children) {
+        if (oldContainer != null) {
+            final DesignHierarchyMask oldContainerMask = new DesignHierarchyMask(oldContainer);
+            if (oldContainerMask.isFreeChildPositioning()) {
+                final Bounds unionOfBounds = WrapJobUtils.getUnionOfBounds(children);
+                JobUtils.setLayoutX(newContainer, Node.class, unionOfBounds.getMinX());
+                JobUtils.setLayoutY(newContainer, Node.class, unionOfBounds.getMinY());
 //            JobUtils.setMinHeight(newContainer, Region.class, unionOfBounds.getHeight());
 //            JobUtils.setMinWidth(newContainer, Region.class, unionOfBounds.getMinY());
+            }
+        }
     }
 
-    protected FXOMInstance makeContainerInstance(final Class<?> containerClass) {
+    protected FXOMInstance makeNewContainerInstance(final Class<?> containerClass) {
         // Create new container instance
         final FXOMDocument newDocument = new FXOMDocument();
         final FXOMInstance result = new FXOMInstance(newDocument, containerClass);
@@ -392,13 +391,13 @@
         return result;
     }
 
-    private FXOMInstance makeContainerInstance() {
-        return makeContainerInstance(newContainerClass);
+    private FXOMInstance makeNewContainerInstance() {
+        return AbstractWrapInJob.this.makeNewContainerInstance(newContainerClass);
     }
 
     /**
-     * Returns the index to be used in order to add the new container
-     * to the current container.
+     * Returns the index to be used in order to add the new container to the old
+     * container.
      *
      * @param container
      * @param fxomObjects
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/AbstractWrapInSubComponentJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/AbstractWrapInSubComponentJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -43,7 +43,8 @@
 import java.util.List;
 
 /**
- * Main class used for the wrap jobs using the new container SUB COMPONENT property.
+ * Main class used for the wrap jobs using the new container SUB COMPONENT
+ * property.
  */
 public abstract class AbstractWrapInSubComponentJob extends AbstractWrapInJob {
 
@@ -52,7 +53,7 @@
     }
 
     @Override
-    protected List<Job> wrapInJobs(final List<FXOMObject> children) {
+    protected List<Job> wrapChildrenJobs(final List<FXOMObject> children) {
 
         final List<Job> jobs = new ArrayList<>();
 
@@ -68,15 +69,12 @@
                 newContainer.getFxomDocument(), newContainerPropertyName);
 
         // Update children before adding them to the new container
-        final List<Job> modifyChildrenJobs = modifyChildrenJobs(children);
-        jobs.addAll(modifyChildrenJobs);
+        jobs.addAll(modifyChildrenJobs(newContainer, children));
 
         // Sort the children before adding them to their new container
         final Collection<FXOMObject> sorted = sortChildren(children);
         // Add the children to the new container
-        final List<Job> addChildrenJobs
-                = addChildrenToPropertyJobs(newContainerProperty, sorted);
-        jobs.addAll(addChildrenJobs);
+        jobs.addAll(addChildrenJobs(newContainerProperty, sorted));
 
         // Add the new container property to the new container instance
         assert newContainerProperty.getParentInstance() == null;
@@ -88,7 +86,7 @@
 
         return jobs;
     }
-    
+
     protected Collection<FXOMObject> sortChildren(List<FXOMObject> children) {
         return children;
     }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/UnwrapJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/UnwrapJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -170,13 +170,13 @@
 
         // Remove the children from the old container property
         final List<Job> removeChildrenJobs
-                = removeChildrenFromPropertyJobs(oldContainerProperty, oldContainerChildren);
+                = removeChildrenJobs(oldContainerProperty, oldContainerChildren);
         batchJob.addSubJobs(removeChildrenJobs);
 
         //------------------------------------------------------------------
         // If the target object is NOT the FXOM root :
-        // - we update the new container bounds and add it to the current container
-        // - we update the children bounds and remove them from the current container
+        // - we update the new container bounds and add it to the old container
+        // - we update the children bounds and remove them from the old container
         //------------------------------------------------------------------
         if (newContainer != null) {
 
@@ -196,14 +196,14 @@
                     = new DesignHierarchyMask(newContainer);
             if (newContainerMask.isFreeChildPositioning()) {
                 final List<Job> modifyChildrenLayoutJobs
-                        = modifyChildrenLayoutJobs(oldContainerChildren);
+                        = modifyChildrenJobs(oldContainerChildren);
                 batchJob.addSubJobs(modifyChildrenLayoutJobs);
             }
 
             // Add the children to the new container
             int index = oldContainer.getIndexInParentProperty();
             final List<Job> addChildrenJobs
-                    = addChildrenToPropertyJobs(newContainerProperty, index, oldContainerChildren);
+                    = addChildrenJobs(newContainerProperty, index, oldContainerChildren);
             batchJob.addSubJobs(addChildrenJobs);
 
             // Remove the old container from the new container property
@@ -248,7 +248,7 @@
         }
     }
 
-    protected List<Job> addChildrenToPropertyJobs(
+    protected List<Job> addChildrenJobs(
             final FXOMPropertyC containerProperty,
             final int start,
             final List<FXOMObject> children) {
@@ -267,7 +267,7 @@
         return jobs;
     }
 
-    protected List<Job> removeChildrenFromPropertyJobs(
+    protected List<Job> removeChildrenJobs(
             final FXOMPropertyC containerProperty,
             final List<FXOMObject> children) {
 
@@ -283,12 +283,12 @@
     }
 
     /**
-     * Used to modify the children layout properties.
+     * Used to modify the specified children.
      *
      * @param children The children.
-     * @return
+     * @return A list of jobs.
      */
-    protected List<Job> modifyChildrenLayoutJobs(final List<FXOMObject> children) {
+    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
 
         final List<Job> jobs = new ArrayList<>();
 
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInAnchorPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInAnchorPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,9 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.List;
 import javafx.scene.layout.AnchorPane;
 
 /**
@@ -46,16 +43,4 @@
         super(editorController);
         newContainerClass = AnchorPane.class;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-
-        // We can position the children in the AnchorPane container
-        // => we update the children layout properties
-        return modifyChildrenLayoutJobs(children);
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInFlowPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInFlowPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.Collections;
-import java.util.List;
 import javafx.scene.layout.FlowPane;
 
 /**
@@ -47,13 +43,4 @@
         super(editorController);
         newContainerClass = FlowPane.class;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInGridPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInGridPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -70,14 +70,9 @@
     }
 
     @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
+    protected List<Job> modifyChildrenJobs(final FXOMInstance container, final List<FXOMObject> children) {
+        final List<Job> jobs = super.modifyChildrenJobs(container, children);
 
-        final List<Job> jobs = new ArrayList<>();
-        // When wrapping the root node, indices are not yet initialized
-        // (modifyContainer method not called)
-        if (indices.isEmpty()) {
-            modifyContainer(children);
-        }
         for (FXOMObject child : children) {
             int[] childIndices = indices.get(child);
 
@@ -99,7 +94,8 @@
     }
 
     @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
+    protected void modifyNewContainer(final List<FXOMObject> children) {
+        super.modifyNewContainer(children);
 
         final FXOMDocument fxomDocument = getEditorController().getFxomDocument();
 
@@ -140,14 +136,13 @@
     }
 
     /**
-     * This method computes either the ROW index or COLUMN index of each element,
-     * by running through a would-be grid according to a given course.
+     * This method computes either the ROW index or COLUMN index of each
+     * element, by running through a would-be grid according to a given course.
      * For instance, when course==ROW_BY_ROW, this method first order the
-     * elements row by row, and then sets their ROW index inside the indices map.
-     * When course==COL_BY_COL, this method orders the
-     * elements column by column, and then sets their COLUMN index inside the
-     * indices map.
-     * Note that this method leaves the original elements and children list
+     * elements row by row, and then sets their ROW index inside the indices
+     * map. When course==COL_BY_COL, this method orders the elements column by
+     * column, and then sets their COLUMN index inside the indices map. Note
+     * that this method leaves the original elements and children list
      * unchanged. All it does is populating the indices map.
      *
      * @param fxomObjects The children of the would-be grid.
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInGroupJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInGroupJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.Collections;
-import java.util.List;
 import javafx.scene.Group;
 
 /**
@@ -47,19 +43,4 @@
         super(editorController);
         newContainerClass = Group.class;
     }
-
-    /**
-     * Used to modify the children before adding them to this container.
-     *
-     * @param children The children to be modified.
-     * @return
-     */
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInHBoxJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInHBoxJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,7 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
 import com.oracle.javafx.scenebuilder.kit.editor.job.wrap.FXOMObjectCourseComparator.UnidimensionalComparator;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import java.util.ArrayList;
@@ -53,15 +52,6 @@
     }
 
     @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
-
-    @Override
     protected Collection<FXOMObject> sortChildren(List<FXOMObject> children) {
         final List<FXOMObject> sorted = new ArrayList<>(children);
         Collections.sort(sorted, UnidimensionalComparator.of(Orientation.HORIZONTAL));
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,9 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.List;
 import javafx.scene.layout.Pane;
 
 /**
@@ -46,16 +43,4 @@
         super(editorController);
         newContainerClass = Pane.class;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-
-        // We can position the children in the Pane container
-        // => we update the children layout properties
-        return modifyChildrenLayoutJobs(children);
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInScrollPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInScrollPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,8 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
 import com.oracle.javafx.scenebuilder.kit.editor.job.JobUtils;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.Collections;
 import java.util.List;
 import javafx.geometry.Bounds;
 import javafx.scene.control.ScrollPane;
@@ -51,12 +49,9 @@
     }
 
     @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
+    protected void modifyNewContainer(final List<FXOMObject> children) {
+        super.modifyNewContainer(children);
 
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
         final Bounds unionOfBounds = WrapJobUtils.getUnionOfBounds(children);
         JobUtils.setPrefViewportHeight(newContainer, ScrollPane.class, unionOfBounds.getHeight());
         JobUtils.setPrefViewportWidth(newContainer, ScrollPane.class, unionOfBounds.getWidth());
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInSplitPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInSplitPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -58,12 +58,8 @@
     }
 
     @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
+    protected void modifyNewContainer(final List<FXOMObject> children) {
+        super.modifyNewContainer(children);
 
         // Update the SplitPane orientation depending on its children positionning
         final Orientation orientation = getOrientation(children);
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInStackPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInStackPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.Collections;
-import java.util.List;
 import javafx.scene.layout.StackPane;
 
 /**
@@ -47,13 +43,4 @@
         super(editorController);
         newContainerClass = StackPane.class;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInTabPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInTabPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -42,7 +42,6 @@
 import com.oracle.javafx.scenebuilder.kit.metadata.util.DesignHierarchyMask.Accessory;
 import com.oracle.javafx.scenebuilder.kit.metadata.util.PropertyName;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import javafx.scene.control.Tab;
 import javafx.scene.control.TabPane;
@@ -59,7 +58,7 @@
     }
 
     @Override
-    protected List<Job> wrapInJobs(final List<FXOMObject> children) {
+    protected List<Job> wrapChildrenJobs(final List<FXOMObject> children) {
 
         final List<Job> jobs = new ArrayList<>();
 
@@ -75,7 +74,7 @@
                 newContainer.getFxomDocument(), newContainerPropertyName);
 
         // Create the Tab sub container
-        final FXOMInstance tabContainer = makeContainerInstance(Tab.class);
+        final FXOMInstance tabContainer = makeNewContainerInstance(Tab.class);
         final DesignHierarchyMask tabContainerMask
                 = new DesignHierarchyMask(tabContainer);
         assert tabContainerMask.isAcceptingAccessory(Accessory.CONTENT);
@@ -98,12 +97,12 @@
         //------------------------------------------------------------------
         // The selection is multiple :
         // - we set the tab container CONTENT property to a new AnchorPane sub container
-        // - we update the children bounds and add them to the new AnchorPane sub container
+        // - we add the children to the new AnchorPane sub container
         //------------------------------------------------------------------
         if (children.size() > 1) {
 
             // Create the AnchorPane sub container
-            final FXOMInstance subContainer = makeContainerInstance(AnchorPane.class);
+            final FXOMInstance subContainer = makeNewContainerInstance(AnchorPane.class);
             final DesignHierarchyMask subContainerMask
                     = new DesignHierarchyMask(subContainer);
 
@@ -122,15 +121,12 @@
                     getEditorController());
             jobs.add(addValueJob);
 
-            // Update children bounds before adding them to the sub container
-            assert subContainerMask.isFreeChildPositioning();
-            final List<Job> modifyChildrenLayoutJobs
-                    = modifyChildrenLayoutJobs(children);
-            jobs.addAll(modifyChildrenLayoutJobs);
+            // Update children before adding them to the sub container
+            jobs.addAll(modifyChildrenJobs(subContainer, children));
 
             // Add the children to the sub container
             final List<Job> addChildrenJobs
-                    = addChildrenToPropertyJobs(subContainerProperty, children);
+                    = addChildrenJobs(subContainerProperty, children);
             jobs.addAll(addChildrenJobs);
 
             // Add the sub container property to the sub container instance
@@ -147,12 +143,11 @@
         //------------------------------------------------------------------
         else {
             // Update children before adding them to the new container
-            final List<Job> modifyChildrenJobs = modifyChildrenJobs(children);
-            jobs.addAll(modifyChildrenJobs);
+            jobs.addAll(modifyChildrenJobs(newContainer, children));
 
             // Add the children to the Tab sub container
             final List<Job> addChildrenJobs
-                    = addChildrenToPropertyJobs(tabContainerProperty, children);
+                    = addChildrenJobs(tabContainerProperty, children);
             jobs.addAll(addChildrenJobs);
         }
 
@@ -174,13 +169,4 @@
 
         return jobs;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInTilePaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInTilePaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.Collections;
-import java.util.List;
 import javafx.scene.layout.TilePane;
 
 /**
@@ -47,13 +43,4 @@
         super(editorController);
         newContainerClass = TilePane.class;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInTitledPaneJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInTitledPaneJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,10 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
-import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
-import java.util.Collections;
-import java.util.List;
 import javafx.scene.control.TitledPane;
 
 /**
@@ -47,13 +43,4 @@
         super(editorController);
         newContainerClass = TitledPane.class;
     }
-
-    @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
 }
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInToolBarJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInToolBarJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,7 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
 import com.oracle.javafx.scenebuilder.kit.editor.job.wrap.FXOMObjectCourseComparator.UnidimensionalComparator;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import java.util.ArrayList;
@@ -53,15 +52,6 @@
     }
 
     @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
-
-    @Override
     protected Collection<FXOMObject> sortChildren(List<FXOMObject> children) {
         final List<FXOMObject> sorted = new ArrayList<>(children);
         Collections.sort(sorted, UnidimensionalComparator.of(Orientation.HORIZONTAL));
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInVBoxJob.java	Thu Aug 21 07:40:42 2014 -0700
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/job/wrap/WrapInVBoxJob.java	Thu Aug 21 10:27:31 2014 -0700
@@ -32,7 +32,6 @@
 package com.oracle.javafx.scenebuilder.kit.editor.job.wrap;
 
 import com.oracle.javafx.scenebuilder.kit.editor.EditorController;
-import com.oracle.javafx.scenebuilder.kit.editor.job.Job;
 import com.oracle.javafx.scenebuilder.kit.editor.job.wrap.FXOMObjectCourseComparator.UnidimensionalComparator;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import java.util.ArrayList;
@@ -53,15 +52,6 @@
     }
 
     @Override
-    protected List<Job> modifyChildrenJobs(final List<FXOMObject> children) {
-        return Collections.emptyList();
-    }
-
-    @Override
-    protected void modifyContainer(final List<FXOMObject> children) {
-    }
-
-    @Override
     protected Collection<FXOMObject> sortChildren(List<FXOMObject> children) {
         final List<FXOMObject> sorted = new ArrayList<>(children);
         Collections.sort(sorted, UnidimensionalComparator.of(Orientation.VERTICAL));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/FX8-3DFeatures/src/fx83dfeatures/MeshViewer.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,367 @@
+/*
+ * 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.
+ */
+
+package fx83dfeatures;
+
+import java.util.Arrays;
+import javafx.application.Application;
+import javafx.event.EventHandler;
+import javafx.scene.*;
+import javafx.scene.control.Button;
+import javafx.scene.image.Image;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.*;
+import javafx.scene.transform.Rotate;
+import javafx.stage.Stage;
+
+public class MeshViewer extends Application {
+
+    Group root;
+    PointLight pointLight;
+    MeshView meshView;
+    TriangleMesh triMesh;
+    PhongMaterial material;
+
+    int divX = 100;
+    int divY = 100;
+    boolean smooth = false;
+    int smoothGroups[];
+    float rotateAngle = 0.0f;
+    float funcValue = -10.0f;
+    float resolution = 0.1f;
+    boolean texture = false;
+    boolean textureSwitch = false;
+    final Image diffuseMap = new Image("resources/cup_diffuseMap_1024.png");
+    final Image bumpMap = new Image("resources/cup_normalMap_1024.png");
+
+    final static float meshScale = 20;
+    final static float minX = -10;
+    final static float minY = -10;
+    final static float maxX = 10;
+    final static float maxY = 10;
+
+    double getSinDivX(double x, double y) {
+        double r = Math.sqrt(x*x + y*y);
+        return funcValue * (r == 0 ? 1 : Math.sin(r) / r);
+    }
+
+    void computeMesh(int subDivX, int subDivY, float scale) {
+         final int pointSize = 3;
+        int numDivX = subDivX + 1;
+        float[] points = triMesh.getPoints().toArray(null);
+
+        // Initial points and texCoords
+        for (int y = 0; y <= subDivY; y++) {
+            float dy = (float) y / subDivY;
+            double fy = (1 - dy) * minY + dy * maxY;
+//            System.err.println("dy = " + dy + ", fy = " + fy);
+            for (int x = 0; x <= subDivX; x++) {
+                float dx = (float) x / subDivX;
+                double fx = (1 - dx) * minX + dx * maxX;
+//                System.err.println("dx = " + dx + ", fx = " + fx);
+                int index = y * numDivX * pointSize + (x * pointSize);
+//                System.err.println("point index = " + index);
+                points[index] = (float) fx * scale;
+                points[index + 1] = (float) fy * scale;
+                points[index + 2] = (float) getSinDivX(fx, fy) * scale;
+//                System.err.println("points[" + (index + 2) + " = " + points[index + 2]);
+            }
+        }
+
+        triMesh.getPoints().set(0, points, 0, points.length);
+    }
+
+    TriangleMesh buildTriangleMesh(int subDivX, int subDivY,
+            float scale) {
+
+//        System.err.println("subDivX = " + subDivX + ", subDivY = " + subDivY);
+
+        final int pointSize = 3;
+        final int texCoordSize = 2;
+        final int faceSize = 6; // 3 point indices and 3 texCoord indices per triangle
+        int numDivX = subDivX + 1;
+        int numVerts = (subDivY + 1) * numDivX;
+        float points[] = new float[numVerts * pointSize];
+        float texCoords[] = new float[numVerts * texCoordSize];
+        int faceCount = subDivX * subDivY * 2;
+        int faces[] = new int[ faceCount * faceSize]; 
+
+        // Create points and texCoords
+        for (int y = 0; y <= subDivY; y++) {
+            float dy = (float) y / subDivY;
+            double fy = (1 - dy) * minY + dy * maxY;
+//            System.err.println("dy = " + dy + ", fy = " + fy);
+            for (int x = 0; x <= subDivX; x++) {
+                float dx = (float) x / subDivX;
+                double fx = (1 - dx) * minX + dx * maxX;
+//                System.err.println("dx = " + dx + ", fx = " + fx);
+                int index = y * numDivX * pointSize + (x * pointSize);
+//                System.err.println("point index = " + index);
+                points[index] = (float) fx * scale;
+                points[index + 1] = (float) fy * scale;
+                points[index + 2] = (float) getSinDivX(fx, fy) * scale;
+                index = y * numDivX * texCoordSize + (x * texCoordSize);
+//                System.err.println("texCoord index = " + index);
+                texCoords[index] = dx;
+                texCoords[index + 1] = dy;
+            }
+        }
+
+        // Create faces
+        for (int y = 0; y < subDivY; y++) {
+            for (int x = 0; x < subDivX; x++) {
+                int p00 = y * numDivX + x;
+                int p01 = p00 + 1;
+                int p10 = p00 + numDivX;
+                int p11 = p10 + 1;
+                int tc00 = y * numDivX + x;
+                int tc01 = tc00 + 1;
+                int tc10 = tc00 + numDivX;
+                int tc11 = tc10 + 1;
+
+                int index = (y * subDivX * faceSize + (x * faceSize)) * 2;
+//                System.err.println("face  0 index = " + index);
+                faces[index + 0] = p00;
+                faces[index + 1] = tc00;
+                faces[index + 2] = p10;
+                faces[index + 3] = tc10;
+                faces[index + 4] = p11;
+                faces[index + 5] = tc11;
+                index += faceSize;
+//                System.err.println("face  1 index = " + index);
+                faces[index + 0] = p11;
+                faces[index + 1] = tc11;
+                faces[index + 2] = p01;
+                faces[index + 3] = tc01;
+                faces[index + 4] = p00;
+                faces[index + 5] = tc00;
+            }
+        }
+//        for(int i = 0; i < points.length; i++) {
+//            System.err.println("points[" + i + "] = " + points[i]);
+//        }
+//        for(int i = 0; i < texCoords.length; i++) {
+//            System.err.println("texCoords[" + i + "] = " + texCoords[i]);
+//        }
+//        for(int i = 0; i < faces.length; i++) {
+//            System.err.println("faces[" + i + "] = " + faces[i]);
+//        }
+        TriangleMesh triangleMesh = new TriangleMesh();
+        triangleMesh.getPoints().setAll(points);
+        triangleMesh.getTexCoords().setAll(texCoords);
+        triangleMesh.getFaces().setAll(faces);
+        smooth = false;
+        smoothGroups = new int[divX * divY * 2];
+        triangleMesh.getFaceSmoothingGroups().setAll(smoothGroups);
+        return triangleMesh;
+    }
+
+    private Scene buildScene(int width, int height, boolean depthBuffer) {
+
+        triMesh = buildTriangleMesh(divX, divY, meshScale);
+        material = new PhongMaterial();
+        material.setDiffuseColor(Color.LIGHTGRAY);
+        material.setSpecularColor(Color.WHITE);
+        material.setSpecularPower(64);
+        meshView = new MeshView(triMesh);
+        meshView.setMaterial(material);
+
+        //Set Wireframe mode
+        meshView.setDrawMode(DrawMode.FILL);
+        meshView.setCullFace(CullFace.BACK);
+
+        final Group grp1 = new Group(meshView);
+        grp1.setRotate(0);
+        grp1.setRotationAxis(Rotate.X_AXIS);
+        Group grp2 = new Group(grp1);
+        grp2.setRotate(-30);
+        grp2.setRotationAxis(Rotate.X_AXIS);
+        Group grp3 = new Group(grp2);
+        grp3.setTranslateX(400);
+        grp3.setTranslateY(400);
+        grp3.setTranslateZ(10);
+
+        pointLight = new PointLight(Color.ANTIQUEWHITE);
+        pointLight.setTranslateX(300);
+        pointLight.setTranslateY(-50);
+        pointLight.setTranslateZ(-1000);
+
+        root = new Group(grp3, pointLight);
+        Scene scene = new Scene(root, width, height, depthBuffer);
+        scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
+            @Override
+            public void handle(KeyEvent e) {
+                switch (e.getCharacter()) {
+                    case "[":
+                        funcValue -= resolution;
+                        if (funcValue < -20.0f) {
+                            funcValue = -20.0f;
+                        }
+                        computeMesh(divX, divY, meshScale);
+                        break;
+                    case "]":
+                        funcValue += resolution;
+                        if (funcValue > 20.0f) {
+                            funcValue = 20.0f;
+                        }
+                        computeMesh(divX, divY, meshScale);
+                        break;
+                    case "p":
+                        funcValue = -10;
+                        computeMesh(divX, divY, meshScale);
+                        break;
+                    case "i":
+                        System.err.print("i ");
+                        if (!textureSwitch) {
+                            texture = texture ? false : true;
+                        } else {
+                            textureSwitch = false;
+                        }
+                        if (texture) {
+                            material.setDiffuseMap(diffuseMap);
+                            material.setBumpMap(bumpMap);
+                            material.setDiffuseColor(Color.WHITE);
+                        } else {
+                            material.setDiffuseMap(null);
+                            material.setBumpMap(null);
+                            material.setDiffuseColor(Color.LIGHTGRAY);
+                        }
+                        break;
+                    case "s":
+                        smooth = !smooth;
+                        if (!smooth) {
+                            Arrays.fill(smoothGroups, 0);
+                        } else {
+                            for (int i = 0; i < smoothGroups.length; i++) {
+                                smoothGroups[i] = i % 32;
+//                                System.err.println("XXX smoothGroups[" + i + "] = " + smoothGroups[i]);
+                            }
+                        }
+                        triMesh.getFaceSmoothingGroups().setAll(smoothGroups);
+                        break;
+                    case "k":
+                         System.err.print("k ");
+                         if ((texture) || (!textureSwitch)) {
+                            material.setDiffuseMap(diffuseMap);
+                            material.setBumpMap(null);
+                            material.setDiffuseColor(Color.WHITE);
+                            texture = true;
+                            textureSwitch = true;
+                        } else {
+                            material.setDiffuseMap(null);
+                            material.setBumpMap(null);
+                            material.setDiffuseColor(Color.LIGHTGRAY);
+                        }
+                        break;
+                    case "u":
+                        System.err.print("u ");
+                        if (texture) {
+                            material.setDiffuseMap(null);
+                            material.setBumpMap(bumpMap);
+                            material.setDiffuseColor(Color.LIGHTGRAY);
+                                                textureSwitch = true;
+                        } else {
+                            material.setDiffuseMap(null);
+                            material.setBumpMap(null);
+                            material.setDiffuseColor(Color.LIGHTGRAY);
+                        }
+                        break;
+                    case "l":
+                        System.err.print("l ");
+                        boolean wireframe = meshView.getDrawMode() == DrawMode.LINE;
+                        meshView.setDrawMode(wireframe ? DrawMode.FILL : DrawMode.LINE);
+                        break;
+                    case "<":
+                        grp1.setRotate(rotateAngle -= (resolution * 5));
+                        break;
+                    case ">":
+                        grp1.setRotate(rotateAngle += (resolution * 5));
+                        break;
+                    case "X":
+                        grp1.setRotationAxis(Rotate.X_AXIS);
+                        break;
+                    case "Y":
+                        grp1.setRotationAxis(Rotate.Y_AXIS);
+                        break;
+                    case "Z":
+                        grp1.setRotationAxis(Rotate.Z_AXIS);
+                        break;
+                    case "P":
+                        rotateAngle = 0;
+                        grp1.setRotate(rotateAngle);
+                    case "1":
+                        System.err.print("1 ");
+                        divX = 5;
+                        divY = 5;
+                        smooth = true;
+                        smoothGroups = new int[divX * divY * 2];
+                        rotateAngle = 0.0f;
+                        funcValue = 0.0f;
+                        triMesh = buildTriangleMesh(divX, divY, meshScale);
+                        meshView.setMesh(triMesh);
+                        break;
+                    case "2":
+                        System.err.print("2 ");
+                        divX = 70;
+                        divY = 70;
+                        smooth = true;
+                        smoothGroups = new int[divX * divY * 2];
+                        rotateAngle = 0.0f;
+                        funcValue = 0.0f;
+                        triMesh = buildTriangleMesh(divX, divY, meshScale);
+                        meshView.setMesh(triMesh);
+                        break;
+                    case " ":
+                        root.getChildren().add(new Button("Button"));
+                        break;
+
+                }
+            }
+        });
+        return scene;
+    }
+
+    private PerspectiveCamera addCamera(Scene scene) {
+        PerspectiveCamera perspectiveCamera = new PerspectiveCamera();
+        scene.setCamera(perspectiveCamera);
+        return perspectiveCamera;
+    }
+
+    @Override
+    public void start(Stage primaryStage) {
+        Scene scene = buildScene(800, 800, true);
+        scene.setFill(Color.rgb(10, 10, 40));
+        addCamera(scene);
+        primaryStage.setTitle("MeshViewer");
+        primaryStage.setScene(scene);
+        primaryStage.show();
+    }
+
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/FX8-3DFeatures/src/fx83dfeatures/PNTBoxFlatViewer.java	Thu Aug 21 10:27:31 2014 -0700
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2014, 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.
+ */
+
+package fx83dfeatures;
+
+import javafx.application.Application;
+import javafx.event.EventHandler;
+import javafx.scene.Group;
+import javafx.scene.PerspectiveCamera;
+import javafx.scene.PointLight;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.image.Image;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.CullFace;
+import javafx.scene.shape.DrawMode;
+import javafx.scene.shape.MeshView;
+import javafx.scene.shape.TriangleMesh;
+import javafx.scene.shape.VertexFormat;
+import javafx.scene.transform.Rotate;
+import javafx.stage.Stage;
+
+public class PNTBoxFlatViewer extends Application {
+
+    Group root;
+    PointLight pointLight;
+    MeshView meshView;
+    TriangleMesh triMesh;
+    PhongMaterial material;
+
+    float resolution = 0.1f;
+    float rotateAngle = 0.0f;
+    boolean texture = false;
+    boolean textureSwitch = false;
+    final Image diffuseMap = new Image("resources/cup_diffuseMap_1024.png");
+    final Image bumpMap = new Image("resources/cup_normalMap_1024.png");
+    
+    private PerspectiveCamera addCamera(Scene scene) {
+        PerspectiveCamera perspectiveCamera = new PerspectiveCamera();
+        scene.setCamera(perspectiveCamera);
+        return perspectiveCamera;
+    }
+
+    private Scene buildScene(int width, int height, boolean depthBuffer) {
+
+        triMesh = createBox(200, 200, 200);
+        material = new PhongMaterial();
+        material.setDiffuseColor(Color.LIGHTGRAY);
+        material.setSpecularColor(Color.WHITE);
+        material.setSpecularPower(64);
+        meshView = new MeshView(triMesh);
+        meshView.setMaterial(material);
+
+        //Set Wireframe mode
+        meshView.setDrawMode(DrawMode.FILL);
+        meshView.setCullFace(CullFace.BACK);
+
+        final Group grp1 = new Group(meshView);
+        grp1.setRotate(0);
+        grp1.setRotationAxis(Rotate.X_AXIS);
+        Group grp2 = new Group(grp1);
+        grp2.setRotate(-90);
+        grp2.setRotationAxis(Rotate.X_AXIS);
+        Group grp3 = new Group(grp2);
+        grp3.setTranslateX(400);
+        grp3.setTranslateY(400);
+        grp3.setTranslateZ(10);
+
+        pointLight = new PointLight(Color.ANTIQUEWHITE);
+        pointLight.setTranslateX(300);
+        pointLight.setTranslateY(-50);
+        pointLight.setTranslateZ(-1000);
+
+        root = new Group(grp3 /*, pointLight */);
+        Scene scene = new Scene(root, width, height, depthBuffer);
+        scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
+            @Override
+            public void handle(KeyEvent e) {
+                switch (e.getCharacter()) {
+                    case "i":
+