@prefix :        <https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.ttl#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema:  <http://schema.org/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix x3d:     <https://www.web3d.org/specifications/x3d-4.0.xsd#> .
@prefix x3do:    <https://www.web3d.org/specifications/X3dOntology4.0#> .

:X3D a owl:NamedIndividual, x3do:X3D ;
  x3do:hasHead :head ;
  x3do:hasScene :Scene ;
  x3do:profile 'Immersive' ;
  x3do:version '3.0' ;
  x3do:noNamespaceSchemaLocation 'https://www.web3d.org/specifications/x3d-3.0.xsd' .
:head a owl:NamedIndividual, x3do:head ;
  x3do:hasParent :X3D ;
  x3do:hasMeta :meta_1_1, :meta_1_2, :meta_1_3, :meta_1_4, :meta_1_5, :meta_1_6, :meta_1_7, :meta_1_8, :meta_1_9, :meta_1_10, :meta_1_11 .
:meta_1_1 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'DvdControllerPrototype.x3d' ;
  x3do:name 'title' .
:meta_1_2 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Digital Virtual Display (DVD) Controller Prototype definition to control animation timing. Heads-up display keeps DVD Controller on screen.' ;
  x3do:name 'description' .
:meta_1_3 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'Jane Wu, Don Brutzman, Jonathan Roberts' ;
  x3do:name 'creator' .
:meta_1_4 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '19 July 2001' ;
  x3do:name 'created' .
:meta_1_5 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '5 March 2024' ;
  x3do:name 'modified' .
:meta_1_6 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'DvdController animation control' ;
  x3do:name 'subject' .
:meta_1_7 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'check handling of beginning/end buttos' ;
  x3do:name 'TODO' .
:meta_1_8 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D-Edit ExternProtoDeclare panel autocheck missed notifying that some fields are not in original ProtoDeclare' ;
  x3do:name 'TODO' .
:meta_1_9 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.x3d' ;
  x3do:name 'identifier' .
:meta_1_10 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content 'X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit' ;
  x3do:name 'generator' .
:meta_1_11 a owl:NamedIndividual, x3do:meta ;
  x3do:hasParent :head ;
  x3do:content '../../license.html' ;
  x3do:name 'license' .
:meta dcterms:title "DvdControllerPrototype.x3d" .
:meta dcterms:description "Digital Virtual Display (DVD) Controller Prototype definition to control animation timing. Heads-up display keeps DVD Controller on screen." .
:meta dcterms:creator "Jane Wu, Don Brutzman, Jonathan Roberts" .
:meta dcterms:created "19 July 2001" .
:meta dcterms:modified "5 March 2024" .
:meta dcterms:subject "DvdController animation control" .
:meta dcterms:identifier "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.x3d" .
:meta dcterms:generator "X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit" .
:meta dcterms:license "../../license.html" .
:Scene a owl:NamedIndividual, x3do:Scene ;
  x3do:hasParent :X3D ;
  x3do:hasChildren :WorldInfo_2_1, :Anchor_2_4 ;
  x3do:hasExternProtoDeclare :ExternProtoDeclare_2_2 ;
  x3do:hasProtoDeclare :ProtoDeclare_2_3 .
:WorldInfo_2_1 a owl:NamedIndividual, x3do:WorldInfo ;
  x3do:hasParent :Scene ;
  x3do:title 'DvdControllerPrototype.x3d' .
:ExternProtoDeclare_2_2 a owl:NamedIndividual, x3do:ExternProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasField :field_2_2_1, :field_2_2_2, :field_2_2_3, :field_2_2_4, :field_2_2_5, :field_2_2_6, :field_2_2_7, :field_2_2_8, :field_2_2_9, :field_2_2_10, :field_2_2_11, :field_2_2_12, :field_2_2_13, :field_2_2_14, :field_2_2_15 ;
  x3do:appinfo 'Slider user-interface widget that produces floating-point output values' ;
  x3do:name 'SliderFloat' ;
  x3do:url '"../../../Savage/Tools/Animation/SliderFloatPrototype.x3d#SliderFloat" "https://savage.nps.edu/Savage/Tools/Animation/SliderFloatPrototype.x3d#SliderFloat" "../../../Savage/Tools/Animation/SliderFloatPrototype.wrl#SliderFloat" "https://savage.nps.edu/Savage/Tools/Animation/SliderFloatPrototype.wrl#SliderFloat"' .
:field_2_2_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Allowed values: vertical, horizontal' ;
  x3do:name 'layoutDirection' ;
  x3do:type 'SFString' .
:field_2_2_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 1.0' ;
  x3do:name 'height' ;
  x3do:type 'SFFloat' .
:field_2_2_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.1' ;
  x3do:name 'radius' ;
  x3do:type 'SFFloat' .
:field_2_2_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.02' ;
  x3do:name 'barRadius' ;
  x3do:type 'SFFloat' .
:field_2_2_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value .8 .4 .8' ;
  x3do:name 'sliderBarColor' ;
  x3do:type 'SFColor' .
:field_2_2_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value .3 .4 .8' ;
  x3do:name 'sliderBallColor' ;
  x3do:type 'SFColor' .
:field_2_2_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value .2 .3 .9' ;
  x3do:name 'sliderEndColor' ;
  x3do:type 'SFColor' .
:field_2_2_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.0' ;
  x3do:name 'min' ;
  x3do:type 'SFFloat' .
:field_2_2_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 10.0' ;
  x3do:name 'max' ;
  x3do:type 'SFFloat' .
:field_2_2_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value 0.0' ;
  x3do:name 'value' ;
  x3do:type 'SFFloat' .
:field_2_2_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setMin' ;
  x3do:type 'SFFloat' .
:field_2_2_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setMax' ;
  x3do:type 'SFFloat' .
:field_2_2_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setValue' ;
  x3do:type 'SFFloat' .
:field_2_2_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'valueChanged' ;
  x3do:type 'SFFloat' .
:field_2_2_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ExternProtoDeclare_2_2 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Enable/disable console output for troubleshooting' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:ProtoDeclare_2_3 a owl:NamedIndividual, x3do:ProtoDeclare ;
  x3do:hasParent :Scene ;
  x3do:hasProtoInterface :ProtoInterface_2_3_1 ;
  x3do:hasProtoBody :ProtoBody_2_3_2 ;
  x3do:appinfo 'Digital Virtual Display (DVD) Controller Prototype is a heads-up display (HUD) to control animation timing' ;
  x3do:name 'DvdController' .
:ProtoInterface_2_3_1 a owl:NamedIndividual, x3do:ProtoInterface ;
  x3do:hasParent :ProtoDeclare_2_3 ;
  x3do:hasField :field_2_3_1_1, :field_2_3_1_2, :field_2_3_1_3, :field_2_3_1_4, :field_2_3_1_5, :field_2_3_1_6, :field_2_3_1_7, :field_2_3_1_8, :field_2_3_1_9, :field_2_3_1_10, :field_2_3_1_11, :field_2_3_1_12, :field_2_3_1_13, :field_2_3_1_14, :field_2_3_1_15, :field_2_3_1_16, :field_2_3_1_17, :field_2_3_1_18, :field_2_3_1_19, :field_2_3_1_20, :field_2_3_1_21, :field_2_3_1_22, :field_2_3_1_23, :field_2_3_1_24, :field_2_3_1_25, :field_2_3_1_26, :field_2_3_1_27 .
:field_2_3_1_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value -2' ;
  x3do:name 'testTimeVal' ;
  x3do:type 'SFTime' ;
  x3do:value '-2' .
:field_2_3_1_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Short description of what is animated by this DvdController.' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_1_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Whether or not play mode is enabled including during startup.' ;
  x3do:name 'playEnabled' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_1_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Initializes how control buttons and slider are displayed. The control buttons include DIS control (i.e. Master Ghost Local) and Playback control (i.e. Reset to Start Fast Rewind Rewind Pause Play Fast Forward Reset to End). Possible values are (case sensitive): ALL DIS_ONLY PLAYBACK_ONLY SLIDER_ONLY DIS_PLAYBACK DIS_SLIDER PLAYBACK_SLIDER and NONE.' ;
  x3do:name 'displayMode' ;
  x3do:type 'SFString' ;
  x3do:value 'PLAYBACK_SLIDER' .
:field_2_3_1_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:appinfo 'Sets how control buttons and slider are displayed. The control buttons include DIS control (i.e. Master Ghost Local) and Playback control (i.e. Reset to Start Fast Rewind Rewind Pause Play Fast Forward Reset to End). Possible values are (case sensitive): ALL DIS_ONLY PLAYBACK_ONLY SLIDER_ONLY DIS_PLAYBACK DIS_SLIDER PLAYBACK_SLIDER and NONE.' ;
  x3do:name 'setDisplayMode' ;
  x3do:type 'SFString' .
:field_2_3_1_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Default button color.' ;
  x3do:name 'buttonColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( 0.55 0.55 0.55 ) .
:field_2_3_1_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Button color when selected by user.' ;
  x3do:name 'selectedButtonColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( 0.75 0.75 0.75 ) .
:field_2_3_1_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Default label color.' ;
  x3do:name 'labelColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( 0 0 0 ) .
:field_2_3_1_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Label color when selected by user.' ;
  x3do:name 'selectedLabelColor' ;
  x3do:type 'SFColor' ;
  x3do:value ( 0.1 0.65 0.2 ) .
:field_2_3_1_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Modified screen location and distance (for size).' ;
  x3do:name 'locationOffset' ;
  x3do:type 'SFVec3f' ;
  x3do:value ( -2 -2 0 ) .
:field_2_3_1_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'default value true' ;
  x3do:name 'clockEnabled' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_3_1_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Time for complete loop cycle in seconds.' ;
  x3do:name 'cycleInterval' ;
  x3do:type 'SFTime' ;
  x3do:value '1.0' .
:field_2_3_1_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_cycleInterval' ;
  x3do:type 'SFTime' .
:field_2_3_1_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'cycleInterval_changed' ;
  x3do:type 'SFTime' .
:field_2_3_1_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Factor used to determine the speed increase/decrease for Fast Rewind and Fast Forward action.' ;
  x3do:name 'speedFactor' ;
  x3do:type 'SFFloat' ;
  x3do:value 10 .
:field_2_3_1_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isActive' ;
  x3do:type 'SFBool' .
:field_2_3_1_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'startTime_changed' ;
  x3do:type 'SFTime' .
:field_2_3_1_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'stopTime_changed' ;
  x3do:type 'SFTime' .
:field_2_3_1_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'time_changed' ;
  x3do:type 'SFTime' .
:field_2_3_1_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fraction_changed' ;
  x3do:type 'SFFloat' .
:field_2_3_1_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'secondsElapsed' ;
  x3do:type 'SFTime' .
:field_2_3_1_22 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isMaster isRemote and isLocal are booleans represent a 3-way toggle. Only one of them can have a true value at any time.' ;
  x3do:name 'isMaster' ;
  x3do:type 'SFBool' .
:field_2_3_1_23 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isMaster isRemote and isLocal are booleans represent a 3-way toggle. Only one of them can have a true value at any time.' ;
  x3do:name 'isRemote' ;
  x3do:type 'SFBool' .
:field_2_3_1_24 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isMaster isRemote and isLocal are booleans represent a 3-way toggle. Only one of them can have a true value at any time.' ;
  x3do:name 'isLocal' ;
  x3do:type 'SFBool' .
:field_2_3_1_25 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isPaused and isRunning always have opposite values. When isPaused is true isRunning will be false and vice versa.' ;
  x3do:name 'isPaused' ;
  x3do:type 'SFBool' .
:field_2_3_1_26 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo 'isPaused and isRunning always have opposite values. When isPaused is true isRunning will be false and vice versa.' ;
  x3do:name 'isRunning' ;
  x3do:type 'SFBool' .
:field_2_3_1_27 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ProtoInterface_2_3_1 ;
  x3do:accessType 'initializeOnly' ;
  x3do:appinfo 'Enable/disable console output for troubleshooting' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:ProtoBody_2_3_2 a owl:NamedIndividual, x3do:ProtoBody ;
  x3do:hasParent :ProtoDeclare_2_3 ;
  x3do:hasChildren :LocationOffset .
:LocationOffset a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :ProtoBody_2_3_2 ;
  x3do:hasIS :IS_2_3_2_1_1 ;
  x3do:hasChildren :WhereSensor, :FixedLocation, :ForwardClock, :FastForwardClock, :RewindClock, :FastRewindClock, :SliderClock, :ClockScript ;
  x3do:hasROUTE :ROUTE_2_3_2_1_4, :ROUTE_2_3_2_1_5, :ROUTE_2_3_2_1_12, :ROUTE_2_3_2_1_13, :ROUTE_2_3_2_1_14, :ROUTE_2_3_2_1_15, :ROUTE_2_3_2_1_16, :ROUTE_2_3_2_1_17, :ROUTE_2_3_2_1_18, :ROUTE_2_3_2_1_19, :ROUTE_2_3_2_1_20, :ROUTE_2_3_2_1_21, :ROUTE_2_3_2_1_22, :ROUTE_2_3_2_1_23, :ROUTE_2_3_2_1_24, :ROUTE_2_3_2_1_25, :ROUTE_2_3_2_1_26, :ROUTE_2_3_2_1_27, :ROUTE_2_3_2_1_28, :ROUTE_2_3_2_1_29, :ROUTE_2_3_2_1_30, :ROUTE_2_3_2_1_31, :ROUTE_2_3_2_1_32, :ROUTE_2_3_2_1_33, :ROUTE_2_3_2_1_34, :ROUTE_2_3_2_1_35, :ROUTE_2_3_2_1_36, :ROUTE_2_3_2_1_37, :ROUTE_2_3_2_1_38, :ROUTE_2_3_2_1_39, :ROUTE_2_3_2_1_40, :ROUTE_2_3_2_1_41, :ROUTE_2_3_2_1_42, :ROUTE_2_3_2_1_43, :ROUTE_2_3_2_1_44, :ROUTE_2_3_2_1_45, :ROUTE_2_3_2_1_46, :ROUTE_2_3_2_1_47, :ROUTE_2_3_2_1_48, :ROUTE_2_3_2_1_49, :ROUTE_2_3_2_1_50, :ROUTE_2_3_2_1_51, :ROUTE_2_3_2_1_52, :ROUTE_2_3_2_1_53, :ROUTE_2_3_2_1_54, :ROUTE_2_3_2_1_55, :ROUTE_2_3_2_1_56, :ROUTE_2_3_2_1_57, :ROUTE_2_3_2_1_58, :ROUTE_2_3_2_1_59, :ROUTE_2_3_2_1_60, :ROUTE_2_3_2_1_61, :ROUTE_2_3_2_1_62, :ROUTE_2_3_2_1_63, :ROUTE_2_3_2_1_64, :ROUTE_2_3_2_1_65, :ROUTE_2_3_2_1_66, :ROUTE_2_3_2_1_67, :ROUTE_2_3_2_1_68, :ROUTE_2_3_2_1_69, :ROUTE_2_3_2_1_70, :ROUTE_2_3_2_1_71, :ROUTE_2_3_2_1_72, :ROUTE_2_3_2_1_73, :ROUTE_2_3_2_1_74, :ROUTE_2_3_2_1_75 ;
  x3do:DEF 'LocationOffset' .
:IS_2_3_2_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :LocationOffset ;
  x3do:hasConnect :connect_2_3_2_1_1_1 .
:connect_2_3_2_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_1 ;
  x3do:nodeField 'translation' ;
  x3do:protoField 'locationOffset' .
:WhereSensor a owl:NamedIndividual, x3do:ProximitySensor ;
  x3do:hasParent :LocationOffset ;
  x3do:DEF 'WhereSensor' ;
  x3do:size ( 1000000000 1000000000 1000000000 ) .
:FixedLocation a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :LocationOffset ;
  x3do:hasChildren :MovableLocation ;
  x3do:DEF 'FixedLocation' .
:MovableLocation a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :FixedLocation ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1 ;
  x3do:hasROUTE :ROUTE_2_3_2_1_3_1_2, :ROUTE_2_3_2_1_3_1_3, :ROUTE_2_3_2_1_3_1_4 ;
  x3do:DEF 'MovableLocation' .
:Transform_2_3_2_1_3_1_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MovableLocation ;
  x3do:hasChildren :PlaneMovementSensorGroup, :DisplayControlSwitch, :DisplayLayerScript, :TopLayerSwitch, :MidLayerSwitch, :BottomLayerSwitch ;
  x3do:hasROUTE :ROUTE_2_3_2_1_3_1_1_4, :ROUTE_2_3_2_1_3_1_1_5, :ROUTE_2_3_2_1_3_1_1_6, :ROUTE_2_3_2_1_3_1_1_7, :ROUTE_2_3_2_1_3_1_1_8, :ROUTE_2_3_2_1_3_1_1_9, :ROUTE_2_3_2_1_3_1_1_10, :ROUTE_2_3_2_1_3_1_1_12, :ROUTE_2_3_2_1_3_1_1_14, :ROUTE_2_3_2_1_3_1_1_16 ;
  x3do:translation ( 0 0 -10 ) .
:PlaneMovementSensorGroup a owl:NamedIndividual, x3do:Group ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:hasChildren :PlaneMovementSensor, :MovementVisibilitySensor, :VisibilityControlScript, :MovementControlSwitch ;
  x3do:hasROUTE :ROUTE_2_3_2_1_3_1_1_1_4, :ROUTE_2_3_2_1_3_1_1_1_5, :ROUTE_2_3_2_1_3_1_1_1_6 ;
  x3do:DEF 'PlaneMovementSensorGroup' .
:PlaneMovementSensor a owl:NamedIndividual, x3do:PlaneSensor ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:DEF 'PlaneMovementSensor' ;
  x3do:description 'select and drag to move interface' .
