import threading;
import queue;
import time;
import random;

#------------------------------------------------------------------------------#

zahlDerPhilos=9;
philoRange=range(zahlDerPhilos); # 0 .. 8
maxEssenszeit=5;

#------------------------------------------------------------------------------#

class EssStaebchenSteuerung(object):
   
   def __init__(self):     
       self.StaebchenLock=threading.Lock();
   # end def

# end class

#------------------------------------------------------------------------------#

class TischProtokoll(object):
   def __init__(self,maxPhilos):
       self.tischProtokollLock=threading.Semaphore(maxPhilos);

   def nehmeTeil(self):
       self.tischProtokollLock.acquire();
       
   def nehmeAuszeit(self):
       self.tischProtokollLock.release();
# end class

#------------------------------------------------------------------------------#

def statusEssen(id,essenszeit=1):
   ausgabenWarteschlange.put(dauerStr(sZ)+'| P'+str(id)+' |    | ESSEN' );
   time.sleep(essenszeit);
# end def

def statusDenken(id,denkzeit=1):
   ausgabenWarteschlange.put(dauerStr(sZ)+'| P'+str(id)+' |    | DENKEN' );
   time.sleep(denkzeit);
# end def

#------------------------------------------------------------------------------#

class Philos(threading.Thread):
   def __init__(self,idNb,dZ=0,eZ=0):
       threading.Thread.__init__(self);
       self.Rundenzahl=0;
       self.DenkZeit=dZ;
       self.EssensZeit=eZ;
       self.MeineId=idNb+1; # 1 .. 9
       self.EssStaebchen1=idNb; # 0 .. 8
       self.EssStaebchen2=(idNb+1)%zahlDerPhilos;
       self.statusAcquire1=False;
       self.statusAcquire2=False;
       self.neuStart=False;
       self.statusNehmeTeil=False;
   # end def

   def run(self):
       warteZeit=3.5; # 3.5
       # random.seed();
       
       statusDenken(self.MeineId);
       
       while (self.EssensZeit<maxEssenszeit):
           self.Rundenzahl+=1;

           info1='P'+str(self.MeineId)+' | E'+str(self.EssStaebchen1);
           info2='P'+str(self.MeineId)+' | E'+str(self.EssStaebchen2);
           
           # Anfordern
           unserTisch.nehmeTeil();
           self.statusNehmeTeil=True;

           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info1
                                     +' | Eßstäbchen angefordert');
           
           self.statusAcquire1=True;
           statusAcquire=essStaebchen[self.EssStaebchen1].StaebchenLock.acquire(timeout=warteZeit);

           if not statusAcquire:
               self.statusAcquire1=False;
               ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                         +info1
                                         +' | Eßstäbchen NICHT erhalten - AUSSTIEG ###');
               self.neuStart=True;
               break;
           # end if
           
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info1
                                     +' | Eßstäbchen erhalten');

           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info2
                                     +' | Eßstäbchen angefordert');            

           self.statusAcquire2=True;
           statusAcquire=essStaebchen[self.EssStaebchen2].StaebchenLock.acquire(timeout=warteZeit);

           if not statusAcquire:
               self.statusAcquire2=False;
               ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                         +info2
                                         +' | Eßstäbchen NICHT erhalten - AUSSTIEG ###');
               self.neuStart=True;
               break;
           # end if
           
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info2
                                     +' | Eßstäbchen erhalten');

           # Essen
           essensZeit=random.uniform(0.85,1.15);
           self.EssensZeit+=essensZeit;
           statusEssen(self.MeineId,essensZeit);

           # Test
           numAusstieg=random.uniform(0.0,10.0);
           if 0.0<=numAusstieg<=0.2: # 0.2
               ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                         +'P'+str(self.MeineId)
                                         +' |    | AUSTIEG ###');
               self.neuStart=True;
               break;
           # end if
           
           # Freigeben            
           essStaebchen[self.EssStaebchen1].StaebchenLock.release();
           self.statusAcquire1=False;
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info1
                                     +' | Eßstäbchen abgelegt');
           
           essStaebchen[self.EssStaebchen2].StaebchenLock.release();
           self.statusAcquire2=False;
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info2
                                     +' | Eßstäbchen abgelegt');
           
           unserTisch.nehmeAuszeit();
           self.statusNehmeTeil=False;

           # Denken
           denkZeit=random.uniform(0.85,1.15);
           self.DenkZeit+=denkZeit;
           statusDenken(self.MeineId,denkZeit);
           
       # end while

       if self.statusAcquire1:
           essStaebchen[self.EssStaebchen1].StaebchenLock.release();
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info1
                                     +' | Eßstäbchen am Ende abgelegt');
       # end if
       
       if self.statusAcquire2:
           essStaebchen[self.EssStaebchen2].StaebchenLock.release();
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                                     +info2
                                     +' | Eßstäbchen am Ende abgelegt');
       # end if

       if self.statusNehmeTeil:
           unserTisch.nehmeAuszeit();
           self.statusNehmeTeil=False;
       # end if
       
       ausgabe=(dauerStr(sZ)+'| P'+str(self.MeineId)
                    +' |    | EZ'+fFormat(self.EssensZeit)
                    +'; DZ'+fFormat(self.DenkZeit));
       ausgabenWarteschlange.put(ausgabe);

       if self.neuStart:
           # self.neuStart=False;
           ausgabenWarteschlange.put(dauerStr(sZ)+'| '
                         +'P'+str(self.MeineId)
                         +' |    | NEUSTART §§§');
           neuPhilo=Philos(self.MeineId-1,self.DenkZeit,self.EssensZeit);
           neuePhilos.put(neuPhilo);
           neuPhilo.start();
       #end if
   # end def
