[Startup]
    ; ##
    ; ## SYSTEM
    ; ##

    ; Sets the method that OpenSim will use to fire asynchronous
    ; events. Valid values are UnsafeQueueUserWorkItem,
    ; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
    ;
    ; SmartThreadPool is reported to work well on Mono/Linux, but
    ; UnsafeQueueUserWorkItem has been benchmarked with better
    ; performance on .NET/Windows
    ;
    ; UnsafeQueueUserWorkItem refers to the fact that the code creating the event could elevate its security
    ; privileges.  However, as calling code is trusted anyway this is safe (if you set
    ;  TrustedBinaries = true in the [XEngine] section then you already have to trust that incoming code for other reasons).
    async_call_method = SmartThreadPool

    ; Max threads to allocate on the FireAndForget thread pool
    ; when running with the SmartThreadPool option above
    MaxPoolThreads = 300

    ; Allow certain jobs to be run consecutively in a job engine rather than always concurrently.
    ; This improves performance in regions with large numbers of connections (in the hundreds).
    JobEngineEnabled = true

    ; Maximum number of position, rotation and scale changes for each prim that the simulator will store for later undos
    ; Increasing this number will increase memory usage.
    MaxPrimUndos = 42

    ; If a viewer attempts to rez a prim larger than the non-physical or physical prim max, clamp the dimensions to the appropriate maximum
    ; This can be overridden in the region config file.
    ClampPrimSize = true

    ; If a prim is loaded from an external source, clamp it to Z = 0 if Z is negative.
    ClampNegativeZ = true

    ; Allow scripts to keep running when they cross region boundaries, rather than being restarted.  State is reloaded on the destination region.
    ; This only applies when crossing to a region running in a different simulator.
    ; For crossings where the regions are on the same simulator the script is always kept running.
    AllowScriptCrossing = true

    ; Main Frame time
    ; This defines the rate of several simulation events.
    ; Default value should meet most needs.
    ; It can be reduced to improve the simulation of moving objects, with possible increase of cpu and network loads.
    ; It should not be less than the physics engine step time.
    ; Being a integer multiple of it may reduce some jitter in reported physics FPS.
    ; changing this value, you need to change some of the following *EveryNFrames so their actions timing remains the same
    FrameTime = 0.0909

    ; Send scheduled updates to objects in the scene
    ; This must be a whole number
    UpdateObjectsEveryNFrames = 1

    ; Send position/velocity, etc. updates to agents in the scene
    ; This must be a whole number
    UpdateAgentsEveryNFrames = 1

    ; Apply pending forces from physics calculations to an entity.
    ; This must be a whole number
    UpdateEntityMovementEveryNFrames = 1

    ; Send coarse location updates to viewers.  In a classic viewer, this updates the minimap.
    ; This must be a whole number
    UpdateCoarseLocationsEveryNFrames = 50

    ; Physics simulation execution or syncronization, acording to engine. Should be 1
    ; This must be a whole number
    UpdatePhysicsEveryNFrames = 1

    ; Send out the on frame event to modules and other listeners.  This should probably never deviate from 1.
    ; This must be a whole number
    UpdateEventsEveryNFrames = 1

    ; Send terrain updates to viewers
    ; This must be a whole number
    UpdateTerrainEveryNFrames = 50

    ; Persitently store any objects which meet the PRIM STORAGE criteria
    ; This must be a whole number
    UpdateStorageEveryNFrames = 200

    ; Clean up temp on rez objects.
    ; This must be a whole number
    UpdateTempCleaningEveryNSeconds = 180

    ; ##
    ; ## PRIM STORAGE
    ; ##

    ; Persistence of changed objects happens during regular sweeps. The following control that behaviour to
    ; prevent frequently changing objects from heavily loading the region data store.
    ; If both of these values are set to zero then persistence of all changed objects will happen on every sweep.
    ;
    ; Objects will be considered for persistance in the next sweep when they have not changed for this number of seconds
    MinimumTimeBeforePersistenceConsidered = 60
    ; Objects will always be considered for persistance in the next sweep if the first change occurred this number of seconds ago
    MaximumTimeBeforePersistenceConsidered = 600

    ; ##
    ; ## PHYSICS
    ; ##

    ; Select a mesher here.
    ;
    ; Meshmerizer properly handles complex prims by using triangle meshes.
    ; Note that only the ODE physics engine currently deals with meshed prims in a satisfactory way
    ;
    ; ZeroMesher is faster but leaves the physics engine to model the mesh using the basic shapes that it supports
    ; Usually this is only a box

    ;meshing = Meshmerizer
    ;meshing = ZeroMesher
    ;; select ubODEMeshmerizer only with ubOde physics engine
    meshing = ubODEMeshmerizer

    ; ubODE and  OpenDynamicsEngine does allocate a lot of memory on stack. On linux you may need to increase its limit
    ; script opensim-ode-sh starts opensim setting that limit. You may need to increase it even more on large regions
    ; edit the line ulimit -s 262144, and change this last value

    ; if you use Meshmerizer and want sculpt map collisions, setting this to
    ; to true will store decoded sculpt maps in a special folder in your bin
    ; folder, which can reduce startup times by reducing asset requests. Some
    ; versions of mono dont work well when reading the cache files, so set this
    ; to false if you have compatibility problems.
    CacheSculptMaps = true

    ;; BulletSim is the default physics engine.  It provides the best performance and most functionality.
    ;; BulletSim supports varregions.
    ;; OpenDynamicsEngine was the previous default physics engine in OpenSimulator 0.7.6.1 and before.
    ;; It continues to provide a workable physics implementation.  It does not currently support varregions.
    ;; basicphysics effectively does not model physics at all, making all objects phantom.
    ;; Default is BulletSim
    ;physics = BulletSim
    ;physics = modified_BulletX
    ;physics = OpenDynamicsEngine
    ;physics = basicphysics
    ;physics = POS
    ;; alternative OpenDynamicsEngine engine. ubODEMeshmerizer meshing above MUST be selected also
    physics = ubODE

    ; ##
    ; ## SCRIPT ENGINE
    ; ##

    ;; Default script engine to use. Currently, we only have XEngine
    DefaultScriptEngine = "XEngine"

    ; Image decoding. Use CSJ2K for layer boundary decoding if true,
    ; OpenJPEG if false
    ; UseCSJ2K = true


