# G Consensus order function
The code sample below shows the implementation of the consensus order function.
```
1 bool o r d e r l e s s ( const Event a , const Event b ) @sa fe {
2 o r d e r c o m p a r e i t e r a t i o n c o u n t ++;
3 i f ( a . r e c e i v e d o r d e r i s b . r e c e i v e d o r d e r ) {
4 i f ( a . mother && b . mother ) {
5 return o r d e r l e s s ( a . mother , b . mother ) ;
6 }
7 i f ( a . f a t h e r && b . f a t h e r ) {
8 return o r d e r l e s s ( a . f a t h e r , b . f a t h e r ) ;
9 }
10 i f ( ! a . f a t h e r ) {
11 return f a l s e ;
12 }
13 i f ( b . f a t h e r ) {
14 return true ;
15 }
16
17 bool r a r e l e s s ( B u f f e r a , B u f f e r b ) {
18 const ab = hashgraph . hi r p c . ne t . c alcH a sh ( a ˜ b ) ;
19 const ba = hashgraph . hi r p c . ne t . c alcH a sh ( b ˜ a ) ;
20 const A = ( BitMask ( ab ) . count ) ;
21 const B = ( BitMask ( ba ) . count ) ;
22 i f (A i s B) {
23 return r a r e l e s s ( ab , ba ) ;
24 }
25 return A < B;
26 }
27
28 return r a r e l e s s ( a . f i n g e r p r i n t , b . f i n g e r p r i n t ) ;
29 }
30 return a . r e c e i v e d o r d e r < b . r e c e i v e d o r d e r ;
}