# end class

#------------------------------------------------------------------------------#

def fFormat(x):
   return ' {0:.3f} '.format(x);

class AusgabenTasks(threading.Thread):
   def __init__(self):
       threading.Thread.__init__(self);

   def run(self):
       while True:
           ausgabe=ausgabenWarteschlange.get();
           if ausgabe=='0':
               break;
           print(ausgabe);
       # end while
   # end def
# end class

def fFormat4(x):
   return ' {0:8.5f} '.format(x);

def dauerStr(start):
   return fFormat4(time.clock()-start);

#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#

if __name__ == '__main__':
   print('\n# Beginn ...');

#------------------------------------------------------------------------------#

   if True:
       
       essStaebchen=[];
       for ix in philoRange:
           ixStaebchen=EssStaebchenSteuerung();
           essStaebchen.append(ixStaebchen);
       # end for

       unserTisch=TischProtokoll(zahlDerPhilos-1);

       ausgabenWarteschlange=queue.Queue();
       ausgabenTask=AusgabenTasks();
       ausgabenTask.start();

       neuePhilos=queue.Queue();

       sZ=time.clock();

       allePhilos=[];
       for ix in philoRange:
           philo=Philos(ix);
           allePhilos.append(philo);
           philo.start();
       # end for

       for philo in allePhilos:
           philo.join();

       if neuePhilos.qsize() > 0:
           while not neuePhilos.empty():
               philo=neuePhilos.get();
               philo.join();
           # end while
       # end if

       ausgabenWarteschlange.put('0');
       ausgabenTask.join();
   # end if

#------------------------------------------------------------------------------#
   print('# Ende.\n');
# end if main

#------------------------------------------------------------------------------#