[Map]
    ; Map tile options.
    ; If true, then maptiles are generated using the MapImageModule below.
    ; If false then the texture referenced by MaptileStaticUUID is used instead, which can also be overridden
    ; in individual region config file(s).  If you do not want to upload map tiles at all, then you will need
    ; both to set this to false and comment out the [Modules] MapImageServiceModule setting in config-include/
    GenerateMaptiles = false

    ;WorldMapModule = "WorldMap"

    ; The module to use in order to generate map images.
    ; MapImageModule is the default.  Warp3DImageModule is an alternative experimental module that can
    ; generate better images.
    MapImageModule = "Map3DImageModule"

    ; World map blacklist timeout in seconds
    ;BlacklistTimeout = 600

    ; Refresh (in seconds) the map tile periodically
    MaptileRefresh = 0

    ; If not generating maptiles, use this static texture asset ID
    MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"

    ; Draw objects on maptile.  This step might take a long time if you've got a large number of
    ; objects, so you can turn it off here if you'd like.
    DrawPrimOnMapTile = false

    ; Use terrain texture for maptiles if true, use shaded green if false
    TextureOnMapTile = false

    ; Texture prims
    TexturePrims = false

    ; Only texture prims that have a diagonal size greater than this number
    TexturePrimSize = 64

    ; Attempt to render meshes and sculpties on the map
    RenderMeshes = false

    UseAntiAliasing = false


[Network]
    ; OpenSim can send multiple simultaneous requests for services such as asset
    ; retrieval. However, some versions of mono appear to hang when there are too
    ; many simultaneous requests, default is 30 and is currently applied only to assets
    ;MaxRequestConcurrency = 30


