Index: java/main/src/test/resources/info/Creature.info
===================================================================
--- java/main/src/test/resources/info/Creature.info	(revision 86)
+++ java/main/src/test/resources/info/Creature.info	(revision 86)
@@ -0,0 +1,423 @@
+class:
+id:Creature
+
+prop:
+name:Name
+id:name
+type:s
+flags:0
+
+prop:
+name:Genotype
+id:genotype
+type:s
+flags:0
+
+prop:
+name:Info
+id:info
+type:s
+help:Additional info or comments
+flags:0
+
+prop:
+name:group
+id:group
+type:x
+flags:33
+
+prop:
+name:Generation
+id:gnum
+type:d
+flags:0
+
+prop:
+name:Build problems
+id:buildproblems
+type:d
+flags:32
+
+prop:
+name:Starting energy
+id:energ0
+type:f
+flags:0
+
+prop:
+name:Idle power consumption
+id:idleen
+type:f
+flags:0
+
+prop:
+name:Energy
+id:energy
+type:f
+flags:0
+
+prop:
+name:Energy income
+id:energy_p
+type:f
+flags:0
+
+prop:
+name:Energy costs
+id:energy_m
+type:f
+flags:0
+
+prop:
+name:Energy balance
+id:energy_b
+type:f
+flags:0
+
+prop:
+name:Performance calculation
+id:perf
+type:d
+help:Initial value of this property is taken from Population.enableperf
+flags:0
+
+prop:
+name:NN enabled
+id:nnenabled
+type:d 0 1
+flags:0
+
+prop:
+name:Body simulation
+id:bodysim
+type:d 0 1
+help:~
+(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks.
+
+Bugs: the standard collision handler does not work for disabled objects when ODE simulation is used. It means that these objects won't physically interact with other objects. The custom (scripting) handlers work as expected.~
+flags:0
+
+prop:
+name:Self-collisions
+id:selfcol
+type:d 0 1
+help:Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.
+flags:0
+
+prop:
+name:Self-collisions
+id:selfcolstate
+type:d 0 1
+help:Current self-collision state
+flags:35
+
+prop:
+name:Life span
+id:lifespan
+type:d
+flags:0
+
+prop:
+name:Distance
+id:distance
+type:f
+flags:0
+
+prop:
+name:Velocity
+id:c_velocity
+type:f
+flags:0
+
+prop:
+name:Vertical velocity
+id:c_vertvelocity
+type:f
+flags:0
+
+prop:
+name:Vertical position
+id:c_vertpos
+type:f
+flags:0
+
+prop:
+name:Avg. velocity
+id:velocity
+type:f
+flags:0
+
+prop:
+name:Avg. vertical position
+id:vertpos
+type:f
+flags:0
+
+prop:
+name:Avg. vertical velocity
+id:vertvel
+type:f
+flags:0
+
+prop:
+name:position.x
+id:pos_x
+type:f
+help:(pos_x,pos_y,pos_z) is the point of minimal coordinates ("bottom left corner") of the creature, including imaginary Part sizes (Part.s, usually 1.0). See also: Creature.moveAbs
+flags:3
+
+prop:
+name:position.y
+id:pos_y
+type:f
+help:See Creature.pos_x
+flags:3
+
+prop:
+name:position.z
+id:pos_z
+type:f
+help:See Creature.pos_x
+flags:3
+
+prop:
+name:bounding box x size
+id:size_x
+type:f
+help:~
+(size_x,size_y,size_z) are dimensions of the axis-aligned bounding box of the creature, including the imaginary part sizes (Part.s, usually 1.0). A creature consisting of a single default Part has the size of (2.0,2.0,2.0) - twice the Part.s value (like a sphere diameter is twice its radius).
+See also: Creature.moveAbs~
+flags:3
+
+prop:
+name:bounding box y size
+id:size_y
+type:f
+help:See Creature.size_x
+flags:3
+
+prop:
+name:bounding box z size
+id:size_z
+type:f
+help:See Creature.size_x
+flags:3
+
+prop:
+name:center.x
+id:center_x
+type:f
+help:Center of gravity
+flags:3
+
+prop:
+name:center.y
+id:center_y
+type:f
+help:Center of gravity
+flags:3
+
+prop:
+name:center.z
+id:center_z
+type:f
+help:Center of gravity
+flags:3
+
+prop:
+name:number of parts
+id:numparts
+type:d
+flags:3
+
+prop:
+name:number of joints
+id:numjoints
+type:d
+flags:3
+
+prop:
+name:number of neurons
+id:numneurons
+type:d
+flags:3
+
+prop:
+name:User field 1
+id:user1
+type:x
+flags:0
+
+prop:
+name:User field 2
+id:user2
+type:x
+flags:0
+
+prop:
+name:User field 3
+id:user3
+type:x
+flags:0
+
+prop:
+name:move
+id:move
+type:p
+help:Shift the creature by a given vector.
+flags:32
+
+prop:
+name:move to absolute location
+id:moveAbs
+type:p
+help:~
+Moves the creature so that its origin (pos_x,pos_y,pos_z) is placed at the given location. The origin is the point of minimal coordinates ("bottom left corner"), including imaginary part sizes (Part.s, usually 1.0).
+Assuming a simple single-stick creature "X" having parts at (0,0,0) and (1,0,0),
+
+origin (pos_x,pos_y,pos_z) = (-1,-1,-1)
+size (size_x,size_y,size_z) = (3,2,2)
+
+The following example places the bottom of a creature at a given location (x,y,z):
+Creature.moveAbs(x-(Creature.size_x/2),y-(Creature.size_y/2),z-1.0)
+(assuming that the part size is 1.0)~
+flags:32
+
+prop:
+name:move in local coordinates
+id:moveLocal
+type:p
+help:Local coordinates are measured with respect to the position and orientation of the first Part
+flags:32
+
+prop:
+name:return world coordinates
+id:localToWorld
+type:p
+help:Local coordinates are measured with respect to the position and orientation of the first Part
+flags:32
+
+prop:
+name:return local coordinates
+id:worldToLocal
+type:p
+help:Local coordinates are measured with respect to the position and orientation of the first Part
+flags:32
+
+prop:
+name:rotate
+id:rotate
+type:p
+help:Rotate the creature around X, Y and Z axes. Should only be used immediately after creating a new creature (before the first simulation step is performed for this creature), otherwise further simulation can be disturbed.
+flags:32
+
+prop:
+name:rotate in local coordinates
+id:rotateLocal
+type:p
+help:Rotate the creature around (local) X, Y and Z axes. Should only be used immediately after creating a new creature (before the first simulation step is performed for this creature), otherwise further simulation can be disturbed.
+flags:32
+
+prop:
+name:getPart (static Model information)
+id:getPart
+type:p
+flags:32
+
+prop:
+name:getJoint (static Model information)
+id:getJoint
+type:p
+flags:32
+
+prop:
+name:getNeuroDef
+id:getNeuroDef
+type:p
+flags:32
+
+prop:
+name:getMechPart (current properties)
+id:getMechPart
+type:p
+flags:32
+
+prop:
+name:getMechJoint (current properties)
+id:getMechJoint
+type:p
+flags:32
+
+prop:
+name:getNeuro
+id:getNeuro
+type:p
+flags:32
+
+prop:
+name:Collision mask (self)
+id:selfmask
+type:db
+flags:32
+
+prop:
+name:Collision mask (other)
+id:othermask
+type:db
+flags:32
+
+prop:
+name:currentGeometryAsF0
+id:currentGeometryAsF0
+type:p
+flags:32
+
+prop:
+name:#
+id:uid
+type:s
+flags:33
+
+prop:
+name:Index
+id:index
+type:d
+help:Index of this Creature in its Population.
+flags:1
+
+prop:
+name:Model Parts
+id:parts
+type:l Part
+flags:0
+
+prop:
+name:Model Joints
+id:joints
+type:l Joint
+flags:0
+
+prop:
+name:Neuron Definitions
+id:neurodefs
+type:l NeuroDef
+flags:0
+
+prop:
+name:Simulated Parts
+id:mechparts
+type:l MechPart
+flags:0
+
+prop:
+name:Simulated Joints
+id:mechjoints
+type:l MechJoint
+flags:0
+
+prop:
+name:Live Neurons
+id:neurons
+type:l Neuro
+flags:0
+
Index: java/main/src/test/resources/info/Genotype.info
===================================================================
--- java/main/src/test/resources/info/Genotype.info	(revision 86)
+++ java/main/src/test/resources/info/Genotype.info	(revision 86)
@@ -0,0 +1,232 @@
+class:
+id:Genotype
+
+prop:
+name:Name
+id:name
+type:s
+flags:0
+
+prop:
+name:Genotype
+id:genotype
+type:s
+flags:0
+
+prop:
+name:Info
+id:info
+type:s
+help:Additional information or comments
+flags:0
+
+prop:
+name:Similarity
+id:simi
+type:f
+flags:3
+
+prop:
+name:Starting energy
+id:energ0
+type:f
+flags:3
+
+prop:
+name:Body parts (deprecated; use numparts)
+id:strsiz
+type:f
+flags:35
+
+prop:
+name:Body joints (deprecated; use numjoints)
+id:strjoints
+type:f
+flags:35
+
+prop:
+name:Brain size (deprecated; use numneurons)
+id:nnsiz
+type:f
+flags:35
+
+prop:
+name:Brain connections (deprecated; use numconnections)
+id:nncon
+type:f
+flags:35
+
+prop:
+name:Body parts
+id:numparts
+type:f
+flags:3
+
+prop:
+name:Body joints
+id:numjoints
+type:f
+flags:3
+
+prop:
+name:Brain size
+id:numneurons
+type:f
+flags:3
+
+prop:
+name:Brain connections
+id:numconnections
+type:f
+flags:3
+
+prop:
+name:Ordinal number
+id:num
+type:d
+flags:0
+
+prop:
+name:Generation
+id:gnum
+type:d
+flags:0
+
+prop:
+name:Deprecated; use instances
+id:popsiz
+type:d
+flags:32
+
+prop:
+name:Instances
+id:instances
+type:d
+help:Copies of this genotype
+flags:2
+
+prop:
+name:Life span
+id:lifespan
+type:f
+help:Average life span
+flags:0
+
+prop:
+name:Velocity
+id:velocity
+type:f
+help:Average velocity
+flags:0
+
+prop:
+name:Distance
+id:distance
+type:f
+flags:0
+
+prop:
+name:Vertical velocity
+id:vertvel
+type:f
+flags:0
+
+prop:
+name:Vertical position
+id:vertpos
+type:f
+flags:0
+
+prop:
+name:Fitness
+id:fit
+type:f
+flags:3
+
+prop:
+name:Final fitness
+id:fit2
+type:f
+help:Fitness shifted by (avg-n*stddev)
+flags:3
+
+prop:
+name:f0 genotype
+id:f0genotype
+type:s
+help:converted to f0 genotype
+flags:3
+
+prop:
+name:Conversion backtrace [1]
+id:convtrace1
+type:s
+flags:3
+
+prop:
+name:User field 1
+id:user1
+type:x
+flags:0
+
+prop:
+name:User field 2
+id:user2
+type:x
+flags:0
+
+prop:
+name:User field 3
+id:user3
+type:x
+flags:0
+
+prop:
+name:Mutate
+id:mutate
+type:p
+flags:0
+
+prop:
+name:Valid
+id:isValid
+type:d 0 1
+flags:35
+
+prop:
+name:get normalized property
+id:getNormalized
+type:p
+flags:35
+
+prop:
+name:#
+id:uid
+type:s
+help:Unique identifier
+flags:33
+
+prop:
+name:Model object
+id:getModel
+type:p
+flags:35
+
+prop:
+name:Model Parts
+id:parts
+type:l Part
+flags:0
+
+prop:
+name:Model Joints
+id:joints
+type:l Joint
+flags:0
+
+prop:
+name:Neuron Definitions
+id:neurodefs
+type:l NeuroDef
+flags:0
+
Index: java/main/src/test/resources/info/Joint.info
===================================================================
--- java/main/src/test/resources/info/Joint.info	(revision 86)
+++ java/main/src/test/resources/info/Joint.info	(revision 86)
@@ -0,0 +1,99 @@
+class:
+id:Joint
+
+prop:
+name:part1 ref#
+id:p1
+type:d
+flags:1024
+
+prop:
+name:part2 ref#
+id:p2
+type:d
+flags:1024
+
+prop:
+name:rotation.x
+id:rx
+type:f
+flags:0
+
+prop:
+name:rotation.y
+id:ry
+type:f
+flags:1024
+
+prop:
+name:rotation.z
+id:rz
+type:f
+flags:1024
+
+prop:
+name:delta.x
+id:dx
+type:f
+flags:0
+
+prop:
+name:delta.y
+id:dy
+type:f
+flags:1024
+
+prop:
+name:delta.z
+id:dz
+type:f
+flags:1024
+
+prop:
+name:stiffness
+id:stif
+type:f
+flags:0
+
+prop:
+name:rotation stiffness
+id:rotstif
+type:f
+flags:0
+
+prop:
+name:stamina
+id:stam
+type:f
+flags:0
+
+prop:
+name:info
+id:i
+type:s
+flags:0
+
+prop:
+name:vis_style
+id:Vstyle
+type:s
+flags:0
+
+prop:
+name:red component
+id:vr
+type:f
+flags:0
+
+prop:
+name:green component
+id:vg
+type:f
+flags:1024
+
+prop:
+name:blue component
+id:vb
+type:f
+flags:1024
+
Index: java/main/src/test/resources/info/MechJoint.info
===================================================================
--- java/main/src/test/resources/info/MechJoint.info	(revision 86)
+++ java/main/src/test/resources/info/MechJoint.info	(revision 86)
@@ -0,0 +1,63 @@
+class:
+id:MechJoint
+
+prop:
+name:rotation.x
+id:rx
+type:f
+flags:0
+
+prop:
+name:rotation.y
+id:ry
+type:f
+flags:0
+
+prop:
+name:rotation.z
+id:rz
+type:f
+flags:0
+
+prop:
+name:delta.x
+id:dx
+type:f
+flags:0
+
+prop:
+name:delta.y
+id:dy
+type:f
+flags:0
+
+prop:
+name:delta.z
+id:dz
+type:f
+flags:0
+
+prop:
+name:stiffness
+id:stif
+type:f
+flags:0
+
+prop:
+name:rotation stiffness
+id:rotstif
+type:f
+flags:0
+
+prop:
+name:
+id:stress
+type:f
+flags:1
+
+prop:
+name:
+id:rotstress
+type:f
+flags:1
+
Index: java/main/src/test/resources/info/MechPart.info
===================================================================
--- java/main/src/test/resources/info/MechPart.info	(revision 86)
+++ java/main/src/test/resources/info/MechPart.info	(revision 86)
@@ -0,0 +1,123 @@
+class:
+id:MechPart
+
+prop:
+name:position.x
+id:x
+type:f
+flags:0
+
+prop:
+name:position.y
+id:y
+type:f
+flags:0
+
+prop:
+name:position.z
+id:z
+type:f
+flags:0
+
+prop:
+name:mass
+id:m
+type:f
+flags:0
+
+prop:
+name:size
+id:s
+type:f
+flags:0
+
+prop:
+name:volume
+id:vol
+type:f
+flags:0
+
+prop:
+name:friction
+id:fr
+type:f
+flags:0
+
+prop:
+name:velocity.x
+id:vx
+type:f
+flags:0
+
+prop:
+name:velocity.y
+id:vy
+type:f
+flags:0
+
+prop:
+name:velocity.z
+id:vz
+type:f
+flags:0
+
+prop:
+name:orientation.x.x
+id:oxx
+type:f
+flags:0
+
+prop:
+name:orientation.x.y
+id:oxy
+type:f
+flags:0
+
+prop:
+name:orientation.x.z
+id:oxz
+type:f
+flags:0
+
+prop:
+name:orientation.y.x
+id:oyx
+type:f
+flags:0
+
+prop:
+name:orientation.y.y
+id:oyy
+type:f
+flags:0
+
+prop:
+name:orientation.y.z
+id:oyz
+type:f
+flags:0
+
+prop:
+name:orientation.z.x
+id:ozx
+type:f
+flags:0
+
+prop:
+name:orientation.z.y
+id:ozy
+type:f
+flags:0
+
+prop:
+name:orientation.z.z
+id:ozz
+type:f
+flags:0
+
+prop:
+name:apply force
+id:applyForce
+type:p
+flags:0
+
Index: java/main/src/test/resources/info/Neuro.info
===================================================================
--- java/main/src/test/resources/info/Neuro.info	(revision 86)
+++ java/main/src/test/resources/info/Neuro.info	(revision 86)
@@ -0,0 +1,140 @@
+class:
+id:Neuro
+
+prop:
+name:Get input signal
+id:getInputState
+type:p
+flags:0
+
+prop:
+name:Get input weight
+id:getInputWeight
+type:p
+flags:0
+
+prop:
+name:Get weighted input signal
+id:getWeightedInputState
+type:p
+flags:0
+
+prop:
+name:Get signal sum
+id:getInputSum
+type:p
+flags:0
+
+prop:
+name:Get weighted signal sum
+id:getWeightedInputSum
+type:p
+help:Uses any number of inputs starting with the specified input. getWeightedInputSum(0)=weightedInputSum
+flags:0
+
+prop:
+name:Get input count
+id:getInputCount
+type:d
+flags:0
+
+prop:
+name:Full signal sum
+id:inputSum
+type:f
+flags:0
+
+prop:
+name:Full weighted signal sum
+id:weightedInputSum
+type:f
+flags:0
+
+prop:
+name:Get channel count for input
+id:getInputChannelCount
+type:p
+flags:0
+
+prop:
+name:Get input signal from channel
+id:getInputStateChannel
+type:p
+flags:0
+
+prop:
+name:Get weighted input signal from channel
+id:getWeightedInputStateChannel
+type:p
+flags:0
+
+prop:
+name:Neuron state (channel 0)
+id:state
+type:f
+help:~
+When read, returns the current neuron state.
+When written, sets the 'internal' neuron state that will become current in the next step.
+Typically you should use this field, and not currState.~
+flags:0
+
+prop:
+name:Number of output channels
+id:channelCount
+type:d
+flags:0
+
+prop:
+name:Get state for channel
+id:getStateChannel
+type:p
+flags:0
+
+prop:
+name:Set state for channel
+id:setStateChannel
+type:p
+flags:0
+
+prop:
+name:Hold state
+id:hold
+type:d 0 1
+help:"Holding" means keeping the neuron state as is, blocking the regular neuron operation. This is useful when your script needs to inject some control signals into the NN. Without "holding", live neurons would be constantly overwriting your changes, and the rest of the NN could see inconsistent states, depending on the connections. Setting hold=1 ensures the neuron state will be only set by you, and not by the neuron. The enforced signal value can be set using Neuro.currState before or after setting hold=1. Set hold=0 to resume normal operation.
+flags:0
+
+prop:
+name:Current neuron state (channel 0)
+id:currState
+type:f
+help:~
+When read, it behaves just like the 'state' field.
+When written, changes the current neuron state immediately, which disturbs the regular synchronous NN operation.
+This feature should only be used while controlling the neuron 'from outside' (like a neuro probe) and not in the neuron definition. See also: Neuro.hold~
+flags:0
+
+prop:
+name:Set current neuron state for channel
+id:setCurrStateChannel
+type:p
+help:Analogous to "currState".
+flags:0
+
+prop:
+name:Position x
+id:position_x
+type:f
+flags:0
+
+prop:
+name:Position y
+id:position_y
+type:f
+flags:0
+
+prop:
+name:Position z
+id:position_z
+type:f
+flags:0
+
Index: java/main/src/test/resources/info/NeuroDef.info
===================================================================
--- java/main/src/test/resources/info/NeuroDef.info	(revision 86)
+++ java/main/src/test/resources/info/NeuroDef.info	(revision 86)
@@ -0,0 +1,57 @@
+class:
+id:NeuroDef
+
+prop:
+name:part ref#
+id:p
+type:d
+flags:0
+
+prop:
+name:joint ref#
+id:j
+type:d
+flags:0
+
+prop:
+name:item details
+id:d
+type:s
+flags:0
+
+prop:
+name:info
+id:i
+type:s
+flags:0
+
+prop:
+name:vis_style
+id:Vstyle
+type:s
+flags:0
+
+prop:
+name:input count
+id:getInputCount
+type:d
+flags:3
+
+prop:
+name:get input neuron
+id:getInputNeuroDef
+type:p
+flags:3
+
+prop:
+name:get input neuron index
+id:getInputNeuroIndex
+type:p
+flags:3
+
+prop:
+name:get input weight
+id:getInputWeight
+type:p
+flags:3
+
Index: java/main/src/test/resources/info/Part.info
===================================================================
--- java/main/src/test/resources/info/Part.info	(revision 86)
+++ java/main/src/test/resources/info/Part.info	(revision 86)
@@ -0,0 +1,111 @@
+class:
+id:Part
+
+prop:
+name:position.x
+id:x
+type:f
+flags:1024
+
+prop:
+name:position.y
+id:y
+type:f
+flags:1024
+
+prop:
+name:position.z
+id:z
+type:f
+flags:1024
+
+prop:
+name:mass
+id:m
+type:f
+flags:0
+
+prop:
+name:size
+id:s
+type:f
+flags:0
+
+prop:
+name:density
+id:dn
+type:f
+flags:0
+
+prop:
+name:friction
+id:fr
+type:f
+flags:0
+
+prop:
+name:ingestion
+id:ing
+type:f
+flags:0
+
+prop:
+name:assimilation
+id:as
+type:f
+flags:0
+
+prop:
+name:rot.x
+id:rx
+type:f
+flags:0
+
+prop:
+name:rot.y
+id:ry
+type:f
+flags:1024
+
+prop:
+name:rot.z
+id:rz
+type:f
+flags:1024
+
+prop:
+name:info
+id:i
+type:s
+flags:0
+
+prop:
+name:vis_style
+id:Vstyle
+type:s
+flags:0
+
+prop:
+name:visual thickness
+id:vs
+type:f
+flags:0
+
+prop:
+name:red component
+id:vr
+type:f
+flags:0
+
+prop:
+name:green component
+id:vg
+type:f
+flags:1024
+
+prop:
+name:blue component
+id:vb
+type:f
+flags:1024
+
Index: java/main/src/test/resources/info/World.info
===================================================================
--- java/main/src/test/resources/info/World.info	(revision 86)
+++ java/main/src/test/resources/info/World.info	(revision 86)
@@ -0,0 +1,74 @@
+class:
+id:World
+
+prop:
+id:wrldtyp
+name:Type
+type:d 0 2 0 ~Flat surface~Blocks~Height field
+
+prop:
+id:wrldsiz
+name:Size
+type:f 10 1000 20
+help:Side length of the world
+
+prop:
+id:wrldmap
+name:Map
+type:s 1
+help:~
+Description of the world (Type: Blocks or Heighfield). Enter
+   r <sizex> <sizey> [seed]
+to generate a random landscape, or
+   m <sizex> <sizey> digits
+   M <sizex> <sizey> numbers
+to provide height values.
+
+See also the WorldMap object.~
+
+prop:
+id:wrldwat
+name:Water level
+type:f -20 50 -1
+
+prop:
+id:wrldbnd
+name:Boundaries
+type:d 0 2 1 ~None~Fence~Teleport
+
+prop:
+id:wrldg
+name:Gravity
+type:f 0 10 1
+help:~
+You can adjust gravity for your experiments.
+The "official" setting used to evaluate and compare creatures is 1.~
+
+prop:
+id:wrldchg
+name:Trigger world update
+type:p()
+flags:32
+
+prop:
+id:simtype
+name:Simulation engine
+type:d 0 1 0 ~MechaStick~ODE
+help:~
+MechaStick is a fast and simple primary Framsticks simulation engine.
+ODE is Open Dynamics Engine by Russel Smith et al.
+
+NOTE: switching between simulation engines causes removal of all objects in the world (e.g. creatures).~
+
+prop:
+id:nnspeed
+name:NN speed
+type:f 0 1000 1
+help:Number of neural network simulation steps in each physics simulation step
+
+prop:
+id:faces
+name:Faces
+type:s
+help:ground geometry
+
Index: java/main/src/test/resources/log4j.properties
===================================================================
--- java/main/src/test/resources/log4j.properties	(revision 84)
+++ java/main/src/test/resources/log4j.properties	(revision 86)
@@ -27,4 +27,5 @@
 
 log4j.logger.com.framsticks=INFO
+# log4j.logger.com.framsticks.parsers.MultiParamLoader=TRACE
 # log4j.logger.com.framsticks.gui.controls.SliderControl=TRACE
 # log4j.logger.com.framsticks.communication.ClientConnection=DEBUG