##    # Beginn ...
##      0.00067 | P1 |    | DENKEN
##      0.00156 | P2 |    | DENKEN
##      0.00237 | P3 |    | DENKEN
##      0.00287 | P4 |    | DENKEN
##      0.00334 | P5 |    | DENKEN
##      0.00504 | P6 |    | DENKEN
##      0.00559 | P7 |    | DENKEN
##      0.00604 | P8 |    | DENKEN
##      0.00653 | P9 |    | DENKEN
##      1.01425 | P1 | E0 | Eßstäbchen angefordert
##      1.01436 | P1 | E0 | Eßstäbchen erhalten
##      1.01439 | P1 | E1 | Eßstäbchen angefordert
##      1.01443 | P1 | E1 | Eßstäbchen erhalten
##      1.01449 | P1 |    | ESSEN
##      1.01463 | P2 | E1 | Eßstäbchen angefordert
##      1.01483 | P3 | E2 | Eßstäbchen angefordert
##      1.01491 | P3 | E2 | Eßstäbchen erhalten
##      1.01494 | P3 | E3 | Eßstäbchen angefordert
##      1.01498 | P3 | E3 | Eßstäbchen erhalten
##      1.01502 | P3 |    | ESSEN
##      1.01517 | P6 | E5 | Eßstäbchen angefordert
##      1.01525 | P6 | E5 | Eßstäbchen erhalten
##      1.01529 | P6 | E6 | Eßstäbchen angefordert
##      1.01533 | P6 | E6 | Eßstäbchen erhalten
##      1.01537 | P6 |    | ESSEN
##      1.01552 | P7 | E6 | Eßstäbchen angefordert
##      1.01571 | P4 | E3 | Eßstäbchen angefordert
##      1.01590 | P5 | E4 | Eßstäbchen angefordert
##      1.01598 | P5 | E4 | Eßstäbchen erhalten
##      1.01602 | P5 | E5 | Eßstäbchen angefordert
##      1.01617 | P8 | E7 | Eßstäbchen angefordert
##      1.01625 | P8 | E7 | Eßstäbchen erhalten
##      1.01629 | P8 | E8 | Eßstäbchen angefordert
##      1.01632 | P8 | E8 | Eßstäbchen erhalten
##      1.01636 | P8 |    | ESSEN
##      1.88781 | P8 | E7 | Eßstäbchen abgelegt
##      1.88795 | P8 | E8 | Eßstäbchen abgelegt
##      1.88805 | P8 |    | DENKEN
##      1.88846 | P9 | E8 | Eßstäbchen angefordert
##      1.88855 | P9 | E8 | Eßstäbchen erhalten
##      1.88858 | P9 | E0 | Eßstäbchen angefordert
##      1.96569 | P1 | E0 | Eßstäbchen abgelegt
##      1.96582 | P1 | E1 | Eßstäbchen abgelegt
##      1.96589 | P1 |    | DENKEN
##      1.96594 | P2 | E1 | Eßstäbchen erhalten
##      1.96597 | P2 | E2 | Eßstäbchen angefordert
##      1.96608 | P9 | E0 | Eßstäbchen erhalten
##      1.96613 | P9 |    | ESSEN
##      2.04375 | P6 | E5 | Eßstäbchen abgelegt
##      2.04383 | P6 | E6 | Eßstäbchen abgelegt
##      2.04386 | P6 |    | DENKEN
##      2.04392 | P5 | E5 | Eßstäbchen erhalten
##      2.04397 | P5 |    | ESSEN
##      2.04408 | P3 | E2 | Eßstäbchen abgelegt
##      2.04412 | P3 | E3 | Eßstäbchen abgelegt
##      2.04416 | P3 |    | DENKEN
##      2.04440 | P7 | E6 | Eßstäbchen erhalten
##      2.04446 | P7 | E7 | Eßstäbchen angefordert
##      2.04449 | P7 | E7 | Eßstäbchen erhalten
##      2.04451 | P7 |    | ESSEN
##      2.04454 | P4 | E3 | Eßstäbchen erhalten
##      2.04456 | P4 | E4 | Eßstäbchen angefordert
##      2.04461 | P2 | E2 | Eßstäbchen erhalten
##      2.04463 | P2 |    | ESSEN
##      2.77690 | P8 | E7 | Eßstäbchen angefordert
##      2.90198 | P1 | E0 | Eßstäbchen angefordert
##      2.91744 | P3 | E2 | Eßstäbchen angefordert
##      2.99537 | P5 | E4 | Eßstäbchen abgelegt
##      2.99549 | P5 | E5 | Eßstäbchen abgelegt
##      2.99556 | P5 |    | DENKEN
##      2.99561 | P4 | E4 | Eßstäbchen erhalten
##      2.99565 | P4 |    | ESSEN
##      3.08891 | P9 | E8 | Eßstäbchen abgelegt
##      3.08900 | P9 | E0 | Eßstäbchen abgelegt
##      3.08904 | P9 |    | DENKEN
##      3.08907 | P1 | E0 | Eßstäbchen erhalten
##      3.08909 | P1 | E1 | Eßstäbchen angefordert
##      3.08916 | P6 | E5 | Eßstäbchen angefordert
##      3.08918 | P6 | E5 | Eßstäbchen erhalten
##      3.08920 | P6 | E6 | Eßstäbchen angefordert
##      3.10489 | P2 | E1 | Eßstäbchen abgelegt
##      3.10501 | P2 | E2 | Eßstäbchen abgelegt
##      3.10511 | P2 |    | DENKEN
##      3.10514 | P3 | E2 | Eßstäbchen erhalten
##      3.10516 | P3 | E3 | Eßstäbchen angefordert
##      3.10523 | P1 | E1 | Eßstäbchen erhalten
##      3.10526 | P1 |    | ESSEN
##      3.18252 | P7 | E6 | Eßstäbchen abgelegt
##      3.18262 | P7 | E7 | Eßstäbchen abgelegt
##      3.18265 | P7 |    | DENKEN
##      3.18270 | P6 | E6 | Eßstäbchen erhalten
##      3.18272 | P6 |    | ESSEN
##      3.18290 | P8 | E7 | Eßstäbchen erhalten
##      3.18292 | P8 | E8 | Eßstäbchen angefordert
##      3.18294 | P8 | E8 | Eßstäbchen erhalten
##      3.18296 | P8 |    | ESSEN
##      3.99373 | P9 | E8 | Eßstäbchen angefordert
##      4.04049 | P2 | E1 | Eßstäbchen angefordert
##      4.04063 | P6 | E5 | Eßstäbchen abgelegt
##      4.04067 | P6 | E6 | Eßstäbchen abgelegt
##      4.04073 | P6 |    | DENKEN
##      4.08734 | P5 | E4 | Eßstäbchen angefordert
##      4.10535 | P4 | E3 | Eßstäbchen abgelegt
##      4.10546 | P4 | E4 | Eßstäbchen abgelegt
##      4.10552 | P4 |    | DENKEN
##      4.10557 | P3 | E3 | Eßstäbchen erhalten
##      4.10560 | P3 |    | ESSEN
##      4.10740 | P5 | E4 | Eßstäbchen erhalten
##      4.10748 | P5 | E5 | Eßstäbchen angefordert
##      4.10752 | P5 | E5 | Eßstäbchen erhalten
##      4.10755 | P5 |    | ESSEN
##      4.11873 | P8 | E7 | Eßstäbchen abgelegt
##      4.11882 | P8 | E8 | Eßstäbchen abgelegt
##      4.11887 | P8 |    | DENKEN
##      4.11891 | P9 | E8 | Eßstäbchen erhalten
##      4.11894 | P9 | E0 | Eßstäbchen angefordert
##      4.13402 | P1 | E0 | Eßstäbchen abgelegt
##      4.13411 | P1 | E1 | Eßstäbchen abgelegt
##      4.13414 | P1 |    | DENKEN
##      4.13416 | P2 | E1 | Eßstäbchen erhalten
##      4.13418 | P2 | E2 | Eßstäbchen angefordert
##      4.13433 | P9 | E0 | Eßstäbchen erhalten
##      4.13437 | P9 |    | ESSEN
##      4.22972 | P7 | E6 | Eßstäbchen angefordert
##      4.22983 | P7 | E6 | Eßstäbchen erhalten
##      4.22991 | P7 | E7 | Eßstäbchen angefordert
##      4.22996 | P7 | E7 | Eßstäbchen erhalten
##      4.23000 | P7 |    | ESSEN
##      4.99406 | P5 | E4 | Eßstäbchen abgelegt
##      4.99419 | P5 | E5 | Eßstäbchen abgelegt
##      4.99426 | P5 |    | DENKEN
##      5.00973 | P8 | E7 | Eßstäbchen angefordert
##      5.02521 | P3 | E2 | Eßstäbchen abgelegt
##      5.02531 | P3 | E3 | Eßstäbchen abgelegt
##      5.02537 | P3 |    | DENKEN
##      5.02542 | P2 | E2 | Eßstäbchen erhalten
##      5.02546 | P2 |    | ESSEN
##      5.10355 | P1 | E0 | Eßstäbchen angefordert
##      5.10404 | P6 | E5 | Eßstäbchen angefordert
##      5.10412 | P6 | E5 | Eßstäbchen erhalten
##      5.10416 | P6 | E6 | Eßstäbchen angefordert
##      5.19694 | P4 | E3 | Eßstäbchen angefordert
##      5.19707 | P4 | E3 | Eßstäbchen erhalten
##      5.19711 | P4 | E4 | Eßstäbchen angefordert
##      5.19715 | P4 | E4 | Eßstäbchen erhalten
##      5.19719 | P4 |    | ESSEN
##      5.19755 | P9 | E8 | Eßstäbchen abgelegt
##      5.19765 | P9 | E0 | Eßstäbchen abgelegt
##      5.19771 | P9 |    | DENKEN
##      5.19811 | P1 | E0 | Eßstäbchen erhalten
##      5.19820 | P1 | E1 | Eßstäbchen angefordert
##      5.25938 | P7 | E6 | Eßstäbchen abgelegt
##      5.25948 | P7 | E7 | Eßstäbchen abgelegt
##      5.25954 | P7 |    | DENKEN
##      5.25960 | P8 | E7 | Eßstäbchen erhalten
##      5.25963 | P8 | E8 | Eßstäbchen angefordert
##      5.25967 | P8 | E8 | Eßstäbchen erhalten
##      5.25971 | P8 |    | ESSEN
##      5.25976 | P6 | E6 | Eßstäbchen erhalten
##      5.25979 | P6 |    | ESSEN
##      5.96130 | P2 | E1 | Eßstäbchen abgelegt
##      5.96143 | P2 | E2 | Eßstäbchen abgelegt
##      5.96149 | P2 |    | DENKEN
##      5.96159 | P1 | E1 | Eßstäbchen erhalten
##      5.96169 | P1 |    | ESSEN
##      6.02361 | P5 | E4 | Eßstäbchen angefordert
##      6.07052 | P3 | E2 | Eßstäbchen angefordert
##      6.07062 | P3 | E2 | Eßstäbchen erhalten
##      6.07066 | P3 | E3 | Eßstäbchen angefordert
##      6.14867 | P7 | E6 | Eßstäbchen angefordert
##      6.19526 | P9 | E8 | Eßstäbchen angefordert
##      6.22636 | P4 | E3 | Eßstäbchen abgelegt
##      6.22647 | P4 | E4 | Eßstäbchen abgelegt
##      6.22654 | P4 |    | DENKEN
##      6.22659 | P5 | E4 | Eßstäbchen erhalten
##      6.22662 | P5 | E5 | Eßstäbchen angefordert
##      6.22671 | P3 | E3 | Eßstäbchen erhalten
##      6.22675 | P3 |    | ESSEN
##      6.38243 | P8 | E7 | Eßstäbchen abgelegt
##      6.38254 | P8 | E8 | Eßstäbchen abgelegt
##      6.38259 | P8 |    | DENKEN
##      6.38298 | P9 | E8 | Eßstäbchen erhalten
##      6.38306 | P9 | E0 | Eßstäbchen angefordert
##      6.41359 | P6 | E5 | Eßstäbchen abgelegt
##      6.41365 | P6 | E6 | Eßstäbchen abgelegt
##      6.41368 | P6 |    | DENKEN
##      6.41371 | P5 | E5 | Eßstäbchen erhalten
##      6.41373 | P5 |    | ESSEN
##      6.41375 | P7 | E6 | Eßstäbchen erhalten
##      6.41377 | P7 | E7 | Eßstäbchen angefordert
##      6.41379 | P7 | E7 | Eßstäbchen erhalten
##      6.41381 | P7 |    | ESSEN
##      6.83498 | P1 | E0 | Eßstäbchen abgelegt
##      6.83508 | P1 | E1 | Eßstäbchen abgelegt
##      6.83515 | P1 |    | DENKEN
##      6.83531 | P2 | E1 | Eßstäbchen angefordert
##      6.83539 | P2 | E1 | Eßstäbchen erhalten
##      6.83542 | P2 | E2 | Eßstäbchen angefordert
##      6.83553 | P9 | E0 | Eßstäbchen erhalten
##      6.83562 | P9 |    | ESSEN
##      7.20921 | P3 | E2 | Eßstäbchen abgelegt
##      7.20934 | P3 | E3 | Eßstäbchen abgelegt
##      7.20941 | P3 |    | DENKEN
##      7.20975 | P2 | E2 | Eßstäbchen erhalten
##      7.20986 | P2 |    | ESSEN
##      7.25612 | P8 | E7 | Eßstäbchen angefordert
##      7.28785 | P5 | E4 | Eßstäbchen abgelegt
##      7.28791 | P5 | E5 | Eßstäbchen abgelegt
##      7.28795 | P5 |    | DENKEN
##      7.38088 | P4 | E3 | Eßstäbchen angefordert
##      7.38102 | P4 | E3 | Eßstäbchen erhalten
##      7.38106 | P4 | E4 | Eßstäbchen angefordert
##      7.38110 | P4 | E4 | Eßstäbchen erhalten
##      7.38114 | P4 |    | ESSEN
##      7.42754 | P7 |    | AUSTIEG ###
##      7.42765 | P7 | E6 | Eßstäbchen am Ende abgelegt
##      7.42769 | P7 | E7 | Eßstäbchen am Ende abgelegt
##      7.42773 | P7 |    | EZ 3.168 ; DZ 1.926
##      7.42829 | P8 | E7 | Eßstäbchen erhalten
##      7.42836 | P8 | E8 | Eßstäbchen angefordert
##      7.42853 | P7 |    | DENKEN
##      7.42869 | P7 |    | NEUSTART §§§
##      7.44342 | P6 | E5 | Eßstäbchen angefordert
##      7.44350 | P6 | E5 | Eßstäbchen erhalten
##      7.44354 | P6 | E6 | Eßstäbchen angefordert
##      7.44358 | P6 | E6 | Eßstäbchen erhalten
##      7.44362 | P6 |    | ESSEN
##      7.84887 | P9 | E8 | Eßstäbchen abgelegt
##      7.84900 | P9 | E0 | Eßstäbchen abgelegt
##      7.84907 | P9 |    | DENKEN
##      7.84912 | P8 | E8 | Eßstäbchen erhalten
##      7.84916 | P8 |    | ESSEN
##      7.84957 | P1 | E0 | Eßstäbchen angefordert
##      7.84965 | P1 | E0 | Eßstäbchen erhalten
##      7.84969 | P1 | E1 | Eßstäbchen angefordert
##      8.19198 | P2 | E1 | Eßstäbchen abgelegt
##      8.19210 | P2 | E2 | Eßstäbchen abgelegt
##      8.19216 | P2 |    | DENKEN
##      8.19226 | P1 | E1 | Eßstäbchen erhalten
##      8.19236 | P1 |    | ESSEN
##      8.23880 | P5 | E4 | Eßstäbchen angefordert
##      8.31695 | P3 | E2 | Eßstäbchen angefordert
##      8.31708 | P3 | E2 | Eßstäbchen erhalten
##      8.31712 | P3 | E3 | Eßstäbchen angefordert
##      8.34790 | P4 | E3 | Eßstäbchen abgelegt
##      8.34804 | P4 | E4 | Eßstäbchen abgelegt
##      8.34817 | P4 |    | DENKEN
##      8.34826 | P3 | E3 | Eßstäbchen erhalten
##      8.34831 | P3 |    | ESSEN
##      8.34839 | P5 | E4 | Eßstäbchen erhalten
##      8.34844 | P5 | E5 | Eßstäbchen angefordert
##      8.44163 | P7 | E6 | Eßstäbchen angefordert
##      8.56662 | P6 | E5 | Eßstäbchen abgelegt
##      8.56674 | P6 | E6 | Eßstäbchen abgelegt
##      8.56681 | P6 |    | DENKEN
##      8.56686 | P5 | E5 | Eßstäbchen erhalten
##      8.56690 | P5 |    | ESSEN
##      8.56736 | P7 | E6 | Eßstäbchen erhalten
##      8.56741 | P7 | E7 | Eßstäbchen angefordert
##      8.70731 | P9 | E8 | Eßstäbchen angefordert
##      8.83154 | P8 | E7 | Eßstäbchen abgelegt
##      8.83168 | P8 | E8 | Eßstäbchen abgelegt
##      8.83175 | P8 |    | DENKEN
##      8.83210 | P9 | E8 | Eßstäbchen erhalten
##      8.83219 | P9 | E0 | Eßstäbchen angefordert
##      8.83246 | P7 | E7 | Eßstäbchen erhalten
##      8.83255 | P7 |    | ESSEN
##      9.19033 | P1 | E0 | Eßstäbchen abgelegt
##      9.19045 | P1 | E1 | Eßstäbchen abgelegt
##      9.19051 | P1 |    | DENKEN
##      9.19061 | P9 | E0 | Eßstäbchen erhalten
##      9.19071 | P9 |    | ESSEN
##      9.31512 | P3 | E2 | Eßstäbchen abgelegt
##      9.31526 | P3 | E3 | Eßstäbchen abgelegt
##      9.31533 | P3 |    | DENKEN
##      9.31587 | P2 | E1 | Eßstäbchen angefordert
##      9.31593 | P2 | E1 | Eßstäbchen erhalten
##      9.31596 | P2 | E2 | Eßstäbchen angefordert
##      9.31600 | P2 | E2 | Eßstäbchen erhalten
##      9.31604 | P2 |    | ESSEN
##      9.48677 | P4 | E3 | Eßstäbchen angefordert
##      9.48691 | P4 | E3 | Eßstäbchen erhalten
##      9.48695 | P4 | E4 | Eßstäbchen angefordert
##      9.67419 | P6 | E5 | Eßstäbchen angefordert
##      9.70514 | P5 | E4 | Eßstäbchen abgelegt
##      9.70526 | P5 | E5 | Eßstäbchen abgelegt
##      9.70533 | P5 |    | DENKEN
##      9.70543 | P4 | E4 | Eßstäbchen erhalten
##      9.70553 | P4 |    | ESSEN
##      9.70595 | P6 | E5 | Eßstäbchen erhalten
##      9.70606 | P6 | E6 | Eßstäbchen angefordert
##      9.81440 | P8 | E7 | Eßstäbchen angefordert
##      9.86104 | P7 | E6 | Eßstäbchen abgelegt
##      9.86115 | P7 | E7 | Eßstäbchen abgelegt
##      9.86122 | P7 |    | DENKEN
##      9.86132 | P6 | E6 | Eßstäbchen erhalten
##      9.86142 | P6 |    | ESSEN
##      9.86153 | P8 | E7 | Eßstäbchen erhalten
##      9.86162 | P8 | E8 | Eßstäbchen angefordert
##     10.11072 | P1 | E0 | Eßstäbchen angefordert
##     10.26671 | P9 | E8 | Eßstäbchen abgelegt
##     10.26685 | P9 | E0 | Eßstäbchen abgelegt
##     10.26692 | P9 |    | DENKEN
##     10.26701 | P8 | E8 | Eßstäbchen erhalten
##     10.26711 | P8 |    | ESSEN
##     10.26758 | P2 | E1 | Eßstäbchen abgelegt
##     10.26767 | P2 | E2 | Eßstäbchen abgelegt
##     10.26772 | P2 |    | DENKEN
##     10.26783 | P1 | E0 | Eßstäbchen erhalten
##     10.26791 | P1 | E1 | Eßstäbchen angefordert
##     10.26797 | P1 | E1 | Eßstäbchen erhalten
##     10.26801 | P1 |    | ESSEN
##     10.46958 | P3 | E2 | Eßstäbchen angefordert
##     10.46970 | P3 | E2 | Eßstäbchen erhalten
##     10.46973 | P3 | E3 | Eßstäbchen angefordert
##     10.70351 | P5 | E4 | Eßstäbchen angefordert
##     10.71916 | P4 | E3 | Eßstäbchen abgelegt
##     10.71927 | P4 | E4 | Eßstäbchen abgelegt
##     10.71933 | P4 |    | DENKEN
##     10.71939 | P5 | E4 | Eßstäbchen erhalten
##     10.71942 | P5 | E5 | Eßstäbchen angefordert
##     10.71948 | P3 | E3 | Eßstäbchen erhalten
##     10.71952 | P3 |    | ESSEN
##     10.75047 | P7 | E6 | Eßstäbchen angefordert
##     10.79707 | P6 | E5 | Eßstäbchen abgelegt
##     10.79713 | P6 | E6 | Eßstäbchen abgelegt
##     10.79717 | P6 |    | DENKEN
##     10.79720 | P5 | E5 | Eßstäbchen erhalten
##     10.79722 | P5 |    | ESSEN
##     10.79729 | P7 | E6 | Eßstäbchen erhalten
##     10.79731 | P7 | E7 | Eßstäbchen angefordert
##     11.17151 | P8 | E7 | Eßstäbchen abgelegt
##     11.17164 | P8 | E8 | Eßstäbchen abgelegt
##     11.17171 | P8 |    | DENKEN
##     11.17215 | P7 | E7 | Eßstäbchen erhalten
##     11.17225 | P7 |    | ESSEN
##     11.18711 | P1 | E0 | Eßstäbchen abgelegt
##     11.18720 | P1 | E1 | Eßstäbchen abgelegt
##     11.18726 | P1 |    | DENKEN
##     11.26503 | P2 | E1 | Eßstäbchen angefordert
##     11.26512 | P2 | E1 | Eßstäbchen erhalten
##     11.26516 | P2 | E2 | Eßstäbchen angefordert
##     11.38990 | P9 | E8 | Eßstäbchen angefordert
##     11.39003 | P9 | E8 | Eßstäbchen erhalten
##     11.39007 | P9 | E0 | Eßstäbchen angefordert
##     11.39011 | P9 | E0 | Eßstäbchen erhalten
##     11.39015 | P9 |    | ESSEN
##     11.77988 | P4 | E3 | Eßstäbchen angefordert
##     11.81117 | P3 | E2 | Eßstäbchen abgelegt
##     11.81127 | P3 | E3 | Eßstäbchen abgelegt
##     11.81134 | P3 |    | DENKEN
##     11.81144 | P2 | E2 | Eßstäbchen erhalten
##     11.81154 | P2 |    | ESSEN
##     11.81165 | P4 | E3 | Eßstäbchen erhalten
##     11.81174 | P4 | E4 | Eßstäbchen angefordert
##     11.92022 | P6 |    | EZ 5.058 ; DZ 5.335
##     11.93589 | P5 | E4 | Eßstäbchen abgelegt
##     11.93598 | P5 | E5 | Eßstäbchen abgelegt
##     11.93602 | P5 |    | DENKEN
##     11.93612 | P4 | E4 | Eßstäbchen erhalten
##     11.93618 | P4 |    | ESSEN
##     12.06073 | P8 | E7 | Eßstäbchen angefordert
##     12.26347 | P1 | E0 | Eßstäbchen angefordert
##     12.26400 | P7 | E6 | Eßstäbchen abgelegt
##     12.26407 | P7 | E7 | Eßstäbchen abgelegt
##     12.26412 | P7 |    | DENKEN
##     12.26431 | P8 | E7 | Eßstäbchen erhalten
##     12.26440 | P8 | E8 | Eßstäbchen angefordert
##     12.27905 | P9 | E8 | Eßstäbchen abgelegt
##     12.27915 | P9 | E0 | Eßstäbchen abgelegt
##     12.27921 | P9 |    | DENKEN
##     12.27927 | P8 | E8 | Eßstäbchen erhalten
##     12.27931 | P8 |    | ESSEN
##     12.27935 | P1 | E0 | Eßstäbchen erhalten
##     12.27939 | P1 | E1 | Eßstäbchen angefordert
##     12.74711 | P3 | E2 | Eßstäbchen angefordert
##     12.88754 | P2 | E1 | Eßstäbchen abgelegt
##     12.88769 | P2 | E2 | Eßstäbchen abgelegt
##     12.88778 | P2 |    | DENKEN
##     12.88788 | P1 | E1 | Eßstäbchen erhalten
##     12.88798 | P1 |    | ESSEN
##     12.88841 | P3 | E2 | Eßstäbchen erhalten
##     12.88851 | P3 | E3 | Eßstäbchen angefordert
##     12.91884 | P5 | E4 | Eßstäbchen angefordert
##     13.01220 | P4 | E3 | Eßstäbchen abgelegt
##     13.01235 | P4 | E4 | Eßstäbchen abgelegt
##     13.01241 | P4 |    | DENKEN
##     13.01293 | P3 | E3 | Eßstäbchen erhalten
##     13.01303 | P3 |    | ESSEN
##     13.01328 | P5 | E4 | Eßstäbchen erhalten
##     13.01337 | P5 | E5 | Eßstäbchen angefordert
##     13.01342 | P5 | E5 | Eßstäbchen erhalten
##     13.01346 | P5 |    | ESSEN
##     13.33972 | P9 |    | EZ 5.129 ; DZ 4.925
##     13.35546 | P8 | E7 | Eßstäbchen abgelegt
##     13.35556 | P8 | E8 | Eßstäbchen abgelegt
##     13.35562 | P8 |    | DENKEN
##     13.37098 | P7 |    | EZ 5.284 ; DZ 3.911
##     13.93266 | P1 | E0 | Eßstäbchen abgelegt
##     13.93287 | P1 | E1 | Eßstäbchen abgelegt
##     13.93297 | P1 |    | DENKEN
##     14.02633 | P2 | E1 | Eßstäbchen angefordert
##     14.02645 | P2 | E1 | Eßstäbchen erhalten
##     14.02649 | P2 | E2 | Eßstäbchen angefordert
##     14.07296 | P5 | E4 | Eßstäbchen abgelegt
##     14.07306 | P5 | E5 | Eßstäbchen abgelegt
##     14.07312 | P5 |    | DENKEN
##     14.07330 | P3 | E2 | Eßstäbchen abgelegt
##     14.07335 | P3 | E3 | Eßstäbchen abgelegt
##     14.07340 | P3 |    | DENKEN
##     14.07344 | P2 | E2 | Eßstäbchen erhalten
##     14.07348 | P2 |    | ESSEN
##     14.12013 | P4 |    | EZ 5.168 ; DZ 5.538
##     14.46298 | P8 |    | EZ 5.833 ; DZ 5.585
##     14.85296 | P1 |    | EZ 5.768 ; DZ 5.775
##     14.99333 | P2 | E1 | Eßstäbchen abgelegt
##     14.99345 | P2 | E2 | Eßstäbchen abgelegt
##     14.99351 | P2 |    | DENKEN
##     15.04016 | P3 |    | EZ 6.018 ; DZ 6.041
##     15.08694 | P5 |    | EZ 6.026 ; DZ 6.015
##     15.88248 | P2 |    | EZ 5.878 ; DZ 5.927
##    # Ende.