package Ġno . nav . hel se . person . et ter level se Ċ Ċ import Ġno . nav . hel se . hen del ser . Per i ode Ċ import Ġno . nav . hel se . hen del ser . til Ċ import Ġno . nav . hel se . jan uar Ċ import Ġno . nav . hel se . person . B ok st av Ċ import Ġno . nav . hel se . person . Led d Ċ import Ġno . nav . hel se . person . Led d . Companion . le dd Ċ import Ġno . nav . hel se . person . Par agr af Ċ import Ġno . nav . hel se . person . P unkt um Ċ import Ġno . nav . hel se . person . et ter level se . Mask in ell J ur ist .* Ċ import Ġno . nav . hel se . person . et ter level se . Sub sums jon . Utf all . V IL K AR _ OP PF Y LT Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . time . LocalDate Ċ Ċ internal Ġclass ĠGr upper bar Sub sums jon Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġobserv at Ã¸ r Ġget () Ġ= ĠSub sums jon Ob serv at Ã¸ r () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv ur der inger : ĠList < Sub sums jon > ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠbeforeEach () Ġ{ ĊĠĠĠĠĠĠĠ Ġv ur der inger Ġ= Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` V ur der inger ĠpÃ¥ Ġd agn iv Ã¥ Ġb lir Ġsl Ã¥ tt Ġsam men `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar . plus Days ( it . to Long ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 1 0 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 2 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġ- Ġm ots att Ġre k ke f Ã¸ l ge `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 2 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` v ur der inger Ġsom Ġik ke Ġlig ger Ġin nt il Ġh ver andre Ġb lir Ġgrup pert Ġsom Ġseparate Ġperiod er `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 3 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 1 . jan uar , Ġ 3 . jan uar Ġtil Ġ 3 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` v ur der inger Ġsom Ġik ke Ġlig ger Ġin nt il Ġh ver andre Ġb lir Ġgrup pert Ġsom Ġseparate Ġperiod er Ġ- Ġm ots att Ġre k ke f Ã¸ l ge `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 3 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 1 . jan uar , Ġ 3 . jan uar Ġtil Ġ 3 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġin kl us iv Ġhe lg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 5 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 8 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 5 . jan uar Ġtil Ġ 8 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġin ni Ġhe lg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 5 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 7 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 5 . jan uar Ġtil Ġ 7 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġin ni Ġhe lg Ġ- Ġe ks ist eren de Ġsl utter Ġi Ġhe lg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 6 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 8 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 6 . jan uar Ġtil Ġ 8 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġin kl us iv Ġhe lg Ġ- Ġm ots att Ġre k ke f Ã¸ l ge `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 8 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 5 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 5 . jan uar Ġtil Ġ 8 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġoverlap per `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 3 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 3 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġi Ġhe lg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 6 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 7 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 6 . jan uar Ġtil Ġ 7 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġi Ġhe lg Ġ- Ġm ots att Ġre k ke f Ã¸ l ge `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 7 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 6 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 6 . jan uar Ġtil Ġ 7 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġbare Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġsom Ġkom mer ĠOut - Of - Order `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 4 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 2 . jan uar , Ġ 4 . jan uar Ġtil Ġ 4 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġalle Ġv ur der ingers om Ġlig ger Ġin nt il Ġh ver andre Ġse lv Ġom Ġde Ġkom mer ĠOut - Of - Order `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 4 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 3 . jan uar ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 4 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġv ur der inger Ġsom Ġlig ger Ġin nt il Ġh ver andre Ġmed Ġhe lg `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 4 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 3 . jan uar ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger . first (), Ġ 1 . jan uar Ġtil Ġ 4 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġik ke Ġt ing Ġsom Ġhar Ġul ik Ġinput `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar , Ġinput Ġ= Ġmap Of (" key " Ġto Ġ" value ")) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar , Ġinput Ġ= Ġmap Of (" key " Ġto Ġ" other Ġvalue ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 0 ], Ġ 1 . jan uar Ġtil Ġ 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 1 ], Ġ 2 . jan uar Ġtil Ġ 2 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġik ke Ġt ing Ġsom Ġhar Ġul ik Ġinput Ġ- Ġm ots att Ġre k ke f Ã¸ l ge `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar , Ġinput Ġ= Ġmap Of (" key " Ġto Ġ" value ")) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar , Ġinput Ġ= Ġmap Of (" key " Ġto Ġ" other Ġvalue ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 0 ], Ġ 2 . jan uar Ġtil Ġ 2 . jan uar ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 1 ], Ġ 1 . jan uar Ġtil Ġ 1 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġik ke Ġt ing Ġsom Ġhar Ġul ik Ġ Ġoutput `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar , Ġoutput Ġ= Ġmap Of (" key " Ġto Ġ" value ")) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar , Ġoutput Ġ= Ġmap Of (" key " Ġto Ġ" other Ġvalue ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 0 ], Ġ 1 . jan uar Ġtil Ġ 1 . jan uar ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 1 ], Ġ 2 . jan uar Ġtil Ġ 2 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Gr upper er Ġik ke Ġt ing Ġsom Ġhar Ġul ik Ġ Ġoutput Ġ- Ġm ots att Ġre k ke f Ã¸ l ge `() Ġ{ ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 2 . jan uar , Ġoutput Ġ= Ġmap Of (" key " Ġto Ġ" value ")) ĊĠĠĠĠĠĠĠ Ġny V ur der ing ( 1 . jan uar , Ġoutput Ġ= Ġmap Of (" key " Ġto Ġ" other Ġvalue ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġv ur der inger . size ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 0 ], Ġ 2 . jan uar Ġtil Ġ 2 . jan uar ) ĊĠĠĠĠĠĠĠ Ġobserv at Ã¸ r . assert V ur der ing ( v ur der inger [ 1 ], Ġ 1 . jan uar Ġtil Ġ 1 . jan uar ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġny V ur der ing ( dat o : ĠLocalDate , Ġinput : ĠMap < String , ĠAny > Ġ= Ġempty Map (), Ġoutput : ĠMap < String , ĠAny > Ġ= Ġempty Map ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġv ur der inger Ġ= ĠGr upper bar Sub sums jon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdat o Ġ= Ġdat o , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ= Ġinput , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ= Ġoutput , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġutf all Ġ= ĠV IL K AR _ OP PF Y LT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvers jon Ġ= ĠLocalDate . MAX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpar agr af Ġ= ĠPar agr af . PAR AG R AF _ 8 _ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġle dd Ġ= Ġ 1 . le dd , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkont ek ster Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ). sam men still ( v ur der inger ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSub sums jon Ob serv at Ã¸ r Ġ: ĠSub sums jon Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġperiod er : ĠMutable List < Per i ode > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġoutput : ĠMap < String , ĠAny > ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Gr upper bar Sub sums jon ( period er : ĠList < Per i ode >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . period er . addAll ( period er ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġassert V ur der ing ( sub sums jon : ĠSub sums jon , Ġvar arg Ġfor vent ede Period er : ĠPer i ode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( sub sums jon Ġis ĠGr upper bar Sub sums jon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub sums jon . accept ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( for vent ede Period er . toList (), Ġthis . period er ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( for vent ede Period er . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f om " Ġto Ġit . start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tom " Ġto Ġit . end Inclusive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġoutput [" period er "]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpre Visit Sub sums jon ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġutf all : ĠSub sums jon . Utf all , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvers jon : ĠLocalDate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpar agr af : ĠPar agr af , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġle dd : ĠLed d ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp unkt um : ĠP unkt um ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb ok st av : ĠB ok st av ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput : ĠMap < String , ĠAny >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput : ĠMap < String , ĠAny >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkont ek ster : ĠMap < String , ĠKont ek st Type > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . output Ġ= Ġoutput ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