:MovementVisibilitySensor a owl:NamedIndividual, x3do:VisibilitySensor ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:DEF 'MovementVisibilitySensor' .
:VisibilityControlScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:hasField :field_2_3_2_1_3_1_1_1_3_1, :field_2_3_2_1_3_1_1_1_3_2, :field_2_3_2_1_3_1_1_1_3_3, :field_2_3_2_1_3_1_1_1_3_4, :field_2_3_2_1_3_1_1_1_3_5, :field_2_3_2_1_3_1_1_1_3_6, :field_2_3_2_1_3_1_1_1_3_7, :field_2_3_2_1_3_1_1_1_3_8, :field_2_3_2_1_3_1_1_1_3_9, :field_2_3_2_1_3_1_1_1_3_10 ;
  x3do:hasIS :IS_2_3_2_1_3_1_1_1_3_11 ;
  x3do:DEF 'VisibilityControlScript' ;
  x3do:sourceCode """
ecmascript:

function tracePrint (text)
{
    if (traceEnabled) Browser.println ('[DvdController ' + description + ' VisibilityControlScript] ' + text);
}
function initialize ()
{
    translationOffsetChanged = locationOffset;
    planeSensorTranslation   = locationOffset;
    setPlaneSensorIsActive (false, -1); // dummy timeStamp
}
function setIsVisible (value, timeStamp)
{
    isVisible = value;
    tracePrint('isVisible=' + value);
}
function setPlaneSensorIsActive (value, timeStamp)
{
    tracePrint('PlaneSensor isActive=' + value + ', translationOffsetChanged=' + translationOffsetChanged.toString());

    if (value == false)
    {
            tracePrint('planeSensorTranslation=' + planeSensorTranslation.toString());
            if (isVisible)
            {
                    translationChanged = planeSensorTranslation;
            }
            else
            {
                    translationChanged = new SFVec3f(0, 0, 0);
                    translationOffsetChanged  = new SFVec3f(0, 0, 0);
            }
    }
}
function setPlaneSensorTranslation (value, timeStamp)
{
	planeSensorTranslation = value;
	tracePrint('planeSensorTranslation=' + value.toString());
}
""" .
:field_2_3_2_1_3_1_1_1_3_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_1_3_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_1_3_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'isVisible' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_3_2_1_3_1_1_1_3_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'locationOffset' ;
  x3do:type 'SFVec3f' .
:field_2_3_2_1_3_1_1_1_3_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'planeSensorTranslation' ;
  x3do:type 'SFVec3f' ;
  x3do:value ( 0 0 0 ) .
:field_2_3_2_1_3_1_1_1_3_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setIsVisible' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_1_3_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setPlaneSensorIsActive' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_1_3_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setPlaneSensorTranslation' ;
  x3do:type 'SFVec3f' .
:field_2_3_2_1_3_1_1_1_3_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'translationChanged' ;
  x3do:type 'SFVec3f' .
:field_2_3_2_1_3_1_1_1_3_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'translationOffsetChanged' ;
  x3do:type 'SFVec3f' .
:IS_2_3_2_1_3_1_1_1_3_11 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :VisibilityControlScript ;
  x3do:hasConnect :connect_2_3_2_1_3_1_1_1_3_11_1, :connect_2_3_2_1_3_1_1_1_3_11_2, :connect_2_3_2_1_3_1_1_1_3_11_3 .
:connect_2_3_2_1_3_1_1_1_3_11_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_1_3_11 ;
  x3do:nodeField 'description' ;
  x3do:protoField 'description' .
:connect_2_3_2_1_3_1_1_1_3_11_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_1_3_11 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:connect_2_3_2_1_3_1_1_1_3_11_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_1_3_11 ;
  x3do:nodeField 'locationOffset' ;
  x3do:protoField 'locationOffset' .
:ROUTE_2_3_2_1_3_1_1_1_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'PlaneMovementSensor' ;
  x3do:toField 'setPlaneSensorIsActive' ;
  x3do:toNode 'VisibilityControlScript' .
:ROUTE_2_3_2_1_3_1_1_1_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:fromField 'translation_changed' ;
  x3do:fromNode 'PlaneMovementSensor' ;
  x3do:toField 'setPlaneSensorTranslation' ;
  x3do:toNode 'VisibilityControlScript' .
:ROUTE_2_3_2_1_3_1_1_1_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'MovementVisibilitySensor' ;
  x3do:toField 'setIsVisible' ;
  x3do:toNode 'VisibilityControlScript' .
:MovementControlSwitch a owl:NamedIndividual, x3do:Switch ;
  x3do:hasParent :PlaneMovementSensorGroup ;
  x3do:hasChildren :AllLayer, :TwoLayer, :OneLayer ;
  x3do:DEF 'MovementControlSwitch' ;
  x3do:whichChoice 0 .
:AllLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MovementControlSwitch ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_1_7_1_1 ;
  x3do:DEF 'AllLayer' ;
  x3do:translation ( -0.25 0 0 ) .
:Shape_2_3_2_1_3_1_1_1_7_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :AllLayer ;
  x3do:hasAppearance :MovementControlAppearance ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_1_7_1_1_2 .
:MovementControlAppearance a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_1_7_1_1 ;
  x3do:hasMaterial :Material_2_3_2_1_3_1_1_1_7_1_1_1_1 ;
  x3do:DEF 'MovementControlAppearance' .
:Material_2_3_2_1_3_1_1_1_7_1_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :MovementControlAppearance ;
  x3do:diffuseColor ( 0.65 0.65 0.65 ) .
:Box_2_3_2_1_3_1_1_1_7_1_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_1_7_1_1 ;
  x3do:size ( 0.25 1.75 0.05 ) .
:TwoLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MovementControlSwitch ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_1_7_2_1 ;
  x3do:DEF 'TwoLayer' ;
  x3do:translation ( -0.25 -0.285 0 ) .
:Shape_2_3_2_1_3_1_1_1_7_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TwoLayer ;
  x3do:hasAppearance :MovementControlAppearance-USE-1 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_1_7_2_1_2 .
:MovementControlAppearance-USE-1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_1_7_2_1 ;
  owl:sameAs :MovementControlAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_1_7_2_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_1_7_2_1 ;
  x3do:size ( 0.25 1.175 0.05 ) .
:OneLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MovementControlSwitch ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_1_7_3_1 ;
  x3do:DEF 'OneLayer' ;
  x3do:translation ( -0.25 -0.575 0 ) .
:Shape_2_3_2_1_3_1_1_1_7_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :OneLayer ;
  x3do:hasAppearance :MovementControlAppearance-USE-2 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_1_7_3_1_2 .
:MovementControlAppearance-USE-2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_1_7_3_1 ;
  owl:sameAs :MovementControlAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_1_7_3_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_1_7_3_1 ;
  x3do:size ( 0.25 0.6 0.05 ) .
:DisplayControlSwitch a owl:NamedIndividual, x3do:Switch ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:hasChildren :DisplayAllLayer, :DisplayTwoLayer, :DisplayOneLayer, :DisplayNoLayer ;
  x3do:DEF 'DisplayControlSwitch' ;
  x3do:whichChoice 0 .
:DisplayAllLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayControlSwitch ;
  x3do:hasChildren :DisplayAllToggle, :DisplayTopLayerToggle, :DisplayMidLayerToggle, :DisplayBottomLayerToggle ;
  x3do:DEF 'DisplayAllLayer' .
:DisplayAllToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayAllLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_1_1_1, :DisplayAllSensor, :Shape_2_3_2_1_3_1_1_2_1_1_3 ;
  x3do:DEF 'DisplayAllToggle' .
:Shape_2_3_2_1_3_1_1_2_1_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayAllToggle ;
  x3do:hasAppearance :ButtonBaseAppearance ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_1_1_1_2 .
:ButtonBaseAppearance a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_1_1 ;
  x3do:hasMaterial :Material_2_3_2_1_3_1_1_2_1_1_1_1_1 ;
  x3do:DEF 'ButtonBaseAppearance' .
:Material_2_3_2_1_3_1_1_2_1_1_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :ButtonBaseAppearance ;
  x3do:diffuseColor ( 0.65 0.65 0.65 ) .
:Box_2_3_2_1_3_1_1_2_1_1_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_1_1 ;
  x3do:size ( 0.25 1.75 0.05 ) .
:DisplayAllSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayAllToggle ;
  x3do:DEF 'DisplayAllSensor' ;
  x3do:description 'display/hide all rows' .
:Shape_2_3_2_1_3_1_1_2_1_1_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayAllToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_1_1_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_1_1_3_2 .
:Appearance_2_3_2_1_3_1_1_2_1_1_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_1_3 ;
  x3do:hasMaterial :DisplayAllMaterial .
:DisplayAllMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_1_1_3_1 ;
  x3do:DEF 'DisplayAllMaterial' ;
  x3do:diffuseColor ( 0 0.35 0.8 ) .
:Cylinder_2_3_2_1_3_1_1_2_1_1_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_1_3 ;
  x3do:height 1.65 ;
  x3do:radius 0.1 .
:DisplayTopLayerToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayAllLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_1_2_1, :DisplayTopLayerSensor, :Shape_2_3_2_1_3_1_1_2_1_2_3 ;
  x3do:DEF 'DisplayTopLayerToggle' ;
  x3do:translation ( 0.25 0.575 0 ) .
:Shape_2_3_2_1_3_1_1_2_1_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayTopLayerToggle ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-1 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_1_2_1_2 .
:ButtonBaseAppearance-USE-1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_2_1 ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_2_1_2_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_2_1 ;
  x3do:size ( 0.25 0.6 0.05 ) .
:DisplayTopLayerSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayTopLayerToggle ;
  x3do:DEF 'DisplayTopLayerSensor' ;
  x3do:description 'hide top row' .
:Shape_2_3_2_1_3_1_1_2_1_2_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayTopLayerToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_1_2_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_1_2_3_2 .
:Appearance_2_3_2_1_3_1_1_2_1_2_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_2_3 ;
  x3do:hasMaterial :DisplayControlMaterial .
:DisplayControlMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_1_2_3_1 ;
  x3do:DEF 'DisplayControlMaterial' ;
  x3do:diffuseColor ( 0 0.35 0.8 ) .
:Cylinder_2_3_2_1_3_1_1_2_1_2_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_2_3 ;
  x3do:height 0.5 ;
  x3do:radius 0.1 .
:DisplayMidLayerToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayAllLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_1_3_1, :DisplayMidLayerSensor, :Shape_2_3_2_1_3_1_1_2_1_3_3 ;
  x3do:DEF 'DisplayMidLayerToggle' ;
  x3do:translation ( 0.25 0 0 ) .
:Shape_2_3_2_1_3_1_1_2_1_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayMidLayerToggle ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-2 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_1_3_1_2 .
:ButtonBaseAppearance-USE-2 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_3_1 ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_2_1_3_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_3_1 ;
  x3do:size ( 0.25 0.6 0.05 ) .
:DisplayMidLayerSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayMidLayerToggle ;
  x3do:DEF 'DisplayMidLayerSensor' ;
  x3do:description 'hide middle row' .
:Shape_2_3_2_1_3_1_1_2_1_3_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayMidLayerToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_1_3_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_1_3_3_2 .
:Appearance_2_3_2_1_3_1_1_2_1_3_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_3_3 ;
  x3do:hasMaterial :DisplayControlMaterial-USE-1 .
:DisplayControlMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_1_3_3_1 ;
  owl:sameAs :DisplayControlMaterial . # DEF matching this USE
:Cylinder_2_3_2_1_3_1_1_2_1_3_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_3_3 ;
  x3do:height 0.5 ;
  x3do:radius 0.1 .
:DisplayBottomLayerToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayAllLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_1_4_1, :DisplayBottomLayerSensor, :Shape_2_3_2_1_3_1_1_2_1_4_3 ;
  x3do:DEF 'DisplayBottomLayerToggle' ;
  x3do:translation ( 0.25 -0.575 0 ) .
:Shape_2_3_2_1_3_1_1_2_1_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayBottomLayerToggle ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-3 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_1_4_1_2 .
:ButtonBaseAppearance-USE-3 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_4_1 ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_2_1_4_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_4_1 ;
  x3do:size ( 0.25 0.6 0.05 ) .
:DisplayBottomLayerSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayBottomLayerToggle ;
  x3do:DEF 'DisplayBottomLayerSensor' ;
  x3do:description 'hide bottom row' .
:Shape_2_3_2_1_3_1_1_2_1_4_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayBottomLayerToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_1_4_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_1_4_3_2 .
:Appearance_2_3_2_1_3_1_1_2_1_4_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_4_3 ;
  x3do:hasMaterial :DisplayControlMaterial-USE-2 .
:DisplayControlMaterial-USE-2 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_1_4_3_1 ;
  owl:sameAs :DisplayControlMaterial . # DEF matching this USE
:Cylinder_2_3_2_1_3_1_1_2_1_4_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_1_4_3 ;
  x3do:height 0.5 ;
  x3do:radius 0.1 .
:DisplayTwoLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayControlSwitch ;
  x3do:hasChildren :DisplayTwoToggle, :DisplayMidLayerToggle-USE-1, :DisplayBottomLayerToggle-USE-1 ;
  x3do:DEF 'DisplayTwoLayer' .
:DisplayTwoToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayTwoLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_2_1_1, :DisplayAllSensor-USE-1, :Shape_2_3_2_1_3_1_1_2_2_1_3 ;
  x3do:DEF 'DisplayTwoToggle' ;
  x3do:translation ( 0 -0.285 0 ) .
:Shape_2_3_2_1_3_1_1_2_2_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayTwoToggle ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-4 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_2_1_1_2 .
:ButtonBaseAppearance-USE-4 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_2_1_1 ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_2_2_1_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_2_1_1 ;
  x3do:size ( 0.25 1.175 0.05 ) .
:DisplayAllSensor-USE-1 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayTwoToggle ;
  owl:sameAs :DisplayAllSensor . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_2_2_1_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayTwoToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_2_1_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_2_1_3_2 .
:Appearance_2_3_2_1_3_1_1_2_2_1_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_2_1_3 ;
  x3do:hasMaterial :DisplayAllMaterial-USE-1 .
:DisplayAllMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_2_1_3_1 ;
  owl:sameAs :DisplayAllMaterial . # DEF matching this USE
:Cylinder_2_3_2_1_3_1_1_2_2_1_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_2_1_3 ;
  x3do:height 1.08 ;
  x3do:radius 0.1 .
:DisplayMidLayerToggle-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayTwoLayer ;
  owl:sameAs :DisplayMidLayerToggle . # DEF matching this USE
:DisplayBottomLayerToggle-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayTwoLayer ;
  owl:sameAs :DisplayBottomLayerToggle . # DEF matching this USE
:DisplayOneLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayControlSwitch ;
  x3do:hasChildren :DisplayOneToggle, :DisplayBottomLayerToggle-USE-2 ;
  x3do:DEF 'DisplayOneLayer' .
:DisplayOneToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayOneLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_3_1_1, :DisplayAllSensor-USE-2, :Shape_2_3_2_1_3_1_1_2_3_1_3 ;
  x3do:DEF 'DisplayOneToggle' ;
  x3do:translation ( 0 -0.575 0 ) .
:Shape_2_3_2_1_3_1_1_2_3_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayOneToggle ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-5 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_3_1_1_2 .
:ButtonBaseAppearance-USE-5 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_3_1_1 ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_2_3_1_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_3_1_1 ;
  x3do:size ( 0.25 0.6 0.05 ) .
:DisplayAllSensor-USE-2 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayOneToggle ;
  owl:sameAs :DisplayAllSensor . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_2_3_1_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayOneToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_3_1_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_3_1_3_2 .
:Appearance_2_3_2_1_3_1_1_2_3_1_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_3_1_3 ;
  x3do:hasMaterial :DisplayAllMaterial-USE-2 .
:DisplayAllMaterial-USE-2 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_3_1_3_1 ;
  owl:sameAs :DisplayAllMaterial . # DEF matching this USE
:Cylinder_2_3_2_1_3_1_1_2_3_1_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_3_1_3 ;
  x3do:height 0.5 ;
  x3do:radius 0.1 .
:DisplayBottomLayerToggle-USE-2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayOneLayer ;
  owl:sameAs :DisplayBottomLayerToggle . # DEF matching this USE
:DisplayNoLayer a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayControlSwitch ;
  x3do:hasChildren :DisplayNoToggle ;
  x3do:DEF 'DisplayNoLayer' .
:DisplayNoToggle a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayNoLayer ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_2_4_1_1, :DisplayAllSensor-USE-3, :Shape_2_3_2_1_3_1_1_2_4_1_3 ;
  x3do:DEF 'DisplayNoToggle' ;
  x3do:translation ( 0 -0.575 0 ) .
:Shape_2_3_2_1_3_1_1_2_4_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayNoToggle ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-6 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_2_4_1_1_2 .
:ButtonBaseAppearance-USE-6 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_4_1_1 ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_2_4_1_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_4_1_1 ;
  x3do:size ( 0.25 0.6 0.05 ) .
:DisplayAllSensor-USE-3 a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :DisplayNoToggle ;
  owl:sameAs :DisplayAllSensor . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_2_4_1_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DisplayNoToggle ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_2_4_1_3_1 ;
  x3do:hasGeometry :Cylinder_2_3_2_1_3_1_1_2_4_1_3_2 .
:Appearance_2_3_2_1_3_1_1_2_4_1_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_4_1_3 ;
  x3do:hasMaterial :DisplayAllMaterial-USE-3 .
:DisplayAllMaterial-USE-3 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_2_4_1_3_1 ;
  owl:sameAs :DisplayAllMaterial . # DEF matching this USE
:Cylinder_2_3_2_1_3_1_1_2_4_1_3_2 a owl:NamedIndividual, x3do:Cylinder ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_2_4_1_3 ;
  x3do:height 0.5 ;
  x3do:radius 0.1 .
:DisplayLayerScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:hasField :field_2_3_2_1_3_1_1_3_1, :field_2_3_2_1_3_1_1_3_2, :field_2_3_2_1_3_1_1_3_3, :field_2_3_2_1_3_1_1_3_4, :field_2_3_2_1_3_1_1_3_5, :field_2_3_2_1_3_1_1_3_6, :field_2_3_2_1_3_1_1_3_7, :field_2_3_2_1_3_1_1_3_8, :field_2_3_2_1_3_1_1_3_9, :field_2_3_2_1_3_1_1_3_10, :field_2_3_2_1_3_1_1_3_11, :field_2_3_2_1_3_1_1_3_12, :field_2_3_2_1_3_1_1_3_13, :field_2_3_2_1_3_1_1_3_14, :field_2_3_2_1_3_1_1_3_15, :field_2_3_2_1_3_1_1_3_16, :field_2_3_2_1_3_1_1_3_17, :field_2_3_2_1_3_1_1_3_18 ;
  x3do:hasIS :IS_2_3_2_1_3_1_1_3_19 ;
  x3do:DEF 'DisplayLayerScript' ;
  x3do:sourceCode """
ecmascript:

function initialize()
{
	setDisplayMode(displayMode, -1);
}
function tracePrint (text)
{
	if (traceEnabled) Browser.println ('[DvdController ' + description + ' DisplayLayerScript] ' + text);
}
function setDisplayMode(value, timeStamp)
{
	// javascript switch statement is convenient but not consistently supported, so test the old-fashioned way:
        
        if (displayMode == 'ALL')
	{
            movementControlSwitchSelection = 0; //AllLayer
            displayControlSwitchSelection = 0;  //DisplayAllLayer
            displayAllColor = new SFColor(0, 0.35, 0.8);
            topLayerSwitchSelection = 0;
            midLayerSwitchSelection = 0;
            bottomLayerSwitchSelection = 0;
	}
        else if (displayMode == 'DIS_ONLY')
        {
            movementControlSwitchSelection = 2; //OneLayer
            displayControlSwitchSelection = 2;  //DisplayOneLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 2;        //DisplayNoneMid
            bottomLayerSwitchSelection = 1;     //DisplayDISModeBottom
	}
        else if (displayMode == 'PLAYBACK_ONLY')
        {
            movementControlSwitchSelection = 2; //OneLayer
            displayControlSwitchSelection = 2;  //DisplayOneLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 2;        //DisplayNoneMid
            bottomLayerSwitchSelection = 2;     //DisplayPlaybackButtonsBottom
	}
        else if (displayMode == 'SLIDER_ONLY')
        {
            movementControlSwitchSelection = 2; //OneLayer
            displayControlSwitchSelection = 2;  //DisplayOneLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 2;        //DisplayNoneMid
            bottomLayerSwitchSelection = 0;     //DiaplaySliderBottom
	}
        else if (displayMode == 'DIS_PLAYBACK')
        {
            movementControlSwitchSelection = 1; //TwoLayer
            displayControlSwitchSelection = 1;  //DisplayTwoLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 1;        //DisplayDISModeMid
            bottomLayerSwitchSelection = 2;     //DisplayPlaybackButtonsBottom
	}
        else if (displayMode == 'DIS_SLIDER')
        {
            movementControlSwitchSelection = 1; //TwoLayer
            displayControlSwitchSelection = 1;  //DisplayTwoLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 1;        //DisplayDISModeMid
            bottomLayerSwitchSelection = 0;     //DisplaySliderBottom
	}
        else if (displayMode == 'PLAYBACK_SLIDER')
        {
            movementControlSwitchSelection = 1; //TwoLayer
            displayControlSwitchSelection = 1;  //DisplayTwoLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 0;        //DisplayPlaybackButtosMid
            bottomLayerSwitchSelection = 0;     //DisplaySliderBottom
	}
        else
        {
            if (displayMode != 'NONE')
                Browser.println ('Unknown value for displayMode=' + displayMode + ', assuming value of NONE');
                
            movementControlSwitchSelection = 2; //OneLayer
            displayControlSwitchSelection = 3;  //DisplayNoLayer
            displayAllColor = new SFColor(1, 0, 0);
            topLayerSwitchSelection = 1;        //DisplayNoneTop
            midLayerSwitchSelection = 2;        //DisplayNoneMid
            bottomLayerSwitchSelection = 3;     //DisplayNoneBottom
	}
}

function displayAllToggleEnabled(value, timeStamp) {
	if (displayAllToggleArmed == false)
	{
		displayAllToggleArmed = true;
		if (displayControlSwitchSelection == 0)
		{
			movementControlSwitchSelection = 2;
			displayControlSwitchSelection = 3;
			displayAllColor = new SFColor(1, 0, 0);
			topLayerSwitchSelection = 1;
			midLayerSwitchSelection = 2;
			bottomLayerSwitchSelection = 3;
			tracePrint('movementControlSwitchSelection =' + movementControlSwitchSelection);
			tracePrint('displayControlSwitchSelection =' + displayControlSwitchSelection);
			tracePrint('topLayerSwitchSelection =' + topLayerSwitchSelection);
			tracePrint('midLayerSwitchSelection =' + midLayerSwitchSelection);
			tracePrint('bottomLayerSwitchSelection =' + bottomLayerSwitchSelection);
		}
		else //displayControlSwitchSelection not 0
		{
			movementControlSwitchSelection = 0;
			displayControlSwitchSelection = 0;
			displayAllColor = new SFColor(0, 0.35, 0.8);
			topLayerSwitchSelection = 0;
			midLayerSwitchSelection = 0;
			bottomLayerSwitchSelection = 0;
			tracePrint('movementControlSwitchSelection =' + movementControlSwitchSelection);
			tracePrint('displayControlSwitchSelection =' + displayControlSwitchSelection);
			tracePrint('topLayerSwitchSelection =' + topLayerSwitchSelection);
			tracePrint('midLayerSwitchSelection =' + midLayerSwitchSelection);
			tracePrint('bottomLayerSwitchSelection =' + bottomLayerSwitchSelection);
		}
	}
	else
	{
		displayAllToggleArmed = false;
		return;
	}
}

function topLayerToggleEnabled(value, timeStamp) {
	if (topLayerToggleArmed == false)
	{
		topLayerToggleArmed = true;
		displayControlSwitchSelection += 1;
		if (displayControlSwitchSelection == 3)
			movementControlSwitchSelection = 2;
		else
			movementControlSwitchSelection = displayControlSwitchSelection;
		displayAllColor = new SFColor(1, 0, 0);
		topLayerSwitchSelection = 1;
		tracePrint('movementControlSwitchSelection =' + movementControlSwitchSelection);
		tracePrint('displayControlSwitchSelection =' + displayControlSwitchSelection);
		tracePrint('topLayerSwitchSelection =' + topLayerSwitchSelection);
	}
	else
	{
		topLayerToggleArmed = false;
		return;
	}
}

function midLayerToggleEnabled(value, timeStamp) {
	if (midLayerToggleArmed == false)
	{
		midLayerToggleArmed = true;
		displayControlSwitchSelection += 1;
		if (displayControlSwitchSelection == 3)
			movementControlSwitchSelection = 2;
		else
			movementControlSwitchSelection = displayControlSwitchSelection;
		displayAllColor = new SFColor(1, 0, 0);
		if (topLayerSwitchSelection == 0)
		{
			topLayerSwitchSelection = 1;
			midLayerSwitchSelection = 1;
		}
		else
		{
			midLayerSwitchSelection = 2;
		}
		tracePrint('movementControlSwitchSelection =' + movementControlSwitchSelection);
		tracePrint('displayControlSwitchSelection =' + displayControlSwitchSelection);
		tracePrint('topLayerSwitchSelection =' + topLayerSwitchSelection);
		tracePrint('midLayerSwitchSelection =' + midLayerSwitchSelection);
	}
	else
	{
		midLayerToggleArmed = false;
		return;
	}
}

function bottomLayerToggleEnabled(value, timeStamp) {
	if (bottomLayerToggleArmed == false)
	{
		bottomLayerToggleArmed = true;
		displayControlSwitchSelection += 1;
		if (displayControlSwitchSelection == 3)
			movementControlSwitchSelection = 2;
		else
			movementControlSwitchSelection = displayControlSwitchSelection;
		displayAllColor = new SFColor(1, 0, 0);
		if (topLayerSwitchSelection == 0) //if top display animation mode selection
		{
			topLayerSwitchSelection = 1; //top display nothing
			midLayerSwitchSelection = 1; //mid display animation mode selection
			bottomLayerSwitchSelection = 2; //bottom display playback control buttons
		}
		else if (midLayerSwitchSelection == 0) //if mid display playback control buttons
		{
			//top display nothing implied
			midLayerSwitchSelection = 2; //mid display nothing
			bottomLayerSwitchSelection = 2; //bottom display playback control buttons
		}
		else if (midLayerSwitchSelection == 1) //if mid display animation mode selection
		{
			//top display nothing implied
			midLayerSwitchSelection = 2; //mid display nothing
			bottomLayerSwitchSelection = 1; //bottom display animation mode selection
		}
		else //if mid display nothing
		{
			//top display nothing implied
			//mid display nothing implied
			bottomLayerSwitchSelection = 3; //bottom display nothing
		}

		tracePrint('movementControlSwitchSelection =' + movementControlSwitchSelection);
		tracePrint('displayControlSwitchSelection =' + displayControlSwitchSelection);
		tracePrint('topLayerSwitchSelection =' + topLayerSwitchSelection);
		tracePrint('midLayerSwitchSelection =' + midLayerSwitchSelection);
		tracePrint('bottomLayerSwitchSelection =' + bottomLayerSwitchSelection);
	}
	else
	{
		bottomLayerToggleArmed = false;
		return;
	}
}
""" .
:field_2_3_2_1_3_1_1_3_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_3_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_3_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'displayMode' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_3_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setDisplayMode' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_3_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'displayAllToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_3_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'topLayerToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_3_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'midLayerToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_3_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'bottomLayerToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_3_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'displayAllToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_3_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'topLayerToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_3_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'midLayerToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_3_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'bottomLayerToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_3_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'displayAllColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_3_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo '0 - Display all three animation controls (DIS Mode Selection Playback Controls and Time scale) in a three layer stack. 1 - Display two of the three animation controls in a two layer stack. 2 - Display one of the three animation controls in a one layer stack.' ;
  x3do:name 'movementControlSwitchSelection' ;
  x3do:type 'SFInt32' .
:field_2_3_2_1_3_1_1_3_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo '0 - Display all three animation controls (DIS Mode Selection Playback Controls and Time scale) in a three layer stack. 1 - Display two of the three animation controls in a two layer stack. 2 - Display one of the three animation controls in a one layer stack. 3 - Display no layers of animation controls.' ;
  x3do:name 'displayControlSwitchSelection' ;
  x3do:type 'SFInt32' .
:field_2_3_2_1_3_1_1_3_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo '0 - Display DIS Mode (Master Remote Local) Selection at top layer. 1 - Do not display anything at top layer.' ;
  x3do:name 'topLayerSwitchSelection' ;
  x3do:type 'SFInt32' .
:field_2_3_2_1_3_1_1_3_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo '0 - Display Playback Control Buttons (Reset to Start Fast Rewind Rewind Pause Play Fast Forward Reset To End) at the mid layer. 1 - Display DIS Mode Selection at the mid layer. 2 - Display nothing at the mid layer.' ;
  x3do:name 'midLayerSwitchSelection' ;
  x3do:type 'SFInt32' .
:field_2_3_2_1_3_1_1_3_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:accessType 'outputOnly' ;
  x3do:appinfo '0 - Display Time Scale at the bottom layer. 1 - Display DIS Mode Selection at the bottom layer. 2 - Display Playback Control Buttons at the bottom layer. 3 - Display nothing at the bottom layer.' ;
  x3do:name 'bottomLayerSwitchSelection' ;
  x3do:type 'SFInt32' .
:IS_2_3_2_1_3_1_1_3_19 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :DisplayLayerScript ;
  x3do:hasConnect :connect_2_3_2_1_3_1_1_3_19_1, :connect_2_3_2_1_3_1_1_3_19_2, :connect_2_3_2_1_3_1_1_3_19_3, :connect_2_3_2_1_3_1_1_3_19_4 .
:connect_2_3_2_1_3_1_1_3_19_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_3_19 ;
  x3do:nodeField 'description' ;
  x3do:protoField 'description' .
:connect_2_3_2_1_3_1_1_3_19_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_3_19 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:connect_2_3_2_1_3_1_1_3_19_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_3_19 ;
  x3do:nodeField 'displayMode' ;
  x3do:protoField 'displayMode' .
:connect_2_3_2_1_3_1_1_3_19_4 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_3_19 ;
  x3do:nodeField 'setDisplayMode' ;
  x3do:protoField 'setDisplayMode' .
:ROUTE_2_3_2_1_3_1_1_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'DisplayAllSensor' ;
  x3do:toField 'displayAllToggleEnabled' ;
  x3do:toNode 'DisplayLayerScript' .
:ROUTE_2_3_2_1_3_1_1_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'DisplayTopLayerSensor' ;
  x3do:toField 'topLayerToggleEnabled' ;
  x3do:toNode 'DisplayLayerScript' .
:ROUTE_2_3_2_1_3_1_1_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'DisplayMidLayerSensor' ;
  x3do:toField 'midLayerToggleEnabled' ;
  x3do:toNode 'DisplayLayerScript' .
:ROUTE_2_3_2_1_3_1_1_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'DisplayBottomLayerSensor' ;
  x3do:toField 'bottomLayerToggleEnabled' ;
  x3do:toNode 'DisplayLayerScript' .
:ROUTE_2_3_2_1_3_1_1_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'movementControlSwitchSelection' ;
  x3do:fromNode 'DisplayLayerScript' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'MovementControlSwitch' .
:ROUTE_2_3_2_1_3_1_1_9 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'displayControlSwitchSelection' ;
  x3do:fromNode 'DisplayLayerScript' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'DisplayControlSwitch' .
:ROUTE_2_3_2_1_3_1_1_10 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'displayAllColor' ;
  x3do:fromNode 'DisplayLayerScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'DisplayAllMaterial' .
:TopLayerSwitch a owl:NamedIndividual, x3do:Switch ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:hasChildren :DisplayDISModeTop, :DisplayNoneTop ;
  x3do:DEF 'TopLayerSwitch' ;
  x3do:whichChoice 0 .
:DisplayDISModeTop a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :TopLayerSwitch ;
  x3do:hasChildren :DISModeButtons ;
  x3do:DEF 'DisplayDISModeTop' ;
  x3do:translation ( 2.86 0.58 0 ) .
:DISModeButtons a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayDISModeTop ;
  x3do:hasChildren :GroupButtonBaseShape, :Transform_2_3_2_1_3_1_1_11_1_1_2, :Transform_2_3_2_1_3_1_1_11_1_1_3, :Transform_2_3_2_1_3_1_1_11_1_1_4, :DISModeScript ;
  x3do:hasROUTE :ROUTE_2_3_2_1_3_1_1_11_1_1_6, :ROUTE_2_3_2_1_3_1_1_11_1_1_7, :ROUTE_2_3_2_1_3_1_1_11_1_1_8, :ROUTE_2_3_2_1_3_1_1_11_1_1_9, :ROUTE_2_3_2_1_3_1_1_11_1_1_10, :ROUTE_2_3_2_1_3_1_1_11_1_1_11, :ROUTE_2_3_2_1_3_1_1_11_1_1_12 ;
  x3do:DEF 'DISModeButtons' .
:GroupButtonBaseShape a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :DISModeButtons ;
  x3do:hasAppearance :ButtonBaseAppearance-USE-7 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_11_1_1_1_2 ;
  x3do:DEF 'GroupButtonBaseShape' .
:ButtonBaseAppearance-USE-7 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :GroupButtonBaseShape ;
  owl:sameAs :ButtonBaseAppearance . # DEF matching this USE
:Box_2_3_2_1_3_1_1_11_1_1_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :GroupButtonBaseShape ;
  x3do:size ( 5 0.6 0.05 ) .
:Transform_2_3_2_1_3_1_1_11_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DISModeButtons ;
  x3do:hasChildren :MasterSensor, :PushButton, :Transform_2_3_2_1_3_1_1_11_1_1_2_3 ;
  x3do:translation ( -1.6 0 0 ) .
:MasterSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_2 ;
  x3do:DEF 'MasterSensor' ;
  x3do:description 'Master entity, send DIS PDU packets' .
:PushButton a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_11_1_1_2_2_1 ;
  x3do:hasGeometry :DISModePushButton ;
  x3do:DEF 'PushButton' .
:Appearance_2_3_2_1_3_1_1_11_1_1_2_2_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :PushButton ;
  x3do:hasMaterial :MasterButtonMaterial .
:MasterButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_11_1_1_2_2_1 ;
  x3do:DEF 'MasterButtonMaterial' ;
  x3do:diffuseColor ( 0.9 0.9 0.9 ) ;
  x3do:transparency 1 .
:DISModePushButton a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :PushButton ;
  x3do:hasCoord :Coordinate_2_3_2_1_3_1_1_11_1_1_2_2_2_1 ;
  x3do:DEF 'DISModePushButton' ;
  x3do:ccw false ;
  x3do:coordIndex ( 0 1 2 3 0 -1 ) ;
  x3do:solid false .
:Coordinate_2_3_2_1_3_1_1_11_1_1_2_2_2_1 a owl:NamedIndividual, x3do:Coordinate ;
  x3do:hasParent :DISModePushButton ;
  x3do:point ( -0.8 0.25 0.05 0.8 0.25 0.05 0.8 -0.25 0.05 -0.8 -0.25 0.05 ) .
:Transform_2_3_2_1_3_1_1_11_1_1_2_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_2 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_11_1_1_2_3_1 ;
  x3do:translation ( 0 0 0.15 ) .
:Shape_2_3_2_1_3_1_1_11_1_1_2_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_2_3 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_11_1_1_2_3_1_1 ;
  x3do:hasGeometry :Text_2_3_2_1_3_1_1_11_1_1_2_3_1_2 .
:Appearance_2_3_2_1_3_1_1_11_1_1_2_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_11_1_1_2_3_1 ;
  x3do:hasMaterial :MasterLabelMaterial .
:MasterLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_11_1_1_2_3_1_1 ;
  x3do:DEF 'MasterLabelMaterial' .
:Text_2_3_2_1_3_1_1_11_1_1_2_3_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_11_1_1_2_3_1 ;
  x3do:hasFontStyle :LabelFont ;
  x3do:string '"networkWriter"' .
:LabelFont a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_3_2_1_3_1_1_11_1_1_2_3_1_2 ;
  x3do:DEF 'LabelFont' ;
  x3do:justify '"MIDDLE" "MIDDLE"' ;
  x3do:size 0.2 ;
  x3do:cssStyle 'BOLD' .
:Transform_2_3_2_1_3_1_1_11_1_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DISModeButtons ;
  x3do:hasChildren :RemoteSensor, :PushButton-USE-1, :Transform_2_3_2_1_3_1_1_11_1_1_3_3 .
:RemoteSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_3 ;
  x3do:DEF 'RemoteSensor' ;
  x3do:description 'Remote entity, read DIS PDU packets' .
:PushButton-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_3 ;
  owl:sameAs :PushButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_11_1_1_3_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_3 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_11_1_1_3_3_1 ;
  x3do:translation ( 0.1 0 0.25 ) .
:Shape_2_3_2_1_3_1_1_11_1_1_3_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_3_3 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_11_1_1_3_3_1_1 ;
  x3do:hasGeometry :Text_2_3_2_1_3_1_1_11_1_1_3_3_1_2 .
:Appearance_2_3_2_1_3_1_1_11_1_1_3_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_11_1_1_3_3_1 ;
  x3do:hasMaterial :RemoteLabelMaterial .
:RemoteLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_11_1_1_3_3_1_1 ;
  x3do:DEF 'RemoteLabelMaterial' .
:Text_2_3_2_1_3_1_1_11_1_1_3_3_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_11_1_1_3_3_1 ;
  x3do:hasFontStyle :LabelFont-USE-1 ;
  x3do:string '"networkReader"' .
:LabelFont-USE-1 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_3_2_1_3_1_1_11_1_1_3_3_1_2 ;
  owl:sameAs :LabelFont . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_11_1_1_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DISModeButtons ;
  x3do:hasChildren :LocalSensor, :PushButton-USE-2, :Transform_2_3_2_1_3_1_1_11_1_1_4_3 ;
  x3do:translation ( 1.6 0 0 ) .
:LocalSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_4 ;
  x3do:DEF 'LocalSensor' ;
  x3do:description 'Local entity, no DIS traffic' .
:PushButton-USE-2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_4 ;
  owl:sameAs :PushButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_11_1_1_4_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_11_1_1_4_3_1 ;
  x3do:translation ( 0 0 0.15 ) .
:Shape_2_3_2_1_3_1_1_11_1_1_4_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_11_1_1_4_3 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_11_1_1_4_3_1_1 ;
  x3do:hasGeometry :Text_2_3_2_1_3_1_1_11_1_1_4_3_1_2 .
:Appearance_2_3_2_1_3_1_1_11_1_1_4_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_11_1_1_4_3_1 ;
  x3do:hasMaterial :LocalLabelMaterial .
:LocalLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_11_1_1_4_3_1_1 ;
  x3do:DEF 'LocalLabelMaterial' .
:Text_2_3_2_1_3_1_1_11_1_1_4_3_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_11_1_1_4_3_1 ;
  x3do:hasFontStyle :LabelFont-USE-2 ;
  x3do:string '"standAlone"' .
:LabelFont-USE-2 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_3_2_1_3_1_1_11_1_1_4_3_1_2 ;
  owl:sameAs :LabelFont . # DEF matching this USE
:DISModeScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :DISModeButtons ;
  x3do:hasField :field_2_3_2_1_3_1_1_11_1_1_5_1, :field_2_3_2_1_3_1_1_11_1_1_5_2, :field_2_3_2_1_3_1_1_11_1_1_5_3, :field_2_3_2_1_3_1_1_11_1_1_5_4, :field_2_3_2_1_3_1_1_11_1_1_5_5, :field_2_3_2_1_3_1_1_11_1_1_5_6, :field_2_3_2_1_3_1_1_11_1_1_5_7, :field_2_3_2_1_3_1_1_11_1_1_5_8, :field_2_3_2_1_3_1_1_11_1_1_5_9, :field_2_3_2_1_3_1_1_11_1_1_5_10, :field_2_3_2_1_3_1_1_11_1_1_5_11, :field_2_3_2_1_3_1_1_11_1_1_5_12, :field_2_3_2_1_3_1_1_11_1_1_5_13, :field_2_3_2_1_3_1_1_11_1_1_5_14, :field_2_3_2_1_3_1_1_11_1_1_5_15, :field_2_3_2_1_3_1_1_11_1_1_5_16, :field_2_3_2_1_3_1_1_11_1_1_5_17, :field_2_3_2_1_3_1_1_11_1_1_5_18, :field_2_3_2_1_3_1_1_11_1_1_5_19, :field_2_3_2_1_3_1_1_11_1_1_5_20, :field_2_3_2_1_3_1_1_11_1_1_5_21 ;
  x3do:hasIS :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:DEF 'DISModeScript' ;
  x3do:sourceCode """
ecmascript:

function tracePrint (text)
{
	if (traceEnabled) Browser.println ('[DvdController ' + description + ' DISModeScript] ' + text);
}

function initialize()
{
	masterButtonColor = buttonColor;
	remoteButtonColor = buttonColor;
	localButtonColor  = activeButtonColor;

	masterLabelColor = labelColor;
	remoteLabelColor = labelColor;
	localLabelColor  = activeLabelColor;

	isMaster = false;
	isRemote = false;
	isLocal  = true;
	arePlaybackButtonsActive = true;

	//set default mode
	localToggleEnabled(true, -1);
}

function masterToggleEnabled(value, timeStamp)
{
	masterButtonColor = activeButtonColor;
	remoteButtonColor = buttonColor;
	localButtonColor  = buttonColor;

	masterLabelColor = activeLabelColor;
	remoteLabelColor = labelColor;
	localLabelColor  = labelColor;

	isMaster = true;
	isRemote = false;
	isLocal  = false;

	if (!arePlaybackButtonsActive)
		playbackButtonLabelColor = labelColor;

	arePlaybackButtonsActive = true;
}

function remoteToggleEnabled(value, timeStamp)
{
	masterButtonColor = buttonColor;
	remoteButtonColor = activeButtonColor;
	localButtonColor  = buttonColor;

	masterLabelColor = labelColor;
	remoteLabelColor = activeLabelColor;
	localLabelColor  = labelColor;

	isMaster = false;
	isRemote = true;
	isLocal  = false;

	arePlaybackButtonsActive = false;
	playbackButtonLabelColor = labelColor;
	resetToStartEnabled = true;
}

function localToggleEnabled(value, timeStamp)
{
	masterButtonColor = buttonColor;
	remoteButtonColor = buttonColor;
	localButtonColor  = activeButtonColor;

	masterLabelColor = labelColor;
	remoteLabelColor = labelColor;
	localLabelColor  = activeLabelColor;

	isMaster = false;
	isRemote = false;
	isLocal  = true;

	if (!arePlaybackButtonsActive)
		playbackButtonLabelColor = labelColor;

	arePlaybackButtonsActive = true;
}
""" .
:field_2_3_2_1_3_1_1_11_1_1_5_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_11_1_1_5_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'buttonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'activeButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'labelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'activeLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'masterToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'remoteToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'localToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'masterButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'masterLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'remoteButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'remoteLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'localButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'localLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isMaster' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isRemote' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isLocal' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'arePlaybackButtonsActive' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_11_1_1_5_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'playbackButtonLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_11_1_1_5_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :DISModeScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToStartEnabled' ;
  x3do:type 'SFBool' .
:IS_2_3_2_1_3_1_1_11_1_1_5_22 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :DISModeScript ;
  x3do:hasConnect :connect_2_3_2_1_3_1_1_11_1_1_5_22_1, :connect_2_3_2_1_3_1_1_11_1_1_5_22_2, :connect_2_3_2_1_3_1_1_11_1_1_5_22_3, :connect_2_3_2_1_3_1_1_11_1_1_5_22_4, :connect_2_3_2_1_3_1_1_11_1_1_5_22_5, :connect_2_3_2_1_3_1_1_11_1_1_5_22_6, :connect_2_3_2_1_3_1_1_11_1_1_5_22_7, :connect_2_3_2_1_3_1_1_11_1_1_5_22_8, :connect_2_3_2_1_3_1_1_11_1_1_5_22_9 .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'description' ;
  x3do:protoField 'description' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'buttonColor' ;
  x3do:protoField 'buttonColor' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_4 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'activeButtonColor' ;
  x3do:protoField 'selectedButtonColor' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_5 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'labelColor' ;
  x3do:protoField 'labelColor' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_6 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'activeLabelColor' ;
  x3do:protoField 'selectedLabelColor' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_7 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'isMaster' ;
  x3do:protoField 'isMaster' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_8 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'isRemote' ;
  x3do:protoField 'isRemote' .
:connect_2_3_2_1_3_1_1_11_1_1_5_22_9 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_11_1_1_5_22 ;
  x3do:nodeField 'isLocal' ;
  x3do:protoField 'isLocal' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'masterButtonColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'MasterButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'masterLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'MasterLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_8 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'remoteLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RemoteLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_9 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'localLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'LocalLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_10 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'MasterSensor' ;
  x3do:toField 'masterToggleEnabled' ;
  x3do:toNode 'DISModeScript' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_11 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'RemoteSensor' ;
  x3do:toField 'remoteToggleEnabled' ;
  x3do:toNode 'DISModeScript' .
:ROUTE_2_3_2_1_3_1_1_11_1_1_12 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :DISModeButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'LocalSensor' ;
  x3do:toField 'localToggleEnabled' ;
  x3do:toNode 'DISModeScript' .
:DisplayNoneTop a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :TopLayerSwitch ;
  x3do:DEF 'DisplayNoneTop' .
:ROUTE_2_3_2_1_3_1_1_12 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'topLayerSwitchSelection' ;
  x3do:fromNode 'DisplayLayerScript' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'TopLayerSwitch' .
:MidLayerSwitch a owl:NamedIndividual, x3do:Switch ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:hasChildren :DisplayPlaybackButtonsMid, :DisplayDISModeMid, :DisplayNoneMid ;
  x3do:DEF 'MidLayerSwitch' ;
  x3do:whichChoice 0 .
:DisplayPlaybackButtonsMid a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MidLayerSwitch ;
  x3do:hasChildren :PlaybackButtons ;
  x3do:DEF 'DisplayPlaybackButtonsMid' ;
  x3do:translation ( 2.86 0 0 ) .
:PlaybackButtons a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayPlaybackButtonsMid ;
  x3do:hasChildren :GroupButtonBaseShape-USE-1, :Transform_2_3_2_1_3_1_1_13_1_1_2, :Transform_2_3_2_1_3_1_1_13_1_1_3, :Transform_2_3_2_1_3_1_1_13_1_1_4, :Transform_2_3_2_1_3_1_1_13_1_1_5, :Transform_2_3_2_1_3_1_1_13_1_1_6, :Transform_2_3_2_1_3_1_1_13_1_1_7, :Transform_2_3_2_1_3_1_1_13_1_1_8, :PlaybackControlScript ;
  x3do:hasROUTE :ROUTE_2_3_2_1_3_1_1_13_1_1_10, :ROUTE_2_3_2_1_3_1_1_13_1_1_11, :ROUTE_2_3_2_1_3_1_1_13_1_1_12, :ROUTE_2_3_2_1_3_1_1_13_1_1_13, :ROUTE_2_3_2_1_3_1_1_13_1_1_14, :ROUTE_2_3_2_1_3_1_1_13_1_1_15, :ROUTE_2_3_2_1_3_1_1_13_1_1_16, :ROUTE_2_3_2_1_3_1_1_13_1_1_17, :ROUTE_2_3_2_1_3_1_1_13_1_1_18, :ROUTE_2_3_2_1_3_1_1_13_1_1_19, :ROUTE_2_3_2_1_3_1_1_13_1_1_20, :ROUTE_2_3_2_1_3_1_1_13_1_1_21, :ROUTE_2_3_2_1_3_1_1_13_1_1_22, :ROUTE_2_3_2_1_3_1_1_13_1_1_23, :ROUTE_2_3_2_1_3_1_1_13_1_1_24, :ROUTE_2_3_2_1_3_1_1_13_1_1_25, :ROUTE_2_3_2_1_3_1_1_13_1_1_26, :ROUTE_2_3_2_1_3_1_1_13_1_1_27, :ROUTE_2_3_2_1_3_1_1_13_1_1_28, :ROUTE_2_3_2_1_3_1_1_13_1_1_29, :ROUTE_2_3_2_1_3_1_1_13_1_1_30, :ROUTE_2_3_2_1_3_1_1_13_1_1_31, :ROUTE_2_3_2_1_3_1_1_13_1_1_32, :ROUTE_2_3_2_1_3_1_1_13_1_1_33, :ROUTE_2_3_2_1_3_1_1_13_1_1_34, :ROUTE_2_3_2_1_3_1_1_13_1_1_35, :ROUTE_2_3_2_1_3_1_1_13_1_1_36, :ROUTE_2_3_2_1_3_1_1_13_1_1_37, :ROUTE_2_3_2_1_3_1_1_13_1_1_38, :ROUTE_2_3_2_1_3_1_1_13_1_1_39, :ROUTE_2_3_2_1_3_1_1_13_1_1_40, :ROUTE_2_3_2_1_3_1_1_13_1_1_41, :ROUTE_2_3_2_1_3_1_1_13_1_1_42, :ROUTE_2_3_2_1_3_1_1_13_1_1_43, :ROUTE_2_3_2_1_3_1_1_13_1_1_44, :ROUTE_2_3_2_1_3_1_1_13_1_1_45, :ROUTE_2_3_2_1_3_1_1_13_1_1_46 ;
  x3do:DEF 'PlaybackButtons' .
:GroupButtonBaseShape-USE-1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :PlaybackButtons ;
  owl:sameAs :GroupButtonBaseShape . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :ResetToStartSensor, :InvisibleButtonBox, :Shape_2_3_2_1_3_1_1_13_1_1_2_3, :Transform_2_3_2_1_3_1_1_13_1_1_2_4 ;
  x3do:translation ( -2.05 0 0 ) .
:ResetToStartSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2 ;
  x3do:DEF 'ResetToStartSensor' ;
  x3do:description 'reset clock to beginning' .