[ClientStack.LindenUDP]
    ; The client socket receive buffer size determines how many
    ; incoming requests we can process; the default on .NET is 8192
    ; which is about 2 4k-sized UDP datagrams. On mono this is
    ; whatever the underlying operating system has as default; for
    ; example, ubuntu 8.04 or SLES11 have about 111k, which is about
    ; 27 4k-sized UDP datagrams (on linux platforms you can [as root]
    ; do "sysctl net.core.rmem_default" to find out what your system
    ; uses a default socket receive buffer size.
    ;
    ; client_socket_rcvbuf_size allows you to specify the receive
    ; buffer size LLUDPServer should use. NOTE: this will be limited
    ; by the system's settings for the maximum client receive buffer
    ; size (on linux systems you can set that with "sysctl -w
    ; net.core.rmem_max=X")
    ;
    ;client_socket_rcvbuf_size = 8388608

    ; Maximum outbound bytes per second for a single scene. This can be used to
    ; throttle total outbound UDP traffic for a simulator. The default value is
    ; 0, meaning no throttling at the scene level. The example given here is
    ; 20 megabits
    ;
    ;scene_throttle_max_bps = 2500000

    ; Maximum bytes per second to send to any single client. This will override
    ; the user's viewer preference settings. The default value is 0, meaning no
    ; aggregate throttling on clients (only per-category throttling). The
    ; example given here is 1.5 megabits
    ;
    ;client_throttle_max_bps = 187500

    ; Minimum bytes per second to send to any single client as a result of
    ; adaptive throttling. Viewer preferences set to a lower number will
    ; override the settin. The example given here ensures that adaptive
    ; throttling will never decrease per client bandwidth below 256 kbps.
    ;
    ;adaptive_throttle_min_bps = 32000

    ; Adaptive throttling attempts to limit network overload when multiple
    ; clients login by starting each connection more slowly. Disabled by
    ; default
    ;
    enable_adaptive_throttles = false

    ; Per-client bytes per second rates for the various throttle categories.
    ; These are default values that will be overridden by clients. These
    ; defaults are approximately equivalent to the throttles set by the Imprudence
    ; viewer when maximum bandwidth is set to 350kbps

    ;resend_default = 6625
    ;land_default = 9125
    ;wind_default = 1750
    ;cloud_default = 1750
    ;task_default = 18500
    ;texture_default = 18500
    ;asset_default = 10500

    ; Configures how ObjectUpdates are aggregated. These numbers
    ; do not literally mean how many updates will be put in each
    ; packet that goes over the wire, as packets are
    ; automatically split on a 1400 byte boundary. These control
    ; the balance between responsiveness of interest list updates
    ; and total throughput. Higher numbers will ensure more full-
    ; sized packets and faster sending of data, but more delay in
    ; updating interest lists
    ;
    ;PrimUpdatesPerCallback = 100

    ; TextureSendLimit determines how many packets will be put on
    ; the outgoing queue each cycle. Like the settings above, this
    ; is a balance between responsiveness to priority updates and
    ; total throughput. Higher numbers will give a better
    ; throughput at the cost of reduced responsiveness to client
    ; priority changes or transfer aborts
    ;
    ;TextureSendLimit = 20

    ; CannibalizeTextureRate allows bandwidth to be moved from the
    ; UDP texture throttle to the task throttle. Since most viewers
    ; use HTTP textures, this provides a means of using what is largely
    ; unused bandwidth in the total throttle. The value is the proportion
    ; of the texture rate to move to the task queue. It must be between
    ; 0.0 (none of the bandwidth is cannibalized) and 0.9 (90% of the
    ; bandwidth is grabbed)
    ;
    ; CannibalizeTextureRate = 0.5

    ; The time to wait before disconecting an unresponsive client.
    ; The time is in seconds. The default is one minute
    ;
    ;AckTimeout = 60

    ; The time to wait before disconecting an unresponsive paused client.
    ; A client can be paused when the file selection dialog is open during file upload.
    ; This gives extra time to find files via the dialog but will still disconnect if
    ; the client crashes or loses its network connection
    ; The time is in seconds. The default is five minutes.
    ;
    ;PausedAckTimeout = 300


[Appearance]
    ; Persist avatar baked textures
    ; Persisting baked textures can speed up login and region border
    ; crossings especially with large numbers of users, though it
    ; will store potentially large numbers of textures in your asset
    ; database
    PersistBakedTextures = false

    ; Control the delay before appearance is sent to other avatars and
    ; saved in the avatar service. Attempts to limit the impact caused
    ; by the very chatty dialog that sets appearance when an avatar
    ; logs in or teleports into a region; values are in seconds
    DelayBeforeAppearanceSave = 5
    DelayBeforeAppearanceSend = 2

    ; If true, avatar appearance information is resent to other avatars in the simulator every 60 seconds.
    ; This may help with some situations where avatars are persistently grey, though it will not help
    ; in other situations (e.g. appearance baking failures where the avatar only appears as a cloud to others).
    ResendAppearanceUpdates = false

    ; Turning this on responds to CachedTexture packets to possibly avoid rebaking the avatar
    ; on every login
    ReuseTextures = true


[Attachments]
    ; Controls the number of milliseconds that are slept per 100 prims rezzed in attachments
    ; Experimental setting to control CPU spiking when avatars with many attachments login/change outfit
    ; or when multiple avatars with medium level attachments login/change outfit simultaneously.
    ; If 0 then no throttling is performed.
    ThrottlePer100PrimsRezzed = 0


[Textures]
    ; If true, textures generated dynamically (i.e. through osSetDynamicTextureData() and similar OSSL functions) are reused where possible
    ; Chiefly, reuse occurs if a texture has already been generated with identical data and settings, and that texture contains no dynamic components
    ; (e.g. images pulled from an external HTTP address).
    ; Reusing previously generated textures results in a much faster update on the viewer but may cause issues if the viewer didn't receive all resolutions of the texture.
    ; Currently, it will also increase asset cache use since temporary dynamic textures are no longer deleted.
    ; Hence, currently considered experimental.
    ; Default is false.
    ReuseDynamicTextures = true

    ; If true, then textures generated dynamically that have a low data size relative to their pixel size are not reused
    ; This is to workaround an apparent LL 3.3.4 and earlier viewer bug where such textures are not redisplayed properly when pulled from the viewer cache.
    ; Only set this to true if you are sure that all the viewers using your simulator will not suffer from this problem.
    ; This setting only has an affect is ReuseDynamicTextures = true
    ; Default is false
    ReuseDynamicLowDataTextures = true


[ODEPhysicsSettings]
    ; ##
    ; ## Physics stats settings ( most ignored by ubOde )
    ;

    ; If collect_stats is enabled, then extra stat information is collected which is accessible via the MonitorModule
    ; (see http://opensimulator.org/wiki/Monitoring_Module for more details).
    collect_stats = false

    ; ##
    ; ## Physics logging settings - logfiles are saved to *.DIF files
    ; ##

    ; default is false
    ;physics_logging = true
    ;; every n simulation iterations, the physics snapshot file is updated
    ;physics_logging_interval = 50
    ;; append to existing physics logfile, or overwrite existing logfiles?
    ;physics_logging_append_existing_logfile = true

    ;##
    ;## World Settings
    ;##

    ; World Step size.
    ; with legacy ODE this value needs to be close to 0.02s
    ; with ubOde this value can be reduced to improve simulation quality with the cost of higher cpu load
    ; you will need to test acording to you needs
    ; choosing a value that is a integer sub multiple of FrameRate reduces some jitter on reported physics FPS
    world_stepsize = 0.015
    ; number of iterations of constrains solver, higher should improve results
    ; up to a point where acumulated math errors eliminate the improvement
    ; more steps may increase CPU load. No real gain in changing
    world_solver_iterations = 10

    ;Spaces level settings. Affects memory consumption vs Collider CPU time for avatar and physical prim
    ; defines spaces partition cells min and max sizes == 2^value
    world_hashspace_level_low = -5
    world_hashSpace_level_high = 12

    meters_in_small_space = 29.9


    ; ##
    ; ## Contact properties. (the stuff that happens when things come in contact with each other)
    ; ##

    ; surface layer around geometries other geometries can sink into before generating a contact
    world_contact_surface_layer = 0.001

    ; Filtering collisions helps keep things stable physics wise, but sometimes
    ; it can be overzealous.  If you notice bouncing, chances are it's that.
    filter_collisions = false

    ; Non Moving Terrain Contact (avatar isn't moving)
    nm_terraincontact_friction = 255.0
    nm_terraincontact_bounce = 0.1
    nm_terraincontact_erp = 0.1025

    ; Moving Terrain Contact (avatar is moving)
    m_terraincontact_friction = 75.0
    m_terraincontact_bounce = 0.05
    m_terrainContact_erp = 0.05025

    ; Moving Avatar to object Contact
    m_avatarobjectcontact_friction = 75.0
    m_avatarobjectcontact_bounce = 0.1

    ; Object to Object Contact and Non-Moving Avatar to object
    objectcontact_friction = 250.0
    objectcontact_bounce = 0.2

    ; ##
    ; ## Avatar Control
    ; ##

    ; PID Controller Settings. These affect the math that causes the avatar to reach the
    ; desired velocity
    ; See http://en.wikipedia.org/wiki/PID_controller

    av_pid_derivative = 2200.0
    av_pid_proportional = 900.0

    ; specifies if the capsule should be tilted (=true; old compatibility mode)
    ; or straight up-and-down (=false; better and more consistent physics behavior)
    av_capsule_tilted = false

    ; Movement.  Smaller is faster.

    ; speed of movement with Always Run off
    av_movement_divisor_walk = 1.4

    ; speed of movement with Always Run on
    av_movement_divisor_run = 0.9

    ; When the avatar flies, it will be moved up by this amount off the ground (in meters)
    minimum_ground_flight_offset = 3.0

    ; Plant avatar.   This reduces the effect of physical contacts with the avatar.
    ; If you have a group of unruly and rude visitors that bump each other, turn this on to make that less attractive.
    ; The avatar still allows a small movement based on the PID settings above.  Stronger PID settings AND this active
    ; will lock the avatar in place
    av_planted = true

    ; No Avatar Avatar Collissions.  This causes avatar to be able to walk through each other as if they're ghosts but still interact with the environment
    av_av_collisions_off = true

    ; ##
    ; ## Object options
    ; ##

    ; amount of ODE steps where object is non moving for ODE to automatically put it to sleep
    body_frames_auto_disable = 20

    ; used to control llMove2Target
    body_pid_derivative = 35
    body_pid_gain = 25

    ; maximum number of contact points to generate per collision
    contacts_per_collision = 80

    ; start throttling the object updates if object comes in contact with 3 or more other objects
    geom_contactpoints_start_throttling = 3

    ; send 1 update for every x updates below when throttled
    geom_updates_before_throttled_update = 15

    ; ##
    ; ## Sculpted Prim settings
    ; ##

    ; Do we want to mesh sculpted prim to collide like they look?
    ; If you are seeing sculpt texture decode problems
    ; (messages such as "Decoded image with unhandled number of components: 0 shortly followed by a physcs exception")
    ; then you might want to try setting this to false.
    mesh_sculpted_prim = false

    ; number^2 non-physical level of detail of the sculpt texture.  32x32 - 1024 verticies
    mesh_lod = 32

    ; number^2 physical level of detail of the sculpt texture.  16x16 - 256 verticies
    mesh_physical_lod = 16

    ; ##
    ; ## additional meshing options
    ; ##

    ; Physics needs to create internal meshs (or convert the object meshs or scultps)
    ; for all prims except simple boxes and spheres.

    ; collisions of small objects againts larger ones can have a increased CPU load cost
    ; so this are represented by a simple BOX
    ; if all their scale dimensions are lower or equal to this option. Default is 0.1m
    ; (ubOde only)
    ; MinSizeToMeshmerize = 0.1


[BulletSim]
    ; There are two bullet physics libraries, bulletunmanaged is the default and is a
    ;   native c++ dll bulletxna is a managed C# dll.  They have comparible functionality
    ;   but the c++ one is much faster.
    ;BulletEngine = "bulletunmanaged"
    BulletEngine = "bulletxna"

    ; BulletSim can run on its own thread independent of the simulator's heartbeat
    ;   thread. Enabling this will not let the physics engine slow down avatar movement, etc.
    UseSeparatePhysicsThread = true

    ; Terrain implementation can use either Bullet's heightField or BulletSim can build
    ;   a mesh. 0=heightField, 1=mesh
    TerrainImplementation = 0
    ; For mesh terrain, the detail of the created mesh. '1' gives 256x256 (heightfield
    ;   resolution). '2' gives 512x512. Etc. Cannot be larger than '4'. Higher
    ;   magnifications use lots of memory.
    TerrainMeshMagnification = 1

    ; Should avatars collide with each other?
    AvatarToAvatarCollisionsByDefault = false

    ; Default linkset implmentation
    ; 'Constraint' uses physics constraints to hold linkset together. 'Compound'
    ;    builds a compound shape from the children shapes to create a single physical
    ;    shape. 'Compound' uses a lot less CPU time.
    LinkImplementation = 1      ; 0=constraint, 1=compound

    ; If 'true', offset a linkset's origin based on mass of linkset parts.
    LinksetOffsetCenterOfMass = false

    ; If 'true', turn scuplties into meshes
    MeshSculptedPrim = false

    ; If 'true', force simple prims (box and sphere) to be meshed
    ; If 'false', the Bullet native special case shape is used for square rectangles
    ;   and even dimensioned spheres.
    ForceSimplePrimMeshing = true

    ; If 'true', when creating meshes, remove all triangles that have two equal vertexes.
    ;   Happens often in sculpties. If turned off, there will be some doorways
    ;   that cannot be walked through.
    ShouldRemoveZeroWidthTriangles = true

    ; If 'true', use convex hull definition in mesh asset if present.
    ShouldUseAssetHulls = true

    ; If there are thousands of physical objects, these maximums should be increased.
    MaxCollisionsPerFrame = 2048
    MaxUpdatesPerFrame = 8192

    ; Detailed physics debug logging. Very verbose.
    PhysicsLoggingEnabled = False
    PhysicsLoggingDir = "."
    VehicleLoggingEnabled = False


[Sun]
    ; send a Sun update every update_interval # of frames.  A lower number will
    ; make for smoother sun transition at the cost of network
    ;update_interval = 100


[Wind]
    ; How often should wind be updated, as a function of world frames.  Approximately 50 frames a second
    wind_update_rate = 150

    ; The Default Wind Plugin to load
    wind_plugin = SimpleRandomWind


[Cloud]
    ; update interval for the cloud cover data returned by llCloud().
    ; default is 1000
    cloud_update_rate = 1000


[Trees]
    ; active_trees allows module to change its trees in time.
    ; some will be deleted, others created and rest may grow
    ; default is false. You can change it with console command tree active true | false later
    active_trees = false
    ; the trees change execution time rate (in ms)
    update_rate = 1000

    ; allow the trees to grow.
    ; DANGER
    ; this option causes high network use on the order of
    ; NumberOfTrees * NumberAvatars * 1000 / update_rate udp packets per second
    allowGrow = false


[LL-Functions]
    ; Maximum number of llListen events we allow over the entire region.
    ; Set this to 0 to have no limit imposed
    max_listens_per_region = 0

    ; Maximum number of llListen events we allow per script
    ; Set this to 0 to have no limit imposed.
    max_listens_per_script = 0

    ; Maximum number of external urls that scripts can set up in this simulator (e.g. via llRequestURL())
    max_external_urls_per_simulator = 256

    ; Use size boxes instead of meshed prims, sculpts and mesh when calculating bounding boxes.
    ; Speeds up calculations but can make them inaccurate, in some cases very inaccurate.
    UseSimpleBoxesInGetBoundingBox = true

    ; Use llCastRay V3 if true.
    ; Implements llCastRay similar but not identical to Second Life.
    ; See http://wiki.secondlife.com/wiki/LlCastRay .
    ; NEW
    ; Meshes prims for good accuracy in ray hit detection,
    ; handling basic and tortured prims, sculpts and meshes.
    ; Uses ellipsoid, correctly sized avatar capsules.
    ; Handles complex terrain, multi-prim objects and seated avatars.
    ; Implements throttling and the status codes
    ; RCERR_UNKNOWN and RCERR_CAST_TIME_EXCEEDED,
    ; so LSL scripts need to handle these responses and RCERR_SIM_PERF_LOW.
    ; WARNING
    ; Can be faster on some servers and scenes, but slower on others,
    ; compared to previous version of llCastRay in OpenSimulator.
    ; Is in most cases considerably slower than llCastRay in Second Life.
    ; Generates geometry meshes and can therefore use much system resources.
    UseLlCastRayV3 = true

    ; Accepted calculation precision error in calculations in llCastRay V3
    FloatToleranceInLlCastRay = 0.00001

    ; Accepted distance difference between duplicate hits in llCastRay V3
    FloatTolerance2InLlCastRay = 0.001

    ; Detail level when rendering prims in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    PrimDetailLevelInLlCastRay = 1

    ; Detail level when rendering sculpts in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    SculptDetailLevelInLlCastRay = 1

    ; Detail level when rendering meshes in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    MeshDetailLevelInLlCastRay = 3

    ; Detail level when rendering avatar capsules in llCastRay V3
    ; 0 = Low, 1 = Medium, 2 = High, 3 = Highest, higer level gives better accuracy but slower call
    AvatarDetailLevelInLlCastRay = 1

    ; Maximum number of returned hits from llCastRay V3
    MaxHitsInLlCastRay = 16

    ; Maximum number of returned hits per prim from llCastRay V3
    MaxHitsPerPrimInLlCastRay = 16

    ; Maximum number of returned hits per object from llCastRay V3
    MaxHitsPerObjectInLlCastRay = 16

    ; Report ray intersections with surfaces on exits from a prim as hits in llCastRay V3 if true
    DetectExitHitsInLlCastRay = false

    ; Detect attachments in llCastRay V3 if true
    DoAttachmentsInLlCastRay = false

    ; Throttle period length in ms before which all old llCastRay use is discarded in llCastRay V3
    ; The sum of AvailableTimeInMsPerRegionInLlCastRay and all AvailableTimeInMsPerAvatarInLlCastRay should not exceed this
    ThrottleTimeInMsInLlCastRay = 200

    ; Available time in ms for llCastRay per throttle period and 65536 m2 land area in llCastRay V3
    AvailableTimeInMsPerRegionInLlCastRay = 40

    ; Available time in ms for llCastRay per throttle period and avatar when script in attachment or vehicle in llCastRay V3
    AvailableTimeInMsPerAvatarInLlCastRay = 10

    ; Required available time in ms left to perform a new llCastRay in llCastRay V3
    RequiredAvailableTimeInMsInLlCastRay = 2

    ; Maximum available time in ms possible in llCastRay V3, not to get too high values with varregions
    MaximumAvailableTimeInMsInLlCastRay = 40

    ; Use cached meshes in llCastRay V3 if true
    ; Improves performance but uses more memory
    UseMeshCacheInLlCastRay = true


[XEngine]
    ; How many threads to keep alive even if nothing is happening
    MinThreads = 2

    ; How many threads to start at maximum load
    MaxThreads = 100

    ; Time a thread must be idle (in seconds) before it dies
    IdleTimeout = 60

    ; Thread priority ("Lowest", "BelowNormal", "Normal", "AboveNormal", "Highest")
    Priority = "Normal"

    ; Maximum number of events to queue for a script (excluding timers)
    MaxScriptEventQueue = 3000

    ; Stack size per thread created
    ThreadStackSize = 262144

    ; Set this to true to load each script into a separate
    ; AppDomain. Setting this to false will load all script assemblies into the
    ; current AppDomain, which will reduce the initial per-script memory overhead,
    ; but deleted scripts stay inactive using memory.
    ; Significantly improving script loading times.
    ; However, setting this to false will also prevent script DLLs from being unloaded from memory if the script is deleted.
    ; This may cause an OutOfMemory problem over time when avatars with scripted attachments move in and out of the region.
    ; This may only be a problem if regions stay alive for a long time with lots of scripts added or edited.
    ; At this time some mono versions seem to have problems with the true option,
    ; so default is now false until a fix is found, to simply life of less technical skilled users.
    AppDomainLoading = false

    ; Controls whether previously compiled scripts DLLs are deleted on sim restart.
    ; If you set this to false then startup will be considerably faster since scripts won't need to be recompiled.
    ; It should be true on first run after updating opensim binary version
    ; after first run you can change to false.
    ; You can also set it to false and delete the script DLLs by hand
    ; This does not delete cached scripts state.
    DeleteScriptsOnStartup = false

    ; CompactMemOnLoad
    ; forces calls to memory garbage collector before loading each script DLL during region startup.
    ; Peak memory usage is reduced and region starts with a more compacted memory allocation.
    ; But this costs a lot of time, so region load will take a lot longer.
    ; it is more usefull if there are no previously compiled scripts DLLs (or DeleteScriptsOnStartup = true)
    CompactMemOnLoad = true

    ; Controls whether scripts are stopped by aborting their threads externally (abort)
    ; or by co-operative checks inserted by OpenSimulator into compiled script (co-op).
    ; co-op will be more stable as aborting threads can cause instability.
    ; abort was the default option in OpenSimulator 0.8 and before.
    ; If this setting is changed between co-op and abort, then existing scripts will automatically be recompiled if necessary.
    ; However, the setting change will not take affect until the next time you restart the simulator.
    ; Setting changes will not affect state information stored for scripts.
    ScriptStopStrategy = abort

    ; Rate to poll for asynchronous command replies (ms)
    ; currently unused
    ;AsyncLLCommandLoopms = 50

    ; Compile debug info (line numbers) into the script assemblies
    CompileWithDebugInformation = false

    ; Interval (s) between background save of script states
    SaveInterval = 120

    ; Interval (s) between maintenance runs (0 = disable)
    MaintenanceInterval = 10

    ; Amount of time in milliseconds we will wait for an event to completely normally when a script stop is requested
    ; before aborting the thread (such as when an object containing scripts is taken into inventory).
    WaitForEventCompletionOnScriptStop = 1000

    ; Minimum settable timer interval. Any timer setting less than this is
    ; rounded up to this minimum interval.
    MinTimerInterval = 0.1

    ; Sensor settings
    SensorMaxRange = 96.0
    SensorMaxResults = 64


[Groups]
    ; Groups data is cached for this number of seconds before another request is made to the groups service
    ; Set to 0 to disable the cache.
    ; Default is 30 seconds
    GroupsCacheTimeout = 30


[PacketPool]
    ;RecyclePackets = true
    ;RecycleDataBlocks = true

    ; If true, then the basic packet objects used to receive data are also recycled, not just the LLUDP packets.
    ; This reduces data churn
    RecycleBaseUDPPackets = true


[InterestManagement]
    ; This section controls how state updates are prioritized for each client
    ; Valid values are BestAvatarResponsiveness, Time, Distance,
    ; SimpleAngularDistance, and FrontBack
    UpdatePrioritizationScheme = BestAvatarResponsiveness
    ReprioritizationEnabled = true
    ReprioritizationInterval = 2000.0
    RootReprioritizationDistance = 10.0
    ChildReprioritizationDistance = 20.0

    ; TEST OPTION KEEP AS FALSE
    ; if true, don't send object updates if outside view range
    ObjectsCullingByDistance = false

    ; If n > 1, only every n UDP terse updates will be sent to observers of an avatar that are in the same region
    ; Updates will always be sent to the avatar that the update addresses and if av velocity is effectively zero (to prevent drift due to missing updates).
    ; n > 1 will reduce UDP traffic but will lead to laggier movement observed in other avatars.
    RootTerseUpdatePeriod = 0

    ; If n > 1, only every n UDP terse updates will be sent to observers of an avatar that are in another region
    ; n > 1 will reduce UDP traffic but may lead to laggier movement observed in other avatars, though values up to 4 may not generate a noticeable effect.
    ChildTerseUpdatePeriod = 0

    ; Send an update to clients if the difference from the last sent avatar position is greater than this tolerance
    RootPositionUpdateTolerance = 0.05

    ; Send an update to clients if the euclidian difference from the last sent avatar rotation is greater than this tolerance
    RootRotationUpdateTolerance = 0.1

    ; Send an update to clients if the difference from the last sent avatar velocity is greater than this tolerance
    RootVelocityUpdateTolerance = 0.001


[Statistics]
    ; NumberOfFrames is used in a moving average calculation, where NumberOfFrames is the number of frames
    ; to include in the averaging calculations
    NumberOfFrames=10


[Terrain]
    ; If 'true' each avatar is only sent terrain patches within their view distance
    ; This also changes the region terrain loading from 'lawn mower' to ordered around
    ;     the avatar outward.
    SendTerrainUpdatesByViewDistance = True


[LandManagement]
    ; When editing terrain or objects, parcel layer info is updated in the viewer.
    ;   This can be expensive for large regions. If this variable is 'true', only the
    ;   parcel layer data around the area of interest is sent. The parcel layer info
    ;   is sent for 'ParcelLayerViewDistance' around the interest point.
    ; If 'ParcelLayerViewDistance' is >= 128, the operation for legacy sized regions
    ;   will be what it has always been (send the whole region's parcel layer info).
    ; Other parcel updates (login, changing parcel ownership, ...) will still send
    ;   whole region.
    LimitParcelLayerUpdateDistance = true
    ParcelLayerViewDistance = 128


;; If you are using a simian grid frontend you can enable
;; this module to upload tile images for the mapping fn
;;
[SimianGridMaptiles]
    RefreshTime = 3600


;;
;; These are defaults that are overwritten below in [Architecture].
;; These defaults allow OpenSim to work out of the box with
;; zero configuration
;;
[AssetService]
    ; Disable this to prevent the default asset set from being inserted into the
    ; asset store each time the region starts
    AssetLoaderEnabled = false


[AutoBackupModule]
    ;; default is module is disabled at the top level
    AutoBackupModuleEnabled = false


[ServiceThrottle]
    ;; Default time interval (in ms) for the throttle service thread to wake up
    Interval = 5000


[Materials]
     MaxMaterialsPerTransaction = 50