Open-source

tools

for

dynamical

analysis

of

Liley's

mean-field

cortex

model

Mean-field

models

of

the

mammalian

cortex

treat

this

part

of

the

brain

as

a

two-dimensional

excitable

medium.

The

electrical

potentials,

generated

by

the

excitatory

and

inhibitory

neuron

populations,

are

described

by

nonlinear,

coupled,

partial

differential

equations,

that

are

known

to

generate

complicated

spatio-temporal

behaviour.

We

focus

on

the

model

by

Liley

et

al.

(Network:

Comput.

Neural

Syst.

Several

reductions

of

this

model

have

been

studied

in

detail,

but

a

direct

analysis

of

its

spatiotemporal

dynamics

has,

to

the

best

of

our

knowledge,

never

been

attempted

before.

Here,

we

describe

the

implementation

of

implicit

time-stepping

of

the

model

and

the

tangent

linear

model,

and

solving

for

equilibria

and

timeperiodic

solutions,

using

the

open-source

library

PETSc.

By

using

domain

decomposition

for

parallelization,

and

iterative

solving

of

linear

problems,

the

code

is

capable

of

parsing

some

dynamics

of

a

macroscopic

slice

of

cortical

tissue

with

a

sub-millimetre

resolution.

Models

of

cortical

dynamics

come

in

two

main

families:

network

models

and

mean-field

models.

The

former

describe

many

interacting

neurons,

each

with

their

own

dynamical

rules,

while

the

latter

describe

electrical

potentials,

generated

collectively

by

many

neurons,

as

continuous

in

space

and

time.

These

potentials

can

be

thought

of

as

averages

over

a

number

of

macrocolumns,

groups

of

hundreds

of

thousands

of

neurons

in

columnar

structures

at

the

surface

of

the

cortex.

The

reason

to

abandon

the

description

of

individual

neurons

and

pass

to

the

mean-field

limit,

in

analogy

to

the

thermodynamic

limit

in

statistical

physics,

is

twofold.

Firstly,

the

description

and

analysis

of

a

substantial

piece

of

the

cortex

with

a

network

model

is

not

tractable

since

it

would

contain

billions

of

neurons,

and

many

times

more

connections

between

them.

As

demonstrated

by

recent

publications,

such

as

by

Izhikevich

and

Edelman

or

by

the

Blue

Brain

team

progress

in

super

computing

allows

for

the

simulation

of

ever

larger

neuronal

networks,

that

reflect

actual

brain

dynamics.

However,

it

is

hard

to

see

how

the

output

of

such

models

can

be

analysed,

other

than

by

purely

statistical

techniques.

In

contrast,

mean-field

models

can

be

analysed

as

infinite-dimensional

dynamical

systems..

The

second

advantage

of

the

mean-field

approach

is

that

the

electrical

potentials,

which

appears

as

dependent

variables,

are

directly

related

to

the

electroencephalograph

(EEG)

The

EEG

is

usually

measured

with

electrodes

on

the

scalp

or,

in

exceptional

circumstances,

directly

on

the

surface

of

the

brain.

In

either

case,

the

measured

signal

is

not

that

of

individual

neurons,

but

that

of

many

neurons,

spread

out

over

a

few

square

centimetres

or

millimetres.

Thus,

the

way

the

signals

of

individual

neurons

are

smeared

out

by

the

spatial

averaging

of

mean-field

modelling

is

similar

to

the

way

they

are

mixed

up

in

EEG

measurements.

Because

of

the

direct

link

between

the

local

mean

potential

and

the

EEG,

mean-field

models

are

sometimes

called

EEG

models..

The

origin

of

mean-field

modelling

lies

in

the

nineteen

seventies,

when

pioneers

like

Walter

Freeman

Wilson

Cowan

and

Lopes

da

Silva

started

to

model

components

of

the

human

cortex

with

continuous

fields.

Over

the

past

four

decades,

mean-field

models

have

been

used

to

study

a

range

of

open

questions

in

neuroscience,

such

as

the

generation

of

the

alpha

rhythm,

Hz

oscillations

in

the

EEG

(see,

e.g.,

epilepsy

(see,

e.g.,

and

anaesthesia

Also,

they

are

used

in

models

for

sensorimotor

control,

pattern

discrimination

and

target

tracking

Although

mean-field

models

have

been

used

in

all

these

contexts,

little

analysis

has

been

done

on

their

behaviour

as

spatially

extended

dynamical

systems.

In

part,

this

is

due

to

their

staggering

complexity.

The

Liley

model

considered

here,

for

instance,

consists

of

fourteen

coupled

Partial

Differential

Equations

(PDEs)

with

strong

nonlinearities,

imposed

by

coupling

between

the

mean

membrane

potentials

and

the

mean

synaptic

inputs.

The

model

can

be

reduced

to

a

system

of

Ordinary

Differential

Equations

(ODEs)

by

considering

only

spatially

homogeneous

solutions,

and

the

resulting

system

has

been

examined

in

detail

using

numerical

bifurcation

analysis

(see

and

references

therein).

In

order

to

compute

equilibria,

periodic

orbits

and

such

objects

for

the

PDE

model,

we

need

a

flexible,

stable

simulation

code

for

the

model

and

it

linearization

that

can

run

in

parallel

to

scale

up

to

a

domain

size

of

about

cm

the

size

of

a

full-grown

human

cortex.

We

also

need

efficient,

iterative

solvers

for

linear

problems

with

large,

sparse

matrices.

In

this

paper,

we

will

show

that

all

this

can

be

accomplished

in

the

open-source

software

package

PETSc

Our

implementation

consists

of

a

number

of

functions

in

C

that

will

be

available

publicly

The

goal

of

this

computational

work

is

similar

to

that

of

Coombes

et

al.,

who

analysed

"spots":

rotationally

symmetric,

localized

solutions

in

a

model

of

a

single

neuron

population

in

two

dimensions

The

study

of

such

special

solutions

will

help

us

parse

the

spatio-temporal

dynamics

of

mean-field

models.

We

will

attempt

to

compute

periodic

orbits

and

other

special

solutions

in

a

full-fledged,

two-population

mean

field

model

without

imposing

any

spatial

symmetries.

PETSc

provides

a

simple

interface

for

timestepping

in

its

TS

component.

The

basic

code

required

to

set

up

a

TS

is

given

in

Code

With

a

TS

set

up

like

this,

the

timestepping

parameters

are

set

from

command

line

arguments

at

run

time.

For

example,

to

do

implicit

Euler

timestepping

for

ms

with

a

time

step

of

ms,

one

needs

to

provide

the

arguments

-ts

type

beuler

-ts

dt

-ts

final

time

In

this

specific

case,

since

the

final

time

is

not

an

integer

number

of

timesteps,

PETSc

will

step

past

it,

and

interpolate

at

the

desired

time..

In

PETSc,

we

implement

the

timestepping

of

the

variational

equations

as

a

MATSHELL.

A

MATSHELL

allows

users

to

define

their

own

matrix

type.

Within

a

MATSHELL,

one

needs

to

give

a

context

for

storing

the

relevant

data

and

write

functions

for

the

desired

matrix

operation.

For

example,

we

point

the

operation

MATOP

MULT

to

a

function

that

takes

the

initial

state

of

the

variational

system

as

input,

and

outputs

the

result

v(T

at

the

end

of

the

timestepping.

The

context

we

use

for

the

time

stepping

of

the

variational

equations

is

shown

in

Code

The

function

we

provide

for

MATOP

MULT

works

by

first

taking

a

step

of

the

TS,

then

loading

the

Jacobian

computed

from

that

step

and

solving

equation

This

is

repeated

until

the

TS

reaches

its

end.

The

MATSHELL

thus

defined

can

be

used

by

SLEPc

for

the

iterative

computation

of

eigen

pairs.

In

particular,

we

will

use

this

approach

to

compute

the

Floquet

multipliers

of

periodic

orbits..

Setting

up

and

using

a

nonlinear

solver

within

PETSc

is

straightforward,

as

shown

in

Code

The

default

algorithm

used

by

SNES

is

Newton's

method

with

line

search..

Code

Code

snippet

for

solving

for

equilibria.

Vectors

r

and

u

are

preallocated,

with

u

being

the

initial

approximation,

and

J

a

preallocated

matrix

for

the

Jacobian..

The

problem

of

creating

a

bordered

matrix

system

in

a

distributed

environment

is

not

a

trivial

one.

The

specific

case

that

we

have

is

one

vector,

u,

that

is

sparsely

connected

and

distributed

among

processors,

and

one

parameter,

T

that

must

exist

and

be

synchronized

across

all

processors..

PETSc's

DM

module

has

some

recently

introduced

functionality

that

allows

us

to

handle

this

in

a

straightforward

way,

letting

us

make

use

of

the

DMDA

already

used

in

the

other

types

of

calculations..

DMRedundant

can

be

used

for

the

T

component

of

our

extended

system,

as

it

has

the

precise

behaviour

that

we

require.

Next,

we

use

a

DMComposite

to

join

together

the

DMDA

of

the

grid

with

the

DMRedundant

of

the

period.

We

can

then

derive

vectors

from

this

DMComposite,

and

use

these

vectors

for

PETSc's

iterative

linear

solvers.

PETSc

code

that

illustrates

this

idea

is

shown

in

Code

The

matrix

multiplication

is

done

through

a

MATSHELL,

and

the

struct

that

holds

the

relevant

data

is

found

in

Code

Code

Additional

DM

pieces

for

extended

vectors

as

in

equation

assuming

that

da

is

the

DM

associated

with

the

grid

structure.

The

numerical

arguments

in

DMRedundantCreate

represent

the

processor

where

the

redundant

entries

live

(in

global

vectors),

and

the

number

of

redundant

entries

respectively..

DM

packer,

redT;

DMCompositeCreate(PETSC_COMM_WORLD,&packer);

DMRedundantCreate(PETSC_COMM_WORLD,0,1,&redT);

DMCompositeAddDM(packer,da);

DMCompositeAddDM(packer,redT);.

Code

For

finding

periodic

solution,

we

need

a

method

for

integrating

the

variational

equations

(the

MATSHELL

discussed

in

section

additional

DMs,

and

space

for

holding

f

evaluated

at

the

state

at

the

end

of

the

integration

typedef

struct

Mat

*linTimeIntegration;

DM

packer,redT;

Vec

PeriodFindCtx;

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Effects of Passing Lanes on Highway Traffic Flow In this paper, the effects of passing lanes on traffic flow on a single-lane highway are investigated based on a cellular-automaton (CA) model proposed by Lee et al. (Phys. Rev. Lett. 92, 238702 (2004)) with periodic boundary conditions. A new driving strategy for the diverging and interacting processes are proposed by considering dual-time-headways (an interaction headway and a safe headway) as the criteria for a vehicle to select a lane or change lane. The proposed dual-headway rule has a clear physical sense and can be calibrated in the real world. We can see that (i) At low-(or high-) density, there are no obvious increases of flux due to very weak (or very strong) interactions between vehicles. However, flux has an obvious increase at intermediate-density regions with the increase of the length of a passing lane; (ii) The space-time patterns before a passing lane are different from that after a passing lane, which is caused from vehicular reconfigurations on a passing zone; (iii) Passing lanes can merge several narrow jams into one or few wide jams when increasing the length of passing lanes; (iv) If vehicles are allowed to travel with even higher speed, traffic can be further improved. A variety of microscopic and macroscopic models (e.g., in Refs. 1, 2, 3, 4, 5, 6, 7, 8 ) have been presented for modelling highway traffic and city traffic 3,? in recent years. Among them, cellular automata (CA) traffic models have received much attention as CA are dynamical systems, in which space, time, and variables are discrete 9 and can be used for large-scale real-time traffic simulations 10 . In order to model traffic flow realistically, single-lane and multi-lane CA models, e.g., in Refs. 11, 12, 13, 14, 15, 16, 17, 18, 19, 22 , have been developed. Unfortunately, multilane highways are not always available in countries such as Australia, Finland, New Zealand, Ireland, Japan and Sweden due to financial and/or geographic reasons. As a consequence, passing lanes have been constructed as an alternative traffic facility for the improvement of traffic conditions on single-lane highways.. In a single-lane highway system, overtaking using an opposite lane is sometimes forbidden due to geographic and/or safety reasons. A passing lane provides an overtaking opportunity for fast vehicles in a single-lane traffic system. This kind of traffic system can be viewed as a combination of single-and two-lane systems (see Fig. 1 ). When vehicles approach a passing zone (where a passing lane is facilitated), fast vehicles can overtake slow vehicles in front and thus escape from platoons. A platoon is a number of vehicles travelling together as a group, either voluntarily or involuntarily because of geometrics of roads, speed differences of vehicles, signal control or other factors.. In general, traffic flow going through a passing zone (see Fig. 1 ) involves three processes: the diverging process (one traffic flow diverging into two flows), interacting process (interacting between the two flows), and merging process (the two flows merging into one). The process when traffic flow on a single-lane highway diverges onto two lanes (diverging process) has some similarity to an off-ramp system. Investigation on off-ramp systems can be found in Refs. 20, 21 . However, the diverging process and an off-ramp system are different in nature since in an off-ramp system, vehicles on the off-ramp do not interact (e.g., lane change) with that on the main lane as they have different driving directions, i.e., an off-ramp leads to an exit. Also, when vehicles leave a passing zone, they are merged into a single-lane highway. We can see some similarity between the merging process at the end of a passing zone and the merging process in an on-ramp system. However, the yield rules are different (the yield rule in the merging process can be found in Section 3). In the passing zone, all vehicles should not use the passing lane, unless it is necessary for passing. This rule will be used in Section 3.. Individual vehicles that pass through a passing zone may be involved in the processes of lane selecting, overtaking (lane changing) and merging. Thus, traffic flow dynamics in a passing zone are more complicated than a simple diverging process in an off-ramp system or a merging process in an on-ramp system. Therefore, we propose a new driving strategy for the diverging and interacting processes, which will consider two time headways (an interaction headway and safe headway) as the criteria for lane-changing and lane-selecting.. In this paper, we investigate the effects of passing lanes on traffic flow by finding the properties of traffic flow using some standard techniques, such as the fundamental diagram, space-time patterns, space-speed patterns and mean speed patterns. Simulation results have shown that the length of a passing lane, density, and the maximum speed on passing lanes can affect traffic flow.. This paper is organized as follows. In Section 2, CA traffic models on single-lane and two-lane highways are briefly reviewed. In Section 3, three processes: diverging, interacting and merging are described. Also, the corresponding driving strategies, based on the interaction headway and safe headway, are presented, which suggests that time headways are more appropriate for the description of diverging and interacting processes, rather than distances as used in most existing multi-lane CA models. In Section 4, the simulation results are discussed and some findings are reported. Finally, a summary is given in Section 5. In real traffic, passing lanes are used to provide overtaking opportunities for fast vehicles where two-lane highways are not available because of financial and/or geographical reasons and overtaking using an opposite-direction lane in a single-lane highway is often forbidden. Traffic flow going through a passing zone involves three processes: the diverging process, interacting and merging process. While a vehicle passes through a passing zone, it may be involved in the processes of lane selecting, The effects of passing lanes on traffic are studied based on a Cellular-automaton (CA) model proposed by Lee et al. 37 under periodic boundary conditions. The focus is on using dual-time-headways (interaction headway and safe headway) to describe interaction between vehicles in the diverging and lane-changing processes. The dual-headway rule has a clear physical sense and can be further calibrated in the real world. Lane-changing rules are asymmetric since two types of vehicles (e.g., cars and trucks) are adopted and slow vehicles (trucks) are assumed to drive only on a main lane.. Numerical results have shown that the effects of passing lanes are related to the lengths of passing lanes, density, and the maximum passing speed. In the low-(or high-) density region, there are no obvious increases of flux due to very weak (or very strong) interactions between vehicles, regardless of the length of a passing lane. In the intermediate-density region, the flux of traffic flow has an obvious increase with the increase of the length of a passing lane. Additionally, if fast vehicles are allowed to drive their vehicles with a higher speed on a passing lane, traffic can be further improved, particularly at intermediate density. The space-time patterns are changed after vehicles go through a passing lane, compared to that before passing. In the real world, traffic flow is normally a mix of many kinds of vehicles, e.g., cars, buses, vans and trucks. These vehicles with different dimensional and dynamic properties form heterogeneous traffic flow. Empirical observations and simulation results have shown that: (i) Slow vehicles dominate heterogeneous traffic flow and can lead to platoon formations at low densities in single-lane traffic 23, 24, 25, 26, 27 ; and (ii) The maximal flux decreases when increasing the number of long vehicles 28 . Treiber and Helbing 29 suggest that heterogeneous traffic flow can be one of the reasons for widely scattered data points over a two-dimensional plane in congested states. They reported that their simulation results were in good agreement with Dutch highway data.. Dynamic properties of heterogeneous single-lane highway traffic flow have been further studied by Wang et al. 31 , under the framework of three phase traffic flow theory 32 . The Cross Correlation Function (CCF) analysis has shown that heterogeneous flow has almost the same strong coupling as homogeneous flow 31 . In other words, flux and density are highly correlated in free flow and jams, while they are almost independent in synchronized flow.. When single-lane traffic is extended to two-or multi-lane traffic, more attention has been attracted to the study of lane-changing behaviour. Based on symmetric (all lanes can be used for vehicles to overtake) and asymmetric (only specified lanes can be used to overtake) lane-changing rules, a great number of two-or multi-lane CA models have been proposed. Many interesting phenomena have been reported and/or reproduced. For instance, lane-usage inversion was investigated in Ref. 33 and the effects of lane changing with two types of vehicles are studied in Ref. 34 . Density inversion that occurred below the maximum flow density, is reproduced in Ref. 26 . Knospe et al. 27 proposed a new two-lane model which takes the anticipation effects (i.e., drivers observe their predecessors' speeds in following time steps) into account. Moussa In this paper, we use the MR (mechanical restriction) model, proposed by Lee et al. 37 , to simulate traffic flow at a passing zone with periodic boundary conditions. The major assumption of the MR model is that a following vehicle should always prepare for the worst case, namely, the preceding one may brake suddenly at any time step. Based on this assumption, mechanical restriction (limited deceleration capability) and human overreaction (a driver's behaviour may be biased according to the local traffic condition) are used to explain congested traffic states. Their model can satisfactorily reproduce three different traffic phases, i.e., free flow, synchronized flow, and wide moving jams and the transition from synchronized flow to jams. In a passing zone, traffic flow may involve three processes: diverging, interacting (lane-changing), and merging. The diverging process corresponds to vehicles entering a passing zone from a single-lane zone. The interacting process describes lane-changing behaviour in a passing zone. The merging process corresponds to vehicles exiting from a passing zone.

O O B I O B I I O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O