:InvisibleButtonBox a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_2_2_1 ;
  x3do:DEF 'InvisibleButtonBox' ;
  x3do:translation ( 0.03 0.02 0.1 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_2_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :InvisibleButtonBox ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_2_2_1_1 ;
  x3do:hasGeometry :Box_2_3_2_1_3_1_1_13_1_1_2_2_1_2 .
:Appearance_2_3_2_1_3_1_1_13_1_1_2_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_2_1 ;
  x3do:hasMaterial :Material_2_3_2_1_3_1_1_13_1_1_2_2_1_1_1 .
:Material_2_3_2_1_3_1_1_13_1_1_2_2_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_2_2_1_1 ;
  x3do:transparency 1 .
:Box_2_3_2_1_3_1_1_13_1_1_2_2_1_2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_2_1 ;
  x3do:size ( 0.6 0.4 0.001 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_2_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_2_3_1 ;
  x3do:hasGeometry :PlaybackButton .
:Appearance_2_3_2_1_3_1_1_13_1_1_2_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_3 ;
  x3do:hasMaterial :ResetToStartButtonMaterial .
:ResetToStartButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_2_3_1 ;
  x3do:DEF 'ResetToStartButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_3 ;
  x3do:hasCoord :Coordinate_2_3_2_1_3_1_1_13_1_1_2_3_2_1 ;
  x3do:DEF 'PlaybackButton' ;
  x3do:coordIndex ( 3 2 1 0 3 -1 ) ;
  x3do:solid false .
:Coordinate_2_3_2_1_3_1_1_13_1_1_2_3_2_1 a owl:NamedIndividual, x3do:Coordinate ;
  x3do:hasParent :PlaybackButton ;
  x3do:point ( -0.375 0.25 0.05 0.375 0.25 0.05 0.375 -0.25 0.05 -0.375 -0.25 0.05 ) .
:Transform_2_3_2_1_3_1_1_13_1_1_2_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2 ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1_13_1_1_2_4_1, :Transform_2_3_2_1_3_1_1_13_1_1_2_4_2 .
:Transform_2_3_2_1_3_1_1_13_1_1_2_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_2_4_1_1 ;
  x3do:translation ( -0.12 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_2_4_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2_4_1 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_2_4_1_1_1 ;
  x3do:hasGeometry :Bar .
:Appearance_2_3_2_1_3_1_1_13_1_1_2_4_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_4_1_1 ;
  x3do:hasMaterial :ResetToStartLabelMaterial .
:ResetToStartLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_2_4_1_1_1 ;
  x3do:DEF 'ResetToStartLabelMaterial' .
:Bar a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_4_1_1 ;
  x3do:DEF 'Bar' ;
  x3do:size ( 0.04 0.3 0.12 ) .
:Transform_2_3_2_1_3_1_1_13_1_1_2_4_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_2_4_2_1 ;
  x3do:translation ( 0.01 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_2_4_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_2_4_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_2_4_2_1_1 ;
  x3do:hasGeometry :Triangle .
:Appearance_2_3_2_1_3_1_1_13_1_1_2_4_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_4_2_1 ;
  x3do:hasMaterial :ResetToStartLabelMaterial-USE-1 .
:ResetToStartLabelMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_2_4_2_1_1 ;
  owl:sameAs :ResetToStartLabelMaterial . # DEF matching this USE
:Triangle a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_2_4_2_1 ;
  x3do:hasCoord :Coordinate_2_3_2_1_3_1_1_13_1_1_2_4_2_1_2_1 ;
  x3do:DEF 'Triangle' ;
  x3do:coordIndex ( 0 1 2 -1 ) .
:Coordinate_2_3_2_1_3_1_1_13_1_1_2_4_2_1_2_1 a owl:NamedIndividual, x3do:Coordinate ;
  x3do:hasParent :Triangle ;
  x3do:point ( -0.15 0 0.051 0.15 -0.15 0.051 0.15 0.15 0.051 ) .
:Transform_2_3_2_1_3_1_1_13_1_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :FastRewindSensor, :InvisibleButtonBox-USE-1, :Shape_2_3_2_1_3_1_1_13_1_1_3_3, :Transform_2_3_2_1_3_1_1_13_1_1_3_4 ;
  x3do:translation ( -1.36 0 0 ) .
:FastRewindSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3 ;
  x3do:DEF 'FastRewindSensor' ;
  x3do:description 'fast rewind' .
:InvisibleButtonBox-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3 ;
  owl:sameAs :InvisibleButtonBox . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_13_1_1_3_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_3_3_1 ;
  x3do:hasGeometry :PlaybackButton-USE-1 .
:Appearance_2_3_2_1_3_1_1_13_1_1_3_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_3_3 ;
  x3do:hasMaterial :FastRewindButtonMaterial .
:FastRewindButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_3_3_1 ;
  x3do:DEF 'FastRewindButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton-USE-1 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_3_3 ;
  owl:sameAs :PlaybackButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_3_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3 ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1_13_1_1_3_4_1, :Transform_2_3_2_1_3_1_1_13_1_1_3_4_2 .
:Transform_2_3_2_1_3_1_1_13_1_1_3_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_3_4_1_1 ;
  x3do:translation ( -0.15 0.0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_3_4_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3_4_1 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_3_4_1_1_1 ;
  x3do:hasGeometry :Triangle-USE-1 .
:Appearance_2_3_2_1_3_1_1_13_1_1_3_4_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_3_4_1_1 ;
  x3do:hasMaterial :FastRewindLabelMaterial .
:FastRewindLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_3_4_1_1_1 ;
  x3do:DEF 'FastRewindLabelMaterial' .
:Triangle-USE-1 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_3_4_1_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_3_4_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_3_4_2_1 ;
  x3do:translation ( 0.1 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_3_4_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_3_4_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_3_4_2_1_1 ;
  x3do:hasGeometry :Triangle-USE-2 .
:Appearance_2_3_2_1_3_1_1_13_1_1_3_4_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_3_4_2_1 ;
  x3do:hasMaterial :FastRewindLabelMaterial-USE-1 .
:FastRewindLabelMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_3_4_2_1_1 ;
  owl:sameAs :FastRewindLabelMaterial . # DEF matching this USE
:Triangle-USE-2 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_3_4_2_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :RewindSensor, :InvisibleButtonBox-USE-2, :Shape_2_3_2_1_3_1_1_13_1_1_4_3, :Transform_2_3_2_1_3_1_1_13_1_1_4_4 ;
  x3do:translation ( -0.68 0 0 ) .
:RewindSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_4 ;
  x3do:DEF 'RewindSensor' ;
  x3do:description 'rewind' .
:InvisibleButtonBox-USE-2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_4 ;
  owl:sameAs :InvisibleButtonBox . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_13_1_1_4_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_4 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_4_3_1 ;
  x3do:hasGeometry :PlaybackButton-USE-2 .
:Appearance_2_3_2_1_3_1_1_13_1_1_4_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_4_3 ;
  x3do:hasMaterial :RewindButtonMaterial .
:RewindButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_4_3_1 ;
  x3do:DEF 'RewindButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton-USE-2 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_4_3 ;
  owl:sameAs :PlaybackButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_4_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_4_4_1 .
:Shape_2_3_2_1_3_1_1_13_1_1_4_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_4_4 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_4_4_1_1 ;
  x3do:hasGeometry :Triangle-USE-3 .
:Appearance_2_3_2_1_3_1_1_13_1_1_4_4_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_4_4_1 ;
  x3do:hasMaterial :RewindLabelMaterial .
:RewindLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_4_4_1_1 ;
  x3do:DEF 'RewindLabelMaterial' .
:Triangle-USE-3 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_4_4_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_5 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :PauseSensor, :InvisibleButtonBox-USE-3, :Shape_2_3_2_1_3_1_1_13_1_1_5_3, :Transform_2_3_2_1_3_1_1_13_1_1_5_4 .
:PauseSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5 ;
  x3do:DEF 'PauseSensor' ;
  x3do:description 'pause' .
:InvisibleButtonBox-USE-3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5 ;
  owl:sameAs :InvisibleButtonBox . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_13_1_1_5_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_5_3_1 ;
  x3do:hasGeometry :PlaybackButton-USE-3 .
:Appearance_2_3_2_1_3_1_1_13_1_1_5_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_5_3 ;
  x3do:hasMaterial :PauseButtonMaterial .
:PauseButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_5_3_1 ;
  x3do:DEF 'PauseButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton-USE-3 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_5_3 ;
  owl:sameAs :PlaybackButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_5_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5 ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1_13_1_1_5_4_1, :Transform_2_3_2_1_3_1_1_13_1_1_5_4_2 .
:Transform_2_3_2_1_3_1_1_13_1_1_5_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_5_4_1_1 ;
  x3do:translation ( -0.05 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_5_4_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5_4_1 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_5_4_1_1_1 ;
  x3do:hasGeometry :Bar-USE-1 .
:Appearance_2_3_2_1_3_1_1_13_1_1_5_4_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_5_4_1_1 ;
  x3do:hasMaterial :PauseLabelMaterial .
:PauseLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_5_4_1_1_1 ;
  x3do:DEF 'PauseLabelMaterial' .
:Bar-USE-1 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_5_4_1_1 ;
  owl:sameAs :Bar . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_5_4_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_5_4_2_1 ;
  x3do:translation ( 0.085 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_5_4_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_5_4_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_5_4_2_1_1 ;
  x3do:hasGeometry :Bar-USE-2 .
:Appearance_2_3_2_1_3_1_1_13_1_1_5_4_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_5_4_2_1 ;
  x3do:hasMaterial :PauseLabelMaterial-USE-1 .
:PauseLabelMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_5_4_2_1_1 ;
  owl:sameAs :PauseLabelMaterial . # DEF matching this USE
:Bar-USE-2 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_5_4_2_1 ;
  owl:sameAs :Bar . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_6 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :PlaySensor, :InvisibleButtonBox-USE-4, :Shape_2_3_2_1_3_1_1_13_1_1_6_3, :Transform_2_3_2_1_3_1_1_13_1_1_6_4 ;
  x3do:translation ( 0.68 0 0 ) .
:PlaySensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_6 ;
  x3do:DEF 'PlaySensor' ;
  x3do:description 'play' .
:InvisibleButtonBox-USE-4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_6 ;
  owl:sameAs :InvisibleButtonBox . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_13_1_1_6_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_6 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_6_3_1 ;
  x3do:hasGeometry :PlaybackButton-USE-4 .
:Appearance_2_3_2_1_3_1_1_13_1_1_6_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_6_3 ;
  x3do:hasMaterial :PlayButtonMaterial .
:PlayButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_6_3_1 ;
  x3do:DEF 'PlayButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton-USE-4 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_6_3 ;
  owl:sameAs :PlaybackButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_6_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_6 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_6_4_1 ;
  x3do:rotation ( 0 0 1 3.14 ) ;
  x3do:translation ( 0.05 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_6_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_6_4 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_6_4_1_1 ;
  x3do:hasGeometry :Triangle-USE-4 .
:Appearance_2_3_2_1_3_1_1_13_1_1_6_4_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_6_4_1 ;
  x3do:hasMaterial :PlayLabelMaterial .
:PlayLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_6_4_1_1 ;
  x3do:DEF 'PlayLabelMaterial' .
:Triangle-USE-4 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_6_4_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_7 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :FastForwardSensor, :InvisibleButtonBox-USE-5, :Shape_2_3_2_1_3_1_1_13_1_1_7_3, :Transform_2_3_2_1_3_1_1_13_1_1_7_4 ;
  x3do:translation ( 1.36 0 0 ) .
:FastForwardSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7 ;
  x3do:DEF 'FastForwardSensor' ;
  x3do:description 'fast forward' .
:InvisibleButtonBox-USE-5 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7 ;
  owl:sameAs :InvisibleButtonBox . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_13_1_1_7_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_7_3_1 ;
  x3do:hasGeometry :PlaybackButton-USE-5 .
:Appearance_2_3_2_1_3_1_1_13_1_1_7_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_7_3 ;
  x3do:hasMaterial :FastForwardButtonMaterial .
:FastForwardButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_7_3_1 ;
  x3do:DEF 'FastForwardButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton-USE-5 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_7_3 ;
  owl:sameAs :PlaybackButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_7_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7 ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1_13_1_1_7_4_1, :Transform_2_3_2_1_3_1_1_13_1_1_7_4_2 ;
  x3do:rotation ( 0 0 1 3.14 ) .
:Transform_2_3_2_1_3_1_1_13_1_1_7_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_7_4_1_1 ;
  x3do:translation ( -0.15 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_7_4_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7_4_1 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_7_4_1_1_1 ;
  x3do:hasGeometry :Triangle-USE-5 .
:Appearance_2_3_2_1_3_1_1_13_1_1_7_4_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_7_4_1_1 ;
  x3do:hasMaterial :FastForwardLabelMaterial .
:FastForwardLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_7_4_1_1_1 ;
  x3do:DEF 'FastForwardLabelMaterial' .
:Triangle-USE-5 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_7_4_1_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_7_4_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_7_4_2_1 ;
  x3do:translation ( 0.1 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_7_4_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_7_4_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_7_4_2_1_1 ;
  x3do:hasGeometry :Triangle-USE-6 .
:Appearance_2_3_2_1_3_1_1_13_1_1_7_4_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_7_4_2_1 ;
  x3do:hasMaterial :FastForwardLabelMaterial-USE-1 .
:FastForwardLabelMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_7_4_2_1_1 ;
  owl:sameAs :FastForwardLabelMaterial . # DEF matching this USE
:Triangle-USE-6 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_7_4_2_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_8 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasChildren :ResetToEndSensor, :InvisibleButtonBox-USE-6, :Shape_2_3_2_1_3_1_1_13_1_1_8_3, :Transform_2_3_2_1_3_1_1_13_1_1_8_4 ;
  x3do:translation ( 2.05 0 0 ) .
:ResetToEndSensor a owl:NamedIndividual, x3do:TouchSensor ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8 ;
  x3do:DEF 'ResetToEndSensor' ;
  x3do:description 'reset clock to end' .
:InvisibleButtonBox-USE-6 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8 ;
  owl:sameAs :InvisibleButtonBox . # DEF matching this USE
:Shape_2_3_2_1_3_1_1_13_1_1_8_3 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_8_3_1 ;
  x3do:hasGeometry :PlaybackButton-USE-6 .
:Appearance_2_3_2_1_3_1_1_13_1_1_8_3_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_8_3 ;
  x3do:hasMaterial :ResetToEndButtonMaterial .
:ResetToEndButtonMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_8_3_1 ;
  x3do:DEF 'ResetToEndButtonMaterial' ;
  x3do:transparency 0.9 .
:PlaybackButton-USE-6 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_8_3 ;
  owl:sameAs :PlaybackButton . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_8_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8 ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1_13_1_1_8_4_1, :Transform_2_3_2_1_3_1_1_13_1_1_8_4_2 .
:Transform_2_3_2_1_3_1_1_13_1_1_8_4_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_8_4_1_1 ;
  x3do:rotation ( 0 0 1 3.14 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_8_4_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8_4_1 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_8_4_1_1_1 ;
  x3do:hasGeometry :Triangle-USE-7 .
:Appearance_2_3_2_1_3_1_1_13_1_1_8_4_1_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_8_4_1_1 ;
  x3do:hasMaterial :ResetToEndLabelMaterial .
:ResetToEndLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_8_4_1_1_1 ;
  x3do:DEF 'ResetToEndLabelMaterial' .
:Triangle-USE-7 a owl:NamedIndividual, x3do:IndexedFaceSet ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_8_4_1_1 ;
  owl:sameAs :Triangle . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_13_1_1_8_4_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8_4 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_13_1_1_8_4_2_1 ;
  x3do:translation ( 0.12 0 0 ) .
:Shape_2_3_2_1_3_1_1_13_1_1_8_4_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_13_1_1_8_4_2 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_13_1_1_8_4_2_1_1 ;
  x3do:hasGeometry :Bar-USE-3 .
:Appearance_2_3_2_1_3_1_1_13_1_1_8_4_2_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_8_4_2_1 ;
  x3do:hasMaterial :ResetToEndLabelMaterial-USE-1 .
:ResetToEndLabelMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_13_1_1_8_4_2_1_1 ;
  owl:sameAs :ResetToEndLabelMaterial . # DEF matching this USE
:Bar-USE-3 a owl:NamedIndividual, x3do:Box ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_13_1_1_8_4_2_1 ;
  owl:sameAs :Bar . # DEF matching this USE
:PlaybackControlScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :PlaybackButtons ;
  x3do:hasField :field_2_3_2_1_3_1_1_13_1_1_9_1, :field_2_3_2_1_3_1_1_13_1_1_9_2, :field_2_3_2_1_3_1_1_13_1_1_9_3, :field_2_3_2_1_3_1_1_13_1_1_9_4, :field_2_3_2_1_3_1_1_13_1_1_9_5, :field_2_3_2_1_3_1_1_13_1_1_9_6, :field_2_3_2_1_3_1_1_13_1_1_9_7, :field_2_3_2_1_3_1_1_13_1_1_9_8, :field_2_3_2_1_3_1_1_13_1_1_9_9, :field_2_3_2_1_3_1_1_13_1_1_9_10, :field_2_3_2_1_3_1_1_13_1_1_9_11, :field_2_3_2_1_3_1_1_13_1_1_9_12, :field_2_3_2_1_3_1_1_13_1_1_9_13, :field_2_3_2_1_3_1_1_13_1_1_9_14, :field_2_3_2_1_3_1_1_13_1_1_9_15, :field_2_3_2_1_3_1_1_13_1_1_9_16, :field_2_3_2_1_3_1_1_13_1_1_9_17, :field_2_3_2_1_3_1_1_13_1_1_9_18, :field_2_3_2_1_3_1_1_13_1_1_9_19, :field_2_3_2_1_3_1_1_13_1_1_9_20, :field_2_3_2_1_3_1_1_13_1_1_9_21, :field_2_3_2_1_3_1_1_13_1_1_9_22, :field_2_3_2_1_3_1_1_13_1_1_9_23, :field_2_3_2_1_3_1_1_13_1_1_9_24, :field_2_3_2_1_3_1_1_13_1_1_9_25, :field_2_3_2_1_3_1_1_13_1_1_9_26, :field_2_3_2_1_3_1_1_13_1_1_9_27, :field_2_3_2_1_3_1_1_13_1_1_9_28, :field_2_3_2_1_3_1_1_13_1_1_9_29, :field_2_3_2_1_3_1_1_13_1_1_9_30, :field_2_3_2_1_3_1_1_13_1_1_9_31, :field_2_3_2_1_3_1_1_13_1_1_9_32, :field_2_3_2_1_3_1_1_13_1_1_9_33, :field_2_3_2_1_3_1_1_13_1_1_9_34, :field_2_3_2_1_3_1_1_13_1_1_9_35, :field_2_3_2_1_3_1_1_13_1_1_9_36, :field_2_3_2_1_3_1_1_13_1_1_9_37, :field_2_3_2_1_3_1_1_13_1_1_9_38, :field_2_3_2_1_3_1_1_13_1_1_9_39, :field_2_3_2_1_3_1_1_13_1_1_9_40, :field_2_3_2_1_3_1_1_13_1_1_9_41, :field_2_3_2_1_3_1_1_13_1_1_9_42, :field_2_3_2_1_3_1_1_13_1_1_9_43, :field_2_3_2_1_3_1_1_13_1_1_9_44, :field_2_3_2_1_3_1_1_13_1_1_9_45, :field_2_3_2_1_3_1_1_13_1_1_9_46 ;
  x3do:hasIS :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:DEF 'PlaybackControlScript' ;
  x3do:sourceCode """
ecmascript:

function tracePrint (text)
{
	if (traceEnabled) Browser.println ('[DvdController ' + description + ' PlaybackControlScript] ' + text);
}
function TraceLabelColors ()
{
	if (traceEnabled == false) return;

	Browser.println ('	buttonColor=' + buttonColor.toString());
	Browser.println ('	activeButtonColor=' + activeButtonColor.toString());
	Browser.println ('	labelColor=' + labelColor.toString());
	Browser.println ('	activeLabelColor=' + activeLabelColor.toString());

	Browser.println ('	resetToStartLabelColor=' + resetToStartLabelColor.toString());
	Browser.println ('	fastRewindLabelColor=' + fastRewindLabelColor.toString());
	Browser.println ('	rewindLabelColor=' + rewindLabelColor.toString());
	Browser.println ('	pauseLabelColor=' + pauseLabelColor.toString());
	Browser.println ('	playLabelColor=' + playLabelColor.toString());
	Browser.println ('	fastForwardLabelColor=' + fastForwardLabelColor.toString());
	Browser.println ('	resetToEndLabelColor=' + resetToEndLabelColor.toString());
}
function initialize()
{
	tracePrint ('initialize() starting...');
	if (!playEnabled)
	{
		resetToStartButtonColor = buttonColor;
		fastRewindButtonColor   = buttonColor;
		rewindButtonColor       = buttonColor;
		pauseButtonColor        = activeButtonColor;
		playButtonColor         = buttonColor;
		fastForwardButtonColor  = buttonColor;
		resetToEndButtonColor   = buttonColor;

		resetToStartLabelColor  = labelColor;
		fastRewindLabelColor    = labelColor;
		rewindLabelColor        = labelColor;
		pauseLabelColor         = activeLabelColor;
		playLabelColor          = labelColor;
		fastForwardLabelColor   = labelColor;
		resetToEndLabelColor    = labelColor;

		isPaused = true;
		isRunning = false;
		TraceLabelColors ();
	}
	else //	playEnabled == true
	{
		playToggleEnabled(true, -1); // dummy timeStamp
		playToggleArmed = false;
	}
	tracePrint ('...initialize() complete');
}
function setIsActive(value, timeStamp)
{
	isActive = value;
}
function resetToStartToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('resetToStartToggleEnabled (' + value + ')' + ', resetToStartToggleArmed=' + resetToStartToggleArmed);

	if (!resetToStartToggleArmed)
	{
		resetToStartButtonColor = activeButtonColor;
		resetToStartLabelColor  = activeLabelColor;
		resetToStartToggleArmed = true;
		return;
	}
	isPaused  = true;
	isRunning = false;
	resetToStartChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = activeButtonColor;
	fastRewindButtonColor   = buttonColor;
	rewindButtonColor       = buttonColor;
	pauseButtonColor        = buttonColor;
	playButtonColor         = buttonColor;
	fastForwardButtonColor  = buttonColor;
	resetToEndButtonColor   = buttonColor;

	resetToStartLabelColor = activeLabelColor;
	fastRewindLabelColor   = labelColor;
	rewindLabelColor       = labelColor;
	pauseLabelColor        = labelColor;
	playLabelColor         = labelColor;
	fastForwardLabelColor  = labelColor;
	resetToEndLabelColor   = labelColor;

	TraceLabelColors ();
}
function fastRewindToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('fastRewindToggleEnabled (' + value + ')' + ', fastRewindToggleArmed=' + fastRewindToggleArmed);

	if (fastRewindToggleArmed)
	{
		fastRewindToggleArmed = false;
		return;
	}
	isPaused  = true;
	isRunning = false;
	fastRewindChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = buttonColor;
	fastRewindButtonColor   = activeButtonColor;
	rewindButtonColor       = buttonColor;
	pauseButtonColor        = buttonColor;
	playButtonColor         = buttonColor;
	fastForwardButtonColor  = buttonColor;
	resetToEndButtonColor   = buttonColor;

	resetToStartLabelColor = labelColor;
	fastRewindLabelColor   = activeLabelColor;
	rewindLabelColor       = labelColor;
	pauseLabelColor        = labelColor;
	playLabelColor         = labelColor;
	fastForwardLabelColor  = labelColor;
	resetToEndLabelColor   = labelColor;

	TraceLabelColors ();
}

function rewindToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('rewindToggleEnabled (' + value + ')' + ', rewindToggleArmed=' + rewindToggleArmed);

	if (rewindToggleArmed)
	{
		rewindToggleArmed = false;
		return;
	}
	isPaused  = true;
	isRunning = false;
	rewindChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = buttonColor;
	fastRewindButtonColor   = buttonColor;
	rewindButtonColor       = activeButtonColor;
	pauseButtonColor        = buttonColor;
	playButtonColor         = buttonColor;
	fastForwardButtonColor  = buttonColor;
	resetToEndButtonColor   = buttonColor;

	resetToStartLabelColor = labelColor;
	fastRewindLabelColor   = labelColor;
	rewindLabelColor       = activeLabelColor;
	pauseLabelColor        = labelColor;
	playLabelColor         = labelColor;
	fastForwardLabelColor  = labelColor;
	resetToEndLabelColor   = labelColor;

	TraceLabelColors ();
}

function pauseToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('pauseToggleEnabled (' + value + ')' + ', pauseToggleArmed=' + pauseToggleArmed);

	if (pauseToggleArmed)
	{
		pauseToggleArmed = false;
		return;
	}
	isPaused  = true;
	isRunning = false;
	pauseChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = buttonColor;
	fastRewindButtonColor   = buttonColor;
	rewindButtonColor       = buttonColor;
	pauseButtonColor        = activeButtonColor;
	playButtonColor         = buttonColor;
	fastForwardButtonColor  = buttonColor;
	resetToEndButtonColor   = buttonColor;

	resetToStartLabelColor = labelColor;
	fastRewindLabelColor   = labelColor;
	rewindLabelColor       = labelColor;
	pauseLabelColor        = activeLabelColor;
	playLabelColor         = labelColor;
	fastForwardLabelColor  = labelColor;
	resetToEndLabelColor   = labelColor;

	TraceLabelColors ();
}

function playToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('playToggleEnabled (' + value + ')' + ', pauseToggleArmed=' + playToggleArmed);

	if (playToggleArmed)
	{
		playToggleArmed = false;
		return;
	}
	isPaused  = false;
	isRunning = true;
	playChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = buttonColor;
	fastRewindButtonColor   = buttonColor;
	rewindButtonColor       = buttonColor;
	pauseButtonColor        = buttonColor;
	playButtonColor         = activeButtonColor;
	fastForwardButtonColor  = buttonColor;
	resetToEndButtonColor   = buttonColor;

	resetToStartLabelColor = labelColor;
	fastRewindLabelColor   = labelColor;
	rewindLabelColor       = labelColor;
	pauseLabelColor        = labelColor;
	playLabelColor         = activeLabelColor;
	fastForwardLabelColor  = labelColor;
	resetToEndLabelColor   = labelColor;

	TraceLabelColors ();
}

function fastForwardToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('fastForwardToggleEnabled (' + value + ')' + ', fastForwardToggleArmed=' + fastForwardToggleArmed);

	if (fastForwardToggleArmed)
	{
		fastForwardToggleArmed = false;
		return;
	}
	isPaused  = false;
	isRunning = true;
	fastForwardChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = buttonColor;
	fastRewindButtonColor   = buttonColor;
	rewindButtonColor       = buttonColor;
	pauseButtonColor        = buttonColor;
	playButtonColor         = buttonColor;
	fastForwardButtonColor  = activeButtonColor;
	resetToEndButtonColor   = buttonColor;

	resetToStartLabelColor = labelColor;
	fastRewindLabelColor   = labelColor;
	rewindLabelColor       = labelColor;
	pauseLabelColor        = labelColor;
	playLabelColor         = labelColor;
	fastForwardLabelColor  = activeLabelColor;
	resetToEndLabelColor   = labelColor;

	TraceLabelColors ();
}

function resetToEndToggleEnabled(value, timeStamp)
{
	if (value == false) return;
	tracePrint ('resetToEndToggleEnabled (' + value + ')' + ', resetToEndToggleArmed=' + resetToEndToggleArmed);

	if (!resetToEndToggleArmed)
	{
		resetToEndButtonColor = activeButtonColor;
		resetToEndLabelColor = activeLabelColor;
		resetToEndToggleArmed = true;
		return;
	}
	isPaused  = true;
	isRunning = false;
	resetToEndChanged = true;

	if (!isActive) return;

	resetToStartButtonColor = buttonColor;
	fastRewindButtonColor   = buttonColor;
	rewindButtonColor       = buttonColor;
	pauseButtonColor        = buttonColor;
	playButtonColor         = buttonColor;
	fastForwardButtonColor  = buttonColor;
	resetToEndButtonColor   = activeButtonColor;

	resetToStartLabelColor = labelColor;
	fastRewindLabelColor   = labelColor;
	rewindLabelColor       = labelColor;
	pauseLabelColor        = labelColor;
	playLabelColor         = labelColor;
	fastForwardLabelColor  = labelColor;
	resetToEndLabelColor   = activeLabelColor;

	TraceLabelColors ();
}
""" .
:field_2_3_2_1_3_1_1_13_1_1_9_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_13_1_1_9_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'playEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'buttonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'activeButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'labelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'activeLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'isActive' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_3_2_1_3_1_1_13_1_1_9_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setIsActive' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'resetToStartToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'fastRewindToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'rewindToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'pauseToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'playToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'fastForwardToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'resetToEndToggleArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_3_1_1_13_1_1_9_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'resetToStartToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'fastRewindToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'rewindToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'pauseToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'playToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_22 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'fastForwardToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_23 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'resetToEndToggleEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_24 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToStartButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_25 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToStartLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_26 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastRewindButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_27 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastRewindLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_28 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_29 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_30 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'pauseButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_31 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'pauseLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_32 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'playButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_33 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'playLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_34 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastForwardButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_35 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastForwardLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_36 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToEndButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_37 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToEndLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_3_1_1_13_1_1_9_38 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isPaused' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_39 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isRunning' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_40 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToStartChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_41 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastRewindChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_42 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_43 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'pauseChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_44 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'playChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_45 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastForwardChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_13_1_1_9_46 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'resetToEndChanged' ;
  x3do:type 'SFBool' .
:IS_2_3_2_1_3_1_1_13_1_1_9_47 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :PlaybackControlScript ;
  x3do:hasConnect :connect_2_3_2_1_3_1_1_13_1_1_9_47_1, :connect_2_3_2_1_3_1_1_13_1_1_9_47_2, :connect_2_3_2_1_3_1_1_13_1_1_9_47_3, :connect_2_3_2_1_3_1_1_13_1_1_9_47_4, :connect_2_3_2_1_3_1_1_13_1_1_9_47_5, :connect_2_3_2_1_3_1_1_13_1_1_9_47_6, :connect_2_3_2_1_3_1_1_13_1_1_9_47_7, :connect_2_3_2_1_3_1_1_13_1_1_9_47_8, :connect_2_3_2_1_3_1_1_13_1_1_9_47_9 .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'description' ;
  x3do:protoField 'description' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'playEnabled' ;
  x3do:protoField 'playEnabled' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_4 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'buttonColor' ;
  x3do:protoField 'buttonColor' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_5 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'activeButtonColor' ;
  x3do:protoField 'selectedButtonColor' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_6 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'labelColor' ;
  x3do:protoField 'labelColor' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_7 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'activeLabelColor' ;
  x3do:protoField 'selectedLabelColor' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_8 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'isPaused' ;
  x3do:protoField 'isPaused' .
:connect_2_3_2_1_3_1_1_13_1_1_9_47_9 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_13_1_1_9_47 ;
  x3do:nodeField 'isRunning' ;
  x3do:protoField 'isRunning' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_10 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'setIsActive' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_11 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'resetToStartEnabled' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'resetToStartToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_12 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToStartLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_13 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastRewindLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_14 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_15 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PauseLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_16 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_17 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastForwardLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_18 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playbackButtonLabelColor' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToEndLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_19 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'ResetToStartSensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_20 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'FastRewindSensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_21 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'RewindSensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_22 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'PauseSensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_23 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'PlaySensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_24 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'FastForwardSensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_25 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'enabled' ;
  x3do:toNode 'ResetToEndSensor' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_26 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'resetToStartButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToStartButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_27 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'resetToStartLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToStartLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_28 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'fastRewindButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastRewindButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_29 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'fastRewindLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastRewindLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_30 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'rewindButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_31 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'rewindLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_32 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'pauseButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PauseButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_33 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'pauseLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PauseLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_34 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_35 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'playLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_36 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'fastForwardButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastForwardButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_37 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'fastForwardLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastForwardLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_38 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'resetToEndButtonColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToEndButtonMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_39 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'resetToEndLabelColor' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToEndLabelMaterial' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_40 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'ResetToStartSensor' ;
  x3do:toField 'resetToStartToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_41 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'FastRewindSensor' ;
  x3do:toField 'fastRewindToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_42 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'RewindSensor' ;
  x3do:toField 'rewindToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_43 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'PauseSensor' ;
  x3do:toField 'pauseToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_44 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'PlaySensor' ;
  x3do:toField 'playToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_45 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'FastForwardSensor' ;
  x3do:toField 'fastForwardToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:ROUTE_2_3_2_1_3_1_1_13_1_1_46 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :PlaybackButtons ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'ResetToEndSensor' ;
  x3do:toField 'resetToEndToggleEnabled' ;
  x3do:toNode 'PlaybackControlScript' .
:DisplayDISModeMid a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MidLayerSwitch ;
  x3do:hasChildren :DISModeButtons-USE-1 ;
  x3do:DEF 'DisplayDISModeMid' ;
  x3do:translation ( 2.86 0 0 ) .
:DISModeButtons-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayDISModeMid ;
  owl:sameAs :DISModeButtons . # DEF matching this USE
:DisplayNoneMid a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :MidLayerSwitch ;
  x3do:DEF 'DisplayNoneMid' .
:ROUTE_2_3_2_1_3_1_1_14 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'midLayerSwitchSelection' ;
  x3do:fromNode 'DisplayLayerScript' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'MidLayerSwitch' .
:BottomLayerSwitch a owl:NamedIndividual, x3do:Switch ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:hasChildren :DisplaySliderBottom, :DisplayDISModeBottom, :DisplayPlaybackButtonsBottom, :DisplayNoneBottom ;
  x3do:DEF 'BottomLayerSwitch' ;
  x3do:whichChoice 0 .
:DisplaySliderBottom a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :BottomLayerSwitch ;
  x3do:hasChildren :TimeScale ;
  x3do:DEF 'DisplaySliderBottom' ;
  x3do:translation ( 2.86 -0.58 0 ) .
:TimeScale a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplaySliderBottom ;
  x3do:hasChildren :GroupButtonBaseShape-USE-2, :Transform_2_3_2_1_3_1_1_15_1_1_2, :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:DEF 'TimeScale' .
:GroupButtonBaseShape-USE-2 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :TimeScale ;
  owl:sameAs :GroupButtonBaseShape . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_15_1_1_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :TimeScale ;
  x3do:hasChildren :Slider ;
  x3do:translation ( 0 -0.15 0 ) .
:Slider a owl:NamedIndividual, x3do:ProtoInstance ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_2 ;
  x3do:hasFieldValue :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_1, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_2, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_3, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_4, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_5, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_6, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_7, :fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_8 ;
  x3do:DEF 'Slider' ;
  x3do:name 'SliderFloat' .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_1 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'layoutDirection' ;
  x3do:value 'horizontal' .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_2 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'height' ;
  x3do:value 4.725 .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_3 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'radius' ;
  x3do:value 0.1 .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_4 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'barRadius' ;
  x3do:value 0.035 .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_5 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'min' ;
  x3do:value 0.0 .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_6 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'max' ;
  x3do:value 1.0 .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_7 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'value' ;
  x3do:value 0.0 .
:fieldValue_2_3_2_1_3_1_1_15_1_1_2_1_8 a owl:NamedIndividual, x3do:fieldValue ;
  x3do:hasParent :Slider ;
  x3do:name 'traceEnabled' ;
  x3do:value true .
:Transform_2_3_2_1_3_1_1_15_1_1_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :TimeScale ;
  x3do:hasChildren :Transform_2_3_2_1_3_1_1_15_1_1_3_1, :Transform_2_3_2_1_3_1_1_15_1_1_3_2, :Transform_2_3_2_1_3_1_1_15_1_1_3_3, :Transform_2_3_2_1_3_1_1_15_1_1_3_4, :TimeScaleScript ;
  x3do:hasROUTE :ROUTE_2_3_2_1_3_1_1_15_1_1_3_6, :ROUTE_2_3_2_1_3_1_1_15_1_1_3_7 ;
  x3do:translation ( 0 0 0.05 ) .
:Transform_2_3_2_1_3_1_1_15_1_1_3_1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_15_1_1_3_1_1 ;
  x3do:translation ( -1.4 0 0 ) .
:Shape_2_3_2_1_3_1_1_15_1_1_3_1_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3_1 ;
  x3do:hasAppearance :TimeLabelAppearance ;
  x3do:hasGeometry :DurationText .
:TimeLabelAppearance a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_1_1 ;
  x3do:hasMaterial :TimeLabelMaterial ;
  x3do:DEF 'TimeLabelAppearance' .
:TimeLabelMaterial a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :TimeLabelAppearance ;
  x3do:hasIS :IS_2_3_2_1_3_1_1_15_1_1_3_1_1_1_1_1 ;
  x3do:DEF 'TimeLabelMaterial' .
:IS_2_3_2_1_3_1_1_15_1_1_3_1_1_1_1_1 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :TimeLabelMaterial ;
  x3do:hasConnect :connect_2_3_2_1_3_1_1_15_1_1_3_1_1_1_1_1_1 .
:connect_2_3_2_1_3_1_1_15_1_1_3_1_1_1_1_1_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_15_1_1_3_1_1_1_1_1 ;
  x3do:nodeField 'diffuseColor' ;
  x3do:protoField 'labelColor' .
:DurationText a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_1_1 ;
  x3do:hasFontStyle :TimeLabelFont ;
  x3do:DEF 'DurationText' ;
  x3do:string '"00h00m00s"' .
:TimeLabelFont a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :DurationText ;
  x3do:DEF 'TimeLabelFont' ;
  x3do:size 0.2 ;
  x3do:cssStyle 'ITALIC' .
:Transform_2_3_2_1_3_1_1_15_1_1_3_2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_15_1_1_3_2_1 ;
  x3do:translation ( -2.4 0 0 ) .
:Shape_2_3_2_1_3_1_1_15_1_1_3_2_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3_2 ;
  x3do:hasAppearance :TimeLabelAppearance-USE-1 ;
  x3do:hasGeometry :Text_2_3_2_1_3_1_1_15_1_1_3_2_1_2 .
:TimeLabelAppearance-USE-1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_2_1 ;
  owl:sameAs :TimeLabelAppearance . # DEF matching this USE
:Text_2_3_2_1_3_1_1_15_1_1_3_2_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_2_1 ;
  x3do:hasFontStyle :TimeLabelFont-USE-1 ;
  x3do:string '"duration:"' .
:TimeLabelFont-USE-1 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_3_2_1_3_1_1_15_1_1_3_2_1_2 ;
  owl:sameAs :TimeLabelFont . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_15_1_1_3_3 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_15_1_1_3_3_1 ;
  x3do:translation ( 0.0 0 0 ) .
:Shape_2_3_2_1_3_1_1_15_1_1_3_3_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3_3 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_15_1_1_3_3_1_1 ;
  x3do:hasGeometry :Text_2_3_2_1_3_1_1_15_1_1_3_3_1_2 .
:Appearance_2_3_2_1_3_1_1_15_1_1_3_3_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_3_1 ;
  x3do:hasMaterial :TimeLabelMaterial-USE-1 .
:TimeLabelMaterial-USE-1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_15_1_1_3_3_1_1 ;
  owl:sameAs :TimeLabelMaterial . # DEF matching this USE
:Text_2_3_2_1_3_1_1_15_1_1_3_3_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_3_1 ;
  x3do:hasFontStyle :TimeLabelFont-USE-2 ;
  x3do:string '"elapsed:"' .
:TimeLabelFont-USE-2 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_3_2_1_3_1_1_15_1_1_3_3_1_2 ;
  owl:sameAs :TimeLabelFont . # DEF matching this USE
:Transform_2_3_2_1_3_1_1_15_1_1_3_4 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:hasChildren :Shape_2_3_2_1_3_1_1_15_1_1_3_4_1 ;
  x3do:translation ( 0.9 0 0 ) .
:Shape_2_3_2_1_3_1_1_15_1_1_3_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3_4 ;
  x3do:hasAppearance :Appearance_2_3_2_1_3_1_1_15_1_1_3_4_1_1 ;
  x3do:hasGeometry :secondsElapsedText .
:Appearance_2_3_2_1_3_1_1_15_1_1_3_4_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_4_1 ;
  x3do:hasMaterial :TimeLabelMaterial-USE-2 .
:TimeLabelMaterial-USE-2 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_3_2_1_3_1_1_15_1_1_3_4_1_1 ;
  owl:sameAs :TimeLabelMaterial . # DEF matching this USE
:secondsElapsedText a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_3_2_1_3_1_1_15_1_1_3_4_1 ;
  x3do:hasFontStyle :TimeLabelFont-USE-3 ;
  x3do:DEF 'secondsElapsedText' ;
  x3do:string '"00h00m00s"' .
:TimeLabelFont-USE-3 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :secondsElapsedText ;
  owl:sameAs :TimeLabelFont . # DEF matching this USE
:TimeScaleScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:hasField :field_2_3_2_1_3_1_1_15_1_1_3_5_1, :field_2_3_2_1_3_1_1_15_1_1_3_5_2, :field_2_3_2_1_3_1_1_15_1_1_3_5_3, :field_2_3_2_1_3_1_1_15_1_1_3_5_4, :field_2_3_2_1_3_1_1_15_1_1_3_5_5, :field_2_3_2_1_3_1_1_15_1_1_3_5_6, :field_2_3_2_1_3_1_1_15_1_1_3_5_7 ;
  x3do:hasIS :IS_2_3_2_1_3_1_1_15_1_1_3_5_8 ;
  x3do:DEF 'TimeScaleScript' ;
  x3do:sourceCode """
ecmascript:

function tracePrint (text)
{
	if (traceEnabled) forcePrint (text);
}

function forcePrint (text)
{
	Browser.println ('[DvdController ' + description + ' TimeScaleScript] ' + text);
}

function initialize()
{
        tracePrint ('initialize duration:');
	set_duration(duration, -1); // dummy timeStamp
	secondsElapsedOutput = new MFString('00h00m00s');
}

function set_duration(value, timeStamp)
{
	duration = Math.floor(value);
        tracePrint ('set_cycleInterval value=' + value + ', duration=' + duration);
	durationOutput = new MFString(printTime(duration));
        forcePrint ('duration=' + durationOutput.toString());
}

function setSecondsElapsed(value, timeStamp)
{
	secondsElapsed = Math.floor(value);
	secondsElapsedOutput = new MFString(printTime(secondsElapsed));
        tracePrint ('secondsElapsedOutput=' + secondsElapsedOutput.toString());
}

function printTime(value)
{
	timeInSeconds = value;
	seconds = timeInSeconds % 60;
	minute = ((timeInSeconds - seconds) / 60) % 60;
	hour = (timeInSeconds - minute * 60 - seconds) / 3600;
	hStr = (hour    < 10 ? '0' + hour    : '' + hour);
	mStr = (minute  < 10 ? '0' + minute  : '' + minute);
	sStr = (seconds < 10 ? '0' + seconds : '' + seconds);
	timeString = new SFString( hStr + 'h' + mStr + 'm' + sStr + 's');
        tracePrint ('timeString=' + timeString.toString());
	return timeString;
}
""" .
:field_2_3_2_1_3_1_1_15_1_1_3_5_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_2_1_3_1_1_15_1_1_3_5_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_3_1_1_15_1_1_3_5_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'inputOutput' ;
  x3do:name 'duration' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_3_1_1_15_1_1_3_5_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'secondsElapsed' ;
  x3do:type 'SFTime' ;
  x3do:value '0' .
:field_2_3_2_1_3_1_1_15_1_1_3_5_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setSecondsElapsed' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_3_1_1_15_1_1_3_5_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'durationOutput' ;
  x3do:type 'MFString' .
:field_2_3_2_1_3_1_1_15_1_1_3_5_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :TimeScaleScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'secondsElapsedOutput' ;
  x3do:type 'MFString' .
:IS_2_3_2_1_3_1_1_15_1_1_3_5_8 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :TimeScaleScript ;
  x3do:hasConnect :connect_2_3_2_1_3_1_1_15_1_1_3_5_8_1, :connect_2_3_2_1_3_1_1_15_1_1_3_5_8_2, :connect_2_3_2_1_3_1_1_15_1_1_3_5_8_3 .
:connect_2_3_2_1_3_1_1_15_1_1_3_5_8_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_15_1_1_3_5_8 ;
  x3do:nodeField 'description' ;
  x3do:protoField 'description' .
:connect_2_3_2_1_3_1_1_15_1_1_3_5_8_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_15_1_1_3_5_8 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:connect_2_3_2_1_3_1_1_15_1_1_3_5_8_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_3_1_1_15_1_1_3_5_8 ;
  x3do:nodeField 'duration' ;
  x3do:protoField 'cycleInterval' .
:ROUTE_2_3_2_1_3_1_1_15_1_1_3_6 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:fromField 'durationOutput' ;
  x3do:fromNode 'TimeScaleScript' ;
  x3do:toField 'string' ;
  x3do:toNode 'DurationText' .
:ROUTE_2_3_2_1_3_1_1_15_1_1_3_7 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1_15_1_1_3 ;
  x3do:fromField 'secondsElapsedOutput' ;
  x3do:fromNode 'TimeScaleScript' ;
  x3do:toField 'string' ;
  x3do:toNode 'secondsElapsedText' .
:DisplayDISModeBottom a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :BottomLayerSwitch ;
  x3do:hasChildren :DISModeButtons-USE-2 ;
  x3do:DEF 'DisplayDISModeBottom' ;
  x3do:translation ( 2.86 -0.58 0 ) .
:DISModeButtons-USE-2 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayDISModeBottom ;
  owl:sameAs :DISModeButtons . # DEF matching this USE
:DisplayPlaybackButtonsBottom a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :BottomLayerSwitch ;
  x3do:hasChildren :PlaybackButtons-USE-1 ;
  x3do:DEF 'DisplayPlaybackButtonsBottom' ;
  x3do:translation ( 2.86 -0.58 0 ) .
:PlaybackButtons-USE-1 a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :DisplayPlaybackButtonsBottom ;
  owl:sameAs :PlaybackButtons . # DEF matching this USE
:DisplayNoneBottom a owl:NamedIndividual, x3do:Transform ;
  x3do:hasParent :BottomLayerSwitch ;
  x3do:DEF 'DisplayNoneBottom' .
:ROUTE_2_3_2_1_3_1_1_16 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :Transform_2_3_2_1_3_1_1 ;
  x3do:fromField 'bottomLayerSwitchSelection' ;
  x3do:fromNode 'DisplayLayerScript' ;
  x3do:toField 'whichChoice' ;
  x3do:toNode 'BottomLayerSwitch' .
:ROUTE_2_3_2_1_3_1_2 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :MovableLocation ;
  x3do:fromField 'translation_changed' ;
  x3do:fromNode 'PlaneMovementSensor' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'MovableLocation' .
:ROUTE_2_3_2_1_3_1_3 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :MovableLocation ;
  x3do:fromField 'translationChanged' ;
  x3do:fromNode 'VisibilityControlScript' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'MovableLocation' .
:ROUTE_2_3_2_1_3_1_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :MovableLocation ;
  x3do:fromField 'translationOffsetChanged' ;
  x3do:fromNode 'VisibilityControlScript' ;
  x3do:toField 'set_offset' ;
  x3do:toNode 'PlaneMovementSensor' .
:ROUTE_2_3_2_1_4 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'position_changed' ;
  x3do:fromNode 'WhereSensor' ;
  x3do:toField 'set_translation' ;
  x3do:toNode 'FixedLocation' .
:ROUTE_2_3_2_1_5 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'orientation_changed' ;
  x3do:fromNode 'WhereSensor' ;
  x3do:toField 'set_rotation' ;
  x3do:toNode 'FixedLocation' .
:ForwardClock a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :LocationOffset ;
  x3do:DEF 'ForwardClock' .
:FastForwardClock a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :LocationOffset ;
  x3do:DEF 'FastForwardClock' .
:RewindClock a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :LocationOffset ;
  x3do:DEF 'RewindClock' .
:FastRewindClock a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :LocationOffset ;
  x3do:DEF 'FastRewindClock' .
:SliderClock a owl:NamedIndividual, x3do:TimeSensor ;
  x3do:hasParent :LocationOffset ;
  x3do:DEF 'SliderClock' .
:ClockScript a owl:NamedIndividual, x3do:Script ;
  x3do:hasParent :LocationOffset ;
  x3do:hasField :field_2_3_2_1_11_1, :field_2_3_2_1_11_2, :field_2_3_2_1_11_3, :field_2_3_2_1_11_4, :field_2_3_2_1_11_5, :field_2_3_2_1_11_6, :field_2_3_2_1_11_7, :field_2_3_2_1_11_8, :field_2_3_2_1_11_9, :field_2_3_2_1_11_10, :field_2_3_2_1_11_11, :field_2_3_2_1_11_12, :field_2_3_2_1_11_13, :field_2_3_2_1_11_14, :field_2_3_2_1_11_15, :field_2_3_2_1_11_16, :field_2_3_2_1_11_17, :field_2_3_2_1_11_18, :field_2_3_2_1_11_19, :field_2_3_2_1_11_20, :field_2_3_2_1_11_21, :field_2_3_2_1_11_22, :field_2_3_2_1_11_23, :field_2_3_2_1_11_24, :field_2_3_2_1_11_25, :field_2_3_2_1_11_26, :field_2_3_2_1_11_27, :field_2_3_2_1_11_28, :field_2_3_2_1_11_29, :field_2_3_2_1_11_30, :field_2_3_2_1_11_31, :field_2_3_2_1_11_32, :field_2_3_2_1_11_33, :field_2_3_2_1_11_34, :field_2_3_2_1_11_35, :field_2_3_2_1_11_36, :field_2_3_2_1_11_37, :field_2_3_2_1_11_38, :field_2_3_2_1_11_39, :field_2_3_2_1_11_40, :field_2_3_2_1_11_41, :field_2_3_2_1_11_42, :field_2_3_2_1_11_43, :field_2_3_2_1_11_44, :field_2_3_2_1_11_45, :field_2_3_2_1_11_46, :field_2_3_2_1_11_47, :field_2_3_2_1_11_48, :field_2_3_2_1_11_49, :field_2_3_2_1_11_50, :field_2_3_2_1_11_51, :field_2_3_2_1_11_52, :field_2_3_2_1_11_53, :field_2_3_2_1_11_54, :field_2_3_2_1_11_55, :field_2_3_2_1_11_56, :field_2_3_2_1_11_57, :field_2_3_2_1_11_58, :field_2_3_2_1_11_59, :field_2_3_2_1_11_60, :field_2_3_2_1_11_61, :field_2_3_2_1_11_62, :field_2_3_2_1_11_63, :field_2_3_2_1_11_64, :field_2_3_2_1_11_65, :field_2_3_2_1_11_66, :field_2_3_2_1_11_67, :field_2_3_2_1_11_68, :field_2_3_2_1_11_69, :field_2_3_2_1_11_70, :field_2_3_2_1_11_71, :field_2_3_2_1_11_72, :field_2_3_2_1_11_73 ;
  x3do:hasIS :IS_2_3_2_1_11_74 ;
  x3do:DEF 'ClockScript' ;
  x3do:sourceCode """
ecmascript:

function tracePrint (text)
{
	if (traceEnabled) Browser.println ('[DvdController ' + description + ' ClockScript] ' + text);
}
function alwaysPrint(output)
{
	Browser.println ('[DvdController ' + description + ' ClockScript] ' + output);
}

function initialize()
{
	isResetToStart = false;
	isFastRewind = false;
	isRewinding = false;
	isPlaying = false;
	isFastForward = false;
	isResetToEnd = false;

	durationChanged = duration;
	forwardCycleInterval = duration;
	fastForwardCycleInterval = duration;
	rewindCycleInterval = duration;
	fastRewindCycleInterval = duration;
	sliderClockCycleInterval = duration;

	fraction = 0;
	fastRewind_level = 0;
	fastForward_level = 0;
	sliderClockStart_fraction = 0;
}

function set_duration(value, timeStamp)
{
	duration = value;
	durationChanged = value;
	forwardCycleInterval = duration;
	fastForwardCycleInterval = duration;
	rewindCycleInterval = duration;
	fastRewindCycleInterval = duration;
	sliderClockCycleInterval = duration;
	alwaysPrint ('set_duration (' + duration + ') complete');
}

function setarePlaybackButtonsActive(value, timeStamp)
{
	arePlaybackButtonsActive = value;
	tracePrint('arePlaybackButtonsActive=' + arePlaybackButtonsActive);
}

function setIsClockActive(value, timeStamp)
{
	isClockActive = isClockActiveChanged = value;
	tracePrint('isClockActive=' + isClockActive);
}

function setResetToStart(value, timeStamp)
{
	tracePrint('setResetToStart(' + value + ')');
	isResetToStart = true;

	//Stop all clocks
	isPlaying = false;
	isRewinding = false;
	isFastForward = false;
	isFastRewind = false;
	sliderClockEnabled = false;

	fraction = fraction_changed = 0.0;
	secondsElapsed = 0.0;
	startTime = startTime_changed = timeStamp;
	stopTime = stopTime_changed = startTime + duration;
	deactivateButtonColorChanged = deactivateButtonColor;

	if (!arePlaybackButtonsActive)
		return;

	deactivateLabelColorChanged = deactivateLabelColor;
}

function setFastRewind(value, timeStamp)
{
	tracePrint('setFastRewind(' + value + ')');
	if (!isFastRewind)
		fastRewindStart_fraction = fraction;

	isFastRewind = true;
	isPlaying = false;
	isRewinding = false;
	isFastForward = false;
	sliderClockEnabled = false;

	if (fastRewind_level < 1)
	{
		++fastRewind_level;
		fastRewindCycleInterval = duration / (speedFactor * fastRewind_level);
	}

	if (fraction == 0) //start reached
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged = deactivateLabelColor;
		return;
	}

	fastRewindStartTime = timeStamp;
	fastRewindStopTime = fastRewindStartTime + secondsElapsed / (speedFactor * fastRewind_level);

	startTime = startTime_changed = fastRewindStopTime;
}

function setRewind(value, timeStamp)
{
	tracePrint('setRewind(' + value + ')');
	if (!isRewinding)
		rewindStart_fraction = fraction;

	isRewinding = true;
	isPlaying = false;
	isFastForward = false;
	isFastRewind = false;
	sliderClockEnabled = false;

	fastRewind_level = 0;  //reset
	rewindCycleInterval = duration;

	if (fraction == 0)  //start reached
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged = deactivateLabelColor;
		return;
	}

	rewindStartTime = timeStamp;
	rewindStopTime = rewindStartTime + secondsElapsed;

	startTime = startTime_changed = rewindStopTime;
}

function setPaused(value, timeStamp)
{
	tracePrint('setPaused(' + value + ')');
	if (value == true)
	{
		now = new Date();
		pauseTime = now.getTime() / 1000.0;

		isFastRewind = false;
		isRewinding = false;
		isPlaying = false;
		isFastForward = false;
		sliderClockEnabled = false;
	}
}

function setPlay(value, timeStamp)
{
	tracePrint('setPlay(' + value + ')');
	isPlaying = true;
	isRewinding = false;
	isFastForward = false;
	isFastRewind = false;
	sliderClockEnabled = false;

	fastRewind_level = 0; //reset fast rewind
	forwardCycleInterval = duration;

	if (fraction == 0 || fraction == 1)  //start or restart from beginning
	{
		startTime = startTime_changed = timeStamp;
		stopTime = stopTime_changed = startTime + duration;
	}
	else
	{
		startTime = startTime_changed = timeStamp - secondsElapsed;
		stopTime = stopTime_changed = startTime + duration;
	}
}

function setFastForward(value, timeStamp)
{
	tracePrint('setFastForward(' + value + ')');
	isFastForward = true;
	isPlaying = false;
	isRewinding = false;
	isFastRewind = false;
	sliderClockEnabled = false;

	if (fastForward_level < 1)
	{
		++fastForward_level;
		fastForwardCycleInterval = duration / (speedFactor * fastForward_level);
	}

	fastForwardStartTime = timeStamp - secondsElapsed / (speedFactor * fastForward_level);
	fastForwardStopTime = fastForwardStartTime + duration / (speedFactor * fastForward_level);

	startTime = startTime_changed = fastForwardStartTime;
}

function setResetToEnd(value, timeStamp)
{
	tracePrint('setResetToEnd(' + value + ')');
	isResetToEnd = true;

	//Stop all clocks
	isPlaying = false;
	isRewinding = false;
	isFastForward = false;
	isFastRewind = false;
	sliderClockEnabled = false;

	fraction = fraction_changed = 1.0;
	secondsElapsed = duration;

	stopTime = stopTime_changed = timeStamp;
	startTime = startTime_changed = stopTime - duration;
	deactivateButtonColorChanged = deactivateButtonColor;
	deactivateLabelColorChanged = deactivateLabelColor;
}

function setFraction(value, timeStamp)
{
	if (isRewinding || isFastForward || isFastRewind || sliderClockEnabled || sliderDragArmed)
        {
//              tracePrint('setFraction immediate return..');
		return;
        }
//	tracePrint('setFraction(' + value + ')');

	if (isResetToStart)
	{
                tracePrint('setFraction isResetToStart=true, reset..');
		isResetToStart = false; //reset
		return;
	}
	else if (isResetToEnd)
	{
                tracePrint('setFraction isResetToEnd=true, reset..');
		isResetToEnd = false; //reset
		return;
	}

	fraction = fraction_changed = value;
        tracePrint('fraction_changed=' + fraction_changed);

	if (fraction >= 1) //end reached
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged = deactivateLabelColor;
		fraction = fraction_changed = 1.0;
	}
}

function setFastForwardFraction(value, timeStamp)
{
	tracePrint('setFastForwardFraction(' + value + ')');
	if (isPlaying || isFastRewind || isRewinding || sliderClockEnabled || sliderDragArmed)
		return;

	if (isResetToStart)
	{
		isResetToStart = false; //reset
		return;
	}
	else if (isResetToEnd)
	{
		isResetToEnd = false; //reset
		return;
	}

	fraction = fraction_changed = value;

	if (fraction >= 1) //end reached
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged = deactivateLabelColor;
		isFastForward = false;
		fraction = fraction_changed = 1.0;
		secondsElapsed = duration;
	}
}

function setRewindFraction(value, timeStamp)
{
	tracePrint('setRewindFraction(' + value + ')');
	if (isPlaying || isFastForward || isFastRewind || sliderClockEnabled || sliderDragArmed)
		return;

	if (isResetToStart)
	{
		isResetToStart = false; //reset
		return;
	}
	else if (isResetToEnd)
	{
		isResetToEnd = false; //reset
		return;
	}

	fraction = fraction_changed = 1 - value - (1 - rewindStart_fraction);

	if (fraction <= 0.0000001) //start reached - rounded off
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged  = deactivateLabelColor;
		isRewinding = false;
		fraction = fraction_changed = 0.0;
		secondsElapsed = 0.0;
	}
}

function setFastRewindFraction(value, timeStamp)
{
	tracePrint('setFastRewindFraction(' + value + ')');
	if (isPlaying || isFastForward || isRewinding || sliderClockEnabled || sliderDragArmed)
		return;

	if (isResetToStart)
	{
		isResetToStart = false; //reset
		return;
	}
	else if (isResetToEnd)
	{
		isResetToEnd = false; //reset
		return;
	}

	fraction = fraction_changed = 1 - value - (1 - fastRewindStart_fraction);

	if (fraction <= 0.0000001) //start reached - rounded off
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged  = deactivateLabelColor;
		isFastRewind = false;
		fraction = fraction_changed = 0.0;
		fastRewindStart_fraction = -1; //reset
		secondsElapsed = 0.0;
	}
}

function setTime(value, timeStamp)
{
	// Check if pause option is selected
	if (!isPlaying && !isRewinding && !isFastForward && !isFastRewind && !sliderClockEnabled)
        {
                tracePrint('setTime(' + value + ') immediate return');
		return;
        }
	tracePrint('setTime(' + value + ')');

	time = time_changed = value; // time_changed is output event via IS/connect
	secondsElapsed = Math.abs(value - startTime);
        tracePrint ('time=' + time + ', secondsElapsed=' + secondsElapsed);
	if (isFastRewind)
		secondsElapsed = secondsElapsed * (speedFactor * fastRewind_level);
	else if (isFastForward)
		secondsElapsed = secondsElapsed * (speedFactor * fastForward_level);
	if (fraction == 0)
		secondsElapsed = 0.0;
	else if (fraction == 1)
		secondsElapsed = duration;
}

function setSliderDragged(value, timeStamp)
{
	if (value == true) //Drag started
	{
                tracePrint ('Drag started');
		preDrag_fraction = fraction;
		sliderDragArmed = true;

		isPlaying = false;
		isRewinding = false;
		isFastForward = false;
		isFastRewind = false;
		sliderClockEnabled = false;
	}
	else //Drag finished
	{
                tracePrint ('Drag finished');
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged  = deactivateLabelColor;
		sliderDragArmed = false;

		secondsElapsed = duration * fraction;

		sliderClockEnabled = true;
		if (fraction == 0 || fraction == 1) //start or end reached
			return;

		sliderClockCycleInterval = duration;
		if (fraction >= preDrag_fraction) //play
		{
			drag_forward = true;
			drag_backward = false;
			sliderClockStartTime = timeStamp - secondsElapsed;
			sliderClockStopTime = sliderClockStartTime + duration;
			startTime = startTime_changed = sliderClockStartTime;
			playButtonActivateColorChanged = activateButtonColor;
			playLabelActivateColorChanged  = activateLabelColor;
		}
		else if (fraction < preDrag_fraction) //rewind
		{
			drag_forward = false;
			drag_backward = true;
			sliderClockStartTime = timeStamp;
			sliderClockStopTime = timeStamp + secondsElapsed;
			startTime = startTime_changed = sliderClockStopTime;
			rewindButtonActivateColorChanged = activateButtonColor;
			rewindLabelActivateColorChanged  = activateLabelColor;
	}

		sliderClockStart_fraction = fraction;
	}
}

function setSliderDragFraction(value, timeStamp)
{
	if (isPlaying || isRewinding || isFastForward || isFastRewind || sliderClockEnabled)
        {
//              tracePrint('setSliderDragFraction immediate return');
		return;
        }
	tracePrint('setSliderDragFraction(' + value + ')');

	if (sliderDragArmed)
		fraction = fraction_changed = value;
}

function setSliderClockFraction(value, timeStamp)
{
	if (isPlaying || isRewinding || isFastForward || isFastRewind)
        {
//              tracePrint('setSliderClockFraction immediate return');
		return;
        }
	tracePrint('setSliderClockFraction(' + value + ')');

	if (isResetToStart)
	{
		isResetToStart = false; //reset
		return;
	}
	else if (isResetToEnd)
	{
		isResetToEnd = false; //reset
		return;
	}

	if (drag_forward)
		fraction = fraction_changed = value;
	else if (drag_backward)
		fraction = fraction_changed = 1 - value - (1 - sliderClockStart_fraction);

	if (fraction <= 0.0000001)
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged  = deactivateLabelColor;
		sliderClockEnabled = false;
		fraction = fraction_changed = 0.0;
		secondsElapsed = 0.0;
	}
	else if (fraction >= 1)
	{
		deactivateButtonColorChanged = deactivateButtonColor;
		deactivateLabelColorChanged  = deactivateLabelColor;
		sliderClockEnabled = false;
		fraction = fraction_changed = 1.0;
		secondsElapsed = duration;
	}
}
""" .
:field_2_3_2_1_11_1 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'description' ;
  x3do:type 'SFString' .
:field_2_3_2_1_11_2 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'traceEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_3 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'duration' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_4 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'set_duration' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_5 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'durationChanged' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_6 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'forwardCycleInterval' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_7 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastForwardCycleInterval' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_8 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindCycleInterval' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_9 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastRewindCycleInterval' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_10 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'sliderClockCycleInterval' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_11 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'speedFactor' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_12 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'startTime' ;
  x3do:type 'SFTime' ;
  x3do:value '-1' .
:field_2_3_2_1_11_13 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'startTime_changed' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_14 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'stopTime' ;
  x3do:type 'SFTime' ;
  x3do:value '-1' .
:field_2_3_2_1_11_15 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'stopTime_changed' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_16 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindStartTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_17 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindStopTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_18 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastForwardStartTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_19 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastForwardStopTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_20 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastRewindStartTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_21 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fastRewindStopTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_22 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'sliderClockStartTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_23 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'sliderClockStopTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_24 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'time' ;
  x3do:type 'SFTime' ;
  x3do:value '-1' .
:field_2_3_2_1_11_25 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setTime' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_26 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'time_changed' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_27 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'isClockActive' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_11_28 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setIsClockActive' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_29 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isClockActiveChanged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_30 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'secondsElapsed' ;
  x3do:type 'SFTime' .
:field_2_3_2_1_11_31 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'fraction' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:field_2_3_2_1_11_32 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setFraction' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_33 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setFastForwardFraction' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_34 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setRewindFraction' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_35 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setFastRewindFraction' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_36 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setSliderDragFraction' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_37 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setSliderClockFraction' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_38 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'fraction_changed' ;
  x3do:type 'SFFloat' .
:field_2_3_2_1_11_39 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isResetToStart' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_40 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setResetToStart' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_41 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isFastRewind' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_42 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setFastRewind' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_43 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isRewinding' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_44 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setRewind' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_45 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setPaused' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_46 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isPlaying' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_47 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setPlay' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_48 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isFastForward' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_49 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setFastForward' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_50 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'isResetToEnd' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_51 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setResetToEnd' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_52 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'sliderClockEnabled' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_53 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'sliderDragArmed' ;
  x3do:type 'SFBool' ;
  x3do:value false .
:field_2_3_2_1_11_54 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setSliderDragged' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_55 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'pauseTime' ;
  x3do:type 'SFTime' ;
  x3do:value '-1' .
:field_2_3_2_1_11_56 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'activateButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_57 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'activateLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_58 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'deactivateButtonColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_59 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'arePlaybackButtonsActive' ;
  x3do:type 'SFBool' ;
  x3do:value true .
:field_2_3_2_1_11_60 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'inputOnly' ;
  x3do:name 'setarePlaybackButtonsActive' ;
  x3do:type 'SFBool' .
:field_2_3_2_1_11_61 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'deactivateButtonColorChanged' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_62 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'deactivateLabelColor' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_63 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'deactivateLabelColorChanged' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_64 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'playButtonActivateColorChanged' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_65 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'playLabelActivateColorChanged' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_66 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindButtonActivateColorChanged' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_67 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'outputOnly' ;
  x3do:name 'rewindLabelActivateColorChanged' ;
  x3do:type 'SFColor' .
:field_2_3_2_1_11_68 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'rewindStart_fraction' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:field_2_3_2_1_11_69 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'fastRewindStart_fraction' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:field_2_3_2_1_11_70 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'sliderClockStart_fraction' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:field_2_3_2_1_11_71 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'fastRewind_level' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:field_2_3_2_1_11_72 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'fastForward_level' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:field_2_3_2_1_11_73 a owl:NamedIndividual, x3do:field ;
  x3do:hasParent :ClockScript ;
  x3do:accessType 'initializeOnly' ;
  x3do:name 'preDrag_fraction' ;
  x3do:type 'SFFloat' ;
  x3do:value 0 .
:IS_2_3_2_1_11_74 a owl:NamedIndividual, x3do:IS ;
  x3do:hasParent :ClockScript ;
  x3do:hasConnect :connect_2_3_2_1_11_74_1, :connect_2_3_2_1_11_74_2, :connect_2_3_2_1_11_74_3, :connect_2_3_2_1_11_74_4, :connect_2_3_2_1_11_74_5, :connect_2_3_2_1_11_74_6, :connect_2_3_2_1_11_74_7, :connect_2_3_2_1_11_74_8, :connect_2_3_2_1_11_74_9, :connect_2_3_2_1_11_74_10, :connect_2_3_2_1_11_74_11, :connect_2_3_2_1_11_74_12, :connect_2_3_2_1_11_74_13, :connect_2_3_2_1_11_74_14, :connect_2_3_2_1_11_74_15, :connect_2_3_2_1_11_74_16 .
:connect_2_3_2_1_11_74_1 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'description' ;
  x3do:protoField 'description' .
:connect_2_3_2_1_11_74_2 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'traceEnabled' ;
  x3do:protoField 'traceEnabled' .
:connect_2_3_2_1_11_74_3 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'deactivateButtonColor' ;
  x3do:protoField 'buttonColor' .
:connect_2_3_2_1_11_74_4 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'activateButtonColor' ;
  x3do:protoField 'selectedButtonColor' .
:connect_2_3_2_1_11_74_5 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'deactivateLabelColor' ;
  x3do:protoField 'labelColor' .
:connect_2_3_2_1_11_74_6 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'activateLabelColor' ;
  x3do:protoField 'selectedLabelColor' .
:connect_2_3_2_1_11_74_7 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'duration' ;
  x3do:protoField 'cycleInterval' .
:connect_2_3_2_1_11_74_8 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'set_duration' ;
  x3do:protoField 'set_cycleInterval' .
:connect_2_3_2_1_11_74_9 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'durationChanged' ;
  x3do:protoField 'cycleInterval_changed' .
:connect_2_3_2_1_11_74_10 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'speedFactor' ;
  x3do:protoField 'speedFactor' .
:connect_2_3_2_1_11_74_11 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'isClockActiveChanged' ;
  x3do:protoField 'isActive' .
:connect_2_3_2_1_11_74_12 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'startTime_changed' ;
  x3do:protoField 'startTime_changed' .
:connect_2_3_2_1_11_74_13 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'stopTime_changed' ;
  x3do:protoField 'stopTime_changed' .
:connect_2_3_2_1_11_74_14 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'time_changed' ;
  x3do:protoField 'time_changed' .
:connect_2_3_2_1_11_74_15 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'fraction_changed' ;
  x3do:protoField 'fraction_changed' .
:connect_2_3_2_1_11_74_16 a owl:NamedIndividual, x3do:connect ;
  x3do:hasParent :IS_2_3_2_1_11_74 ;
  x3do:nodeField 'secondsElapsed' ;
  x3do:protoField 'secondsElapsed' .
:ROUTE_2_3_2_1_12 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'arePlaybackButtonsActive' ;
  x3do:fromNode 'DISModeScript' ;
  x3do:toField 'setarePlaybackButtonsActive' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_13 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'resetToStartChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setResetToStart' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_14 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastRewindChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setFastRewind' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_15 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'rewindChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setRewind' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_16 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'pauseChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setPaused' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_17 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'playChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setPlay' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_18 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastForwardChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setFastForward' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_19 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'resetToEndChanged' ;
  x3do:fromNode 'PlaybackControlScript' ;
  x3do:toField 'setResetToEnd' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_20 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'ForwardClock' ;
  x3do:toField 'setIsClockActive' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_21 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'ForwardClock' ;
  x3do:toField 'setFraction' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_22 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'time' ;
  x3do:fromNode 'ForwardClock' ;
  x3do:toField 'setTime' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_23 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'RewindClock' ;
  x3do:toField 'setIsClockActive' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_24 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'RewindClock' ;
  x3do:toField 'setRewindFraction' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_25 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'time' ;
  x3do:fromNode 'RewindClock' ;
  x3do:toField 'setTime' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_26 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'FastForwardClock' ;
  x3do:toField 'setIsClockActive' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_27 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'FastForwardClock' ;
  x3do:toField 'setFastForwardFraction' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_28 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'time' ;
  x3do:fromNode 'FastForwardClock' ;
  x3do:toField 'setTime' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_29 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'FastRewindClock' ;
  x3do:toField 'setIsClockActive' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_30 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'FastRewindClock' ;
  x3do:toField 'setFastRewindFraction' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_31 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'time' ;
  x3do:fromNode 'FastRewindClock' ;
  x3do:toField 'setTime' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_32 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isActive' ;
  x3do:fromNode 'SliderClock' ;
  x3do:toField 'setIsClockActive' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_33 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'SliderClock' ;
  x3do:toField 'setSliderClockFraction' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_34 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'time' ;
  x3do:fromNode 'SliderClock' ;
  x3do:toField 'setTime' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_35 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isPlaying' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_enabled' ;
  x3do:toNode 'ForwardClock' .
:ROUTE_2_3_2_1_36 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isRewinding' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_enabled' ;
  x3do:toNode 'RewindClock' .
:ROUTE_2_3_2_1_37 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isFastForward' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_enabled' ;
  x3do:toNode 'FastForwardClock' .
:ROUTE_2_3_2_1_38 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'isFastRewind' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_enabled' ;
  x3do:toNode 'FastRewindClock' .
:ROUTE_2_3_2_1_39 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'sliderClockEnabled' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_enabled' ;
  x3do:toNode 'SliderClock' .
:ROUTE_2_3_2_1_40 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'forwardCycleInterval' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_cycleInterval' ;
  x3do:toNode 'ForwardClock' .
:ROUTE_2_3_2_1_41 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'rewindCycleInterval' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_cycleInterval' ;
  x3do:toNode 'RewindClock' .
:ROUTE_2_3_2_1_42 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastForwardCycleInterval' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_cycleInterval' ;
  x3do:toNode 'FastForwardClock' .
:ROUTE_2_3_2_1_43 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastRewindCycleInterval' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_cycleInterval' ;
  x3do:toNode 'FastRewindClock' .
:ROUTE_2_3_2_1_44 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'sliderClockCycleInterval' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_cycleInterval' ;
  x3do:toNode 'SliderClock' .
:ROUTE_2_3_2_1_45 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'startTime_changed' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'ForwardClock' .
:ROUTE_2_3_2_1_46 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'stopTime_changed' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_stopTime' ;
  x3do:toNode 'ForwardClock' .
:ROUTE_2_3_2_1_47 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'rewindStartTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'RewindClock' .
:ROUTE_2_3_2_1_48 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'rewindStopTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_stopTime' ;
  x3do:toNode 'RewindClock' .
:ROUTE_2_3_2_1_49 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastForwardStartTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'FastForwardClock' .
:ROUTE_2_3_2_1_50 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastForwardStopTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_stopTime' ;
  x3do:toNode 'FastForwardClock' .
:ROUTE_2_3_2_1_51 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastRewindStartTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'FastRewindClock' .
:ROUTE_2_3_2_1_52 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fastRewindStopTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_stopTime' ;
  x3do:toNode 'FastRewindClock' .
:ROUTE_2_3_2_1_53 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'sliderClockStartTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_startTime' ;
  x3do:toNode 'SliderClock' .
:ROUTE_2_3_2_1_54 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'sliderClockStopTime' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'set_stopTime' ;
  x3do:toNode 'SliderClock' .
:ROUTE_2_3_2_1_55 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'fraction_changed' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'setValue' ;
  x3do:toNode 'Slider' .
:ROUTE_2_3_2_1_56 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToStartButtonMaterial' .
:ROUTE_2_3_2_1_57 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToStartLabelMaterial' .
:ROUTE_2_3_2_1_58 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastRewindButtonMaterial' .
:ROUTE_2_3_2_1_59 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastRewindLabelMaterial' .
:ROUTE_2_3_2_1_60 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindButtonMaterial' .
:ROUTE_2_3_2_1_61 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindLabelMaterial' .
:ROUTE_2_3_2_1_62 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PauseButtonMaterial' .
:ROUTE_2_3_2_1_63 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PauseLabelMaterial' .
:ROUTE_2_3_2_1_64 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayButtonMaterial' .
:ROUTE_2_3_2_1_65 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayLabelMaterial' .
:ROUTE_2_3_2_1_66 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastForwardButtonMaterial' .
:ROUTE_2_3_2_1_67 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'FastForwardLabelMaterial' .
:ROUTE_2_3_2_1_68 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateButtonColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToEndButtonMaterial' .
:ROUTE_2_3_2_1_69 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'deactivateLabelColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'ResetToEndLabelMaterial' .
:ROUTE_2_3_2_1_70 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'playButtonActivateColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayButtonMaterial' .
:ROUTE_2_3_2_1_71 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'playLabelActivateColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'PlayLabelMaterial' .
:ROUTE_2_3_2_1_72 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'rewindButtonActivateColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindButtonMaterial' .
:ROUTE_2_3_2_1_73 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'rewindLabelActivateColorChanged' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'diffuseColor' ;
  x3do:toNode 'RewindLabelMaterial' .
:ROUTE_2_3_2_1_74 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'valueChanged' ;
  x3do:fromNode 'Slider' ;
  x3do:toField 'setSliderDragFraction' ;
  x3do:toNode 'ClockScript' .
:ROUTE_2_3_2_1_75 a owl:NamedIndividual, x3do:ROUTE ;
  x3do:hasParent :LocationOffset ;
  x3do:fromField 'secondsElapsed' ;
  x3do:fromNode 'ClockScript' ;
  x3do:toField 'setSecondsElapsed' ;
  x3do:toNode 'TimeScaleScript' .
:Anchor_2_4 a owl:NamedIndividual, x3do:Anchor ;
  x3do:hasParent :Scene ;
  x3do:hasChildren :Shape_2_4_1 ;
  x3do:description 'DvdController Example' ;
  x3do:url '"DvdControllerExample.x3d" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerExample.x3d" "DvdControllerExample.wrl" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/DvdControllerExample.wrl"' .
:Shape_2_4_1 a owl:NamedIndividual, x3do:Shape ;
  x3do:hasParent :Anchor_2_4 ;
  x3do:hasAppearance :Appearance_2_4_1_1 ;
  x3do:hasGeometry :Text_2_4_1_2 .
:Appearance_2_4_1_1 a owl:NamedIndividual, x3do:Appearance ;
  x3do:hasParent :Shape_2_4_1 ;
  x3do:hasMaterial :Material_2_4_1_1_1 .
:Material_2_4_1_1_1 a owl:NamedIndividual, x3do:Material ;
  x3do:hasParent :Appearance_2_4_1_1 ;
  x3do:diffuseColor ( 0 1 1 ) ;
  x3do:emissiveColor ( 0 1 1 ) .
:Text_2_4_1_2 a owl:NamedIndividual, x3do:Text ;
  x3do:hasParent :Shape_2_4_1 ;
  x3do:hasFontStyle :FontStyle_2_4_1_2_1 ;
  x3do:string '"DvdControllerPrototype" "is a Prototype definition file." "" "To see an example scene" "select this text and view" "DvdControllerExample"' .
:FontStyle_2_4_1_2_1 a owl:NamedIndividual, x3do:FontStyle ;
  x3do:hasParent :Text_2_4_1_2 ;
  x3do:justify '"MIDDLE" "MIDDLE"' ;
  x3do:size 0.8 .
