From: Neil Smith Date: Mon, 12 Jun 2017 08:32:26 +0000 (+0100) Subject: Done problem set and solution for day 6 X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=d91c9d64d82c20a1ee9feea1c2e403f5f013a7f3;p=ou-summer-of-code-2017.git Done problem set and solution for day 6 --- diff --git a/06-tour-shapes/06-tours.txt b/06-tour-shapes/06-tours.txt new file mode 100644 index 0000000..c6946e8 --- /dev/null +++ b/06-tour-shapes/06-tours.txt @@ -0,0 +1,226 @@ +FFFLLFFRRFFFLFRRLFFFFLFFRFFFRFFLFFFRLFFFFFLFRFFFFFRFLRFFFRFFLFFFLFFFFLFFRRLLFFRFLFFFFFFFFFRFFFFFFFFFFFFFFFFFRFFLFRFRLFFLFRFFFLFFFRFLRFRLRRLLFLFFFFLFLRRFLRFRFLRFLFFFFFLFRLFFFFFFLFFLLRRFRLRFFFFFFFFFFFFFFFFFFRFLFFFFFFRFFFFLFFRLRFFFLFFFLRFRFLFFRFFFFLFFFFFFLFRFFFLFLRFFFFFLFFRFFFLRFFRFFFLRRLRLFFFFFFFRFFFLRFFLFFFFLRRLRFFFFLRLFFFFLFFFLRRFLFFFFRFFFFFLFFFFFFRFLFFFFFFFFRFFFFFFLLRFFLFFFFFRLFRLFFFFFRLRFFFFFFFRFRLFFFLFFFLFFRFFLFFRFRFFFLFLRFFRRFLFFFFLFFFFRLRFFLFFFFFFFRLFRLFFFFFFRFFLFFFFFLFRFFLFFRFFRFFFLFFFFFFFFLLRFFFRLLFFFRRFFLFFLFLFRFRFFFLFRFFFFRFFLLFFFFFFFFFLFRFFLRRFFRLFFFFRFFFFFLFFFFFFLRLRFFFLFFFFRRFFFFFFFLFLFFRFFFLFFRFFLFRFFFFFRFLFRFFFFFFFFFFLFLRLFFFRFLFLFRRFFFFLLFRRFFFRRLLFLRLLRFFRFRLFLRRLFRLFFRRFFLFFLRFRFLFFLLRRFFFRLFFLFFFFFFFFFLFFFFFFRFRFLFFFFFLFFF +FLRFFRFFFRLLFLFFFFFFLRFRFLFFFFLFFRLFLFRRFLLFFFFRFFLFFRLLFFRLRL +LFFFFRFFRLRLFRLFRFLRFLFFFRFFFFFFLFFFFFFFLFFLRFRFFLRFFFRFFLLRFRFLFFLLRFRFRFFLLFFFRRFFLFFFFFRRLLRLFFFFFFFFFFFFLFRLLFFFFFFRFFFRFFFFRLFRFLFFFFLLRFFFFFRLFFFFFFRFFFFFFFFFFFFFFRFFFFRLLRRLLFFFFFFFFFFLRFFLLFFRFFFLFRFRFLFFLFRFRLFLRRFLFLFFFLRFFFRFFFFLRFLFFRFFFFFLFFRFFFFFFFFFFFFFFFFFFFFFFFRRLFRFLFFFFFFFLFFFFFFLRRFLFFLFFFLRFFFFFLFFRFRFRLFRFFFLLRLFFRFRFLFFLRRFFLFFLRLFFFFFRFLRFLLFFFFLRRFRLLFRFRLFFFFLRFFFRFFLLRFFFFLRFRFRLFFLFFRFLLRFFFFLFFFRLRRLFRFFFLFFFLFFFRRFFFLLFFRLFFRRFFFLFRFFFFFLFFFFFFFFFFFFLRFFFFRFFLRLLRLFFRFRLFLFFFFFFLFFRFFFLRLFRFLRFFFRLFFRFFFLFFLFFFRFRFLFFFRLFFFFFLRFRFLRFFFLFRFLRFFFFLLFRLFFFRFFRFLFFFRLLFFFFFFFLLRLFFRRFFLRFFFRLRFFFLRFFFLFRFRFLFLRFLRFFFFRFLFLFRFFRFFFFFFFFFFFFLRFLRFFLFLRFFFFFFFLFLFRFFFFFF +FFLRFFFFRFLFFFFFFFFLFFFFFFRFFFFFFFFFFFRFFFLRFFRFFLFRFFRFFLFLRFFLLFFRRLRFLFFFFLFFLFRFRLFFFFFFFFFFFFLFFFFFRRFFFLFRRLRLLFFFFFFLLFFFRFFFRLFRFFFFRFFLFFLRLRFFFFFFFFLLFRFFFLFFFFFFFRFFRFFLFRRFFLFFFFFLFFLRFFLRFFFFLFFLFFRFFFRFFRFFLFFFFFFFFFRLRFFFLFRLFFFLFFFRFRFFFFLFFFFFFRFFRLLFFRFLRFFFFLFFFFFLLFFFFRFRLLFFFFFFLFFFRLFFFFFFRFFFLFFFFFLLRFFRLFRFRLFFRFFLFRLLFFFLRRFFFRLFRLLRFLFFLFRFRFLFFLRRLFFFLRRLFFFFFLFFLRFRFFFRLFLFFFRFRFLLRFFLFRFFFLFFFFFFFFRFRFLFRFLFFFFFFLFFFRFRLFLFFRFFFFLLFRFFRFLFFFFRLLFRFFFRFFFFFFFLLFRRFLFFFFFRFFFFFRLFFLFFLFFFFFRFRLFFRFLFRFFLLRFFLFFFLLFFLFRLRFFFRFFLFFFFRFFFFFRFLFFLRLRFRFLLFFFFFFFFLFLFRFFLRFFFFRRFLFRLFLRLFFRFFRFLFFRFLFLFRFFFFFLLRLFRFFFRFFLFFFFFLFFRLFFLFLRFRLFRFFFFRFRFFLFFFLFRFLFFFFRFFRFFRFLFLLRRFFLFFLFFRFFFFLFFFRFRFLFFLFFRFFFFFFRLFFRFLRRFFLFFLFFFFFFLLFFLFFFLLRRFLRFLRLFFLRFRLRLFFFFFFLFFFFFFLFFFFFFRFFFFFLRFLFFRRFLFRFFFFFFFFLFFLRFRLFLFFFFFFRFRFFFFRLFLFFFFLFRFFRFLLRFRLLFRFFFFFFFLFFFFFFFFFLLFLFFFRFLFFLFFFRFFFFFRRFLFFFRLRLFRLRFFFFFLFFFFLFFFRFLRRLFFLFFFFFLRRFFFRFFFFFFLRLFFFFFLFFFRRFLFFFFFFRLFLFRFRLFLFFRFLRLRLFLFFRFFFLFLFFRRFLRFLFFLFFFRRLLRRFFFFFFFFRLFLRFFFFRFFFFRLFFRFLFFFRLLFFFFRFFFLFFFLFRFFFLFFRFRFLLFFFFFLRFLRFRRLFFFRFFFRLFFFFFFRRLLFFLFFFFFFFFFFLFLFLRFRFFFFRLLLRFFFRFRLFFFFFFFFFRRLLFRFLFRLFFFFLRFFFLFRFRLLFFFRFFRFFFFFLFFFFFRFFLFFFRRLFFFFFFLFLFFFFRFFRFLFRLLLRRFFFFFRFFFFLRFFFFFRFFLRRFLFFLFFFFLFFFRFRFLLRFFLFFFRFRFFFFLFRFFRFLFRFLLFFFFRFFLFRFFFLFLFFFFRFFLFFRF +FLFFFFLFLRFFFLLRFFFRRLLLFFRFFFLFFFLFFRRLLFRRLRFLFLFLRFFFFFFLLLFFRLLRLRFLRFFLFFFFFRFFFRLFLLRFFFFRFFRLFLLLFLFRFFRFFFFLFFFFFRFFFRFFFFFFFLRLRFRLFFFRLRFRLFFFFLRFRFLFFLFLFRLLFRFRRLFFFFLRRF +RFFFRFLFLFFRFFLFLFFRRFFLFFFFFFFFFLFFFLFLFRFFFFRFRLFFFLRFFRFFLFFRLRLLFRRFLRFFRFFFLFFLFRFLFRFRFFFFFFLFFFRRFLFLFFFLRFFFFRFFFFFFFLRLFFFFFFLFFFFFFFFRFRLLRFFFLFFFFLRFLFFRFFFFFFRFFLRFFFFLRFFFFRLFLFFFFLFFFFFFRLFFFFRLFFRLLFRFRFFFFRFLFFRRFLFLLRFLRFRFLFFLFRFRFLRFLFFFRFFFFFLRFFLRLFFRLFFRFFFFFFRFRLLFFLFRFFFRFFFFRLFFFLFRFLRFFFFLFLFRFFRFFLFFFFFLRFLFLFFLRRFFFFFFLRFFFRFFFRLLRFFFFRLRRLFLFLRFFFLFFRFLFFFFFLFFFFRFFFLRFFRFRLFFFLFFFFFFFFFLFFFFFLFFRFRFLFRFFLFFFFRFLFRFLRFFFRLRFLRFFLFFFFFFLFRFFLRFFFFFRFFRFFLLFFFFFLRRLFLFFFFFLLRFFFFFFRRFFLFFLRFFFFFRLFFFRLLRFFFFFFFFFRFFFFLFLFFFRLRRFFFFFFFFFFFFRLLFFFFFFFRRLFFFFRRFLLRFFFFLFLFRRFFFLFRLFFFLFFFRFLRLRLLFLRRFFFFLRFFRLLRFFFRLFFFRFFFFFFLFFFFRLLFFRLFFFFFRRLFRFFFFLFRLFFFRLLFRFFFFRLLRRFFFRLFLFFFFRLLFFFLRFFRLRLFFFFFFRFFLFFFFFFFFFFLRRLLFFRRLFFRFLFFLFRRFFFLRFFLLRLRRFFFLRFFLFFFFFFFFFFFFRFFFFFFRFFRFLFLRFFFFFFFFFRRLLFLFRLFLRLLRFRFFRLFFFFFRFRFFLRFLLFFFFFFLFFFFLRFFRFLFLRFRFFLFRFFFRFLLFFFRFFFFFLRFFFFLFFFLFRFFFFFLFFFRFRFFLFFFLFFRRLFFFFFRLLRFFFRLRFFFRLFFRLFFLFFFFFLFFFFFLFRFFFFFRFFFFRLFFFFFLFFFFRLRFLLFRFFFFFLFFFLRFLFFRFFRFFFFFFFFFFFRRFLFLFFFFLFFRRLLRRFFFFFFFFFFRFFFFLFLFFFFFFRFFLLRFFLFLRFFFLFRRLLRFRFRLRLRLFFFFFRFFFFFLRLFRFFFFRLFFRFFFFFFFFLFFFLFRFLFFRLFFFLFFRFFFFFRFFRLFRFFLRFFFLRFFRFFFLFFFFFFLFLFRRFLFFFFFFFFFFFFFFFLFFFFRLFFRLLR +FFFFFFRFFFFLFFFFLFRRLFLFFFRLFFFFRFRLFFRLRRFLLFFFFFFFFFFFFFLFRRFFRLFLRFFFFLFLFRFFLFFFFFFRFLFFFFFFFFFRFFFFFLFFFRLFFFFLFRFLRLFRFFRRFLFFLFFRLRLRFFFFLFFFFFFRFFFFFLLRRFFLFRFFRFLRLFLFFFFRLFRLFLFRFFRFFFFFRLLRFFFFRLFFFFLFFRFLFRLFFFLRFFLRFRFLFFFRFFFFLFFFFRFFFLFFFFFLRFFFRLLFFFFRFLRRLFLLRFFFFFFRFFFLFFRFLFRLFFRFFFFFFLLRFFFFFFLFFFRLLFRRFFFFRFFFFLLFRFFFRFFLRFFFFLFRFLFFFFRFLFFFFFFFFFRFFFFFFFFRLLRFRFFLLRRFRLLFLFRLFFLRRLFRLRRLFLFRLFFLFRFFRFFFFFFFFFFFFFLLFFFRLRFFFLRRFFLFLFRFFFFFFFRFFFFLFFFFLRFFRLFFFFFFLRFLFFFLRRFFFLLRFFFFRLFFLRFLLFRFFFFRFLFLRFFLRRLFRFFFRFLFFRFFFRFLFFFFFFLFLFRFRFFFFFFLFLLRFFFFFFRFFFLFFFFLFFLRRFRFFFLFFFRFRLFFFFFLRRLFRRLLFLFFRFFFFFRFFFFFLLFFFRRLFRFLRLRRFFFLRRLFLFFLRFFLFRLFFFFFFFFRFFFRFLFLFRFRFLRFFFFFRLLFFFRFFLLFFRFLRFFRFFLFFFFFFFLFRFLRLFFFFRFFFFFFLFLFRRFFLFFRFFFFFFLLRLFFFFFFLFFRFFFLRRLFFFRRLRLFFFRLRLFLFFLFRRFFFFRFFFFFRFFLFFLFRFFLLRRLFFLRRFFFFLRRLLFFFFFFLFFFRLRRLLRFFRFFRFLLFFFFFRLFLFFFFRLFFRLFFRLFFFFRRLFLFFFLFFRRFLFFFFLFFFFRFFRLRFLFFFFFLRRFRFFFLLFFFFRFFFFFFFLFFFFFFFFFLLFRRFFFFFFFFFFFRFFFFFLRFFRFLRFFFLRRLFFFFFFFFFLFFLFRLLFRFFRFLFLRFRFFRLLFRLRFLRRLFRFFFFLLFFFRFRFFFLFFFLRFFLRL +FFLLFFFFFRFRLFFFFLLFRLFFFFFFFFLFLRLRLR +FFLRFFFRFLFRFFFFRLLFFFFLFRFFFFLFFFLRFLRFLFRLFFFRFRFFFFFLFFFFFLFRRFFFLFFFFFFFFRFFFFFFFRFFRLFLLRFLFRLFFRLFFRLFFFFFFFFFFRRRLFLRFLRFLFFFLFLFFRFLRFFFFFRFFRFRFLFLFRFFLFFFLFRFFFRFLFFFRFFFLFFFFFFFLLRFFFRLFFFLFFFLFRRFFFLFFRLRFLRFFFFFFFFRFFFRFFFFFFFFLFRLFLFFRFFFFLFRFFRFFFLFLFLRRFFFFLFLFRFLRFFFRFLFFFFLFRFLRLFFRRFFFFLRFLLFFFFFFFFFFFFRFFFLFRFRFFLFFFLLRFFRFFRFLFRFLLFFFRFFRFFFLFFFFLFFRLRFFLFFFFFFFFFFLFFFFFFFLRFLFRFLRFFFRFFFFFFFFFFFFFRFFFLRFLFFFFFFLFFLFRFFFFLRFFFFFFLFFRLRRLLRFFRFFFFFRRFLLFFFFFFRFRFLFFFFFFLFFLFRRFFFFFFFFLFFFFFFFFFFFFFFLLRRFLFFFFRFFRFFFFFLLRFLLLFLRLFFFFFFFFFLRFLFFLFRFFFFFLFRFFRLFFLFLFFRRFFFFRFFFFFRFFLRFFFLFRFLRFLFRFFLFFFFFFFLRFFFFRFLRFFFFRLRRLFFRFFFLFFFFFFLFFFFFFFLRFRLFFFFLFRLFFFFFFRFLFFFFFFRFFLFFLRFFFFFFFFFFFFFFFLFFFFLFFFRFLFLFRFFRFFFRFFFFFFFFLRFLFLFFLRFFFFRLFFRFFFFFFRFFLFFRFLRFLFRRFLFLRLFFFLFRFFFFFFFFRFFFRFFFFRFFFFFFFFRLFFLFRFFFRFFFFLRFFFRFLFFFLRRFLFRRFLFFFRRLFFRFFRLFFFFLRFFRFFFFFFFFRFFLFFFFFRLFFFFRFLFLFFLFRFFFFLLFLFFFFFFLFFFFFRFFFLFFRFLFFLFFRFFFFFLRFFFLLRRFRLFFRLFRFFRFFLFFFFFFLLFRFRFRLFLFRFFRLFLFFRRLFFFFFFLLFRFRFFLFFFLFFFFRRFFLFFF +FFFFFFLFFFFFFFFFFFFRFFFRFFFFFLFLFFFFFFFFLFFFFFFLFFFFFFRFFFRLFFRFFFFRLFFFFFFRLFFLFFFFFFFLRRLFFLFRFLFFFRFFLLRRFFFFFFF +LRLLRRFFFRFFFFFRRFLLFFLFRLFFFFFFFFRFLFFFLLRFFFFLRFLFRFFFFFLFRRFFFLFFRFLFRFFLFFRFLFRFFFFFFRLRLLFFFRFFFRFLFLFRFLLFFRRFFLFFFRFFFLLFFFFFRFFFFLRRLFRLFFFRLFFRFFFFLFRFFFFFFFLRFFLFFFFFFRLFFFRRFLRLFFFFFFFFFLFLFRFLFRFFFLRFFFLRFLFFFLFFRFFRFLRFLFFRFRFFFFLFFFRLFFLFFRFRLFFFLFFFFFFFFRFFRLFFFFFFFFFLFFLFFRLLFRFFFRLFFLRFFFFRFFRFFFFFLFFLFFFFFFRRLFLRFLFRRFLFFRFFFFLFRLLRFFFFFFFRLFLFFLRFFRLFFFFLFFFFRFFFFFRFLRRLFLFFRFRFFFLFFRFFFFLRFLFLRFLFRRLFRLFLFFRFFFFFFFFFLFFFFRRLRLFRFFRLFFLFRFFLLRFFFFFLLRFFFLRFRRLFFLRFFFFLRRLFRFFFLRRFLFFLFFFFRRLFFFLFFFRLFFFLFFRFFFRFFFFFFLRRFFRLLFFFLFFFFRFFFRFFFLLFFFFFFFFFFLFLRLRFFRFRLFLRFFLFRFFRFFLRLLFFFFFLFFRLRFFFFLFFRFRFFFFFFFFFFLLFFRFLRFLFFRFFLFFFRFFFFLFLFFFRFFFRFFFFFRFFFFFFLRLRLFFFFFRLLRFRFLFLFFFFRFLLFRFRFFLFFRFFLLFFFRFFRRLFFFFFRLRLFLFLFRFLFRRFFFFLFFRFFFFLFFLFFRFRFLFRFFLFFFLFFFFRFFFRLFFFFFFFFRFFFRRFLLFFRFLLFFFRRFFLFFFFLFFFLRFFRFFFFFFRFFLLFFRFFFFFLRFFFLFLRFFFFRLRFFLFRLRLRL +FFRFFFFLFRLRRLLRLFFLFRFLFRLRFFLFFFFRLLFFFRFFRRLRLFFRFFLFFLFRFFRRLLFFFFFRFFLFFFFLFRRFFFFFFFLLRLRFLFRLRFFFLRFFRFFFFFLFFFFFFFFFFFLFFFFFLFFFFRRFFLLFFFRFFFFFRFFFFFRFFLFFRFLRFLFLLRFLRFFFFFFRFRFFLFFRFFFFFFFLLFRFRLFFFFFFFLFLFRLRRFFFFFLFFRLFFRFFFFFRRLLFFLFFFFFLFRLFFFFFRRLFFRLRFFFLFRFLFFFFLLRRFLFRLFFFFFRLFRFFRLFFRFFFRRFFLLRFLFFLFFFFFFRFLFFFFFRLFLRRLFLFFRFFFFFFFFLRFFFFLFFFFFFFFFFRRFFFFFFFLLRRFFLFFLFLRFFLRFFRLFRFRFLLRFLFRFFFLFFFFFRFFFFFLRFRLFFLLFRLRFFFFFFRLRFLFFLFRRFLRFLLRFFRFLLFFFFFLFRFFRLRLRFLFRLRRLRFFFLFFLFFRFLLFRRFFLFFRFFRFFRLFLFFFFFFFRLFRRLFFFFFRLFFFLFFFFFFLRFFFFRLFFLLRFFFFLRFFRFFLFFLRRFFRRLLFFFFFFLFFLRFLFLRLRRFLLRRFFFRFFFFFFFFFLFFLRFRFLLFRRFLFRFFLFFFRLFFFLLRFFFRFLFFFRLLRFRLRFRFFFFFFFLFFFFFRFLFRRFLFFLLFRFFFFRLFLFFLRFFFFRLFFLFFFRRFFFLFRFLFFRFRLFRLFFFRFLFFFLLRFFRFRLFLRFFFRFFFRLFFFFFLFFFRLFFFFRFFFFLFRRLLFFFFFFLLRRFFFFLLFFRRFFFLRFLLFRFLFFRLFFR +FFRFFFFRFFFRFFFRFFFFFRFLFFFLFFFFFFLFRLFFLLRRLRLRLR +FLRFFFFFFFFLFLFRFFFFFLFFFFLRRFFLFFFFLFLFRFRFFFLFFLRLRLRLRL +LLFRRFFFRFRF +LFFLFFFFLFFFLLFRFLLLLFRL +RFLFRFFFFFFLFFLFRFLFRFFFRLFRLFLFFFFRFFFFRLFFFRFFFFFLFFLFLRFFFFFFLRFRFFFFFFRLFFRFFLFFFFFRFFFRLLFFLFFFFFLRRLRFLFFRRLFFLRFLRLFFFFRFFFLFFFLRLFFRRLRFLLFFFFRLRFFLFRRLLFFFLFFFRFFRFFFFFFFFFFFRLFRFFLFFRFLLRFFFFRLRFFFLRFRLRRLFFLFLFFFFRRFFFFLLFFRLRFFFFRFFFFLFFRRFFFLFLFFLRRFFFFLFFFFLFRRFLLFFFFFLFFRFFFRFFFFFFFFFFRRFLFFFFLFFRFFFLFFFFFFFFFFLFFFFFFFRFLFFFLFFFRFLFRFFRFRLFFFLRFFRLFLFFLRLRRLFFLFRLFFFFFRFLFFRRFFFFFFFFFFLFLFFFFFFFRFFFFFFLFFRRFFFFLFRFFFFFFLFFFFFLFLFFFRLRFFRFRLFFLFFRFFFFRFLFLRRLFRLFFLRLLRFFFFRFFLFFFLRFFFFFFFLRFLFFFFFFRFFRFLLFFFRFFRFFFFFFRFLLFFRFFLFRLLFRRFLFRFLLRFFFRLFFFFLFFFRRFFLRFFFFFRFFFLFLFFFRLLFFFRFRFFLRFFRFLFFRFFLFFFLFFFFFFRLRRLRFFFFFLFFFLFFFRFRFFFFFLFLFFRFLFRLRLFRFLFFFLFFFFFFRFFFFFFFRFFLLFFRFFFFFFFFRFRFLLFFRLRLFFLRFRFFFFFLFFFFFLFFLRFFFFFFRRLFFFFFLRRFFLFFFFFRFFLFLFFFFLRLRLFFRFLFFRRFFFFFLFLRLFFRLFLFRFFRFFFRLFRFFF +FFFFRFFRRFLLFLFRFFFRFFLLFRLFFFRLLFLFFLFFLFFRRFFFFLRFFFRFLRFFLFFFFRFRFLRFFLFFFRLR +LLFFFFLFLFFFFFLFRFFRLFFRFLRRFFLFFFLFRFFFRLFFFFRFLRFFLLFFRRLFFFFFRFRFLFRLRLFFRLFLRLFFFFFLLFFRFFRLRRFFLFRFFFFFRLFLRFLRLRLFLRRFLFLFRRLFFFFFRFLFLFFRFLRRFFFFFFFFFFFRLFFLRFFFRFFLFFFFRFLRFRLFFRFRLFLRFFLRFFRLRFLFFFFLFLRFFLFFFFFLRFFFRLFRFFRLLFFLFFFFFRFFFLFFFFFRFFRL +LFFLRFFLFLFFFFLFRL +LRLLRFFRFLFFFLFFFFFLRLFFRFFRLLRLFFFFFFFFLFRLFFLFRFLRLRLR +RLLFRLRFFRFRRLLFFLFLRFFRFFFFRFFLFFFFFFFFLLFRRLFFFRFFFRLFFFRLRLLRFFRFFFLRFLRFFFFRLRLLRFFFLRLFRFFLFRLRLLRFRFFLFRFFLFFFLFFFRFLLLRRLFRRFLFLFRLFLLFRRFLRLFRFFLRLFFFRLFFFLLFRLRRFFFFFFFFLFFFFFRFFLRRFFLRFLFRRFLFLRFRLFLFFRLFRRFFFFFRFFLLRLFFFFLLLFFFFLRFFLLRRLFFRFRLFLLRFLRFRFRFLFF +RFFLFFLFRFLRFFFFFLFFRFRLFRFFLRFFFFLFFLFFRFFRLFRLRFFLLRFFLFFRLFRRFLRFFFRLLFFFFFFFFFFFFFFFLRFLFFLLRFRFFFFFFLFFRLRFLRFFFFFRLRFFFFLFFFFFLFFRRLFFRFFFFFRLRLFFFFLLFFFRFRFLFRFLRFLFFFFLFFRLFRLLFRFFFFFFRLFRFFRLFRLFFRFLFFFRFFRFFFFFFFLFFFRLFFFFFFFLFFFLLRRFFFRLFRFFFFFLLRFFRFFLFFRFRFLFFFFFRFFFFLFLRFFFFFLLFFFRFRFFFFLRRLFFFFFFRFLRLFFFLFFFFFLFFRFFFFLFFFFFFRFLFFFRFFFFFFLFFLFRRFFFFFFRRLFRLLRFFRLLFRLFFLFFRFRFFFFLFFLFFFRFFLFFLFFFRFFFRFFFFFRLLRFFFLLFFFRFFFFFFFRFFFFFRFLFLFFFRFFFFFFLFFFFRFFLFFFFFFFFFFRRFLFFLFLFRFRLFFFFFFRFFFLRFFFRFLRFFLRLFFFFLFFFFFFFFFRFRFFFFLFRFLFFFFRLFFFLFLRRFLFFFFRLLFLRFFRFFRFFFLFFFFLFFRFLFFFFFRFFFFFFFFFRFLFRFFFFFRLFLRFLFLFFRFFRRLLFFFLFFFFRFFFFLRFFLFFFRFFLRFFFFFRFFLFRLFLFFFFFLFRFFFFFFLRRLRFLFFFFFLFFFLFFRLRRFLLRFFRFFFLLFFRRLLRFRFFLFFRRFFFLFLFFFRFFFFRFFFFFFFLFFFFRFRLFFFFRLRFLLFRRFFFLFFFLFFFFLFFRRFFFFRLFFFFFFRFFFFFFLLFRFRLRLFLFFFFFFFFFFFFFFFFFRFFFFRFFFFRFFLFFFFFFFLFRFRLFFLFLFFFFFFFFFFFRFFFLFFFLFRRFLFFFFLRFFRRLFRLFFFFFRFFLFFFFLFFFFFFLFFFRFFRLFFFFLFLRFFRFLFFRLFLRFFRFRLLFRFFFRFFFLLFRRFFFFLFFFFLFFRFFFFFFFLFLRRFFLFFFRFLRLFFFLFFRFRFFFFRLRLFFLFFFFFFLFFFFRLFRFFFRFFLFFFLFRRFFRLFLLRRFLFFFFLRRFRFFFLLFFFFFRFLFRLRFFFFFFFFFFRFLFFFFFFRFFLRFFLFRLFLLRFFRFFFLRL +FFFLFLFRFFLRFFFRRFRLFFRFLFFLRL +RRFFFFFLFFFFFFFLFLFRFFFRLLFFFFFFFL +RFFFFRFFLFFFFFFRLLRFFFRRLFFFRFLRLFLRFFFLFRLRFFLRFFRLFRLFLFRRFLFRFLFFLRFRLRLFFFFFFRFFLFLRRRFRFLFLRLRFFFLFFLFFFFLRRFFLRFFFRLRFFLFLRFRLFFFLFRLFFFFFLLRFFLLFLFFFFFFRFFRLLFFFRFRLFLFLLLFFFRFLFFFFFRFFFFFFLFFFFFFLRRFFFFFFLLRF +LRFFRLLFFFRFFRRLLRLFFFRLFFLRRLFRLFFFRRLFFFLLRFFFRFLLRLFFFRLFLRRFFFRFFFFLRFFFFLFFFFLRFLLRFRFRLLRFFFFFFFLFFFLFLFFRFLFFLRFLFFFFFFFFFFFFLRFFFFFRLFLLRRLFRLFFRRLFFLRLFFFFLRFFFFFRLFFFFLRFFRLLFLFLFFLFFRRLFFRFLFLRFRFFLFFFFFFLFFFFFFFFFLFRFLFFFFFFFRFFLFFFLFLFLFFFFLFFFFFRFFFFFFRFFFFRLFFFFFRLFLFFFLFRRLLFFFFRLFRFRLFFRFLRFFFFFFFLRFRFRRFFFFLFFFFRRLFFRLRFFFLFLFFFFFFRLRLRFLLRFLRFFRFFFFFFRLRLFFLFFFFRFFRFFFFFLFFFFFFFFFFFFLLFFFFFFFFRRFFLFFFFRFFFRLLFFLRLFFRFFRFRRRFFFFFFFFFFFFFLFFFFFRFFFFLLLFFFLFFLRFFLFFFFFLRFFFRFFFFFFFFFFFFRFRFFFLFLRLFFFFRLRRFFFLLFFRFFFFFLFFLFRFRFLFFLFFFFFFFFFFRFFFFFLFRFFFFFFFLRFFRFLFLRFRRFLFFLFFFFFFLFLRFFRFFFRFRRFFFFFRLLFFFFFFRFRFFLFFFRFFFLFLFFFFFFFFFFRFFFLFFLFRRFFRFFLFLFRFRFFFLFFFLFFFRFFFFFLRFFLFFRFFFRFFRFLFLFRFLLRFRLFRFFFFFFFLFLFFFFRRFFLFRFFFFLFFFFFLFRFRLFRLFFLFFRLFRFFFLFLFRRFFLFF +FFRFFRLFRFLRRLRFLRFFFRFFFFFFLFLRFFRFFLFRLLRFRFFLLFFRFFRFFRLFLFRFFFLFFRLFRRLFFLFFFFFFFFLRFFFFRLRFFLFFFFFFFFRFFRLRRLFLFFLLRFRFFLRLRLFFFFLRFFLFLRLFRFFRFFFFLFRFRLLFFFLRFFFFFLRFLFRFLRFFFFFFLFLFFRFFRFLFRFLLRRFLFFLFFFFFRFFLFFFRLRFLRRLLFFLRFRRL +FLFFFFRFLLFFFFLLRFFFFFFFLLFF +FFFRLFLLLFFRRLFFLRLFLFFFFFRLRFLFFRFFRLFRLFFLLFLFLFRLRFLRLRFFFLFLRLRLFLRRFLFFFFFRFFFRLFFLLFLFFLFRFFRLFFLFLFRRLLRLLFRFLRFFRFRLFRFLFRFRLFFFFFLRLRFLRFRLLFLFRFRFFFFLFLFFFF +FFFLFFLFLFLFRFFRFRFLLRRFFRFFLRLRFFRFLFLFLFFFFFFFRFFFFLFFFLFRRRFFRRFFFRLLFFFRLLFFFLF +FFFRFLFLRFFFLRFRFFRFLLFFFFLFFFFFFFFRRFFLFLFFFRLRRFFFFFFFFLFRFFFFFLLFRFRFLLFFRFLFRRLRLFFFFRFLRLLFFFRFFLRLFFLFRRLFFRRFFLFFFFFLRFFLFRFFRFFFFLRFLFFFFFFFRLFRFFFRFFFFFFFLRFFFLLFFFRFFFFFLFFFFFFFFLRFRFRFLFFRFFFLLRFLRFFFLRFFLFRFLRLLRRLFFFRFFFLRFFLLRRLFLFRRFLFLRLFFRLFRFFFLFRLFFFLRFFRFFFFFFRLRFFLFRFFLFFLFFRFRFLRFFLFRFFFLRRLLFFFFFFFLLFFFRFRLRFFLRFLRLLFRFFFFFFFFLFRFFLRLFFRFLFFRFFFLFRFRFFFLRFFFFRFLRFFLLRFRLFFFFLFFFFFFLFRFFFLFFRFFLRLRFRFFRFFLFFLRLFFFFFLFFRLFRRLFFLFFFFFFRFFFFFFFFFLFLFFFRLFFLRFRFFFFRFFFFFFLFFRFLLFRFFFFFFRFLFLFRFFFFRFFFFFLFFLFRFFRFFFFLFFFFFRLRFRFFRLFLRFFFFFLFFFFRLRFFFFFLFFFLRLLFFRFRFFFLFRFFLFFFFFRRFFFFLFFFFFRFFLLFFFFFLFRRFLRLFFRFFLFRLRFFFFFFRFLRFLFLRFRFFFFLFFFFFFFRFFFFLFFFRRFFFFFRRLFLFFFFLFFFLFRRFLFFFFLRRLFLLRFRLFFFRLRLLRFFFFFFFRLRFFFFRFFLRFFFFRLFFRLFRLLRFRLFLFFFFFFFLFFRFLFFLRFRFLFFRFRLLRFLRLFFFFRFFLFFFLFFFFRFFFFFFFFFFFFRLFLFFFRFRFFLLFRFFFFFFRLLRFFLFFFFFFFRFFFFFFFFFRFLLFFFFFFFFFRFFLRFLRFLLRLFFFLRFFFFFFFFFFRFFFRLLFRRLFFLRFFFFFFFFRRFFFLFFFLRRFLFFFRLLFFFFFFFFFFLFFFFFFFRFFFFRLLFLFFFRRFFFFFFFFFFFFLRFFFFLFFFFFFFFLFFFFFFFFFFFFFFLFRRFFFRLFFRFLFFFFFRFRFLFFLFFFRFRFLFFFLFFRFLFRFFFFFRLRFFFFFFLRLFFFFFFFLRLRFLFFRFFFFRFLFFFFLFFRFRFRLFFFLFLRFFFLFFFFFFFFLFRFLRLRFRFRFLRLFLFFRFFFFFFFFFFFFFFFFFRLFFRRFFLRFLFFFFLFFFFFFFRRLFFLRFFFFFFFRFLRLRFFLFFFFFFRFFFFLLFFFFFRFRFLFFRLRFLRFLFFFFLFFFRLFLRFFFRFFRFLFLFFLRRFLLFFRLFRFFFFFLRFFFFFLFFFRRFLFFFFFLFFRFFFRRFLFFFFFLFLFRFFFLRFFRFFLFFRFLFFFFLFLRFLFRFFFLRFFRFFFFFFLFLFRFFLRFRFFLLFRRFFLFFFRLFLRFFLFFRRFFFFFLLRFFRFFFFLFFFFFFFFFFFFLFFFFFFRFLRLLFRFFFFFFFRRLFLRFFFFFFFFRLFFLFRLFRLLFFFRFRFLRFLRLFFFFFRLLFFRFFLFRFFFFFFRFFFFFLFRFFFRFRLLFFFFLFRFLRFFFFFRLRFRFFFLFFFFFFFFLLRRLFLFRFLFFFFFFRFFLFFRFFFFFLFRFFFFRLFFLRRFLFRFFLRFLFFFRFRLFFRFLFFFFFFFFFLRFFLFFRFFFFFLFLRFRFFFFFLRFFFFFLFFFFFFRFLFFFRFLLFFFFFLFFFFFFLRFRFRFFFLRLRLFFFRFFFFRLRFFFFFFFFLFLFFFRRFLFLRFLFFFRFFRLFFLFFLFRRLRFLFFFRFFFRFFFLFFRFFLLFFFFFFRRFFFFLLRRFFFRFFFLFLFFRFLFRLLRLLFRFFFRFFFFFFFFFFLLFRFFFFFFRFLRLFFFRLFFFLFRLFFFLFFFRFFFFFRFFFFRFLFFFLFRFFFFFRLRFLFRRFFFFLFFFLFRFLFFFRFFRFLFFLFFFRFLFFFFFFFFFFFLFFFFFFLFFFFFRFLRRFLFFFRLRFRFFLFFRLFFFFFLFFLFFFFFFRFRFLFRLFRFFFFLFLRFFFLFFLFFRRFLFFLFRFRFFRLFFFFLFFFRFFFRFFLRLRLRLRLR +LRFFFLFLRFRFFLRFRLFFFFFFFFLFFLFRRFFFFFFRLFFFRFFRFLFLRLFRLFFLFRFFLFFLFFFRFFRFFFFFRFLFFLFRFFFFFFFFRFFFFFRLFFFFFRFFFFLFFLRLFLFFRFFFFFFRFFFFLFFFFFFFFFFFFLFFLFRFRLFRRFFLRLRFFFLFFRRLFFRLFFFFFFRFFFLLRRLFFFFFLFFFFFFFRLFLFFRFFRLFFLRRFLFFFRFFLFFFFRFFFFFRLRFLLFFFFLFFFRRLFLFFRFLRFLRFFFFFLFFRFFFLFRLFFFLFRFFFFRFFFLRRFFLFFFFFLRFLFFFFFLFFLFRFRFLRLFRLRLFFRFFLFFFRFLFRFRFFLLFFRFRLFRFFFLFRFLFLFRRFLFFLFRLFRRFFLLFRFRLFLRFLRFRFLFFFFFLFFLFRFLFFRRFFFLFLFRFLFFRFFFRFLRRLLFFFFFRFRFFLFLFFFFLRFRLFLFFFFFLRLRLFFFFFRFRFFFFFFFFFRLFFRLRRFFLFFLFFFFFFRFFFFFFFFRFFLFRFLRFRFLFLRFFFLFFFFFLFRFFLFFFFFFRRFFFFFLRFRFFFLLFFRRFFLFFFLFFFFFFLFFRFLRLFFFRRFFFFLLFRLRFFRLFFFLFRFFFLFFLRRLFLFRFFFFRFFFFFFRLLRFFFRFRLFFFLRFFFFRRFLFRLLFRLLRFRLLFRLFFFFFFFLRLFRFLRRFFFLRFRLFRRFLFLRLFLRFLFRFRFRLFFFFFFFLFFFRLFFFLFFFRLFFLRFFRFFFFFFFLRFFFFFFRLFFLFFFLFFFFFFFRFLRFLFFLFFRFFFFRFLRFFRFLFRFFFFFLFFFRFFLFFRFFFRFFFLFLFFFFFFLRFLRFFFFLFFLRFFRFFFRFLFFRLLRRLFLRLFRLLRFFRFFLLFFRRLLFRFFFFRFLLFRFRFFRFLFFFFFFFFFFFLFFFFRFFLFLLRFFRFFLRLRFFLFFFLFFFRRFFFFFFRFFLRFFLRRLLFFFFFFFFFLFFFLRFFFFFRFLFFFFRLRFFFLLFFRFFRFFFFLFFFFRRFLLFRFLFRFRLFLFFRRLFFLFLRFLFRLFRFLFRLFFFFRRLFLRFFFRFFFFLFFRFRFFFLFRFFFRLLFFLRLFRLLRFFFFRFFFFFFFFFFFFRFFFFLRFFLFFRLRFFLLFFFFLRFFRFFFLRLRFFFFFRLRFLLFRFFFFFFRFFFFLRLFFFRFFFFFFFFFFLFFFFFFFRFFLFRFFFFRFRFLFLFLRLFFFFFRFFFLLFRFRFLLFRFRFFFLFRLLRFRFLRLFLFRFFFFLFFRRLLFFRFFFRFFFFLFFRFFLFLFFRFFFFRFFFFFFFLFLFFRRFLFLRFLFFLFFFRFFFFFFFRLRFFFFFFFLRFRLFFLFRFLFRLFLFFFFFLRFRFFFLRLFRFFFFFFFFFFFFFFRFFFFFFLFFFFFRLLFRFRFFRFFLLRFLFFFFFLFFRFFFRFFLFFFFFLFFFFFFLFRFLFLRFFRFFRFFFLFFFFFFLRRLFFFFLRFLFRFFFFLLFFFRFRFLFRFLFFFFRFFFFFRLLRFFFFFFRFFFFFRFFFFFRLFFFFFLFFLFFFFRLFFFFFRFFRFLLFRFFRLFLFFFLFRFRFFFFFFFFFRFLFFFFRLRLRFFFFFLFRFFFFFLFRLFLFLFRRFFFFFFFFFLRLFFFLFFFFRFRFFFFLRFFFRRLLFLRFFLFFFRFFRRLFLFFLRFRRLRLFFFFFFFLFFFLFFRRLFFFFFFLRFFFFFRFFFFFFRFFFFFFLFFFRLFRFFRLLFFFFFFFFFFFLFFFFFFFFLFFFLFFFRRFFFFRFLFRLFFLFFRFFRLFRFFFLLFFFFRFFFFRFFFFFLFLFFFRFLRRFLFFLRFFFFFRLLRFRLFFFFRFFFFFFRFLFLFFLFRLRFFRLFFFLFLFFRLFRFFFRRLFFLFLFFFFFFRRFLRFLFRLFFFFFRRLFRLFFFFFLLFFFFRLRLFRFFFFFFFFFFRFLFFFFFFRFFFFLFFRLLFFRFFFLFLRRFFLFFFFFRFFFLLFFFFRFRFFLFFLRFFRLFFFFFLFFFFRFFFLRFFFFFFFFFRRFFLLFFRRFFFFLFLRLFFRRLLRF +FRRLLFFRFFFFLRFLLFRFFFFLFRFFFLRFFFRFLFLRFFLRFRFFFFLFFLFFFFFFLRFFFRLRFFFLFFFFRFFFFRFRLRLFFFFFFFFFFFRFLFLFFFLFRFLFRLRFFFFFLRFRFLLRFFFFFFFFFRFLFFRFFLLFRLFLFRFFFFFFFFFFFRFFFFFFFFFFRFLFFFFFRLFLRLFFFFFRFFRLFFLRLFFFFFFFFLFFFFFFFFFRFLFFFRRFFFLLFFFFLRFLRRFRLLRFFFFFFFFFFRRFLFFRFFFFFFLFFLRLFRLFLRFFFFFFFFRLLRLFLRFRFLFLFRFRFFFFRFFLRFFLFFLFFRLFRFRFFFFLFFRFFFFFFLFLRFFLRFRFFLLFFFRRFFFLRLFFRRFFLLFFRLFFFFFFFFFLFFRLRFFLFFFFRLFRLFFRFFFLFFLFFFFLRRLRFFRFLFRFLRFFLFFFFLFRFRFLFFFLRFFFFFLRFFRLLRFLFLFRLFRFRLLRFFLRLRFFFFFRFFFFFFFFFFFFFRFFFFFFFLFRFFLFLRFFFFFFLFFFFFFFFRLRFRLFFLRFFFFRFLRFRLFLRFFFRFFFRLLFFFFFFFFLFFFFFFFFFFFFFFFLFLFRRLFLFFFFLRRFFFRFFLRFFFLRLFFRLRFFFFFLRFLFLFFLRLRFFFFRFFRLFFLFFFFFLFFRFFRFFFFFFFFFFRFRLFFLFFFFFFRFLFRLFFFFFFFFFFRFLFRFFFFFLLFRFLFRRFLFFFRLFFRLFFLFFFRLFFLRFLFRLFLFFFFRRFFFFFFRFFFFFFRFFLFFRFFRFLRLFFFFFFLFFFFFFFFFFFFFFFFFLRFFFFLLRLFRRFFFFLFFFRLLFR +RLFFFLFFLFLRLR +FFFFFLFFFLRRFLFLFFFRFFRFFFFFRFFFFFFLRFFRLFFFFLFFLFRFFFFFFFFFFFFFLLFFFFFFRRFFLFRLFFFFFFFFFFFFFFFFRFFFFFRLFFFLRLFFFFFFFFRFLFFRFLLRFFFFFRRLFRRFLLFRFLFFFFFFFFFFFFRFLLRFLFFLRFFFFFFLFFFRFFFFFFFFFFRFFFLLFFRRFLRLFRLRFLFLFFFFRFFFFRFFFFLFFRFLLFRFFLFRLFFFRFFRFFRLFFFLFLRRFLLRFRLRFFFFLFFFFFFFFFFLFFLRLLFFRRFFFFRLFFRFFFFRFLFFLFFFFFFLFRLFRFFFRLFFFFFLFLFRFFFFFFFFRFLFLFFFRFRFLRFFFFLFFFFFFFFFFFFRFRLFFFFFFFFFFFRFFFFLFLRRLFFFFFFFRLFFFLFLFRRFFFFRLFFFLFFFFFRRFFLFRFFFFRLFFFFLFFFFFFFFLFFRLRRFFFFFLFFFFFFLFFFRLRFFFFLFRFFFFFRFFFLLFFRFFFFFFFFRFFFFFFFFFFFFFRLLFFFLFFFRLRFLFRLFFFRLFRFRFFFFFLRLFFFFFLFFRFFFLFFFFFLRFFRFFLRFFFLLRFFRLLFRFFRLFRLFFLFFFFFLFFFRFRFFFLLFRRLFFFFRRFFLFFLFRFFFFFFFRFFLFFRLFLFLFRFFFFFLFRFRFLLFFRFFRLFFFFFRRFFFFLFFFRRFLLFFFFFRLLFFFFFFFRRLFFLFFLFRFRLFFFRFFFFFFFFFFLRFFFFFFLFLFFFFFFFFFLRFFFRFFFFFFFFRFFFLFFRFLRFFFLRFLFRFFLRFFFFLFLRRFRFFFFLFFFFFFFFFLFFFFLFFFFFRRLFLFRFRFLRLRLRL +FLFLRFLFFFRLRLLRFLFRLFFFFLFRRFFLRFFFLLRFFRFLFFFRFFLFFLLRRLRRLLFRFFRFFLRFFFFFFLFLFRFLLRFRFLLRFRRRFRFFFFFRLRLLRFRFRLLLFLFLRLFRFLFFRFLFLFFRFFFLFFRFRFLRRLLFRRFFRRFFLRLFFFFFFLLRFFFRFFRLRFLRFLFFFF +FRFFFFFRLRFFLLRRRFFFFFFFRFFFFLFRLFRFFFFLLLRFRLFFFFLLRR +FLFRFRFFFFFFFFLLFFRLRLFFFFFFFFFFRFRFFLFFRLLLRFFFFFFFFFFRRFFFFLLFFFRLFFRRFLFFLFFFRFRLFRFFFFFLFFLRFLFFRFLRFFFFFFFFFFLFFLFFLRFRFLRFFFRLFRFRRRFFFFLFRFFFFRRLFFFFFFFFFLLFFRFFFLFFRFFFRRLFLRFFFFRFFLRFFFFFLFFFFRFFLFFFFFFLLRFFFFRLFLRFFRFLFFRFFRFLRLFFLRLFFFFFFFFLFRRLFFFLRRFLLFFLFRFLFFFRFRFFFFLFFFRLFFLLLFLFFFFRFFFFRLLRFFFFFFFRFFFFFFLFRFFFFLFFRFLRFRFFRRLFRFLFFRFFFRLFLRFLFRLFFRRLFFFFFLLFFRRFFLRLFFFLFRFFFLFFLFFLFRFFFRFFFFRLFFFRFFFLFRFRRFLLFFFFFFLFRFLFFRFFLRFLRFFFFRRFFLLFFFFFFFFFLLRFFRFLFRFLLLFFFLFFLFRFLLRFFFFFRFLLFRFFFFFLRFRFFFFRLFFFRFFFLFRFFLRFFFLFLFFFRFLRFFFRFLFFRFFLFFFLRRFRFLRLFLFRFLFFFFLFFFFFLRRLLRRFFFLFFRFRFFFFFFFFLRFFLFFRFLFFFRFFFFFLFRFLLRLFRFFLFRLFRLRFFFRFLFFRFFFFRLFLRFFLFRLFLRFFLFFRFRFRLFFLFFLRFFFFRRFFRFFRLFFFFRLLFRFRFFFFLLRRLFFLFLRLRLFRRLFFFFFRFFFFRFFRLFFFLFFFFFFFFFRLFFLFFRFFFLLFRFFRFLFFRFFFRFFLFLRFFLRFFLFRFFFRFLFFLFFFFFFFFFFFFFFRFFFLFFRFFFLFFFLFFFFRFRFLFRFLRFFRLFLFFRFFFFLFRFFFFFFRFFFFRLFFRFFFFFFFFRFLLFFLRFLLFRFRFLFFFFFLRFLRFFFFLRLFFFFFFFFLRLRFFFFFRFLFFFFFRLFFRFFLRFFRLL +RRFLFRFFFRRFLRLLRFFLFRFFRFLFFFFRRFFFFFFFFLRLRL +FFFFFLRRLFFFFFFLFFFFFFRLFRFLLFFFRRFFFFFFFRLFFRLFLFFFFFLRFFLFFRFLRFFFFFFFRFFFLRFFFRFFLFFFFRFFLFFLFFFRFFRLFLRFLFFLFFFRFRFLFFFFRFRLLFFFFFFRFFFFFFFRRLLFLFRLFLRFFFFFFRFFFRLFRLFFRLFFFRLLFRFLFFFFLLFRRFLRFLRFLFFLFFLFFRFFFRFFFFFRFFFLRFFLFFRFFFFFRLRFLRFFFFFLRFFFFLFFFFFLRRLLRFRLFFFFLFFRLLFLRFFRFLRRFLFFFRLRFLFRLLRLFRFFFFFRFFFFFFFFFLRLFFFRFFFFLLFRLFRFLFFFFLFFRLRFFFFRFLFLFRRLFFRFFLRFLRFLFFFFFFRFFFFFFFFFFFFLFFFFFRFFFFFFFFFRFFFFFLRFLFLFRFFLFFFFFRFFFFFFRFFFFFRFFLFFFLFFFRFFFRLRLFFLFLRFFLFLRFFFFFLRFFFRFRFFFFFLFLFRLFFFFRFFRFFFFFFLLFRLLRFFFFFRRFFFFLFFRLRFLFRLFFFFLLRFFRFFFRFFFFFFLRLRFLFFRLFFFFFFLRFRRLFFFRFFFLLFFFFRFFLFRFFFFLLFFFFFRFFFFFFLRFFLFFRFFRFFLRFRFFFFLFLFLRFFFFLFFFFFLFRRLFFFLFFRLFRLFFRFFRFFFFFFLRFLLFRFFFRFFFFFFFFFLFLRFFLRLFFFLFRFFRFRLFLRFLLRFRFFLLFRFFFFLFRFLRFFFRFFFRLFRFFFFFFLFLRRLFLRFFFFFFLRFLLRLRFLFFFFFFRFFFRLLRFFRFFFFLFFFFFRFLFFFFFRFFRFFFFLFFFFFFFFFLFFLRFFRFFFFFFFFFFRRLLFLFFFFFFFFFRFRFFFLFFFFLFRFFLFFRFRLFLRFFFLLFRFLFFFRFFLFRRFFFFFFFFLFFFLFRFFFF +FFFLRFLFFFFFFFFFRFFFFLFFRLRFFFFFLRLRRLRLFFFFFFFRFFFFRRRFRLLRLFFRLRLFFRLFFFRLFFFFLRFFFRFLRLFRFFFLLRFFFRLLFFFRFRLRFFFFLFFRFFLRRLFFFFLRRFFFFFFFFFFLFFFFRLLFFRFFFLFFFFLRFFFFFFFRFFFLFFFLFRFFFFRLLFLLFFLRFRFFFRFLLFFLFFFFFFFFFFFFFFFLFRFFFFFFLLRFFRFFFFFFFFFLFFRLFFRLLFRFFFFLFFFLRFLRRFFFFFRLRFFFLFRLFFRFFFFLFFLRFFFFLFRFFLFFFFFFRFFLRRFFLLFFFFLRRFFFRLLFFFFFFFRLFFRRFLFRFLFRFFLLRFLLRFRLFFRRLFLRFFFFFFRFFFLFLRLRFFFFFLFFLFFFRFFRFLRLRFLRRFFFFLFFFFFFLLLFFRFLLFFFFFFFFLRFFFFFFRFFFLFFLRFFFLLFLFFFFFFFRFFFLRLLFFLRRLFFFFFRRLFFFFFLRFFFFLFLFRFFLFLFFRFLLLFFFFFFFFRRFLLRRLFFLFFLRFFFRLFFLFFRFLFRFFLRLFRFLFFFFFLRFLFLRLFLFRFFRFFFFFFFRFFFFFFFFFRLFRFFFFFFFFLRFFRFFFFRRFFFRFLFFFFFFLRFLFLFRFLRRFFFFFRLFFFFFLRFFFFFLFFFFFFLRLRRLFFFRLFRLLFRFFFFRLRFFLRFFFFRFFFRLLRLFLFRLFFRFLRFFLFRFFFFFFLRFFLRFLLFRFFRRLLFFFFFFFRLFFRFLFFFRLFFLFRRFFFFRFFLFFLFFFFRLFFFFLFRLFRFFFRFFFFRLFFFRLLFRLRL +FRRFLFFLFFRFFLLRRLLRFFFLRLRLFFLLRFFFRRFFFLFFFFLRFFFRRLFLFFRFFFFRLLRFLFFFFRFFLFLFFFRFLFRLFFFFFFFRFFLRFFRFFLRFFFFRFLFRFFFFLLRFFRFLLFFRFLRFRFLFLFFRFFFFRFFLLLLRRFFRRLFRFLFFRRFLRLFFFFFFLFFFRLLRLLLFFRFFFLFFRFFFLFFLFFFRFFFRLRRFFRRLFFRLFFFRRRFFFRLRRLFFFLRFLFRFLFFRFLRLRFFFRFLLRRLLLRRFLLFRFFRFFRFFRLFLFFFLFLFRFRFFRFLLFRFFLFFFLFFFFFFRLLFLFRRFRFLLFRF +FFFFLFFFRFFRLFRFRLFLFLRFFRFRLFLFFFFFLFFFLFFRFRFLFFFRRLFFFLFFLRFFFFRFFFFFFLFFLFFFFRFRFFFLFFFFFFFFFFFFFLRFRFFRFFFLFRLFFFLFFFRFFFFFFFFLFRLFFLFFRFFFRFRLFFFFLFLRFFRRLFRLFLFFFFFFFRFFFLFRFLFFFFFFFRLFLFLRLFRFRFRLFFFFRLRRLFFLFLRFFFFRLFRLFLRRFFLFFFLFFFLFFFFRFRFFFFLFFFRRLFFFFFFFFFLRFFFLFFFFFFFFFFLFFFLFRFFFFLRFFRFFRFFFLLFFFFFFLLRRFFRLFFFRFRFFFLFRLLRFFFRFLFFFLFFFFFLRFRFFFFFFFLFRFLFFLFFFRFFFFFFFFFRFFRFFFLFFFFRLRLRRFFFLRLLRFLFRFFLFRFFFLFFFFFFFFFLFRFLFRLFFFFFFRFLFRFFFFFFFFRFFLRFFFLLRFFFFRLLFFRFLRFFLRRFFRFLFFFFFFFFFFLFFFRFRLLFFFFFLRFLFFRFFFFFFFRFFFLFFRFFLFFFFFFFFFLFFRFFLFRLRLLRFRFLFRFFLRFFFFLFFLRFFFFLRFFRLFFFLFFRRLFFFFLRLFFFFFRFFLFRLFFRFRLFFLLRRLFFLFFFLFRRFFFFFFFFFRFFFLRFRFLFFRLFFFFFFLLFRFFFRLFFRRFLFFFLFLRFRFRFLFRFLFFFFFLFFFRFFLRFFFFFLFLFFFFFRRFFFFFLFFLFRRLLFRFRLFFFFFFLRFFLFRLRLRFFFRFFFFLFFFFFFFRFFFFFFFRFLFRFLFRLLRL +FFLFFRFFLFLFFRFRLFFLFFFFRFFLRRFFRFLLRRFLFFFFFRLFRLRFFLFLFLRFRFLFFRFFFFLRRFLRLLRLFFFLRFLFRFLFFFRFFRFFLRRFRLLFFRFLLFFFRLFFFRFLRFLRFFLRFFLFLLRFFRFRLRLLRFFLRLFFFFFRFFRLRLRFRFFLFFLFRRFLLRFFLFFRLRLFRLFRRFFLLFFFFLFRRFFFLFRLRFFFFLRRLLFFRLLFRRFLRLFFLRRFFRLLRFLRFLFLRLLRLRFRRLF +FFLFFRFFFLFFLRFRFFFRFRLFFLFFFFFFLFFLFFRRFFFFRFFFRLFFRFFLFFFLRFFLFFFFFFRLRLFLFFFFFLLFRRFFFFRFFLFFFRFFLFRFFFFRFFFFFFLFRLFRLFRFFFFFLFLFFFRFLFFRFFFLFRFRLFFLFFFFFFFFFRLFRLFFFFFFFFFFLFFFFFFFFFFFFRFFFFFFFRFFLLFFRFFFFRRFLRFLFLFFRFFLFRFLFFRFRRLLFFRFLRLLFFFRRFFFLLFFRFFLFRFFFFFFRFFFLFRFFFLFLFFRRLFFRFLFLFFRLFRFFLFFRFLLRFFLRFRFFFFLFFFRFFRFLFRFLFFFFFFFLFFFFFFFFFFFFLFLFRFFLRRFLFFFLRFFRFRFLFFRFFLFRRLFLFFRLLRLRFLRFFFFFFLFFRRFFLFFFLFFFFFRFFFLLRRFFLRFFLFFRLLFFFFRFLFRFLLFRRFFRFFFLFFFRFFFLLFFRFLFFRFLRFFFRLFFFLFRFRFFFFFFLRFFLRLFRFLFFFFFFRFFFFFRFFLLRFFRFFRLRLFFRLFFFRLLFFFFFFFFFFFLFFFFFFFFFFRRLFFLFFRFRFFFFFFFFFLFFLFFRRFFLFFFRLFFLFFFFLRFLRLFRFFFFLLFFRRFFLRFFFFRFLRFFFFLFRLFFFRFFFLLFRLRFFLLRFRLFLRFFFRFFFFRFFFFFFFFFLFLRFLRFFLFFFFFRRFLFFFFFFLFFFRRLLFFRFFFRRLFFLFFFFFFLLFRFFLFRFFFFRFLFLLRRFFRFFFFFLRRLLFRFLFFFFFLRFLFFRFFRLFFFLFFFFFFRFRFFFFLRFLFFFRFLFFFFFRFFFFFFFFRFFFFRLFFLRFFFLLFFRFFLFRFFFFFLFRFLFFRFFRFRLFFFFFRFLFFFFFLFFLFFFRFFFFFFLFFFFFFRLRLFLRFLFLFFRLRFFFRFFFFFRLRLFRRFLLFRFLFFFFFLFFRFFRLFFLFLLRRFFRFRLLFRFFRFFFFFFFFLLFFFRRFFFFLFRFFFRFLFFFLLFFRFFFFFFFLFRFLFFRFFFLRRFLLFRLFLFFLRFFFFRFFRFFFFLFFFFFRLRLRFLFFFFRRLLFFFRLFLFFRFFFFFLRFFFFLFRRLFRFLRFFLRLFFRRLFRLFFRFFFRLFFLFLRFRLLFRFFRLFLFFFFFLRFRLFFFFRRFLFFFFFRLFLFRFRFFFLFFLRLFLRRFRFFFFRLLFRFFFFLFFRLFLFFLFRRLFFFRL +RRFFFRFFFFFFFLFLFLRF +FFFFFRFLRFLLFFLFRFFRLFFFFLFLFRFFRLRRFLFLFFFFFLFFRLRFLRLFFFLFFLRFFFRL +LFLLRFFFLRFFFFLFFRFRFFFFLFLRFFLRFFFFFFFFRFFFFFFFFFFLFFFFLRLFFFFFFFFFRFFFRLFFFFFFFFRFRFFFLFFFLFRRFLFFFFFLRFRLFFFFLFFRLFLFFRFFLFRFFRLFFFFFLRRFFFFFFFFFRFFFFLRFFFLRLFLFFRFLFRFRFFFRLLFFFFLRLRFFFFFFFFF +FFLFLFLRFRLFFRRFLRLLFFFLFFRRFLRFFFFFRFLFF +RRFLRFRLRRLFFFLRFFFFFFRRLFLFFFRFFFFRRRRFLFRFFFFLFLFRFRRLFRLRFLFFFLRFFFFRFLFLFRLFLFRLLLFFFFLRRFFFLFLRFLFRFFRFFLFFFFRFLRLRFFFFFLLRRRLRFFFFFRLFFFFRLLRLFLRFRRLFLFFFFFFFFFRFFLRFRFFRFFFFRRLLFRFRRLFLRFRFFLLRFLFFLRFLFFRRLFLFFRFFFFFFFFRLLLRF +LFRFFFFRFFRLFRFLFFFFFFLFFFFFFFFFFFFFLLRFFFLRRFLFFRFLLFFRFFFFFFFRFFFFFFFFFFFFRFFFFFFLFFFFFFLFRLRFFFFLFFRRFLRFLFLFRFFFFRRLFLFRFLRFFFFFFRLLFFLFRFFFLFFRFFFRLRRLFLFFFFRFLFFFFLFFFRFFFFRFFFFLFFLFFFFFFLRLFRFL +FFLRFFRFFFFFFFFLFFLFRFLLFFFRRLRRLLFFRLFLRRFRLFFRLFFRRFLLFRFLFFRFLFRRFLFLFFFFFFFFLLFRFLFRFFFFLRRFLFRFRFLRFLFFFFFRLFFRLFFFLLRLRFRFRFLFFFFFFLRLFRFFFRLFFLRFRFLRFLFLFFFFRFRFFLFRFLLFFRLRLRLFRFRLFFFLFFRFLFRFLFFRFFFLLRRFLFFLFFFFFRRFFLFFFFRLFRFLRLFFRFFLFFFFFLFFRRFLFLFRFRFFLFFFFFFFFLFFLRFFFFLFRLRFFLRRFFFFFFFFFFRRFLRFLFFFFFLFFFFFFLFFRLFFFRFFLFLRFRLRFFFFFFFFFRFLFFLRFLFRLFFFLFRRLRFFFFRFLLFFFRFLFFLRFRLFRFFFFFLLFFRFFFLRLFFRLFFFFLRFFRFFFFFFFRLRLLFRRLRFFFRFFFLFFFFFFFFFLFFFLFFFFRFFFFLFFRLRFLFLFRFFFRFFRFFFFFFFFRLLFFLRFFFFFFRFFFFLRLFFFFFLFFFFRFFFFLRRLFLFLFRLRFFFRLRFFFRLFLFFRFFRRLFLFFFFFFLFFLFRFLFFRFFLFFFFLLFRFRFFRFFFFLRLLFRLFRRFFLRFFFRLFFFRFFFFFFFFFFFLLRFFFRLFFRFFFLFFFFFFLRRFLFFFFFFFFFFLFRFLFFFRFFLFRFFFRFFFFRLLFFRRFLLFFFFFFFFFFFFFFFFFFFFFFFFFLRLFFFFFLFFFRFRL +RFFFFLFFFFFFFFLFFLFFFRFLFRRRFFLLFFFFLFRFLLFF +FFFFLFFFFRFRFFFFLRFLFFFFFFFFFFFLLFFFFFFFRRFFFFFFLRFFLFFFFFFLFFRFFLRFFRLFLRFRLRFFRFFFFFFFLFFFFFFFFFFFFFFLLRLFFRFFFRLLFLFRLRFFFFRFFFFFFRFLRFRLFFRLFLFFFFRLRFFFLRRLFLFRLFLFRFFFFFFRLFLRFFFFFFFFRFFFFFFFFFFFFRFLFFRFLFFRFFFLFFFFFFFLFFFLFFFRFLFFRFFLRFLFRFFLRFFLFRRFFLLFFFFFFRRLFRFFFLFFFFLFFRFFFFFFRFRFLFLFFLFFRFLFLRFRFFFFFFFFFRFRLLFFFFFLLFRFFFLRRFLLFFFFRLFFFFRRFFLRLFFFFRFFFRLLFFFLFFFFRFFFFLLFFRRLFFFRFFFLRFLRRFLFFFLLRRLFFFLRFFFFFFRRFLFRRLFFLRFFFFLLFFRFFFLFFFFFLRFFRFFFRFLFFFFFFFFRFLFFFRFFFFRFFFLFFFFLLFFRFLRFFFLFFFFLRFFRFFRFFLLRLRFFRFLRFFFFFFFFFFFLFFFLFFLRFFFRRFLFFFLRFFRFFRFLLRLRLFFFFRFLFFFLLRRFFFFFLRFFFFFFRFFFFFFFFFFFRFFFLFFFFFLFFLFRFFFFFLRLFLRLRRFFFFFLFRFRLRLFLLRRLFRFRFFLRLFLFFLFRFFLRLRFFFRLFFFFFLFFFFFFFFLLFRRFFRFFFFLRRFFFFLFRLFFFFFLRRFLFFFFLFRRLLFFFRFFRFFLFFFFFFFFFFFFFLFFFFFFFLRRLFLFRLFFRFFRFFLFFFFFFFRFFFFFRLFLFLRFFFFRFFFFRLFFFFRLFFFFFLRFFLFFLFRFFFFLFFFFFFRFLFRFFLLFRRFFFFFFRFFFRFLFLRFFLRFFFFRFFLLRLFFRLLFRFFFFFRFFFFRFFRFLRLLFFFFFFFFFLFFFFFF +RLFLFFFFFFLFFFRLRFFFLLFRRLFFFFFLFFRLFFFFLFRLLRFLFRFFRLRLRLRL +FFFRFFFFRLLFLRFLFLRFFLFRFFFFLLFFFRLR +RLLFFFFFLLRFRFRFFRFRLFFF +LFFFFFLFFLFFFFRFLLFFFF +FFFFRFFFFFRFRFLLFRFFFFFFFFFFRFRLFFFLLLFFFRFFLFLFRLRFLR +FLFRFLFFRLFRFRLLRFFFFFFFFLFFFFFFFLRFFFFLRFFFRFFLLRRLFRFFLLFFFRRLRFFRFLFFFLRLFFRFFFFRRFLFLFLLFLFFLLLFRFFFFRFFFFFRRFLFFFLFFRRFFFFLFLFFLFRRFFRLFLFFFFRFFFFLFRRLFLFFFFFFFRFFRLFFFFLFRRFFLFRFFRRFLLFLRFFLRLFRFFRLFFRLFFFFFFLFFLRLFLFFRRFFFLRLFRFFFFFFFRRRFFRFFFFFFFRLFFFLFRFFRFFRFFFFLLFFFRRFFFFLFFRLLFFFFFLFRRFFFRRFLLRLLRFFLFFFRFFLLFRFFFFLFFFLLLFLFLFRFRFLLRFFFF +LLLFFRFLRFFFFFFFFLLFRFFFLFFFFFLFRFLLFRFFFFFFFFRLFLFRFFFLLFRFLFFFFLFFRFFFFRRFLFFFLFFFFFLRFF +FFFFFFLRFFFFFRFFFFLFFRLFFFFFFLFFFFRFFFFFFLLFFFRFFRFLFFFRFLRFFFFFFFRLFRLRRLLRFFRLFFLFRFFFLFFFFLFFLFRFFLRRFFFFFFFFRLLFRLRFRFFFFFFFFFRLFLRLFFLLRFRFLFRFFFFFFRFLLFFFLFLRRFFRFFFFLFRRFLRLFFFLRFFFLFFFFRFFLFLFFFRRFFLFLFFFFRRFLFFRFLRLRFRRLFFLFFFFFLFFFFFFFFFFFFLFRFFRLRLLFFFLRLFFFRFLRRLLFFRRFFFFFRLFLFFRFLFFFFFRFFRFFFRLFFFFRLFFFFFFLFLFRFLRFLRFRFLFFFFFRFFRLLFFFFFLFFFFFFFRFFFLFFRFFFFRRFLFFFFFRLFRLFLFFFLFFFFRLFRRLFFFFFLRLRLRFLRRLFFFLRFFLLRFLFFFFRFLFFRRFLRFFLLFRFFLFFRFFFFRLLRRFFLFFFLFFRRFFLRFRLFLRFRFLFFFFLRLFLFFFFFFRFFFFRLLFFRRFFFFFFFFFFFLFFFFFFFFLFRFLFFFLRRLFRFRFLLRFFFFFFRLFFFFRLRRLFFFFLFFFFFLFFFFFFFRFFFFFFRFFLFFFFFRLFFFFFFLRFLFLFRFFFRFLRRLFLFFFFFFFFFFFFFLRLFRFFLRLFRFFFFFFLFRFFFRLFFRFLFFRLFFFRFLFFFRLFFLFFFFFFFRLRFRRLFLFFFFFFLRFRFLLRLRFFFFFLFFRRLFRFFFFFLLRFFFFFLFRLRLRL +LRFFLFFFRFFFFFFFFFFFRFFFLRRLFFFFFLFLRLFRLFRLRFFFLRLRLFRLFFFLFLFFRFFRFFLRFFRLFFRFLRFLFFFRLFRFLFFFFF +FFRRFFRFFFLRFLFFFFRFFLLFFFFFFFLRFFRFRFFFLFFLFRLRRFRLLFFRLFRFFFLFFFLFFRFLRLRFFFRLFFFLFLFRFRFLFRLLFLRFRFFLFFLFRFFLRRFFFRLFLLRFFFFFFFRLFFFRLFRFFLRFFFFRFFFLFRLRLFFLRFFLRFRFRFLFRLLFFLRRFFFLFFFLRLRRFFRLFRLLFFFFRFFLFRLRFLLFRLFRFFLFFLRFLRFFFLRLFFRFFRLLFRFFLFRFLLRRLLRFFRFFFFRRLLFFFFFLRLFRRFFFFLFLRLRFLFFFLFFRFFLRFFLFFRFFLLFRFLFRRLFRFF +FRRFFFFFLLRFLRLFFRRFFFFLLRFRFFFLLRRFFRFFLLFLFRFFFFRLRLFRLLRFRFRFLFRFLRFRFFLFRFRFRFFFRLLRLFRFFRFRFRLRFFRLFFRLRLRFFRFRRRLFFFRFRLRFFLRLRFLFLFRFFFFFRFFFFFFFLFRLFFRFLFFLFRFFFFRFFRFFFLFFFRFFFRFFLFFLRLLFFLFRRLFRLFRFFFLRLFRFFRLRFRLLFFRLLFRRFFFLFFFFFRFLLLFFLL +FRFFRLRRFFFFFRRF +FFLFFFFRFFFFFFRRLRFLLRFFLFRFFLFFFFFFLFFRFRFRLFFRLLFFRFLLFFFRFLFLFFRFFFFFFFFFRLRFRLFFFFRLFRFLFFFFRFLFLLRRLFFFFRFFFFFFFFFFFFRFFFLFFLFFFRFFRFFFFFFLRFFLFFFFFRFFLFRRLFFFLFFLFLRFFFFFRFFLRRLRLFFFLRLLRLRFFFRFFFFLLRFFFFLFFFRFLRFLRFFFRLFFFLRRFLRFFFFLRFFFFLFFFLRFRLRLFFFFFLFFFFFFFFFLLFFFLFFLRLRLLRLFLFFLFFRFFLFFFFLFFFFFFFFRFFRFLFRFFRFFLFRLFFLFRFFLRFFLFFFLLFFRFFLRFFRFRFLFFFFLLFLFRRFFRFFFFFFFFLFFFRFFFLFFFFLFFFLLFFFFFFFFFFFFFFFFFLFLLRFFFFFFFFFRFFFFFFRFFFLFFFFFFFFFFRFFLFFRFFLFLRFRFLFFFFFFFLFFLFRFFFRLLRFFLFLFFFFFFFFFFFLFFFFFLFFRFFRLRFLFLFRFFFLFFLFRFRFFFRFLFFLFFFRFFFFLRRFFLLFFRLFRFFFFLRFFFLLFRFFLFLLFFFFFFFFFLFRLFFFLFFFRRFFFFFRFFLFFRLFLFFFFFFFFFLLRFFFFLFFRFFRFRLFRFFFFLFFLFFFFFFRFFLLFFFRFFFRLFFRFFFFFFFFFFRFFRLFRFFFLFLFFFFFFFRLFFFFFFFRFLFFLRRFLFFFFFFFRLRLFFFFLLLFLFFRLLFFRFLFRFLRFFFFL +FLFFRFRFLFRFFLRFLFFFFFRFFFLFFRLLFRFRFLFFFFFFFFFFFFFFFFFFLFFFLFFFFRFFRLFFFFFFFRLRLRFFLRFFFFRFFFFFLFFFRFFRLLFFRFFFFFFFLFFFLRLFRRFFFFLRFFLFRFFFFFFFFFFFLFRFFFFLFRFFLRFLFRFFFLFFLFFFFFFFFFFRFFFFRFFFLFFFFRFFFFFRLLFFFFFFFFLRLRFFLFFFRLFLLFRRFFRFFFLFRFLFFRFFFFRLRLRFFFFFFFFFFFLFFFFFFFFLFFFFFFFFFFFFFRFFFFFRFRRFFFFFFFRFFFLFFFFFFFFFFFFLLRRFFFFLFFLFFFFRFLFFRFFRFLFRFFLRFLRRLFFFFFFFFRLFFLFFFRLLFFRRFFFRLFFRFLFRLLFFFFFFFFFFFFFLFFRFFFFFFFLFFRFRRLFLFLRFRFFFFFFLFLRFRFLLRFFRFFFRLFFFRLFLFRFFFFFRLFFRRFFFLRLLRFFFRFLRFLFFFFFFLFLRFLRFFFFRFLRFLFFLFFFFRFFFFFRFLFFFFLRFFFFFFFLFLRFFFFFFLFRFRFLFFRFFRFLFFFFLFRFRLFLRFFFFRRFLFFFFLRFLFFFLLFFFFFLRLFFFFFFLFRRFFLLFRFFFFFLRFRFFFLLFFFFLRFFFRFFFFLFFFFFFFRFFFFFLFFFFLRRLRFLFFFFFFFFRLFLFFFFFFFRFFFFFFFFFRFFLLFRLRRFFFRLFLFRFFRFLFFFFFLFLFFRLFRFRLFFFFRFLFLRLFRLRFFRFFLFLFFFFFFFLFFFFFRRFFFFFFRFLLFFFLLRFRLFFFFLRFFFFFFFFFRFFRLRLFLFRFFFFFFFFRRLRFLFFFFFFFLRFLRFFFFRFFFLLFFFFLFFFFFFRFFFLFFFFFFFRLFFRFFFFFFFRLFFLRRFFLFFFRFFFRFFRLRLLFRFFLRLFFFFFFFFFLFFFFLRFRLFFFFLRFFFFFFFFLFFFFFFFFFFFLFLRFFFRFFLLFFRRLFRFFRLFFLFFRFFFRFFFLLFFRFFFLRFRFRLRFRLFLFLFFFFFFFRFFRLRFFLLFFFFRFLRFFFFRLLRFFFFFLFRFRLRRLFFRFLLFFFFFFFFLFLFRFFRFRLFFLFFFFRRFFFFLRFLFLFFFRFFFLFRRFFFFFFFLFFFFFFFFLRFFFRLFFRFFFLFFRFLFLFRFLFFRFLFRFFFFFLRFFRFRFFFFLFFFFFRLFFRFFFFLFFRFFFFFFLFLRLFFFLRFFRLFRFRRLFLRLFFFFFFFLFRLRFLFRFLFFRLFFFLFLRFRFFLFFFRFFFFLFLFRFFFRFFLFFFRFRLFFRFRFFFLFLFFFFRLFFRLFFFFFFRFLLFRFFRFFLFFFFRFFFRFFLFFFLFFLRLRFFFFFFRFLFLFFRLRFLLFFFRFFRFFFFFFFFLLRFRLFFFLFFRFFLRFRFLFFFLFFLRFFLFRFFFRFRLFFRRLFFLFLRFRFFRFLLRLFLFFRFFFLFFRFFFRFFRLLRFLRFRLLFFFFFFLFFFLFLFRRFFRLRFFRLRFFLFFFFRFLLFFFFFFRRFLFFFFFRLFRFFLFFFFFFLFFFFFFLFFFRFFFFLFRLLRLRFFRFFFFRLFLFFLLFFFRLRLFFFFFFLFFFFFFRLFLRFRRRFLRFFLFFFRRFFLFFFFFFFFFFFRFFFFFRFFRLFRLLFFFRFFFFFLLRRLFFRFFFFRFFLFFFFRFFLFFLRLLRFLFRFRFLFLRFRFFFFFFFFLFFFFRFFFLRFFFFFLFRFFFFRFFFFRRLLFFLFFFFFLLRRRLFRFFFFFLFFFFFFFLRFFFFFRFFFFFRLRFFFLFFFFLFFFFRLFFFRFFFFLFFFFRFLFRRFFLRLFRFRLLFRRFFLLFRLFLFFFFFFLRFFFFFFFFFRFFFFFFFFFFFLFLFFFFRLFFRFFFFFRFFFFFLFRLFFFFFFFLRLFLFRFLRFFFFFFFFFFRFFFFFFFFFFRFFFLRFFLFRLFFRLFFFFRFLLRLFRLFFFFFLFRLRLRFFFRFRFFLFFFLFFFLFFRFFFFFFFRFFLLFFFFRFFRFFRFLFLFFFFFFFLFFRLRRFFLRLLRRLFFFFLFFLFLLFFFLFRFLRFFFLRRFFLLFFRFLRFFFFLFRLFFFFFFFFFLFFFRLRFFFFFFLFRLFFRRLRLLRFFLFFRFFRLRLRLR +RFRFRFFFFRFRFF +RFLFFFLFFRFLRRLFFFLRFRFFLFRFFFLFLFFFRRFFLFFRFLLRFFLRLRFFLRFFFFFLFRFLFFRLFFFFFRFFRLRRLFFFFFRLFFRLFFLFFFFRLFLFRFLFFFRFFFLFLFFFFFFRFFFFLRRLFRLLFFFFRFFFFRFFLFFFFFLRFRFFLRFFLFLRFFFRLRFFFFFFFFFFLLFFFFRFFFFLRFFFFRFFRLFFFRFFFLFFRFFFFFLFFLFLFRRFFFFFRLRLFFLFFRLFFLFLRRFFFFFFRLFFRRFFLFFFFFFFLLFRRFFFRLFFRLRFLFLFRFFLFFFFFRFLRLFFFLFFRFFFFFRFLFFRFFLFFFRLFFFLFRRFLLFFFFFFFFRLLFLRFRRLFFFRFLFRFRLFFFFRFFLLRFFLFLRRFRLFFFFFRFFRFFLFFLFFRFLFFFFFFFLFFLFFRFFFFFLFRFFFFRFFFFLFFFFFFFFFFFFFFLLFFFFRFFFFFFFFFFFRLFRRFFFFFFFFLRFFFLLFRFFFFFRFLFLLRFFFRFRLFRLFFFFFRLRFFFFLFLRFFFRFFFRLFFFFFRFFFLFFRRFLRLFFFFFFFFFLRLFFFFFLFFRLFLRFFLFRRFFFFFFRFFFFLFLRFFFFFFRFFFLFFFFFFFFFLFFFFFLRFRLLRLFFFFFLLFRFFRFFFRFFFFFFRLFFFLFFFFRFFFRLRFFRLFLFFRFFFLRLLRRFFLFLLRFFRRLLFFRFFFFLRLFRRLLRFFFFFRFFLRFFFLFLFRFFFFFLRFRFLFFFFRFFLFLFFFFLFRLLFRRFFFRFFLLRFFRFLFLFRLFRFFFFLFFRLRLRLFFRFFFFRFLLFRFRFFFFFFFRRFLFLFFLFFRLFLRLFRLRFFLRFFFLFRRFFFFLFFRFFFFFFRFLFFRFFLFLRFFFFRLLFFFRLFRFFFLFFFLRFFFFFRFRFLLFRLFRRLFFFLRFFFFRFLFFRRLFFFFLLFFFRFFFFFFFRFFFFLFLFFFRFLFLFFRLFLRFFFFRFFFRLFLRRFLLFFFFRFRLFLFLFFRLRRFFFFFFFFFRFLFRRFLFFFFLFRLFFRFFFLFFFFFRLLRFFFRFLFR +FRFFLFFLFRLRFLFFFFFLFRFRFFFRFLFRFLLLFFFLLFRFFFFLFFLRFLRFLFFRFFFFLFRLRFFFFRFFFFFFFLFFFRLFFLRFFFFRLFLRFFRFLLRFFLFLRFFFRFFLRLLFFFFRFFFFRRLLFRLFFFFFFFLRFLFFFFFRFFFFFFFFFFFRFLFLRFFFFFFFFRFLRFLRFFFFFLFRFRRRFRFFFFFFFRFFLFLFFRFFFFRRLRFLFFFRLFFFFFLFFFRRFFFLFFFFLFFFFFFFFFFLRFFLFLFFRFFFFFFFRLFFRFRRFFRFFFFRFFFRLFRFFRFLFLFFFLFFFFFLFRFRLFFFFFFFRFRFLFFRFFFLFLRFLRFLFFFFLFLFFRFRFLFFFRFFRLFLFFFFLFFFRRFFFFFFFRFLFFFFFRLFFFRFRFLFLLRFFFFFFRLFFRLFFLFFFFRFLRFFRLFLFFFFFFFRFFLFFFFFFLRLFLRFFLFRFRFLFRRLFLRFFRFFRFFLFFLFFFLFRFFFFFLFFLFLFLFRLRFRLLRFFFLRRLFFRLFLFFFFRLLRFRFRLFLRFFFRFFFFLLRFFFRLFLFLRFFFFFFRFFFFLLRFFRFLLFRLRRFFFLRFFFRLLRFLFFRFLFFFFFRRRFFFFFFRLFFLRFFFRFFFFFLRFFFFFFFRFFRLFFRFLLFRFLFRRFFLRFFLFLFFRRFLFFFLFFFFFFFFLFFRFFFFFFFFLRLFRFFFFFLLFRRFLLFFFRLRFLRRFFLRFRLFFFFLLRFFFFLFLFRFRLFFRRLFLRRLFRLLFFFLLLFFFLRLRRFFLRRFLFFLFFFFFFLFRFLFFFRFFLFRFLFFRFFRFFRLLFRFLFRFLFFFFRLRLFFFRFFFRFFFLFFFFFFRFRLFLRLFFLRLRFFFRFFRFLRLFLFRLFLFRRLFFFFFFFFFFLFFFLRFRFRFLLFRFRFFFRFFFFFFRFRFFLFFFLFFFRFRFFFLLRFFRFFFFRFLFFFFFFFFFLFFFFLFFFFFRRFLFRLLFLRRLFFFRFFFFLLFRFLFRRLRFRRFRFLRFRFFFFRLFFFFRLLRRLFFFFRFFFFLRRLRFFFLFFFRLLRFFFLLFFFRFLFFRFFFFLLRRFLRFFFFFFFFFRFFFRFFFFFFRFRRRRFFFLRFFRFFFFLFFFRFLRLFLFFRLLRFFFRFFFRFFFFFFLFLFRLRFFFFRFFFFFFLFFFRLRFFFRLLFRLFFFRLFRLFFFRFFFFFRFFFFFRFFFLFLFFFFFFFFLRFFFFRLLFFFFRFFFFFFFLRRLFFFFFFFFF +LFFFRFRFLFLFFLRFRLRLRFFFRFFRFLFLRFFFFLRLFFFFFFFFFLFRRLFLRRFLFFLFFFFFLFRFFFLFFRFFFFLFFRFRFFFFLFLFRFRFFLLRFRFFFFRFFFLFRLLRFFLFFRLLFFRFFFRFFFFFFLFLRFFFFFRFFRLLFFFFLRFFRLLFRFLRFFRFFFLFFRFFFFRFRLFFFFRFFFLFFFLFRFFRFLFLLRFFFLFFRFFFFFLFFRFFFFLLFFFRFFRFFRFLFLRLFRLLFFFFRRFFFLFFFFFLFRLFFFFRLLFLRRFRLRFFFFRFFFFLFFLFFFRFRFRLFFFLFFRLFFLFRRFFFLRFFLLFFFFFRFRFLLFFFRFLFFFRFFRFFFLRFFRLFLFFFFFFFFLRFRFLFFFLFRFLFFLFFFFFRFFFFFFFLRFFFFLFRFFRFFFFLLFFFFFLFFRFFLRFRLFFFFRFFFRLRLFRLFLFRFFFRLFLFFFFFRLLRFRFFLFFRFFFLLRFFRLFRFFFRFFFFFFLFFFFRFLLRFFFFLFFFFFFRFRFFFFLFLRFFFFFRLLFFRFRFLFFFLFRFLLFFRRFLRRLFFRFFRFLFFFFFFFLFFFFFLRFRFLFLRFFFRFRLFFFFFLFFLRFRLFRFFFFRLFFFFFFFLRFFFFLFFFFFFLFFFRFFRLFFFFFFFLRFFFFFFFFLRLLFRFFFRFLFFLFFFFRLFFFRFFFFFRLFFRFFFRFLFRLFFLFFFRLFFFFLFFFFLFFRLRFFFFFFRFFFFFFFFFLRFRLFRLFFLFFFFFFRFFFFFLFRRFFRLFFFFFFFLFFFFFFLFFLRLFRRLFFFFFFFRLFFLLRFFRFFFFFFRFFFFFFFRFFLFLRLFLFRRFFLFRFFRFFLFFRFRFFFFLRLLRLFFFFFFFFFFFLLFRLFRFFFFFRFFLFFRLLFRFFRFFFFLRRLLFRFFFRLFFLRFRFLFFFFLFFLFRFLRRFFLFFRLFLFFFFFFRRFFFFFFFLFFRFFFRLFRFLLFFFRFFLFFFRLLFFFFLRFRLR +FLFFRFRRLRLR +RFFFFRLFLFRLFFFFFFLFFRFFFFFFRFFLFFFLFFFFLFFFLRRFFRFLFFLRFRFFLLRRLLRFRFFFFFRFLLRFFLFFFFFFFFLRFRLFRFFFRLFFFFFFLRFFFLRFFLLRFLFRFFLRRLLFFFRFFFFFLRLFRFRFFFFRLFFFLFRRLFFLFRFFLFFLRFRFFRFFFFLFFFFFFFFFFFFFFLFLFRFFLFFFLLFRRFFRFLFRFFFFFFFFLFFRFRFLFFLFRFFRFLRFFFFRRFLFLRLFFFFFFLFFFLFRFRFLLRFLRFRFLLFFFFLFFLFRRFFFFRFFLFFFLFFRFFFFFRFFFFRLFFFFFRLFFRFLFFFLFFFFRFLLFFRFFLFFRFFFFLRRFFFLFFFFFLFFFFRFLFFFFFRFFFFFFFFFFFFFFFFFFFFFLFRLFRFRFFFFFFLFFFRFLLRLFFFRRLFFLRRFLFFFLFRRLFFFLFFFRRFFLLFRFFFFRFFRFLLRFFFFFLFLFRRFFLRLLRFFFFLLRFFRFFFRFRLFLFFFFFRFFFFFFFFRLLRFFLFFFFLFFFRFFRFLFLFRFLFFLFRRLRFFFFLRLFFRFFFFRRFLFRFLLFFLFRRFLFFFFFFFFFLFLFRFLFFFRRLFFRRLLFRLFFFFRLRLFLFFFFFRFLFFFFRFFLRFFFFRRFLFRFLLRFLLRFFLFRLFFFFFLFRLRRFFFFRFLFRLFFRLLFRFLFFLRRFRFFLLFRFFLFFFFFRFLLFFFRRFLRFFLFRLFFRFLFFLRFFFRFFRFFFLLFRFFFLFFFRLFRFLFLRFRLRFLFFLLFRRFFFFFRFFRFLFFFFRFFRLFFLRFRRLLFRFRFFLFLRLFLLRRFLFFFFFFFFFFFLFFRLFFFRFLFRRFFLFLFFFLFRFFFFLFRFRFLFFRFFFFFLFFFRLRL +RFRLLRFLFFFFFFLRFFRLLFFRFLFLFFFRFFRFLFRLRFFFLLFFRFFFFLRFFFFFFFRRLLRFFFFLLRRFFFFFFFFRFLRFLFFFRRFFFLFFFFLFFFFLFFRRFLLFFFFFFFLRLLRRFFFFFFRLFFFFRRFFLFRFLLFFFFFRFFRFFLFLFLRFFFFLRFFFRLRFFFFLRFFFRLLFFFLRFFFFFFFFRLFFFFFFRFFRFLLRFLRLFFFRFLFFFFRFFLFLFFLRFFFRFRFFLFRFLRFFLFFLFFFRFFFLFRLFRRFFFLLRLLRFFFFLFFRRFLFLFFRFRFFFFFLFRLFFFFLFLRFFFFRFFFRLLRRFFLFLFRFLFRRFLFFLRFFLFFRFFFLFFFFFFFFFRLRLFFFFFFFFRFFFFFFRFLFLRLRFFFFFFFRFFFRFRLFLRLFFFFLRFRFLFFLFFFRFFFLFFFLRLRLFRFFFFRFFFLFFFLFFFFLFRFFFFRLFFRFFFFFRLFFFFFRFFFFFRFLRLLFFRLFFFFRLRFFFFFFFFFLFRFLLFFRFLFRFFRFFRLRLFFLFFFFRLFRFLLFFRFFFLFLFFRFFFFFFRFRFLFRFFFFFFLLFFFRFFFLFLRFRFLLRFFRRLFLFLFFFFRFFFRFFFFFFFFFFFFLRFLFFRRLFLFFFFLFRFLRFFFRLRFLFLFFFLFRFFFLRRFLFRLRFFFRFFLFFFFFFFFFFFLLFRFRFFFLFFFFLFFFRLRFFFFFFFRFFRFFFLLRFFRLRFLFFFFLFFFFFFFFFFFRFFLFFFFFLFFFFFFFRRLFFFFFRFFFFFLRFFRFLLFRFLFFLFRFRLRFFLRFFFRFLFFFFFFFLFFFFFFFRLFFFFLRFFFRRFLFFFFFFFLFF +FRFFRFFFRRLRLR +LFFFFFLFFFLLLFFFFFFLFFFFLFFRLLFFFFFFFFFFFFRFFLRFFFFFFFRRFFLFFFFLLL +FFFFFFFFFFFLFRFFRFLRLFFFFFFFRFFFLLRFLFFFRFFFFFFFLLFFRRLFFLLRRFFRFFFRRLFFLFFFFFFFFRFRLLFFFFFFFLFFFFFFFFRFFFFFFFRFFFLFLFFFLLFFFFLFRLFLRRLLRFRFFLLFFRRFFFFFFRFFLRLFFFFLFFFFFFFFFFFFFFFFFLFFFFFFFFLFRFFLFFFFRRLLFFLRRLRFFRFRFLFFFFFFFLLRFLLRFFLRFRFFLRRFLRFRFLFFFFLFFFFLFFFRRFFFFFFFFFLLFFFFRLRFLFFLFFRFFRFFFLFFFFRFFFFFFFFRFFFRFLFFLFFLFFFFRFFFFFRRFLFFFLLFFRFFFFLFRFFRFFRLFFFFLFRLFFRFRFRFFRFLRFLFRRLLFRFRRLLRLFFLFFFFRFLRRFLRRFFLLRFFFLFFFLFLFRRFFFFLRLRRFLFFRLFFFFFFRFFLLFFFFRRLFFFFFLFFRFLFFFFFLFFFFFFRLRFFFLFLFFRFRFLRLRFLRFFFLRFFFFFFFRFFFRLFFFFFLRFFFRFLFFRLLFFLFRRFLLFFFFFFRRFFLFLFFLRFRLRFFRFLFRLFFFRFFFRRFFFFRFFRLFFLFFFRFFFRFFRRFRRFLFLRFFFFRFRFFLRLFLFFFFFRFFFLFFFFLFRFLRFLFFRFFFFFFLFFFFFLFFFLRRFFFRLFLRFFFFFFFFFFFFRFLLFRFFFFFRFRLFFFFFFFFFLRFFRFLFFLFFFFFLFLFRLFRFRFFFRLFRLLFFRFFFFRRFLFFLFRFLFFLFFRLFFRFFFLFLRRFFFFFRRLRLFFLRFFLFFFFFFFRLFFFFFFLFFRLRFRFRLFLFLRRLLLFRFRFLLFRRLFFFFFRFLRLRFFF +FFFFLRLFFLFFFRLLFRLLRRLFFFFRRLLRFLFLRLFFRLRFLRFRFFFLRFFLFRFFFLRFFFFLRRLRFLRLLFRLFFFLRRLRFFFFFLFFFFFRLFRFFFFFFLFFFFLRLFFRFFRFFFFLLRFFLFFFFFLR +LFFFLLRFRFFFFFLFLFFRLLRFFFRLFLLRFFRFFLLRFFFFFRLFFLLFLLRRFFLRFLFFLFLRFFFFFLRFRFRRFFFFFLFRLFRLRFFLLFLLFRLFRLFLFLLFLFRLRLFFFFFFFLFRRFFLLFRFRLLRRLLRFFFRFLFFRLRRRFLLRFFFFLFLRFLFFFLRRFLFLLFFLFLFFRLFFFRFFFLFFRRLFFFLFFFRLFRFLFFFLLLLFFFRRF +FFFFFFRRLLFFFFRFLLFFFRFRFLFFFFFFFLRFRLFFLFFFFFFLFFRFFFLFRRFFFLFRFLFRFFFFFFLFFFLFFFLRRFFFFRLRFFLRLFLFRFRFFLFRFLLRFFFRFFLFFFFRLFFRLRLFFFRFFLFRFLFRFLRFFRFFFLLFFRFFLFFLRRFLRFFFLFFFRLFFRFFFLFFRFLFFLFFFFRFRFRLFLFFFFLFFFRFFRFLFFFFFFFFLLFFFRFLRFFFFRFFFFFRLFLFFFFLFRFFLLFRFFFLLFRRFFFRFFFLRFFFFFFFRFFFFRLFRRLLFLFFFFFFFRLFRLLRLLFRFFLRFRFFFFLFRFLFFFFFRFFFRLRFLLFFFFFLRFFFRFRFLFFFFLLRFRRLLFRRFLFFFRFRLFFLLFRFFFFLFFFFRFFFFFFRLFRFFFFFFLFRFLFLFFRFFFLRLRLFFFFFFFFLFRFRFFFFFFFFRFLFLRFFFRFFRFFFFFFFLLRFRRLLFFFLFFRRFFLLRFFFRLLRLFFFLRFFFFRFLRFFLFFLLRRFFFFFFFFFFFRLFRLFRFFFFLFRRLFFLRFFFLFFRFLFFFLFFFFFLFFRFFRFFFLFLFRRFFFFLFFFFRFLFFFFRFFFLFFLFFRLFFFRFFFFFFFFFFRFLFFFLFFFLFFFFRFFFRFLLFRRFFFLFRLFLRFFRFFFRFFFFLLFFFRFFFLFFFFFRFFFFFFFRFFFFLRFLFFFFFFFFLFRFFFLFFFFLFFFRFFLFLFFFFRFFFFFRFFFRFRLFLFFFFFFLRLFLRRFFFFFFFRFFRFFFLLRFFFFFFLRFFFLFRFLFFRFRFFFFFLFLFRFFFFFFFFRFLFLFFFFFFFFFRFLFFFRLRFFFFLFFRLFFFFLRLR +FFRFLFLRRFLFLRFLFRRFFLRFFFLFFLRFFRLLRFLLFFRFRFFLRFLRFFFFLRLFRFLFFRFRLFFFFFFLRRLFFLFRRFRRLFRFRFRLFLLFRFLRFFRFLFLRRFFFFRRFFLFFLLFFFFFFFFFFFFRFRLFLRLLFFFFFFFRFLRLRLFFFFFRLLLRLFFFFRRFLFRLLRFFLF +RLFFRFLFRFFFFLFRRFFRFFFLRLFFFFLFFFLRFFLFFLRFFFFFFFRFFFLFFFLFFRLFRFFFRFFFFFLFFLFRFFLRFRLRFFFLFFFFRLFFLFFRRFFFLRFFFLFFFFFLFFFLFLRRFFRFFFLLFFRFFFFFFRFFFFFFRFLFLFRFFFFRFLFFFFFFFLFFFLRLRRFFFFFRLFFFFLRRFFFFFFFLFFFFRLFFFFFLFFRFLFFFLFFRFFFFLFRFRFFLRFFFFLFFFFLFFFFFRLFFRFFFRFFLFRFFFFLFFFFFRLFLFFFFRRFFFFLFFFLFFFRRFLLRFLFRFFFFFRFLFFFFRLFFFFFFLFLRFFLFFFFFFRLRLRFFFFFFRFFLLRRFFFRFFFFLFRFLLFRFLFRRFLFFFLRFFFRFFFFFLFLFFFRRLFFFFFLLFFFRFFFFLRRLFFFRFFLFLRFFLFFRFFFFFFLFFFRFFFFFFFFRFRFFFLFFFFFFFLFFFFRLRFFFLFFFFRRFFLLRLFFLFFFFFRFFRRLFFFFLFFFFLFFFFRFFFFFRFFFFLFFFFFFFFFFFLFFFFRFLFFFLFRFLFRFLRFFFFRFFRLLRFFFFFRFLRFLFRFFFFLFFFFLL +FFFLFFRFFFFRFLLRFLFRFLRFRFFFFFLLFFRFFLRRLFFRLFFFFFRLLRFFFFLRLFRLFFFLFRRFFFFFRFLFLFRFFFRFFFRRFFFRFFRFFFFFLFRLRFFFFFFFFFFLLFFRLRFFFFFFFFRFRLFFFFFFFLFFFFRLFRFFFFFRFFFRLLRFFFLFFFLFRFLFFFFRLRFLFLFRFFFFFFRRLLFRFLFFLFFRLRFFFFRFFFFLFLFRRFFLFFFFFFRFLLFFFRRLFFFFFFFRLFFFFFFLFFLFFFFFRFRFLFFFFFFRLFFFFRFRFLLFFLFFRLRFFFFFFFFRFRFFRFFFFFFRFFFFRFFFFFFFLRFLFLRFFFRRLFFFFLLRRLFFFFLLRFFFRFFFLFFRRLFFFFRFFFLFFRLFFFFFFFFLFFFFLFFFFRFFRFLFFRFFLFFLFFRFLLFFRFFFFRFFLFFFFRFLRLRFRFFFRFFRRFLRFFFFRFFLRFLFFFFRFRLFFFLFRRLRFLFFFFFFFFFFFFFLLRFRLFFFLRFFFFRLFFFFRFRLFFFRFLFFLFFRFFRFFFLFLFFLRRFFFFFFFRLLRFFFFFFFFRFFFFFFFFFFFLLRRFFFFLFFRLFFFFFFFFFFFRFFFFRFFFLFFRFLFRLFFLRLRLFFFFFFFRLRFFFLRFFFLFFFFFFRLFFFRFFLRFFLFFFLLRFFFRLRFFFFFRFFRLFFRFFRFFFFFFRLFLRFRFFRFFLFFFRFFFFFLLFRFFRFFFLFFFFFFFFLRFLLFFFRRLFFLFFFFLRFFFRFFFFFFFFFFFRRFFFFRLLFFFFFRFLFLFFFFLFFFRFFFFFFFFFRFFFFFRLFRFLRFFFLFFFRLLFFFLRRLFFFFFFFFFLRFFFLLRLFFLFFLFFFFFFFLFFLFRLRFFFRFFRFFLFLFFFFFFRFFRFFFFFFFFFFLFFFFFFLRFFRFLFFFLFFFFFFFFLFRRLFFRLFFLRFFFFFFRFRLRLLFFFFFRFFRFLFLRFFLFFFFFFFFFFLLRRFLFFFFFRRFLRRLFLFFFFFRFFFRFFFLFFRRLFFLLFRFLLLLFLFFFFFRFRLFFFLFRFFFLFFRFFFRFFLLRFRRFLFLFFLRRFLRFFFFLFFFFFFFFRFFFFFLRLLFFFRRFFFLFLRFLFRLFFRFFFFFFRFFRFFRRFFFFFFFRFFFFLLRFRFFFRFFLLFRFLFLFFFRRFFFFRLFLRFFRRLFRFLFLLRFFFRFFFFFFFLFFFRFLLRFFLRLFLFRFLLFFFRRFFFFFFFFFRRLLFFRFFFRFFFLFFFLFLRFFFLFFFFFFFFRFFRFFFLFFRFFFFLFFFFFFFLRLFRFFLFRLRFFFRFFRFFLFFFFLFFFFFFFLFFRLRFFFFLFRLFFFFFRLLFFRFFFLFLFFLFFFFFRLFFFFFLFFRRFLLFFRFLLRFRRLFLFLRFFFLFLRFFFFRFFLRFRFLFFRLFLFFFRFLFRFFFLFFFFRFFFFFFFLRFFFFFFFLFRLFRFFFLRFRLLFRFFLRFLFFFLFRFLRLFFLRRFFRLFFRFRFLFFLRFFFLFFFFFFFRFFLRFFRRFLFFLRFFFFFFFRFRLLFFLFFFFFLFLRRFFLFFFFFFFFFRFRFLLFRFRFFLRLFFFLFRFLRFLFFFRFLFRFFFRFFFFFFFFRFLLRFLRLFFFFFFFFFRFFFFLRFLFFLFFLRRFFFFLRFFFFFFFFRFRFFLFRFLFFFFFFRFFLFRFFFFFFFLFRLFFFFLFFFFFFFLFRLRFFLRFFFFFFRFLRLFFFRFLFFFFFFFFLFFFRFFFFRFLFFRFFFRRFLFRLLFRFFLFFFFFLRFFFFFLFFFFFFFFFFLRFFFRLLFRFLRFFLFFRFFLFRLFFRFFLFLFFFRFRLLFLRRLFRRFFFFFLFRLFFFFFFFFLLRFRFLFRFLFFFFRFFFFFFFRFFFLFFRFFFLFFFFFFFFLRFFFFFFFFRFFFFRRRFFFFLFFFFFLRFFLFFFFFFRRFLRLFFLFFRFFLRRFLLFFRRFFFFFLFFRLFLFFFRFFLFRFFFRFRLLRLRLR +FFFLFRLFRFFRFFLRFFFFRFRFLFFFFFFLRFRFRLFRRL +LRRFFRLFRRFFFR +FFLFLRRFFFFRFFLFFFFFLFFFLRFLFRFRFFFFFRFFLFFRFLFFFFFFFFFFFFLFFLRFFRFFFFFFFFFFRFRLLFLRFFRFFLFLFFRFFLLRRFFLFRFRLRLLFRFFLFFFFFFFLFFFFFFFRLFRFLFFRFLFRFLRFRLFRFFLFFFLFLFRRFFLFRFFFFFFRLFFFFLRRFRFFLFFFLFFRFRFFFFFFLFFFRFFFFFFFFLFFFLRFLFRFFRFLLRFFFRFLFFFFFFFFLRFFLFFRLFRLRLFFFFRRFFFFFFFFFFLRLFFFLRFFRLFFFLFFRFFLFLFFRFFFLFRFFFFFFFFRFLFFFRFLFLFFFFFRFRFLLRLRLFLFRLRFFFFFFRFFFRLLRFFRFLFRFFFLFRFRFLLFRLLFFFRFFFFFFFFLFFFFFRRFFFLFFRFLFLFRFRRLFFFFLRLFRFFRLLFFFFFLFFFFRFFFFFLFFLFRFFFFFLFRFLLRFFFRFFFRFFFLLFFRFLLRFFFRFFFRFFLFFFFFFFRFFFFLFRFFLFFLFRFFRFFLLRRFLFFLRFRLLRFFFRFRLFFFFFFRLFRLLRFFFFFRLFFFFFFRFRFLFRLLFFFRFFFFFLRLFFFFFFFFFFFFFLLFFFFRFLFRFLFFRFRFLFLRFFFFFFLFFRFFFFFFFFFFFLRFLFRRLFFRFFLFFFLFRFFLRLRFFLFRFRFLFFFLFRLFRFFFLFRLFFLRRFFFLLFFFFFFFFRFRFFLFFLFFRRFFFLRFRLFFFFFFFLLRFFRFFFFLFFFFFFFFLFFFFFRRLFRFFFLFFFRFRFFFFRLLFLFFFFRFFFFFRFLFFRFLFFFLFFRFLRLFFFFRFRFLFLFFFRFRRLFLRRLLFFFFFFLFFFFRFRFLFLFFFFRFLFLFFRLFRFFFFFFFFLFRFRFFFRLFFLFRFFLRFLFFFFFFFLFFFFFRLFFRFFFFFRFFFLFFFFFFFFFFLRFFFFFLFFFFFLFFLRRFFLFRRFFLRRLLRLFLFFFFFFFFFFRFFFRRFLFFLFLRFFLFRFFFFFRLFFRLFLFFFFFRFRLFFLFFFRLRFRFLRLLFFRFFFFFFFFRFLFRRLFLFFRFFFFFFFRLFFLRFFFFFRFFFFLFFFFFFFFFRRLLFRFFFFLRFFRLLRFLFFFFFFFFFFFFLRFFFFFLFFFLRFFLRLR +FFLLRFFFFLFFLFFFRFFFLFRFFLFRLRFFFFFFRFLLFFRRFFLFFFRFFLFFLFRLRLRFLFFFRRFFFFLRLFFRLLRRFRLFFLFFLFFFRLLRRFFFLRFFFLRLRLFFFFFLF +LFFRLRRFFFFFFFLRLRRFFRLRFFFLFFFLRFRFFLFLLRRLFFRFFLFFFRFFRFLRFFLRFLRRRLFRFLFFFRFRFLFFFFLFFLFFFRFLFLLFFLLRRFFFFFRLFLFFFRRRFFLRRFFFRFFFFFRLRRLRLFFFLLRRLFFFRFFFLRFFFLRFLFLLFFLFFFRLLFRFFRLFFLRLLRLFFLLRLLFFRFFFLRLFFFFRLRFLFRFRLFFFLFFFFLRRFFFFFFLLFRRLFFFFFFFFLFLLRFLFLFFFRLLFRLRLFRLLFFFFFFFF +FFFRFLFFLRFRLFFFFFFLFFFFFFFFFFRFFRFLLFRFRLRLFFLFRFFFFRFFFFFFFFFLFFFLFFFFFRFFFRLFFRFLFFFLFFFFLRFFFRFFFFFRFFLFFLFFLFRFFRFLFLFFRFFFFRFFFFFLFFLRLFRFRFFFFRFLLFFFLRRLFFFFFFLFFFFFRRFFFLFLFFFRFFRFFLRFFFFRLLFFFRFFLFFRFFFRFLFRFFFFFFRLLFFRLFFFLRFLRFFFRFFFFRLLFFFFFRLFFFFFLFFLRRLFFRFLFRLFRLLFFFRFFFRFFFLFFFFFFFFRLFFRLFFFFFLLFFRFFFFFFLFFFFFFRFRLFRRFLRLFFFFLRLFFRFLFFFFRFRLFRFFLLRFFFFFRFRRLFFFLLFRFLFRFLLFRFRLFFFFLFFFRFLFRLFLFFRRLLFFFFRFFFFFFRFFFFLRFFFRLLFFRLLRRFFFFLFFFFFRFLRLLFRFRFRLFFLFFRRFFLFFFLFFLRFRFLRFLFRLFRLFRFRFFLRFFFLRFLFRFLFFLFFFFFFFFRFFFFRLLRFFFFLRLFRFFFFFFLLFRRFLFFFFFFFFLFFFLFLRFRFFFFFRFRLLFRFRLLRFRFFFFFFFLFLRFFFRLRFLFFFLFFFFFFFFFLFLFRFRFFRFFLRFRLFRRLFLFRFFFFFFFLFFFFFFFLFFLRRFFFFFFFRFLLFFFRFFLFFFFLFRFFFFFLRFFLFRFLRRFLRRLFFFLFLFFRFLFRLFFRFRFFLFRLFLRFRFLFFFFRFFFFFFFFLLFFFFFRRFLRRLLFRLFFRFFLFFRFRLFLRRLRFFFLFLRFFFRLLFRFFFLFFFFRLFFFFFRFFFFFRLFFRLFFRFLFFRLFFFFFLFFFFFFFFFFFFFFFLRFLFFFFFFFLFFFFRLFLFFRFFRFFLRFFFFFRFFFFFFFFFRLFRFRFFRFLLFFLFFFFFFFRLFFFFFFFLFFFFFFRFFRRLLRFFFRLFFLFFRLRLFFRFFFFRLLFFFRLFFLFFRFLFLFFRFFFFLFFFFFFRRFLFFRFRRLLFFFLRRLFFFFLRFFRLFLFFFFLFFRRFFLFFFFFLFLFFRFFFFFFFFFFFLRRLFFRFFFFFFRFFFFFLFFFLRFLFFRRFFFFFLFLRFFFLFRRFLRLLFFFFLRRFFFFFFFFFRLFFLRFFRRLFLRRFFFFLFRLFRFLRLRLFRFFFFLFFFFFFFLFFRRLRLFFFLFFRLRFFFLFFFFLRRFFFFRFLFFFRRFLLFFFFRLFFFFFL +RLFLRFRLLFFRRLFFFRFLLFFFLFLRFRFFFRFLLFRFRFFFFRFFLFLFLRRFRFFFFLFFFFFFRLFLFLFRRFFFLFRFFRRFLLFFFRFRFFLRLFFLFRFFFLFFFFLRFFFFFLFFRLFFFFFFFFRFFFFFFRFFFFFFRLFFFLFRFRFLFFFFLFFFFFFLRFFFFLRLFFRFFRFLFFFFFFFLFLRFRLFFFFFFRLRFFLFFRFRLFFFRLFRLFFFLFFRLFLFFLFRRFFFLRFFLFFLRFFRFLRFFFLFFRFFLRFFFFFRFLFRLFRRFLFFFFRRFLRLFLFFFFFFLFFFFFFRFLRLFRLFLFFRFFLFFFFFFRRFFFLLFFRFFLRFFRRLLFRFFFFFFLFFFLFFFLRFFLFRRFLRLRFFFRFLFFFFFRLRFLFLFFRRFLFFFRLLFRLLRRLFLFRFFRFLFFFFRFFFLFFLFRFRFLRFFFFFLRFLFLFFFRFFFLFRRFLFLFFLFFRFFFFFFRRFLFFRFFFLRFLFFFFFFFFLRFFRRLFFFFFLRLFFFFFRLFFFFFFFFFFFLRFFLFRFFFFLRLLFRFRLRFFFLFLFFFRFFFFFRFFRFFLFRLLFRFLRFFFFLFFLFRFFFRLFFRRFLRLFLFFFLRFLRFFFFFFLFFFRFRFFFFFF +FFLFRFFFFFFLFRFRLLFFFFFFFFRFLRLFFFFRRFFFFLFFFRFFLFFFFLRLFRRFFFLFFLFRLFLFFRFFFFRFFLRFFFFLFFLFFFRFFFRFRLLFLFFFRFFFFRFFFLRFFFFLFRLFRFRFFFFRLFFLFFFFFFFFLRRLFFFFLFFFFFLFFLRFFLRRFFFFFFFFFFLFLRFFRFRLRFRLFFFFLFFFFRFFFLFLFFFLRRFFLRFFFFFFRLRLRLRRLFRLRLLFFFFRFLFFFFFFLFFFFLRLRFRFFFFFFLRFLRRFFLFFLFRFLFFRLFFFFLLFFRRFFFFFFFFFLRFRFFLFFLRFFLFLRFFFLRFLFRFFFLRFFRRFLFFFFFFRLFFFRFLLFFFRFLFRRLFFFRLLRFFFFFFFFFFFFLFFFFLFFFRRFFFFLFRFFFFFRRFFLLFRLRFRFFLFLFRFFFFLFLRRFLLFFRFRFFFFFLFFFFFFLFFFFFLFFFRFFRLRFFFLFRFRFLFLFFRFFFLRFRFFFFRFFFFFFFLFFFFFLFRFFFFFFFFFLLFFFFFFFRFFRFLFFFFFRLFFFFFRFRFLFLRFFFRLFRLLFFRLFRLRFFFFLLFFRLFFRFFLFFFRFFLLFFFRLRFRFFFLFFFRLFRRFFFFFFFFFLFLRFFFRLFFFLFFFFFFLFRFFFRLFFFRRFFLRLFFFFFLFFFLRFFFFFFLFFFLFRFFRFFFLFLRRFFFFRFFLFFFFFRLRLFFLFFFLRFFLFFRFFRFRLLFLRFFFFFFFFFRRLFFFFFFFLFFFFFLRFFFLFFRFRFFFRLFRFFLLFRFRRLFFRLLRFRLFLFFFFLFFRLFRFRLFFLFLFRFFLFFFFFRRLRLFFRFFFLFFFRFFFFFFFFRFFFFLFLFFFRLFFLRRFFFRFRLFLFFFFFFFFFFLFFFFFLFFFLRFFRFFRLFRLLFFFFFRFFFFFFFFRFRFFLFFLFFRFFFFFFRFLRFFFLFFFFFFFFFFFLLFFFRLFFFFRFFFFFRLFRL +LFRFFFLFFLFFFLRLFFFL +FFFLFRFFFLFFFRFFFFFFRLLFLRFFRFFFFLFRLRLRFFFRRLLRFLFFFLFRLLRFFFLRRLFFLRFFFLRLFFFFRFLRFFLRRFFFFLFLFRRFLFLRRFFLFFFFFRLRFFLFLRLFFFRFRLRFRLFFLFFRLRFLFFLRFFFRFLRFFFFFRLFFLFFLF +LFFRRLLFRFFRFRLFRLLFRFFLRFFRFLLFFLFFFFRFRFFLFFLRFRFLFLFFRFFFFRLFFFFRFFLFFFFRLFFFLLRLRRFLFFFLFRLRFFLFRFLRFRFFLFFRFFFFFFRRFFFFLFFFFFLFFFFFRFFLRLFLFFFFFFFFRFLFRFFRLRFFFLFFFFFRFRFLFRRFLLFFFFFFLFRLFRFLFFRFFLFRLFFFFFFFRRFFFFLFFFFFLRFFLFFFRLFFRLFRRLFLFFLFRFRFFFFFLRFLFFFFFFFFFFRFFLFLFFFFFFRFFLFFFLRFFRFFFFFRFFFLRLFRFFFFFLFFLRFFFFFLRLRFFFRLFLFLRFLFFLFRFFRFFFRRLFFLFFRLFFFFFFFFFRRFLFFLLRFFFFLFFFLFRLFFFFFRFFFFRFFLRRLRFLFFFLFFFFFFFFRFFFFFFFRFRFLFFFFLRRLLRFLFFRFFFFLFLFFRFFRLFRFFLFFLFFFFFFRRFLFLFFFFRLFFFFLFRLRRFLLFFFRRFLFRLFRFFRFLLFRFFRLFFFFFLRFLFLFFFRLFRFFLRFFRLFRRFLRLFLFFLFRRFLFLRLRFFRLRRFFLFFFFFFFFFFFLRFFFFFFRRFFFLFFFLFFFRFLFFFFLRFFLRFFLLRFFFFRFFFFFFFLFRFFRLRFFFFFFLLRFFRFFFFFLFFFLFRFFFFRLRLFRFFFRFFFFFFLLFFFFFFFFFFFFRRFFFFFFLLFRFRFFFFFRLFFLLRLFFFRFFRFLFFFFFFFFFFFFLFFRFFFFLFFFLRLFFFFLFFFRFLRFRLRRLFRLFFFLRRFLFLFFRRFFFFFLRLFFFFFLRLFLFFRFFFLRRLFFFFRRLRLFRFFFFFFLFFFFFRFLLFRLRLFFRFFRLRRLFRLFLRFLRLFFFFFLFFFFRFFLFLFRRFFFRFLLRFFLFFFFLRLFFFFRFFRFFLFFFFFFFFFRFLFFLFFFFFRFRLRFFLFFRFFLFFFFFFFFLRFFRLFFFRRFLFLFFFFLFFRFFFLFFRLFFFFFLRRFFLRLFLRFLFFFFFLRFLRFFFRRFLFRFLFLFFFLRRFRFFFLRFLFFFFFRLLFLRLFFFLRRFRFFFFFFFFRLFFFFFLRFFRFFFFFRLLRFFFRFLRLLRLRRLFFFFFRFRFLRRFLFFLFFFFFFFFFFFLFFFFFRLFFRLFFLFFFFRLFFRFFRFLFFRFFFFLRRFFLLFFFFLFFFFFFFFRFLRFFRFFFFFFFFLFRLFFLFFLRLFFRRFFFFFFLFFFFFRFFFLRLFLFFFRFFFRFFFFFFRLFFFRLFFFRLFRLRFFFFFRRLFLRFFFFFRLFLFFFLFRFFFLRFLFRFFFFLLRFRFFRFFFLLFFFRFRFLLFRFFRLRLFFFFFFLFFRLFFLRFFLFRFFFFLRFLFFFRRFFLFFRFRFFLFFFLFFLFFRLFFFRFLRFRFRFLFFLRRLFFFLLRFFFFLFFFFFFFFFFRLRFRLRLFRFRFLRFLFFFFFFFFFFFLFFFFFFLFFFFRLRFFFFFRLFFFFRRLFFLLRFFFFFLFFFFFFLFRFFRFFFLLFFFFFFRLFRFFFFFRFFFFLFFLFRFFLRFFRFFFLRLFFFFFFLFRFLFFRFLFFRLFRLRFRFRLFLFFFRFRFLFFFFFFLFFFLFRFFFFFLFFFFRFFFFFLFFRRLRLFFFFLFFFFLFFFFFFRFRLLRFRFRFFLLFFFFFFLFFFFFLRFFRFFFFRFFFFFFFLFRFFFRFLFFFFLLFRFFFLRFRLRFFFRLFFFLLRFFRLRRFFLRLFLRFFLFFFFFFRLFRFFRLFFLRRFLRFFLLRLRFRFFFLFFLFFFRFLRLFRFFFFFRFFLRLRFLFRFFLFFFFFFFLFLRRFRFFLLFRFRFFLFRFFRFRLFFFLFRFFLFRFFLRLLFFRFFFLFLRFFFFFFFRRLFFFRLFFFRFLFRFFFFRFFFLFFFFFFFLLRFFFFFLLFRFFFRFFFFFRLFFLLRFFRFLRFLFRFLFFFFLLFFRFLRFFFFFRFFFLLFFRRFFFFFFFRFFFFFLFLFRFFRLFFRFFLFFRFFLRRFLLFFFLRFLFFRFFRFLFFFLFFFFFFFRLRLFRFLRFLFFRLFLRFRFFRLFLFRFLFRFLLFFLFRFFFFRFFFFFFLRFRFFFFFFLRFFFRFLLRLFFLRFLRLFFFFRFFRFFFFFLRLFFRFFLFFRFLLFFRFFLFRLFRFFFRLRFFLFFFLRLFRFFFFLFLFFFRLRFRFLRFFLFFFFFLRRLFLFLRFFFFFRFFLFFRFFLLRFRFFFRLLRRFFFLFFFFRLFFRLR +FFFRFLFLFFFFFLFFFLFFFFLRFRRFFL +FFRFFFLFLRRLFFRRFFFFRLLRRLFFFFFFFFFLRRRFFFFFRFLFRFFRLFFFLFFLFLFRFFFFFFFFFRLR +FFFRLFRLLRFFLFFFFFRLFFFRFFFFFFFFFRFFFRLFLFFFLRFFLFFFRFFFLRFFFRRLFFFFFFLFFFFFFLFFFRRLRFFLRRLFFLLFRRLFFFFRLRFFFLFFRFLFFFFFFFLRFRLLFFFLFFFRFRFFLRLFFFFRFFFFRLRLFRFFLFFFFFFLFRFLFLFRFLFRLFRFRFFFRFLFFFFFFLFRRFLFLFFLFFRLFRFFFFRFFFFLLFRFLFRFLFFFRLFFFRFLLFFRLRRFFFFLRFFFFFFFLRFRFFFLFRLFFFFRFLFLRFFFFFFFFFRFFFRFLFFFFLFFRFLFFFLLRRFFLFFFLFFRFFFFFRFFFFRLRFFFLFFFLRRFLFRFFFFFLFFFLFLRFFFFFRFLFFRFLFRFLLRFFFFFRFFRFLFFFFFLFFRFFLFFLFRLFFRFFLFFLRFFRFFLFLRFRLFRFFFRLRRLLFFLFFRRFFFRLLFRLFRLRFLLRRFFFFFLFLRFFFFFFFFLLFFRRFFFLFFLRFFFFFFFRFFRLFFFRFFFRLFFFFRFFFLLFFFRFLLFFFFRRLLFFFFFLRFFRFFFFFFFFFFRFFLFFFFRLFRRFFFFFFFLFFFLRFLRFFFRLFFLFLRLFFFFFFRRFFFFFFLFFRLFFFFFFFFLFFRFFFFFLFFFLFLFRRFFFLFFLRLFFRRFFFFFRFLFFLFFRFFFFLFFFFFRFRFFLFFFRLFFFRRLLFFLRRFFLFFRFFFFFFFFLRLFFFFFLFFFFRLRFRFFFLFFFLFFFFFFRFFFFFFFFRLLFRFFFRFLRLFFLFFRLFFRLRFFLRFFFLFFRFFFFRLFFFLRFRFRLRFFFFFFFLLFFRFLFFRFFLRLFFFLRL +RFFFRFRFFFFFFFFRRLRFFF +LLFLFFRFLLFFFRRFLFRLFRRRFFFFRFLLFRFLFFFFLFRFR +LFFFRFRFFFFFFFFLFFFFRLRLFLFFFFLLRFRFFFFRFFFFRLFFFLFFFRFFLRLRFRLFFFFFFRFLRFFFFLFFFFFRFFFLFFFRLFFRFLRLFLFRFLFLRFLRFRFFFFRFLLFRFFFRFFLFRRFLFRLRRFLLRFLFFFFFFFFLFFFFRFFFLLRFFRFLFRLFRFFFRFLFFFLFFLFFFFRRFLLFFFFRFFFFRFFFFLFRLFLRFFFFFFRFFFFFLFRLRLRFLLFRFFFFFRLLFRFFLFFFLRFFFFRRLLFFLFRRFFRFFFLRFFFLRLRFLFFRFLFFFFFLLRFLRFLFRFRFLLRLFRFLFFRLLFRRFFRFFFFFLFFLRFLFLRFRFFFLRFFFFFFFFFFFFRFFFFLFRFFFLFFLFFRFFRLFLFFFRFFLFFRFFLFFFFFLFRLFRFFRFFFFFFFFLRLFRFFFFFFLFRLFRFFFFFFFLFFFLRLFLFLRFRFFFRRFLFFFRFLFFRFFLLFRFFFRFFFFFFFFFFFFFFRLFFFFRFFFFFFFFFLRLRLFLFRLFRRFLRFLFRLLFRFFFFLFFRRFFFFFFFLFRFFFLFFFLFFRLFRFFFRFLFLFFFFRFFRFFFLFRFFFFFFFRLFFFRLFFLLRFRFLLFRFFFRRFFLFFRFLFFLFFFFRLFLFFFFFFRLRFFFFFFFFFFFFFFFRFFFFFFLFRFLRFFFFFFFLFFFFFLFRFLLFFFRFFFLFRFFRFFLRFFFLLFRLFRRFFLFFRFLFRFRFLFFFFFLRFFFFLFFFFFFFLLFRFFFLRFFFRFFFRRFLFFFFLFFFFRFLFFRLFLRFFFFRLLFFFRFLFRLFFRFFRLLRFLFRFLFFFFFFFLLRRFFFFFRFFFFRFFFRLLFFLFRRFLFFFFLFFFLFFFFFRFFFFFRRFFLRLFFFFLFFFLRFFFFRFLFRLFFRFFFLFRRFFRFFLFFFLFFRFLFFFFFLFFFLRFRLRFFRFFFFFFLFFFFLFFRFRLFFLRFFRFFFLFFFFLFRLRLFFFFLRRLRRFLFFLLRRFLFFFRRFFFLRFFFFFLRFFLFFFFFRRLFFFFLFFFRFFFRFLFLRFLFFFFFFRFLRFFFRLFFFFFLFFFRLFFLFFRFRFLRFFLFLFFFRRFFFFLLRLFFFLRFFLRFFFRFFFLFFLFFLRRFRFFFFFFRLLRFFFFRFFLRFFFLFFFLFFFFLRFRFFFFFRFLFFFRRLLFFFFFLFLFFRRFFFLFLRRLRFFFFLLFRFFFLFFRFRFFFFFLLRFLFFFFRLRLRFFFFLFFRLFRRFLFFFFFRRLLFRFFFRFFFLFFLLRFFFFFFFFRLFLRFFRFFRLFLFFFFFFLFLFRFFRFLRFLFFFFLRRLFLFFFFFFFFLRRFFRLRLLFFRFLRRFRLFFFFFLLFFRFFFFFFRFFFFFFFFFLRLRLFFRLFRRLFFFFFFRLFLRFRFLFFFFLRRFFFFLLFFFRLFFRFFRLFFFFFFLRRFFRLFFFLFFLRFFFRLFFLFFFFFFFFRLFLRFRFFLRFFLRRLRFFFFLFRFFFLFFRFLFRRFFLRFFLFLFRFLFRFFFLFLFRRLFRFFFFFRFFFFFLFFFFFFRFLFLFFFFFLRRFFRLFFRFFLFFFFLFFFFFFFFFFLFLFRRLLFFRFRLRFLFFFFFRFFFRLFFLFFRFFFFRFFFFLFRFFFFLRLRFFLFLFLRFFFRFRFFFFFFLFFFFFFFFFFFFFFLLFFFFFRFFFFFFRRFFFLFFLLRFRLRFFFFFFLLFFFFRLFRFFFFRLFRFLRFFFLFFFRFFFFFLFFFFFRLFFFFFFFFLRLFRLFFFFLFFFLFFRRFFFFFFRLFFFFRFFRLFFFLRFLRFRFFFLFFLRFRLFFFFRFLRLFFFRRLFFLFFFFFFLFLFRFFRFFLFFFFFLRFRFLLRFRLFFLFFFFFFFLRFFFFRRLLFFFRFFRFFFLRFFFLLFRLLRRFFFFRLRLRLR +FFRLFFFLFFFFRFFFFFFFLFRFFLRRFLFFFRFFFFLFFFFLRFLFRLFLRFFFRRLFFFFLRFFFFFFRFFRFFLFRLFRLFFFFFFFFLFLFRRFLFLRFLRFLFFFRFFFFFFFFRLLRLFFLFFFFFFFRFFFLFRFFFFFFLRLLFFRRLFLRRFRLLRFFFRLFFFLRFFRRFLFFFFLRRFFLFFFLFFFFFFFFLFFRFLRRFLFFRRFRFRFFRFLFFFFFFLRRFFLFFFRFFLRFRFLRLFFFFLRLFLFLFFFFLFRFFLLFRRFLFFRFFFFFFFFLRLLFLRFFRRLFFFLFFLFFFRFFRFFFFFFFRLFFFFFRFFFLRFLFRFLFFFLFRRLFFFFRLLFFFFFFFFFLFFFFRLFRFFFLLFLFFLFFRFLRFRFLLFLRLFFFFFFRFLFFFFFRFRFFLFFLFFFRFFFFFFFLFLRRFFFFFFFFFFFFFFFFRLRFFFFFRFFFLFFFRLFFFFFRFFRFFLFLFFFLFFFFFLRFFRLFFFFFFFFFFLFFFFLFFFRFFFFFFFFFFFFFFFFFFRLLRFRLFRFFFFFFLRLFLFRFFFFLRRLRFFLFFFFFLRRFFFFFFLFFFFLRFFFFFLLFFFRRFFFLRFRFFFFFRFFLFFLFRFFFFFFLRFFFFFRLLRFFFFFFFRFFFFFFFFFFLLFRLRFFFFFLFFFFFFFFFLFLFRFRFFFRFFFFFLFLFRLFRFFFFLFFFFFFLLFFLFFLRFFFFFFFRRFFFRFFRFFFLFFFFFFRFFFFFFRRFLFFFFLFFFFFFFFFFFFLLRRFLFFRLFLLFFFRRFFFFFLFRLFFFRFFRFFFFFFLLFFRFRFFFFFFFLFLFRFFLFFFFRRFLFLFFFFLFLLFFFRFFLFRFFFLLRLFFRFFRRFLFLRLRFFLRRFFFFLFFLFFFFRLFFRFRFFLFRFLFRFFLFFLFFFRFFLFLRRFFFFLFFFRFFFFFFFRLFFFFRLFLFFFFFFLFFFFRRFFFFFLRFFLFFFRFFFFLFFFFFFFFFFFFFLFFFFFFLRFRLFLRFFRFLFFRFFFRFLFFLLFFFLFFLRFFFLLFRRLRFFLFRFRFLFFFLRLFFFFLFLRFFLFRRFFFFFFLFFLFFFRFFFFRFFRFLFLFFLFRFFFFLRFRLRRLFFFFLFFFFRLFLFFFFFFRFRFLFFRFLFLRFFFFFLFFRRFLFFFFFFFFFFRLRFFRFLLFFFLRFRFRFLLRFFFFFRFFLFLRFFFFLFLFRRFFFRFFLFFFRRFFLLRFFFFRLRRLLFFFFFLFFFFFRFLFFFFFFFFFFLRLLFFRFFLFFLRRFFFFFFFRFFFFFFFLFRRLRF +FRFFLFFFLRRLRLRFLFFLFRLFRLRFLFFFFLRFRFFLFFRLFFFLRFFRFFFFRRLFFLFLFFRFFRFRLLFFFFFFLFRFFLFFFFLFFFFRFFFFFFFRLFFFFFLRFFFFRFFFFFRRFLFFLFFFLRFLFRLFRFLLFRFFRFRLRFFFFFFFLFFFFFFFFFFFFFFLFLRRLRFLLRFFFFFLFFLRFRRLFFLRFFLLRLRFRFFFRLRLFFRFFFFFFFFRFFLFFFRLLFFFFRLLFRFLFFFRFFLFFFFLRFLRRFFFFFFFFFFRFFRLFLFLFFRFFFFFFFRLFFFFFLFFRLLRFFFFFRFLRFFFLFFFFFFFFFFFFFLFLFFFFFFFFFFRFRLFRLFFFFFFFRFRLFFFFFLFRFLFLFRFRLFFRFFLFFFFFFRFFFRFFFFFLLRFFRFRFFFLFRLFFFFLFFFFFFFFFFFLFFLLRRFFFFFFLRFRFFRLLFRFFFFRLFFLFLFFRLRFFFRRLFFFRLFFLFRFFRFFFFFLRFFFFFFFFLFFRFFLFFFLFRFFFFFLFFFRFLFRFFFFFFFFFRFLFFFRFLRFFFFRFLLRFLRRFLLFFFLRFLRRFFFFFLFFRRFLFLFRLRLLFFFFRLFFRFFRFRFLFFFLFFLFFRFLFFFFFFFFFFFRFFFFFFFFFRLFRFLFLRRLFFFLFFFLFRFLFLRRFFFFFFFFLRFFFFLFFRFFLFFRFFRFFLFLFFRFFRLLRFRLLFFFFFFFRLFFLFFFRFLRLLRRFFRLRFFFFFFLRFRFLFFFFLFFFFFLRFRFFLFRLFRLFFFLRFFRLFFFFFFRFFFFFFFFLFFRFLFLFRFFRFFLRRLFFRFFFLFFFFFFFFFRLFFFLFRLLRLRRFFLRFRLLFFLRFFFLR +FRFLFFFFLFFRFFLFFFFRFFFFRFFLLFFFFRFFLRRFFRLLRLFRLFFFLRFFRFFFLRRLLFRFRLLFFFFLRFLFFFFRLRFFLRRFFFRLFFLFLRFFFRLFRLFRFFLFFFFLFRLFRFRFFFLRRFFFFFFLLFRFLFFFFRLFLRFFRRLFFFFFFLRFFLFFRRFFFFFFRFLFFFFFFFFLFFFFFLFLFFFFRFFFRFFRFLFFFFLRRLRLFLFFFFRLRFLFFFFRLFLFFFRLFRFFFFFFFFFFFFFFFRFFRFFLFFFLFFFFFLFRRLFFFFFLFFFFFFLFFRRLFFRFFRFLFFFFRRFLFLFFFLFFFFLFRFRFFRFLLFFFFLRFRLFFRFFLLRFRFLRFFFRLFFFFLFFFFRLRLFLFFRLFFRLFLFRFRRLFFRFLFFFRLFLRFRLRLLRRFFFFFRLLFFFFFFLFFRRFFLFFFFLRLLRFLFRFFFFFFRFLRFLFRLLFRFFRLFRFFRFLFFLLFRRFLLFFFFFRFRFFFLFFFLRLRRFFFLFFFRLFFFFFFFFFFRFRFFLRFLFFFFFLRLFFFRFRFFFFFFFFFFFLFLFFFFFFFFFRFFLFRLRFFRLFFFFRFLFFFFLRRFFFLFFFLRLFRFFFRFFLLFRRFFLRLFFRFLFFFFFFRFFLFFFLRRFFFRLLRFLFRFFFRFFFRFFLLFRFFFFFFLFLRRFFLLFFFRRFLLFFRFFLFFFFLFFLRRFFFFFFFFFFFFFFFRFLFRFRLRLLFLRRFLFFFFLFFFFFRFRLFLFRRFFFFFFFFLFLFRFFFFFLFRLFFFFFFRFFRRLFLFFFFFFLFFFFRFLLFFLRRFFFRFFFLFFRFFLFFFFRRLLRLRLLFFRLFFFRLFFFRFFFFRFLRFLFLFFFFLRLRRLFFFRFFFRFFLFFFFLFLFRFLRFFFFFFFFFFFFFFFFRFFRFLRLRLLFFFFFFFLFRFFFRFFFFFFFFFRFFLFRFLFRFLFFFFLFFFRFRLRFFFFFLFRFLFRLFFLFRFFRFLFFFFFFFLLRFFLRFFLFFFFFRFFFFFLLRRFFFFRLRFFFFFFFFFFRLFFLRFFFFFFRFFFFFLLFFFFRFRFFFFLFFFLRFFFLFFFRRFFFLRFFFFLFFFFRLFRFFFFLFRLRRFLLFRFFFFFRFFFFFFRLFFRRFFLFLFFFFFLRLFFRFFFLFFFFFLRRLFFFLFRFLFFLRLRRFLFFFRFFFFFFFFFFLFFLFLRFFFFRLFFRRLLRFFFFFFFFLFFFFLRFRLRFFFFFRLFFFFFLRRLRRLLRFFFFFRLRFFFLRFFFLLFFFFFRFFRFLFFLFFFFFFFFFFLRLFFFFRFLLFFFFFFRFFFFRFFFRLRLRLFLFFRRFLLRFFFFFFFFFFLRLFFFRFRLFFFLFFFFLFRLRLRFFFFFFLLRFFRFLLFFFRRFFFFFFFRLLFFFRFFFRFRFFLFLFFRLFRFLRLFFFRLFRLRLFFLFFLFRFFFRFFRFFFLFFFLFFRFFRLRFFLFFLFFFLRFFFRFLFLFFFFFFFRFFFFRLFFFFRLRFFFFLRFLFFLFRFLFRRFFFFFLRFFFLFRFFFRFFLFLFFFFFFRFFFFFFFRFLRFLRFFFLFFFFFFFFFFFFLFFRRLLRFFLFRLFLRLRFFFRFLLRFLRRLFRFFFFFFFFFFRRFFLLFFRRLFFLFFRFLLRRFLRLRRLLFFFRRFFLFRFFFFFLFFFLRFFFFFFFFLRFRLFFFLFFFFLFFFRFFRFLFFRFFFFLFFFFFFFLRLRRFFLLRRFFFFFFFFLLFFRRFLLFFRFFFRFFLFFFFLRFFLRRFFLRRFLFLFLRFLFFFRFFLFRLFLRRFLRFFFFRFFLFFFFFFLFRFLFRLFFFFFFLFLFFRRFLFFRFRLFFFFRFLFLFFFFLRFFFFFFFRFLRFFFFFRLRLFRLRRFFFFFLFFFRLFFLFFLRFRLRFLLFFFFFFFRFFFRFFFLFLFRFFLFFFFFRFFFRFFFLFFRFRLLFFLFRLFFFFLRFFFFLFFFFRFFRFFFFFRLFFFFFLFFRFFLLRFLFFFRFFFLLFFRFFFFFRFFFFRFLFRFFLRLR +FRFFFFFFLFFLFFFFRRLLRFFRFFLFLFRFFFRFLFFRFFRLLFFFFFFLRFFFFLFFFFFFFFFFFFRFFLRFFFRFFFFFFLRLRLFFFFLRRLFLRFLRFFFFFFFFLFFFRFLFLFFFRRFFFRFRFFFFLFRRFFFFFFFFFFLFFFFRFRFFLFRFFFLFFLFFFRLFRFRFFFFFFFFFLFFFFFLFRFLLFFFFRRLRFRLLFRFFRRLLFLRRFLFFLFFRRFFFFFFFLFFFFRFFLRFLFLFFLRRFRFFFFRFLFRFLFRFFFFFFRLRLFFFLFLFFRRFFLFFFLRFFFRLFLFFFLFFFFRFFFFRRFLFFFLFFFFFRRFLLRFLFFFFFLRRLLFFRFRFLLFRRFLFFRRLFFFLFRFFRFLLRFLRFFLLRFFFFFFFFFLRFLRFFFFFLRFFRLFFFFFLFFFFRFLFRFLLFFFFFFFFRFRFLRRFLLFFFFFFFFFFRFFLRFLLFFLRFRFLFRLRFFFRFFFFFFFFFRRLFLFFLRFFFLFFFFFFFLRLLFFRFFFRFRFLFFFFRLFFFFFRFFLFFLFRRLRFLRFFFFFRFFFRFLRLFFFFRLLFFFFLFFRFFFFFRRLFFFFLFLFRRFLFFFFLFLRFRFRFFFLFFFFFFLFFFFRFLLFFRFFFFFFFRRFLFFRFLFFFLRRFFLFFFFLFFFLFFFLLFFLFFFFFFLFFFLFRFRFFLLFLLRLFFFLFRFFLRFFLRRLLFRLFLRFFFFRFFFFFFFFFFFFFFRLFFLRFFFRRFLFFLRFRFFLLFFFFFLFRFLRFFLFFFRFFLFLFFFFFRFRFFFLFLLRFFRFFRLFLFFRFRFFLFFRFLFFFFFLRLFFRRFFFLLFFFFFRFLFRRLRRLFLFLRFRFFFFFFLRFFLLRRFFFFFLFFRFFFRFLFFFLFFRFFRFFLRFLRFLFRLFLFLFRFFLRFFFFFRFFRLFLRFFRFFLRFFFLFFFFLFFFRFRLFFFFFFFLFFFFFLFRFRLFLRFFFLRLRFFFFFFFRFLFRLFFLRFLFRFFRFFFLFFFFLFRFLRFFFFLFFFFLRFFFLFLFFFRRFFLRFLFFRRFLFFFLFLFFLFFLFFFRLRFLFFFFFFFRFFLLFFRFFFFFFFRRLFFFLFRFFFFFFLLFRFFRFLLRFFFFFFRFLFRFRLFLFFFFRFFFFFFFRFRFLFFLFFFFRFRFLFFLRFFFFFFLFFFFRLFFFFFFFFLFRFFLFLFLRFRRFFLRLFLRFRL +RFFFFFLRRLFLLRFFFFLRFRFFRRLFFFLRFFFFRLFFFFRFFLFFRFFFFRFFFFFFFFLR +FLRRFFRLFLRFFFRFLRFLFFLFRLRFFFRLFLFRRFFLFFRFFRFFRLLFLFFFRRFLRFRLRLFFLFLRLRFLFRFFLFRFRFRLFFLRFFFFFLRRLLRFFLRRFLFFFRLLFRFFFLFFFRFRLRLRFLRFFFRLLFFFFRFLFRFRLFFRLRLFRLFFRLFFRFLFRLFFLRFLRFLFRLFRFFFLLRRFRLLFFRLFRLFFFRRFLFFLFFFLRRFLFLFFFRRFLRLFFLRFRLLFRLRLFLRFFFLRRLFFRLFLFRFFFFFLFLRRLLFFRFFRFLLFFLRFRFFFFFFF +FFLFFFFFFFFLLFRLFFFFFF +FLFLRFLLFFFL +LFLLFFFRFLFFFFFLFFFFFFFFFFFRLFLRRLLFFFFFFFFFFFFFRFFFFFFRLRFRFFFLLFRFLFFRFFFLFFFFFLRFFLFRRFFFFLRLFFRLFFFFFLFFLFFFFFFRFFRFFFLFFRRLFFFLFFRFRLLRFRFLLRFLFFRFFRFLF +RFFLLRFFLFFRLFLRFFFFFFFFRFFFFFFFRFFLRFFFRRLFRFFFFRFLFFFRLLRFFRFFRFFFLFFLFFFRFFFFRFFRLRFFLLRFLFRLLRRLFFLFFRRLFFFFLFFFFLFFFRRFFLFRFFFFFRLFRLFFFFFLFFFFFFFFFFFFFFLFFFFFLRFRLFFRRFFFFFLRFFFFFFFFLFRLRFFFFFFLFFLLFRFFFFFFRFLRRLFFRLFRRLFLFRFFLFFLRRLRRFFFLFLFFFRFRFFFRRFFFFFFFFFRFFRLLFFRFFFLLRRLFFFFFFFFFFLFFLLFRRFFFFFFFFRFLFFFFLLFFFLFFFLRFLRLRFFLFRFLFFFRFFLFFFRFFFFFFFFFRFFRRFFRLLRFFRLLFRLFFFFFFFFRRFLFFLFLRFFLRFFRFRLFLFFLRFFFRFFLFRFFFFFFFFLFRFFFRFFLFFLRFLFLFFRFFFFRFFLFRFFFRLFFLRFFRFLLFFRRFLFLRFFRRLFLFFFRFLRFFLRFFFFLFLFFRFFFLLLFFFFLFFFFFFFLFFFFRFLFLFFLRFFFLFFFFFLRLRFLFLRFFFFFFFFLFFLLRLFFFFFRFLFLFRLFFFFFFFFFFRFLRLRLRLFFRRFFFRRLFRFRLLFFFLFRLFRFRLFFRFLFLRFRFFFFFFFFFFFRRLFFFFRLLRLFFLFFFRFLFLRRLFFRRLFLFFFLFRLFFRFFFRFFLRFLFLFFRFRFFLFFFLFFFRLRRLRFLFFFFFFFFFFFFLFFFRRFLLFFRFFLFFLFFFFLFFRFFFFFFFFFFFRFFFFFFFRRFFFFFLLRFFFLFFFFFRLLRFFLRFFRLFFLRRFFFFFFRRLLFLRFLFLFFRRFFFFLFFFFRFFRLFFRRLFLFFRFLFFFLRRLFFFFLRFLRFRFLLFFFFFFFFFFFFLFFFFRRFFFFFFFRLLFFLRFFFFFFLRLRFFFFLLRLLFFFFFFFFRFFFLLFRFFFFFFLFLLFFFRFRFFFFLRRFLFFFRL +FFFRFLFFRFFFFFFLFFFLFFFFFRFLFRFFLFFFFFFRFFFLFFRFRRLFFFLFFFFRLFLFFRFFFLFFRFFFFFFFFRFFFFFFFRFFFFFFFFLRFFLFFFFFFFLFRLFLFFRFFRLFLRRLFLRRFLLFRFRFLLRFLFFRLFLRFLFRFRLFFRFFFFFRLFRFLLRFFFFFFFRFFFFFFFRRLFLFFFFRFFFFLFLFFRFFFLFRLRRFFFRFLLRFFFFLFFFFLRLFFRFLFRFLFFFFFRFFLRLRFFRFFFLFFLRFRLFLLRRLFFFFFFFFFFFFFLFFLRRFLFRLFFRFRFFFFLFFFRLLFRLFFFRLFFRFLFRLRFFFFLFFRFRFLFFFLFFRFFFFRFFFLFFFLRLRFRLFFFLFFLFFRFFRFFLFFFFLRLFRFFLFLFFRFFFFLRRLFFRRLRLRLFFLFFRFFFRFFFRLFLFFFFFLFFLFLLFFFFLFFFFLFFFRRFFFFFFRLFRLFFFLFRFLFLRFFFFFFFFFFLFFFFRFFFRLFLRFFFFRFLFFFRFFFFFFFFRFFLFFLRFFRFLFFFFLFRFFFFFFFFRFLFFFFFLFLRRFFFLFLFRRFFRFLFRFFFFFLFFFLFRFLFRRFLLRFFFLRFLRRFLRFFRFLFFFRFLFFFFLFFFLRLRRFLFFFFFRRFFLFFFFFFFFFFFRFRLLFFFFLFFRLLFFRFFFFLRFFLFRFFLRFRFRLFFRFFFFLFFFFFFRLLFFFLFRFFFRFLFRFLFFRFFLFFFLFRFLRFLLFRRLFFRFLRFFFRLLRFFFFFFFRLFLFFRFRLFLFFFFRLRFFLFRRLFFRFLFFFFFLFFFFFRFLFLFFFFRLFFFRRFFLRFFLFFFFFLFFFFRFFFRLRLRFFFLFFLFFFRFRLFLLRFFRLRRFLRFFFFLFFFFRFRRFFLRRLFFFFFFFFFFRFFFFFFFFFLFFLFFFFFLFRFFFFRLRFFRFRLFLFRLFFLFFRLFRFFFFFRFFFFFRLFLFRFRLFRFFLLRFFLFRFRFFLFFLRLRRFLFLFFRFLFRFLFFRLRRFLFFFLRFFFFFFLFFRFFFRFLLRFFFFFRFLFFLFFFFFRFFRFRFLFLFRFFLRFFLFRFRLFLFFLFRLFFRFFRFFLRFFRLFRFFFLFFFRLLFFFFRLLFLFFFRFRFFFFRFFFFFFLFFRFLFFLRFRFFFFRLFRLFFFLFFRRFLLFFRLFFLRFRFFRFLRLLFLRFFRLFFFLFFRFLFFLRFFFFFFFFFFRFFRFFLFLFFFRRFLFFFFFLFRFFFRLRLFFLRRFFLFFFLFFLRFRLFRFFFLRFFLFFLFRFLLFFRRFLLRFRFRLFLFRFFFFFFFLFRFFLLFRRFFFFFFFFRFFFFRFLLFFFRFRFFFLFFFFFFLFRRFLFLFFFFFFFFFFFFLFFRFFFLFFLLRFRFLRFFFFFRFFFFFFLFRLLFFRLLRFFFFFRFFRLFRLFFFFLFLFFFRFFFFRFFFFFFFFFFFFFRFFLLFRFRFFFFFRFFLLFFFLRFFFRLLFFFRRFFFFFLFFRFRFFFFLFFFLFFRFRRLFFFFLLFFFRFRFFLRFFFRLFFFLFFRLFFFRFLFFLFFFLFRFRFFRFFLFRFLFLFFFFFFFFFRFLFFFFFFRFFFFFFFFFFRFFFFFFFFLFFFFRRFFFLFFFFFFFLFFLRFFFFRLFFFFFFLLRLFRFRFFLRFFFFFRFLFFRRFLFLFFFFRLFLFFFRRFFFFFFFRLRLLFRFFFFFFRFFFFFFLFLRFLFRLRLRRLLFFFFFFRFFLFRLFFRLFFFFFRFFLFFLFFFRFFLRLFLFRFRFFFFRFFFLFFLFFRRLRFFFFFFFLFFFFFFLRLLFFFRLRFFRFFFFFFFFFLFFFRLFFLRFFFFFFFRFLLFFRFFRFLFFLRRFLRFLRFLRFLFFFFFFLRLFFFRFFFFFLRFRRLLFFLRFFFLFRFFFLFLFFRFLFFRLRFFFRFLFFRFFRLFRFFFLFLLRFFFFLFRFLFFRRLLFRLFRFFFFFFFFFFFRFLFFFRLFRFFRFFFFFFLRFLFLRLFFF +FLLFFRFFFFFFRFFFFLRLFFFFRRLRFFLFFLFFFRRFLLFRLFFFLRFLFFLRFFRRLFFRFLFFRLFFLFFFFFRFLRFFLFFFRRLRFLFFRLRFFFLFFFFFLFFLFFRFFRFFLLRFFFFFFRLFFFLRFFFFFLFLRFRFLFFRLFRFFRFLRFFFFFLRFFLFFRFRFLRLLFFFFLRLRFRFFRFFLLFFFFLRLFFRFFFFFRFRFFLLFRRFFRLLFFFFLFFFFFRFFFFFFRFFFFFFFFLFRFFRLFLFLRRFFFFLLFFFRFLFFRLFFFFFFFRFRFLRLFRLLRFFRLR +FLRLFRRFLFFRFLFLFFFFFRRLFFFFFFLFFFLLFRLRFRFFLFRRFLLRFFFRFFLFRFFFFLFFFLLRFFFFRLRLRLRFFRRLFRLLFFRFRLFLFFRFLLRFFLRRFLRLFRLLRFFFRFRFFFFLLRLRFFRLFFLFFFRFRLRFLFFLFFLFRRLRLRRLFLRRFLRRLLRLFLRLFFFRFFFRFFLFFFRLFFLLFRLRRFFFLRFLRFRLFLLRFFLFFFRFLFFFRFRLRFFRFLLRFFFFLFFLFRFLRFRFLFFLFFFFLRFLFFFRFFFLRFLFFFFFRL +FRFFFRRFLFRFFRRL +RLFFFLFFFRFFFRFFLFFLFFRFFFFLFFRFRFFFRFLLRLFFFFLFFRFRFFRLRFFLFLFFRFFLFLRFRFFFLFFFLFRFLFFFFRRLFRFLFFFFFFLFRFFLFRFFFFFFFFLLFRFFFLFRFFRFFFFFFFRRLFLLRFFRLFRLFFFLFFRFFRFRFLFFLFFRFFFRLLFFFLFFFLRFFFFFFRLFRFFLFFFFRLFFRRLLFFFFLRLFFFFRFRFFLFFFFFFFFLFFRRFFFFLFFFFLFLFFRFFFRFFFFFRLRFFFFFRFLFFFLFFFFLFFFFFRFFFFFFLFFFRFLLFFFRFRFFFFLRFFFRLFFRLFFRFLRFFFFFFFFFFLRFLFFFFFFRLFFFFLRLFRLFRLFFFRFLRFFLRFLFFFFFFFFFFFFFFLFFRLFFFRLFFFFFFFRFLRFRLFFFRLFRFFFFFFFFFFFFFLFFFFFFFFFFFLLRFFLFFRLFRFLRFFFLRFFFFFFRFFRLFRLFFFLRFFFFRFFRFFFFFFFFFFLFFFFFFLFLRFFFFRFLLFRFLRFFRFFFLFRFLFRLFFFFFFFFLFLFRFFFFLFFRFFFFRLRRFFLLFFRFLFRFFFFFFLRFFFFFRFFFRFRFLFFLFLRLRLFFLRFFLFFRFFFFLFFFFFLFFFFFRLFFFFRFFFFFRFFFFFFFFFFRFLFFFFFLRLLFFFFRFFFRFLRFFLFFFFLFRRFLFFFFLRFFRLFFLFFFFLRFFLFRRFFFFRFLFFFRFL +FFRFRLFLFFFFLFFFRFRFFLFFFFRFLLFFFLRFFFRFLFFFRFFFLFRRFLLRFFLRFFFRFRLLFLFFRFFFFFFFRLRFLFRFFFFLFRLFFRFLFFFFFFFFFFLFFFFRFLLFRFRFFRLFFLRRFLFLRFRFFFLFFFFFFLFRRLLRFLFRFFFFRLFFLFRFRLLFFFFFFFFFFFFFLRFFFFFLRFFLRLFLRFRLLFFLRRFRLLRFFRFFLFRFLFFRFFFFRFFFLFLRFRFLFFFRLRFFRFLLFRLRRLFLFFFLRFRLRLFFRFLRLFFFLFFLFRFFFFRFFRFFFLRFFFLFFLRLFRFFFFRFFLFFFFFFFLFFFFLLFRFFFFRFFFRRLFFFFFFLFFFFLFRFLFFLRRLFRRLRFFFLFRFFFLFFFFRLLRFFFFRFFLRFLFRLFFFFFFFLRFFLFFLFFFFFRFLFRFFFFFFFRLRFFFFFRFFFFLFRLFRFLFFLFRFFFFFRFFFFLFRFFLFFFFFLRFFLFLFFRRLRFRLFFRLFLFRLFRLFFRRLRFLFFRLLFFRFFFFFFFFFLFFFLRRFFFLFLFFFFFRFLRRFFLLFFFFFRFFRFFFLFFLFFFRFFFFRRLFFFFFFFFFLRFFFFLFFFFFFLFFFLFFFFRFFRLRFFFFFLFFRFFFFLFRFRFFLRFFFFFFFFLLFFFFFFFRFFFFFFFFFFFRFLFFFFFLFRFLLFRRFFFLLFRLFRFRFLRRFLRLFFFFFFRFRLFLFFRFLFFFFFL +FLFFFFFFRFRRRLRFFLFFRLRFLFLLLFFFLFFLRRFLFLRFFFLRFLFFFRLFFLLFLFRLRLFFLFFFLRFFFFFLLRLLFFLLRRFFLRFFFLRLLRLFRFRLFFLLRFFFFFFFFLRFFLFFLRLLRFRLFRRFFFFFFLFRFFLRFLRFRLFFLFLLF +RFFLFFRRFLFFFFFFLRFLFFFRFRFFLRFLFRLFFLFFRFRLRRFLFFFFLFFLRFFRFLFFLRRLRFFFLLRFLFRFRLFFFRFLLFRFFFFFRLRLFRFLFFRFLFFLFFFFFLRRFRFFFLRFFFLFFLFFRLFLFRFRFLRFLRFLFFFRFLFFLLRLRRFFFFLFRFFF +FFLRFFFFFRFFFFFFFFRFFFFRRLLFFFFFLRLRFFRLFFFRFFFFFRLRRLFLFLRFFRLFRRLFRRLLRLRLRL +RFLFRFFRFFFFRFFFFFFRRLFFRLLFFF +RFLRFLFFFFFFFLRRFLFFLFFFFFLFRFFFFFFRFFRFFLFFFFFFFRFFLFRFFFFLFLRFLFFFRLRFFFFFFFFFFRLRFRFLLFFFLRFFLFRFFLRRLLFFFFFFRFFFFRLRFFLFRFFFFFFFRFFFFFLFFFLRLFFRFFFFFFFFLFRRFFFLFFFFFFRLRFLFFFFFFLRFFLLFFFRFFFRFFFLRFRLFLFFFFFFFFLFFFRLRFFFFRLFRLFFRFFLFFFFFFFLLRFFFLFFRRFLLRFFFFFFRFFFRFLFLFFRFFRFFLFRLFFFRRLFFLFFFLFFFLRRLFFRRFFFLFFLFRRFFLRLLFFFFFRFFFFFFFFFLFRFLFFFFFFFFFFFFLFFRFRFFLFLFFLRFFFFFRFLRFFLRRFFFFFFFFFFLFFFFFFFFLFFRFLFRRFFLRRLLFFFLFRFFFFFFFLFRFFFFLFFFFFFLRFFFRFLFFFFLRLFFFFRFFLFRLFFFFRFLRRFFFFLLFFFFFFRRFFLFFRLRFFFFLRRFLFFLFFRFFFFLFFFFRFRFFFFLFRFLFFFFFFFFFFLFFFFLFRRFFRLFFLRFFFRLFFLFFRRFFFLFFFLFFFFFFFFFFRRFLFFFFFRFFLFFFFLFFRFFLRFFRLFFLRFRFFFFFLRFFFRFFFLFFRLFRFFFFLFFFLFRFLFLFFRFFFFFFFFFRFFFFFFRFRLLFRLFFFFRFFFLFLRLFFFFRRLFRLFFFFFFLLRFFLFFRRLRFFLLFFRFFLFFFFFFRFFFLLFFFFRFLRRFFFFFFFFFRFFRLLRFFLFFRLLFRFLFFFFFRFFFRFLFFRFFFFFFLFRFRLLRFFFRFLFLFFLFFFRLRFLFFFFFFFFFFRFFFFFFFFFFFLRFFFLRFLFLFRRFLLRRLFFFLLRLRRFFLFFFFFRFFRFFFFFRLFLFFFFFLFLRFRFFLRRFFRLFLRLFFFFLFFFFFRLFFRLFFFRFFFFRFFLLFFFRFFFFRFFFLLFRFFLFRFFFFLFFFFFLFRFFFLFFRFFLFRFFFRFLRLFFRLRFLFFFLFFFRFFFFFFRFFRFLFFRLFLLRRFLFRFFFFRFFLFRFFFFFLFFFLRFFFFFFFRFFLFFFRLRFFLFFFLFFFFFFFFRFFFFFFRFFRRLFFLFFFFFFLFLRFFFLFFRFFFFFRRLFFFFFFFFLFFFFFFFFFFRFFRLFFFFFFFLFRFFFFFFLFLFRFFLRFFFRFFLLFRFFFRLFFRLFRLLFFFFFRFFFFFLFFFRFFFFFFRFFFFFFFFFFFFFLFRFFFLFFFFFFFFLFFFLLRFFFRLFFRFFFFFFRLFRRFFLFFFFRLFFFFFFFRLRLFFLRFLFFFFFLRLRFLFRLFLRRFFLFFFFFLFRFFFFRRFFFLFLFFFRFFFFFFRFFLLFFRFFFFFFFFFRFLFFFRFRFLLFRFFFRLFRFFRLFFFLFFFFLLFFRFFRLFFRLFRFFFLFFFFFFLFFFRFLLFFFRRLLRFRLRFFLFFFFRFLRLLFFFFRFRFLRFFFRLFFRLFFFFLFRFRFLFLLRRLFFFLFLRFFFFLRFRFLLRRFFRFRLFFFFFFLFFFFRRFFLLFFFLFFFFRFRLRRFLFFFFLFFFRLRFFLFFRFFLRLFFRRFLRLFFFLRFFRLRLRFFRFFLFFFFRLLFFFLFFFFRFRFFFLFFLRFFFFFLFRLFFRFFFFLFFFRRLFFFFFFRFFFFLFFFFFRFFLRFRFFLRLLFFFFFFFFFFFRFFFFFFFRFLFFRFFFFLLFFRLRFFFFFFLFRFFFFLFFFRRFFFLRFLLFRLFLRFFLFFFLRRFFLRFRFLFFFFFLFLRFFFFFLFFRFFFFRFFFFRLFFFFRFFLFFLRFFFFFFLRFFFRFFFFLRFFLLRFLFRFLFFFFFFRFFFFFFFLFFFFFFLFRFFLRFFFLFRFFFRFFLFLFFFRLRLRFLFRFFFFLFFLFLRFRFFRFFFFFRLFFFFFFLRFLFFFFFFFFFFFFFFFLRFFRLRLRLR +LRFLFFFFFLFFFRFRFFFFFRFFFLFFFFRFFFFFFLRFRLFLFLFFFRFFFFFFFLFRFFFFLRFFFFFLFRRFLFFRFFFFLLFFFRLFFFLRFRFFFFFFRFFFFFFFFLRFLLRRFFLLRFFFFFRFLFFFFFFRLFFFLFFFFFLFFLRRLFRFLRRLFFFFFRRLRFFRLFLFRLRLFFLRRLFLFFFRFFLRLFRLFRRLRFFFRLLFFRLFFRFRFLRLLFFFFFFFFFFLFLRLRFFLFFFFFRFRFFLFLFFRRFFFFFFFFLFRLFFFFLRRLFFFFFLFFFRFFFLFFFFLRLLRRFRFLFFFFFLFFRRFFFFFRFFFFLRLFLRFFFFRLFLFFFFFRFFFFFFFFFRRFLFLFRFFRRLFFLFFFFFFLFFFFLLRFRLLRRLFRFFLRFFFFFFFFFFFFRFLLRRFLRLFRFLFLRFFLRLRFRFFLFFLRLFLFFRFFRFFLLFFRFFFFFLRFFRFFFFLRFFLRLFFRRFLFFLFFFFFFFFFFFFFFFFFLFFLRFFFLFFFRLFRLFFLFRFRFFFFFFFFFFRFFFFFFFFFRFLFFFFLFRFRFLFLFRFFFRFLRFRFFFFFRLFFLLFRFFFFFLRFFRLFLFFFRFLFFFFLFFRFFLFLFRRFLFLFFFRFFFFFRLLRRFLRRLFFFFFFFFLRFFFFFFFFFRFFFFFFLFFRFFFFRFLRFLFFRLFLFFFFFFFFLFFRFFFLFLFRFLRFRFLRFLLRLRLR +RFFFLRFLFFRLFFFFRLFRLFFFLFFRFFFFFFLFFFRFLFFRRLFFRFFLRFFRLRFFLFLFFLRRLFFFLFFRFFLLRRFFLFFFLFRRLFLRRFFRLFFFFFFRLFFRFFFFFLFFFLLRFFFFFFRFLLRFRFFRLLRFFFFFLRFFFLLFFFFLFFFFFLRFFLLFRRLFFFRFRFFFLFFLFFFRRFFFLFFFLFLFRFRFLFFFFFFFFLRFFFLRLFFFFLRRLLRFLRFFLRFFLRLLRFRFLFFFFRRRRRFFFFFFFRRFFLFFRRLFRFLLFFFFFFFFFRLFFFFFLFRLFFFFFFFFFFFFFFFLFFFRLFRFLFRFFRFFFFLLFFFFRFFLFFRRFFLRFLFFRLRFLFRLLFFFFFFFFFLRFFFFFRFFFFFRLRFRLFFFRLFFLRFLLRFRFLFLFLRFFFFRFFFFLFFLFFLRRFFFRFFFFFFRFRFFLLFFFFFFFLRRLFFFRRFLFFFFFFLFFFFFLRLFFFLRFFRFFRLFLFFLRFLFFRFFRFFFFFFLRFLLFFFFRLFFFRFRFLLFFFFRLRLFFRFRFLFFLFRRFFLFFRLLFRFFFFLRRFFFFFFRFFFLFFFFFFFFFLFFFFFFFFLFFRFLFLFRFFRFFLFLFRFRLRFFFFLFLFFFRRFFFFFFFRFRFFLFFFFFFFFFFFFFLFFFFFFLFFFRFLFRFLRRFRLFFFFLFFFFFFFFFFLFFFRFFLRFFFFFFFFFRLRFLFFFLFFFFFFLFFRFFFFFLFRFLRRFFFFFLFFFFFLFRFFFFFRFLLFFFFFFFFFFRFFRLRFFFFFLFRLFRFFLFFLFFRLFFRFRLFFFFLFFFFRRLLRRFLFFFLRRFFFFFFFLFRLLFFRLFFRFFFFFFFFFFLFFRRFLRLLFRFRFFFFFLFFFFLFFFLFRFFFFFFLRFLLLFFFFFFLFFFRFF +FFFLFLFFFRLFFRFLRFLFRFRFFRFLFFFFFFFFLFFFRFLFLFFFFRFFFLRFRFFFRLFFFFFLFFRFLFRFFFFFFFFFRFFFFLFFFRLFFFFLRFLFFRFLFRFFLFLRFFFFRRFFFLLFFRLRFLFFRFLFRLLFRLLFRRFFFLRFLFRFFFFFRLRFLFFFFFFFFFFRLFRFFLLFFFFFFFRFLFFFFRFLLRFRFFFFFFFLFRFRFLFFRLLRLFFFLFFFLRFFFFFFRFFFFLFRFLFFFRRFLFRFLRFFLFFRLFFRLFFRFFFFLFRLFFFFLRRFFLLFFRFLRRFLFFLFFFRFRFRLFFFFFFFFRFLFFFLFRFFRFFFRFFLRLFLFRFFFFFLLFFRFRLFLRFLFRFRFLFRFLRFFFFLFFLLFRFFFFFFFFFFFFRFFLRFFFFRLRFFF +FFFRLLFFFFRFFFFFFRFFFLFRLFRFLRFLLRRFLFRRFFFLFLFFFFFFFLFLRFFFFRLFLFFRFFFFFRRFFFLFFFFLFFFFFFRFFFFRFFFFFFLFFRFLFFFLFRLRFFFFFLFFFFFRFFFFRLFRFFFFFLFLRFFRFFFFFFFFRLFLFFFRFFRFLFLLRFFFFFFFFRFFFFFFFFFLFRFRLFFFFFFFLRFFFLFFFFLRFLFRFFLRLFLFRRFFLFFRFFFFFFLRRFLRFLLFFRFLRLFFRFRLFFLRFFLFFFLFRFFRFFLFFFFRFFFFFFFFFFFFLRFLFLFRFLFFFFFFFFFFFLRFFFRFFFFFFFFRLFLRFFRFFFFLFRFFFFRFFFLLRLLRRFFFLFFFFLFRFRRLLFFFLFFLFFFFFRFFFLLRRFRFFFFRRFLFLFFFFRLFFLFLRFFFLFRFRLFFFFRLLFFRRLFFRFFFLFFFFFFFLFRFFFRFFRFLRFRLLFFFFFFRLLFRFLLFRFFFFFFFLRRLFFFFFRFRFLFRFFLFFFFRRFFLFFFFFFLFFLRFFRFRFLLRRFLFLFFLRFFLFFRRFLFFFFFFFFLFFLRRFFFLRFFRFFFFFFLFLFFRFFRFFLFLRFFRLFFFLFFFFFRFRFFFFLRLLRFRLLRRFFLFFFFRRFFFFFFFLFRRFFFLLFRLFLRRFFRLLFFLRFFFFRLFRRFFLFFLFFFLFRRLRLFFFLRLFFFFLFFRRFLFRLFFFFFFFRFFLFLFFRRLFLRFFLFFFFFRLFFRFFFFFRFFFFFFFFLFFRFLFFRLFLRFFFFRFFFFLFFFFFLRFFLFFRFFFFFRFLLRFLRFLFLRRLRLRLRLFLFFFLRFFLRLFRFFFRLRFLFFFRFFFFRFFFFFFLFFFFFFFLFFLFFRFFFRFFFFFFRFLFRLRFFFRFFLFFFFFLRLFRFFFLFFFFFFLFFRFLRLRFFFFRFFFFLFLFLRFRLFFRLFFFLFFFRFFFFRRFFFLFFFLLFRFFRFLFRFFFRLLRRFFFFRLFFFFFLRFFLFFFFFFFFFLRFLLFFFRFFFFFFRFLLFFFFLRRFLFRFFLRLFFRFRFFLFFFRFFLLFFFFRRFFFFFRLFFFFFLFFRLLFFFFRLFFFRFFFLRRFFRLFLFRLFRFFLFFRFLFFRFRLRLFFRLFFLFFFFRFLRFFLRFFFFRFLRFFRFFFFLFFFFFFFFFFLFFRFLFFFFFFFFFFLFFFFRFFFLRFLFLFRLRRFFFFFLFRRFFFFFFFFLRFFLFRFFFLLFFRRFLFFFFFRRLFFFFFFFFFLLFFFRFRFFFLFRFLFFFRLRFFFLFRFFFRLFFRRFLLFRLLRLLRFFLFFRFLFFFFFRFLFFFRRLFFRFLRLFRFLFFFFLFFFRLRFFFFFFRFFFLFFRFFFLLRFLRFRFFLRLFFRLFFFLRFFFFFFFFLFFFFFFFLRFRLFFLRFFLFFFFFFLRFFLLRFRFRFLRFFFFRFFFFFFLFFFRFFLFFFFFLRRFFLLFFFFRFFLFFRFFFLLRFFFFFFFRFFFRLLRFRFFFFFRLRFLFFFFFLRFFFFLFFLFRFFFFFLRLFFLFRFFRFFLFRFFRLFFFFFFLFFRLRLLRRLFFLFRRFLLFFFFRFFLRFRLLFFRLLRFFFFFFRFFFFFLFRFRFFFFRLFFLRFRFFFLLFRFRFLFLFFLFRFFFFFLLFFFFRRFFFFFLFRFFFRLFRFFFRFFFLFFLRRFFFFFFFFLFFFFLFFRFLFFFFLRFRRLFFFFFFFFFFFFFFFFFFRFFLRFFRLFLFRLRFFFLFFFFFFFFFFFFFFFLRLRFFFLFFRFFRFFLFFRFFFFFFFLFFRFFRRLFFRLLFRFLFFFLFFFFFFFFRFFFRFLFFFFFLFFFLFFFRFFFLRLFRLFFRFFFFFFFFFFFRFFFLRFFFFLFLFRRFLLFRFFRFFFRFFLFFLFRFLFFLFFRFFRFFLFFFFFFFFFFFFFFLRLFFLFRFLFFFRFLFFFRFFFLFRFFRFFRFFFLFLFFFFFLFRFRLFLRLRLFFLFRFRFLRFFFFFFFFFRLRRFLFFFLFFRRLFFFLFFFRFLFRFFFFLLFRFRLFFLFFLRFLRFFFRFFFFFLFFRFLRFFFFFFFFFFLFFFFFFRLFFLFFFFFFFRFFFRFRLLFFRFFFFFFRLLFFLFFFFFFFRFFLFRRLFFFR +FRFFFRFFRFFFFRRL +LLRRLFFFFFFFLFFFRFFFFFFFLLRFFRFFFRFFFLLFFRLRFFFLFRFFRFLFRFFFRFLLFFLFFFFFFRRFLRFRLFFFLFFFFFFFFLFFRLFFFFRFFFRFFFLFFFRLR +FFRFLFLFFFFFFFLFRFFLFFFFFLFLFRFRLLFRFFFL +FRRLRLLRFFLFFFF +FFLRLRFFLRRLLFFLFFFFFFRFFLLFFFRLFFFL +LFFRFFFRLFRFLFLFFFFFFFFLFLRLFFRLRRFFLFFLFRLFFFFL +FLLFFRLFFLRFRFFFLFRRFLRRLLRFFFRLLFLRRLRFRLLFFLRFFLFFFRFLRFRFRLLFFFFFRLLFRFRRLLFRLRFLLRFFLFLRFFFFFFRFFLFFRLLRLFRRLFFRRFRLRFFRFLFFFFLRRRLFFFFFLFFLRFRLFLFFRFLFFFFLFFRFLRF +LFFFLRFRFLLFRFFFFFFFFFLRLLRRFLFFFFFFRFRFFFLFFRFFFFFLFFRFFLFFLFRFLRLRFFFFRLRFFFFFRFFLFFFLFRFFFLRRFFFFFFLFLFRFFFFFFFLRRFFLFFFFFLFRLFFLRLRFFRFFLLFRFRFFLLRRLLFFFRFFRFLFFLFFFFFRFRLFRFFLFFLRFLRRLRFFLRFFLFRFFFFFLLFFFFFRLFFRLLRFRFFLFLFRFRFFFRFLRLRFFFFLFFRFFFFLLFFRFFFRLFLFFFRLLFRFFRLLRFLRFFRFFFLFFFFFFFFFFFFFLRFRFFLFRLFLFFFFRFFRFFFFFFLFFFRFFFFFFFRFFFFFFLFLFRFFFFFFFRFLLRFFRLFLFFFLFFFFFFFFRRFLFRRLFFFFLRLFFFRFLFFLFRFRFFFFFLFRFLRFRLFLFFFFFFRFFFFFLFLRRLFFFFRFLRFFLFFFFFFFLFFFFRLRLRFFLFLRLRRFLRLFFFFRLRRLRFLFFFFFFFLFFFLLFRFFFFRFFRLFFFFFRFFFFFLRFFFFLFFRFLFFFFFFRFLFFFRFFFLFLFRFLFRFLRFFFFFFRFFLFFRFFLRFFRFRFLFFFFFFFFFLFFLFFFFFFFRFFFFLFFFFRRLRFLFFRRLFLFFFLRFFFFFFFFLFFFRFFFFFFFRFLLRLFFFFFFFFFFFFFFLFFFFFFFLRFFRLFFFFFFRFRFFFFFFLFFFFRLFFRFFLFRFFLRFFFLFFFLFFRLFFFRFFFLLFRFRFLRFLFFLRFFFRFFFFRFFFLLRFLFFFLRFFFFLFRFFFFFFFFLFRFFFRFFFLFRFLFFLFFFFLFFRFLRFFRFFFFFFFLRLRFFFRFFFFRLLFFFRFLFFRLRFFFFRFFFLRFFFFFLFRRFLFFLFFFFFFLFLRFRFFFFFFRLFFFFFFLFFLRFFLRRFLFFRFLRRFLLFFRFFRFLFRFFRLFFLFFLRFFFR +LLFFFRLFLFFFFFFFFFFLFFFLFFFFRLFFFR +LRLFFFFRLFFRFFFFFFFFFFRLRFLRFFFFFFFFFFRLFRLFLFFFFFFFFFLFFRLFFRFFFFFFFLRFFFRFFLFFLFFRFFFFFFFLRRLFFFFFFRFFFRFFFLFFFFFLFFLRFFFRLFFFFFFLRFFFRFFFFFFFRFFLFFLFFRFFFFFFRFFFFRRFLLFFFRLFFLFLFFRRLFFFFFFLRFRLFLFLFFFFFRRFFLRLFFFLFFRFFFRFFLFRLFRLFFFLFRLFFLRLRRFFFFLFFFLFFLRRFFRFLFRFRFLFFFFRLFFFFFFFLRFFFRFFFRFFFLFFFFFFFLFFFFFFLFFLRFFRLLRLRFFFRFFFFFFFLFLFRFRFLLFRFLRFRFFFFFFFFLLFFRFLFRLFRFLRLFFFRRFLFFFLFFFRFLRFFFFRFLFRRFLFLFRLFFRRLFFFLFFFFLRRLFFFFFFFFLFLFFFFRRLLRLRFFFRRLFFFFFFFFRLLFRFLFFFFLRLFLRFFFRFFLFFRFRLFFRFFLFLFRFFRFFFFFFLFFLFFRRFFLFRLFRFFFFFRFFFLFRFFFRFLFFLFFFFFFFFFFFFFFFFLFFRLFFFLFFFRFFFFRFFFRFLFRLFRFLRLFFLFLFFRFRFFFFFFFRLRFLLFRLFRFFLRLRFFLFFFFRRFFFFFFFFRFLFLFRLFFFLFRFFFFFRFFFFFFFRLFFFFFLRFLFRLRFFFFRLFRFFFFFFLFLFFFRFFFFFLFFFFFRFFLRFFFLFLRFFLFFRFLLFFFFRFFFFFFFFFFRFFRFLRFLFFRFFFFFFLRLFFFRLFFFRFLRLFLFFFFFRFLFRFFLFFFFRRLFFFFRFLRFFLRFFFFLLFRFFFLFLRFFFFFFRLFRLLFFRFFFFFFLFFFFRRFFFFFFFFFFFFLFFLFRLFRFFRLFLFFFRRLRFFFFFFFLFFRLFFFFFFFLFLRFFLRFFFFFFFFRRFFFLFFFFRRLFLFFRLLRFFFLFFFFLRLFFFLRRFFFFFFFFFRFFFFFFLFFFLRFFFFFFLRFFFRRLFRLFLFFFRFLFRRLFRRLFFLRLFFRLFFFFFLFFFRRLRFFFLFFLRFLFFRRFFFLLFFFRFFRFLRFRLFLFFLRFFFLFFFFRFFFFFFFFFRFFFFLLFFFFRFFRFLFFRLFFRFLFLFFLFFRRLFRFLFRFFFLLFFRRFFFFFFRFFFLFFFRFFFFLLRRFRLLRFRFFFFFFFFFFFLRFFFFFLFFFFFLFFFRRLRFLFFFFFFFFFFFFLFRLFRFFFFFLRFLFFFFFFFFLFRLFFFRLFRFFFFFFFLFFRFRRLFFFFLFFFRFFFLLRFFFRLRLFFFFFFFFFFFFFFFLRFFLFFFFFLFLRFLFRFRFRLFFFLRFFFFFFRFFFRLLFRFFFFLFFFLFRLFFFLFFFRRFFFFFFFFLRFFFRFLFRFFLLFFFFRFFFFRFFFFFFRLFFLFFFFRLRFFLFFFLLFRFFFRFLFFLRFFFFFRFFLFFFRFLFRFLRFRFFLFLRRFFFFLFFFRFLFFFFLFFLRFFRLLRFFRLFFLFFRFLLFRFRFFFFRRLFFFFFFFFFLFFFFLFFRFFRFFFFRFFFFLRFRLLRRLLFFLFRFFFFFFLFRFFFRLLFRRFLFFFFFRFRLLFFFFFFFFFFFFLFRFLLRFFFRFFFFRFRLFLFFRLLFRFFRFFLLRFFFFLFRFRFFFFRFFLFFFFFFRFFFFLFFRFFFRFFLFLFFFRFLFFFFFRFLFFLFFRFFFFLRRLFFFLLRFLRFFLRFFRLFFFFFFLLFFFRFFFFFFLFFRFFRRLFLRLRFLFFFRRFLLFRFFFFFRLRFRFFLFFLRFFFRLFFFFLRFFLLFRFRFLFFFFFLLRFLRFFFFRFFFFLFRRLRFFLLFFFFFFFFFFFRRLLRFFFFFFFFFRFRLLFRRFLFFFFLFFFFFLFFLRFFFFFFFFLFRFFFFRFFLFFFRFFFLLFFFRFFRLFFRFRLFFFLFFFLFFFFLRFFFFFFLRRFFFFFRF +FFLLRRFFFFFLRFFFLFFFRFFRLFFFRFFFRLLFRFLFFRLFLFLRLRRFRLFRLFRRLRFLFRFLLFRLRFFRLRFFFFFLFFRFFFFFFFLRFLLRFF +FRFLFLRFLFLFRRFFRFLFFRRFFLFFLFLFRFFRFLRFFLFFRFLFLRRLFFFFFFFLFFFFRFFLRFRFLFLRFLFFFRRFLLFFRFFFRFFFFFFFLFRFLFFFFFLFRFLFLFRFFFRFFRFLFLLRFRFFFFFFFLFFFFFFRFRFFFFFFFLLFFFRFRLRFFFFFFLFRFFFLFFFFFFFLFLRFFFFLFFFFRFFFFFLRRFFFLFFRFFRFLLRFFFFFFFFFFLFFFFFLFFRFFFFLFRRFLFLRFFFLRFFFLFLFFFFRFFRFFLFFFFLRLFFRFRFFFFFFFRFFLRFFLRFFFLLFFFRLRFRLFFFFFFFFFFLFFFRRFLFFLFFRLRFFFRFFFFLRFFRFFFLLFFRFLRFFFRFLFRFLLFFFFFFFFFFLLRFLFRFFFFFFFFFFRFFFFFFFLFFRFRFFFFLFFFRFFFLFLFFFFFLFRFFFLRLRFFFFFFFFFFFRRFLFRFFFFFLFLRFFFFFLFRLFRLLFFFFFRFFRFFLFFLRRFLFRFFFLFFFFLFFFFFFRRLFRLRRLFLFLFRFLFFRLFFFFFFFRFFFRFFFFLFFRFFLFFFFFLRRFFFFLRLFFFRFLLFRRLRFLLFFFFFFLRFRFFLFFRFFFFLFFFFRFFFFFLFFFFLFRFRLFLFRLFLFRRFFRFFFFFFFFFFLFFFRFFFFLFFFLFFFRLFRFRLLFFRLRFFFFLFFRFLRFLFFRFFRRLFFFLRFFLFRFLFLRFFFFFFFFFFLFFRLFRFFFRFFFRFFLFLRFRFLFLFFFFLRFFFRLLFFFRFRLFLFFRFRFLRLFLRLRL +FFLFFLRRFLFRFLFLRRFFFRFLLLLLFLRLRLRLRFRFFFFFFFFFFLFFFFFFFFFFFFRLRLFLFFFRLRFFLRRLFFLFLFFFFRFLRFRFFFLFLFLLFRFFFLRFLLFFFRFRLFFFFRFFLFRFFFRFLRFLFRFFRRRFFLRFFFFFFLFFRLFRFFFFFFLRFLLFFLFRRLRLFRFFRFFLFRFLRFFLLLRLFLFFFFFRLRFLFFFLRFLRRLRFFFLRLFFRLRFFLFFFFFFRFFLFLRRLLFRFLFRFRLFFLFFRFRFLFFLRFFLRFFF +FRFFFFRRFLFFRFFFFFFFFFRRFLRRLFFLRL +FLRFLFFFFRRFFFFFFFFFFLRFFLRLFLFFFFFRFLFFFFFFFFRLRFFRFLFFFRFLRFLFFFLFRFFFFLFRFRLFFLRFFLFFFRFRLLRFFFFRLFFRFFRLFLFFFFFFFFFFFFFFFFFFFLFFFFFRFFFFRFLRFLLFRLFFFFRFFLFFFFFLFFFFFRFFFFRFFLRFFFFFFFFFFFLRLFFFFLRFFFLRFFFFLFFLFRFFFRLFRFFRLRLRLRLFFLFRFFFFFFFFFLFFFFFRFFRFLFFFRLFRFFLLFFRFFFLFRFFFFRFFLFLFFRFLRLRFFFRLFFRFLFLFFFLRLRLFFFFFFFRFFRFFFLFFFFRFFFLFLFFFFRFLFLFRFRFRLFLRFFFFFRLLFRFFFRFLFFFLFLRFRFLFFFRRFLFFRFRRLLFRFLFFFFFFFFFFFFLFFFFLFFRFRFFLFLRFRLFFFFFFFLLFFFFFRFFLRRFFLFRLFRLFRRFLLFFRFFFFLRLRRFFLFFFFRLFFLRLFRLFRLFFFFRFFFFFFFRLFFLFFFFLRLFFFFRFLFFFRLFFRLRFRFLLRLFLRRFFFFFFLRFFFFRFRLFRLLFFFLFFFRFRFLFFFFFRFFFRFFFLFFLFRLFFLRLRFFFFFFLRFFFFFFFLFFFRLRLFFFRRLFLRFFRFFFLRRLRFFFLLRFFFRLFFFFFFLFLFFRFFFFFRFFLFFFFFLFFLFRFRLFFRLRL +LFFFFFRFLRFFFFFFFRLFFFFRFFFFLRFFFFFFLFFLFFFFFRRLFFRLFRFFFRFFLFFLFFFFFFFLRF +FRFRFFLFFFLFLRFFFRLLFFFFLFRFFFLRFFFFFLFFFFFFLFFFRFFFLFFFLFFLRFFFRLRL +FFRFFFRLLRFFFRLFLFRRLLFRRLFLLRFFRFFRFFLFFFFRLFRFLRLFFFFRLFRLRLLFLRLFRFFFLRLRFFFLFRFLLRRFFRFFFRLRFLFRFFFFLFFRLFFRFLFLFFRFLFFFFFFRFRFFFLRFFFLFFFFFFLRFRLRLRLFFFRFRLLFFRFFFLRFLFFFFLRRFFFFFLFLFF +LLFRLFRLFLFFFLFFFFLR +FFFFFRLLRFRFLLFFLRRLLFFFRFFFFFRFRFLRFFLFFFRLFRFLLFFRFRFFFFFFLFFFRLFLFFFRFFFFFLFRFFFFFFFRFFLFRFLFLFFRLRRFLFFFLFFFFFFFFRFFRLRLFLRFLFRFFFFFRFFFFFLRLFFRRFFFFFFFRFLFFFLRRLLFFFLFFFFRFLFFFRLFFRFFFRLFFFLRLFFLFLFRFRFFFRFFFFFFFLRRLFLRFLFFRFLRFFFFLFFFFFLFFRLFFRFFRFFFFFFLRFRLFFFLFRLFLFFRLFRFRRLFFFLFFRLFRFLFFFFFFFFFFFFLFFFFFLRFFFFFLLFFRRFFFRFLLRFRFFRFFLFFRLFFRLFFFFLRLFFFFFFLFFFRFFFLRFFFFLFFFFFFFRRFFFLFFFFFFLFFFFFRRFFFFFFRLLFLRFRFFFFFFFLFFFLFFFFRFFFFFFLFRFRFFFFRRLLFLFFFLFFRFFFLFRLFLRFFFLRFFRLFFFRLFFFFFFFLFFRFRFFFLRLFFFFRFFLRFFFFRLFFLFFFFFFRFFRFFFFFRLFLFFFFLFRFFLFRFFRLFLFFLFRFFRFFFFFFLLFRRFFFFFLRLFFRFFFFRFFLFRFFFRLLFRFLFLFFRRLFFRFFLFFRLRLFFRLLRFFFFFFRFFFFLRFFFFRFRFLRFFFLFFFLRFFFLLRFFRLRLRFFRFFFFLLFFFFFFFFFFLRLFFFRFFRFLFFFLFFRFLFFFRFFFFFFFLLRFFRFLFFFFFFLFFFFRRLLFFFFFFRLLFFRFLRFFFRRLFFFFFFRFFFRLFFFFLFFLFFRRLLFFFFRFFFFFFFFFRLFLFFRFRFLFFFLFRRFFLFRFFFLFFFFFLFFLFRRFLFFFFFFRFLFFLFFRLRFFFFFFRFFFLRLLRFRFFRLFLFFLRFLRFFFRLFLFFRLRFFFFLRLRFFRFFRFFLRFLFLFFFRLFLFFFFFRFLFFFFFLFFFFLRRFLRLRFRLRLFRFFFLFFLRFRLFFFRFLLFFLRRLRFRLFFLRRFFFFFFLFFFRLRFFRLFLFRLRLFFLFFRRFFFFFFFFFRFFRLFFFFFFFLFLFFRRFFFLFFLFRLFFFLFRFFRLFRFRFFLRFFFFLFFRFLFFFRFFFFFFLFFLFRFRLRLLRFLFFRFLFFRFRFLFFFRFFFFLFLRFRFLLFRFFLRFRFFFFRFFFLFFFLFFRFRLRFFFLFFFLFFFFLRFFFFFFFFRLRFFFFLFRFRLFFFRFLFFFFLRLFFFFFFFFFFFFFLRLFFLRFFLFFRFFRFLFFFLRRFLFFRFFFFRFRFLFFFLLRFFFFFLFFLRFRFFRRLFLFFLLRFRFFFFFRFFFFFRLLFRLRFFFFLLRLRLFRFRLFFRFFLLFFFLFFRRFFFFFFFLFRFRFFLRLFLFFFFLFFRFRFFLFFFFFFFLRLRRFLLRFLFFFFFRFLFFRFFLFFRFFFFFRLFLFLRRFRFFFFFFFFFLFLRFFFFRLLFLFRFFFRFFFLFFRFFFFFLFFFFRLRFFFFRRLFFLFFFFFLFFLRFRLLRFFLRLRFFFRFLFLFFFFRLFFFFFFFFLFFRFFRFRLRLFFLRFRLLFRFFFFFRRFFLFFFFRFFFRFLFFLFFFFFFFFFFLLRFFRFFRLRLRFLLFFRLFRFFFFFFRFFFFFRLFLFFLFRRFFLFFFFFFLFLRRFLFLRFFRLFRFFFFLRFLRFRFFLRFLFFFFLFFFRFFFFFFFRFFLFFFRFRFLFLRFFFFLFRLFFRLFFFFFLFFFRFFRFFFFFFRLFRFLFRFRFFFFLFFFFFFLRFFLFFRFLFLFFFRFFFLLFFRRFLFFFLFRLRFRFFFLFFFLFRRFFRLFFFFFFLFFRFFRFFLRLLRFFLFFFFLFRRFLLFRFFFFFLFFRFFLRFFFFLFFRRFLLFFRFLRLFRRLFFFRFLRRFFFLFFFFFFFFLFFFFFLFFFFFFFFFFFFLRFRFFLRFFFFFFRFLLFFLFFFFRRLFFFFFFFFLFLFLRFRFFFFFRFFFFFFFFFRFFLRFFFFFFLFFRLLFFRFFRFFLFRLFLRFRFLFFFLFFFFFFRLRRLFLFRRFFLFLFFFRFFRFLLRRLFFFLRFLFFFFLFFRFFLFFFFFFRFLFFRFLFFFRFFFRFFLRFFFLFFFLFFFRFFFRRLFFLRLR +RFFFFFRFFFLLFRFLFFFFFLFFFFFFFFRFFFFFRLFFLFFFRFFFFRFFFFFFRLFLFRFLFFFFFRLFFFFFFFFFLFFFRFLFFLLFRFFFRFFFRLFFFFFFFFRFRLLRFFFRLFFRFFFFFFLFLRFRFFFLFFRLFLLRRFFLFFRFRLFFFFRLRFLFFRFFLFRFLRLRLFLFFFFFFFFFFFFLRRLFRLFRFLRLFFFLFRFFRRLFFFLFLRFFRLLFFFFFLFRRFFFFFFRFLFRFFFLRFFRLFFLRFLFFRLFFFFFLFFRLFRFRFFLFFLFFLRFFFRLRFFRFFLFFFFRFFLLFRFLFRFFFRLFFFRLRFLFFRFFFFFFLFFFLFRRFLFFFFFFFFLFRFLRLFFLFRRLLFLFRFFFFFFFFFRRLLRFFFFFFFFFFFRFLFRFFFLFFFFFFFFFFLRFRLLRFRFFFFFLRLFLFFFFFFFFFRFFFLFRFFFFRFFFFLFFFRFFFFRLFFLFRFLFFRFFLFFFFFFLFFFFFRFFFFFFFFFLFRFRLRFFFFFFLFFFLFRLFRLFFLRFLFRRFFRFLLFRFLRLFRLLFFFFFFFRRLFFRLRFFFFFFFLFFFFRLRFFLFLFFFFFFFLFFRFFFFFRFFRLFFFLRFFFFFFFFFFFFFRLFRFRLFFFFLRRFFFFFLFFFFRFFLRLLRFLFFFFFFFFLFFRLFFRFFFLRFRFFFFRLRLLFFFFFLRRLFFFFFFFFLFRRFLFFLRRLFLFLRFLFRFFFRFLLFRFFLFRFFFFRFFFRLLFRFRFFFFLRFFLRFFLFFFRFFFFFFLFFFFLFRFFLFFFFFFLR +LFFRFRFFFFFFFFLFFFLRFLFFFFFFFLFRFFRFLFFLLRFFFFFRLFLFFFFRLFFLRL +LFLRLRFFFRFFRLFFFFRLRFRLFRFFLFRFRL +FRFFLFFFRRFFFFLFFFFFFFFRFFLFFRFLFLFFLFRFRLFFFFLRFRFLFFRRLFLFFRFFFFFFRFFLLFFFFFLRFFFRLLFFFFRFFFFFFLFFFFFRFFRRFLLRLFLFFFRLFFFRFRFLFFFFLFFFRRFFFFFLFFFRLFFFFFLFRFFFFFFLLFFFFFFFRFLFFRFFRFLFFFLRRFLFLFFFFRRFLLRFFRFFFFFLFFFRFFFFFLRFLFLFFRFFFRLFLFRRFFLFFFRFFRFFRFLFFFFLFFFFFRFFRLLRLFFFFRRLFFFLFFFLFRFFFFRLLFFFFFFRFFFFFFFLRFFFFFFFFLRLFFLRRFFFFFFRLFFFRFFFFFFFFLFFLRRFFFFFFFFFLFRFFLFFFFFFFRFFRFFFFFLFFLFRRFFLFFFFFFFLRLFFFFRFRFRLLFFRLFFLFLRRLFFFFFFFFFLLRFFFLRLRRFLFFFFFRFRLFRRFLFFFFLFRFFFFLFFLRFFLFFFFFFRFFFLFFFFRFFFRFFLFLFFFFLRLRRFRLFFRLFLRFRFLFLLRRFFFLRLFFFFFRFFLLFRFLFRFFRFLLFRRFFFFFLFRLFLFRFFFRFFFFFRFFFLFFLFFFFFLRRLLRLFFFFFLFRFRLRFLFFFRLRLLRRLRFFFRLRFLFRLRFRLLFFFFFFLLRFRLFFLRFLRFLRFFRFFFRFFFLFFFLFFRFLLRLFFRLFRFFFFRFRFLFFFLFFLFFRLFFRFFFFFLRL +RFRLFFFFFFLLFFRFFLRFLRFFFLFFLFFFRFFFFFFFFRRFLFRLFFFRFFLFRFLRFLFFFFRFFLFFLRLLRRFFFFFFLFFRRLRFFLLFRFFFFRFFFFLFRFFLFFFLRLRFRFLFFFFFFLFFFFFRRFFLFFFFRLRFLFFFFFLRFFRLLRLLRFFRLRFFFLLRFRLFFFFLFLRFFRFFFFFFFFRFFFFFRLFLFFFLFRFFFLRFFLFFRRFFFLLFRLLRRFRLFFFLRRLFRLLFRLFRFFRLFFFFFFRRLRFFLFFFFFFLFFRFFFLRFFRLLFFFLFFFFFLRFFFRFFFFLFFRFFFRFFLLFRRLFFFLFFFLRFFRFFFFFFFRFFFFFFRFRFFLFFLFFFFFFFLFRRLFFLRLRLFFLFFFFFFFFRFRFLFFFLRFFFFLLFFFRRLFFFFFRFFLFRFFLFFLRFFFRFLRLFFFLFFFFFLRFRFFFFFFFFFFFRFRFFLRLFFFFFFFLFLRFLFFRFFFFLLRRLFFFFFLRFRFFFFFRLFRFFFFLRFFFFFFFLFFFFLFFFFFRLFRFFFRFFFFFFFLFLFFFFRFFLFRRFLFFFFFLRLFFFRLFRFFFFFRFLLRFFLRFFFFFLRLFFFLRFLFRFFFLFFLRFLRFRLFFRRLFFRFFFFFFFLFFFFFLFFLRRFLFRLFFFRFFFFRLRRLFFFFFFLFRFFLFRFRLFLFFFFFFFLFLFRFFFFFFRFFRLFLFFFFFRFFFFFRRFLFFFLFRRFFFLLRFLFFFFFRFFRFFFLLFFFFFFFLLFRFFFFFFFFRFFRLFFFLFFRFRFLRLFRFFFFLLRFFFFRLRLFFFLRLRLRL +LFFFFLFFFRFFFRFRLFLRFFFRFFFFFLFLFFRRLFFFRRFFLRLFFLFFFFFLLRRFLRFFFFFFLFRFFRFFLLRRLLRRFLFLFFRFLFRFFFFFFFRLLFFFRFFFFFFFRLRFLFRFLFLRRFLRFFLRRFFFLRFLLFRFRFLLRLFFRFFFFFRFLRLFFFFLFFFFFFLRLLFFFFFRRFFFFFFFFRRFLFRLFLFFFRFFRLFFFRFFFFFLLFFFFFFFFLRRFFFRLLFRFFRFLFLFFRFLFFFLFFFFFRRLFRFLFRFFLFFFFFFLFFFFLFFFRFFLFLFRRFFLRFRFLFRFFFLLFFRRFFLRLRLRFFRFFRLLFFLRRFFFRLFLFFFFRLFFFFRLFFFFRFFFLRFFLFLRFFFLLFFFRFFFFFLRRLRFFFFLRLRFFFFFLFLFRFLFFFRFFFFLFRLFFFFFFFRLFRRFLRFLFFFLRFRFFFFRFFFFFFLFFFLLRRFLFFFLFFRFLRFLFFFFFFRLFRFRFFFFRLFFFFFFRFLLFFFLRFFLFFFFFFFFFFFRFFFFFFFFFFFFFFFLRLFRLFFFLRRLLFFRFLFFRFFFLFRFFFRFRLFFFFLLRFRFFFLRFFFLFFRRFFFFRLFLFFFFLRLFFFFFFFFRLFFRRLFRFLRFFFFLFFFRLFFRRLFFFLRFFFLFFFLFRFFFFLFFRFFFLFFFFFLFLRFRFFRFFLFFFRRLFRFFFFFRLFLFFLRFFFFFFLRFFFRFFFLLFFRFRLRFLRLRRLRFFLFLFFRFRLLFRFFFLFFLRFRLFFFRFFRRLFLFFFFLFRFFFFRFFFFRLLFLFFFRLFFFFFRLLFRFLFFRLLFFRFRFFFFFFRFFLFRFFFFRLRLFLLRLRFFFFFFFRFFFFFLRFRLLFLFFRRFFLLRRLFFLFFFFFFRFFFFFFFFFLRFFFLFFRLRFRFLFFLFRFFLLRFFRFLFFFLFFFLRFFRFFFFLRFFFFFFLFFFFRLRFRFFFFLRFFFFFFRFFFLFFFLFFLRFFFFFLFRLFRFLFFRFFRFFFLFFFFFFFFFFFLFLLRRFFFFFFFLFRFFLFRRFLFFFRFRFFLLFFFFFLRFRFFFLFLFFRFRFLRFFFLRFLFRLRFLFLFFFRFFFFFFFFFFRFFRRLLFFFRFFFFFLFFLFFFLFRFFFRFFFRFFFFFFFLFFLFFFRFFLFFFFRFFFFFFFFFFFRFFLLFFRFFFFFFFRFFFLFFFRLFFLRFFFFFFFRFLRFLFRFRFLFFRLRFFFFLFFFFFLFFFRFFRLFLRLRLFRRFLFLFFFFRFFRFLFFLFFRFFLFFFFFFFLFRFRFFFFLFFFLFFFFFFFFFFRFFFRFFFLFFRFRFFFRLFLFFFFFFFFFFFFLFFFFFFFFFFFFFFFFFFFFFLFFFLFFFRRFFFLRFFFLLRFFRFRLFFFFFFFFLFFFRLRFFLFLRRFFLFLRLRLLRFFFLLFRFFRFFFRFFFFFLLRFFFFFRFFFFLRFFFFFFFFFFFFFRFFFFFFFFFLFFFFFFFRLFFFRFFLFFRFFFLFFFFFFFLRFFLFFFFFFFFLFRFFLFRRFFLLFFRLFRLFFFLFFFRFFFFRFFFFFFFRFFRFLFFLFFRFLLRRLLFFFFFFRLRFRFFLRFFFRFFLFFFFLFFFFLFRFRFLFRFFFFFFFLFFFRLLFLRFRLRRFLFFFFLFRFFRFFFFFFFFFFFRFFFFLFLRLFRLLRRFFFFRFFLRFFFRLRFLFFFFFLFFRFLLFFFLRRFFFFFFFLFFFFLRRFFFFFFFLFFLRRFRFFLLFFRFFFRFFLFFLRFLRFFFFFFFRFFFFFFRFFFLFRLRFFFFLLFFRFFLFFFFLRFFFRFFFFFFRFFFFFFFLFLFFFFFFFRFLFFLLRRFFFRFRLRFLLFRFLRFFFFFFFFRFLLFFFFFLFFFFRLLRFFRFRLLRFFFFFFRFRLFFFFFFLFFLFFFFFFRFLFRFFFFRLFLRFFFRRFFLLFFFLFRFFRFRLFFLFRFFFLLRFFFFRRFLLFFLRFRLFFLFLFFFFRLFFFFRFRFFLFFFFFFFFFRLRRLLFFFFFFLFFFRF +LFFFLFLLLFFFFRLFRLFFFLFLRFFLFFFFRLLFLFRRFFRFFFFFFRFFLFLRFLFFRLLFRFRFFLRLFFFFFFFRFFFFFRFRFFFLRLLFRFRLLFFFFFFRLFFRLRFFLFLFFFLFRRLFFLRRFLFFFFFFFRFLFFFRFLFLRLFRLLFRFLRFLRFFRFFRFLLFLRLFRFFRFLFRFLFFFFFFLRRRFRLFRLFLLLFLFFFFFLFFFFFLRFLFFLLFFFLFLRFLRFFLFLFFFRRLFFFFLRFRFRLRLFRFFLLRRFRLFFFLFLRFLLF +FLFLRFFLRFFRFLRFFRFFLFFLFRFFRLFFFRFLFFFRRFFFFLFFRFLFFFFFFFFLFFFFLRFLRFRLFFLRLFRFFFLRFLRFFFFFFLFFFRRFLFFFRLRFLFFFFFFLFFRLFFRFFFFFFFLFFFFFFFFFFFFFLRFFFFRLFFLFFLFFFFFFRFLFFRFFLFRFFFRLRFFRLFFFFFFFFFLFLRFFRFFFLRFRLFFFFFRFRLRLFFRFRLFLFFFFFFLFFLRRFRLFRFFLLRFFLFFLFRRFLFRLRLFFFFLRFRLLRRFFRLLFRFFRFRFLFFLFFRLFFFLRLFRRFFLLFRFFFRLFFFFFFLFLRLRFFLRLLRLFRRFFFFFFFRFLFFLRLRRFFLFRLFFFLRLFFRFFFRRFLFLFFFFFFRFRLFFFRFLFLFFFFFFFFFLFFFFRLRLFFFFRFLFFFFLFRFRFFFFRLLFFRFFFFLFFLFRLFFRFLLRFRFFRLFFFFFFFFFFFRLFFFFLLRFFRFFFRFFFFFRFFFLFFLRFFFLFFFRFFFFRLLFFLRRFFFFFFFFRFFFRFLFLRFFFFFLFLRRFFLFFLRFFFFLRFLLFFRFFFFFRFFFFFFFFRFLLFFRFLFFFLRFFFFLRFRFFFFFLFLFRFFLFFRFRFFLFFFFRLFFLFFFRRFFFFRFFLFLFFFFFFFFFLFFFFRFFLFFFFFFRFFFLFFFRRFFLLFFFRFLFRLFFRLFFFRLFLRLLRLFRRFFFFFFFFFFLFRRLFRLFFFFFFFFLFFRRLRFFFRFLFLFRFFRFLRFFLFRFLLFFRLRLFRFFFLFLFLRFRFFFRFFFLFFFRFRFFLFFFFRLFLFRFFFRFLRLFFFRFLRRLRLLFFFFFFFFFFLRFFFFFFLFFFFFFFFFFLRLFRLFLFRRLFFFRFFFFFLLFRLRFFFLRFRFFFFFRFFFFLRFLLRLRRFFLFFRFLFFFFFFFFFLRRFFFFLFFRFFFLFLFLRFFFLRRFFFFFFFFFFFFFFFLFFFFRLRFLFFFFFFFFFFFFFFFFLFLFFFRFFRLFRFLLFFFRFFRRLFLFFFFRFFFRLRFFFFFFLFRFFRLLFFFRLRRLLFFLRRLLFFRFFFLFFLFFFFFRFRLLRFFRFFFRRLFFFLLRLRFFFRFFFRLLFRLRFLFLFFFRFFFFRFFFFFFFFFFFFRFFFRFFFFFFFLFFFFFFLFFFFFFFFFFFFFFFLRRFFLFFFRFLFFFLFRFFFFFRLLFFFFF +RFRFLFRLFFFFLFFFFLFRFRLFFFFLFFFLLRFFFFFRRFFLLRRFFFLFFFLFFRLFRFFFFFFLFFFFLFRLFFFFFLRLRL +FFFFFFFFRFFFRFFFFFFFFFFRFRFLFR +FRRFFRFRFLRFLFRRFLRFRLLFFFLFLRRLLRFFFFRFFLRFLFFRFLFFRFLFRLLRFLFFRLRFFFRLLFFRLF +FLLRLFFFLFLFRFFFLLFRLF +LLFFFFFRFFRFRLRLRLRL +FLFFFLFLRFRFFLFFFFLFFFFFFFFFFLFFFFFLFFFRLR +FFRFFFFFFLRFLFFFFLFLRFRFLFRLRFFFFFLRLFFRRFFFFLLFFFFFLRFRFFFLRFFFFFFFLFLFFFFFFFFFRRFFFFFFFFFFRFFFFFFFLFFRLFFLRFFRRFLFFFLRRFFLFFFLFFFFFFFFLFFFFFFRLFRLLRFRFFRLFFFFFRLFFLFFFFFFFFLFLRFFRRLRLFLRRLFFFLFLRLRRFLFFRRLFFLFRFLLFFFRFRFFLRFFFRFFLFFRFLFRFRFLFFFFFFLFFFFLFFRFFFRFLRFFFFRFFFLFFLRFFFFFFRFFLLRFLFFFFRRFFLLFFFFFFFFFLRFRLRFFFFFFFFFLFRFRFFFLFFLFFFRLLFFRFFRFLRLLRFFFFFFLFRLFFLFLRFRFFFFRFRLRLFFLRRFFRLFLFFFFFRFFRLFFLFFFRFFLFLFFRFLFFFRLFFFFLRRLRRFFLFFFLFFFLFRLFRRLFFLRFRLRLRFFFFLRFFRLFLFFRFFLFFRLFFFFFRLLFRFFFLFFFFLFLRLFRFRRLFFFFRFRLFFFFFFFRFFFFFFFFLFRFRFLFRFLLFRFFFFFLRFRFFFFFLFFLFRFFFFRLFFFRFFFFLFFFLFFFFRRFLRFFLFFLFRFFLRLRFFLLRLRRLRLFFFRLFFFFFLFFRFFFLLFRLFRLFFFRFFFFFRRFLFFLFRFFLRFFFLLRFRFRFFFFFLFFRFRLFFLLRLFFFRFFFFRLLFFRFFFFLFRFFLRFFRLLRLFFRFFRFFFLFRLFFFLFRFFFFFFFFFFLLRFFFFLFFRFFFFFFFLFFFFFRRLFFFFFRFLFFFFFLRRLLFFFRFFFFRFLRFLFRRFFFFLRLRFFLFRFLFFFLLRFFRLFFFLRFFFFFRRLFFFLFLRFFRFFFRFFFLFFFRFLFRFLRFLFFFFFFFFFFFLRLRFLFFFFLFFFFRFFFLLFRLFFFRRFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFRRLFFFFFRFLRLLFFFFFFRFFRLFRLFLFFRRLLFFFLLFRRFFFFFRRLLFFFFFFFLFFFLFRFFRLLRRFFLLRRLFFFFFLFFLRRLLRRFFFFLFFFLFFFRRFFLRFLRFFFFLRRFLRFFLRFRFLFFFLFFFLRFFFFFFFFFRRLFLLRRFFFLFFFFRFLFFFFRLRLFFRFLFRFFRFFFFLFFFFLFFFFRFRFFLFFLFFRRLFFFRFFFFFRLFLRFFFFFFFRLLFFFFFFFLFRLFFRFFFLFFLRLR +FFFLRLLFFRFFFFRLFLRFLRRFFLFFFRLRRFFLRLFLRLLRFFLFFFFRRFLLRF +LLLFLRFRRLLFLFRLFRRFFFFFFLRFRLLRLFLRFFFFFRFLFFLRFLFFFFRFFRLFRFLRFLRRLLFLRLFRFLLRRLFFLFRLRRLFFRFFRRLLFFFFFFLFFFFFRFFFFFRFFLRFFFFLRFRLLFFRFFFLFRLLRRLRFLRFFFRLLFFRLRRLFLRFLRFRLFFLLRLFFFFRLRRLFRFLFFRFFFRFLRFFFFLFFRFLRLLRFFFRFFFFLRLRRLFFFFLFRFFLFRRFFLRFLLRRFFLFLRFFLRRFRLLFFFFFRFLF +LFRFFFFLFFFRLLFLLLFRLLFLFFFFFFFFFFFFFFFFFFLFFFLFFLFFRFFLFRF +RRFFFRFFFLFFFFLFLFRFLRLRFRLFFRFFFFLFFFFLRFFFFRFFFFFLFRLFLRFFLFRRFFLLRFRFFLFFFRLFLFFRFFFFLFFFFRRLFLRFFLRFLRLFFRLFFFFFLFRFRLRFFLRFFFFFLFFFFRRLFFRFFLRFRLFFFFRRLFFLFRFFLRFLFFFFLFRLFFRFLRLFFFRFRFLRLFFFFFFFRFLFRRLRFRFLLRFFRLLRFFFF +FFRFLRLFRLFLLRFFFLFRFFRFRLRLFFLRFFFFFFFRFRLFLFRFFRFLFRFFLFFLFRFFFFRLFFFRFFLLFFFFFRRLLFFFFFRFFFLFFFRFFRLLFRLRFRFFFFFLLFRFLFRFFFLLFFFRFLFFRFLFLFRRFFRFFFFFFFFLFRLFFFRRFLFLFFLLRRLFFFLFRFRFLFFFRFFFFFFFFRLFFFRFFLFFLRLLFRFFRFFRLLRLRFRRLFLRFLFFLRRFFRFRLLRLFFFRFLRLRFLFRRFFLFFFFLRFLLFFFRFFFFLFRLFRFLLFFFFFRFFRFFFLFLFFFFRFRLFFRRFFFLFFFLFFRFFLFFFFFFFRRFFRFRFFLFFFRFLFFFFLRRFLFFRLRFFFFRLFRFLFFFLFFLRFFLFRFFFFRRRFLRFRFLRLFFFFRLRFFFFFF +FFLFFRLLFRLLFFFF +RFRRFFFFLFRRFFFLRFFFLRFFFFFFFFFFLFFRRLRLFFFRFLFFFLFFRFFFRFLFFFFRRFFFLFFFRFFLRLLRFFLFFFRRFFFLLFFFFFRFLLFRFFFLFRLLRFFRFFLFFFFRFFFFRFFLLFFRFRLRFLFFFFRFFFLRLFFFFRFLFFRFFFFFRFLRFLFRRFLFLFFFFFFFFFRLFLFFLRFFFFLRFFFFFFFFFFFRFFLRFRFFFFFLFFFLFRFFLFFFFFFFFFFFLRLLFFFRFFFFRLFRFFFFFLLRFRFFFFFFFRFFFFFFFFFFRFFLFFFFLRFLFFFFFFFLFFFFLRFRLRFFLFRFFFFLFFFRFLFFFFFFLFFRFRLFFFFFFFFLFRFRFLRRFFFLFFLRLFFLRFFFFFLFFRRFLLFFFFRFLRFFFFLRFFFFRLFLFLRFFLFRFRFFFFFLFFRFFFFFLRLFFFFLFRRFFLFFFFFRLFFFLFLFRRLFFFFFFRFRFFLFFRFFFRLFFFLFFFFLRRLRFRLLRRFLLFRRFFFFRLLFRFFFLFFFRFLFLRRLLRRFFFFLFLFRFFFFFLRFLFFFFRFFFFFLFFFRFFRFLFFFFFLFRFFLRFRFRLRLFFFFFFLFRFLFFFRFLFFFRLFFFRLFRFFFFRFRLFFFLFFLFRRFFFFRLFFLRFFLFFFFFLFFRRLLFFRFRFLFFFRFFLFFLRFLFRLFFLFFFFFFFRFRFLFFFFFRLFLFRFFLFFRRFFLFLRFFFFFFLFFFFFRRFFFFLFFFRLFFFRFFFFFRLFFFLFFFFFFLFFFRFFFLFRLRFFLFFFLFFFRFFFFFFRFFFRRLFFFLLRFLFRRFFLFRLRFFFFLLRFLFFFLFRFFFFFFFLFLFRRFFFRLFRRLLFLFFFFFFFFFFRFFRFFLRFFLFRLRFFFRLFFLRFFFLLRFRLLFRRFLFFLFRRFLFLRRLFFFLRLLFRFFRFFLFLFRFFRFFFFFFFFFLFRFFFFFFFFFLFFFRLFFFLFFFFFRFFRLRFFRLLFFRLFLFFFLFRFFLFRFRFLFFFFRLRLFFRFFRFFRFLFFFFFLLFFFFRFRFFLFLFRFFRFRLFFFFFFFRLFFFFFLRFFFFFFFFRFFLFFFLRLRLFFLFFFRFFFRFRFFLFFFLFFRFRLFFLFRFFLFRRFLRRFLRLFLRFFRLFFLFFRLLRRLRLFLRFFFLFFLFRRFLFFFFFFRLRLRLFFLRRFFFFFFFFRFFFFLFFFFRFLRFRLFRFFLLFFFFLRRFFLLRFRFFFFFFFFFRFFLRFLRFLFFFFFFLFRRFFFLFLFFFRFFFLLFFFFRFFFRFLFLRFFFFRFRLFRRLFFLLFRFLFFRFFFLFFFFRFFFLFFLFFRFRLLRFFFFFLFFFLLFRRF +RLRFFLLFFFFFFFFFRFFFFLRFFFRFFFLRLFLFRLRLRRFFLRFLFFFFFRLLRRFFFLFFFRRFFFLFFLFRFLFFFFFFFFFFFFFLFFFFRFFRLFFFRFLFFLRLLFRLRFFLRLRRFFFFFFFRFLFFLRFFFRFLFFRLLFFFFFRFFFFFFFRLFFFRFFLFFRLLFRFFLFFFFFLFFFRFFFRLRFLFFLFFFFRLLRFFRFFLFRFLFRFRLFFLFRFFFFFFRRFLFFLRFRLFFLRFFFLFFFLRFFFFFFFFRLFFRFLFRFLFFFFFLFLFFRFFFFFFFFFFFRRLFFFFFRFFLFRFFFFFLFFFFFFLFRLFFRFRFFFFLFRFFFFLFLFFFFLRFFFLRFFFFFFFRFFFFFRFFFFFFFFLLFRRLFFLFFFFRFLFFLFFRRLFLRFFFFFRFFFFFLFRFLFFLFRFFFFRFLFFFLFFFRFFLFRFRLFLRLRLFRRFLRFFRFFLFLFFFLFFFRLRFRFFFFLFFFRFLFFFFLRFFFLFFRRLFRFFLFLFLRFFFFRFLFRFFFFFFFFFFLFRFFLRFLFFFFFRFFFFFFLFFFFFLFFFFFFRFLFRLFFFRFRFLLRRFFFFLFRFLFRFFFLFFFRFLFLFFRLFFFFLLRFFRFFFRRLLFFFLLFRRFFFFRFFFFFRFFFFFLFFRLLFRFFFFRFFFLFLFFFRFFFFFFFFFFFRFFFRFFLLFRFLFRLFLFFFFFFRFFFLFFRFFFRFRLFFFFFFFLRFFFLRLFLFFFFFFFFRRFLFFFFFLRLRL +FRLRLFFLFRFFRFFFLFFFFFFFFRFFLRFLFFFLFFFFLRFFFFFFRFFLLRRFFFLFFRFFFFFLRFFFRFFFFLFLFFRFFFFLLFFFRRFFFFRLRFFFFFLFFFRFFFLLFFFFFLFRRFFFFLFFRFFLFLFFRFFFRLFRLRLFFLFRFFLFFFFFFRLFFFRFFRFFFLFLRFRLLRFFFFFFFFFRFFFRFFFFFLFFRFFLFLRFFFRLFFFFFRLLFFFFLFRLRFRLFRFFLRLLFRFLRFFRFFFRLFFFLFRRLFRFLFLFRFLRRFLFLFFFFRFFLRLFFFFRFLFFFFLRRFRFFFLFFFLLFRLRRLRFFLLFFRRLFFRLFFFFFFFFFFFFLRFFFFLLRFLFFFRFFFFFFFRFRLLRLRFLRFLLFRFLRFFFLFRFRLFLRRFLFFFRFLLFFRFLLFFFFFRFFRFFFFFFFRLFFFRRLFLRLRRFLFFFLRFFRFFLFLFFFFLFFFFRRFFFFFFFLFFRLRRFFFFFLLFFFRFFFFLRFLRFFFRRFFLLRLFFFFFFRFFFLFRLFRFLFFLRFFLRFRLFLFLFFFFFRFFLFRFRFFLFLFRRFFLFRFFRLFFLFFFFLFFRFFFLRFFFFFRLFFRLFFFFFRLFFFFFLFRFFFFRRLFLRFLFFFLFRFLFFFFRFFFFFFLRFFLFRFFRLFLFFFFFFFLRFLFFRLRFFLRFFFFFFLLRRFFRLFFFFFFRRLFRLFLFFRFLRRLLFFFFFFRFFRLFFRLRFFFFFFFLFFLRLFFLRFFFFFFFFFFRFLFFRFFFFFRFFFFFLRFLFFLFFFFFFFFFFFFFFFFFFRRFLFFLFRLFRFLRRLFFFFFFFFFLFFLRRLFFFLFFFFFRRFLFFRFLFRLFRLFFFFFFFFFFLRFFFFFFFFFFLLFFRFFFFFRFLLFFFFFFRRFFFLFFFFFLFFFFFFLRFRFFFFRLLRFFRFFRLFFFFLLFFFRLFRFFLFFLFRFFFRFFFFFFFFFFRFLRFFRLLFFFFFFFLRFFRLFRFLFFRFRLFFFFFRFLFFRLLRLRLFFRFRLFLFFRRLFFFFRLFRFFFRFLFLFRLFLFFRFRFFLFRFFFRLRRFFLFLFFFLFFFFFFFFFFFFFLLRFFFFRFRLFLFLRLRLR +RFFFFFFFFLFFFFFFFLRRLFFFFFFFFLFFFFFFLRFFRLLFFRFFRLRRFLFFRLRFFRRLLFFLFFFRLRFFFFFLFFFFFLRFFFLRRFLFLFFRLFRFFLFFFFLRFRFLFFFFRLFFLRFRFRFFFLLFFFFFFLRLRFLFRRFFFRFLFFRLFLRFLRFFFLFLFFFFFFFFRRLFFFFRFLFRFLFFRFLFFLRFFFRLFFFRFFFLFLRRFFFFFRFFLFFFFFLFRLFRFRFFLRLLFFRLFFFRFFFFRLFFLRFFRLLLFLFLFLRRFFRLFFFLFFFFFFFFFLFLFFFRLFFRFRFFFLFRLLFFFFRRLFRFFLFFFFRFFFFFLFLFRFFRLFFRLFFLRRLFFLFFFFRRFLFRLFRLLFFLRRFLFFLRRLRFLFFFFRLFRFLFFRLFFFRRFLLFFFFFLFRFFFFFLFFRFRRLLLRLRFFFFRRFFLFFFFLFRFLRFLFLRFFFFLRRLRFFFFFRFFFLFLFLFFLRRFFRLFRLFFFRFFFFFFFRFFFFFFFLFFFLFLFFRRLRFFFFFRFFFLFFFFFFRLFFFFFRFRLLFFLFFRRLFFFFFFRFFLFLFFRLFFFFFRFLFFFFFFFFFLFFFFFFFFFFLFRFFFFFFRFRRLFFLFFFFFFFFFFRLRFFFFFLFFFRFFFFFLFFLFFRLLRRFLRFLFRLRFFRLFRRFLLRFRLLFFLFFRFFRFLFLFLRFFFFRFLRFLLFRFFFRRLFLFFLFRFFFRFFFFFFFFLLRFFRFLFFRLFLFFFFRRFLLFFFRRFLLFFFLFRFFFFFLFRRFFFFRLFFRFFRFLFFFFFFLRFFFFRRFFFRFFFFLRRLLFRFFFLFFFFLLRFLFLFFFRFFFRLFFFFFFFRFFFFLRRFLLFFFFFFFRFLFFFFFFLFFRFLFFFFRFFFFLFRLLRFFFFFLFRFRFFFFFFFFFFFLFFFLFFFFRFFFFFFRFLRFRFLFFFFFFLFFFFFFFFFFLFFRFLFRLFLFLLFFFLFFFLRRFFFLFFFFFFRFFFFFFFFLRFFFFFFFFLFFFLLRLFFFRRFFLFRFFRFFLFLRFFLFRFRLFRFFLRFFFLFFLRLRFFFRFLFFLRFRFFRFFFFFLLFFRFRFFLFFFFFLRLFFFRFFLLFFRFFLFRFFFFFFFFRFFFFFRFLFRLFFFFFLLFRFLLLFFFRFFFFRFLFFFLFRFFFFFRFFLFLLRFRLFFFFFFLFFFLRFFF +RRFLRRLFFFFFFLRRLFLFFRFLFFFLRFFRFFRFRRFFRFFFFFLRRFLFFRFLFFFLFFRLFLRFLFFRFFFFFRLFFFRLFRFFLFLRRFFFRRRFFRFFLRFLFLRRFFFFRFRRRFRFFFLLFRRFFFFFLRFFFLRFFFFFFFLLRFFFFLLLFRFLFFRFLFLFFFFFRFFFLLLFLFRLFLRLRRLLFFLFLRRLLLRLFRFFLFFFFFFRLFFFFFLFRFFLFFLLLFFFFFFFFFRFLFFRRFLFFFFLFLFFRFLFRFLRFFRLFFRFRFLLFRRFFLFFFLRLFRLFFLFFRFRLLFRLRRLFFFFRFRLRLFFFRRFLRFLLRLLRFR +FRLRLRFLRFLFFFFLFRLLFFFFRFFFFRLFFFRFRFRFRFFLFLRFRLFFFLFLLFFFFFFFFRFFLFFRFFFFFFFFRFFF +FLFFRFFRFFLFRFFFLFRRFLFFLFRLFFFLRLFFFLRFFFFFFFRFFFFLRLRLRLFRRFFFFLFFFFFFFLRRFLFLFFFFFRFFFFFFFFFFFFFRFFFFFFFFFLFFFFFLFFRLRLFFFFLFFFFRFLFFFFFFFRFFFFFFFFFFFFFRFFFFFFLFFFRFFLFFFLFFRRFLFRFLFFFFFRFRLFLFFRFFFFFFFRFFRLFFLFRLFRFLFLRLRLLRFFFFRFFLFRLFFRLFFRFFFFFFFRFFFLRLFFLFFRLFFFFFLFFFFFRFFFFFFFRFFFFLLFFFFRFRFLFRRLFFLFFFLFFRFFFRLRFFLFFFFFLFFFLRFFRFRFFFLFFLFFLFRRLFFFFFRFFFRFFFLFFFFFFFFFFFFLFFFLFRFFFFLFFFFFFFFFFFRFLFFLFRRFFFFFFFFFRRLFFLFRFLLRLFFFFRFRFFFFFFFRFLFFFLFFFRFLFFFRFLFRRFLFFFFFLLFFRFFRFFFFFFFFFFRFLRLRFFLFFFRFFFLLFFRFFFFFFRFFFLLFRLFRFFFFFFFFFFFLFFLFFFFRFFRLLRRLLFFFFRFFFRLFFFFLRFFFFFFFLFFFFRFRFLFFRFRFRLFLFFLRFFFFLFFFFFLFFRFFFLFFFRLFRFLFRFFLLRFRFLRFFFFFFFFFFLFFFFFFFFFLFRLFRRFFFLFLRFFRRLLFLRFFFRFFFLFLRFRFFFFRLLRFFFLRLFRFLFRFFLRFFRFLFLRRFFRFFLFLFFFFFFFFLFRLFRFFFLFFFLRFFFFFFFFFFRFFFFFLFFRFLFFFLLRRLFFFFRFFFRFRLLFFFFRFLFFLFFFRFLRFFFFLFFFRLRFRFFLRFLLFFFLRFRFFLFRLFFLRRFRLFLFFRRFLFFFFFLFFLRFRFLFFFFFRLLFFFFFRLFFFFFRRLFFFFRFLRRLFFFLFFFFFLFRFFFFFRFLFFFRFFFFFFRFLFRFFLFFFRLFFLFFFFFRFFFRLRLFRLRFFFFFLFFFLRFLFLFFRRLRFFRFFFFFLRFFLFLFFFFF +LFFLFFLLRFLFLFFLFRFFRLFFRFFFRFLRRFLRFLF +FFFFFFFFFFFLLRFLRFFFFRFFFRLLFRFFFFFFFFFFFRFFFFFLLRFFFRLFFFLFFFFLFFLFFRRFFFRFFFFRFFFLRLFFFRLFLRLFFFFRFFFFLFFFFFLRFFRFLRRFLFFFFFFFLFLLRFFFRFRFFLFFFFLRFFFFFRFFLFFFRFLRFFRFLFRLFLFFLFRLRLRLFFFRFRFFLFFFRFLFFLRRFFFLRFRFLRFFFFLLFFRFLFFFLLFFFLFFLFRRFLFFLFRFLFRRFFFLFFLFLRRFFRFLRLRFFFFLLRFLFFFFLRFFLFFFRFFFFFLRRFRLFRFLFLFFFLFFRFFRLFFRFFFLFLRFFFRLFFFLRFRLFRLLFFFFFFRFFFFLFLFRRFLLFFLFRRFFRFFFLFRFRFFFFLFFRLLFFFRFRFFRLFLRLFFFFLRLFFFRFRFFFFLLFFFFFFFFFFFFFFFFFLFFFFLFFRFRFLFFFFRLRFFFRFFFRFLFFFLFFFFFFLFLFLRRFFFRFFFRFLRFFFLFFFRRFFFFLFRLLFFFRFFFFFFFFFFFFFFFLRLFRFFFRFFLFLFFFFRFFFLFFLFFRRFFLRRFRFRFFFFLFRFFFFFLLFFLFFFFFLFRLFFFFFFFRRLFFLFFFFFLFFRFFFFFFFFRFFFLRRFFFLLFFFFLFRFFFLFFFRFFRFLRFLLRFFFLLRFFFFFFFRFFFLFFFFFFFFLFLRFFFLRRFFFFFFFRFFFLFRLFFFFFFRFFFFLRFFFFLRLRFLFRFFFFFLFFFRRFFRFFRFFRFFLFLFFRFFRFFFFFLFFLFFRFRFFFFFFFFFFFRFFFFFFFLFRLFRLFFFFFFFFFFFRLFLFFFFRLFFLFFFFFFRFRFLFFFFFFLRFLFFFFRFLFFFRFFFRLFFRFFFFLFFFFFFFFFLRFFFFFRFFFFFFLLRLRLFRFLFFRLLRRLLFFFFFLFLRFLFFFFFFFFLRFFLFFFFRFFLLFFFFFRFLFFLFFRFRFFFRLFFFLRLRLFFLFRRFFFFFRFRLLFRFFFRFFLFFLFFFLRLFFFFRFRFFFFFFFFFLFFFFFLRFFLFLFFFFLFFFFFFLRRLFFFFFFFLFFRLFFRFFLFFFFFFFRRFLFLFRFFFFFFFFRFFLFLRFF +RRRRRFFFRFFLFLFFLFRFRFRLFLRFRRLFRLLRFRRRFFLRLFRLFFFFFFLFRFFFRRLFFFFFFFFFFLFFRFLFRFLFFFLRFFLFRFLFFFLLRLRFFFLFFRRRLFLLRFFFLRFFLFFLLFFRRFLRFRLFLFRRFFLFRLFFRLFFLFRFFRLR +RFLRRLRFLLFRFFFLRFRFFFFFLFRLFFRRFFFFLFFFFFFFLFFRFFFRFFFRFRRLFFFFFFRFFLLRFRRFFFFFFFLRFLLLRRLRRLLFFFFFFFFRFRLFRLFRRFLFFFFFFLLF +FRFLRRLFFLFRFLFFLRLRLRLRRFFFLFFFRFFLRFFLFFFRFFFRFRFFFFFFFFRFLFFFLFFFRRLRFLFFRLRLFFFRFLLFFFFRLFLRFRFLFRLRFFFFFRFFFRLFLFLLLFFRFFLRFFLFFLRLFFFRLFFFFRFFFRLRFRLRFRRLFRLFLFFRLRFFRFLFFLRRFRLLRFFFRLLFFFFFFFFRLFRLF +LRFFRRLFFRFFFRFFFFFFFFFFLLRLLFFFFFRFFLRRLRLR +FFFFFFFRLFFLFFLRFFLRFRRLFFFLFFFRLFFFFLRLFRFRFFFRLFRFFFFFRRLRFFRFFFFFRRFLFLFFRFLFLFFLLFLFFLFFRLFLRRFFFLLFFFFFFRFFFRLFLRFRRLFFFFRFFFFFFFFFLFFFFFFFLFRFFFFFFLFFFFFFFFFFFFFFFFLFFFFLRRFFFRLLFRFFFRFFRLLFRFFLLFFRRFFLFRFFFLRFFFLLRFRRLFFLFFFFLFFFRFRFFLLRFFFFRLFFFFLRLRFLRRLFFFLRFFRFFFLFLRRFLFFLFRFRFLFFFFFFLFFLRFFFRLFFFFRRLFFLFFFFFFFLFFRLRFFLFFRLFLFFFRRLFFFFRFFFFLFFFFFFFRFFFFFFFFFFRRLFFLFFLFRRFLLFFFFLFFRRFFLRFFRLFFFFLFFRFRFFFFFFFRLLFFFFFFFFFFFFLLRFLRRFFFLFFFFFFLRFFFFFRFRLFFLFRRFFFFFFLLFFLFFFLFFLFRFRLLFLRFFFFFFRLFFRFFFFRFLFFFFLRLRFFLFLFFFRRFFFFFLRFLFFFFFRLFFRRRFFFFFFFRFFLFRFFFRFFLRLFFFLFFLRRLFFRFFLFRLFRFFRFLRLFFFFFLFFLRLRFFLRFFFFFFRRFFLFFFFFLFFFFFFLFFLRLFLRFFLLRLFLRLFFFFFFLFFRRFFFFFFLRFFFLFFFFFFLLRLFLFFFFFFFFRFLRLFFFRLLRFLRLFFFFFFFFFLLFFFFFRFFFRFFFFFFFFFLRFFFLRLFRFRFFFFFLLFFFLFFLFRFLRFFLFFFRFFLLFFFFLFRFRLFRFFFFFFFFLFFRLFFRFFFFFFFFFRFFRFRFFLRFRLFRRLLFFFFFFLFFFRFFFFFFRFLRFFLFFFFRLRFRLFFRFLLFFRFFRFLFFLFRLRLRL +FFFLFRFFRLFFRFFFFLFLRFLFRFFFRLFRLFFFFLFFFFFRLFLFRFFFRLLFFFRRFFLRLFRFLRLFFRLRRFFLFFFFFRRFRFFFFLRFFRFFFFFFFFFFFLLFFFRFFFFFLRLFRFFFRFLFLRFRFFRFLFFRFFFLFFFFFFFFFFLFFFFFFRFFLFFLRFFFFFFFFLFFRFFRLFFFFLFRRFFFRLFRFLRFRFFRFFRFLFFFFFRLRFRFFFLFFLRFFFLFFFFFFFFFLLFFFRFRFFFLFFRLFFFRFFFFLRFLFFFLFRFRFFFLLFFFRFFRFFFLFFLRLRRFLLRFRFFFLFFFFFLFFFFFFFRFFRFFLFFFLRFFFLFFFFLRRFFLFFFFLFRRFFFLFRFFFLFFFFRFFFFRFFFFFFLFRFFFFLLRRFFLFFFFFRFLFLFFRFRFFFFLFFFFFFLFLRFRLFFLRFFFRLFFLRRLFFLFFFFFFFFFFFFFFFFFLFFFLFFFRFLFRFFFLFFFFFFLRRFFLFFFFLFRFFFFLFRLFFRLRLLFFFLLFRRFFFLFFLLRFFFFRLLFFRFFRLRFFFRRFRFFFFFFFLFFLFFLFFFFFFLFRFFFFFRLRRLFRRFFFFRFFLLRFRFLRFLFFFLRFFLRFFFLRRLFRFFFFFFFFFFLFFFRFFFLFFFFFLFFFFFLRRLFFFFFFFFLRFFLFLRFFFRFRFFFLFLFRFFLFLRRFFLRFFFFFFFFRRFLLFFLRFLFRLLFFRFLRFFRRLRFFFLFFFFLFRFFFFFFFLRLLRFFFFFFFRLLRFFRRFLRFLFFFFFLFFFFFRFFLLFRFFFRLLFRFFFRFFFRFLLFFRLFRLFFRFFFFRFFFFFFFFFFLFFLFFFFFRLFRFRRRFFRFFLFFFFFFFFFLLRLFRFRFRFFFRLLRLFRFLRRFLRFLFFLRLRFFFFFFFLRFF +FRFLFFFFLLRFFFFLRFFFFRRLLRFFFFRFFLFRFLFFRFFFFFLFRLLFFRRFFFFFLFFLFRFFFRFRLFFLFFFFLFFFRFFFLFRFFLFFRLFFRLFRFFRFFRRFLLFFFFLFFFFRFLFFFRLFRFFLFRFLLRFRFFFFRFFLFLRFRLFFFRFFLFLFRLFRFFLRRLLFFFFFRLLFFRFFFRFFLFFLFRFFLFFFFRFRFLFLFLRRFFFRFFFFFFFLFFLFFFRFFFRFFRLFFFLFFFFFFRFLFFFFFLFFRFRFFFFFFFLFFFLLFFRFFFFFFFRFFLFRLRRLFRLFLRLFFFFFRFLFFFFFFFFFFRFLFFRRFFFLFLFFFFFFFLFFFFLRRFLRFFFLFRFFFLFRFFFLFFRFFLFRRFLFLRFLRFRFLFFLFRLFFFRFLFLRFFLFRFFRFFFLFFFFFFFFFFRLFFRRFLFFLRRFFLRFFFLRLFLFFRLRFFLFFFFRFRFFFLFFFFLRLFRRLFLLRLRRFFFLLFFFRFFRFFFFFFFFFFFFRFRLLRRLFFLFRFLLRFFFFLRRFLFRFLLFFRLLRFFFFFRFFRLFLFRFFFFFFFFFFRFFRFLFFLRFRFFLRLFLFRFFFFFFFFLFRFLRRFFFRFLLFFFFFFFLRFRLFFFFFLLRRLRFFLRFFLLFRFFLRFFRFFFFFFLFLFFRFLRRLFFFFFFLFFFRFRLFLRRLLFFFRLRRFFFLRRLLFLFFFFRFFFFFLRRFLLFFFFFFFRLRLRRLRFLFLFFFFLFFFFFFRFFFFRLFRFFLFLFFFRFFFFFFFFFFFFFFRFFFFFLRFFLFFRFFFLFRLRFFLFFFFFFFFFFFFLFFRFLFFLRRLFFFLRLFFFRFFFFFFLRLLRLRFFLRFFFRFFLFFRFFFFFFRFFLFRRFLRFFLFFLFLFRFFRFFFLRFFFLFFFFRFFLFFFFFRFFFFLRFFLRLFFLRFRFFRFFFFLFFRFFFLFFRFFFLFLFFFRFFRFFFFLFFFFLFFRLRFLFRRFFFLLFRFFFFRLRFLFFFFFFFRLLRFRLFFFFFLRFFRFFFRFLFFFLRFRFFFFFLFFLFFFFRFFFFLFRFRLLRFFFLFFLRLRLFRFFFFRLFRLFLRFRFFFFRFLFLFFLFRFFFFRRLLFFFLFFRFFFFFFFFRFLFLRFRFLFFFFRLFFFLFFFFRLFFLRFFFRFFFLFFRLLFRLRRFLLRFFRFFFLRLFFLFFFFFRFFLFFRFFFFRFFRFFLLFFFFFFFFFFLFFRFFFLLFFFRFFFFFFRFFRFFFFLFFLFFLRFRFLFFFFFFLFFFRFFRFLFFRFFFRLFLRFLFFFFRFFFFFRFLFRLFFFFFFFFLFFFFFFLFFRLRFRFFFRLFRFLFFFFFFFLFFFFFRFFFRLLFRRLRFFFFLRLLRFRLFFRLRFFRLFLFFFFRLLFRFFFLRFRFFLFRLLRFFFLFRRFLLFFFRFFFRFRLLFFFRFFRFFFFFLRFFFFFFLFFFFFFRLFFRLRLFFFLFFRLRFFLRLFFFFRFLRFFRLFFLFFLFRLLRFFFFFFFFFFFRFFFFFRLFRFRFFFFLFFFFLLFRFFFFFFRFFFFLFFLFRFFFFLRFFLFFFFFFRFLRRLLFFFRFFRFFFFFFFFFLFFRFFRFFLFFLRRLLFFFFFFFFFFFFFFLFFRFFLFRFFRRFLLFRLLFFFRLFFFLRFFFRFLFFFRLFFLFFFFRFLFFFRFFFRFFRFLLRLRLLFRFFFFFFLRFFRLLFRRFFLFRRFFLFFLFFFFFFFLFRFLFFFFRFLFFFFFRFFLFRFFFLFFRFFFFLLFFRLFFRFFRFLLRRFLFLFRLFLFRRFLFRFFFFFRLRFFFFLFFRLFR +FFFLFFLFRFFFRFFRLFFFFFRFFRLLFRFFLFFRLFLFFFRFRFFFFLFFFLFRRFFFFFFLRLFFLFFFRFLFFFFRLRFLFRFFFFFFFFFLRFLFFRFRFFFFFRFLFLFFFLFFRFRFFLRFFLLFFRFFFFRLLFLRFFRFFFLFLFRLFRFFRFFFFFFFFRFFLFFFFFFFFRRLFLRLFFRFFLFFFFLFLRFFFRFLLFRFFFFFRFFLRFLFFLLRLRRFFFFFFFFRLFFRLFFFFFFFFLFFRLRLFRFFFFFLFFFFRFRFFLRRFLLFFFFFLFFLRFFFFFRFFRLFLRFFFFRFRFLFFFFFFFRLFLFFFFFFFRFFFLFLFRRFFFLFFFLRLFRLRFLFFFLRFRLFRLLFFFRRFLFRLFLFFRFFRFRLLRFFRFFLFFRLLRFFLFFFLRFLFRFFLRFFFFFFFRFLLRFFFFRFLRFFFFFLFFFFFLRLRFRFLFFLLRRFLFRLFLRLFFRLRRFFFFFRLFFRRFFLFFFFLRFLLRFFLFLRRFFFFFFFFFFRFFFLFFLRLFLRFFRLLFRFLLFRFRFFFRFLFFFFFFRFRLFFRLRFFLFFRLFRFFFLFRFLLRFFRFLFFFFLFFLRFFFLFFFFFFFRFFFFRFFFFFFFFLFLFFRLFRFFFFFFFRLRFFRLFFLFRFLFFFLFRFFFFFFFFRFLFFLFFFFLRFFRFFFLRFFRLRLFLFFRFFRFFLLRFRRLFFFFLFFFFFFFLFFLRRFFLFFFRFRFLLFFFRFFRFFFRLRLLFFFFFFFFRLFRRLFLFLFFRLFRLRLRL +FFRFFLFFLRLRLFFRFLFFFFFFRFFFFRFRFLFFLFRLFFLFFFRFFFFFLFRRLFRFFLFLFRRFLFRFLFFRFLLFFRLLRFRFRLFFFRLFFFFFFFRFFFFFFFFRFLFFLFRFLLFRLRLFRFRFFFLFRLLFFFFFFFRRFLLRLFFRLRFRLFRFFFFLLFFFFRFFLRRLFRLFFFFLRFFFRFFFLFFFLLRFFLFRFFFFFRLFFRFLLFRFFFFFRLRLFFFLFLFRFFFFRFFLFRFFFFFLFFFRFRFFFLFFFFFFLRFRLRLLFFFFFRFFRFLRFLFFFRLRLFRRFLFFFFFFFFRLFLFFLFRFFFFRLRLFFFLFFFFFFLFLFRFRFFRFLFRFRFLFFFFFFFLFFRLFFFRRFLFRLFLFFLRFFFLFFRFRLFFFFFFLFRRLFFRFFRLLFLRLLRFFRFFRFLFRLFRFLFFRLRFLFFLFRRLFLLRFFRFRFFFFFFLFLRFLLFFRRLFFLRFFFRFFFRFFFLRFLFFRLFFRFRLRFLFFFFFRLFLFFFFFFFFFFFFFLFRRFLFFFLFFFRFFFRLFLFFFFFFFFRFFFRLFFFFLFFFFFFFLFRLFFFFFFFRLRRFFFFLLRFLRFFLFFRFLRFRLFLRFRFRLFRLFLRFFFFFLFLRFFRLFFFFLFRFLFRFFRLFFLRLFRFLFFRFFFFFRFLFFFRLFFLRRFFLFFFFFLRFFLLFRFFRFFFLRRFLFFFFFRFFFFFLLRL +LFLRLRFFFFFRRLFLLRLRFFFFRFFFFLFFRLRFFFLFFFFRLFFLRRLLRRFFRFLFRLFLRFLFFFFFFLFRFRFFLFFLRFRFFFFLLRFFFFLRFRFFLFFFLRFFFFFFFRFFLFRLFFFRFLRFFLLRLFFFFRFRFFLFFRFFRFLFFFRFFRLFRLRFLFLFRRFFLLFFFFFFLRRFLRLRRFFRLLFFFFFFLFFR +RFFFLFLRLLRLRL +FFFFFFFFFFFFFFFFFFFLFLFRFFFFLFRLRFFRLLFFFFRLFFRLFLRFRFFRRRFRFLFLFLLRLLFFRFRLFFFFLLLLFFRRLFLFLFRFRLFRFRRFFFFFFFRFLFFRLFFFFLRFFFRFFLFFLLFFFFLFLRLFRLFFFFRLFRFFFFLLFFRLFRFFLRFFFLFFRLRLFLRFRLRRLFFFFRFFFRRRFFLRFRLFRLLFLRRFFFFLFFFFFFFFFRFLLFFFFFLFRFFRFFLFFFRRLFLFFFFFLFFRFFFLRFFLLRFRFFRRFLFFFRFFLFFFFFLLFF +RRLLFRLRLFFFLFRFRFLLFRRLFRFLRLFFFFFFFRLLFFFRFRLRFFFFFFLLFRFRFRLFFFRLFFFRLFRFLFLRRFLFRLRFFLLRLFFRFFLFFRLLRFLFRRLLFRFRLFFRLFRRLFRLRFFFFLFLFRFFFFFLRFFLFFFLFLRFRFFFFFRFFLFRRLFRLFFFFRLFFFLRFLFLLRRLRLFFLRRLFRRLFRLFFFRF +LFLRFFFFRFFLRFFLRFFRFRLFFFLFFFFRLLFFRLFLFRFRFFFFFFFFFRFLFFFFLFRFFFFFRFFRLFRFLFFFLFFFFFFLFRRLFFFFLFFFLFFRFFLRRFFFFFFFFFFFRFFFLRFFFRFLFFFLRFFFFFFFFFFFFFFLFFFFFRLRFFFFFFFFFLFFFFFLRFFRLLFFRFFFFFLRRLRFLRFFFFFFFFFFFLFFFFFFFFFLLFFFFRFRLFFFFFLRRFFFFRFLLRLRLFRFFLFRFRFFFFFFLFFFRLFRFLFLFFFFRFFLFFRFFLFFFLFRFRFFFFLFRFRFFFLLFRFFLRFLFFFFFFFFFLFFFFFRFLFFRFLFRFFLRFRFLFFRLFFRLRFLRLLFFRFFFFFFFLFRLRLFFFFLRFRLFRRFFLRLFFFFFFLFRLFLFFFFRFFFLRFRLFRFLFFLFFFRFFFRFRLFFFFLFFFFFFRLRFFFFFFFFFFLFRFFFFFFFFLFRLFFRFFFFFFRRFLLFFFFFFFRFFFFRRLFLFFLLRRLFFRFFFFFLLFFFFRFLRLFFLRRFFLRRFLFRRFFLLRRLFFFFLFFFRFLFRFFLRFFFFFFRFFFLFFLFFFFRRLFFFFFRLLFFLFFLRFRFFFFLRFFFFFFFFRFLRFRFFLFFFFRFFFFFFFRLLFFLFFFFFFFFFFLFFFFRFFFLRRLFFLRFRFFLFFFFFRLFFFFFRFFFFFFRLLFFFFLRFFLFFFFFFFFFRFFLRFFLFFFFFFFLFFFRFFFFFRFFFFFLFFFRFFRFLFLFFFFFLFFLRFFRLFFFFRFFFRFLFFRLFLFRLRFFFRFFRLFLFRFFFFFLFFFRLLFRFFLRLRFLFFFLRLFLRRFRLLFRFFFFRLRFFLLFRLRFFRLFFRFLFFFRFFFLLRFFFRFFFFRLFFFRFFRLFFFLFFLFFFFFFFFFFFFFFFRFFFFFFFFFRLFLFRRLFLRFRFFLFRFLRFRLFFLFFFFFFRFLFLFFFRFRFFFRLFFFFFLFFLRLRRFLLFFRLFFFFFFFFRLRRFFFLRFFFFFFFLRRLFRLLFRFLFRRLFLRFFRFFRLLFFLRFFLFRFFLFFLFRFRFFLFRRFLLFFFFFLFFRRFFFRLFFFFFFFLLRLFFFFFFFFRLRFRFLFFFLFRFFFFFFFRFFRFLLFFFRLRLFLRLRLFFRLFFFFFRFFFLLFRRFFFFRFLFFFLRLRFRFFFFFFLFFFLFRRLFFFFRFLFFFFFLFFFFLFRLFFFRFRLLFFFFRLFFFLRFFFRFFFFRFLFRLFRLFRFLFFFFFFLRRFLFFFFFFLLFFRFFFFFRFFFFFFFFFFFRRLLFLFFFFFFFFFFFRLRFLFRFFLFFRFFFFFFFRRLLFFFFFRLFFLFFFFFRFFRFLFFFFRLFFFLRFFFFLFLRLFFRLRLRRLFRLFRLFRFFRFFLFRLFLFFFFFRFRRLFFLRFFFFRFLFFFFLFFFFFRFFLFFRLFLRRLFFFLFFFFFFFLFFFRFLRFFLRLRRLFRLRFFRRLFLLRRLFFLFFRFFFFFFFRLFRRFFFLLFRRLRLFFFFLFRFRFFFLFFFFFFLFFRLFFRFFFFRFLFFLFFFRFFRLFFLFFRRLLFRFLLFFFRFRFFFFFFFFFFRLFFFLFFFFFFLFFRFRLFFLRFLRRLFFFFFLFFFRRFLLFRRFFFLLFFFRFRLFFRLFFFFFFLLRRLRLRFFRFFFLFFFFFFLFFFLFFFRFFFFFFLFRFFRFFFFFLFFLFFFRRFFLFLRFLFFFFFFFFFFLRLFRRLFRRLFFFFFRFFFFFFRLFLRFFRFLFRLFLFFFFFFLFFFRFRRLFFLFFFLFFFFFFRLRFLFFFFFRLFFRFFFRRFLLFFFRFFLFFFFFLRFFFLFFRFFFFFFFLFFFLFRRFLFFLFFFFLFLRFLRFRFFFFFFFFFFFFFFRFFFRFFFFLRLFFFFFLRLFLFLFRFRFFRFLFRFFFRFLFRLLFRFFFLRFFRFRFFLRLLFFFRRFFFFFLRLLRLFFRLR +FLFFLLRLRFLFFFRFRLRFFLRLFLFFRFFFRFFFFLFFLRFRFLRFFLFRFLRFFFFLFLFFFFFFFLLFRRFFRLFRFLRFFLRFRLLRLFFFLRFFFRFLFFFF +RFFFFRFFFRFRRLLFRLFLRFFRFFFLLRFRFFLFFRFFFFFFFFFFFFFRFFFFRRFRFRFFFFRFLFFLRRFFLFFFFLRLFFFFFFFLFFFFRLFFFFFFRFLFRFFFLFFFRRFFLFRFLFFFRFLRLLRLRLFFFFFLRFFFFFFFFFFFFFFFFRLRFFRFFFLLFRFRFFFLFRLFLFFFFFFFRRFLFFFFLFFFFRLFFFFLFLFRFLFRFFRFFRFFLFRFFFLFFRFLFFRLFFRFLFFFRFFFFFFFFRLRRFLFLFRFFLFFRFLFFFFFFFFFFFFRLRLFFRFLFFFFFLFFFFFFLFFLFFLLFFFFFFFFFFRLFLRLFFFRRLRLFFFRLRFLFFRLFFFFLFFFFLFFRFRFFFFFFFFRFFLFFLFFLRFFLRFRFFFLFLFFFRFFFRFFFFFFFFFRFRLFLFRLLRFFFFLFFFLRFFFFRFFFFFFFLLRFLFFFRFFFLFFRLLLFLLFRFFFFFFFFRLFFRRFFFLLFFFFFRLRLFRRFFFLFFFRRLRFLLFFFFFFFFFFFFFFFFFFFFFFFFFFLRFFRLFFLRRLFFFFFLLFFFRFFRFFFLFFFFFLFFFRFFRFFFFFLFFLRFLRLRFFFFFLFFFRFFFLLLFFFFFFFLLFFRFFFFRRLLFLFFRFLRLFFFLRFLFRFFFFFRRLFFFFLRFFFRFFRFLFFRRRFLRFFFFFRRLLFFFLFFLFRRFLLRFFFFLRRLFFRLRFFFFFFFFLRRLFFFLFFFFRRFLLFFFLFFFFFRFFFFFLFRFFFFLFLFRFFFFRFFRFFLFFFLFFLRLFFFFFFFLFLRRLFFFLFRFFFRFLFFLFFRFFRLLFLRRFRFLFFFLRFLRFLRFFFLFFFRRFFFLFFFRFRFLFFLRLFFFFFFFFFLRRLFFFLFFFFFLFFRRFFFFFFFLFFFLFRRFLFFLFRLFRFFLFRFLFRFFRLFFFRFFFFLRFFFRFFRRLFFFLFFRRFFFFRLLFRRLFFFFRFLLRRFLFFRFFLLFFRRLFFFFFFLLRFLRLFLRRFFFFFFFFRFFFFRLLFLRFRFRFFLRFLFFFFFFFFFLFFRLRFFFFLFFLRLRLFRFFFFFLFFFFFRLRFFFRFLFLRFFFFRFRFLFFFLLFFRFFRFFFFRFFFLFLFFFFFFFLFRLRFFFRFRLFFFFRFLLRFFFFFFRFLFRFLFFFFRFFLFFFFFFFFLFFLFLLFRLFFFLFFFLFFRF +RLFFLFFFFRFFLFLRRFFFFFLFRFRFLFFRFFFFRFLLFFFFFLFFFFFFRFFLRFFFFRFFLFFFFFRFFFFLRFRLFLRFFFFFRLFFFRFRLFLFRFRFFFFLFLFFFFFFRRLFFLFFFFFLFLFRFFFRFFFFRFLFFLRFFFRLLFFFFFLFFFFRFLFFFFFFRFLLRFFFFRFRFLFFFLFRRLFFFFRFFFFRFLFFFLFFFFRFLFFFFFFLFLRLRLRFFFFFFRFFFRFFLLRRLFFRFLFFLFRFFRFFRFFLLRFFFFLRFLLFFRLRRLFFLRFRFLFFLLFRFFFFFFFFFLRFRLLRLRFFFFFFRFFRLFFLRFLFRFFFLRLLRFFFRLLFFLRFFFFFFFLRFFRRLFFFFFFFRFLFLFFFRRFFFFLFFFFRFFFFFFFLFLRFFFFFFLFFFFRLFFRLFFFFFFFFFLRFLFRLFRFRFFFFLFFFRLFRLRLLFFRFLLFFRFRFFFFRFFFFFFFFFFLFFFFLFFFRFFFRFRFFLFFFFFFFFFFFRFFFFFFFFRLFRLFLFFLRFFFFFFFLRLFRFRFRLFLFFFFLFFRLFRFFLLFFRFFRFFRLLRLRLFFFRFFFFFFFLRRLFFFRLFLFRFFFFFFRFFFFFFRLLFFRLFRFRFFFFLFFFFLFFFRFFRFFFLLRFFFFFLRFFFLFRFRRLFLFFLRRLFRLFFLRFFLRFLRLLFFRFFRFFLFFFLFLFRFFFFRFLLFRRFFLRFFLLFFRLRFRLLRFFRRLLRFFRFLFFFFLRFRLFFFRRLFRLRFFFLFFLFRFFFLLFFFRFFRLFFFFLRFFFFFFFLFRFFFFRLFFFLFRFFFFFLRLFFRLFFFFFFLFFRRFFLFFFLLRFFFRLFRFRLLFFFFRFFRFLFFFFFFLFRFLFFFRFLRRLRFRFFLLFFFFFFFRFFRLFFFFLFFFFFFFFFFFFFFFLFFFFFRFLFFFLFRFFLLRFFFRFFRLRFFRLFFLFFFLFFFFFFFFFFRFLFFRLFRFFFFRFLFRRLRLFFFFFFFFFLFFFLLFRRFFFFFLRFFLLFRRLFRFFFFFFFRRFLFFFFRLFFRFLFFFFLFFRRLFFRFFRLFLFFFFFFLFFRFLLFRFFFRRLFFFFFRFLRFFLFRFFFFFLFRLFFRFFLLRFRLFFFFFFFLFRLRFRLRLFFRFFLFFLFFFRFFFRFRLFFLFFFRFFFLFRFFRLRFRFFLFFFFFRFLRLLRFLRLFFFFFFLRFFLFFFFRFFLRLFFRFFFRFLFLFFRRFFLFFFFLFFFFLRFFFFFLFFLFRFFRFFLFLRFFFRFLFRFFFFRFFFLFLRFRFFLRFFLRFFFLRLFFFLRRLFRLLFFLFFRRFLFFRFFFFFLLFFRFLRRFFFFFRFFLLRFRLLRRLFRLRFFLFFFFFLFFFRFRFLFLFFFLFRFFFFFFFFRFLFFLFFRFFFLFFLFRFRFFFFFFRFLFRFFLRFFLFFLFRFLFRLFFLRFFFFRFFLFFRFRFFLFFFFFFRRLLFFFFLRFFFLFFFFFFLFLRFFFRLFRFFFFRFFFFFFFLRLFRLLFRLRFRLFFFFFFFFRRFFFFLRLRLFFFRLLFLRFFFLRFFFLRFFRFFFFRFFLRLFLFFFFFRRFLLRFFFFFLLRFLRRFFFFFRFFFFFLRFRLRFLFFFFLFLRRFFLFRFLFFFFFFFFFFLRFLFLRRLFFFFFRFLLFRLFRFFFRFLRLRFFFFFFFFRRFFFLLRFFFFFFFFLRRLFLLRFFFLRFFRFLFRFFFRFLFFLFFFFRFLRLRFFFLRRFFFRFLLFFFRLRFRLRFLFLFFFFFFLFFLRFFRFFFFFFRFFLFFLRLFRLFFLFFFFFFFRRLFRRFLLRLFFFFFRLLRFFRLFFFFFFLFFFLFFRLRFFRFLLFRFFFRFFFFFFFFFFFFFRLRFLFFFFFFFFLRFFRFFFLFFFRFLFFFLFFRFFFFFFFLLFFFFFFRFFFFLFFFFFFLFFRRLRFFFFFFFFFFFFFFFRFFFLRFFFFFLFFRLFFFLFFRRLRFLRLRFFLFFFFRFLRLFFFFFFFFLFFFFFFFFFLFRFFFLFFFFRLFRFFFFFFFRFFRFFFLRFLFFFFFFFRLFRLLFFFFFFFRLFFLRFRFLFFRLFFLFFRLFRFFFLRLF +FLFFRRFFFFRLLFFFLFLLRRFFFRFFFLRFFFLFLFFRRFFFFLLFRFFLFRFFRFFFRFLFFFFRLFFFLRFFFFRFRLFFRLLFFFFFF +FFFRFFRLRFLFLFRLFFFRFLFFFFFFLRFLFRFFLLFFRFFLFFFFRRFFFFFFFFFFFFFFFFRFLFLLRFRLFRFFLFRFFRFLRLLRFFFFRFFLRFFLLFRLFFFFFLRLRFRFRFLLFRFFFFFFRLFLFFFFFRFFRLLFLFRFRLLFRRFFLFFFLFFFRFFFLFFFFFFRFFFFRFFFFFLFFFLRLFFRLFFFRFFLFRFFFRFRFLLFFFFFRFLRFFRLLFRLRFFRFLFRFFRFFLFFLFFFRLFFFRFFFRLFFLFFFFFLFRFFLFFRLFLFRFFFFFFFRFRLRFFLFFFFFFLFFFRLRFLFLFRFFFFFFRFLRFLRFFRFLLFRRLFFFLLFRLFRFFFRFFFFFLFFFFLFFFFFRFLFLRFRFFFFFRLFRRLFFLFFFFFLFFLFFFRRLFFFRFFFFRRFFFLLFFFFFLRRFLFLFFLFFFRFRFFFLLRFFFRLFFFFLFRRLRFFFLFFLFFFFFFFRRFLLRFRFFFFLFFLFRFFLRFFRFFRFRLLRFLFFFLFFRRLFRFLFFFFFFFFLRFFFRLLFFFFFFFFLFFRFRLFLFFRFRFLFRFRLFFFFFFRFFLFFRFFFFFFFFFFFFLFFFLFFFFRFLLRFFFFFRFFLFFFFFFFFFFFFLRFFFFFLRFFFFRFFRLFLFFFFFFFFFFFFFFFFLRFFLRLFFFRRLFLFLRFFFLRFFFFFFFLRLRFFFRFFFFLLFRLFFFFRFLLFFRRFFFRLFFFRFLRFLLFFFFRFFFFRFLRFFFLFFRRFFFFFFFLFRLFFFFFLRFLRFRLFRFLLFFFFFRFFFRFLFLFFFRLFLFFRFFFRLRFFRLFFRFLFFRRLFLFRLFFLRFLFFFLFFRFFFRFFRFLFFRFLLFRFRFLFFFLFRLLRRFLFFLRFLFRFFFLFFRLRRLRFFLLFFRRLFFFRLFFFRLFRFFLFFFLFLRFFRFFFFRFFLLFFRFFFFFRFFLFFRLFFFLRFLFLRFLRFLFRFRLFLRFFFFFFLFRLRLLRFFFRLLRRLRFFRLFFFFFFFFFLRFFFFFFRFRLLRRFLFFLFRFLLRLFFRRLLRRLFFRFRFFFLFFFFLRFRFFFFRFFFLFFFLFLFRFFFFRLFFLFRFFRLFFFFRLLFFFFFFFLRRFFFLRRLLFRRFFLFRFFLFRFFFFFLFFFFLRLFRLLRRLRLRLRL +FFFLLFFFRFFFRLRFLFFFFFFFFRRLRFFFFFFFLLLFRFFLRRFFRLLFRFRRLFFFFLLFRRFFFFFFFRFFFFRRRLRFFFLFFRLFFLRFLRFRFFLFFFLFFFFFFRRFLFFFLFFFFRFFFFRFFRFRRFFFLFFRFFRFFFLRLRFFLFFLFFLLRLFFRLFLFFRFRLLFFLFLRRFLRFFFFFFFFRFRFRRFLLRRFFLRRFFLFFFFFFFRRRFRFRFLFFFLFFFRFFLFRLFRRFLLRRFLFRRRFFRLRLFRFFFLFLFFFLFFFLRLFFLFRL +FFLFFRFFRFFFFFFFLRFRLLFFLRLRFRFFLFFFLFRRFLLRRLLFLRRLRFFFFLFRFFFFLRFFFFFFRFLFFFFFFFFLFFFFLRFFFRFLRLRFFRFLFFFLFFFFFFFRFFLFLRLFFLFFRFLFRFFFFFFFFFRFFFFFFFRRFFFLFLLRFRFFLFFFLRFFLRFFFFFFFLFRFFLRFFRFFFRLFFFFFLLRLFRFFFFRFFLFLRFRFFFFRFFLRFLFLFFRFFFFRFFLLFFFFFRRFFFLFFRRLFRFLFLFFFFLFRFFFFFFLLFFRRFFFFRFLFRFFFFFLRRLLFLFRFRLFLFFRLRFFLLFFFRFFFLFFRFRFFFFFFFFFFFLFLLRFFRLFFFFFFFRFRFLFFFFFLFFRFFFLRRFFFLFRLFLRFRFLFFFFRLFRFFFRLFFFFFFLFFFFLLFFFRFFRFFFFFFFRLFLRFFLFFFRFFFFFFFLLFRFRLFLFFLFRFFFFRLRFFRFFLFFFFFRFRFLFFFFFLFFRLFFFLFFLFFRFFFFLRFFRFFFFFFFFLFFFRFFFFFFFRFFFFFFFLRLLFRLRFFFFFLFLRFRFFFFFFRFLFRFLFLRRFFRFLRFFFFFFLRFFFLLFRFRLRFFFLFFFFFRFLFLFFFRFFLRLFFRRFFFRLRLFFLFFFFFFFFFLFFRFFFRFFLLFFFLFRFRLFFRFLRFFLRFFLFRLFFRLFFFFFFLFFRLRFFRRLFLFLFFFFRRLRFFLFRFLFFFLFFFFRLRFFRLFRFRLLFFRFRLFLFFFLFFRFLRRFFFFFLRFLFFFFLRFFRLFFFLFLFRFFFFRFRLLFFRFFRFFFLLFFFFFLFRLLRFRFLRFLFFFRFFFFRFFFLRFLLFFRFFFFFFLFFFRFFFFRFRFFFLFFFFFFFFLFFLFRFRLLFFFRFFRRFLFFFFFLFLFFRFFLRRFFFLFFFFRLFRRFFRLFFFFFFLFRFFLLRFFFFFFLRLLRFRFLFFLRFRFFLLFFRFFFFFFRFFRLLRFFFFFFFRRLLRRFLFFFLFFRFLFFRLLFRFFFLFFLFRFFFFFFFFFFRFLFFLFFFLRFFLRFRFFFFRLLFLFRRFFFFFFFFFFRFFFFFFRLFLFFFFFRFLFLRLFFRLFRFFFFFFFRRFLLFFLFRFFFFFFFFRFLFLFFFFLFRLRRFFLFLFFFFFFRFFRFFLFFFFFFFRLFLFFFFRFFFFRFFFLFFFFRLRFLFLRFFRLFFFRFFFFFFFLFFRFRFFFLFFFLFRFFFFFFFFFFRFFFFFFLRFFFLFFFFLLRFFFRLRLRL +LFLRFRFFRFFRLR +FFFLFFRFFFFLLFRFFFFFLFFRLRFFRFLRLLFFFLFRFRLFRLFLFFLFFRFFFFFRFFLRLFFFFFLRFLFFLRLR +FFFLRFRRLLRRFLFFLFLRFFRFFFFLFFFFFFFLFRFFLFFFFFRFFLLRFRLFFRLRRLFFFLFFFRFFFFFRFFLRFFLLFRFRFFFFFFLFFLFFFFRFLFRRFFFLFFFLRRFFFFLLRFFFRLFLRFRFFFLFLFRLFFRFFFLFFRLLRFRFRFLFRFFFLLFRFRLFLFFFFFFRFFRFFLLFFRFFLFFLRFFFFRLFFFRRLFFFFFRLLFFFFFFLFRRLFRLFFFFLFLFFFRFFRFLRLFRLRFLFFFFRLRLFFRFFFFFRLLRFFFFFFFFFFFFFFRRFFFFFFFFFLFFFFFLLRRFFRFLFFFFFFFFLFFLFRFFLFRFLRFFFFFFFLRLFFRRFFFFLFFFFRLFLFRLLRFLRFFFRLFFFFFRFFFFRLFFRFFLFLFFFFLRRFLFRFFFLFFFFLRRFFLLFRLFFFFLRFFRFFRLFFLFRLFFFRRFFLRFFLLFRFRFLLFFFRFFFFFLRLFRRLRLRLFFLLRFFFRFFFFFRRFLFFFFFLLFFRFFFRFFFFFLLFFRFRLFFFFFLLFRFFFFFFRRFFLFFFRFFFLFFRRFFLFLRRFLFFLFFFLFFFRRFFFFFLRFLFFFFFFFLRFLFRRFLFFFLFFFRFFFLLRFRLFFFFLFFRFFFFFFFFFRFFLLRFFFRLLFFFFFFRLFFFFFLLFRFFRFFFRRLFFFFLRFFFRFFFFLFFFLRFFFFFFLFRFFFFFRLLFRRLRLFFFFFLFFFFRLRRFFFFFFFFFFLFFFFRLLRFRLFRFLRLFLFFFRFFLRFFFFRLFFLRLRL +FFRFLFRFLLFRFFLLRFFFRFFRLFLFRFFFFFRLFFLRFLRFLRFFFFFRFFFLFFRLLFFRFFFFFFFFFLRLRFRLFLFFFRRFFFFFFFFRFLFFFFFFFLRLFFFFFFFFFFFFFLFFFFFFRFLF +RFFLFLRFFFFRFFLLFRRFLLFFRRFLFRLRFLFFRFLFFFLFRFFFRLLFFFFFFRFFLLFRFRFFFFFRFRLRLLFFFLFFLRFFFFFRFFRLLFLFRRFFFFFFRLFFFFFLFFFRFFLFLFFFFFFFFRFLRFFFFFRLFFFLRFLRRFFFRLFRFLLFFFFFFFFFFRRFLFRLFLFRFFLFRLFFFFFFFFFRLRLRFRFFLFFFFFFLFRRFFLRRFFRLLFFLFFFFFFFFFFFFFLFFFFFRLRFFFFFFFRFFRFLFLFFFFRLLFFRFFLRFLLFFFFFRLRLFRFFFFFFRFLRLFRLFFLRRFFFFFLLRFLFFFLFRRLFFFFFFRFRLLRFFLFFRRFFLFFFFFFFFFLFFRRFFFFFFFFFRFFLRFRLFRLFFRLFLFFFLFFRLFFRFLFRFLFFRLFLFLRFRLFFFFFFRFLFFRLFRLRLFFLFFRFFFFRRFLLRLFFFRFFFFFFFLFFFFRFLLFFRFFFRFLLRFFRFFFFFFFFFLLFFFRFFRLRRFLFFFRLRLFFFLRFLFRLRFFLFFRRFFFFFFLRFLFFFFFFFFLRFLFRFLLFRFLRLFFRFFFRFFFFRFFFLFLFFFFFRFFFLFFLFFFFFRLLFFFRFRFFLFFRLFLFFFRFFRFFFFFFLRRFFFFFFFFFFFLFLFFFFRFFRLLFFFFRFFLFFRFFFFFFFFRLLRRFFRFFLFRFFFFFLLFFFFFFFFFFFFFFFFLFLFFFRFFFRFFFFRFFFLFFFFFFFFFLLFFFRRLFFFRFFFLRRFLRFLFFLRFFLFFLFRFFFFLRFFFFFFFFFFFFFFRFFFFFFFLFLRLFFRFFFFLFFFRFFFFFFFRRFLFFLLFRFLFRRFFFRLFLRFRLRRFLFLRRFFLFLRLFLRFLRFFFRLFLRLRFFFRFFFFFFRFLFRLLFFFFFFFFFLRFFFFLFLRFFLFRRFFFFLRFFFLLFRFLRFFFFFFLRRFRLFLFFFFFFFFLFFFFFFFFFFFFRFFFRFFFFFFLFLFFFRFLRFRRLFLFFFRLFFFRFLFFFFFFFLRLFRFFFFLRLFFFFLRFRFLRFFFFRRFLRLLFFFLFFFFFLLFRFFRFFFFRFLFFRRFFLLFFFFFFLLFRLRFFRFFLLFFRRLFFFRFFFRFFFFLFFLRLRFFFLFFLLFRFFRFRFLFRFFFLFRLRFFRFLRLRLFLRFFFRFFFFFRFFFLFFLRRFFFLFRLFRFFFFFFFFFLFFFFLFFFFRFFFLRLRFFFFFRLLFRFFFFFFFFFLRFFFL +FFFLRFFRFFFLLFRLRRFFFFLRLLFRLFFFFFFFFFFFFFRFRLFRRFLLFFFFFRFFLFLFRFFLFFRRLF +FFFLLRFFFLFFFRFFLFLFRRFLLFFFFFRFFFFFLRFFRFFFFFLFLFRLFRLRFRLFFRFRLFFFRFLFLFFFFFFFFFRFLFFFLLRLRLRRLFRRFLLFRFRLRFLLRRFFLRLLFRRFLFFLFFLFRFRFFFLLFFRRFFFRLFFFFLFFFFLFFRFFFFRFFLFFFFFFFLLRFFRLLRLFFFFRLFFRFRLFFFFFRLFRLRFFFFFFFRFLRFFLFFFFRLRFFFLFLRFFFFFFFFRRFLFFFRFFFLFFFLFRFFLRFFFLFLFRFFRFRFLRFFFLFLRFLRFFFRFRFFFLFFFFFFFFLFFFFFFFFLRLFLFFFFRFRFLFFFRFFFFFLFLFFFRFFFRFLLFRFRFFFFFFFFFFFFRLFRLFRFLRLRFFLFFFFFFFRRFLFLFFRFLFLFFRFFFRLFFRFFLRFRLFFFLRFFFFFRLLFFRFRFFFFFRFLFRFFFLFFFRFFFLFLFFFRFFFLFLFFRFFFFFFFFLFFFFFFFLFFRFFFRFFRLFFFLFFFLRFFFLFLFFFRFFFRFRFLFFFFFRFLLFRFRLFFFFFFFLFRFFRFFFFFFLLRFLRLRRFFFLFFFLFFFLRRLFRFFFFFFFFFFFFLFFFFFRFLRFLFFFFFFFFRFFLFFLFRLFFFLFFFRFFRFFFFFFLFFLFRFRFLFRFFLLFFFRRFFFFFFRFFFFFFRFLLFFFFFLRLFFRRLFFFRLFFFFLFFFFFFLFFFFRFRFFFFFLRLRFLFFFFRFLFFRFLFFLRFFRLRFLFRRFFFLLRFFFFLFRRFLFRRFFLLFRLFFFLFFFFFFRLFFRFFFRFLFFRFFFFRLLFFFFFLRFFFFLLRRFFRFFLLFFFFFFFFFFFFRFFFFFFFFFFFFRFFLFFRFFRLFFFRFFFFRLFLFFFFFFFFFFLFFFFFFFFFFFFFFFRFRFFFLRFFRLFFFFFFFFLFFFLFFRFFFFRFFLFFLFFFRFLFRFLLRRLFFFFRLFFLFFFLFRFFLRRFFFFRFFFFFFFLFFLFFRFRFFFFFFLFFFFFLFRLRFRRLRLLFRFFRFLLRLRLFFFFFFFFFFFFFFLFFFLFFRLRFFFFFFFRFFFFLFFRLFRFLFFFFFFRFRFFFFFFLFFFFFLFFFFFFLFRFFFRFFFFLFFRFFLFFFFLRFFLRFFFLLRFFFFFRFFFLFRRFLRFLFFFFFFRFFLFRLFLFFFFFFFFFFFFRFLRFLRRLFLFFFLFFFRFFLRLFFFRFRFFRLFFLFFRFLRLFLFRRFFFLFFFRLLRFFRLFFFRFFFRFFFFLRRLFFFFRLRFLFFFFFLFFFFFLFFFFFFLRFFFFFFFRFFFLLRFRFFFFFFFFFFFRFFFFRFFLFFLFLRRLLFFFFFFFRFFFFFFFFFRLRRLLRFFFFFFFLFFRLRFLFLFFFLRRLRLFRFRFFFLRFFLFFFRFFFFFLFFFRFFRLFRLFFFLRLFFLFFFRFFRLFFLRRFFFRFFFLFFFRLFFFRFFRFFFFFLFFFFLFFFFFFLFFFFFFRFFFFFFLFFFFRFFFLFFFFFLLRRFFRRLLFLRFRLFFLFFFRRLRFFLFFLFFFLFRLFRFFFFFFFFFFFLFFRRFFFFFRLRFFLFRLFRFLLFFFFRFLRRLRFFFLFRFRFFFLFLFRRLFFFLFFRFLFLFFFRLFRRFLRFLFLFRLFFRFLRLFFFFFLRRFRFFFLFFFFFFFFFLFFFFFFFLFFFFFFFFFFFRFFLLRFFFFRFFFRFLFFFFFLFRFRLFFRFFFRFFLLFFFFFFFFFRLLRLFRFFFFLRRFRLFFLLRRFFLFRLFFFLFFFFFLFFFRFFFFLRFFFRFFFLFFRFFLFFFLFRFFFRFLFFFFFF +LFLFRFRLFRRFLFRFFFFFFRFFRFFR +FLRFFFFFFLFFFFLRFLRRFRLRFFLFRFFLRFRRLFLFFLFRRLLFLRFFLFFFFFFFFFRFLFRRFFFFFFFFFFFFFFLFFFFFRLFFFFFFFLFFFFFFRFLRLLFLRRFFFFFFFRFFFFFFFFRFFRLFFFFLFFFFFLFLFFRRFFFRLFRLRFRFLRLLRFLFRFLLRFLFFFFFFRRFFLFFRFLFFFRLRLRFLFFLFLRFFFFFRLRFRFFLFFFLLRFFFRFRLLFFRFLLFFFFRFFFFRLLRFFFFRRLFFFFFLRFFFRLLFRFFRFLFLFFFRLFFLFLFFRLRRFLFFFFLFRFRFFFFLRFLLFRRFFFFFFFRFFFLFLFFFFFFFRRFFFFLFRLFRFFRLFLFFFLFRFFRFFFLFLFFFFFFFFRRFFFFFLLFRFRFLFFFRFFFFFFFLFFFFFFFFFFLFFRLFFFFFFLFRRFFFFLFFRRLFFLRRFLFFLRFLRFLFFLRLRFFFFRFFFLFFFFRFRLFRFRLLFLFFFFLFFFFRFRFFFFLFFLFRFFFRFLFFFFLFLRFLFRFFFFRLFFFLFRFFFFRFFFFRFFLFRLFLFRFRFFFRFLFFLRRLFFFFLFFFFRFLFFRLLRFFLFFFFFLFFRFFFFFRFFFFRLFFRFFFFFFFFFFFLFFFLFFLFFRFFRLFFRLFFFFFRFLFFRFFRRFLFFFFLFFLRRFFLFFFRFFFLFLFRLLRFRLFRFFLFFFFFFLFRRFFLLFFRRFFFFFLFFLFFFFRLFFRFFRFLFFFFFLFRFFFFFFRLFRFFLRFLFFFFFRFFFFLLFFRFLRLRFFRFLRLFFFFFFFRFFRLLFFFFFFRRLFLLRLRFLRFRFLFRFFLLRFLFRFFFRFFLLRFFFLFLFFFRFLFFRRLRLRLRL +FFFFFFLFFFRLLRFFFFFFFFFRFFFFFFFFRRFFLFLFFFFFFFFLRRFLFFFFLFFFFFFLRFFRFFFFLLRFFFLRFFRLFRLFRLFRFFFFFFFFFRLFFFFFFRFLFFLFFFFFLFFFLRRFFFFFFFFFFFRFFLFRRFFFLLFRFLFFFFRFFFFFRFFLLFRFFFLRFFLFRLLFRLFFFFRFRLRFFFRLFLFFLRFFFRLLRLFFFFFRLFRFFFFRFLLRFRFFLFFFRFLFFLFFRFRFLLFRFFLFRFFFFFFLFFFLFRRFLLFFRFRFFLFFFFLFFFFFFFFFRLFFFFFRLFLRRFFFRLLFFFRRFFLRFFFRLFLRFFLFFLFFFRFFRFFLFFFFLFFFLRRFLFFRRFLFFFFFFFFRFLLFFLFRFFRRFLFFFFFFLFFFFFFFFFRFFFFFRFFFFLFFRFFLFFLFFFFRRFLFFFFFFFFFLFFRLRRFFLLFRRLFFFFRLFFFFRFRFLFFLFFFFFFFFFFFLFFFRFFFRFFRLFFRFFRLFFLFFFLFRFFFLLFFFFRFFFRFFLFFFFFFLFLRRFFFRFFFFFFLFFRLFFFFLRFFLFFFFFFFLRFFFFFLFRFLFFRLFFRFLRFRFFFFLFFLFFFFFRFFFFFFRLRRFRLFLFFFFFFFFFLFFLFFRRFFLLFFRFFFLFLFRRFLFRFFFRLLRFFLFFLRFLRRLFFFFFFFFFRFFFFFFFFFLFFFFFRLRLFFFFRFLFRLFFFLFFRRFFFFRLFFRFLLFFFFFFFRFFFFRFFFRFLFFFLFFFFFFFFFFFFFFFFFLFFFFFLFFLLRFFFRFFRFLRFFFFFFFFFLRFRFFFFFFLFFFFRFFL +FFFFRFFFLRLLFFFFFRLFFFFFRFRFLFFFFRLFFFRLRFRRLLFLRFFFFLFFFRLFFFLFFFFFFFFFFRFFRFLLFFRFLFRFFFFFRFRFRLFFLLRFLFFFLRRFFFRLFRFFLFLFFFRFLRFLFFFFFFLRFLRFLRLFFFFRLFRFFFFFFFRFFFFFRLRFFLFFLLRRFFFRLFLFRRLFFFFFFFFFFLLFRFRFFFFFFLFFFLFRFRLRFFFFFFFLFFRFFFLFFFLFFFFFFFRFLRFFFFRFFLRFFLFFFLFFRFFFFRLFRFRFLLFFLFFFFFFRFLFFFFFFLLFRRFLRFRFFFFFFRLFFRLFR +LRLFFFFRFFFFFFLRFFFFRFLRLLRFFFFFFFFFFFRFFRFLFFFFFFFFFLFFLFLRRFRLFFRFLFLLRFFFFFRFFLFFFFFFRFFRLRFFLFFRFFLFFRFFFFLFFFFFFLFFLFRFFFLFFLRRFFFRLFFLRFRFFRFRLLFFLFFRFFRRFLFFFFLRFFLRLLRFFFFLFFFFFRRFFFFFFFFLLFFRFFFFFLFFRLFFFRFFRLRLLRLFFFRFFFFFLRFLFFFLFRFFFLRFFFFFLFFFRFFFRFFFFFFFFFFLFFRLFFFFFFLFFFFFLFFRFFFFFFFFFFRLRFFFRFFFLFFFRRFFLFFRLLFRFRLFFFFLFLRFFRFFLLRFLRFFFFFLRRFLRLFFFFFFFFFFFFFLFFFRFFLFFRFFLFFFFFFFLFRFFFFFFRLFFFFFRFFFFFLFLRLFFFFFFRLRFLFRFFFFFRRLFFFFFFFFFFLFLRLFFFFFFFRLRRFLLFFFRFFFRLFFFFFFFRFFFFRRLFLFFFFRFRFFFLFLFFRFLFFLFFFRFFFLRFLFLFFFFRFFFFFFFFRFFFFLFFFFFFLRFFFFFFRLFFLFFFFFFRFFLFFFRLLFRRFFLFFRFRFFFLFFFFFFFFFFLFFLRFFFLRFRFLFFFFFFLLRFFFFFFFRRLFFRFFRLFFFRLLFFFFLFRFFLFFRFFFFFLFFLRFFLLFLFFRFLFFFLFFFLRFFFRFFFFFFFLFFRFFRFLFFFRFRFLFFFFFLFFFFRLFFFRFRLFFLRFLLFRLLRRFLRFFFFLFFRFRFFFFFLLRRLFRRFFFLLFFFFLRRLLRFFLRLFRFLFFFLRLR +FLFFLFFLFRLFLFLR +RFRRFFLFFLFFRRFFFFRRLFLFFRFLFRFFRRLFFFFRLR +RRFFFLFRLFLLRFFFFRLFFFFFFRLFFFFFFLFFRLFRFFFRFLFFFFFFFFFRFFFFFLFFFFLRFFFFFRLFFLFFRFFFFFLFLLRFFRFLLRFFFRFFFFRFFFLRFFLFFRLRFFFRLFLFFFFFFFLRLFFLRFFFFFRFFFRFFLFFFFFFFRLFFRFFFFFFLFFFRFFFFLLFFFFFFLRFFRLLRFFFFRLLRRFFRFFFFFFLFFFFFFFLFRRFFFFFFFFFLFFRRFFFFFFLRFLFLRFFFLRFLRFLRRFFFFFRLLRFRLLFLRFFFLFRFRLRLFFLRFFFLLRRFLFFFFRLFLRRFLFFLRFFFLRFFRLFLFRLFRFFFFLFRFFFFFFFFFRFRFLRLFFRLLFFFLFRFFFRFFFFLFFFFRFLFLRFFFLLFFRFRFLFFLFFRFRFFFLRRLRLLFRLLFFRFFFFFFFFRFLFFRLFFFLRLRLRFFLRLRFLFFRFFFFFFRFFFFFLFLRFRFFFFFLRFFFFFFRFFFFFFFFLFFFFLFFRRLLFFFFLRFRFFFFFFRRFFLFLLRFRRLRLFLFFFFFFFFRFLRLFFFFLLRFRFFLFLFFFRLRFFFFFFFFFRFRLLFFRFFRFFLFFFLRFFFFLRFFLLFRFFFFRLRLFFFFLLFFFRFFFRRFFLFFFFRLFFFFFRLLFFFLFRFFLRRFLRFRLLFFRLFRRFFFFLRRLFLLRFFFRFLFFRFRLLFFFFRLFLFFFFRLFLRFFFLFFRLFRFFRFFFLFFFFFFFLRLRRFFFRFFLRLLRFLFFRLLRLFFFRLRFRLFLFRRFFFLRFFFFFLFRLFFFFFFFLFRLFFFLRFFRFFRFLRLFRFFFFFFFLFFFFFFFFRFFFFFFFFFFFFFRFRLLFLFFRRFFFFFFFFFFLRFLFLFFFFRFLRFRFLRFLFLLRFFFRFLFFLRFLFFLRRFFR +FFFLRFFLLRFFFRRFFLLFRRLRFLLFLRFLRRFFRFFFFLFFRRLFFRFLFFFFFRLLFFFFFFFFFFFFFLFFFFRLFRFFFFFLRLFFFFFFRFLFRRLFFRFRFFLFLFFRLFFFFFFFFFFFFRRLLFFFRRFLFFLFRLLFFFRRFLFFFFFFFFFFFFRFFFFRFLFFFLFRFFFFFRLLRFFFFLFFFFFFRRLFFFFFRFLLFRLRFLFLFFFRFRRLFLLFRLFFFFFFFFRFFFLRFFFRFFFFFLFFRFFFFFFLFFRFLRFLFFRLFFFLFFRFFFRFFLFFFFFFFFLFFFFFLFRFRLFFFLLRRFFFLFFFRFFFFFLRLFFFFRFFRLFFRFFLFFFFRFFFLRLLRFFFRFLRFFFFLLFFRRFLFFFFFRLFFFFFLFFLLLFFFFFFFRLFLFFRFFFFLFLFRFFRLRLFFRLFFFFLFFFFFLLLFFFFRLLFLFFFRFFRFLLRFFRLFFFRFRFFLFFFFRLRFRLLFFRFFFFFRFLFFFFLRFFLFRFFLRFLFFFFRLFLFRRLRLRFFFFFRFFFLRFFFFFFFLFFRFLFFFFFLLRFFFFFRFLFLFRRLFFFLRFLRRFFFFLRFFFFFFFRFRFFFFFFFFFLFFLFFFFFFRFRFFLFFLFFFFFFLFFFFFRRFFFFFFFFFFFFLFRLFFFFFFFFLFFFFRFFRFRLFFFRFFLFRFFLFFRFLFLFFLFFRFFFFRFFLRFFFFFRRLFFFFFFFFLFFFFFFFFFFLFFFFFFFFFRLRRLFFFFLFFFFFLRFFFFLFRFFFFFFFFFFFFFFFFLLFRLRLFRLFFRFFFRRFLFFFFFFFFFLLFRFFRFLFRFFLFLRRFFFFFFFFRFFLRFRFFLRFFFFFLRFLFFFLFFFFRLFRFFFFFLFLFLRFFRFFLFFRFFFFFLRFFRFFLRLFLRLLRFLRFFFFRLFFFFLRLFFFFFFFFFFFFRFRFFFFFLRLFRFRLFFRLFFFFFLLRFRLFFFFFFFFFFFFLFLFFFRFRLFLFRRLRFFFFLFRRFFFFFFFFLLFFFFRFFRFLRRLFFLFFFFFLRRLFFLFFFRLFFFRFFFRFFLLFFLRFFFFFFFFFRFRLFRRLFLFLFFRLRFFLFLFFRFLRFFFFLFFRLFFFFFRRFFFFFFLFFRFLFFFFRLFFFFFFRFFFFRLLFRFFFFFFLRFFFFFFRFRFFLFRLFFFLFLRFFFFLFFFFFFRFFFFFFRRLLFFFFFLFRRLLFFFRFFFFFFFFFFFFFFFFRFFFFLLFFFFRFRFFFFFFFFRFLFLFRFRFFFFFLFFFRFFFLFLFFFFFFFFLFRRLFRRFLFLRLRFFFFFRFFFRLFLLRLFFFRFFFLFFFFFFLFRFFFFFRFFFLFFFFLFFFRFFRFFLFRLFFRLLFFFFRFFRLFRFLFRFFLLFRFFFFFFFFLRRFFLFFFLRFFFLLFFFFRFFLRLFFRFLFFFRRLLFRFFRFRLFLFFFRFFFRLFFFFFFLFFRFFLFFFFFFLFFFFFFFFRFRFLFRFLFLFFFFFFFFRFFFFFRFFFFFFLFFLRFFRLFFFFFLFFFFRRFFLLLFFFFFFFFRFFFFFFLFFRFFFRLFLRFFFRFFLFFFRLRFFLFFFFFFLRFFLRRFFLRFFFFLFRFRFFFLFFFLRLFFFFLFLLLRLRFFFRFRFFLFFLFFFRLRRFLRLFFFFFFLFLFRLRFFLFFFRFLFFFRRLRLRFFFLFRFFLRLRLLFRFLFRRFFFFLLFRFFFFFLRRLFRFFFLFFFFLRFLRFFLFFRLFFFRFFRFFFRLLFFFRFFLFLRFFRFRLFFRFFLRLFFFFFFLRFFLFLRLRRLRLFLRFRFFFFFFLFRFRFLFLFFFFFFFFFFFFFFFFFFFFRLRLLFFRFFFFFFFFFFFLFFFFRFFLFLRFRFFFRLLRFLFFFFFLFFRFFFFFFFRLRLFRFFRFLFRLFLFFFFFFFLFFFFFLRFRFFLRFFLFFLFRLRLRRFRLFFFFFLFFRFRFFLLFFRFLLFRFFFFRFFLFFRFFLRFFFFFFLLFFFRLRFRLFFFFF +FFRFFLFFFRLLFFFFLFRFRFLFLFFFFFFRRFLFFFLRFLRFLFFLFFFFRFLFFFFFLFRLRLRL +LLFLRRLFFRFFFFRFFRFFFLLRFFFRFRLR +RFFLLFRLFRLRFFFFFFFFLRRFRLFLLRFRFFLFFFLLFRFRFLFFFFRLRFLFRLFLFFFFFRFFLFRFFFFFFFRFFLFRFFFFFRLFFFFFLFFRLRRFLFFFLFFFFRRFLFFLRFRLLFFFFRRFLFFFFFFLRFFRLFFFLFFFFFFFFFFFLRRLFFRFLFFFFLLRFRLRFFFLFFFFRFFFFFFFFFRFFFLFFFRFFFFFRLLFFFFLFFRLRFFFLRRFFFFLFFFFFFFFLLFFFRFFRFFFLFFFFFFFLRFFFFFFLLRFRFRLRFFFRFFFLLFFFFFFLFFFFFFFRFLFFFFFFFRFFFRLFRLFRFLFFFFFFFFLFFFFFLRRFFFLFFRRLFFFLRFLFFFFFFRFFFFFFRLRFFFLRFFFFFFFLFFRFFFFLFFFLFFFFRFFLFFFFRFRFRLLFFFFFLRFRLFFFFFRFFFLFRFFFFFLFRFFFRLRLLFFFLFRRFLRLFFRLFFFFRFLRFLFFLFFRLLRFFFFFRFFLRFFLFLRFFRFLRFFFLFRFFLFFFRFFFLLFFFFFFFFFFRRFFFFLFFRLFFFLFFFFFFFFRFRFFFRLFFFFFFFLRFFLFFFLRFFFFFFFLFFFLFFFRFFFFFFFLRLFRFFRFLFFFFFLRFFRLRFFRRLLFRFLFRFFFFFFRLLFFRFFLFFLLFRFRFLRFFRLLFRLFFFFFFLFRFFLLRRFFFFFRLFLRFFFFFFRFFFFFFFFRLFLRFLRFFLFFRFFFFLRFFLFRFFLRLRFRFLFFFFFLFRFFFRFLLFRLLFFFFFRFFFFRFLFFFRFRFLLFFFFF +RLFFFFFLRFFFFLRLRRFLFFFLRRLFFFRLRFFRLLFFFFLFFFFRRLFFLFRRFLFFRFFLRFFFRLLFFFFFLFFFFFRLFRFFFFFRFRFLRRFRFFFFFFLFFRFLFFFLRFFRRLFRFLFRLRFFFFFFLFFFFRLFRFLFFRFFFFFFFFFFFRFFLLRLRFFLRFFFFRLFFFLFFFFRFFFRFLRFLFFLFFFFFLFRFFLFFFFFFRFRFLFFFFLFFRFFFFFFRFLFFFFFLFFRFFRRFFFRFFFFRRFLLFFRFFFLRFRFFFFFRFLRLFFFFFFLRLRLFFRLLRFFFFRLFFFFFFLFFFLRLFLFFRRFLFFRFRLLFFRFFFFFFRFLFFLFFFFRLRLRLFRFLRFFFFRFFFFFRFFFFLFFFFLFFFLRFLRFFFFFFFRFRLFFFFFLLRRLFLFFFFRFFLLRRLFRFFFRLLRLFFFFRFFFFFFRFFLLFFRFFFFFLRFFFLFFFRFFLFFFFFLFLRLRFRFFLFLRFFFFFFLRRLLRFRFFFFFFRRLFFFFFFFFFFFFFFLFFFRFRFRLFFLLFRFFFFLRRLLFRLFFFFFFRRFFFLFFFLFFRFFFFFFFRLFFFLFFFLFLFLFFFFFFFFRRFFFLFLFLRFFFFRLFLFRFFRFFFFLLRFRFFFLFFFFLFFLRFFRFFRLFFFRRFFLFLFFFRFLFFLRFFRFFFRFLFLRFRFLFFFLFFRFRLFFFFFLLLLRRFLRFFLFLRRLFFFFFFLRFFLFFFFLRLFFFFFFFFFLRLLFFRFRFFFRFFLFFRLLFRFFFFFFFFFFFRFLFFFFFRLLFFFFFFRFFFFFFFLFRFFFFFFFRFFLFFFFRLLFFFFFFFFFRLFFLFFFFRRRFFFRFFFRFFFFFFFFFRFLRFLFFLRFRFFLRFRFFLFRLFFLFFRFLFFFLFFFFLLFRFRRLFFFRFFFFFFLFFFFRFLRRFFFFFFFFRLFFFLFLFFFRFLFFRFLFFFLRFFRFLFFFRFFRFFFLFLFFFLRFRLFLFFRFFLRRFFFLRFLFRFFLFFFFFFFFFFFLLRFFRRLFLRFFFRFFFFFFRFLFFRFFFLRFRLFFFFFLRFRLFLFFFFFFFFFFFFLFLRFFRFLRFFFRFFFFLFLFRFFRLRLFFLFLFFRFFFFLFFFRFRFFRLFLFFFFFFFRFFFFFRFFFLFRFFFLFFLFFFFFFFRFFFRLFFFFFRFLLFFFRRLRFFFFFLRFFFFFFRFLFRRFFFLFFRFFFFFRRFFFFFFFFFFFRLFFFLFFRFLFFFRLFFRFFFRFFFFLRLFRLFRFFFLFFRFFLFFLFFFFRFFFFRFFFLLFFFFFFFFLRFLRFFFFRFFFFLFLFRFFLFFFFFLFRFFRFFRFFFLFLRFFFRFLRFFFFFLFFFFFLFRFFLFFFRRFFLFFLFRFFLFFRFFFFFFLFFFFFFFFFRRLLFRFRFLLRRFRLLFFFFLRLRLFFLRFFFFFFRLLFFFLFRFFRLFFLFRFFFFFRFFRFFFLFFFFFFFFFFRLFFFLRFFFFFRFFFLRFFFFFRLFFFLLFRFFFFFFLFFFFLRFLFFFFLFFLFLFFFFRLLFFRFRFLFFFFRFFFFFFLFLFFRFFRFFFFRFFFLFFLFFFRLFLFFRFFFRFLFFFFRFFFFRFLFFFFFRLFFFFRLFFLRFFFFFFLFRFFFFFLFFFFRFFFFFRLLRFLFFRFFFRFRLLFFFRFFFLRFFLFFFFFFRFLFFRFFFFFFRLFFFRFFFRFFFLLFFFFFFFRLRFLLFFFFFFRFFFFFLFRFFFFFFLFFFFFFFFLRRLFFFLLFRLRLRFFFRRLFLFRFLFFRLFFFRLFFRFFRFLFFFFFFRLRFFFFFFRLLRRLRFRFFFFFFFRFFFFFFFFLRFRLFFLRFRFLFLFFFFFRFFLLRFFRFRFLFLFFFFFFFFFFFLFFLLRFFLLRFLRFFFFFFLFFFFFFFFFFFLFFLRFFFFFFRFFFFLFFFRRFLFLRFFFFFRLFFLFFFFFFFFRFRLLFFFLRFFFFLFLLRFRFFFFFFFRFFFFFRLFRFRFFFLFLLFRRFFFRLLFFFRFFLF +RRLRRLRLLFFFFFFFRLLRFRLLFFFRFFFFFLLFRLFFRFFFFRLLFFFRLRFFFLRFFFRFRLFRFFFRLLFFFRLLRFRFLFFRFRRLFLFFFFFLF +LLFFFFFLFLFFFFLR +RRFFRLLFLFFFRFFFFFFLFFFFLFFFFFFFRRFFFFFLFFFRLLRFFLFFFLFFFFRRFLFRFRLFLFFFRFFLFLFFFFFFFRFRFLFFFFLFRFRFFFFFLFFFFFRFFFFFFFFLFRFFFRFFFLFFFLRFFLFFFRLLFFFLRRFLRFLRFFFFFFFRFRLFRLFFRLFFLRLFFFRLFFRLFRFFRLFLLRRFFLRFLFLRLFRFRLRFFFFLFRFLFRLFFRLRLFRFFRLFFFFLLRFFLRFLLRFFFFFLRFFFRFFFRRFLFFFFFLFFFLRFRFLFFFFRFFFLRFLFFFFLFFFLFRLRFRLRFLFFRFRFFFLFLFFFLRLFFFFRRFLFFFLRFFRFFFLFRLFLFRFLFLRFFFFFRFFFFRLRFFFLFRFRFFRFLRLRFFFFFFFRFFFFFFFFFFRFFFFRRFFLFLFFFFLFFFFFRFLFFFRFLFFLFFFRFFLRFFFLFFLFFFRRFLFLRFFFFRFFRFLFFFRLLFFRLFRFFFFLLRFFRFFRRLFFFFFFLFFFFFFLRFFFRLFFRLLFFRRFFFFLRLRFRFRLLFFFFFFFFLFFFLFFRFFFFFLFRFLRFRFLRLLFLRRFFFFFFLFFRFRLFFLLFLLFRFRLLRFFFFFFRFFFFFRRFFFFFFRFFRFFFLFFLFLFRRFLFLFFFRFFFFLFFFFRFFRLFFFFRFLRFLFFRFFFLFLRRLFFLFFFFLFFFRFFFFFFRFFLFFFRRFFLLFFRFLLFFRLFRFFFFFFRFLLRFRLFFFFFFFFFFFLFLFLRFRFRFFFLFRFLFFFFLFFFRFLFRFRRLFFLFRFLFFRFFLRFLFLFRFFRFFFFFFFLFLFRFRFFFFRLRLLFRLRRFLFFLRFFFLFFFRFFFFFFFLFFFFFFFLFFRFFRLFFLRFRFFFLRFRLFLFFFFFRRLFFLFLRFLFRRFFFLLFFFFRFFLRFFFRFLFRFFLFRFFFFFFFFFRFF +FLFRFFLRLRLFFFLFRFFFRFFLFFFRRFFFFFLRRLLFFRFFRLFFRLRRLFLFLFFFFFRFFLFRFFFRLLFLRFLFRFLFFFRFRFFFLFLFFRFFFFLFFRFFFLFRFFFRLLRFLRLFFLFFLLFR +FRLFRFFRFLFFRFRFRFLRRFFLFFLRFFFFRFRFRRFLLFFRFFRFFRFRFFFFFFFRFFFLRL +RLLRFFFLLLFLFFRLFFRLFRLLRFRLLFRLFRLFFFRLFLFFLFRLLFLFFRRFLLRFLRFFFFRFFFFFFLLRFRFFLLFRFFRFLFFRRLLFRFRFFFLRFFLFRFLFLRFLFLFRFRFLFLFFLLFLFRFRLRLRLFRFFFLFFFFFRFRFFFLFRRFFRF +RFRRRFFFFLFLRFRLRFFFLRFFFFLRFLFRLLLFLFFFRFFFFFLFFFFFLFFRFFFFFRFFFLFFFFFFLRFFLRFLLRFFFFFRFFRLFFFLFFRFLRFFFFFLRFRRRFFRLFFFFLFFFRFFLFFFFRFFLFFLRRLLFFRFFFRFFFFFFRLFFFLRFFFRRLFRFFLFRFFFLFLRFFLLLFLFFLFRFFFFFFFLRFLFFRRFFFRFRFFLRFFFRFFRLFFLRFFFFFFFFLFLRFFRFFFFFRRLFFFLRFLFLFFFRLFFRLFLFFRRFFFFRLLFFFRFFFFFFFFLLRFRLLRFRLRLFRLFFLFRRLFFFRFLFFFLFFLRRLFFFFRFFFRRFLFLFLLRFFLFFRFRFFFFFFFFLFFFLRFRFFFFFFFRFFFRFLFFFFLFFLRFLLRRFFFRLFLFRFLFLRFFFFRFLLRFFRFFLFRLFFFFFFLFRFRFLFFFFFLFRRFLFFFLFRFRFFFLFFFRLFFFFRFFFRRFFLFFLLRFFFFFRRLFFFFFFLFRLFLFFRFRLFRFFLFFFFFFFRLLFFFRLLFFFFFRFFFFFRLFFFFFRLFRRLFFFFLRFFFFFRRLRFRFFFFRFFLRFLFFFFLRFFFLFFFRFFFRRFRFFFRFLRFLRRFFFFLFFFFFFLFFFFFLFRFRFFFFLFFFFFFRFFRLLFRLFRLFRLRRLFFFLFLLFRRFLFRFFRLRFFFLRFFFFLFFFFFFFLRFFFRRLFRLRLFFRFLFRLLFRRFLFFLRFFFFLFRFFLRFLFLRFFFFFFFRRLFFFFFRFFFLFFFRFLFFFFFFFLFFFFFFFFFLFFFFFFFFFRLFFRLRFFRFFLFRLFFFRFFFFLFFFFFRFFLFRFRFRFFRLFRFLFFRFFFFRFFLFLFFFFRLLRFLFLFRRFFFFFFRFFFFFFFFRFFLFRFFRFFFFLRRFRFFFFFRFLFFLFFRFLLRLRRFFLFFFFFFLFRFLFFLFFRFRFRLFFFLRFFFRFFFFLFFRLFFFLFFRFRFFFFFLRRLFLFFFFRLRFFFFFLFFFFLRLFRRFFFFFRFRFLLFFFFRFFFLRLFFFFFFFFFFRRFLFLFRFLFLFFFFFFFRFFFFLRFFFFF +FFFLLRFFFFFRFLRFFFRFRFRLLFRLFRFFFFFFFFLFLFRRF diff --git a/06-tour-shapes/test.png b/06-tour-shapes/test.png index 6d2b553..59ee413 100644 Binary files a/06-tour-shapes/test.png and b/06-tour-shapes/test.png differ diff --git a/06-tour-shapes/tour-000-s0176-m001-walk.png b/06-tour-shapes/tour-000-s0176-m001-walk.png new file mode 100644 index 0000000..10cdb83 Binary files /dev/null and b/06-tour-shapes/tour-000-s0176-m001-walk.png differ diff --git a/06-tour-shapes/tour-001-s0108-m001-walk.png b/06-tour-shapes/tour-001-s0108-m001-walk.png new file mode 100644 index 0000000..bb6621f Binary files /dev/null and b/06-tour-shapes/tour-001-s0108-m001-walk.png differ diff --git a/06-tour-shapes/tour-002-s0218-m001-walk.png b/06-tour-shapes/tour-002-s0218-m001-walk.png new file mode 100644 index 0000000..b69da20 Binary files /dev/null and b/06-tour-shapes/tour-002-s0218-m001-walk.png differ diff --git a/06-tour-shapes/tour-003-s0182-m001-walk.png b/06-tour-shapes/tour-003-s0182-m001-walk.png new file mode 100644 index 0000000..7da526c Binary files /dev/null and b/06-tour-shapes/tour-003-s0182-m001-walk.png differ diff --git a/06-tour-shapes/tour-004-s0184-m001-walk.png b/06-tour-shapes/tour-004-s0184-m001-walk.png new file mode 100644 index 0000000..648d91f Binary files /dev/null and b/06-tour-shapes/tour-004-s0184-m001-walk.png differ diff --git a/06-tour-shapes/tour-005-s0236-m001-walk.png b/06-tour-shapes/tour-005-s0236-m001-walk.png new file mode 100644 index 0000000..f47f00f Binary files /dev/null and b/06-tour-shapes/tour-005-s0236-m001-walk.png differ diff --git a/06-tour-shapes/tour-006-s0128-m003-walk.png b/06-tour-shapes/tour-006-s0128-m003-walk.png new file mode 100644 index 0000000..cd39acc Binary files /dev/null and b/06-tour-shapes/tour-006-s0128-m003-walk.png differ diff --git a/06-tour-shapes/tour-007-s0295-m011-walk.png b/06-tour-shapes/tour-007-s0295-m011-walk.png new file mode 100644 index 0000000..8678a00 Binary files /dev/null and b/06-tour-shapes/tour-007-s0295-m011-walk.png differ diff --git a/06-tour-shapes/tour-008-s0360-m008-walk.png b/06-tour-shapes/tour-008-s0360-m008-walk.png new file mode 100644 index 0000000..d3a0e26 Binary files /dev/null and b/06-tour-shapes/tour-008-s0360-m008-walk.png differ diff --git a/06-tour-shapes/tour-009-s0258-m001-walk.png b/06-tour-shapes/tour-009-s0258-m001-walk.png new file mode 100644 index 0000000..afeb9ef Binary files /dev/null and b/06-tour-shapes/tour-009-s0258-m001-walk.png differ diff --git a/06-tour-shapes/tour-010-s0124-m006-walk.png b/06-tour-shapes/tour-010-s0124-m006-walk.png new file mode 100644 index 0000000..ec54cff Binary files /dev/null and b/06-tour-shapes/tour-010-s0124-m006-walk.png differ diff --git a/06-tour-shapes/tour-011-s0226-m001-walk.png b/06-tour-shapes/tour-011-s0226-m001-walk.png new file mode 100644 index 0000000..7ed7a90 Binary files /dev/null and b/06-tour-shapes/tour-011-s0226-m001-walk.png differ diff --git a/06-tour-shapes/tour-012-s0212-m001-walk.png b/06-tour-shapes/tour-012-s0212-m001-walk.png new file mode 100644 index 0000000..0afdcb3 Binary files /dev/null and b/06-tour-shapes/tour-012-s0212-m001-walk.png differ diff --git a/06-tour-shapes/tour-013-s0168-m001-walk.png b/06-tour-shapes/tour-013-s0168-m001-walk.png new file mode 100644 index 0000000..20fb134 Binary files /dev/null and b/06-tour-shapes/tour-013-s0168-m001-walk.png differ diff --git a/06-tour-shapes/tour-014-s0340-m005-walk.png b/06-tour-shapes/tour-014-s0340-m005-walk.png new file mode 100644 index 0000000..b312efc Binary files /dev/null and b/06-tour-shapes/tour-014-s0340-m005-walk.png differ diff --git a/06-tour-shapes/tour-015-s0308-m001-walk.png b/06-tour-shapes/tour-015-s0308-m001-walk.png new file mode 100644 index 0000000..7acee31 Binary files /dev/null and b/06-tour-shapes/tour-015-s0308-m001-walk.png differ diff --git a/06-tour-shapes/tour-016-s0218-m006-walk.png b/06-tour-shapes/tour-016-s0218-m006-walk.png new file mode 100644 index 0000000..d4e9c37 Binary files /dev/null and b/06-tour-shapes/tour-016-s0218-m006-walk.png differ diff --git a/06-tour-shapes/tour-017-s0203-m001-walk.png b/06-tour-shapes/tour-017-s0203-m001-walk.png new file mode 100644 index 0000000..add6e84 Binary files /dev/null and b/06-tour-shapes/tour-017-s0203-m001-walk.png differ diff --git a/06-tour-shapes/tour-018-s0037-m003-walk.png b/06-tour-shapes/tour-018-s0037-m003-walk.png new file mode 100644 index 0000000..1e1f23c Binary files /dev/null and b/06-tour-shapes/tour-018-s0037-m003-walk.png differ diff --git a/06-tour-shapes/tour-019-s0216-m006-walk.png b/06-tour-shapes/tour-019-s0216-m006-walk.png new file mode 100644 index 0000000..6ca6763 Binary files /dev/null and b/06-tour-shapes/tour-019-s0216-m006-walk.png differ diff --git a/06-tour-shapes/tour-020-s0084-m005-walk.png b/06-tour-shapes/tour-020-s0084-m005-walk.png new file mode 100644 index 0000000..19cc061 Binary files /dev/null and b/06-tour-shapes/tour-020-s0084-m005-walk.png differ diff --git a/06-tour-shapes/tour-021-s0090-m007-walk.png b/06-tour-shapes/tour-021-s0090-m007-walk.png new file mode 100644 index 0000000..0b25fcc Binary files /dev/null and b/06-tour-shapes/tour-021-s0090-m007-walk.png differ diff --git a/06-tour-shapes/tour-022-s0254-m001-walk.png b/06-tour-shapes/tour-022-s0254-m001-walk.png new file mode 100644 index 0000000..a0e1118 Binary files /dev/null and b/06-tour-shapes/tour-022-s0254-m001-walk.png differ diff --git a/06-tour-shapes/tour-023-s0283-m004-walk.png b/06-tour-shapes/tour-023-s0283-m004-walk.png new file mode 100644 index 0000000..ab919eb Binary files /dev/null and b/06-tour-shapes/tour-023-s0283-m004-walk.png differ diff --git a/06-tour-shapes/tour-024-s0269-m006-walk.png b/06-tour-shapes/tour-024-s0269-m006-walk.png new file mode 100644 index 0000000..96386e8 Binary files /dev/null and b/06-tour-shapes/tour-024-s0269-m006-walk.png differ diff --git a/06-tour-shapes/tour-025-s0205-m005-walk.png b/06-tour-shapes/tour-025-s0205-m005-walk.png new file mode 100644 index 0000000..497eb22 Binary files /dev/null and b/06-tour-shapes/tour-025-s0205-m005-walk.png differ diff --git a/06-tour-shapes/tour-026-s0270-m001-walk.png b/06-tour-shapes/tour-026-s0270-m001-walk.png new file mode 100644 index 0000000..b29f520 Binary files /dev/null and b/06-tour-shapes/tour-026-s0270-m001-walk.png differ diff --git a/06-tour-shapes/tour-027-s0142-m004-walk.png b/06-tour-shapes/tour-027-s0142-m004-walk.png new file mode 100644 index 0000000..6f1f3bf Binary files /dev/null and b/06-tour-shapes/tour-027-s0142-m004-walk.png differ diff --git a/06-tour-shapes/tour-028-s0284-m001-walk.png b/06-tour-shapes/tour-028-s0284-m001-walk.png new file mode 100644 index 0000000..203a427 Binary files /dev/null and b/06-tour-shapes/tour-028-s0284-m001-walk.png differ diff --git a/06-tour-shapes/tour-029-s0276-m001-walk.png b/06-tour-shapes/tour-029-s0276-m001-walk.png new file mode 100644 index 0000000..561dcbc Binary files /dev/null and b/06-tour-shapes/tour-029-s0276-m001-walk.png differ diff --git a/06-tour-shapes/tour-030-s0168-m001-walk.png b/06-tour-shapes/tour-030-s0168-m001-walk.png new file mode 100644 index 0000000..2774c29 Binary files /dev/null and b/06-tour-shapes/tour-030-s0168-m001-walk.png differ diff --git a/06-tour-shapes/tour-031-s0328-m001-walk.png b/06-tour-shapes/tour-031-s0328-m001-walk.png new file mode 100644 index 0000000..eb65aae Binary files /dev/null and b/06-tour-shapes/tour-031-s0328-m001-walk.png differ diff --git a/06-tour-shapes/tour-032-s0225-m004-walk.png b/06-tour-shapes/tour-032-s0225-m004-walk.png new file mode 100644 index 0000000..ee3709d Binary files /dev/null and b/06-tour-shapes/tour-032-s0225-m004-walk.png differ diff --git a/06-tour-shapes/tour-033-s0050-m001-walk.png b/06-tour-shapes/tour-033-s0050-m001-walk.png new file mode 100644 index 0000000..d288c9a Binary files /dev/null and b/06-tour-shapes/tour-033-s0050-m001-walk.png differ diff --git a/06-tour-shapes/tour-034-s0250-m017-walk.png b/06-tour-shapes/tour-034-s0250-m017-walk.png new file mode 100644 index 0000000..7880d30 Binary files /dev/null and b/06-tour-shapes/tour-034-s0250-m017-walk.png differ diff --git a/06-tour-shapes/tour-035-s0278-m001-walk.png b/06-tour-shapes/tour-035-s0278-m001-walk.png new file mode 100644 index 0000000..baa2ce9 Binary files /dev/null and b/06-tour-shapes/tour-035-s0278-m001-walk.png differ diff --git a/06-tour-shapes/tour-036-s0161-m015-walk.png b/06-tour-shapes/tour-036-s0161-m015-walk.png new file mode 100644 index 0000000..d32b9f5 Binary files /dev/null and b/06-tour-shapes/tour-036-s0161-m015-walk.png differ diff --git a/06-tour-shapes/tour-037-s0137-m006-walk.png b/06-tour-shapes/tour-037-s0137-m006-walk.png new file mode 100644 index 0000000..a03702d Binary files /dev/null and b/06-tour-shapes/tour-037-s0137-m006-walk.png differ diff --git a/06-tour-shapes/tour-038-s0166-m008-walk.png b/06-tour-shapes/tour-038-s0166-m008-walk.png new file mode 100644 index 0000000..7780e05 Binary files /dev/null and b/06-tour-shapes/tour-038-s0166-m008-walk.png differ diff --git a/06-tour-shapes/tour-039-s0326-m001-walk.png b/06-tour-shapes/tour-039-s0326-m001-walk.png new file mode 100644 index 0000000..ab5f52d Binary files /dev/null and b/06-tour-shapes/tour-039-s0326-m001-walk.png differ diff --git a/06-tour-shapes/tour-040-s0294-m001-walk.png b/06-tour-shapes/tour-040-s0294-m001-walk.png new file mode 100644 index 0000000..6470a76 Binary files /dev/null and b/06-tour-shapes/tour-040-s0294-m001-walk.png differ diff --git a/06-tour-shapes/tour-041-s0290-m017-walk.png b/06-tour-shapes/tour-041-s0290-m017-walk.png new file mode 100644 index 0000000..b9bf04a Binary files /dev/null and b/06-tour-shapes/tour-041-s0290-m017-walk.png differ diff --git a/06-tour-shapes/tour-042-s0356-m013-walk.png b/06-tour-shapes/tour-042-s0356-m013-walk.png new file mode 100644 index 0000000..2ff1586 Binary files /dev/null and b/06-tour-shapes/tour-042-s0356-m013-walk.png differ diff --git a/06-tour-shapes/tour-043-s0165-m007-walk.png b/06-tour-shapes/tour-043-s0165-m007-walk.png new file mode 100644 index 0000000..5ba7b10 Binary files /dev/null and b/06-tour-shapes/tour-043-s0165-m007-walk.png differ diff --git a/06-tour-shapes/tour-044-s0074-m001-walk.png b/06-tour-shapes/tour-044-s0074-m001-walk.png new file mode 100644 index 0000000..e32cea8 Binary files /dev/null and b/06-tour-shapes/tour-044-s0074-m001-walk.png differ diff --git a/06-tour-shapes/tour-045-s0214-m003-walk.png b/06-tour-shapes/tour-045-s0214-m003-walk.png new file mode 100644 index 0000000..5efa3c8 Binary files /dev/null and b/06-tour-shapes/tour-045-s0214-m003-walk.png differ diff --git a/06-tour-shapes/tour-046-s0257-m001-walk.png b/06-tour-shapes/tour-046-s0257-m001-walk.png new file mode 100644 index 0000000..01423f0 Binary files /dev/null and b/06-tour-shapes/tour-046-s0257-m001-walk.png differ diff --git a/06-tour-shapes/tour-047-s0146-m001-walk.png b/06-tour-shapes/tour-047-s0146-m001-walk.png new file mode 100644 index 0000000..8ad6049 Binary files /dev/null and b/06-tour-shapes/tour-047-s0146-m001-walk.png differ diff --git a/06-tour-shapes/tour-048-s0211-m004-walk.png b/06-tour-shapes/tour-048-s0211-m004-walk.png new file mode 100644 index 0000000..594fb6b Binary files /dev/null and b/06-tour-shapes/tour-048-s0211-m004-walk.png differ diff --git a/06-tour-shapes/tour-049-s0228-m001-walk.png b/06-tour-shapes/tour-049-s0228-m001-walk.png new file mode 100644 index 0000000..05e14a0 Binary files /dev/null and b/06-tour-shapes/tour-049-s0228-m001-walk.png differ diff --git a/06-tour-shapes/tour-050-s0166-m004-walk.png b/06-tour-shapes/tour-050-s0166-m004-walk.png new file mode 100644 index 0000000..0e33132 Binary files /dev/null and b/06-tour-shapes/tour-050-s0166-m004-walk.png differ diff --git a/06-tour-shapes/tour-051-s0103-m001-walk.png b/06-tour-shapes/tour-051-s0103-m001-walk.png new file mode 100644 index 0000000..7189ca7 Binary files /dev/null and b/06-tour-shapes/tour-051-s0103-m001-walk.png differ diff --git a/06-tour-shapes/tour-052-s0200-m001-walk.png b/06-tour-shapes/tour-052-s0200-m001-walk.png new file mode 100644 index 0000000..afecf0a Binary files /dev/null and b/06-tour-shapes/tour-052-s0200-m001-walk.png differ diff --git a/06-tour-shapes/tour-053-s0192-m001-walk.png b/06-tour-shapes/tour-053-s0192-m001-walk.png new file mode 100644 index 0000000..0a924d7 Binary files /dev/null and b/06-tour-shapes/tour-053-s0192-m001-walk.png differ diff --git a/06-tour-shapes/tour-054-s0102-m001-walk.png b/06-tour-shapes/tour-054-s0102-m001-walk.png new file mode 100644 index 0000000..6008145 Binary files /dev/null and b/06-tour-shapes/tour-054-s0102-m001-walk.png differ diff --git a/06-tour-shapes/tour-055-s0175-m015-walk.png b/06-tour-shapes/tour-055-s0175-m015-walk.png new file mode 100644 index 0000000..f55519a Binary files /dev/null and b/06-tour-shapes/tour-055-s0175-m015-walk.png differ diff --git a/06-tour-shapes/tour-056-s0318-m001-walk.png b/06-tour-shapes/tour-056-s0318-m001-walk.png new file mode 100644 index 0000000..9ca719c Binary files /dev/null and b/06-tour-shapes/tour-056-s0318-m001-walk.png differ diff --git a/06-tour-shapes/tour-057-s0287-m008-walk.png b/06-tour-shapes/tour-057-s0287-m008-walk.png new file mode 100644 index 0000000..087df36 Binary files /dev/null and b/06-tour-shapes/tour-057-s0287-m008-walk.png differ diff --git a/06-tour-shapes/tour-058-s0156-m003-walk.png b/06-tour-shapes/tour-058-s0156-m003-walk.png new file mode 100644 index 0000000..51a35fb Binary files /dev/null and b/06-tour-shapes/tour-058-s0156-m003-walk.png differ diff --git a/06-tour-shapes/tour-059-s0110-m014-walk.png b/06-tour-shapes/tour-059-s0110-m014-walk.png new file mode 100644 index 0000000..716544c Binary files /dev/null and b/06-tour-shapes/tour-059-s0110-m014-walk.png differ diff --git a/06-tour-shapes/tour-060-s0421-m004-walk.png b/06-tour-shapes/tour-060-s0421-m004-walk.png new file mode 100644 index 0000000..944a917 Binary files /dev/null and b/06-tour-shapes/tour-060-s0421-m004-walk.png differ diff --git a/06-tour-shapes/tour-061-s0182-m013-walk.png b/06-tour-shapes/tour-061-s0182-m013-walk.png new file mode 100644 index 0000000..61638f3 Binary files /dev/null and b/06-tour-shapes/tour-061-s0182-m013-walk.png differ diff --git a/06-tour-shapes/tour-062-s0233-m005-walk.png b/06-tour-shapes/tour-062-s0233-m005-walk.png new file mode 100644 index 0000000..4c472b0 Binary files /dev/null and b/06-tour-shapes/tour-062-s0233-m005-walk.png differ diff --git a/06-tour-shapes/tour-063-s0164-m008-walk.png b/06-tour-shapes/tour-063-s0164-m008-walk.png new file mode 100644 index 0000000..4327539 Binary files /dev/null and b/06-tour-shapes/tour-063-s0164-m008-walk.png differ diff --git a/06-tour-shapes/tour-064-s0070-m001-walk.png b/06-tour-shapes/tour-064-s0070-m001-walk.png new file mode 100644 index 0000000..9c3346d Binary files /dev/null and b/06-tour-shapes/tour-064-s0070-m001-walk.png differ diff --git a/06-tour-shapes/tour-065-s0236-m001-walk.png b/06-tour-shapes/tour-065-s0236-m001-walk.png new file mode 100644 index 0000000..c77bdc0 Binary files /dev/null and b/06-tour-shapes/tour-065-s0236-m001-walk.png differ diff --git a/06-tour-shapes/tour-066-s0150-m013-walk.png b/06-tour-shapes/tour-066-s0150-m013-walk.png new file mode 100644 index 0000000..5b642de Binary files /dev/null and b/06-tour-shapes/tour-066-s0150-m013-walk.png differ diff --git a/06-tour-shapes/tour-067-s0205-m001-walk.png b/06-tour-shapes/tour-067-s0205-m001-walk.png new file mode 100644 index 0000000..b1fc563 Binary files /dev/null and b/06-tour-shapes/tour-067-s0205-m001-walk.png differ diff --git a/06-tour-shapes/tour-068-s0164-m012-walk.png b/06-tour-shapes/tour-068-s0164-m012-walk.png new file mode 100644 index 0000000..e3ade95 Binary files /dev/null and b/06-tour-shapes/tour-068-s0164-m012-walk.png differ diff --git a/06-tour-shapes/tour-069-s0310-m001-walk.png b/06-tour-shapes/tour-069-s0310-m001-walk.png new file mode 100644 index 0000000..6ed41c1 Binary files /dev/null and b/06-tour-shapes/tour-069-s0310-m001-walk.png differ diff --git a/06-tour-shapes/tour-070-s0120-m001-walk.png b/06-tour-shapes/tour-070-s0120-m001-walk.png new file mode 100644 index 0000000..8a9a426 Binary files /dev/null and b/06-tour-shapes/tour-070-s0120-m001-walk.png differ diff --git a/06-tour-shapes/tour-071-s0150-m001-walk.png b/06-tour-shapes/tour-071-s0150-m001-walk.png new file mode 100644 index 0000000..8158b1f Binary files /dev/null and b/06-tour-shapes/tour-071-s0150-m001-walk.png differ diff --git a/06-tour-shapes/tour-072-s0273-m001-walk.png b/06-tour-shapes/tour-072-s0273-m001-walk.png new file mode 100644 index 0000000..720dcc5 Binary files /dev/null and b/06-tour-shapes/tour-072-s0273-m001-walk.png differ diff --git a/06-tour-shapes/tour-073-s0074-m001-walk.png b/06-tour-shapes/tour-073-s0074-m001-walk.png new file mode 100644 index 0000000..de281c3 Binary files /dev/null and b/06-tour-shapes/tour-073-s0074-m001-walk.png differ diff --git a/06-tour-shapes/tour-074-s0200-m001-walk.png b/06-tour-shapes/tour-074-s0200-m001-walk.png new file mode 100644 index 0000000..7c9a519 Binary files /dev/null and b/06-tour-shapes/tour-074-s0200-m001-walk.png differ diff --git a/06-tour-shapes/tour-075-s0218-m001-walk.png b/06-tour-shapes/tour-075-s0218-m001-walk.png new file mode 100644 index 0000000..c941120 Binary files /dev/null and b/06-tour-shapes/tour-075-s0218-m001-walk.png differ diff --git a/06-tour-shapes/tour-076-s0078-m001-walk.png b/06-tour-shapes/tour-076-s0078-m001-walk.png new file mode 100644 index 0000000..1beece8 Binary files /dev/null and b/06-tour-shapes/tour-076-s0078-m001-walk.png differ diff --git a/06-tour-shapes/tour-077-s0128-m001-walk.png b/06-tour-shapes/tour-077-s0128-m001-walk.png new file mode 100644 index 0000000..10789f6 Binary files /dev/null and b/06-tour-shapes/tour-077-s0128-m001-walk.png differ diff --git a/06-tour-shapes/tour-078-s0154-m004-walk.png b/06-tour-shapes/tour-078-s0154-m004-walk.png new file mode 100644 index 0000000..61b4adb Binary files /dev/null and b/06-tour-shapes/tour-078-s0154-m004-walk.png differ diff --git a/06-tour-shapes/tour-079-s0170-m001-walk.png b/06-tour-shapes/tour-079-s0170-m001-walk.png new file mode 100644 index 0000000..5f4aca4 Binary files /dev/null and b/06-tour-shapes/tour-079-s0170-m001-walk.png differ diff --git a/06-tour-shapes/tour-080-s0256-m001-walk.png b/06-tour-shapes/tour-080-s0256-m001-walk.png new file mode 100644 index 0000000..a806295 Binary files /dev/null and b/06-tour-shapes/tour-080-s0256-m001-walk.png differ diff --git a/06-tour-shapes/tour-081-s0314-m001-walk.png b/06-tour-shapes/tour-081-s0314-m001-walk.png new file mode 100644 index 0000000..96087f8 Binary files /dev/null and b/06-tour-shapes/tour-081-s0314-m001-walk.png differ diff --git a/06-tour-shapes/tour-082-s0246-m012-walk.png b/06-tour-shapes/tour-082-s0246-m012-walk.png new file mode 100644 index 0000000..10020a8 Binary files /dev/null and b/06-tour-shapes/tour-082-s0246-m012-walk.png differ diff --git a/06-tour-shapes/tour-083-s0252-m001-walk.png b/06-tour-shapes/tour-083-s0252-m001-walk.png new file mode 100644 index 0000000..6146245 Binary files /dev/null and b/06-tour-shapes/tour-083-s0252-m001-walk.png differ diff --git a/06-tour-shapes/tour-084-s0100-m001-walk.png b/06-tour-shapes/tour-084-s0100-m001-walk.png new file mode 100644 index 0000000..700874b Binary files /dev/null and b/06-tour-shapes/tour-084-s0100-m001-walk.png differ diff --git a/06-tour-shapes/tour-085-s0190-m008-walk.png b/06-tour-shapes/tour-085-s0190-m008-walk.png new file mode 100644 index 0000000..d91eca8 Binary files /dev/null and b/06-tour-shapes/tour-085-s0190-m008-walk.png differ diff --git a/06-tour-shapes/tour-086-s0288-m001-walk.png b/06-tour-shapes/tour-086-s0288-m001-walk.png new file mode 100644 index 0000000..15b6cb9 Binary files /dev/null and b/06-tour-shapes/tour-086-s0288-m001-walk.png differ diff --git a/06-tour-shapes/tour-087-s0206-m001-walk.png b/06-tour-shapes/tour-087-s0206-m001-walk.png new file mode 100644 index 0000000..702acae Binary files /dev/null and b/06-tour-shapes/tour-087-s0206-m001-walk.png differ diff --git a/06-tour-shapes/tour-088-s0153-m001-walk.png b/06-tour-shapes/tour-088-s0153-m001-walk.png new file mode 100644 index 0000000..5f56590 Binary files /dev/null and b/06-tour-shapes/tour-088-s0153-m001-walk.png differ diff --git a/06-tour-shapes/tour-089-s0118-m001-walk.png b/06-tour-shapes/tour-089-s0118-m001-walk.png new file mode 100644 index 0000000..af38308 Binary files /dev/null and b/06-tour-shapes/tour-089-s0118-m001-walk.png differ diff --git a/06-tour-shapes/tour-090-s0096-m001-walk.png b/06-tour-shapes/tour-090-s0096-m001-walk.png new file mode 100644 index 0000000..32d22d8 Binary files /dev/null and b/06-tour-shapes/tour-090-s0096-m001-walk.png differ diff --git a/06-tour-shapes/tour-091-s0162-m003-walk.png b/06-tour-shapes/tour-091-s0162-m003-walk.png new file mode 100644 index 0000000..9b35619 Binary files /dev/null and b/06-tour-shapes/tour-091-s0162-m003-walk.png differ diff --git a/06-tour-shapes/tour-092-s0152-m001-walk.png b/06-tour-shapes/tour-092-s0152-m001-walk.png new file mode 100644 index 0000000..59e0fe9 Binary files /dev/null and b/06-tour-shapes/tour-092-s0152-m001-walk.png differ diff --git a/06-tour-shapes/tour-093-s0224-m001-walk.png b/06-tour-shapes/tour-093-s0224-m001-walk.png new file mode 100644 index 0000000..f6696f9 Binary files /dev/null and b/06-tour-shapes/tour-093-s0224-m001-walk.png differ diff --git a/06-tour-shapes/tour-094-s0098-m004-walk.png b/06-tour-shapes/tour-094-s0098-m004-walk.png new file mode 100644 index 0000000..dcd81ce Binary files /dev/null and b/06-tour-shapes/tour-094-s0098-m004-walk.png differ diff --git a/06-tour-shapes/tour-095-s0130-m010-walk.png b/06-tour-shapes/tour-095-s0130-m010-walk.png new file mode 100644 index 0000000..ab5756c Binary files /dev/null and b/06-tour-shapes/tour-095-s0130-m010-walk.png differ diff --git a/06-tour-shapes/tour-096-s0034-m001-walk.png b/06-tour-shapes/tour-096-s0034-m001-walk.png new file mode 100644 index 0000000..9f0d0ce Binary files /dev/null and b/06-tour-shapes/tour-096-s0034-m001-walk.png differ diff --git a/06-tour-shapes/tour-097-s0336-m002-walk.png b/06-tour-shapes/tour-097-s0336-m002-walk.png new file mode 100644 index 0000000..2f28f5b Binary files /dev/null and b/06-tour-shapes/tour-097-s0336-m002-walk.png differ diff --git a/06-tour-shapes/tour-098-s0128-m011-walk.png b/06-tour-shapes/tour-098-s0128-m011-walk.png new file mode 100644 index 0000000..addeb49 Binary files /dev/null and b/06-tour-shapes/tour-098-s0128-m011-walk.png differ diff --git a/06-tour-shapes/tour-099-s0045-m002-walk.png b/06-tour-shapes/tour-099-s0045-m002-walk.png new file mode 100644 index 0000000..e573cb9 Binary files /dev/null and b/06-tour-shapes/tour-099-s0045-m002-walk.png differ diff --git a/06-tour-shapes/tour-100-s0340-m010-walk.png b/06-tour-shapes/tour-100-s0340-m010-walk.png new file mode 100644 index 0000000..70758ec Binary files /dev/null and b/06-tour-shapes/tour-100-s0340-m010-walk.png differ diff --git a/06-tour-shapes/tour-101-s0315-m001-walk.png b/06-tour-shapes/tour-101-s0315-m001-walk.png new file mode 100644 index 0000000..302c1d3 Binary files /dev/null and b/06-tour-shapes/tour-101-s0315-m001-walk.png differ diff --git a/06-tour-shapes/tour-102-s0410-m001-walk.png b/06-tour-shapes/tour-102-s0410-m001-walk.png new file mode 100644 index 0000000..5c3030b Binary files /dev/null and b/06-tour-shapes/tour-102-s0410-m001-walk.png differ diff --git a/06-tour-shapes/tour-103-s0303-m001-walk.png b/06-tour-shapes/tour-103-s0303-m001-walk.png new file mode 100644 index 0000000..f904959 Binary files /dev/null and b/06-tour-shapes/tour-103-s0303-m001-walk.png differ diff --git a/06-tour-shapes/tour-104-s0239-m012-walk.png b/06-tour-shapes/tour-104-s0239-m012-walk.png new file mode 100644 index 0000000..13154fd Binary files /dev/null and b/06-tour-shapes/tour-104-s0239-m012-walk.png differ diff --git a/06-tour-shapes/tour-105-s0176-m003-walk.png b/06-tour-shapes/tour-105-s0176-m003-walk.png new file mode 100644 index 0000000..31f94aa Binary files /dev/null and b/06-tour-shapes/tour-105-s0176-m003-walk.png differ diff --git a/06-tour-shapes/tour-106-s0287-m014-walk.png b/06-tour-shapes/tour-106-s0287-m014-walk.png new file mode 100644 index 0000000..328b944 Binary files /dev/null and b/06-tour-shapes/tour-106-s0287-m014-walk.png differ diff --git a/06-tour-shapes/tour-107-s0310-m001-walk.png b/06-tour-shapes/tour-107-s0310-m001-walk.png new file mode 100644 index 0000000..8b6b134 Binary files /dev/null and b/06-tour-shapes/tour-107-s0310-m001-walk.png differ diff --git a/06-tour-shapes/tour-108-s0286-m011-walk.png b/06-tour-shapes/tour-108-s0286-m011-walk.png new file mode 100644 index 0000000..ae277ec Binary files /dev/null and b/06-tour-shapes/tour-108-s0286-m011-walk.png differ diff --git a/06-tour-shapes/tour-109-s0046-m003-walk.png b/06-tour-shapes/tour-109-s0046-m003-walk.png new file mode 100644 index 0000000..608efc9 Binary files /dev/null and b/06-tour-shapes/tour-109-s0046-m003-walk.png differ diff --git a/06-tour-shapes/tour-110-s0170-m008-walk.png b/06-tour-shapes/tour-110-s0170-m008-walk.png new file mode 100644 index 0000000..d960724 Binary files /dev/null and b/06-tour-shapes/tour-110-s0170-m008-walk.png differ diff --git a/06-tour-shapes/tour-111-s0140-m001-walk.png b/06-tour-shapes/tour-111-s0140-m001-walk.png new file mode 100644 index 0000000..67b425f Binary files /dev/null and b/06-tour-shapes/tour-111-s0140-m001-walk.png differ diff --git a/06-tour-shapes/tour-112-s0158-m003-walk.png b/06-tour-shapes/tour-112-s0158-m003-walk.png new file mode 100644 index 0000000..d9fefdf Binary files /dev/null and b/06-tour-shapes/tour-112-s0158-m003-walk.png differ diff --git a/06-tour-shapes/tour-113-s0113-m001-walk.png b/06-tour-shapes/tour-113-s0113-m001-walk.png new file mode 100644 index 0000000..d5b5031 Binary files /dev/null and b/06-tour-shapes/tour-113-s0113-m001-walk.png differ diff --git a/06-tour-shapes/tour-114-s0152-m014-walk.png b/06-tour-shapes/tour-114-s0152-m014-walk.png new file mode 100644 index 0000000..efc965a Binary files /dev/null and b/06-tour-shapes/tour-114-s0152-m014-walk.png differ diff --git a/06-tour-shapes/tour-115-s0267-m001-walk.png b/06-tour-shapes/tour-115-s0267-m001-walk.png new file mode 100644 index 0000000..7ba70e5 Binary files /dev/null and b/06-tour-shapes/tour-115-s0267-m001-walk.png differ diff --git a/06-tour-shapes/tour-116-s0242-m005-walk.png b/06-tour-shapes/tour-116-s0242-m005-walk.png new file mode 100644 index 0000000..db148d3 Binary files /dev/null and b/06-tour-shapes/tour-116-s0242-m005-walk.png differ diff --git a/06-tour-shapes/tour-117-s0338-m001-walk.png b/06-tour-shapes/tour-117-s0338-m001-walk.png new file mode 100644 index 0000000..6465ccb Binary files /dev/null and b/06-tour-shapes/tour-117-s0338-m001-walk.png differ diff --git a/06-tour-shapes/tour-118-s0156-m001-walk.png b/06-tour-shapes/tour-118-s0156-m001-walk.png new file mode 100644 index 0000000..3cf795c Binary files /dev/null and b/06-tour-shapes/tour-118-s0156-m001-walk.png differ diff --git a/06-tour-shapes/tour-119-s0152-m001-walk.png b/06-tour-shapes/tour-119-s0152-m001-walk.png new file mode 100644 index 0000000..3f72484 Binary files /dev/null and b/06-tour-shapes/tour-119-s0152-m001-walk.png differ diff --git a/06-tour-shapes/tour-120-s0224-m001-walk.png b/06-tour-shapes/tour-120-s0224-m001-walk.png new file mode 100644 index 0000000..2bcba81 Binary files /dev/null and b/06-tour-shapes/tour-120-s0224-m001-walk.png differ diff --git a/06-tour-shapes/tour-121-s0050-m001-walk.png b/06-tour-shapes/tour-121-s0050-m001-walk.png new file mode 100644 index 0000000..79f117b Binary files /dev/null and b/06-tour-shapes/tour-121-s0050-m001-walk.png differ diff --git a/06-tour-shapes/tour-122-s0165-m009-walk.png b/06-tour-shapes/tour-122-s0165-m009-walk.png new file mode 100644 index 0000000..a842706 Binary files /dev/null and b/06-tour-shapes/tour-122-s0165-m009-walk.png differ diff --git a/06-tour-shapes/tour-123-s0144-m001-walk.png b/06-tour-shapes/tour-123-s0144-m001-walk.png new file mode 100644 index 0000000..bfd44f6 Binary files /dev/null and b/06-tour-shapes/tour-123-s0144-m001-walk.png differ diff --git a/06-tour-shapes/tour-124-s0243-m001-walk.png b/06-tour-shapes/tour-124-s0243-m001-walk.png new file mode 100644 index 0000000..a31110d Binary files /dev/null and b/06-tour-shapes/tour-124-s0243-m001-walk.png differ diff --git a/06-tour-shapes/tour-125-s0250-m016-walk.png b/06-tour-shapes/tour-125-s0250-m016-walk.png new file mode 100644 index 0000000..1edc7f7 Binary files /dev/null and b/06-tour-shapes/tour-125-s0250-m016-walk.png differ diff --git a/06-tour-shapes/tour-126-s0348-m001-walk.png b/06-tour-shapes/tour-126-s0348-m001-walk.png new file mode 100644 index 0000000..1867974 Binary files /dev/null and b/06-tour-shapes/tour-126-s0348-m001-walk.png differ diff --git a/06-tour-shapes/tour-127-s0126-m001-walk.png b/06-tour-shapes/tour-127-s0126-m001-walk.png new file mode 100644 index 0000000..826efdc Binary files /dev/null and b/06-tour-shapes/tour-127-s0126-m001-walk.png differ diff --git a/06-tour-shapes/tour-128-s0058-m001-walk.png b/06-tour-shapes/tour-128-s0058-m001-walk.png new file mode 100644 index 0000000..d772561 Binary files /dev/null and b/06-tour-shapes/tour-128-s0058-m001-walk.png differ diff --git a/06-tour-shapes/tour-129-s0101-m001-walk.png b/06-tour-shapes/tour-129-s0101-m001-walk.png new file mode 100644 index 0000000..6c219f2 Binary files /dev/null and b/06-tour-shapes/tour-129-s0101-m001-walk.png differ diff --git a/06-tour-shapes/tour-130-s0200-m001-walk.png b/06-tour-shapes/tour-130-s0200-m001-walk.png new file mode 100644 index 0000000..e0e92a6 Binary files /dev/null and b/06-tour-shapes/tour-130-s0200-m001-walk.png differ diff --git a/06-tour-shapes/tour-131-s0169-m001-walk.png b/06-tour-shapes/tour-131-s0169-m001-walk.png new file mode 100644 index 0000000..c55755c Binary files /dev/null and b/06-tour-shapes/tour-131-s0169-m001-walk.png differ diff --git a/06-tour-shapes/tour-132-s0057-m009-walk.png b/06-tour-shapes/tour-132-s0057-m009-walk.png new file mode 100644 index 0000000..9ba9898 Binary files /dev/null and b/06-tour-shapes/tour-132-s0057-m009-walk.png differ diff --git a/06-tour-shapes/tour-133-s0240-m001-walk.png b/06-tour-shapes/tour-133-s0240-m001-walk.png new file mode 100644 index 0000000..17580d3 Binary files /dev/null and b/06-tour-shapes/tour-133-s0240-m001-walk.png differ diff --git a/06-tour-shapes/tour-134-s0265-m010-walk.png b/06-tour-shapes/tour-134-s0265-m010-walk.png new file mode 100644 index 0000000..40406e3 Binary files /dev/null and b/06-tour-shapes/tour-134-s0265-m010-walk.png differ diff --git a/06-tour-shapes/tour-135-s0161-m001-walk.png b/06-tour-shapes/tour-135-s0161-m001-walk.png new file mode 100644 index 0000000..3fe796a Binary files /dev/null and b/06-tour-shapes/tour-135-s0161-m001-walk.png differ diff --git a/06-tour-shapes/tour-136-s0159-m002-walk.png b/06-tour-shapes/tour-136-s0159-m002-walk.png new file mode 100644 index 0000000..8d4655a Binary files /dev/null and b/06-tour-shapes/tour-136-s0159-m002-walk.png differ diff --git a/06-tour-shapes/tour-137-s0167-m005-walk.png b/06-tour-shapes/tour-137-s0167-m005-walk.png new file mode 100644 index 0000000..c89edd4 Binary files /dev/null and b/06-tour-shapes/tour-137-s0167-m005-walk.png differ diff --git a/06-tour-shapes/tour-138-s0160-m001-walk.png b/06-tour-shapes/tour-138-s0160-m001-walk.png new file mode 100644 index 0000000..bf32ad9 Binary files /dev/null and b/06-tour-shapes/tour-138-s0160-m001-walk.png differ diff --git a/06-tour-shapes/tour-139-s0336-m001-walk.png b/06-tour-shapes/tour-139-s0336-m001-walk.png new file mode 100644 index 0000000..421fba8 Binary files /dev/null and b/06-tour-shapes/tour-139-s0336-m001-walk.png differ diff --git a/06-tour-shapes/tour-140-s0041-m001-walk.png b/06-tour-shapes/tour-140-s0041-m001-walk.png new file mode 100644 index 0000000..915e068 Binary files /dev/null and b/06-tour-shapes/tour-140-s0041-m001-walk.png differ diff --git a/06-tour-shapes/tour-141-s0303-m012-walk.png b/06-tour-shapes/tour-141-s0303-m012-walk.png new file mode 100644 index 0000000..6fa9203 Binary files /dev/null and b/06-tour-shapes/tour-141-s0303-m012-walk.png differ diff --git a/06-tour-shapes/tour-142-s0189-m009-walk.png b/06-tour-shapes/tour-142-s0189-m009-walk.png new file mode 100644 index 0000000..7d98ccb Binary files /dev/null and b/06-tour-shapes/tour-142-s0189-m009-walk.png differ diff --git a/06-tour-shapes/tour-143-s0134-m013-walk.png b/06-tour-shapes/tour-143-s0134-m013-walk.png new file mode 100644 index 0000000..e25ac18 Binary files /dev/null and b/06-tour-shapes/tour-143-s0134-m013-walk.png differ diff --git a/06-tour-shapes/tour-144-s0302-m001-walk.png b/06-tour-shapes/tour-144-s0302-m001-walk.png new file mode 100644 index 0000000..1e9d9fb Binary files /dev/null and b/06-tour-shapes/tour-144-s0302-m001-walk.png differ diff --git a/06-tour-shapes/tour-145-s0255-m003-walk.png b/06-tour-shapes/tour-145-s0255-m003-walk.png new file mode 100644 index 0000000..29a5bc9 Binary files /dev/null and b/06-tour-shapes/tour-145-s0255-m003-walk.png differ diff --git a/06-tour-shapes/tour-146-s0153-m001-walk.png b/06-tour-shapes/tour-146-s0153-m001-walk.png new file mode 100644 index 0000000..91767bc Binary files /dev/null and b/06-tour-shapes/tour-146-s0153-m001-walk.png differ diff --git a/06-tour-shapes/tour-147-s0225-m006-walk.png b/06-tour-shapes/tour-147-s0225-m006-walk.png new file mode 100644 index 0000000..94ff8fc Binary files /dev/null and b/06-tour-shapes/tour-147-s0225-m006-walk.png differ diff --git a/06-tour-shapes/tour-148-s0293-m001-walk.png b/06-tour-shapes/tour-148-s0293-m001-walk.png new file mode 100644 index 0000000..78fe354 Binary files /dev/null and b/06-tour-shapes/tour-148-s0293-m001-walk.png differ diff --git a/06-tour-shapes/tour-149-s0208-m001-walk.png b/06-tour-shapes/tour-149-s0208-m001-walk.png new file mode 100644 index 0000000..9ce9a07 Binary files /dev/null and b/06-tour-shapes/tour-149-s0208-m001-walk.png differ diff --git a/06-tour-shapes/tour-150-s0128-m001-walk.png b/06-tour-shapes/tour-150-s0128-m001-walk.png new file mode 100644 index 0000000..cfd283c Binary files /dev/null and b/06-tour-shapes/tour-150-s0128-m001-walk.png differ diff --git a/06-tour-shapes/tour-151-s0284-m013-walk.png b/06-tour-shapes/tour-151-s0284-m013-walk.png new file mode 100644 index 0000000..598ac36 Binary files /dev/null and b/06-tour-shapes/tour-151-s0284-m013-walk.png differ diff --git a/06-tour-shapes/tour-152-s0222-m001-walk.png b/06-tour-shapes/tour-152-s0222-m001-walk.png new file mode 100644 index 0000000..abe5bd0 Binary files /dev/null and b/06-tour-shapes/tour-152-s0222-m001-walk.png differ diff --git a/06-tour-shapes/tour-153-s0132-m001-walk.png b/06-tour-shapes/tour-153-s0132-m001-walk.png new file mode 100644 index 0000000..78edbe0 Binary files /dev/null and b/06-tour-shapes/tour-153-s0132-m001-walk.png differ diff --git a/06-tour-shapes/tour-154-s0218-m017-walk.png b/06-tour-shapes/tour-154-s0218-m017-walk.png new file mode 100644 index 0000000..271cd44 Binary files /dev/null and b/06-tour-shapes/tour-154-s0218-m017-walk.png differ diff --git a/06-tour-shapes/tour-155-s0138-m009-walk.png b/06-tour-shapes/tour-155-s0138-m009-walk.png new file mode 100644 index 0000000..649de27 Binary files /dev/null and b/06-tour-shapes/tour-155-s0138-m009-walk.png differ diff --git a/06-tour-shapes/tour-156-s0198-m001-walk.png b/06-tour-shapes/tour-156-s0198-m001-walk.png new file mode 100644 index 0000000..431022a Binary files /dev/null and b/06-tour-shapes/tour-156-s0198-m001-walk.png differ diff --git a/06-tour-shapes/tour-157-s0104-m001-walk.png b/06-tour-shapes/tour-157-s0104-m001-walk.png new file mode 100644 index 0000000..6dc2e1c Binary files /dev/null and b/06-tour-shapes/tour-157-s0104-m001-walk.png differ diff --git a/06-tour-shapes/tour-158-s0030-m001-walk.png b/06-tour-shapes/tour-158-s0030-m001-walk.png new file mode 100644 index 0000000..08ae845 Binary files /dev/null and b/06-tour-shapes/tour-158-s0030-m001-walk.png differ diff --git a/06-tour-shapes/tour-159-s0140-m003-walk.png b/06-tour-shapes/tour-159-s0140-m003-walk.png new file mode 100644 index 0000000..24b77e8 Binary files /dev/null and b/06-tour-shapes/tour-159-s0140-m003-walk.png differ diff --git a/06-tour-shapes/tour-160-s0244-m001-walk.png b/06-tour-shapes/tour-160-s0244-m001-walk.png new file mode 100644 index 0000000..d1a5fca Binary files /dev/null and b/06-tour-shapes/tour-160-s0244-m001-walk.png differ diff --git a/06-tour-shapes/tour-161-s0164-m001-walk.png b/06-tour-shapes/tour-161-s0164-m001-walk.png new file mode 100644 index 0000000..89fbb1b Binary files /dev/null and b/06-tour-shapes/tour-161-s0164-m001-walk.png differ diff --git a/06-tour-shapes/tour-162-s0209-m001-walk.png b/06-tour-shapes/tour-162-s0209-m001-walk.png new file mode 100644 index 0000000..1514835 Binary files /dev/null and b/06-tour-shapes/tour-162-s0209-m001-walk.png differ diff --git a/06-tour-shapes/tour-163-s0160-m001-walk.png b/06-tour-shapes/tour-163-s0160-m001-walk.png new file mode 100644 index 0000000..fd98730 Binary files /dev/null and b/06-tour-shapes/tour-163-s0160-m001-walk.png differ diff --git a/06-tour-shapes/tour-164-s0350-m009-walk.png b/06-tour-shapes/tour-164-s0350-m009-walk.png new file mode 100644 index 0000000..6fcd4c9 Binary files /dev/null and b/06-tour-shapes/tour-164-s0350-m009-walk.png differ diff --git a/06-tour-shapes/tour-165-s0168-m001-walk.png b/06-tour-shapes/tour-165-s0168-m001-walk.png new file mode 100644 index 0000000..7b4d1a7 Binary files /dev/null and b/06-tour-shapes/tour-165-s0168-m001-walk.png differ diff --git a/06-tour-shapes/tour-166-s0112-m001-walk.png b/06-tour-shapes/tour-166-s0112-m001-walk.png new file mode 100644 index 0000000..605f8e8 Binary files /dev/null and b/06-tour-shapes/tour-166-s0112-m001-walk.png differ diff --git a/06-tour-shapes/tour-167-s0092-m001-walk.png b/06-tour-shapes/tour-167-s0092-m001-walk.png new file mode 100644 index 0000000..8a7998e Binary files /dev/null and b/06-tour-shapes/tour-167-s0092-m001-walk.png differ diff --git a/06-tour-shapes/tour-168-s0194-m009-walk.png b/06-tour-shapes/tour-168-s0194-m009-walk.png new file mode 100644 index 0000000..f985acf Binary files /dev/null and b/06-tour-shapes/tour-168-s0194-m009-walk.png differ diff --git a/06-tour-shapes/tour-169-s0298-m013-walk.png b/06-tour-shapes/tour-169-s0298-m013-walk.png new file mode 100644 index 0000000..c08f261 Binary files /dev/null and b/06-tour-shapes/tour-169-s0298-m013-walk.png differ diff --git a/06-tour-shapes/tour-170-s0058-m001-walk.png b/06-tour-shapes/tour-170-s0058-m001-walk.png new file mode 100644 index 0000000..5e6e5e4 Binary files /dev/null and b/06-tour-shapes/tour-170-s0058-m001-walk.png differ diff --git a/06-tour-shapes/tour-171-s0251-m001-walk.png b/06-tour-shapes/tour-171-s0251-m001-walk.png new file mode 100644 index 0000000..762423c Binary files /dev/null and b/06-tour-shapes/tour-171-s0251-m001-walk.png differ diff --git a/06-tour-shapes/tour-172-s0136-m005-walk.png b/06-tour-shapes/tour-172-s0136-m005-walk.png new file mode 100644 index 0000000..4551d08 Binary files /dev/null and b/06-tour-shapes/tour-172-s0136-m005-walk.png differ diff --git a/06-tour-shapes/tour-173-s0316-m001-walk.png b/06-tour-shapes/tour-173-s0316-m001-walk.png new file mode 100644 index 0000000..5aedf33 Binary files /dev/null and b/06-tour-shapes/tour-173-s0316-m001-walk.png differ diff --git a/06-tour-shapes/tour-174-s0121-m001-walk.png b/06-tour-shapes/tour-174-s0121-m001-walk.png new file mode 100644 index 0000000..14731cf Binary files /dev/null and b/06-tour-shapes/tour-174-s0121-m001-walk.png differ diff --git a/06-tour-shapes/tour-175-s0269-m006-walk.png b/06-tour-shapes/tour-175-s0269-m006-walk.png new file mode 100644 index 0000000..d68dd61 Binary files /dev/null and b/06-tour-shapes/tour-175-s0269-m006-walk.png differ diff --git a/06-tour-shapes/tour-176-s0241-m002-walk.png b/06-tour-shapes/tour-176-s0241-m002-walk.png new file mode 100644 index 0000000..4d3cead Binary files /dev/null and b/06-tour-shapes/tour-176-s0241-m002-walk.png differ diff --git a/06-tour-shapes/tour-177-s0342-m011-walk.png b/06-tour-shapes/tour-177-s0342-m011-walk.png new file mode 100644 index 0000000..7dbaeea Binary files /dev/null and b/06-tour-shapes/tour-177-s0342-m011-walk.png differ diff --git a/06-tour-shapes/tour-178-s0339-m016-walk.png b/06-tour-shapes/tour-178-s0339-m016-walk.png new file mode 100644 index 0000000..404bc1f Binary files /dev/null and b/06-tour-shapes/tour-178-s0339-m016-walk.png differ diff --git a/06-tour-shapes/tour-179-s0189-m001-walk.png b/06-tour-shapes/tour-179-s0189-m001-walk.png new file mode 100644 index 0000000..8829ae2 Binary files /dev/null and b/06-tour-shapes/tour-179-s0189-m001-walk.png differ diff --git a/06-tour-shapes/tour-180-s0167-m001-walk.png b/06-tour-shapes/tour-180-s0167-m001-walk.png new file mode 100644 index 0000000..794736f Binary files /dev/null and b/06-tour-shapes/tour-180-s0167-m001-walk.png differ diff --git a/06-tour-shapes/tour-181-s0306-m014-walk.png b/06-tour-shapes/tour-181-s0306-m014-walk.png new file mode 100644 index 0000000..e0358c8 Binary files /dev/null and b/06-tour-shapes/tour-181-s0306-m014-walk.png differ diff --git a/06-tour-shapes/tour-182-s0068-m001-walk.png b/06-tour-shapes/tour-182-s0068-m001-walk.png new file mode 100644 index 0000000..510b620 Binary files /dev/null and b/06-tour-shapes/tour-182-s0068-m001-walk.png differ diff --git a/06-tour-shapes/tour-183-s0298-m001-walk.png b/06-tour-shapes/tour-183-s0298-m001-walk.png new file mode 100644 index 0000000..2b8f6b3 Binary files /dev/null and b/06-tour-shapes/tour-183-s0298-m001-walk.png differ diff --git a/06-tour-shapes/tour-184-s0230-m016-walk.png b/06-tour-shapes/tour-184-s0230-m016-walk.png new file mode 100644 index 0000000..0a313f2 Binary files /dev/null and b/06-tour-shapes/tour-184-s0230-m016-walk.png differ diff --git a/06-tour-shapes/tour-185-s0159-m001-walk.png b/06-tour-shapes/tour-185-s0159-m001-walk.png new file mode 100644 index 0000000..08728bf Binary files /dev/null and b/06-tour-shapes/tour-185-s0159-m001-walk.png differ diff --git a/06-tour-shapes/tour-186-s0185-m001-walk.png b/06-tour-shapes/tour-186-s0185-m001-walk.png new file mode 100644 index 0000000..f1a913f Binary files /dev/null and b/06-tour-shapes/tour-186-s0185-m001-walk.png differ diff --git a/06-tour-shapes/tour-187-s0142-m001-walk.png b/06-tour-shapes/tour-187-s0142-m001-walk.png new file mode 100644 index 0000000..efe229d Binary files /dev/null and b/06-tour-shapes/tour-187-s0142-m001-walk.png differ diff --git a/06-tour-shapes/tour-188-s0420-m001-walk.png b/06-tour-shapes/tour-188-s0420-m001-walk.png new file mode 100644 index 0000000..d7e55f4 Binary files /dev/null and b/06-tour-shapes/tour-188-s0420-m001-walk.png differ diff --git a/06-tour-shapes/tour-189-s0300-m001-walk.png b/06-tour-shapes/tour-189-s0300-m001-walk.png new file mode 100644 index 0000000..34e60c1 Binary files /dev/null and b/06-tour-shapes/tour-189-s0300-m001-walk.png differ diff --git a/06-tour-shapes/tour-190-s0350-m014-walk.png b/06-tour-shapes/tour-190-s0350-m014-walk.png new file mode 100644 index 0000000..dbc3082 Binary files /dev/null and b/06-tour-shapes/tour-190-s0350-m014-walk.png differ diff --git a/06-tour-shapes/tour-191-s0227-m013-walk.png b/06-tour-shapes/tour-191-s0227-m013-walk.png new file mode 100644 index 0000000..3c3bc5a Binary files /dev/null and b/06-tour-shapes/tour-191-s0227-m013-walk.png differ diff --git a/06-tour-shapes/tour-192-s0284-m012-walk.png b/06-tour-shapes/tour-192-s0284-m012-walk.png new file mode 100644 index 0000000..1a7558c Binary files /dev/null and b/06-tour-shapes/tour-192-s0284-m012-walk.png differ diff --git a/06-tour-shapes/tour-193-s0166-m001-walk.png b/06-tour-shapes/tour-193-s0166-m001-walk.png new file mode 100644 index 0000000..06075db Binary files /dev/null and b/06-tour-shapes/tour-193-s0166-m001-walk.png differ diff --git a/06-tour-shapes/tour-194-s0300-m007-walk.png b/06-tour-shapes/tour-194-s0300-m007-walk.png new file mode 100644 index 0000000..441f1a6 Binary files /dev/null and b/06-tour-shapes/tour-194-s0300-m007-walk.png differ diff --git a/06-tour-shapes/tour-195-s0232-m015-walk.png b/06-tour-shapes/tour-195-s0232-m015-walk.png new file mode 100644 index 0000000..6664032 Binary files /dev/null and b/06-tour-shapes/tour-195-s0232-m015-walk.png differ diff --git a/06-tour-shapes/tour-196-s0142-m001-walk.png b/06-tour-shapes/tour-196-s0142-m001-walk.png new file mode 100644 index 0000000..23aa905 Binary files /dev/null and b/06-tour-shapes/tour-196-s0142-m001-walk.png differ diff --git a/06-tour-shapes/tour-197-s0074-m001-walk.png b/06-tour-shapes/tour-197-s0074-m001-walk.png new file mode 100644 index 0000000..0888568 Binary files /dev/null and b/06-tour-shapes/tour-197-s0074-m001-walk.png differ diff --git a/06-tour-shapes/tour-198-s0015-m001-walk.png b/06-tour-shapes/tour-198-s0015-m001-walk.png new file mode 100644 index 0000000..82ce85a Binary files /dev/null and b/06-tour-shapes/tour-198-s0015-m001-walk.png differ diff --git a/06-tour-shapes/tour-199-s0246-m001-walk.png b/06-tour-shapes/tour-199-s0246-m001-walk.png new file mode 100644 index 0000000..bd334e7 Binary files /dev/null and b/06-tour-shapes/tour-199-s0246-m001-walk.png differ diff --git a/06-tour-shapes/tour-shape-plots.py b/06-tour-shapes/tour-shape-plots.py index a32f4cd..af9e356 100644 --- a/06-tour-shapes/tour-shape-plots.py +++ b/06-tour-shapes/tour-shape-plots.py @@ -497,10 +497,20 @@ def heart_tour_func(): return heart_tour # meta.add_text('Description', tour) # im.save(filename, 'PNG', pnginfo=meta) -with open('tours-open.txt') as f: +# with open('tours-open.txt') as f: +# for i, tour_s in enumerate(f.readlines()): +# tour = tour_s.strip() +# filename = 'tour-{:03}-s{:04}-m{:03}-open.png'.format(i, len(tour), len(mistake_positions(trace_tour(tour)))) +# plot_trace(trace_tour(tour), filename=filename) +# im = Image.open(filename) +# meta = PngImagePlugin.PngInfo() +# meta.add_text('Description', tour) +# im.save(filename, 'PNG', pnginfo=meta) + +with open('tours-random-walk.txt') as f: for i, tour_s in enumerate(f.readlines()): tour = tour_s.strip() - filename = 'tour-{:03}-s{:04}-m{:03}-open.png'.format(i, len(tour), len(mistake_positions(trace_tour(tour)))) + filename = 'tour-{:03}-s{:04}-m{:03}-walk.png'.format(i, len(tour), len(mistake_positions(trace_tour(tour)))) plot_trace(trace_tour(tour), filename=filename) im = Image.open(filename) meta = PngImagePlugin.PngInfo() diff --git a/06-tour-shapes/tour-shapes-build-problem-set.ipynb b/06-tour-shapes/tour-shapes-build-problem-set.ipynb new file mode 100644 index 0000000..05df310 --- /dev/null +++ b/06-tour-shapes/tour-shapes-build-problem-set.ipynb @@ -0,0 +1,1190 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given a sequence of {F|L|R}, each of which is \"move forward one step\", \"turn left, then move forward one step\", \"turn right, then move forward one step\":\n", + "1. which tours are closed?\n", + "2. what is the area enclosed by the tour?" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import collections\n", + "import enum\n", + "import random\n", + "import os\n", + "\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Direction(enum.Enum):\n", + " UP = 1\n", + " RIGHT = 2\n", + " DOWN = 3\n", + " LEFT = 4\n", + " \n", + "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n", + " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n", + "\n", + "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n", + " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n", + "\n", + "def turn_left(d):\n", + " return turn_lefts[d]\n", + "\n", + "def turn_right(d):\n", + " return turn_rights[d]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n", + "Mistake = collections.namedtuple('Mistake', ['i', 'step'])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def advance(step, d):\n", + " if d == Direction.UP:\n", + " return Step(step.x, step.y+1, d)\n", + " elif d == Direction.DOWN:\n", + " return Step(step.x, step.y-1, d)\n", + " elif d == Direction.LEFT:\n", + " return Step(step.x-1, step.y, d)\n", + " elif d == Direction.RIGHT:\n", + " return Step(step.x+1, step.y, d)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step(s, current):\n", + " if s == 'F':\n", + " return advance(current, current.dir)\n", + " elif s == 'L':\n", + " return advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " return advance(current, turn_right(current.dir))\n", + " else:\n", + " raise ValueError" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n", + " current = Step(startx, starty, startdir)\n", + " trace = [current]\n", + " for s in tour:\n", + " current = step(s, current)\n", + " trace += [current]\n", + " return trace " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def positions(trace):\n", + " return [(s.x, s.y) for s in trace]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def valid(trace):\n", + " return (trace[-1].x == 0 \n", + " and trace[-1].y == 0 \n", + " and len(set(positions(trace))) + 1 == len(trace))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def valid_prefix(tour):\n", + " current = Step(0, 0, Direction.RIGHT)\n", + " prefix = []\n", + " posns = []\n", + " for s in tour:\n", + " current = step(s, current)\n", + " prefix += [s]\n", + " if (current.x, current.y) in posns:\n", + " return ''\n", + " elif current.x == 0 and current.y == 0: \n", + " return ''.join(prefix)\n", + " posns += [(current.x, current.y)]\n", + " if current.x == 0 and current.y == 0:\n", + " return ''.join(prefix)\n", + " else:\n", + " return ''" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mistake_positions(trace, debug=False):\n", + " mistakes = []\n", + " current = trace[0]\n", + " posns = [(0, 0)]\n", + " for i, current in enumerate(trace[1:]):\n", + " if (current.x, current.y) in posns:\n", + " if debug: print(i, current)\n", + " mistakes += [Mistake(i+1, current)]\n", + " posns += [(current.x, current.y)]\n", + " if (current.x, current.y) == (0, 0):\n", + " return mistakes[:-1]\n", + " else:\n", + " return mistakes + [Mistake(len(trace)+1, current)]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def returns_to_origin(mistake_positions):\n", + " return [i for i, m in mistake_positions\n", + " if (m.x, m.y) == (0, 0)]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def random_walk(steps=1000):\n", + " return ''.join(random.choice('FFLR') for _ in range(steps))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def bounds(trace):\n", + " return (max(s.x for s in trace),\n", + " max(s.y for s in trace),\n", + " min(s.x for s in trace),\n", + " min(s.y for s in trace))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n", + " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def chunks(items, n=2):\n", + " return [items[i:i+n] for i in range(len(items) - n + 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None, filename=None):\n", + " plt.axis('on')\n", + " plt.axes().set_aspect('equal')\n", + " for s, t in chunks(trace, 2):\n", + " w, h = plot_wh[t.dir]\n", + " plt.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n", + " xh, yh, xl, yl = bounds(trace)\n", + " if xybounds is not None: \n", + " bxh, byh, bxl, byl = xybounds\n", + " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", + " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n", + " else:\n", + " plt.xlim([xl-1, xh+1])\n", + " plt.ylim([yl-1, yh+1])\n", + " if filename:\n", + " plt.savefig(filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trim_loop(tour, random_mistake=False):\n", + " trace = trace_tour(tour)\n", + " mistakes = mistake_positions(trace)\n", + " if random_mistake:\n", + " end_mistake_index = random.randrange(len(mistakes))\n", + " else:\n", + " end_mistake_index = 0\n", + "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace; {}'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n", + " # while this mistake extends to the next step in the trace...\n", + " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n", + " end_mistake_index + 1 < len(mistakes) and\n", + " mistakes[end_mistake_index].i + 1 == \n", + " mistakes[end_mistake_index + 1].i):\n", + "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n", + " # push this mistake finish point later\n", + " end_mistake_index += 1\n", + " mistake = mistakes[end_mistake_index]\n", + " \n", + " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n", + " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n", + " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n", + "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n", + " \n", + " # direction before entering the loop\n", + " direction_before = trace[mistake_loop_start].dir\n", + " \n", + " # find the new instruction to turn from heading before the loop to heading after the loop\n", + " new_instruction = 'F'\n", + " if (mistake.i + 1) < len(trace):\n", + " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n", + " new_instruction = 'L'\n", + " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n", + " new_instruction = 'R'\n", + "# if (mistake.i + 1) < len(trace):\n", + "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n", + "# else:\n", + "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n", + " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n", + "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n", + " trace = trace_tour(tour)\n", + " mistake_limit = 1\n", + " if trace[-1].x == 0 and trace[-1].y == 0:\n", + " mistake_limit = 0\n", + " mistakes = mistake_positions(trace)\n", + " \n", + " old_mistake_count = len(mistakes)\n", + " mistake_reduction_tries = 0\n", + " \n", + " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n", + " tour = trim_loop(tour)\n", + " trace = trace_tour(tour)\n", + " mistakes = mistake_positions(trace)\n", + " if len(mistakes) < old_mistake_count:\n", + " old_mistake_count = len(mistakes)\n", + " mistake_reduction_tries = 0\n", + " else:\n", + " mistake_reduction_tries += 1\n", + " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n", + " return ''\n", + " else:\n", + " return tour" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def reverse_tour(tour):\n", + " def swap(tour_step):\n", + " if tour_step == 'R':\n", + " return 'L'\n", + " elif tour_step == 'L':\n", + " return 'R'\n", + " else:\n", + " return tour_step\n", + " \n", + " return ''.join(swap(s) for s in reversed(tour))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def wander_near(locus, current, limit=10):\n", + " valid_proposal = False\n", + " while not valid_proposal:\n", + " s = random.choice('FFFRL')\n", + " if s == 'F':\n", + " proposed = advance(current, current.dir)\n", + " elif s == 'L':\n", + " proposed = advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " proposed = advance(current, turn_right(current.dir))\n", + " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n", + " valid_proposal = True\n", + "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n", + " return s, proposed" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def seek(goal, current):\n", + " dx = current.x - goal.x\n", + " dy = current.y - goal.y\n", + "\n", + " if dx < 0 and abs(dx) > abs(dy): # to the left\n", + " side = 'left'\n", + " if current.dir == Direction.RIGHT:\n", + " s = 'F'\n", + " elif current.dir == Direction.UP:\n", + " s = 'R'\n", + " else:\n", + " s = 'L'\n", + " elif dx > 0 and abs(dx) > abs(dy): # to the right\n", + " side = 'right'\n", + " if current.dir == Direction.LEFT:\n", + " s = 'F'\n", + " elif current.dir == Direction.UP:\n", + " s = 'L'\n", + " else:\n", + " s = 'R'\n", + " elif dy > 0 and abs(dx) <= abs(dy): # above\n", + " side = 'above'\n", + " if current.dir == Direction.DOWN:\n", + " s = 'F'\n", + " elif current.dir == Direction.RIGHT:\n", + " s = 'R'\n", + " else:\n", + " s = 'L'\n", + " else: # below\n", + " side = 'below'\n", + " if current.dir == Direction.UP:\n", + " s = 'F'\n", + " elif current.dir == Direction.LEFT:\n", + " s = 'R'\n", + " else:\n", + " s = 'L'\n", + " if s == 'F':\n", + " proposed = advance(current, current.dir)\n", + " elif s == 'L':\n", + " proposed = advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " proposed = advance(current, turn_right(current.dir))\n", + " \n", + "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n", + "\n", + " return s, proposed" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20, return_anyway=False):\n", + " trail = ''\n", + " current = Step(0, 0, Direction.RIGHT) \n", + " l = 0\n", + " finished = False\n", + " while not finished:\n", + " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n", + " l += 1\n", + " if l == len(loci) - 1:\n", + " finished = True\n", + " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n", + " trail += s\n", + " current = proposed\n", + "# print('!! Finished loci')\n", + " seek_steps = 0\n", + " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n", + "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n", + "# s, proposed = wander_near(loci[l], current, limit=error+1)\n", + " s, proposed = seek(loci[l], current)\n", + " trail += s\n", + " current = proposed\n", + " seek_steps += 1\n", + " if seek_steps >= seek_step_limit and not return_anyway:\n", + " return ''\n", + " else:\n", + " return trail" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nVLpP4CKFIBNJl6SFQEV+muMwZFu3buWGG25QGDKRAEKHIVsFPOHufxk9LykEWfRehSETqYDQYcgs\n+ouVHIIMNIFIpBKC3V7MzB4E/g+4xMyOmdmtwF3A9WZ2mFwUorvOt424Y1ARiETCSdrxXkoYsn8o\n8lJJIcjyJb2EISLh6H4CItNEqucO6H4CIuGleiqxiISX6pqAhg2LpJdmEYpUuYreWUgdgyLhDAwM\nJFqvIoVA3FbROAGRcLLZbKL1KloIaJyASPqoY1Bkmkj11QF1DIqEp3ECIlUu1TUBDRsWCS/VhYCG\nDYuEl+pbjseZUzgykXBSPU4gPvmTdlyIyPhSPU4gHiSk5oBI+qhjUKTKqWNQZJq4IOMEzOxGM3vV\nzI6Y2e2T2ZaITE7SuTmJCwEzywD/Si5E2Z8DnzSzSwu9V8OGRdJrMjWBK4Hfufsf3H0A+Am58GRj\naNiwSHpN5qxcDryZ9/w4uYJhjPgS4bXXXktHRwdz584FoL+/n9mzZ9Pd3c1FF13E6dOn6ezsZO3a\ntbS2ttLT08PChQvp7Oxk3rx5dHR00NPTw6pVq2htbaWzs5MlS5bQ0dHBzJkz6e/vp6+vj4svvpiW\nlhY6OjpoaGg4p0+it7eX5cuX09raSnt7O2vWrOHtt99mcHCQ+vp6enp6aGpq4u2336a9vZ1169Zx\n8uRJ+vr6mDt3Lt3d3SxcuJCzZ8/S1dXFmjVraG1tpauri2w2S21tLXPmzKGrq4ve3l5Wrlw5ktdl\ny5bR1tZGNptleHiY3t5eVqxYQWtrKx0dHaxcuZIzZ84wPDxMNpult7eXZcuWcfLkSdra2li3bh2n\nTp1iYGCAgYEB6urqRvLa0dHBunXrRvbbggUL6OzspLGxkfb2drq7u1m9evVIXpuamujo6KC+vp6+\nvr4x+23FihW0tbVhZnR0dDBjxoyRvLS3t7N69WpOnz7N0NAQM2fOpKenh6VLl468Hu+3/v5+5syZ\nQ3d3N4sWLeLMmTPnHON4eXyMjx8/Tl1dHatXr6alpYXOzk6WLl1Ke3s7dXV1DA4OjslrvN/cnWw2\nS09PT9Fj3NDQQHd3N01NTRw9epRMJsPatWs5efIkvb29zJ8/n66uLhYsWEBbW9s5+y3+nra3tzNr\n1ix6enrGHOPly5dz9uzZke9cX18fM2fOZGhoiI6ODlatWsXp06cZHh6mrq6Onp6ec/br2rVrOXXq\nVNFzY926dbS0tBQ8N06cOJHsTHb3RH/Ax4H78p5/CrinwPt8y5YtvmzZMgcc8Lq6upHH8V9DQ8PI\n4wULFox5Pf9v8eLFk3p94cKFI4/r6+vHvD5v3ryRx/Pnzx/z+owZMwpua7J5zWazY17P3xezZ88e\n83r+ssbGxjGv19TUjDxetGjRpPKav/7MmTPHvJ6/r+bOnTvm9fx9Xc5jnP8ZCx2X/O9WofwVOsb5\nx2Kyxzj/cxf67ucftzlz5ox5fSLnxvz58725udmbm5sd8JLO5UkUAlcDT+U9vwO4vVAhMFpzc/OY\nZaEoLaV1odO6UJ+p1EJgMn0CvwH+xMxWmVkd8PfkwpOJyBRSUkDSoiub3QjcQ66D8X53HxOOzMyS\nJyAik+IlBCSdVCEgIlOfbioiUuVUCIhUuYoXAiGHGpvZ/WbWYmb78pY1mtkzZnbYzJ42s3llSGeF\nmT1rZgfNbL+Z3RYwrRlm9isz2xOl1RwtX21mL0RpPWRmZRuJZWYZM3vJzB4PmZaZ/d7MXo4+26+j\nZWXfh9F255nZdjM7ZGYHzOyqQMfrkujzvBT9bzOz2wJ+ri+b2Stmts/MfmxmdRM+XqVcQijXH7lC\n5zVgFZAF9gKXlnH7fwtcBuzLW3Y38LXo8e3AXWVIZwlwWfR4NnAYuDREWtG2GqL/NcALwFXAw8Dm\naPm9wD+VcT9+Gfhv4PHoeZC0gKNA46hlofbhfwK3Ro9rgXmh0spLMwO8BVwc6Hu4LNqHdXnH6ZaJ\nHq+yfeASM301sDvvecGxBZNMY9WoQuBVoCl6vAR4NcDnegxYHzotoAF4kdzIzFYgk7dfnypTGiuA\nnwPX5RUCJwOl9QawcNSysu9DYA7weoHloY/XDcD/BPxcy4A/AI1RwfY4cP1EvxuVbg4UGmq8PHCa\nF7l7C4C7nwAWl3PjZraaXO3jBXIHuexpRdXzPcAJcifo68BZd4/njh4n94Uoh+8BXyU3Ag0zWwic\nCZSWA0+b2W/M7PPRshD7cC1wysweiKrp95lZQ6C08n0CeDB6XPa03P0t4LvAMeCPQBvwEhP8blS6\nECh0zXLKXqM0s9nADuBL7t5JoM/i7sPufjm5X+krgXcVettk0zGzjUCLu+/lnWNljD1u5fqc73X3\nvwY2AF80s/eVcdv5aoErgB+6+xVAF7laaLDvnpllgZuB7dGisqdlZvPJTdpbRe5EnwXcVOCt5027\n0oXAcWBl3vMV5NpMIbWYWROAmS0hV1WatKizZQfwX+6+M2RaMXdvB54nV8WbH03nhvLtx2uAm83s\nKPAQ8AHg+8C8AGnFv4i4+0lyTaorCbMPjwNvuvuL0fNHyBUKIY/XTcBv3f1U9DxEWuuBo+5+2t2H\ngEeB9zLB70alC4FKDDUe/cv1OPCZ6PEtwM7RKyT0I+Cgu98TMi0zWxT3JJtZPbkDfxB4DthczrTc\n/RvuvtLd15I7Ns+6+6dCpGVmDVFNCjObRa79vJ8A+zCqhr9pZpdEiz4IHAiRVp5PkitIYyHSOgZc\nbWYzzcx453NN7HiVsyOkxM6MG8n1pv8OuKPM236QXKnXF+2gW8l1mvwiSvPnwPwypHMNMETu6sYe\ncu2wG4EFAdL6i2j7e4F9wL9Ey9cAvwKOkOsNzpZ5X17LOx2DZU8r2ma8//bH34UQ+zDa7rvJ/Qjt\nBX5G7upAqLTqyXWmzslbFiqtZuBQ9N3YRu6q24SOl4YNi1Q5jRgUqXIqBESqnAoBkSqnQkCkyqkQ\nEKlyKgREqpwKAZEqp0JApMr9P8nYgJi0MFyGAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def square_tour(a=80):\n", + " \"a is width of square\"\n", + " return ('F' * a + 'L') * 4\n", + "\n", + "plot_trace(trace_tour(square_tour()))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nybOEYIzJ+/+3mLJIMXCXRQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def cross_tour(a=50, b=40):\n", + " \"a is width of cross arm, b is length of cross arm\"\n", + " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n", + "\n", + "plot_trace(trace_tour(cross_tour()))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def quincunx_tour(a=60, b=30, c=50):\n", + " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n", + " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n", + "plot_trace(trace_tour(quincunx_tour()))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nKEqpEBbSo95XcuDAAe677z6uu+46PvjgA9txlFIhLGTPo6zK1VdfzUsvvcSwYcMAePjhh5k7d67l\nVEqpUFTTFqVXC/fWhogYX+zjs88+Y9CgQZ7r69at8xRPpZTyxsaNG0lOTq72wr1B36J0GzhwYIUB\nntOnT1tOpJSqK0KmUF5q4sSJiAi333677ShKqTAXkoXyyJEjvP/++3To0IG3337bdhylVJgLyULZ\nunVrRo0aRUREBAAdOnRg+vTpllMppYLV5s2b6dOnDxMnTqzR40NmMKcy69atY+zYsZw7dw6Aixcv\nUq9ePb/sSykVusqfFvSTn/yENWvWeG73ZjAnpAvlJfvhwoULREREEBkZWePzpZRS4cM9ABwREUGL\nFi3Iy8ur8POwG/W+EveqxTExMdSrV4/f/OY3lhMppWwzxuBwODyH6Grzqa9h06Istz86dOjAt99+\nG7B9KqWCk4hQUFBAo0aNEJF/6WnWqRblpQ4ePIiIkJqaajuKUirANmzYQGxsrKcoiggOh6NWh+PC\nrlBu3LiRvn370qpVK9auXWs7jlIqwB544AHOnz9P586dmTZtGo0bN671NiN9kCuo/PjHP2b79u2s\nXbuW1NRU3nvvPerXr09qaqoO8CgVxo4cOcL27ds9n7/19ddf+2zbYVco3a6++moAxo4dC8B//dd/\ncc8999iMpJTyozZt2ngujxs3zqfbDruut1vHjh0rzA3fvXu35URKKX978803Mcbwzjvv+HS7YVso\nL7Vo0SJd/FepMLNjx44Ko9nNmzf3y37Ctutd3jfffMOiRYtYu3atLv6rVBhZsWIFAI8++ihxcXGM\nHDnSL/sJu/Mor+See+7hlVde4e6776Zly5b8/ve/tx1JKVUDBw4cYMGCBXz22Wfs2rWr5gvy1rUp\njN7YunUrQ4YM8VzftGkT119/vcVESqmauNzc7Zpsp86ecH45gwcPrjDAc/bsWcuJlFI1NWXKFIwx\nNS6S1VGnCuWlRo8ejYgwefJk21GUUlXIy8urMHDTr1+/gO27TnW9yzt27Bj79u1j+vTpHDlypMbH\nOJRSgbF9+3b69+/PunXrqFevHoMHD8bhqF1bT49Reqlt27Z89913xMfHM3z4cNLT021HUkqVs2nT\nJn79619z+PBhzpw549NGjRZKL61bt44JEyZw5swZoOYfZ6mU8o/yAzcjR47kww8/9Om2tVBWQ2lp\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n", + " Step(20, 70, Direction.UP), \n", + " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n", + " Step(0, 0, Direction.RIGHT)]\n", + "\n", + "heart_tour = ''\n", + "current = Step(0, 0, Direction.RIGHT)\n", + "\n", + "for hp in heart_points:\n", + " while not (current.x == hp.x and current.y == hp.y):\n", + " s, proposed = seek(hp, current)\n", + " heart_tour += s\n", + " current = proposed\n", + "\n", + "plot_trace(trace_tour(heart_tour))\n", + "\n", + "def heart_tour_func(): return heart_tour" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trim_some_mistakes(tour, mistake_limit):\n", + " trimmed_tour = rw\n", + " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n", + " while len(mistake_positions(trace_tour(trimmed_tour))) > mistake_limit:\n", + " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n", + " return trimmed_tour" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cross.txt\t small-squares.txt\t tours.txt\r\n", + "large-squares.txt tours-open.txt\t tours-with-mistakes.txt\r\n", + "quincunx.txt\t tours-random-walk.txt\r\n" + ] + } + ], + "source": [ + "!ls *txt" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "113" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid_tours = [t.strip() for t in open('tours.txt').readlines() if valid(trace_tour(t.strip()))]\n", + "valid_tours += [t.strip() for t in open('tours-with-mistakes.txt').readlines() if valid(trace_tour(t.strip()))]\n", + "valid_tours += [t.strip() for t in open('tours-open.txt').readlines() if valid(trace_tour(t.strip()))]\n", + "valid_tours += [t.strip() for t in open('tours-random-walk.txt').readlines() if valid(trace_tour(t.strip()))]\n", + "\n", + "len(valid_tours)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all(valid(trace_tour(t)) for t in valid_tours)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(87, 0)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tours_with_mistakes = [t.strip() for t in open('tours-with-mistakes.txt').readlines() \n", + " if not valid(trace_tour(t.strip()))]\n", + "len(tours_with_mistakes)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "100" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tours_open = [t.strip() for t in open('tours-open.txt').readlines() \n", + " if not valid(trace_tour(t.strip()))]\n", + "len(tours_open)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(84, 116)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tours_walks_loops = [t.strip() for t in open('tours-random-walk.txt').readlines() \n", + " if len(mistake_positions(trace_tour(t.strip()))) > 1]\n", + "tours_walks_unloops = [t.strip() for t in open('tours-random-walk.txt').readlines() \n", + " if len(mistake_positions(trace_tour(t.strip()))) == 1]\n", + "len(tours_walks_loops), len(tours_walks_unloops)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(tours_with_mistakes[31]))" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "65" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sum(1 for t in valid_tours if len(t) > 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "48" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "problem_set = [t for t in valid_tours if len(t) <= 100]\n", + "len(problem_set)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(48, 65)" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# problem_set += [t for t in valid_tours if len(t) > 100][0::2]\n", + "valids_to_split = [t for t in valid_tours if len(t) > 100]\n", + "len(problem_set), len(valids_to_split)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "148" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "problem_set += random.sample(tours_with_mistakes + tours_open + tours_walks_loops + tours_walks_unloops, 100)\n", + "len(problem_set)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2284" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(len(t) for t in valids_to_split)" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1680" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sum(len(t) for t in problem_set if valid(trace_tour(t)))" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[(i, j) \n", + " for i in range(len(problem_set)) \n", + " for j in range(len(problem_set))\n", + " if i != j\n", + " if valid(trace_tour(problem_set[i] + problem_set[j]))]" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "attempting 0\n", + "** found split for 0\n", + "attempting 1\n", + "attempting 2\n", + "attempting 3\n", + "attempting 4\n", + "attempting 5\n", + "attempting 6\n", + "attempting 7\n", + "attempting 8\n", + "attempting 9\n", + "attempting 10\n", + "attempting 11\n", + "** found split for 11\n", + "attempting 12\n", + "attempting 13\n", + "attempting 14\n", + "attempting 15\n", + "attempting 16\n", + "attempting 17\n", + "** found split for 17\n", + "attempting 18\n", + "attempting 19\n", + "attempting 20\n", + "attempting 21\n", + "attempting 22\n", + "attempting 23\n", + "attempting 24\n", + "attempting 25\n", + "attempting 26\n", + "attempting 27\n", + "attempting 28\n", + "attempting 29\n", + "** found split for 29\n", + "attempting 30\n", + "attempting 31\n", + "attempting 32\n", + "attempting 33\n", + "attempting 34\n", + "** found split for 34\n", + "attempting 35\n", + "attempting 36\n", + "attempting 37\n", + "attempting 38\n", + "** found split for 38\n", + "attempting 39\n", + "attempting 40\n", + "attempting 41\n", + "** found split for 41\n", + "attempting 42\n", + "attempting 43\n", + "attempting 44\n", + "attempting 45\n", + "attempting 46\n", + "attempting 47\n", + "attempting 48\n", + "** found split for 48\n", + "attempting 49\n", + "** found split for 49\n", + "attempting 50\n", + "** found split for 50\n", + "attempting 51\n", + "attempting 52\n", + "attempting 53\n", + "attempting 54\n", + "attempting 55\n", + "attempting 56\n", + "attempting 57\n", + "** found split for 57\n", + "attempting 58\n", + "attempting 59\n", + "** found split for 59\n", + "attempting 60\n", + "attempting 61\n", + "attempting 62\n", + "** found split for 62\n", + "attempting 63\n", + "attempting 64\n" + ] + } + ], + "source": [ + "split_valids = []\n", + "unsplit_valids = []\n", + "i = 0\n", + "for v in valids_to_split:\n", + " can_add = False\n", + " attempts_remaining = 500\n", + " print('attempting', i)\n", + " while not can_add and attempts_remaining > 0:\n", + " # print('splitting', i, 'attempt', attempts_remaining)\n", + " attempts_remaining -= 1\n", + "# split_pos = len(v) // 2 + random.randrange(10)\n", + " split_pos = random.randint(20, len(v) - 40)\n", + " vl = v[:split_pos]\n", + " vr = v[split_pos:]\n", + " can_add = True\n", + " if valid(trace_tour(vr + vl)): can_add = False\n", + " for other in problem_set:\n", + " if can_add and valid(trace_tour(other + vl)): can_add = False\n", + " if can_add and valid(trace_tour(other + vr)): can_add = False\n", + " if can_add and valid(trace_tour(vl + other)): can_add = False\n", + " if can_add and valid(trace_tour(vr + other)): can_add = False\n", + " for other in split_valids:\n", + " if can_add and valid(trace_tour(other + vl)): can_add = False\n", + " if can_add and valid(trace_tour(other + vr)): can_add = False\n", + " if can_add and valid(trace_tour(vl + other)): can_add = False\n", + " if can_add and valid(trace_tour(vr + other)): can_add = False\n", + " if can_add:\n", + " split_valids += [vl, vr]\n", + " print('** found split for', i)\n", + " else:\n", + " unsplit_valids += [v]\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['RLFLRFRLLFFRRLFFFRFLLFFFLFLRFRFFFRFLLFRFRFFFFRFFLFLFLRRFRFFFFLFFFFFFRLFLFLFRRFFFLFRFFRRFLLFFFRFRFFLRLFFLFRFFFLFFFFLRFFFFFLFFRLFFFFFFFFRFFFFFFRFFFFFFRLFFFLFRFRFLFFFFLFFFFFFLRFFFFLRLFFRFFRFLFFFFFFFLFLRFRLFFFFFFRLRFFLFFRFRLFFFRLFRLFFFLFFRLFLFFLFRRFFFLRFFLFFLRFFRFLRFFFLFFRFFLRFFFFFRFLFRLFRRFLFFFFRRFLRLFLFFFFFFLFFFFFFRFLRLFRLFLFFRFFLFFFFFFRRFFFLLFFRFFLRFFRRLLFRFFFFFFLFFFLFFFLRFFLFRRFLRLRFFFRFLFFFFFRLRFLFLFFRRFLFFFRLLFRLLRRLFLFRFFRFLFFFFRFFFLFFLFRFRFLRFFFFFLRFLFLFFFRFFFLFRRFLFLFFLFFRFFFFFFRRFLFFRFFFLRFLFFFFFFFFLRFFRRLFFFFFLRLFFFFFRLFFFFFFFFFFFLRFFLFRFFFFLRLLFRFRLRFFFLFLFFFRFFFFFRFFRFFLFRLLFRFLRFFFFLFFLFRFFFRLFFRRFLRLFLFFFLRFLRFFFFFFLFFFRFRFFFFFF',\n", + " 'LLRRLFFFFFFFLFFFRFFFFFFFLLRFFRFFFRFFFLLFFRLRFFFLFRFFRFLFRFFFRFLLFFLFFFFFFRRFLRFRLFFFLFFFFFFFFLFFRLFFFFRFFFRFFFLFFFRLR',\n", + " 'RLFFFLFFFRFFFRFFLFFLFFRFFFFLFFRFRFFFRFLLRLFFFFLFFRFRFFRLRFFLFLFFRFFLFLRFRFFFLFFFLFRFLFFFFRRLFRFLFFFFFFLFRFFLFRFFFFFFFFLLFRFFFLFRFFRFFFFFFFRRLFLLRFFRLFRLFFFLFFRFFRFRFLFFLFFRFFFRLLFFFLFFFLRFFFFFFRLFRFFLFFFFRLFFRRLLFFFFLRLFFFFRFRFFLFFFFFFFFLFFRRFFFFLFFFFLFLFFRFFFRFFFFFRLRFFFFFRFLFFFLFFFFLFFFFFRFFFFFFLFFFRFLLFFFRFRFFFFLRFFFRLFFRLFFRFLRFFFFFFFFFFLRFLFFFFFFRLFFFFLRLFRLFRLFFFRFLRFFLRFLFFFFFFFFFFFFFFLFFRLFFFRLFFFFFFFRFLRFRLFFFRLFRFFFFFFFFFFFFFLFFFFFFFFFFFLLRFFLFFRLFRFLRFFFLRFFFFFFRFFRLFRLFFFLRFFFFRFFRFFFFFFFFFFLFFFFFFLFLRFFFFRFLLFRFLRFFRFFFLFRFLFRLFFFFFFFFLFLFRFFFFLFFRFFFFRLRRFFLLFFRFLFRFFFFFFLRFFFFFRFFFRFRFLFFLFLRLRLFFLRFFLFFRFFFFLFFFFFLFFFFFRLFFFFRFFFFFRFFFFFFFFFFRFLFFFFFLRLLFFFFRFFFRFLRFFLFFFFLFRRFLFFFFLRFFRLFFLFFFFLRFFLFRRFFFFRFLFFFRFL',\n", + " 'FLFFRRFFFFRLLFFFLFLLRRFFFRFFFLRFFFLFLFFRRFFFFLLFRFFLFRFFRFFFRFLFFFFRLFFFLRFFFFRFRLFFRLLFFFFFF']" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "split_valids[:4]" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0, 1),\n", + " (2, 3),\n", + " (4, 5),\n", + " (6, 7),\n", + " (8, 9),\n", + " (10, 11),\n", + " (12, 13),\n", + " (14, 15),\n", + " (16, 17),\n", + " (18, 19),\n", + " (20, 21),\n", + " (22, 23),\n", + " (24, 25)]" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[(i, j) \n", + " for i in range(len(split_valids)) \n", + " for j in range(len(split_valids))\n", + " if i != j\n", + " if valid(trace_tour(split_valids[i] + split_valids[j]))]" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "226" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "problem_set += (split_valids + unsplit_valids)\n", + "len(problem_set)" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "with open('06-tours.txt', 'w') as f:\n", + " f.writelines(t + '\\n' for t in random.sample(problem_set, len(problem_set)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2+" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/06-tour-shapes/tour-shapes-build-raw-tours.ipynb b/06-tour-shapes/tour-shapes-build-raw-tours.ipynb new file mode 100644 index 0000000..7903070 --- /dev/null +++ b/06-tour-shapes/tour-shapes-build-raw-tours.ipynb @@ -0,0 +1,3282 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given a sequence of {F|L|R}, each of which is \"move forward one step\", \"turn left, then move forward one step\", \"turn right, then move forward one step\":\n", + "1. which tours are closed?\n", + "2. what is the area enclosed by the tour?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import collections\n", + "import enum\n", + "import random\n", + "import os\n", + "\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Direction(enum.Enum):\n", + " UP = 1\n", + " RIGHT = 2\n", + " DOWN = 3\n", + " LEFT = 4\n", + " \n", + "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n", + " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n", + "\n", + "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n", + " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n", + "\n", + "def turn_left(d):\n", + " return turn_lefts[d]\n", + "\n", + "def turn_right(d):\n", + " return turn_rights[d]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n", + "Mistake = collections.namedtuple('Mistake', ['i', 'step'])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def advance(step, d):\n", + " if d == Direction.UP:\n", + " return Step(step.x, step.y+1, d)\n", + " elif d == Direction.DOWN:\n", + " return Step(step.x, step.y-1, d)\n", + " elif d == Direction.LEFT:\n", + " return Step(step.x-1, step.y, d)\n", + " elif d == Direction.RIGHT:\n", + " return Step(step.x+1, step.y, d)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step(s, current):\n", + " if s == 'F':\n", + " return advance(current, current.dir)\n", + " elif s == 'L':\n", + " return advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " return advance(current, turn_right(current.dir))\n", + " else:\n", + " raise ValueError" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n", + " current = Step(startx, starty, startdir)\n", + " trace = [current]\n", + " for s in tour:\n", + " current = step(s, current)\n", + " trace += [current]\n", + " return trace " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n", + "# current = Step(startx, starty, startdir)\n", + "# trace = [current]\n", + "# for s in tour:\n", + "# if s == 'F':\n", + "# current = advance(current, current.dir)\n", + "# elif s == 'L':\n", + "# current = advance(current, turn_left(current.dir))\n", + "# elif s == 'R':\n", + "# current = advance(current, turn_right(current.dir))\n", + "# trace += [current]\n", + "# return trace " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k = Step(1, 2, 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Step(x=1, y=2, dir=3)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "k" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "__main__.Step" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Step" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d = Direction.UP\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "turn_right(d)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{: ,\n", + " : ,\n", + " : ,\n", + " : }" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "turn_rights" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Step(x=0, y=0, dir=),\n", + " Step(x=1, y=0, dir=),\n", + " Step(x=1, y=1, dir=),\n", + " Step(x=2, y=1, dir=),\n", + " Step(x=2, y=2, dir=)]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace_tour('FLRL')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Step(x=0, y=0, dir=),\n", + " Step(x=1, y=0, dir=),\n", + " Step(x=2, y=0, dir=),\n", + " Step(x=2, y=1, dir=),\n", + " Step(x=3, y=1, dir=),\n", + " Step(x=3, y=2, dir=),\n", + " Step(x=2, y=2, dir=),\n", + " Step(x=1, y=2, dir=),\n", + " Step(x=1, y=1, dir=),\n", + " Step(x=0, y=1, dir=),\n", + " Step(x=0, y=0, dir=)]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace_tour('FFLRLLFLRL')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Step(x=0, y=0, dir=),\n", + " Step(x=1, y=0, dir=),\n", + " Step(x=1, y=1, dir=),\n", + " Step(x=0, y=1, dir=),\n", + " Step(x=-1, y=1, dir=),\n", + " Step(x=-2, y=1, dir=),\n", + " Step(x=-2, y=0, dir=),\n", + " Step(x=-2, y=-1, dir=),\n", + " Step(x=-2, y=-2, dir=),\n", + " Step(x=-2, y=-3, dir=),\n", + " Step(x=-1, y=-3, dir=),\n", + " Step(x=0, y=-3, dir=),\n", + " Step(x=1, y=-3, dir=),\n", + " Step(x=1, y=-2, dir=),\n", + " Step(x=1, y=-1, dir=),\n", + " Step(x=0, y=-1, dir=),\n", + " Step(x=0, y=-2, dir=),\n", + " Step(x=-1, y=-2, dir=),\n", + " Step(x=-1, y=-1, dir=),\n", + " Step(x=-1, y=0, dir=),\n", + " Step(x=0, y=0, dir=)]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace_tour('FLLFFLFFFLFFLFLLRRFR')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Step(x=0, y=0, dir=),\n", + " Step(x=1, y=0, dir=),\n", + " Step(x=2, y=0, dir=),\n", + " Step(x=2, y=-1, dir=),\n", + " Step(x=3, y=-1, dir=),\n", + " Step(x=3, y=0, dir=),\n", + " Step(x=3, y=1, dir=),\n", + " Step(x=4, y=1, dir=),\n", + " Step(x=4, y=2, dir=),\n", + " Step(x=3, y=2, dir=),\n", + " Step(x=2, y=2, dir=),\n", + " Step(x=1, y=2, dir=),\n", + " Step(x=0, y=2, dir=),\n", + " Step(x=0, y=3, dir=),\n", + " Step(x=0, y=4, dir=),\n", + " Step(x=-1, y=4, dir=),\n", + " Step(x=-1, y=3, dir=),\n", + " Step(x=-2, y=3, dir=),\n", + " Step(x=-2, y=2, dir=),\n", + " Step(x=-1, y=2, dir=),\n", + " Step(x=-1, y=1, dir=),\n", + " Step(x=-2, y=1, dir=),\n", + " Step(x=-2, y=0, dir=),\n", + " Step(x=-1, y=0, dir=),\n", + " Step(x=-1, y=-1, dir=),\n", + " Step(x=0, y=-1, dir=),\n", + " Step(x=0, y=0, dir=)]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def positions(trace):\n", + " return [(s.x, s.y) for s in trace]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0, 0),\n", + " (1, 0),\n", + " (2, 0),\n", + " (2, -1),\n", + " (3, -1),\n", + " (3, 0),\n", + " (3, 1),\n", + " (4, 1),\n", + " (4, 2),\n", + " (3, 2),\n", + " (2, 2),\n", + " (1, 2),\n", + " (0, 2),\n", + " (0, 3),\n", + " (0, 4),\n", + " (-1, 4),\n", + " (-1, 3),\n", + " (-2, 3),\n", + " (-2, 2),\n", + " (-1, 2),\n", + " (-1, 1),\n", + " (-2, 1),\n", + " (-2, 0),\n", + " (-1, 0),\n", + " (-1, -1),\n", + " (0, -1),\n", + " (0, 0)]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "positions(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def valid(trace):\n", + " return (trace[-1].x == 0 \n", + " and trace[-1].y == 0 \n", + " and len(set(positions(trace))) + 1 == len(trace))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLLFF'))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid(trace_tour('FFLLLFRR'))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid(trace_tour('F'))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid(trace_tour('LLLL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def chunks(items, n=2):\n", + " return [items[i:i+n] for i in range(len(items) - n + 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['abcdefg',\n", + " 'bcdefgh',\n", + " 'cdefghi',\n", + " 'defghij',\n", + " 'efghijk',\n", + " 'fghijkl',\n", + " 'ghijklm',\n", + " 'hijklmn',\n", + " 'ijklmno',\n", + " 'jklmnop',\n", + " 'klmnopq',\n", + " 'lmnopqr',\n", + " 'mnopqrs',\n", + " 'nopqrst',\n", + " 'opqrstu',\n", + " 'pqrstuv',\n", + " 'qrstuvw',\n", + " 'rstuvwx',\n", + " 'stuvwxy',\n", + " 'tuvwxyz']" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import string\n", + "chunks(string.ascii_lowercase, 7)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the [Shoelace formula](https://en.wikipedia.org/wiki/Shoelace_formula)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def shoelace(trace):\n", + " return abs(sum(s.x * t.y - t.x * s.y for s, t in chunks(trace, 2))) // 2" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "shoelace(trace_tour('FFLRLLFLRL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "shoelace(trace_tour('FLLFFLFFFLFFLFLLRRFR'))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "shoelace(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def valid_prefix(tour):\n", + " current = Step(0, 0, Direction.RIGHT)\n", + " prefix = []\n", + " posns = []\n", + " for s in tour:\n", + " current = step(s, current)\n", + " prefix += [s]\n", + " if (current.x, current.y) in posns:\n", + " return ''\n", + " elif current.x == 0 and current.y == 0: \n", + " return ''.join(prefix)\n", + " posns += [(current.x, current.y)]\n", + " if current.x == 0 and current.y == 0:\n", + " return ''.join(prefix)\n", + " else:\n", + " return ''" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mistake_positions(trace, debug=False):\n", + " mistakes = []\n", + " current = trace[0]\n", + " posns = [(0, 0)]\n", + " for i, current in enumerate(trace[1:]):\n", + " if (current.x, current.y) in posns:\n", + " if debug: print(i, current)\n", + " mistakes += [Mistake(i+1, current)]\n", + " posns += [(current.x, current.y)]\n", + " if (current.x, current.y) == (0, 0):\n", + " return mistakes[:-1]\n", + " else:\n", + " return mistakes + [Mistake(len(trace)+1, current)]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def returns_to_origin(mistake_positions):\n", + " return [i for i, m in mistake_positions\n", + " if (m.x, m.y) == (0, 0)]" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'FFLRLLFLRL'" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid_prefix(sample_tours[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all(valid_prefix(t) == t for t in sample_tours)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid_prefix(sample_tours[0] + 'FLLLL') == sample_tours[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Mistake(i=10, step=Step(x=0, y=0, dir=)),\n", + " Mistake(i=13, step=Step(x=0, y=-1, dir=))]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mistake_positions(trace_tour(sample_tours[0] + 'F'))" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Mistake(i=10, step=Step(x=0, y=0, dir=)),\n", + " Mistake(i=13, step=Step(x=1, y=0, dir=)),\n", + " Mistake(i=14, step=Step(x=0, y=0, dir=)),\n", + " Mistake(i=15, step=Step(x=0, y=-1, dir=)),\n", + " Mistake(i=17, step=Step(x=0, y=-1, dir=))]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mistake_positions(trace_tour(sample_tours[0] + 'FLLLL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'FFLRLLFLRL'" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(sample_tours[0] + 'FLLLL')[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def random_walk(steps=1000):\n", + " return ''.join(random.choice('FFLR') for _ in range(steps))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid_prefix(random_walk(1000))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'FFRRFR'" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "valid_prefix(random_walk(1000))" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "walks = []\n", + "while len(walks) < 10:\n", + " w = valid_prefix(random_walk())\n", + " if len(w) > 30: walks += [w]" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['RLFFLRFFFFRRLFFFRFFFFRFFLFFFRFRF',\n", + " 'FFFFFLLFFRRLFFFFLLFFRLRFFLFFLRLL',\n", + " 'LRLRLFFFFLLRLRLRFLFFFRLFLFFFLRLL',\n", + " 'FLFFFFLFRLFFFFRLRFLLFFFFFFLRFLFLFLRFRFFRFFFFLRFFFLFRLRFLLFFFFRLFLFFR',\n", + " 'LLFRLRFFLLRFRFLFFFLRLFFLFRFFFLFFRFFLFFFFLLFFFRFRFFLFRF',\n", + " 'FLLFLFFFRLFFLLRFFFFLRFLFFLFFFFLRRF',\n", + " 'FFLFRLLFFRFFFLRLFRLFLFFRLFFFLFFFRFRLRLFFLRRFFLLRLRFLFFLFFRFLFLLRRFFFRL',\n", + " 'RFFFFFLLRLFFFRLFLRFLLFRFFFFFFFLLFFFFRLLR',\n", + " 'LLFFFRLLFFFRFLLFRFFLLRFFLRLFLRRFLL',\n", + " 'FLLRFLRFFRRFLFFRRLFFFFFFRFFRFFRL']" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "walks" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Step(x=0, y=0, dir=),\n", + " Step(x=1, y=0, dir=),\n", + " Step(x=1, y=1, dir=),\n", + " Step(x=0, y=1, dir=),\n", + " Step(x=0, y=0, dir=)]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace_tour('FLLL')" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-1, 3)" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "plt.axis('on')\n", + "plt.arrow(0, 0, 0.8, 0, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n", + "plt.arrow(0.2, 0, 0, 1, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n", + "plt.xlim([-1, 2])\n", + "plt.ylim([-1, 3])" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def bounds(trace):\n", + " return (max(s.x for s in trace),\n", + " max(s.y for s in trace),\n", + " min(s.x for s in trace),\n", + " min(s.y for s in trace))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 2, -13, -13)" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bounds(trace_tour('RFRFFLRFLFFRRFFRRRRLLLRRRRRRFRLFRFFRFFRRFRLRRFLLFRLLFRFLFLFRFRLLFRLFRFLRRLLFRRRFRRRRLLFLFRFRRFFRRLLLRLRRFRLRRFFRRFLFRRLLRRFFRFRRRRRFLLLLLRRFFFLLFFFRRLFLFFLRRRFRFLLFFRRLLRFLLRRF'))" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n", + " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None, filename=None):\n", + " plt.axis('on')\n", + " plt.axes().set_aspect('equal')\n", + " for s, t in chunks(trace, 2):\n", + " w, h = plot_wh[t.dir]\n", + " plt.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n", + " xh, yh, xl, yl = bounds(trace)\n", + " if xybounds is not None: \n", + " bxh, byh, bxl, byl = xybounds\n", + " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", + " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n", + " else:\n", + " plt.xlim([xl-1, xh+1])\n", + " plt.ylim([yl-1, yh+1])\n", + " if filename:\n", + " plt.savefig(filename)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None):\n", + "# plt.ioff()\n", + "# if fig is None:\n", + "# fig = plt.figure()\n", + "# ax = fig.gca()\n", + "# if subplot_details is not None:\n", + "# ax = fig.add_subplot(*subplot_details)\n", + "# plt.axis('on')\n", + "# # plt.axes().set_aspect('equal')\n", + "# ax.set_aspect('equal')\n", + "# for s, t in chunks(trace, 2):\n", + "# w, h = plot_wh[t.dir]\n", + "# ax.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n", + "# xh, yh, xl, yl = bounds(trace)\n", + "# if xybounds is not None: \n", + "# bxh, byh, bxl, byl = xybounds\n", + "# ax.set_xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", + "# ax.set_ylim([min(yl, byl)-1, max(yh, byh)+1])\n", + "# else:\n", + "# ax.set_xlim([xl-1, xh+1])\n", + "# ax.set_ylim([yl-1, yh+1])\n", + "# plt.close(fig)\n", + "# return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def pqr(p, q, r):\n", + " return '{}:{};{}'.format(p, q, r)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'1:2;3'" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pqrt = (1, 2, 3)\n", + "pqr(*pqrt)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nf/99T6fT/tnPftY3b95clDOOVuG5N+xzOcmXFr/Ln19aPOXXZymdJkD/0mrdunXceuutABw8eJBx\n48YVzfsNjhw5grtTVVXFxRdfzO9//3sAampq2LBhA3PmzIk84akOHDjAJz7xCcyGXbFKggr20iKA\nu//C3f/a3S8eLASjwYQJE4omBADV1dWMGTOGjRs38uabbw48wbq7u3nggQciTze4c889VyEoYsXz\n0y1n5Oqrr6alpYWGhgYAHnroIVauXBl5KilFejtyiaurq2PZsmV0dnbS2trKsmXLYo8kJUorAxEB\nFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEU\nAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQD\nEQkUAxEBFAMRCRQDEQEUg484evQo48ePp7y8HIAFCxZQWVnJ7t27I08mcvblFQMzu9XMfmtmJ8zs\nc0kNFUtFRQWHDx/m+PHjALg7vb29nHPOOZEnEzn78l0Z7ARuBrYmMEt0ZWVlLFmy5CMfy2QyNDQ0\nRJro9J5//nk2b96Mu8ceRUaJvGLg7h3uvhewhOaJrqWlZeA0AWDNmjURpzm9RYsWceONN3LFFVco\nCpIIS+KHyMx+Cdzr7r8ZYhsvlR/Y5cuX861vfYu6ujquvfba2OMM6ic/+cnA/ZqaGsaMGcOf/vQn\nRUFOYWa4+7C/sNM57GgTcP7JHwIceNDdfzqSoVasWDFwP5PJkMlkRvLlBdPS0sL69evZs2fPR550\nxaq3t5cjR47w9a9/PfYoUgSy2SzZbHbEX6eVQYn6/Oc/z/bt2ykvL2fhwoW0tLTwqU99KvZYUoQS\nWxmM5JgJ7kuGMXfuXKZOnaoISGLyWhmY2VeAR4E64BCw3d1vPM22WhmIRJDryiCR04RcKAYiceQa\nA70DUUQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBE\nAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQC\nxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEgDxjYGaPmNluM9tuZhvMrDapwUSksPJdGfw3MMXd\nLwf2Ag/kP1LxyGazsUcYkVKbFzRzMckrBu6+2d37wsMXgIb8RyoepfafXmrzgmYuJkleM/gnYGOC\n+xORAkoPt4GZbQLOP/lDgAMPuvtPwzYPAsfcfe1ZmVJEzjpz9/x2YPaPwNeAme7eM8R2+R1IRM6Y\nu9tw2wy7MhiKmd0A3AfMGCoEuQ4jIvHktTIws71ABXAgfOgFd789icFEpLDyPk0QkdGhoO9ANLNb\nzey3ZnbCzD5XyGOPhJndYGZ7zOx/zGxJ7HmGY2ZPmtk+M9sRe5ZcmFmDmW0xs11mttPM7oo903DM\nrNLMXjSzV8PMzbFnyoWZlZnZb8zsP4fbttBvR94J3AxsLfBxc2ZmZcBjwBxgCrDQzCbHnWpYT9E/\nb6k4Dtzj7pcCXwDuKPbvcbgmdp27XwFcDtxoZtMij5WLRcCuXDYsaAzcvcPd99L/8mSxmgbsdfc/\nuPsx4MfA/MgzDcndtwEHY8+RK3d/z923h/tdwG6gPu5Uw3P3w+FuJf0X34v6HNvMGoAvAz/MZXv9\nodKp6oG3T3r8DiXwg1qqzGwi/b9pX4w7yfDCkvtV4D1gk7v/OvZMw/gXoIkco5V4DMxsk5ntOOm2\nM/z7N0kf6ywZbNVS1L8BSpWZjQXWA4vCCqGouXtfOE1oAK42s0tjz3Q6ZnYTsC+swIwcVuN5vc9g\nMO4+K+l9Ftg7wKdPetwAvBtpllHLzNL0h2CNuz8be56RcPdOM8sCN5Dj+XgEjcA8M/syUA2cY2b/\n7u7/cLoviHmaUKzXDX4NTDKzz5hZBfC3wLBXYotATvUvIj8Cdrn7d2MPkgszqzOzceF+NXA9sCfu\nVKfn7kvd/dPufhH9P8NbhgoBFP6lxa+Y2dvAdKDNzIruD5vc/QTwz/T/efbrwI/dfXfcqYZmZmuB\nduCvzOwtM7st9kxDMbNG4O+AmeGlut+Ed7MWs08CvzSz7fRf3/gvd/955JkSpTcdiQigVxNEJFAM\nRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRASA/wNQM89DiBxhRAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n0H8Y6szEx/7LWO/o6Ig93i42Nm300lml/o17vuELfr+gIGccqMLPXp8/yzmfJkDXW4t38Nlbi7u8\nfBbTaQKA1RuP/fljXHzYxQBs2r6JYYOGFcz9Bttbt+M4g0oHcdCdB7Fm0xoAhpQN4YnJTzBxzMTI\nE+7q420fs2flnpj1uWKVBOXzNAF3fxb4ehL7KlTDK4fHHuFzKssqAXjmnWd4d/O7GIbjNLU2ccNz\nNxRkDPYavFfsEaQXhfEyJ1/aCTUnUJ+up6aqBoCbT72ZWafOijyVFCPdjlzkqgdXM2P8DLY0b6Fh\naQMzxs+IPZIUKa0MRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxE\nJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQk\nUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBIDS2AMUkh1tOxhx6wiaWpsAmPzYZMpKymi8vJFD\n9z408nQiu1dOKwMzu9jMfmtm7WZ2dFJDxVKeKmdb6zbaOtoAcJyW9hb2qNgj8mQiu1+upwnLgQuB\nRQnMEl0qlWJa7bTPfS59QJqaqppIE/VsyftLWLBmAe4eexQZIHKKgbuvcvfVgCU0T3T16XrKUmVd\nz+f82ZyI0/RsyrNTOPvBsznqF0cpCpIIXTP4gk9XBz/9r59SXVnN1fOujj1St1778DUA3lz/Jhc8\ncgGDywZHnkiKXZ8xMLP5wD47fwpw4EZ3f7o/B5s5c2bX43Q6TTqd7s+35019up7HVzzOyo9X8uTK\nJ2OP06eW9ha2t27n8mMujz2KFIBMJkMmk+n391kSy0szex641t1f72Ub11I2OcfeeyyNHzVSVlLG\nJYdfQn26nv2H7R97LClAZoa793kqn+RpwoC5blAMzj34XI7Y5whFQBKT08rAzC4A7gSqgc1Ao7uf\n3cO2WhmIRJDtyiCR04RsKAYicWQbA92OLCKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIg\nIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAi\ngGIgIoFiICKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAiQI4xMLPZZva2\nmTWa2RNmVpXUYCKSX7muDH4DjHX3I4HVwA25j1Q4MplM7BH6pdjmBc1cSHKKgbsvcPeO8PRFoCb3\nkQpHsf2jF9u8oJkLSZLXDL4HzEtwfyKSR6V9bWBm84F9dv4U4MCN7v502OZGoNXdH9otU4rIbmfu\nntsOzL4D/AA4zd2be9kutwOJyJfm7tbXNn2uDHpjZmcB1wPjewtBtsOISDw5rQzMbDVQDnwcPvWi\nu1+ZxGAikl85nyaIyMCQ1zsQzexiM/utmbWb2dH5PHZ/mNlZZrbSzN4xs2mx5+mLmd1nZuvNbFns\nWbJhZjVmttDMVpjZcjO7OvZMfTGzCjN7yczeCDPXxZ4pG2aWMrPXzew/+to237cjLwcuBBbl+bhZ\nM7MUcBcwERgLXGJmh8Sdqk8P0DlvsWgDrnH3w4ATgasK/e84XBM71d2PAo4Ezjaz4yOPlY0pwIps\nNsxrDNx9lbuvpvPtyUJ1PLDa3d9z91bgEWBS5Jl65e6LgU2x58iWu3/k7o3h8VbgbWBk3Kn65u7b\nwsMKOi++F/Q5tpnVAN8E/jWb7fWLSrsaCazd6fk6iuA/arEys9F0vtK+FHeSvoUl9xvAR8B8d38l\n9kx9+CdgKllGK/EYmNl8M1u208fy8Od5SR9rN+lu1VLQrwDFysyGAo8DU8IKoaC5e0c4TagBTjCz\nw2LP1BMzOwdYH1ZgRhar8ZzuM+iOu5+Z9D7zbB0waqfnNcAHkWYZsMyslM4QzHH3p2LP0x/uvsXM\nMsBZZHk+HkEtcL6ZfROoBPYws39392/39A0xTxMK9brBK8AYMzvAzMqBvwT6vBJbALKqfwG5H1jh\n7nfEHiQbZlZtZsPC40rgDGBl3Kl65u7T3X2Uux9I5//hhb2FAPL/1uIFZrYWGAfMNbOC+8Umd28H\n/o7OX89+C3jE3d+OO1XvzOwhYClwsJm9b2aXxp6pN2ZWC3wLOC28Vfd6uJu1kO0LPG9mjXRe3/hP\nd/915JkSpZuORATQuwkiEigGIgIoBiISKAYiAigGIhIoBiICKAYiEigGIgLA/wNoeIjlrOj5kwAA\nAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'), colour='g')" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour('FFFLLFFL'))" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[Step(x=0, y=0, dir=),\n", + " Step(x=1, y=0, dir=),\n", + " Step(x=1, y=1, dir=),\n", + " Step(x=1, y=2, dir=),\n", + " Step(x=1, y=3, dir=),\n", + " Step(x=1, y=4, dir=),\n", + " Step(x=1, y=5, dir=),\n", + " Step(x=0, y=5, dir=),\n", + " Step(x=-1, y=5, dir=),\n", + " Step(x=-1, y=6, dir=),\n", + " Step(x=-2, y=6, dir=),\n", + " Step(x=-3, y=6, dir=),\n", + " Step(x=-4, y=6, dir=),\n", + " Step(x=-5, y=6, dir=),\n", + " Step(x=-6, y=6, dir=),\n", + " Step(x=-6, y=7, dir=),\n", + " Step(x=-7, y=7, dir=),\n", + " Step(x=-7, y=8, dir=),\n", + " Step(x=-7, y=9, dir=),\n", + " Step(x=-8, y=9, dir=),\n", + " Step(x=-8, y=8, dir=),\n", + " Step(x=-8, y=7, dir=),\n", + " Step(x=-8, y=6, dir=),\n", + " Step(x=-8, y=5, dir=),\n", + " Step(x=-8, y=4, dir=),\n", + " Step(x=-8, y=3, dir=),\n", + " Step(x=-8, y=2, dir=),\n", + " Step(x=-7, y=2, dir=),\n", + " Step(x=-7, y=1, dir=),\n", + " Step(x=-7, y=0, dir=),\n", + " Step(x=-6, y=0, dir=),\n", + " Step(x=-5, y=0, dir=),\n", + " Step(x=-5, y=1, dir=),\n", + " Step(x=-5, y=2, dir=),\n", + " Step(x=-6, y=2, dir=),\n", + " Step(x=-6, y=3, dir=),\n", + " Step(x=-6, y=4, dir=),\n", + " Step(x=-5, y=4, dir=),\n", + " Step(x=-4, y=4, dir=),\n", + " Step(x=-3, y=4, dir=),\n", + " Step(x=-3, y=3, dir=),\n", + " Step(x=-3, y=2, dir=),\n", + " Step(x=-3, y=1, dir=),\n", + " Step(x=-3, y=0, dir=),\n", + " Step(x=-3, y=-1, dir=),\n", + " Step(x=-2, y=-1, dir=),\n", + " Step(x=-2, y=-2, dir=),\n", + " Step(x=-2, y=-3, dir=),\n", + " Step(x=-2, y=-4, dir=),\n", + " Step(x=-2, y=-5, dir=),\n", + " Step(x=-1, y=-5, dir=),\n", + " Step(x=0, y=-5, dir=),\n", + " Step(x=0, y=-6, dir=),\n", + " Step(x=1, y=-6, dir=),\n", + " Step(x=1, y=-7, dir=),\n", + " Step(x=1, y=-8, dir=),\n", + " Step(x=2, y=-8, dir=),\n", + " Step(x=2, y=-7, dir=),\n", + " Step(x=2, y=-6, dir=),\n", + " Step(x=2, y=-5, dir=),\n", + " Step(x=2, y=-4, dir=),\n", + " Step(x=2, y=-3, dir=),\n", + " Step(x=3, y=-3, dir=),\n", + " Step(x=3, y=-2, dir=),\n", + " Step(x=3, y=-1, dir=),\n", + " Step(x=2, y=-1, dir=),\n", + " Step(x=1, y=-1, dir=),\n", + " Step(x=0, y=-1, dir=),\n", + " Step(x=0, y=0, dir=)]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trace_tour(walks[3])" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nVxR48cr/AwOlW67H9WljAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(walks[3]))" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "long_walks = [w for w in walks if len(w) >= 30]\n", + "len(long_walks)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nirCFtp8KBQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(long_walks[0]))" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['RLFFLRFFFFRRLFFFRFFFFRFFLFFFRFRF',\n", + " 'FFFFFLLFFRRLFFFFLLFFRLRFFLFFLRLL',\n", + " 'LRLRLFFFFLLRLRLRFLFFFRLFLFFFLRLL',\n", + " 'FLFFFFLFRLFFFFRLRFLLFFFFFFLRFLFLFLRFRFFRFFFFLRFFFLFRLRFLLFFFFRLFLFFR',\n", + " 'LLFRLRFFLLRFRFLFFFLRLFFLFRFFFLFFRFFLFFFFLLFFFRFRFFLFRF',\n", + " 'FLLFLFFFRLFFLLRFFFFLRFLFFLFFFFLRRF',\n", + " 'FFLFRLLFFRFFFLRLFRLFLFFRLFFFLFFFRFRLRLFFLRRFFLLRLRFLFFLFFRFLFLLRRFFFRL',\n", + " 'RFFFFFLLRLFFFRLFLRFLLFRFFFFFFFLLFFFFRLLR',\n", + " 'LLFFFRLLFFFRFLLFRFFLLRFFLRLFLRRFLL',\n", + " 'FLLRFLRFFRRFLFFRRLFFFFFFRFFRFFRL']" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "walks" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n8v89qQ80wuYWhQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour('FLFFLRFRLFRRRR'))" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(313, [])" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w = random_walk()\n", + "ms = mistake_positions(trace_tour(w))\n", + "len(ms), returns_to_origin(ms)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQREEYVr+H+clU6giyaiIAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(w))" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trim_loop(tour, random_mistake=False):\n", + " trace = trace_tour(tour)\n", + " mistakes = mistake_positions(trace)\n", + " if random_mistake:\n", + " end_mistake_index = random.randrange(len(mistakes))\n", + " else:\n", + " end_mistake_index = 0\n", + "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace; {}'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n", + " # while this mistake extends to the next step in the trace...\n", + " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n", + " end_mistake_index + 1 < len(mistakes) and\n", + " mistakes[end_mistake_index].i + 1 == \n", + " mistakes[end_mistake_index + 1].i):\n", + "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n", + " # push this mistake finish point later\n", + " end_mistake_index += 1\n", + " mistake = mistakes[end_mistake_index]\n", + " \n", + " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n", + " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n", + " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n", + "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n", + " \n", + " # direction before entering the loop\n", + " direction_before = trace[mistake_loop_start].dir\n", + " \n", + " # find the new instruction to turn from heading before the loop to heading after the loop\n", + " new_instruction = 'F'\n", + " if (mistake.i + 1) < len(trace):\n", + " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n", + " new_instruction = 'L'\n", + " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n", + " new_instruction = 'R'\n", + "# if (mistake.i + 1) < len(trace):\n", + "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n", + "# else:\n", + "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n", + " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n", + "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w = 'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'\n", + "w" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nrC2Hf85MaAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "w_short = w[:100]\n", + "plot_trace(trace_tour(w_short))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n", + "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n" + ] + }, + { + "data": { + "image/png": "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\nHk9j8/PzmT59Opdccgk33nhjwuPWrl1LSUkJzz//POPHj/dUc+nSpdx8c3QdujFjxtCrV6+Ex65e\nvZqNGzcC8JOf/KRxnaTzUVV+8Ytf0NDQQFlZGUVFRZ7m3LTxIr4kbCKqqqrYtm0bEP0VICur5f+h\nZPr06UyaNIkhQ4Z4aot999132b17N1VVVQl3mXlZFTHoxv//DbzbzP/5/inkkpkzZyqgr776quex\nS5YsUb+fpwkTJvgaW19f37inOHz4sOfxgObk5Hget23btsa6dXV1nsenw4IFCxTQOXPmeB77pz/9\nyffXVvXce+KW/+PPMT/+8Y8B+OEPf5jmmSQmKyuLwYMHA1BYWJiyugMGDACgU6dO5OQEta5fuO6+\nO7pO4L333pvmmXxVoJ89Vf1P4D+D3KYx5txsT2yM4yzExjjOQmyM4yzExjjOQmyM4yzExjjOQmyM\n4yzExjjOQtyC7N27F/jvtkIv4ouxee1+CkIkEkl5TdfEv7aHDx8OfNsW4pDMmTPH85pKzz33HAC/\n/e1vPdeLrzfV9KT5sFVUVDTer6ysTHhcXV0ds2fPTqq2qvLOO++wevVqz2Pr6+t57bXX2LJli6/a\nr7zyCrt37/Y0Zvr06QAsWLDAV81zau6k6qBvZEgDxKlTp5JqzWvXrp1WVlZ6rvuzn/1MCwsLNRKJ\neB575513aq9evTyPU1Xt3r17Uq+3f//+vupec801aWnZTOaWl5enFRUVvl4v52iAcOPMc4fk5+ez\nYcMG7rvvPn70ox/xzW9+09P4AQMG0KFDB891a2pqKC8v97yeUyQS4fXXXweiF1Do2bNnwmMrKys5\ndOgQAIsXLyYvLy+hcadPn2bcuHEcPHiQ7du309DQ4LkVsaSkhMsvv5z+/fs3Np0kYtWqVTz//PPk\n5+dz9913M3LkyITHzp8/n7feeouCggLGjx/Pt771LU9z7tevHwUFBZ7GJKS5dAd9I0P2xOnitxWx\noaGhcU9x4sQJT2Nra2t9txMeP368cWxDQ4OnsarRPdOUKVM8j/vzn/+sgN52222ex8ZbRRcvXux5\nbLKwVkTTHBFpbEVs3769p7G5ubmN9722E8ZXVBw6dGhKV3S86qqrAG8XMIi76aabvvJvS2EhNsZx\nFmJjHGchNsZxFmJjHGchNsZxFmJjHGchNsZxSYdYRIpFZLWIfCwiH4nIT4OYmDEmMUGcdhkBHlHV\n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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "trimmed = trim_loop(w_short)\n", + "print('{}\\n{}'.format(w_short, trimmed))\n", + "plot_trace(trace_tour(trimmed))" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n", + "RFFRRFFFRFFRFLLRFLFFLLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "trimmed2 = trim_loop(trimmed)\n", + "print('{}\\n{}'.format(trimmed, trimmed2))\n", + "plot_trace(trace_tour(trimmed2))" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Mistake(i=104, step=Step(x=-4, y=6, dir=)),\n", + " Mistake(i=105, step=Step(x=-5, y=6, dir=)),\n", + " Mistake(i=106, step=Step(x=-5, y=7, dir=)),\n", + " Mistake(i=107, step=Step(x=-5, y=8, dir=)),\n", + " Mistake(i=108, step=Step(x=-5, y=9, dir=)),\n", + " Mistake(i=115, step=Step(x=-5, y=12, dir=)),\n", + " Mistake(i=116, step=Step(x=-5, y=11, dir=)),\n", + " Mistake(i=127, step=Step(x=2, y=11, dir=)),\n", + " Mistake(i=130, step=Step(x=3, y=11, dir=)),\n", + " Mistake(i=132, step=Step(x=3, y=11, dir=))]" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mistake_positions(trace_tour(w[:130]))[-10:]" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step(x=40, y=36, dir=)\n" + ] + }, + { + "data": { + "image/png": "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\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "w_tour_start = w #[:250]\n", + "print(trace_tour(w_tour_start)[-1])\n", + "plot_trace(trace_tour(w_tour_start))" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n", + "RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF\n", + "Step(x=40, y=36, dir=)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "w_tour = w_tour_start\n", + "w_trace = trace_tour(w_tour)\n", + "mks = mistake_positions(w_trace)\n", + "while len(mks) > 1:\n", + "# print(len(mks))\n", + " w_tour = trim_loop(w_tour)\n", + " w_trace = trace_tour(w_tour)\n", + " mks = mistake_positions(w_trace)\n", + "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n", + "plot_trace(trace_tour(w_tour))" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n", + " trace = trace_tour(tour)\n", + " mistake_limit = 1\n", + " if trace[-1].x == 0 and trace[-1].y == 0:\n", + " mistake_limit = 0\n", + " mistakes = mistake_positions(trace)\n", + " \n", + " old_mistake_count = len(mistakes)\n", + " mistake_reduction_tries = 0\n", + " \n", + " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n", + " tour = trim_loop(tour)\n", + " trace = trace_tour(tour)\n", + " mistakes = mistake_positions(trace)\n", + " if len(mistakes) < old_mistake_count:\n", + " old_mistake_count = len(mistakes)\n", + " mistake_reduction_tries = 0\n", + " else:\n", + " mistake_reduction_tries += 1\n", + " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n", + " return ''\n", + " else:\n", + " return tour" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF'" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_trimmed = trim_all_loops(w)\n", + "w_trimmed" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(trim_all_loops(w)))" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def reverse_tour(tour):\n", + " def swap(tour_step):\n", + " if tour_step == 'R':\n", + " return 'L'\n", + " elif tour_step == 'L':\n", + " return 'R'\n", + " else:\n", + " return tour_step\n", + " \n", + " return ''.join(swap(s) for s in reversed(tour))" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(w_trimmed))" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nSS/UKxgF+/bt45JLLuGbb74Je0+yfjalfdQr6BCDBg1i3759ISPNJ02alGj1lASihuUQmkonvVHD\ncohevXppdvo0Rg3LIWpra3WKRxqjhqUoDqCG5RDHjh1LtApKAlHDcoiWUelKeqGG5RDav0pvNPLC\nIawJievWrQOgsLCQkSNHhrx37969HDp0CPhuNVsrWfegQYPo109X50421LAcoqysjLVr1/K9733P\nPnfo0CH69OkTdF9FRQVDhgxpsyyN3kg+tCnoENYESGsDOH78eKv7rPSm1n3WCrfGGJYsWRJXnZXY\noYblMnSxmNQg2oyOz/gzNm4Skb+ISEHANVdndFy9enWr9f1OnjzpiCyrxrKWkw7EqrFCTZoMdX8k\nLFq0KOizWUuuhdry8vKCjvfv39++gBiwZcuWVmstHjlyJC6y40G0fawVwEPGGK+IzAVmA7NFZCTf\nZXTsD6wUkWFuCmN/6KGHAJg2bRrgWy/w22+/JS8vL+ay2sq4aK16G6qmClx2uiPMnDkT8H22U6dO\nUVRUZL806urqKCwsxOPxUFdXR9++fTlx4gTGGJYuXcr8+fMdW9otkD/+8Y80NTUxbdo0vF4vy5Yt\n4+233+bWW291XHY8iMqwjDErAw4/Af6bf/9f8Gd0BPaKiJXRcX008mKJ5X3705/+BPgMy2naaubF\n0rB69+5NVVWV/dkiZenSpZ2S1xny8/OB777/ZcuWxU12PIilV3AGYP1n+gHrAq65LqNjZWVlq3Nz\n586loKCg1Sq28F02kMzMTE6cOGFnBWlqarJrndLSUm688cawMjvaf7KaiU8++STgS6Awe/ZswNe8\nfPHFF6mqqsIYE1T2t99+2yE5gVgOFst5cvDgQYwxFBUVcffdd3e63Ej461//yjfffEN9fT0zZsxg\n+PDhjspzkphkdBSRh4EmY8zSgHta4qqMjueeey719fX2sYgwf/78qMutq6uzm2IWVgs41KBxYB+r\nZQ01ceJEAB555BH7XL9+/bjlllu45ZZbeOWVV8LqYTV1O4o1HHD//ffz29/+Nuja+PHjg4YPosH6\n3BYjR47kzTff5M033wTg97//PYcPH46JrFgR14yOInIrcA3w/YDTrs/oWFFREdRZjsWKSyJCY2Nj\nyPMQet11q7YL1ew766yzgsawRIR9+/YB3zVlY91ttWq7luWLSEx/6C0zqnzxxRf2/sSJE1m7dm3M\n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\ngjJMbcJZvAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(reverse_tour(w_trimmed)))" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nH6uGZnvGhXMvAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "w1 = random_walk()\n", + "w2 = random_walk()\n", + "plot_trace(trace_tour(w1))\n", + "w1bounds = bounds(trace_tour(w1))\n", + "plot_trace(trace_tour(w2), colour='r', xybounds=w1bounds)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "w1 = 'RLFFFLFFLRFLFLRFFFFFFLLFFFLFLFLFFLLLFFFFFRFFLRFLFFLFFFFLLFLLRFFFFLRLFRRLLFLRFLFLLFFLFFRFFFFLRFLLRFFLRFFRFRLFRFRFFLFLRFRLLFRLFFLLLFFFRFLFFLFLLRFRFLFRRFRFLLFRFFFFLFFFRLFFFFRFRFRFLFFRFFFLFRFFRRLRFRFFLFFFRRFLFFRRRFLFFLRFFLLFFLFRFFRFRRFFRRLLLFFFFFFFRFLFLFLLFRFFFLFFFRRFFLFFRRFFLRFRLRFFFRFRLFRLFRRFLLLFLRFLFRFFRLFLFRFFFFLFRLFFRRFFRFRFFFFFFLFLRLFFFFRLRFFRLFFLFFFLRFFFFLRFFRFFRFRFFRFFRRRFFRFLRLLLFLFFFLFRFFRLFRLLFLFLFLLRFLFLFLFLFFRFFRRLLFRRLRLFFFFLRLRRRFFRFFRRFFRLLFFLLLLFLLLLFFRLFFRRRRFFRRRRLFFLFFFRLLRLFRLRFLFRFRRFLLLFFFFFLFFRRRFRLRLFRLLLRFLFFFFFFFFRRFFFFRLRRFFRLFFRLFFLLLFFLFFFFFLFFLFRRRFLFLFFFFLFLFLLLRFRFLFRLFLFFLRFLLFLRLLLFLFRRLFFRLFLRLFFRFLFLFFFRFRFRFFRFFRRFFRFRFFFFFRRFFLFFRFLRFFFLFFFFRFRLFRFFRRFFFFLFFFFLRFRFFLLLRLRRLLFFLRLLFFFRFFFFFFLFRFFFLRFRLRFFLLFFRLRFFFFRRFRFFLRFRFRFLFFFRFFFFRLFLRLFFLRLFFFFFRLFLRFFRLLFFRLFRFFFLRLRFLFLFFFLFFFFLFLRRFFRLLFFLFFLFRLFFFRLFRFRFFLFFLFLLFRLLFFRFLFLFFFFLFLRFRFRLFRRFLLRRRRFFRFLFRFFLLFRRRFRLRRLRFFLRLFLLFLLFFFRLLFLRFRLFLRFLRFFRLLRLRRFFFLLFFLLFLFRFLLLRFRRLFLLLRRFFFRFFFF\n", + "w2 = 'LFLFFFFFFRFFFRRLLFFFFLFFFLFFLFFLLFFFLFLLFFRFRRLFFRLLLRFRLRLRRFFFFLRFLFLLLLRRFFRFLFFFFRFFFLLLRFRFFFLFRRFRLFFLLFLRFFFRFRLFFLFFFRLFFFRFFFRFRFRFFRFRRRLFRFRRFFRFRLRLFLFFFRLFRLRFLRFFFLFFRRFFRLLLLFRFFRFLRFFRFLLLRRFLFFFLLRLLFFFFLRFLLLLFRRFLRFFFLFFFLFRLLFRRLLLLFRLRRLRLFFFRFFFFFLRRFFLFFRFLRFLLFFFLFRLLLFRRRFFLLLLRFFLFFFRLRRFFFFLLRFFLFRFLRFRFLLFFRRLLFFRLRFFFRLFLRFLLFRLLLRRRFRFRRFFFRFFFFFLRFFRLFFLFFRRRRLFFRFRLFFRLRLFFLRFFRLLFFRFFLLRRLRRLRLLFLLFRRFLFFLLFFFLFFRFRFLFRFLFFFFLFLRRFLRLRLFLFRFFLFLFFFFLRLLFRFLLRFLRRFFFLRFFLLRFFRRFLFFRFRFFFFFFFFLFLRLFLFFFFLLRFRFLFFLRFFRFFFLLFRLFLRLFFLRFFLLLFFRFLFFRFFFFLRRFRLFFFLFLLLLFFFFLRFFRFFFRFRLRRLRFFRFFLLFLFRFFFRRFFFFFFFRFRLFFFLFRFFFFFFRFRLRFFLLLFFLRFRLLLLLLRFFFFLFFLFFLFRLFRLFFFLLFFFFRRRFRFRFLFLFFRLFFFLLRRFFFFLLFFFFFRRFFLRFLFFFFFLLFFFRFFLFLRFRFFFLFFFFRLRRFFRRFLRFLLLRRLRFLLFFRRLFFFFLFFRFFLRLLRRRLLLFFFLLFFLFFFFFFFRFFLLFFLRLFFFRFLFFFLLFRRFLRRFLLRFFLRFFFLFFFFLRFRRFRLLFFFFFFFFFLFFFFFRFRFLLLFFLRLFLFRLLFLFFRFFRRFLFFRRRFLFLLLFRFLFLFFFFLLLLLFFFRFFFLRFRLRFFLFFLFFFRFFRLFLFRFRFLFF\n" + ] + } + ], + "source": [ + "print(\"w1 = '{}\".format(w1))\n", + "print(\"w2 = '{}\".format(w2))" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def wander_near(locus, current, limit=10):\n", + " valid_proposal = False\n", + " while not valid_proposal:\n", + " s = random.choice('FFFRL')\n", + " if s == 'F':\n", + " proposed = advance(current, current.dir)\n", + " elif s == 'L':\n", + " proposed = advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " proposed = advance(current, turn_right(current.dir))\n", + " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n", + " valid_proposal = True\n", + "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n", + " return s, proposed" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def seek(goal, current):\n", + " dx = current.x - goal.x\n", + " dy = current.y - goal.y\n", + "\n", + " if dx < 0 and abs(dx) > abs(dy): # to the left\n", + " side = 'left'\n", + " if current.dir == Direction.RIGHT:\n", + " s = 'F'\n", + " elif current.dir == Direction.UP:\n", + " s = 'R'\n", + " else:\n", + " s = 'L'\n", + " elif dx > 0 and abs(dx) > abs(dy): # to the right\n", + " side = 'right'\n", + " if current.dir == Direction.LEFT:\n", + " s = 'F'\n", + " elif current.dir == Direction.UP:\n", + " s = 'L'\n", + " else:\n", + " s = 'R'\n", + " elif dy > 0 and abs(dx) <= abs(dy): # above\n", + " side = 'above'\n", + " if current.dir == Direction.DOWN:\n", + " s = 'F'\n", + " elif current.dir == Direction.RIGHT:\n", + " s = 'R'\n", + " else:\n", + " s = 'L'\n", + " else: # below\n", + " side = 'below'\n", + " if current.dir == Direction.UP:\n", + " s = 'F'\n", + " elif current.dir == Direction.LEFT:\n", + " s = 'R'\n", + " else:\n", + " s = 'L'\n", + " if s == 'F':\n", + " proposed = advance(current, current.dir)\n", + " elif s == 'L':\n", + " proposed = advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " proposed = advance(current, turn_right(current.dir))\n", + " \n", + "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n", + "\n", + " return s, proposed" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20, return_anyway=False):\n", + " trail = ''\n", + " current = Step(0, 0, Direction.RIGHT) \n", + " l = 0\n", + " finished = False\n", + " while not finished:\n", + " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n", + " l += 1\n", + " if l == len(loci) - 1:\n", + " finished = True\n", + " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n", + " trail += s\n", + " current = proposed\n", + "# print('!! Finished loci')\n", + " seek_steps = 0\n", + " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n", + "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n", + "# s, proposed = wander_near(loci[l], current, limit=error+1)\n", + " s, proposed = seek(loci[l], current)\n", + " trail += s\n", + " current = proposed\n", + " seek_steps += 1\n", + " if seek_steps >= seek_step_limit and not return_anyway:\n", + " return ''\n", + " else:\n", + " return trail" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAD7CAYAAABqkiE2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFrhJREFUeJzt3X2MXNV5x/HvM7uz9q5f1y+s3/BrRUmrNkBbIKERJDEE\nbIckUtw0bSJCXtQ/IhElVQJJJW8cpAT+iBKURrSohFptIMQmYEA2kAiEmlYkIdjY2MYOmMQ4yLs2\ntvf9fZ/+Mfcu490Z7+zdOeO7O7+PtNqZO3PvOXPv3DPnnHvOfczdEZHqlbnQGRCRC0uFgEiVUyEg\nUuVUCIhUORUCIlVOhYBIlasNnYCZ6RqkyAXi7jbee0oqBMzsy8DngGFgP3ArsAz4CdAIvAR82t0H\ni2SE3bt389prrwGwa9cuNm7ciLszNDREbW0tNTU1DA4OYma4O2bG8PAw7k5NTQ01NTX09/dTU1Mz\nst2hoSHMjEwmQ01NDX19fdTW1o5sY2hoiKeeeoqNGzdSU1NDb28v2Wx25PX87QMMDg5SW1tLJpMZ\n2fbw8DCZTGZMXgYGBshkMufkZffu3WzatIna2lr6+vqoqak5Jy+F8hpvO3/7mUyGvr4+stnsSF4A\nhoeHR/L65JNPsmnTpnHzWltbS39//zl5Hf1ZCu23/Lw+9thjfPjDHx7Zdv7rZkZ/f3/RvMafLT7G\n8X7LP8bASFo7d+5k06ZNJe+3/NczmQy9vb3U1dUV3K+jj/ETTzzBxo0bR/Zb/J043zEGxnwf8/Ma\n75P879uuXbvYsGHDmLwWOsbuPpKXQudGse9jnJfDhw/zgx/8ID5vSzm9sfEGC5nZMuCXwKXu3m9m\nDwO7gA3ADnffbmb3Anvd/d8LrO/xAR8nHabKwKU05TVNeRlPmvI6Xl7SlNf4pC9VnO/oM4xbEpTa\nJ1ADzDKzWqAeeAt4P/BI9Po24GPjbaS3txd3p7m5GXc/5y8u2cr9Vyityf4Vy2uItMb7XKH2W4jP\nVUpeK7UPh4eHz5tWOffrZD/T0NBQSe/bvn17iafzucYtBNz9LeC7wDHgj0Abuer/WXePi6fj5JoH\nBcWlWFzlue666xJlNgmlpbQudFqVSmdgYCDReuP2CZjZfOAjwCpyBcB24KYCby1ad9q6dSsA3/72\nt1m/fv20PNBKS2ld6HSOHDkCwDe/+c0JrVdKn8DHgQ+5+xei558G3gN8HFji7sNmdjXQ7O5jCof8\nPoHe3l5mzJgxoQyKSGl27NjB5s2bic/pcvYJHAOuNrOZluvd+yBwAHgO2By95xZgZ7ENxM2AwcGC\nFw9EpAxKvRowWil9Ar8GdgB7gJcBA+4D7gC+YmZHgAXA/cW2EV+eqa0NPixBpGpN5ApCvpLOSnff\nCmwdtfgN4KpEqYpI2QWrCZRD3ByI/4tI+aW6EIibA/mj/USkvMbr5C+mIoVAnLmkmRSR8SUdJ1DR\nQiBpx4WIjC+bzSZaryKFQDwJQ80BkfRRx6DINKGOQZEql/RHVncWEpkm8u99MKH1ypyPgjRsWCS9\nKtoc0LBhkfSp6CVCEQkn1X0CcSGg5oBIOEk73is6TkDNAZH0UcegyDSR6rkD6hgUSS+NExCZJlI9\nYlDDhkXCC1YImNklZrbHzF6K/reZ2W1m1mhmz5jZYTN72szmFduGhg2LhBesT8Ddj7j75e5+BfBX\nQBfwKLl7DP7C3f8UeBb4eqIciEhZJJ2qP9HmwHrgdXd/k1wsgm3R8m3AR4utpKsDIuFVqk/gE8CD\n0eMmd28BcPcTwOJiK+nqgEh4wQsBM8sCN5OLQATniTg0mjoGRcJLen5N5Kf5JuC37n4qet5iZk3u\n3mJmS4DWYiveeeedwIUJQyZSLQ4dOgQECEM28kazh4Cn3H1b9Pxu4LS7321mtwON7n5HgfUUhkyk\nAkKGIcPM6sl1Cv4sb/HdwPVmdjh67a5i66tjUCS8pH0CpUYg6mFUx5+7nyZ38o9LHYMi4VXqEqGI\npNSUGDas5oBIOJpFKFLlpkRNQOMERMJJWtOu6J2Fkt4SWUTGl7SmXZGzMq6mJK2uiEg4ag6ITBOp\n7hPQ/QREwtM4AZEql+qagJoDIuml5oBIlatIIRC3VZK2WURkfKkeJ6BLgyLhZbPZROtVtBDQYCGR\ncFI9d0ATiETCS/XVAU0gEglP4wREqlyqawJqDoikV6n3GJxnZtvN7JCZHTCzq5KEIVNzQCR9Sq0J\n3APscvd3Ae8GXmUCYciS9lqKSOmSjsgtJSDpHOB97v4AgLsPunsbEwhDFhcCag6IhJN0RG4pNYG1\nwCkzeyCKTHyfmTUwgTBk8fgANQdE0qeUQqAWuAL4YRSZuItcU0BhyERSJGTcgePAm+7+YvT8EXKF\ngMKQiaTIvn37gEBhyMzseeAL7n7EzJqBhuglhSETSYmkYchKbaTfBvw4ikx8FLgVqAF+amafBY4B\nm4utrOaASHihw5C9DPxNgZcmFIZM9xMQCSfVE4g0TkAkvFTPHYgzNzAwUInkRKpS0qn6FZ1FmPSm\nByISjiYQiUwTqe4T0AQikfTS/QREpgndT0CkyqW6EFBzQCS8VPcJiEh4qS4E1BwQSS81B0SmiVT3\nCWgCkUh4wW4vVg5xTUARiETCCXl7sbJRTEKR9FFzQGSaSHWfgO4nIBJeqqcSi0h4qa4JaJyASHqV\ndOHezH4PtAHDwIC7X2lmjcDDwCrg98DfRUFJxtA4AZH0KrUmMAxc5+6Xu/uV0bKSw5DFbRV1DIqE\nk7SmXWohYAXeW3IYsritonECIuEkrWmXelY68LSZ/cbMPh8tKzkMWVwIaJyASPqUWnS8191PmNli\n4BkzO0yCMGSDg4MKPiISSOi4Ayei/yfN7DHgShKEIfvOd76jMGQigezfvx8IEIYsikCccfdOM5sF\nPANsBT6IwpCJpEbIMGRNwKNm5tH7f+zuz5jZiygMmciUN24h4O5vAJcVWH4ahSETmfIqGoFI4chE\nwgk9TmBS4l5LFQIi4SSN8FXRQkCDhUTCmRI3GlXHoEj66H4CItNEqmsCIhKe7icgUuVSXQjofgIi\n4aW6OaBLgyLhpXqcQFwIqDkgEk7o+wlMSjw+QM0BkfTROAGRKqdxAiLThOIOiFS5pMPy1RwQmSam\nxDgBNQdEwkn1OAERCS/VfQIaNiwSXvDmgJllzOwlM3s8er7azF4ws8Nm9pCZFR0EoGHDIuFVok/g\nS8DBvOd3A9+NwpCdBT5XbEXVBETCC9ocMLMVwAbgP/IWfwB4JHq8DfhYsfVVExAJL3RN4HvAV4mi\nDpnZQuCMu8dFz3FgWaIciEhZBCsEzGwj0OLue8kFJiX6PzrFotcn1BwQCS9kGLJrgJvNbANQD8wB\nvg/MM7NMVBtYAbxVbAMKQyYS3iuvvAIECEN2zpvNrgX+2d1vNrOHgZ+5+8Nmdi/wsrv/W4F1FIZM\npAKShiGbzDiBO4CvmNkRYAFwf7E3qjkgEl7SEYMT6q539+eB56PHbwBXlbKerg6IhJfquQOaQCQS\nXqpvLxZPcVQEIpFwpkQYsqTVFREZX6pnEao5IBJeqvsEdD8BkfBSPZVYRMJLdU1AzQGR8FLdJ6Dm\ngEh4qa4JxG0V1QREwhkYGEi0ni4RikwTU2KcgAYLiaSPbjQqMk2kuk9AE4hEwtM4AZEql+qagJoD\nIuGluhBQc0AkvFQPFoozlzSTIjK+VN9PID75k3ZciMj4go0TMLMZZvYrM9tjZvvNrDlaXnIYsnh8\ngIYNi4QTrDng7n3A+939cuAy4CYzu4oEYcg0bFgknKAdg+7eHT2cQe7mpA68nwmGIVNNQCScpD+y\npcYizJjZHuAE8HPgdeCswpCJpEfSYfklXbOLTvbLzWwu8CjwrkJvK7b+li1bAPjWt77F9ddfrwhE\nIgEcOHAACByBCMDMtgDdwNeAJe4+bGZXA83uflOB9ysCkUgFBItAZGaLzGxe9LgeWA8cBJ4DNkdv\nuwXYWWwbGh8gEl7SPoFSmgNLgW1mliFXaDzs7rvM7BDwEzO7E9jDecKQxYXA4OCgagIigSTteB+3\nEHD3/cAVBZaXHIYs7rDQsGGR9NEEIpFpItVzBzSBSCS9dD8BkWki1VOJ1RwQCS/VhYCaAyLhpbpP\nQETCS3UhoOaASHipLgTUHBAJL+kEIgUkFZkmUn3L8bgmoAhEIuGkuiYQUyxCkfRRx6DINKFxAiJV\nLtV9AiISXqprAmoOiISncQIiVW5K1AQ0TkAknFSHIYuvX2qcgEg4SWvapdxodIWZPWtmB6MwZLdF\nyxvN7JkoDNnT8c1Ii2zjnP8ikh6l/DQPAl9x9z8D3gN80cwuBe4AfhGFIXsW+HqxDag5IBJesD4B\ndz/h7nujx53AIWAF8BFy4ceI/n+02DYUhkwkvIqMEzCz1eSCkr4ANLl7C+QKCmBxohyISFkkrQmU\n3JNgZrOBHcCX3L3TzEq+KKkwZCLhBQ1DZma1wJPAbne/J1p2CLjO3VvMbAnwnLuPiVGoMGQilREs\nDFnkR8DBuACIPA58Jnp83jBkcVtF4chEwhkYGEi03rjNATO7BvhHYH8UntyBbwB3Az81s88Cx3gn\nLmGhbQAqBERCymazidYrJQzZ/wLFuvXXl5JIXAhosJBI+mgCkcg0keq5A5pAJBKe7icgUuVSXRNQ\nc0AkvdQcEKlyFSkEdGlQJLxU308gLgTUHBAJJ9j9BMohHh+g5oBI+uj2YiLTRKqvDuh+AiLhJf2R\n1TgBkWki1bEI1RwQCU/NAZEql+rgIxonIBJequcOxJnTOAGRcKZEc0DjBETCSXUhoAlEIuGluk9A\nNQGR9ColDNn9ZtZiZvvylpUcgkxEKiNkc+AB4EOjlpUcggzUHBCphJBhyH4JnBm1uOQQZKDmgEgl\nVLpP4CKFIBNJl6SFQEV+muMwZFu3buWGG25QGDKRAEKHIVsFPOHufxk9LykEWfRehSETqYDQYcgs\n+ouVHIIMNIFIpBKC3V7MzB4E/g+4xMyOmdmtwF3A9WZ2mFwUorvOt424Y1ARiETCSdrxXkoYsn8o\n8lJJIcjyJb2EISLh6H4CItNEqucO6H4CIuGleiqxiISX6pqAhg2LpJdmEYpUuYreWUgdgyLhDAwM\nJFqvIoVA3FbROAGRcLLZbKL1KloIaJyASPqoY1Bkmkj11QF1DIqEp3ECIlUu1TUBDRsWCS/VhYCG\nDYuEl+pbjseZUzgykXBSPU4gPvmTdlyIyPhSPU4gHiSk5oBI+qhjUKTKqWNQZJq4IOMEzOxGM3vV\nzI6Y2e2T2ZaITE7SuTmJCwEzywD/Si5E2Z8DnzSzSwu9V8OGRdJrMjWBK4Hfufsf3H0A+Am58GRj\naNiwSHpN5qxcDryZ9/w4uYJhjPgS4bXXXktHRwdz584FoL+/n9mzZ9Pd3c1FF13E6dOn6ezsZO3a\ntbS2ttLT08PChQvp7Oxk3rx5dHR00NPTw6pVq2htbaWzs5MlS5bQ0dHBzJkz6e/vp6+vj4svvpiW\nlhY6OjpoaGg4p0+it7eX5cuX09raSnt7O2vWrOHtt99mcHCQ+vp6enp6aGpq4u2336a9vZ1169Zx\n8uRJ+vr6mDt3Lt3d3SxcuJCzZ8/S1dXFmjVraG1tpauri2w2S21tLXPmzKGrq4ve3l5Wrlw5ktdl\ny5bR1tZGNptleHiY3t5eVqxYQWtrKx0dHaxcuZIzZ84wPDxMNpult7eXZcuWcfLkSdra2li3bh2n\nTp1iYGCAgYEB6urqRvLa0dHBunXrRvbbggUL6OzspLGxkfb2drq7u1m9evVIXpuamujo6KC+vp6+\nvr4x+23FihW0tbVhZnR0dDBjxoyRvLS3t7N69WpOnz7N0NAQM2fOpKenh6VLl468Hu+3/v5+5syZ\nQ3d3N4sWLeLMmTPnHON4eXyMjx8/Tl1dHatXr6alpYXOzk6WLl1Ke3s7dXV1DA4OjslrvN/cnWw2\nS09PT9Fj3NDQQHd3N01NTRw9epRMJsPatWs5efIkvb29zJ8/n66uLhYsWEBbW9s5+y3+nra3tzNr\n1ix6enrGHOPly5dz9uzZke9cX18fM2fOZGhoiI6ODlatWsXp06cZHh6mrq6Onp6ec/br2rVrOXXq\nVNFzY926dbS0tBQ8N06cOJHsTHb3RH/Ax4H78p5/CrinwPt8y5YtvmzZMgcc8Lq6upHH8V9DQ8PI\n4wULFox5Pf9v8eLFk3p94cKFI4/r6+vHvD5v3ryRx/Pnzx/z+owZMwpua7J5zWazY17P3xezZ88e\n83r+ssbGxjGv19TUjDxetGjRpPKav/7MmTPHvJ6/r+bOnTvm9fx9Xc5jnP8ZCx2X/O9WofwVOsb5\nx2Kyxzj/cxf67ucftzlz5ox5fSLnxvz58725udmbm5sd8JLO5UkUAlcDT+U9vwO4vVAhMFpzc/OY\nZaEoLaV1odO6UJ+p1EJgMn0CvwH+xMxWmVkd8PfkwpOJyBRSUkDSoiub3QjcQ66D8X53HxOOzMyS\nJyAik+IlBCSdVCEgIlOfbioiUuVUCIhUuYoXAiGHGpvZ/WbWYmb78pY1mtkzZnbYzJ42s3llSGeF\nmT1rZgfNbL+Z3RYwrRlm9isz2xOl1RwtX21mL0RpPWRmZRuJZWYZM3vJzB4PmZaZ/d7MXo4+26+j\nZWXfh9F255nZdjM7ZGYHzOyqQMfrkujzvBT9bzOz2wJ+ri+b2Stmts/MfmxmdRM+XqVcQijXH7lC\n5zVgFZAF9gKXlnH7fwtcBuzLW3Y38LXo8e3AXWVIZwlwWfR4NnAYuDREWtG2GqL/NcALwFXAw8Dm\naPm9wD+VcT9+Gfhv4PHoeZC0gKNA46hlofbhfwK3Ro9rgXmh0spLMwO8BVwc6Hu4LNqHdXnH6ZaJ\nHq+yfeASM301sDvvecGxBZNMY9WoQuBVoCl6vAR4NcDnegxYHzotoAF4kdzIzFYgk7dfnypTGiuA\nnwPX5RUCJwOl9QawcNSysu9DYA7weoHloY/XDcD/BPxcy4A/AI1RwfY4cP1EvxuVbg4UGmq8PHCa\nF7l7C4C7nwAWl3PjZraaXO3jBXIHuexpRdXzPcAJcifo68BZd4/njh4n94Uoh+8BXyU3Ag0zWwic\nCZSWA0+b2W/M7PPRshD7cC1wysweiKrp95lZQ6C08n0CeDB6XPa03P0t4LvAMeCPQBvwEhP8blS6\nECh0zXLKXqM0s9nADuBL7t5JoM/i7sPufjm5X+krgXcVettk0zGzjUCLu+/lnWNljD1u5fqc73X3\nvwY2AF80s/eVcdv5aoErgB+6+xVAF7laaLDvnpllgZuB7dGisqdlZvPJTdpbRe5EnwXcVOCt5027\n0oXAcWBl3vMV5NpMIbWYWROAmS0hV1WatKizZQfwX+6+M2RaMXdvB54nV8WbH03nhvLtx2uAm83s\nKPAQ8AHg+8C8AGnFv4i4+0lyTaorCbMPjwNvuvuL0fNHyBUKIY/XTcBv3f1U9DxEWuuBo+5+2t2H\ngEeB9zLB70alC4FKDDUe/cv1OPCZ6PEtwM7RKyT0I+Cgu98TMi0zWxT3JJtZPbkDfxB4DthczrTc\n/RvuvtLd15I7Ns+6+6dCpGVmDVFNCjObRa79vJ8A+zCqhr9pZpdEiz4IHAiRVp5PkitIYyHSOgZc\nbWYzzcx453NN7HiVsyOkxM6MG8n1pv8OuKPM236QXKnXF+2gW8l1mvwiSvPnwPwypHMNMETu6sYe\ncu2wG4EFAdL6i2j7e4F9wL9Ey9cAvwKOkOsNzpZ5X17LOx2DZU8r2ma8//bH34UQ+zDa7rvJ/Qjt\nBX5G7upAqLTqyXWmzslbFiqtZuBQ9N3YRu6q24SOl4YNi1Q5jRgUqXIqBESqnAoBkSqnQkCkyqkQ\nEKlyKgREqpwKAZEqp0JApMr9P8nYgJi0MFyGAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def square_tour(a=80):\n", + " \"a is width of square\"\n", + " return ('F' * a + 'L') * 4\n", + "\n", + "plot_trace(trace_tour(square_tour()))" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQQAAAD7CAYAAACMu+pyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHnhJREFUeJzt3X1wG/d54PHvQwLgmyC+gSL1Ykm23kgqvvo849hu7lzU\ncdTYmYt7mfHF6WXOjvtHZ5peMkmuje3cjJn8cYk740nTadpeZlKfL5cmFzvX2rlzItuR4UnO57Ye\nxy8xQcqyZEmULJAE318BAs/9gSVKSSRBkAvsgnw+M5wBFovdh4vFg/09+9vfiqpijDEAVV4HYIzx\nD0sIxpg8SwjGmDxLCMaYPEsIxpg8SwjGmLyAVysWETvfaYxHVFWWm+7pEYKqXvb3yCOPXDWt3H9e\nxrCcUCh01bSampo1zRcIuJPvRa7ed5Zb9lpjDQaDV02rqnJnV6yurr7s+fXXX1+x+0Op4liNNRl8\n5vjx45d9+PPz81d9oHNzc1dNW26+dDrtyg6YzWbXtOy1xppKpa6alslkXPkSLCws5B/v2LFj2WRm\nVuZZk8EsL51Oex3CpjE4OGgJoUi+SgjRaNTrEDyPIRQKeR4DeL8d3Iihq6uLtrY2T2NwS7nikEJt\nipKtWES9WrdfiQjPPvssd955p9ehbAoiQnt7O5cuXfI6FF8REdSPRUVztSuLYmb96uvrCYfDXodR\nUSwhmE2rqanJEkKRfFVDMFZUdNPFixdJpVJeh1FRLCH4zHLn8s36dHV1EYlEvA6jolhC8JlMJuN1\nCJtGPB5n165dXodRUayG4DN23tw9tbW11NXVeR1GRbGE4DOWENzT1tZGc3Oz12FUFGsy+MzCwoLX\nIWwa58+fZ3p62uswKoolBJ9Z7sIfsz6dnZ1WVCySNRl8xoqK7unr6+PcuXNeh1FRLCH4jHXndk8w\nGHTtsuqtwpoMPmM7sHv27NnDjh07vA6johTc+0TkuyKSEJE3l0z7UxGJi8jrIvJjEdm+5LWHROQd\n5/VjpQp8s8pms16HsGmcOXOGvr4+r8OoKGv5OXoc+J0rpj0HHFXVG4B3gIcARKQb+HdAF3An8Jdi\n59GK4tYoRwYOHTrE0aNHvQ6johRMCKr6S2D0imkvqOriT9krwB7n8ceBH6rqgqq+Ry5ZfNC9cDc/\nO0Jwz7vvvsvFixe9DqOiuNFgfQB41nm8Gzi/5LULzjSzRnaWwV1WpC3Oho5PReQrQFpVf7A4aZnZ\n7BMpgo2H4J7rrrtuwyMmbTXrTggich9wF3D7kskDwDVLnu8BVjxm6+npyT+ORqO+Ga7KS/aL5p5T\np04xNDTkdRiei8VixGKxNc27piHURGQ/8BNVvd55/lHgMeA2VU0uma8b+D5wM7mmwvPAoeXGSrMh\n1K4mIhw/fpxjx+zkjBsOHDhAe3s7L7/8steh+MpqQ6gVPEIQkb8FokCriJwDHgEeBkLA885JhFdU\n9Q9VtVdEfgT0AmngD+1bXxw7KeOegYEB255FKpgQVPX3lpn8+Crzfx34+kaC2srm5+e9DmHTSKVS\nNgJVkeykt8/YxU3uOXz4sF3cVCRLCD5j/RDcc/LkSSsqFskSgs/YaUf3XHPNNXR0dHgdRkWxhGA2\nrZGRERtCrUh2aZ3PWFHRPdPT08zOznodRkWxIwSfWe726WZ9jhw5YkXFIllC8Bm7lsE9/f39VlQs\nkiUEn7HLn93T0dHBzp07vQ6jolgNwWesZ517ZmdnmZub8zqMimI/Rz5jO7B7xsfHaWho8DqMimIJ\nwWfs3o7usXs7Fs8Sgs9YUdE98XjcEkKRrIbgM1ZUdE9ra6v1VCySJQRjTJ79HPmM9VR0TzKZtKtH\ni2QJwWesp6J7urq6bEzFIllC8Bm7+7N74vE4yWSy8Iwmz2oIPmOXP7snHA7T3NzsdRgVxRKC2bTq\n6+upra31OoyKYk0Gn7ExAN2TSCRsWPsiWULwGeup6B7rqVg8Swg+Y0VF98TjceuYVCSrIfhMVZV9\nJG6pr69n27ZtXodRUWzv8xm7/Nk9zc3NbN++3eswKkrBhCAi3xWRhIi8uWRas4g8JyL9InJcRBqX\nvPbnIvKOiLwuIjeUKvDNyoqK7rlw4QJnz571OoyKspYjhMeB37li2oPAC6p6BDgBPAQgIncCB1T1\nEPAHwF+7GOuWYEVF93R2dtLd3e11GBWlYEJQ1V8Co1dMvht4wnn8hPN8cfp/d973D0CjiLS7E+rW\nYJc/u6evr4/Tp097HUZFWW8NYYeqJgBU9RKww5m+Gzi/ZL4LzjRjyi4UCtkRV5HcLiouVxGzniFF\nsLMM7tm5c6f1QyjSevshJESkXVUTItIBDDrTB4Brlsy3B7i40kJ6enryj6PRKNFodJ3hbB7WZHDP\n2bNnmZiY8DoMz8ViMWKx2JrmlbV07RSR/cBPVPV65/mjwIiqPioiDwJNqvqgiNwFfFZVPyYitwB/\npqq3rLBMtW6llxMRnnvuOT7ykY94Hcqm0NnZSVtbG7/4xS+8DsVXRARVXfb8dsEjBBH5WyAKtIrI\nOeAR4BvAkyLyAHAOuAdAVZ8VkbtE5BQwDXzGnX9h67AjBPf09/fbrdyKVDAhqOrvrfDSHSvM/0cb\nimiLs6Mm9wQCAavJFMmuZfAZ66nonr1797Jjx47CM5o8Swhm0zp9+jTDw8Neh1FRLCH4jI2Y5J6D\nBw/aEUKRLCH4jNUQ3PPee+9ZkbZIVnHxGbu4yT2ZTIZsNut1GBXFjhB8xu4j4J4DBw7YMOxFsoTg\nM3aI655Tp05ZUbFIlhB8xoqK7tm3b58NoVYkTxPCE088wZe+9CW6u7s5ffo0NTU1tLa2curUKY4e\nPcq5c+eorq6mvb2d3t5ePvCBD/D++++TzWbZtWsX8XicI0eOkEwmmZ+fZ+/evfT29nLgwAGmpqaY\nnJzk2muvJR6Ps2fPHtLpNGNjYxw4cIB4PE57eztVVVUMDQ1x6NAh+vv7aWpqor6+ngsXLtDZ2cm7\n775LXV0dTU1NvPfee3R3d3PmzBlCoRCRSISTJ09y9OhRBgYGEBE6OjqIx+N0d3eTSCRYWFhgz549\n9Pb2cvjwYUZHR5mdnWXfvn3E43H279/PzMwMk5OTXn4Um1IikeDChQvcdtttvvy8F/fN3bt3k81m\nSSaTHDx4kL6+PiKRCMFgkEQiwZEjR+jv7yccDhMOhzl//jxdXV35WJubmzl9+jTd3d2cPXs2/53p\n6+vj6NGjXLyYu5zo2muv5amnnlp1m3maEO6//34AhoaGuHDhAqFQiEwmw+joKENDQ5w7d45AIICI\nMDExweDgIOfPnyeTyRAMBhkbGyORSHDp0iXm5uaoq6tjdHSUS5cuMT4+zuTkJOFwmGQySSAQIJVK\nMTo6SmNjI8PDw2SzWaqrqxkaGqKlpYXBwUFmZmYIh8MMDQ0RiUS4ePEidXV1zM/Pk0wmGR4eZmBg\ngFAoRDabZWxsjKGhofwHUV1dzfj4eD7WdDpNTU0NY2NjXLp0iaGhIWZnZ2loaGBkZITa2lqmpqaY\nmJjgpptu4tZbb/XyI9lUHn/8cT71qU8xPDzsy897cd8UEbLZLCMjIzQ1NTE0NEQqlaKmpobBwUFa\nWlpIJBJMTk7S1NSU/38uXrxIbW0tqVSKkZERhoeHOX/+PMFgEBFhfHw8/z2C3FmXb3/726tuM8+b\nDJ/85Cf54Q9/6HUYZhO69957uffee70OwzdEpGDR2vPTjnZ5qjHlU+ju4p4mhJaWFjstZEwZFRpB\nytOEMDIywsjIiJchGLOlpFKpVV/3vMkQCHhexjBmyyh0Na2nCUFEqK+v9zIEY7aM6upqampqVp3H\n04SgqtZkMKZMMpmMv4uKTU1NNiquMWVUqInuaUIYGxtjfHzcyxCM2VIK3V3c86KijXlnjH94+m2s\nqamx23UbUybBYNDfRcXF/uLGmNJLp9P+Lipu27aN1tZWL0MwZkvxdVFx8aovY0x5lLSoKCJfEJFf\ni8ibIvJ9EQmJyH4ReUVE+kXkByKyakqy+xAYUz6FBvFdd0IQkV3AfwRuVNV/Qe5S6k8BjwKPqeoR\nYAz4/ZWWEQ6HaWxsXG8IxpgihEIh6urqVp1no02GaqDBOQqoI3en598Gfuy8/gTwb1d68+TkJIOD\ngyu9bIxxUSqVYm5ubtV51p0QVPUi8Bi5m71eAMaB14AxVV0c+3oA2LXSMurq6qyoaEwZFer3s5Em\nQxNwN7CP3Je+AbhzmVlXbLTMzs7aWILG+MhGmgx3AKdVdURVM8DfAb8JNInI4nL3kGtGrKi/v5+e\nnh5isdgGQjHGrCQWi9HT0wPACy+8sOq8G0kI54BbRKRWcqcKPgy8DbwI3OPMcx/w9EoLaG5u5tZb\nb6Wnp4doNLqBUIwxK4lGo/T09BAKhbjrrrtWnXcjNYR/BJ4CfgW8AQjwHeBB4IsichJoAb670jJG\nR0dJJBLrDcEYU4RUKsXs7Oyq82xouCJV/Srw1SsmnwFuXsv7A4EAzc3NGwnBGFOEkhUV3bCwsMD0\n9LSXIRizpfg6IQB2d15jyqjQ3cU9TQitra3WD8GYMgkGgwXHMPU0ISSTSYaGhrwMwZgtI51OMzMz\ns+o8njcZwuGw1yEYs2UUuru45wmh0IANxhj3+Ho8BChc5DDGuMfXIyZFIhEbht2YMir15c8bsnif\ne2NMeRTqqeh5k6FQxjLGuMf3NQTrmGRM+fg+IdhZBmPKx9dNBisqGlNevu6paEVFY8qrZGMquqW2\nttbrEIzZMnx/taPd7NWY8gkGg6u+7vm30cZDMKZ8fN1TsbW11YqKxpSRr+/+nEwmGRkZ8TIEY7YU\nXx8hQOE2jTHGPYXupep5Qih0CGOMcU8oFFr1dc8Twvj4uNchGLNl+LrJ0NzcbGMqGlNGvi4qjo6O\n2hGCMWXk6yMEKDzGmzHGPSUtKopIo4g8KSJxEXlbRG4WkWYReU5E+kXkuIg0rvT+6urqghdbGGPc\nUV1dXfImw7eAZ1W1C/gNoI/cvR1fUNUjwAngoZXenMlkrB+CMWWSyWRK12QQkTDwr1X1cQBVXVDV\nceBu4AlntieA311pGY2NjdZT0ZgyKuUAKdcBwyLyuIi8JiLfEZF6oF1VEwCqegloW2kB4+PjVlQ0\npowWFhZWfX0jCSEA3Ah8W1VvBKbJNRe0mIWcPHmSnp4eYrHYBkIxxqwkFovR09MDwIsvvrjqvKJa\n1Pf3n98o0g78P1W9znn+r8glhANAVFUTItIBvOjUGK58v9bX1/OJT3yC733ve+uKwRizdjU1NXzt\na1/jwQcfRFWXPd2w7iMEp1lwXkQOO5M+DLwNPAPc70y7D3h6pWXMzMzYvR2NKZNUKlWwqLh6haGw\nzwHfF5EgcBr4DFAN/EhEHgDOAfes9OaGhgYrKhpTRoX6/WwoIajqG8BNy7x0x1rePz09zcTExEZC\nMMYUodBtDzzvqVio55Qxxj2FaoaeJoTt27fT2LhiR0ZjjItqamoKDmrsaUKYmJhgcHDQyxCM2TLm\n5+f9faOW2tpau/zZmDLy9TDsc3NzTE1NeRmCMVuK74dQs5u9GlM+pey6vGEtLS3WZDCmTEKhkL/v\n7TgyMkIikfAyBGO2jFQqxczMzKrzeJoQqqqqaGpq8jIEY7aUUl7+vGHZbLbgaRBjjHt8X1QsVOQw\nxrgnnU6v+rrd29GYLSIQCFBXV7fqPJ7f29F6KhpTHgsLC/7uqQgQDoe9DsGYLaPQ5c+eJ4RCbRpj\njHt8fZYBLCEYU05zc3Orvu5pQohEIlZUNKaMfN1TcXh42MZUNKaMfF9ULHQaxBjjHt8XFdc7DLwx\npni+LyoWKnIYY9yTSqVWfd16Khqzhfh6TMVkMkkymfQyBGO2FN8XFQvdr94Y456SFxVFpMq5+/Mz\nzvP9IvKKiPSLyA9EZNUqRqEAjTHuCQaDq76+0Vu5AXwe6AW2O88fBR5T1SdF5K+A3wf+60pvPnPm\nDM8//zyZTAbIDZqSyWQIBAJkMhlUNX8Nd3V1NapKOp0mGAySyWTyCSWdThMIBMhms/lK6vz8PKFQ\nKL+8xWk1NTUsLCwQCARQVVKpFDU1NflliAipVIpQKMTCwkJ+pNpMJpNfL+SuLV9cXzabzcejqpfF\nulxcwWCQbDZLdXU1IsL8/Dzt7e3cdNNyN8Iy65FOpzlx4gRVVVW+/LyX7psiwuzsLLW1tfn9e3F5\ni3Et3dcX3wvk/7/FWFWVqqqqq2JdjGVVqrruP2AP8DwQBZ5xpg0BVc7jW4CfrfBeve2225Tc7ePt\nz/l7/fXX1bjjwIEDnn+efvt79dVXFVBd4Tu90SOEbwJ/DDQCiEgrMKqqi0MpDwC7VnrzSy+9tMHV\nby4iYmNMuujSpUscPnyY/v5+r0OpGOtOCCLyMSChqq+LSHRxsvO3lK60jJ6envzjaDRKNBpdadYt\no+AhnVmz6elpG6IPiMVixGKxNc0rus6egiLyX4BPAwtAHRAG/h44BnSoalZEbgEeUdU7l3m/rnfd\nm5WIcPz4cY4dO+Z1KJtCZ2cnkUiEX/7yl16H4isigqouO7jius8yqOrDqrpXVa8D7gVOqOqngReB\ne5zZ7gOeXu86tqLF4o/ZuP7+fuLxuNdhVJRS9EN4EPiiiJwEWoDvlmAdm1ahvuZm7To6Oti3b5/X\nYVQUV/Y+VX0JeMl5fAa42Y3lbkWFhsk2azc7O2vXyhTJfo58xnZg94yPj9PQ0OB1GBXFEoLPhEIh\nr0PYNLq6uuziuSJZQvAZKyq6Jx6PW0IokucXN5nLWVHRPa2trXR0dHgdRkWxhGCMybOfI5+xnoru\nSSaTBa/uM5ezhOAzNj6Ee7q6umhra/M6jIpiCcFn7G7Y7onH4zYiV5GshuAzNmCMe8LhMM3NzV6H\nUVEsIZhNq76+vuCgouZy1mTwGbvXpXsSiYTd96NIlhB8xnoqusd6KhbPEoLPWFHRPfF43DomFclq\nCD6zOMCn2bj6+nq2bdvmdRgVxfY+n7HLn93T3NzM9u3bC89o8qzJ4DNWVHTPhQsX7HLyIllC8Bkr\nKrqns7PTeioWyRKCz9jlz+7p6+tjcnLS6zAqitUQzKYVCoXsiKtIlhB8xs4yuGfnzp3WD6FI1mTw\nGWsyuOfs2bNMTEx4HUZFsYTgMzZiknuOHDliRcUi2d7nM3aE4J7+/n67lVuRrMHqM3YxjnsCgYDV\nZIq07q0lIntE5ISI9IrIWyLyOWd6s4g8JyL9InJcRBrdC3fzs56K7tm7d69dy1CkjaTPBeCLqtoN\n3Ap8VkQ6yd3K7QVVPQKcAB7aeJjGFO/06dP09vZ6HUZFWXcNQVUvAZecx1MiEgf2AHcDv+XM9gQQ\nI5ckzBrYiEnuOXjwIDt27PA6jIriSlFRRPYDNwCvAO2qmoBc0hARK/MWwWoI7nnvvfesSFukDScE\nEdkGPAV83jlSWPMe3dPTk38cjUaJRqMbDafi2cVN7slkMmSzWa/D8FwsFiMWi61pXtnIL5KIBID/\nDfxUVb/lTIsDUVVNiEgH8KKqdi3zXrVfw8uJCMePH+fYsWNeh7IpHDp0iLa2Nl5++WWvQ/EVEUFV\nl61eb/SczN8AvYvJwPEMcL/z+D7g6Q2uY0uxQ1z3nDp1ing87nUYFWXdTQYR+RDw74G3RORXgAIP\nA48CPxKRB4BzwD1uBLpVWFHRPfv27bPTjkXayFmG/wustPfesd7lGuOWRCJht3IrknXj8hkrKrpn\nbm7O7pVZJLuWwWfs4ib3HD582C5uKpLtfT5jp8ncc/LkSYaGhrwOo6JYQvAZO0Jwz+7du9m5c6fX\nYVQU2/vMpjUxMWH3ZSiSFRV9xopg7pmcnGRqasrrMCqKHSH4jA0K6p7Ozk4bU7FIlhB8xnoquqev\nr4/W1lavw6golhB8xoqK7mlvb7eeikWyGoLP2IhJ7kmlUtbRq0j2c+Qzdi9C94yOjlJXV+d1GBXF\nEoLP1NTUeB3CptHV1WVFxSJZQvCZhYUFr0PYNOLxuHVdLpLVEHzGioruaWlpsTEVi2QJwWdsFCn3\nVFdX230ZimQ/Rz6TSqW8DmHTGBoasgFnimQJwWesqOie7u5u65hUJEsIPmPnzd3T29tLe3u712FU\nFGtg+YwVFd2zbds2GhvtToLFsITgM9ZT0T3hcJj6+nqvw6go9nPkM1ZUdM/7779v/TqKZAnBZ+zy\nZ/dYT8XiWULwGftFc088HmfXrl1eh1FRrIbgM9aRxj11dXV2cVORSrb3ichHRaRPRE6KyJdLtR5j\nVtLa2kpTU5PXYVSUkjQZRKQK+Avgw8BF4J9E5GlV7SvF+jYTGzHJPQMDA8zOznodRkUp1RHCB4F3\nVPWsqqaBHwJ3F3rTWm9ZXUpexxAMBj2PAbzfDm7E0NXVRXd3t6cxuKVccZSqqLgbOL/k+QC5JLGq\nWCxGNBotUUhr43UMDz/8MPPz8+zbt4/q6mrC4TBDQ0NEIhEmJycBaGxsZHBwkNbWVqampshms7S0\ntDA4OEhTUxOzs7MsLCwQiUQYHBwkHA6TTqdJp9P5afX19agqs7OzRCIRRkZGqKmpobq6mqmpKQYG\nBrjmmmsIBoPU1dUxOjpKW1sbo6OjBAIBGhoaSCaTRCIRxsfHqaqqyse6GJeq0tTUxODgIC0tLczM\nzFwW6/bt25mfn2dhYYGWlhaGh4dpaGhgYWGBVCrFwMAAu3fvpq6ujqqqKqanp4lEIiSTSWpqaggG\ng0xMTNDW1sbIyAiBQCAfayQSIR6Ps3v37g19Hl7vD+WOo1QJYbneNVddxtfT05N/7IeN7rXbb7+d\nEydOEAqFeOuttwCor69nZmaGhoYGpqengVxCGB8fp7a2Nj/CUktLCyMjI1RVVeXv/hSJRBgeHr5s\nHW1tbVfdzai1tZVkMnnZtNraWt58883LpjU1NTE2NgbkjmTS6TTbt29nYmICyPUMnJqayse89D2L\n8y+NVUTyV3cuF2tdXR1vvPFGwVgXlwfkl7lYO3jssceW29RbSiwWW/MRRqkSwgCwd8nzPeRqCZdZ\nmhDAP4dnXvn5z38O5LbLldum3CyGzSMajV72g/vVr351xXmlFNffi0g10E+uqPg+8I/Ap1Q1vmQe\nu/DfGI+o6rJ95EtyhKCqGRH5I+A5coXL7y5NBqsFZIzxTkmOEIwxlcm6xRlj8nyVEETkP4lIVkRa\nlkz7cxF5R0ReF5EbSrjuPxWRuLOeH4vI9iWvPeTEEBeRY6WKwVlX2Xt4isgeETkhIr0i8paIfM6Z\n3iwiz4lIv4gcF5GSDy4gIlUi8pqIPOM83y8irzgx/EBESnr9jYg0isiTzmf9tojcXO7tICJfEJFf\ni8ibIvJ9EQmVbTuoqi/+yJ2J+BlwBmhxpt0J/B/n8c3AKyVc/x1AlfP4G8DXncfdwK/I1Vv2A6dw\nmloliKHKWf4+IAi8DnSWYdt3ADc4j7eRKwh3Ao8Cf+JM/zLwjTLE8gXgfwDPOM//J3CP8/ivgD8o\n8fr/G/AZ53EAaCzndgB2AaeB0JL//75ybYeSfrhFbogngeuvSAh/DXxyyTxxoL0Msfwu8D3n8YPA\nl5e89lPg5hKt9xbgp0ueX7buMn4Wf+8kyL7F7e0kjb4Sr3cP8DwQXZIQhpYk6luAn5Vw/WHg3WWm\nl207OAnhLNDsJKRngI8Ag+XYDr5oMojIvwHOq+pbV7x0ZY/HC860UnsAeNaDGJbr4VmO/zdPRPYD\nNwCvkPsSJABU9RJQ6ruefBP4Y5xObCLSCoyqatZ5fYDcF6ZUrgOGReRxp9nyHRGpp4zbQVUvAo8B\n58jta+PAa8BYObZD2cZDEJHngaUjXgq5D/4/Aw+Ty4JXvW2Zaes+LbJKDF9R1Z8483wFSKvqD0oR\nQ6EQy7iuq1cusg14Cvi8qk6Vs6+IiHwMSKjq6yISXZzM1duklDEFgBuBz6rqqyLyTXJHaeXcDk3k\nrvvZRy4ZPEmu6XylksRUtoSgqst94RGRD5Brm78huQEF9wCvicgHyWXCa5bMvmyPx43GsCSW+4C7\ngNuXTHY1hgLW1MOzFJwi1VPkmkpPO5MTItKuqgkR6SB32FoqHwI+LiJ3AXXkDt//DGgUkSrn17HU\n22OA3JHqq87zH5NLCOXcDncAp1V1BEBE/g74TaCpHNvB8yaDqv5aVTtU9TpVvZbch/IvVXWQXPvp\nPwCIyC3kDpsSpYhDRD4K/AnwcVWdX/LSM8C9TqX3WuAguZ6XpfBPwEER2SciIeBeZ/3l8DdAr6p+\na8m0Z4D7ncf3AU9f+Sa3qOrDqrpXVa8j93+fUNVPAy8C95QphgRwXkQOO5M+DLxNGbcDuabCLSJS\n6/xALsZQnu1QquLIBooqp3GKis7zvyBXeX8DuLGE632HXDHnNefvL5e89pATQxw4VuL//6Pkqvzv\nAA+WaZt/CMiQO6vxK+f//yjQArzgxPM80FSmeH6Lfy4qXgv8A3CSXKU9WOJ1/wa5xPw68L/InWUo\n63YAHnH2tTeBJ8idcSrLdrCeisaYPM+bDMYY/7CEYIzJs4RgjMmzhGCMybOEYIzJs4RgjMmzhGCM\nybOEYIzJ+/+3mLJIMXCXRQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def cross_tour(a=50, b=40):\n", + " \"a is width of cross arm, b is length of cross arm\"\n", + " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n", + "\n", + "plot_trace(trace_tour(cross_tour()))" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def quincunx_tour(a=60, b=30, c=50):\n", + " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n", + " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n", + "plot_trace(trace_tour(quincunx_tour()))" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAD7CAYAAACFUEoIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGfZJREFUeJzt3XtsXNWdB/Dvz2M78SuxYzt2Esd2whu6NKp2I20SqUNp\nKVoJJap2pYZKNN3VikqFVkslHt0/ElarqqxQ1G0RfywFFKoFa4VaKH8sjwpGKkVlKYTE1IbwSOz4\nbcd2nIlfY89v/5g5zjzuOHNnrueM534/kuXxGZ97zty585t7z7nnHFFVEJE/ldmuABHZwwBA5GMM\nAEQ+xgBA5GMMAEQ+xgBA5GPlhSpIRNjfSGSJqopTekHPAFTVk5+jR496ti2Wz/LXU/m5lL0aXgIQ\n+RgDAJGPrcsAEAwGWT7L92X5npddqGuXWFHJFhYWFIDjz4033uiYXl1dnTFPS0uLY/ru3bsz5sn0\nc9111zmmNzc3Z8wTCARcvZaqqqqM27rnnns0Go2m7TO/O3TokOP+amxszLgvMx0zN9xwg2N6RUVF\nxm3t3LnTMb29vd31MZap/Pr6+ox5amtrHdO//OUva19fn+M+i3/2HD+XBesFcPLSSy+tPK6pqUl6\nrq6uzjG9oaEBs7Ozjs9t2rQJo6OjaembN292/P+NGzfiwoULrssfHx9HIBDAxo0bV9LLysqwYcMG\nTExMuNrWwMBA2nPRaBTPPfccfvrTn2LHjh2gK8wxk7ov6+vrHd9LEUFdXR1mZ2cdjxenbdXV1WFk\nZMTxuUx5THpVVRXKyq6cWFdUVODy5cuIRCJZHxdbtmzB9PR0xtcZDofT0k+dOoUHHngAL774Ityw\nGgCi0SgAXLWl0m/C4TDq6ur44c/grbfesn4ZUGxEBG1tba7zrcs2ACJKV17u/vucAYDIxxgAiHzM\nagAYGxsDACwvL9usBq0TCwsLALDS2Ef5sxoAtmzZEqtEGU9EEpmegaGhIcs1KS6BQAAAUFtba7km\nxWlpacl1HqufPNNoIeI4TsG3WlpaAACtra2Wa1JczPGyYcMGyzUpTpOTk67zZB0ARKRNRN4UkR4R\n6RaR++PpR0VkQEQ+iP/c6boWlKSiogIAz4zIna1bt7rO46bfYAnAA6r6oYjUAnhfRN6IP3dcVY+7\nLp2IrMo6AKjqCICR+OOwiPQCMHeq8ByeaB3K6RxTRDoB7AHwbjzpByLyoYj8SkQ2Z7udcDicS/Hk\nc/Pz87arUDJcB4D46f+LAH6kqmEATwK4RlX3IHaGkPWlgOn+i0QibqtR0sxYBx7oycx+uXz5suWa\nFKfEsSnZcnXvoIiUI/bh/7WqvgwAqjqe8C9PAXglU/5jx46tPA4GgyuDdEyjF8VcunQJQOwMKZc3\ntVRVV1cDABobGy3XpDh1d3cDAEKhEEKhUFZ53N48/AyAHlX9T5MgIq3x9gEA+BaAjzJlTgwAANDV\n1eWyeH8w3YBNTU2Wa0LryXXXXQcg9uWaOFjq0UcfzZgn6wAgIvsBfAdAt4icRGwc8k8A3C0iewBE\nAZwDcK/rmhORFW56Af4IIODw1KveVYeICsnqnSacB4DILqsBwNzrnss9zKWMgdGZ6QUYHh62XJPi\nlMtxYzUAmMauXCYyKGV9fX0AgMHBQcs1KS6mF6C5udlyTYrTxMSE6zxFMRiIknV2dgIApwTLgMeN\nMxMg3eBoE6ISkTpRaDYYAIh8jAGAyMesBgAztRNbvSkbZuzIxYsXLdekdFgNAGZhBM4JmGx0dBQA\nMD4+fpX/9BczaIxjR5yZKdPcsBoAKisrAbBVN5UJjGa1GYoxA6Nyae32g/7+ftd52AZQhMwBzrnv\nyI1cuo0ZAIh8jAGAyMesBoDFxUWbxdM6xUZj71gNAKY7h1OCJTP7gwd6MjMYKJd73v0gl96RolgZ\niN06ycySaeY3xZjGUc6U5Kynp8d1HqsBIJd+Sz8wrbnbtm2zXJPixOPGmZkSzA02AhL5GAMAkY8x\nABD5mNV7cM2UYJFIhA2BDo4cOZJ2d1d5eTk+/vhjXHvttWn/PzMzg+XlZTQ0NCSlb9iwAWfOnEFH\nR0danv7+fmzfvj3tduxIJIKpqam0BScrKyvR29uLa665Jik9Go1iYmICNTU1aePSy8rKcP78+bTX\nEggEVl5L6grR4XAYkUgk6bWY3hEzVoLyZzUAmOWvORYgWVVVFQDgxIkTnmyvvLy8ZOZdrK6uxv79\n+21XoyiZBWXcsPrJM8tfp0Z/vwsEAohGoxn3i6o6PpcpPZc8xbotyiyXIJ91G4CItInImyLSIyLd\nIvLDeHqDiLwuIp+IyGtuFgelzFY7+DM952WeYt0WZZZ66ZcNN42ASwAeUNWbAfwtYisC3wjgYQC/\nV9UbALwJ4BHXtSAiK7IOAKo6oqofxh+HAfQCaANwEIC5WD0B4JDXlSSitZFTN6CIdALYA+BPAFpU\ndRSIBQkAWU/aPj09nUvxROQR1wFARGoRWyL8R/EzgZwn9DMzApVKCzWRLRUVFTktJe+qF0BEyhH7\n8P9aVV+OJ4+KSIuqjopIK4CMI1gSlwcPBoMrgzvYDUiUn0gkgt7eXgBAKBRCKBTKKp+4mZFXRJ4D\nMKGqDySkPQZgUlUfE5GHADSo6sMOeTW1rK6uLhw+fJizAhPlSUTw4x//GI8//rjjc6rq2K2S9Vev\niOwH8B0A3SJyErFT/58AeAzA/4jIPwLoB/APOdSfiCzIOgCo6h8BZBqH+XVvqkNEhWR1MFA0GrVZ\nPJHvWQ0AZlAHpwQjssNqADDrvHMkIFH+1t3CIOz+I/JOLlPIcUIQohKx7mYFJiK7GACIfMxqADDz\n3nMBDCI7imJhEE7+QJS/XO6rKYpeADM1GBHlLpcl0/jJIyoRqTM4Z4MBgMjHGACIfMxqALh8+bLN\n4ol8z2oAMIOAOBiIKH8bNmxwncdqAKivrwfAwUBEXuju7nadh20ARCXi+uuvd52HAYDIxxgAiHyM\nAYDIx6zOyDE4OAgA+OpXv5o0HmBoaAhNTU0rC4cYy8vLOHXqFG677TZcvHgx6bmenh4cOHAAk5OT\nSemTk5OIRCLYvn172qCjd955BwcPHsT4+HhS+tmzZ7Fv3z688MILeb9GKi2/+MUv8Jvf/CYpbXp6\nGuFwGLt27Urr0Xr33Xdx1113rQx8M/r7+9HZ2Zl2//78/Dw+//xz7N27N62b/PTp07j99tvTjlez\n7VxuqXe1LkA+nNYFGBwcxP79+9HX1+dJGbW1tQiHw57l6enpwU033eRF1agE9PX1obOz03W+hoYG\nTE1NeVKH1bY1Nja2Ms1eIk/WBVgLO3bswLlz52xWISMR4f0JlKSjowMAsLi4WDJd11mfM4jI0yIy\nKiKnE9KOisiAiHwQ/7lzbapJRGvBzUXDswC+6ZB+XFW/Ev951aN6EVEBZB0AVPVtAE4XH5zNg2id\n8qIb8Aci8qGI/EpENnuwPevMcuWXLl2yXBOitZVvAHgSwDWqugfACIDj+VfJvvn5eQBcuoySme42\ns6JVKcirF0BVEzsknwLwymr/f+zYsZXHwWAQwWAwn+LXTG1tLQBg8+aSOKEhj9TV1SX9LlahUAih\nUCir/3V1H4CIdAJ4RVX/Kv53q6qOxB//C4C/UdW7M+RNuw+gmIkITp06hVtvvdV2VaiIiMi66wb0\n5D4AEXkeQBBAo4j0AzgK4DYR2QMgCuAcgHvzri0RFUzWASDDN/uzHtaFiAqMg4FWsZ4uWYhywQDg\nwAw0Gh4etlwTKiame7iUbhFnAHBgWv9bW1st14SKycjISNLvUsAAsAquWESJ2traAAA7d+60XBPv\n8Agn8jEGACIfYwAg8jEGAAdmhqDUaZyISg0DgIOqqioAHAtAyczUdcU6i1UuGAAcBAIBALkttUSl\nq729Pel3KWAAIMqSmbm6lLqHS+eVEJFrDABEPsYA4MAMApqbm7NcE6K1xQDgYGZmBgAwOztruSZU\nTMwgsenpacs18Q4DgAPT/dfY2Gi5JlRMzByRpTRXJAMAUZYaGhoAAFu2bLFcE+8wABD5GAMAkY8x\nABD5GAOAA04JRk5M93ApzRXJAODA9AI4rbVO/tXf3w/gyqCgUsAAsIry8rwWTqIS09HRAQDo7Oy0\nWxEPZR0ARORpERkVkdMJaQ0i8rqIfCIir5XK4qBEfuHmDOBZAN9MSXsYwO9V9QYAbwJ4xKuKEdHa\nyzoAqOrbAKZSkg8COBF/fALAIY/qRUQFkG8bwFZVHQWA+CKhJdFqZpYHn5yctFwTorVV0Fau9bI8\nuJn4gTMCUaKBgYGV37t27bJcm8zWcnnwDsSWB781/ncvgKCqjopIK4C3VPWmDHm5PDita0tLS6io\nqMDly5dRXV1tuzpZW215cLeXABL/MX4H4Ej88XcBvOy6dkTrhOkWrqiosFwT77jpBnwewDsArheR\nfhH5HoCfAfiGiHwC4Ovxv4lonci6DUBV787w1Nc9qgsRFRjvBFyFWQ6aqFQxADgwg4EmJiYs14SK\niekeNr9LAQOAAzMYqLW11XJNqJiYuQCnplLvh1u/GACIsmS+ELZt22a5Jt5hACDyMQYAIh9jACDy\nMQYAB6YXYGRkxHJNiNYWA4CDTZs2AeDCIJTMTAV29uxZyzXxDgOAAzMasJTu+ab8mSnBinkkoFsM\nAEQ+xgBA5GMMAEQ+xgDgYHl5GQAQDoct14RobTEAOJibmwPA0YCUbGxsDAAwOjpquSbeYQBwUFtb\nCwCor6+3XBMqJua4ML9LAQMAUZbMPIA1NTWWa+IdBgAiH2MAIPIxBoBVrKdpzIlywQDgwAwGGh4e\ntlwTKiame7iUeocYAByYKcFaWlos14SKydDQEIDS+mJgAFhFIBCwXQUqIjt37kz6XQo8WRtQRM4B\nuAggCiCiqnu92C4RrS2vFgeNIrZGYOlMl0rkA15dAoiH2yKiAvHqDEABvCYiCuC/VPWpbDM+8cQT\nGBoawpYtW5LSA4EAzp49i/b29qT05eVlTExMoL6+Pm357mg0ivHx8bTGu7KyMnzxxRfo7OxMrrQq\nZmZmUFZWhrq6upX0hYUFAMD4+Hi2L4N85MEHH8SOHTvS0vv6+tDe3r4yoYwRDoextLSUdmt5IBBA\nX18f2traktKj0ShGR0fR3Ny8siCpsbS0hKmpKTQ3Nyelb9u2DXfffXda2VfjVQDYp6ojItIM4A0R\n6VXVt1P/6dixYyuPg8EgVBX333+/R1Xw1saNG3HLLbfYrgYVoZ///OeebCe+bLcn2wKAkydP4vHH\nH0coFEIoFMquDl7f7CIiRwFcUtXjKemaWlZXVxcOHz6ccSeoqmNEc5ueax6iVF4eY+a49+IYFxEc\nOXIEzz77rONzqupY6byv20WkWkRq449rANwB4KN8txvfnifpueYhSuXlMSYinh7juUxi68UlQAuA\n38av/8sB/Leqvu7BdolojeUdAFT1LIA9HtSFiArMatedueeeiOywGgDMvPuRSMRmNYjWvYqKClRV\nVbnOZzUAmBlWuAAHUX4ikQj+8pe/uM7Hu/eISsTu3btd52EAIPIxBgAiH7MaADjlFpFdVgOAmVmF\nvQBEdlgNAGZEE3sBiPI3ODjoOk9R3AdARPlrampynYeNgEQlInV+jGwwABD5GAMAkY9ZDQBmyi2z\n4AIRFZbVANDQ0ACAk3IQeSGX+2qsBgAz4WFZGa9EiPI1NjbmOg8/eUQlIpel7BgAiHyMAYDIx6wG\ngNnZWZvFE/me1QAwPz8PgIOBiLyw7u4ENN2AHBNAlL/u7m7XeawGAPb/E3nn+uuvd53HkwAgIneK\nyMcickZEHvJim0S09rxYGqwMwBMAvgngFgCHReTGfLdLRGvPizOAvQA+VdU+VY0A6AJw0IPtEtEa\n82JtwB0Azif8PYBYULgqM4NJJBJhQ2ACVcVTTz2FV199NSl9enoaCwsLaG1tTbvv+/3338ftt9+O\n6enppPTz58+jo6MD0Wg0KX1ubg6Dg4O4+eabsbi4mPTcRx99hAMHDqRta2xsDDU1NaipqUlKj0aj\nOH36NA4cOIBwOJz03GeffYY9e/akpU9PT2N+fh7bt29Pq9sHH3yAr33ta2nlDwwM4Etf+hKeeeYZ\nULpcxgJ4EQCcWvIca3Ls2LGVx8FgEK2trQDYC5Cqp6cH9957r+t8zz//PBYWFtLS//znP2fMk6nl\neGRkBJcuXXJV/tmzZx3Te3t7sbS05GpbL7zwwko3caL33nsP3//+97F3b1bfMb5iAmYoFEIoFMoq\njxcBYABAe8LfbQCGnP4xMQAAQFdXlwfFl5729tju5KzJ6USEN5BlEAgEAMS+XIPB4Er6o48+mjGP\nF20A7wG4VkQ6RKQSwLcB/M6D7foWu0cpF5s2bXKdx4vlwZdF5D4AryMWUJ5W1d58t0tEa8+LSwCo\n6qsAbvBiW0RUOFbvBJycnATAa13KjjlOZmZmLNekdFgNALW1tQA4J2CqiYkJAFcCJMWYXgHT2EVX\niAgqKytd57MaAEyFzdRgFLNx48ak3xRTVVUFAGn3IVDs7Ojzzz93nY8TghQhc2ZUXV1tuSa0nuzc\nudN1HgYAIh9jACDyMasBwO3toUQA0sYOUO6sBoALFy4A4JRgqcz+4IGezNwCnMv8936QS++I1QDQ\n2NgIgIOBUo2MjCT9phjTKNrc3Gy5JsXpzJkzrvMUxcpAlMy05m7fvt1yTYoT7wNwtmvXLtd52AhI\nVCJyWWKPAYDIxxgAiHzMagAwjVzsDqRsmLEA4+PjlmtSOqwGgK1btwJgo06q/v5+AFfmTKQYM3ak\nvr7eck2K09zcnOs8VgOAabTgDDjJduzYAYC9AKnM8cJuY2eXL192nYdtAEXInBExMJIbTU1NrvMw\nABD5GAMAkY9ZDQCc2olywWnBvWM1AJhrXQ4GSmYW5MilUaeUmQ8+j5d05eXlOc0gZTUAmKmd2Kqb\nzKzuk7pkl9+ZwUCbN2+2XJPis7S0hJ6eHtf52AZQhExrbkNDg+Wa0Hqye/du13nyCgAiclREBkTk\ng/jPnflsj4gKy4vxuMdV9bgH2yGiAvPiEiDnu1W4IAiRXV4EgB+IyIci8isRcdU6Mzw8DICtuqlM\nYGSATGZ6AThTkneuegkgIm8AaElMAqAA/hXAkwD+TVVVRP4dwHEA/5RpW4nLgweDwZWpndgLkMwM\nBhoaGloZF0BXegHMVHKUbGhoCAAQCoUQCoWyyiNefcuISAeAV1T11gzPa2pZXV1dOHz4ML/pUoTD\nYdTV1XG/OBARvPXWWwgGg7arUlREBPfddx9++ctfOj6nqo6X6vn2ArQm/PktAB/lsz0iyt2GDRtc\n58m3F+A/RGQPgCiAcwDuzXN7RFRAeQUAVb3Hq4oQUeFZnZfbLIPd09OTNKPp4uIipqam0NLSkpZn\neHgYzc3NaVOKm4FFmzZtSkqPRqMYHh7G9u3b08bXj46OoqGhIW1Z5dnZWczNzaU1NqkqhoaG0NLS\nklb+hQsXUFVVlbagZyQSweTkZMbX0tTUlNYIOjo6mva/dGXquO7ubrS2tiY9NzQ0hObm5rR9OTU1\nhcrKyrQVhZeWljAxMZG2HSDWy9DY2Ji2rXA4jKWlpbQZicxxsW3btrSZecfGxrB58+a00/P5+XmE\nw2HHMfyrvZaKioqVxWMTX0uuPGsEvGpBDo2A77zzDvbv31+Q8tcjNgImW1xczOk61y/+8Ic/4MCB\nA2npa9YImK99+/ZBVdN+otEoJicnHZ+bnJxENBpNS19YWMClS5cy5nFKn56exvLyclr68vIypqen\nXW0rHA5jYWHBVZ5Mr2VxcXFlRCBdUVlZ6bgfV9vH5mzOTZ6pqSnH9yUSiWBmZsbVti5evIhIJOJ4\njE9NTbl+LbOzsxnzOH34r8bqGQARrb2iPQPIVbY3ObB8ll9q5XtdNgMAy2f566h8BgAi8gwDAJGP\nFbQRsCAFEVGaTI2ABQsARFR8eAlA5GMMAEQ+tq4CgIj8vYh8JCLLIvKVlOceEZFPRaRXRO4oQF0K\nPiGqiNwpIh+LyBkReWity3Mo/5yInBKRkyLyfwUo72kRGRWR0wlpDSLyuoh8IiKvuZ2FyoPyC/a+\ni0ibiLwpIj0i0i0iP4yne7cPMt1aWYw/AG4AcB2ANwF8JSH9JgAnERvc1AngM8TbN9awLkcBPFDA\n114Wf10dACoAfAjgxgLv/y8ANBSwvAMA9gA4nZD2GIAH448fAvCzApdfsPcdQCuAPfHHtQA+AXCj\nl/tgXZ0BqOonqvop0iciPQigS1WXVPUcgE8B7C1AlQq5fO9eAJ+qap+qRgB0Ifa6C0lQwLNGVX0b\nwFRK8kEAJ+KPTwA4VODygQK976o6oqofxh+HAfQCaIOH+2BdBYBV7ABwPuHvwXjaWst5QtQcpL7G\nARTmNSZSAK+JyHsi8s8FLtvYqqqjQOwDAqDZQh0K+b4DAESkE7GzkT8BaPFqHxRdABCRN0TkdMJP\nd/z3Xatlc0jLu3/zKnV5EsA1qroHwAhiE6KupTV5jS7tU9W/BvB3iH0I3A8/W/8K/b5DRGoBvAjg\nR/EzAc/ed6sTgjhR1W/kkG0AwM6Ev9sADBWwLk8BeCXf8q5iAEB7wt+evEY34t82UNVxEfktYpcl\nbxeyDgBGRaRFVUfjc1KOFbJwVR1P+HPN33cRKUfsw/9rVX05nuzZPii6MwAXEr8Rfwfg2yJSKSK7\nAFwLYE1bqS1MiPoegGtFpENEKgF8G7HXXRAiUh3/JoKI1AC4A4WZBFaQ/l4fiT/+LoCXUzOsZfkW\n3vdnAPSo6n8mpHm3DwrVoutRq+ghxK6D5wAMA/jfhOceQayVvBfAHQWoy3MATiPWGv8SYtdla13m\nnYi1BH8K4OEC7/td8dd6EkB3IcoH8DxiZzkLAPoBfA9AA4Dfx/fDGwDqC1x+wd53APsBLCfs9w/i\nx8AWr/YBbwUm8rH1fAlARHliACDyMQYAIh9jACDyMQYAIh9jACDyMQYAIh9jACDysf8Hx6p1/hpz\nWKIAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(('F' * 10 + 'R' + 'F' * 5 + 'L' + 'F' * 10 + 'L' + 'F' * 10 + 'L' + 'F' * 5 + 'R') * 4))" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAAD7CAYAAAAMyN1hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl81NW9//HXZ5JAAmGJEJawBpClooR9sYYANggqqwgU\nrLS2WvdaF6jiNbT4E2zx9nIV7xWUH+q9v1ShogUXUAhhUwQJ0ICgpkIQCBAICBKynd8fszShgUyS\nmTkzk8/z8cgjM5OZ7/c9mcwn53zP95wRYwxKKaUuz2E7gFJKBTstlEopVQUtlEopVQUtlEopVQUt\nlEopVQUtlEopVYVIf+9ARPT8I6VU0DLGSFX3CUiL0hjDM888gzHGb1/jxo2jfv36dOvWjejoaBo1\nasSPfvQjYmJi6N27NwDNmzenZcuWxMbG0r9/fyIjI2nXrh2NGzcmNjaWfv36Ub9+fbp37079+vVp\n3Lgx3bt3JyYmhj59+ni28d///d9+fS7++vL3a6DPIfzzv/baa4gITZs2pWPHjjRs2JB+/frhcDho\n3bo1cXFxxMbGMmDAAOrVq0eXLl1o0KABsbGx9OrVi+joaK699loiIiKIi4ujffv2nm1ERESQkJDg\n2caUKVMoLi7262vgrbDpeq9cuZKLFy9y+vRpCgsL+f777ykoKODChQucOXMGgJMnT3Ly5EnOnTvH\n999/T0lJCadOneLs2bOcO3eOs2fPcvHiRQoKCrh48SJnz56tdBv33HOPzaeqlDW/+MUvMMZQUFDA\nqVOnOH/+PGfPnqWsrIwTJ05w+vRpz3upqKiIU6dO8cMPP3Du3DnOnDlDYWEhZ86cobS0lNOnT5Of\nn+/ZRmlpKSdPnvRsIz09nfz8fNtPGQhA19ufysrKOH78uOc/w8WLF6lXr57f9peWlsZ3333HkiVL\nOHr0KDExMTRt2tRv+1MqWLgbDACJiYnk5OT4fZ8iwrFjxygrK6NVq1aIVNlD9puAtShTUlJ8vs3H\nH3+c1q1bk5CQ4PNtVyYlJYVbb70VwNNF2Lt3b0D27Qv+eA0CLdSfQyjmz8/PJy4uzvM+Gzp0aMD2\nnZSUREJCAqmpqT7bZk1eA6lOP70mRMT4ax89e/YkOzu7WscafMEYg4ggIqxfvz4k//iV8lZOTg6d\nO3e2+j6Ljo72tGh9SUQwwTKY42sjRoxARMjOzray//JdgGHDhiEiLFiwwEoWpfzljTfeQETo3Lkz\nQMALpft91q5dOwoLCxERRowYEdAMniyh2KIUEbp27Ur79u2ZN28effv29en2vTV//nxWrlzJjh07\nPKNzSoWLZs2acebMGYYMGcLtt9/OAw88YCVHVlYW99xzD8XFxezcudOn7zNvW5QhVSjffPNNCgsL\n+dWvfsXy5cuZOHGiT7ZbW23atOHIkSMsXryYfv36kZSUZDuSUjW2efNm9u7dy9133w0EviV5Odu3\nb6d///4sXryYuLg4JkyYUOsBHm8Lpd/Pu3LuovZee+01A3i+vvrqK59s1xf+/Oc/V8hWWlpqO5JS\nNVb+b/n++++3Hcfj9OnTFbLde++9td6mqz5VWcdC5hjl/v37gX8W9i5dulhO9E8PP/wwxhi+//57\nAByOkPm1KlUp9yDpiy++aDuKR9OmTSucKH769OmA7Tvo39EjR45ERJg/f77tKFWKiIgA8IzULVq0\nyHIipbyzbt06z98tQExMjOVEVxYdHU16ejoiwsCBA/2+v6AvlGvWrKFv377Mnz+f3Nxc23GuKCYm\nhrfffttT1BcuXGg5kVLe+fOf/ww4ByjXrFlDYmKi5URXtmPHDubOncvw4cPZtm2b/3foTf+8Nl/U\n8BjlAw88YMaMGWMA89Of/rRG27AJME2aNDFjxowxq1atsh1HqUqlp6ebkSNHmpYtW5qavldtmjNn\njgHM2LFjzezZs01xcXG1Ho+XxyiDslB+/vnnngO2DofDbNmypdrbsG3WrFkVDjwrFYzw8eBIoB07\ndqzCc0hPT6/W470tlEHZ9XafgW+MobS0lMGDB1tOVH3PPfccxhjS09NtR1Hqip5//nmMMSF5TL1l\ny5YVBnhKSkr8sp+gKpSTJ09GREhOTrYdxWfco/PuA+XvvPOO5USqrsvOzq4wcNO2bVvLiXxDRJg+\nfToiQv/+/X267aAqlG+99RbNmjUjOzubU6dO2Y7jE3379uXbb7/1TLfcsWOH5USqrtuyZQvgLJjf\nfvstU6dOtZzIN/Lz88nOzqZbt25s377dtxv3pn9emy+8OD53yy23eI4xxMXFVesYQyhxP8cmTZqY\nl19+2XYcVce8+uqrBjBRUVFhfdx82LBhBjCRkZFm0qRJpqSk5LL3xctjlEExhdHdBUhISCA9PZ0b\nbrjBr5lsefLJJ3nuuedwOByUlZXh79+9UuWVn+43a9YsnnvuOYtp/Cc7O5vrrruOsrIywLmWZpMm\nTSq9b9DP9S4rKyM3N5eysjI6dep0xScTbu644w7efPNNcnJyiI2NJT4+3nYkFcZOnDjBuXPn6NSp\nE0OGDGHz5s22IwWMiJCVlUWTJk3o0KHDv8wND/pl1mbNmkXHjh3p1KkTgF9XJg8248ePB6BTp060\naNGCr7/+2nIiFa7OnDlDixYtPO8zW8uU2ZSUlERiYiKjR4+u8Ta8+igIEXkEuAsoA/YAPwcSgHQg\nDvgCuMMY4/XY/Pr164HgWZkkkCZMmEBZWZln5DE/Pz+o5q6r8PHDDz8AdfN9BlR4n9VmBk+VLUoR\nSQAeBPoYY67DWVynAvOBBcaYbkABzkJaJfdCtz4flQox5bsAgwYNQkT44x//aDGRCif/8z//g4h4\nPr6hrhZK9/usdevWnDp1ChGp0UdZeNv1jgAaikgkEAMcAYYBK1w/XwaM92ZDGRkZ9OjRg5tvvpmd\nO3dWN2/Y+eMf/8iIESNwOBw88cQTtuOoMPHYY48hIqSmpvLyyy9b/WCuYLB69WqGDh3KgAEDyMzM\nrPbjvRrMEZGHgGeBH4A1wG+ArcaYrq6ftwXed7U4L32sMcawZMkSLly4wEMPPcTrr7/OHXfcUe2w\n4ax58+bk5+ezcOFChgwZYm3VdhXaMjIy2L17N7/5zW8qzFhRThs3biQ5Odnze/F2MKfKY5Qi0hQY\nC3QAzgBvA6MquetlX5Hx48ezcuVKz/UBAwZUtds658knn+TRRx/loYceAv55bEWp6hg2bJjn8q9/\n/WuLSYJTVlYW4Pzo6eqoskUpIrcBI40xv3JdvwMYDNwGtDLGlInIIOAZY8y/FFARMWlpaaSlpel/\nNy+cOHGCFi1a6O9K1Yj7+L/2SCpX0xalN8coDwGDRCRanE2cEUA2sB6Y5LrPncC7l9uAtoy8FxUV\nBfxzbvjLL79sOZEKdpmZmRXmbjds2NByovBTZaE0xmwDlgM7gV2AAK8As4DfisgB4Crg1Stswydh\n64KmTZuycuVKz6K/S5YssZxIBTv3qj8LFy7kk08+oXv37pYThZ+AzMx56qmnePbZZ7VgVpOI0LRp\nU/r378/999/P2LFjbUdSQSQ9PZ1FixZx4MAB8vLy9P3lhQ0bNpCSkuKXrnetRUdHB2I3YWfmzJkU\nFBSwdu1axo0bZzuOCjJTp05l48aN5OXlce+999qOExLcn2tVXQEplKWlpYHYTdiZN28exhiWLl1q\nO4oKIuVbjnPmzAnZRXdtqGmrOyCFMjLSq5mS6jJ69OgB/HOA529/+5vlRMqWL7/8EofD4Rm4ad++\nveVEoaWmA8sBqWD+Wp69rhg4cCBHjhyhsLCQTp06sXv3bm699VbbsZQF7qm/OTk5REdH07p1a8uJ\nQktQtyi1UNZe69atPR8hOnv2bBo0aMB//ud/Wk6lAuXVV19FRDwz2hITE7VI1kBxcXGNHheQQlnT\nA6jqXz311FOA85+PexaPCn+//OUvAahfvz5PP/205TShq6YDy0H1mTmqanPnzsUYw5gxYwDYu3cv\nR48etZxK+cvRo0fZu3cvAL1796awsJDf//73llOFrpoOLAekUNarV08HdHxs0iTnpKhrrrmGhIQE\nDh48aDmR8rUffviBhIQErrnmGgBGjapsiQVVHUE9mFNcXKzHKX1s8uTJTJ48GXC++GfOnLGcSPla\nUVERoDPbfCmoB3PcH/Kj/KdXr16ICAsWLLAdRdVSeno6IkJcXByghdKXgrrrrYti+NcLL7zALbfc\nAjgXbFWhbebMmQCMHTuWJUuW6PvHh9yLzlSXnkcZBh555BEeeeQRGjVqxLlz53j++ecZNmwY/fv3\ntx1NVcMnn3zC559/zrFjxwAqrOGqfKOmvduAFMoGDRoEYjd13tNPP83MmTM9LRJd/De03HjjjZ7L\n9913n8Uk4aum74eAdL1repKnqp4nnngCYwyHDh0C9JBHKNq0aRPGGF566SXbUcJSUA/m6Bs2sNwn\n1brnhr/yyiuWE6nL2bx5c4VFd2NjYy0nUpUJSKHUUbvAio+P5/3332fx4sUAvP7665YTqctxv0aL\nFy9mw4YN9OrVy3IiVZmAFEr3+WAqcEaNGuWZ9vb3v/+dG264gb/+9a+WUym3//3f/6Vfv358+OGH\ngHOKYnJysuVU4S+oTw/ShXvteeKJJzhz5gybNm1i4sSJtuMol2nTprFjxw7y8vK4//77bcepM2o6\nQ1BPOA9z8+fP/5eFXcsfCnFfLv+9stsud/9g30Z17h/IbYDzfEljDC+++CIqMGp6GDAgpwfpPG/7\n3Me+dGAteHTq1Ml2hDonqOd66wnn9g0ZMoSTJ09SVFREWVkZDofj0g9YQkQoLS0lMjLS06ITEUpK\nSqhXrx5lZWWe28p/v3QbJSUlREVFYYzx7Kuy7ZbP4f4DrmwblWW79LHlt+H+WWW5K8tRPo97BPpK\nz738vo0xFXK4f1ZVjqioKJo3b27hL6FuC+oWpRbK4NCsWTPbEZSyShfuVUqpKujCvUopVYWgPj2o\nfv36OqCjlLIuqOd6FxUV6XFKpZR1QT3Xu6bNXaWU8qWantOti2IopeqMmg4sa4tSKVVnBHXXWxfu\nVUqFMl24VymlqhCQQume0qWUUqFIVw9SSqkqaNdbKVVnBPXMnHr16gViN0opdUW6cK9SSlUhqE8P\n0halUioYBPVcbz1GqZQKBkHdotSZOUqpYFDTxXm8KpQi0kRE3haRfSKSLSIDRSRORNaIyH4R+UhE\nmlzh8TUKp5RSvlS/fv0aPc7bFuV/AO8bY3oAvYAvgVnAx8aYbsA64Hc1SqCUUgHit9ODRKQRcIMx\nZimAMabEGHMGGAssc91tGTDuctvQhXuVUsHAn4M5nYCTIrJURL4QkVdEpAHQ0hiTB2CMOQbEX24D\nxcXFunCvUso6fw7mRAJ9gJeMMX2A8zi73V7vUc+jVEoFg5rWIm/6w4eBXGPMdtf1FTgLZZ6ItDTG\n5IlIK+D45TawYcMGANLS0khJSSElJaVGYZVSqjZ2794NOGtRdVTZonR1r3NFpKvrphFANvAeMMN1\n253Au5fbxpAhQwAoLCzks88+q1ZApZTylaSkJMBZKKtTLMWbPruI9AKWAFFADvBzIAJ4C2gHHAIm\nGWMKKnms+fzzz+nfv7/nto8++ojU1FSvQyqllC9kZmYydOhQz7FKEcEYU+UIj1dD0caYXUD/Sn50\nozeP79evX4VgJ06c8OZhSinlU0E9hfFS06dPR0SYMGGCjd0rpVS1BLxQHj58mBUrVtClSxfeeeed\nQO9eKaWqLeCFsk2bNkyYMMEzlahHjx7MmDEj0DGUUnVQUC/cW5mFCxcSExPDl19+ybJlyzh79qyt\nKEqpOiIqKqpGj7NWKIcPH84PP/zgGeQxxlBWVlbjM+eVUqoqNT3h3PrHI7oLY9OmTYmIiOCBBx6w\nnEgpFa5CatS7PBGhuLiYwsJCAJYvX245kVIqXAX1wr1ViYyM9AzuHD9+HBHhpptuspxKKRVu/Lpw\nb6BkZmZy7bXXctVVV/HRRx/ZjqOUCjP+Xrg3IG644QZ2797NypUrAVi7di2ZmZk6wKOU8omQOz3o\nShITEwFITU1l6NChvPjii5YTKaXqsqAslG3btsUY42lJZmVlWU6klKrLgrJQXuq1115DRBg9erTt\nKEqpEBbSo95XcuDAAe677z6uu+46PvjgA9txlFIhLGTPo6zK1VdfzUsvvcSwYcMAePjhh5k7d67l\nVEqpUFTTFqVXC/fWhogYX+zjs88+Y9CgQZ7r69at8xRPpZTyxsaNG0lOTq72wr1B36J0GzhwYIUB\nntOnT1tOpJSqK0KmUF5q4sSJiAi333677ShKqTAXkoXyyJEjvP/++3To0IG3337bdhylVJgLyULZ\nunVrRo0aRUREBAAdOnRg+vTpllMppYLV5s2b6dOnDxMnTqzR40NmMKcy69atY+zYsZw7dw6Aixcv\nUq9ePb/sSykVusqfFvSTn/yENWvWeG73ZjAnpAvlJfvhwoULREREEBkZWePzpZRS4cM9ABwREUGL\nFi3Iy8ur8POwG/W+EveqxTExMdSrV4/f/OY3lhMppWwzxuBwODyH6Grzqa9h06Istz86dOjAt99+\nG7B9KqWCk4hQUFBAo0aNEJF/6WnWqRblpQ4ePIiIkJqaajuKUirANmzYQGxsrKcoiggOh6NWh+PC\nrlBu3LiRvn370qpVK9auXWs7jlIqwB544AHOnz9P586dmTZtGo0bN671NiN9kCuo/PjHP2b79u2s\nXbuW1NRU3nvvPerXr09qaqoO8CgVxo4cOcL27ds9n7/19ddf+2zbYVco3a6++moAxo4dC8B//dd/\ncc8999iMpJTyozZt2ngujxs3zqfbDruut1vHjh0rzA3fvXu35URKKX978803Mcbwzjvv+HS7YVso\nL7Vo0SJd/FepMLNjx44Ko9nNmzf3y37Ctutd3jfffMOiRYtYu3atLv6rVBhZsWIFAI8++ihxcXGM\nHDnSL/sJu/Mor+See+7hlVde4e6776Zly5b8/ve/tx1JKVUDBw4cYMGCBXz22Wfs2rWr5gvy1rUp\njN7YunUrQ4YM8VzftGkT119/vcVESqmauNzc7Zpsp86ecH45gwcPrjDAc/bsWcuJlFI1NWXKFIwx\nNS6S1VGnCuWlRo8ejYgwefJk21GUUlXIy8urMHDTr1+/gO27TnW9yzt27Bj79u1j+vTpHDlypMbH\nOJRSgbF9+3b69+/PunXrqFevHoMHD8bhqF1bT49Reqlt27Z89913xMfHM3z4cNLT021HUkqVs2nT\nJn79619z+PBhzpw549NGjRZKL61bt44JEyZw5swZoOYfZ6mU8o/yAzcjR47kww8/9Om2tVBWQ2lp\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n", + " Step(20, 70, Direction.UP), \n", + " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n", + " Step(0, 0, Direction.RIGHT)]\n", + "\n", + "heart_tour = ''\n", + "current = Step(0, 0, Direction.RIGHT)\n", + "\n", + "for hp in heart_points:\n", + " while not (current.x == hp.x and current.y == hp.y):\n", + " s, proposed = seek(hp, current)\n", + " heart_tour += s\n", + " current = proposed\n", + "\n", + "plot_trace(trace_tour(heart_tour))\n", + "\n", + "def heart_tour_func(): return heart_tour" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'LRLRFRFFLFRFLFLFFFFFFRFFFFLFRRFFRLFLLRFFFLFFFRFFFLLFFRRLFFFRRFFLFRRFRFLFRRLRFRLRLRRFFFFRRRLFLFFLLLFLRFFFFFFFFRRFLRFFFRFFLRFFFRFRLRFRFFFRFFFFFFFRRFRLFFFLLRFFRFLFFLFFLLFLFFFFFFLFLFLFRFRRLFFFRFFLRFFLFRFFLRFRFRFFFFRFRRRFFLLFFLFLLFLFFFFFLLFLLLRFLFFFFFFLLRLLFLLFLRFFFLFFFRFFFFRFFFFFFFFFFFFRFRFLFFLFFLFLFLFRFRFLFFFFFLFRLFLFLFFLLRRRLLLFFFFFFFFLFFLFFRRFFRFLLFFRFFFFLFFLFLFFFLLLFFFFFRFFRFLFFLRFFRFFFRFFLRLFFLFFRRFRFFRFFFLFRFRFFRFLFFFFRLFFFFLFFFLLFLFRRRFFFRLLFFLLFLFFLFRLFLRLRFFFFFRFFFRLFFRRFRFRRFRFFFRFLFLFLFFFRFFRLFFRRFFFFFFRLLLLFFLRRRFLFFFLRRFLLLFFFFFFLLFLFFRRRFFRRRFLFFLFRFLFFFLFFFFLFLFFLRFFFFRRFFRFRFFLLFRFLRFRFLFFRRFLFFFFLFFFLFFLFRLLFFLLLLLFRLLFFLFLLRRLLLLRRFFFLLFFRFFFFFFFFRRFFFLRFLLFRRFLFFFFFFFFFFLRFFFLFRFFLFLLLFFRFLFFLRLFFFLFLLFLFLFFRFRRFLLFFLFLFRRFFFFFFLRFLLFFLFLRFFRRFFFFFFFFFRRRRFFRRFRRFFFRFFFFFFFRLFFFRRFFLFFLLRRFRFFFRLLFFFLLRFFFLFRLFFRFRFRRFFFFFFFFFFRFRFFFRFRRRFRLFFLLFLLFLFFFFLFFRLFRLRFFRFLFFFFFFLFFFFFFFLFFFLFFLLFRFLLFRFLLLLLRFFFFFRFFFRFRFFFLLLLLFFFFLLFFFFRFFRLFFFRRRFFFLLFLFLRFFFFLLFLFRLFLFFFFFFFRRFRFFRFFRFFFLRLRFFLLFRFFFFFFFRFFFLFFLRLFFFFFFFFRFFRFFFRFFRFFFRRFFFFFFLFFFLFLFRFFRRFFRLFLFLLRFLRFRFRFFFFLLFFRLLFFLFFFLRFFFFFFRLFLFFFFFFRRRFFRFFFFFLFFFFFRFRFFFLFLFLFFLRFRRRLFRRRFLFFFFLFLRFRFRFFFRRLFFFLLFFLFLFFFFFLLFFFFFLFLLFRFFFRLLLFFFLFFFLFFFFFFFFRRLFFRLLFFRRFFFRRFFFFFRRFRFFRFRFFRFFLFFFFFFFFFFLLFFFFLLFFFFLFFFFFFFFLRFRRRFFFFFFFFRRRRLRFLLLRLFRRFRFRFRRRFRLFFFFLFLFFLFLLFRFFFRFFFRLFRFFLLLFFFRFFFFFRFFRFFFFRLRRRFFRLLRFFFLLFRLLFLLFFRFRFRFFFRFLLFLFFFFFFFFFFFFLFFLLFFLLFLFRFFFFRFRFRRFRRRFFFFRFFRFLLFRFLRFFFFFLFFFRFRFRFRFFFFFFRLRFLFRFFRRRRFFFFFFFFRRLRRFRRFFFFFFFRRRFRFFFFFFRFFRFFFFLFFRFLFFFRFFRFRLFLFFLFLLLFFFFFFFFLLLLLLLFFFRLLLFFFFRRFFFRRFLFLLFRFFFRFFLFFLFRFFFRFFFLFFFFFFLFFFLFFRLFFFFLFLFFFLRFFLRFFFLLRFFLLLRFRRFFLFFLLLFFFLFFFRFFRLFRFLRFRFFFRFRFFFRFRFRLFFFLLFFFFRRFFLLFRLRLLFRFFFFFFFFFFRFFFFFFFFFFFFRFFFLRRRFLFFRRFFFLRFRRFLFFFFRFFFRRFFFLLFFRRFRRLRFFRFFFFFFFFFFFRRLRFRFLFFFFFFFLFLFFFFFFFFFFFFFLFLLFLRFRRFFFRRFRRFLFLRFFFRLFFFFLFFFLFLRFFRLFFFFRFRFLFRFFRFFLLFFLRFRLFFLLFFFRFLFFLFLFFFLRLFLRFFFFFLFLFFLLFFFFLRFRFLLLRLFFFFLFFFFLLFLRRRRRRFFFFFFRFFLFRFFFFFFRFFFFFFLFFFFRFRFFRFFLFFFFFRFRFFLLFRFRLFFFFFFLLFFFFFFFFLLLRFFFFFFRFFRFLFFRLR'" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# lc = trace_tour(('F' * 50 + 'L') * 4)\n", + "# lc = trace_tour(('F' * 50 + 'L' + 'F' * 20 + 'R' + 'F' * 20 + 'L') * 4)\n", + "# lc = trace_tour(('F' * 60 + 'R' + 'F' * 30 + 'L' + 'F' * 60 + 'L' + 'F' * 60 + 'L' + 'F' * 30 + 'R') * 4)\n", + "lc = trace_tour(heart_tour)\n", + "rw = guided_walk(lc, wander_limit=8)\n", + "rw" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(rw))" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nmaU4RMws5f8Az4SYkuCKQGwAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rw_trimmed = trim_all_loops(rw)\n", + "plot_trace(trace_tour(rw_trimmed))" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(rw_trimmed)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(250,\n", + " 92,\n", + " 'LFLRRFFFFRFRFRLLFFFFLFFFFLFLRFFRFRLLFRFLRFFLFFFLFRLRFFLFLFRLFRFFFFRFLFFFFFLFFFLRRLFFFFLLRFRL')" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nBPf/AaHHidH8UAAMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lc = trace_tour(square_tour(a=10))\n", + "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", + "rw_trimmed = trim_all_loops(rw)\n", + "plot_trace(trace_tour(rw_trimmed))\n", + "len(rw), len(rw_trimmed), rw_trimmed" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# success_count = 0\n", + "# while success_count <= 20:\n", + "# lc = trace_tour(square_tour(a=10))\n", + "# rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", + "# if rw:\n", + "# rw_trimmed = trim_all_loops(rw)\n", + "# if len(rw_trimmed) > 10:\n", + "# with open('small-squares.txt', 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# success_count = 0\n", + "# while success_count <= 20:\n", + "# lc = trace_tour(square_tour())\n", + "# rw = guided_walk(lc)\n", + "# if rw:\n", + "# rw_trimmed = trim_all_loops(rw)\n", + "# if len(rw_trimmed) > 10:\n", + "# with open('large-squares.txt', 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# success_count = 0\n", + "# while success_count <= 20:\n", + "# lc = trace_tour(cross_tour())\n", + "# rw = guided_walk(lc)\n", + "# if rw:\n", + "# rw_trimmed = trim_all_loops(rw)\n", + "# if len(rw_trimmed) > 10:\n", + "# with open('cross.txt', 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# success_count = 0\n", + "# while success_count <= 20:\n", + "# lc = trace_tour(quincunx_tour())\n", + "# rw = guided_walk(lc)\n", + "# if rw:\n", + "# rw_trimmed = trim_all_loops(rw)\n", + "# if len(rw_trimmed) > 10:\n", + "# with open('quincunx.txt', 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nBPf/AaHHidH8UAAMAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(rw_trimmed), filename='test.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n", + "# tours_filename = 'tours.txt'\n", + "\n", + "# try:\n", + "# os.remove(tours_filename)\n", + "# except OSError:\n", + "# pass\n", + "\n", + "# success_count = 0\n", + "# while success_count < 100:\n", + "# lc = trace_tour(random.choice(patterns)())\n", + "# rw = guided_walk(lc)\n", + "# if rw:\n", + "# rw_trimmed = trim_all_loops(rw)\n", + "# if len(rw_trimmed) > 10:\n", + "# with open(tours_filename, 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found mistakes: 1867\n" + ] + }, + { + "data": { + "text/plain": [ + "(5242,\n", + " 1244,\n", + " 'LLFFFFFLLRLRFFFFFFFRFFFFFFRRFFFLFFFFLRFRLFFLFFLFRRLFFFFRFLFFFRLFRLFFLFFFFRLFLLRRFFFRFRFLFRFFLRFRFLFLFRFFFFLLFFFFFFFRFFFFFFFFFRFFFRLFFFLFFFFLFFLRFFRFLFRFFFFFFFFFLLFFFRFFLRFFRLFFFLRFLFFFFFFLFRFRFFFFFFFFFRFFLRFFRLFLFFFFRFRLLFRFFRFLFFLFFFRLFFFFFLRFRFFFFFLRFFFLLFFFFRRLRFFFFLRRFFFFLFRFFLFFFFLFFFFLFFRRFFLFFFRFRLLRLRFRFLFRFLFFFFFFFLFRLLRRFFFFFFLFLRFLFFRFFFRLRRLLFFFRLFLRFLFRLFFFFFFRFFRFFFFLFFRLRFLLRFFFFFFLFRLFRFLFFRFFFRFLFLFRRLLRFRFLFFFFFLFLRLRRFLRFFFFLLFRFRLFLRRFFLFFFFLFRFRLFRLFLFFFFRFFRFLLRFFLLRFFRFRFLFLFRFLRFRLLFFFFRFFFRFFFFLRLFRRFFLFFLFRLFFFFRRFFFLFRFFFFFFFLLFFFRFFFRFFFLFRFLFFFLFFRFFFLLRRFFFLRFFLFFFRFFFFLFFFRFLRFLFRLFFFRFFFLLFFFFFRLFFFFRFFFRFFFFFFFFLLRFFRLRLFFFFFFFFFFFFFFRFFFFFLLFRFLFRFFFFFFLFLFRRFFFFFFRFLFFFFLFFFLFFLRRFFFFFFFLFFRFRFFFFFFFLFFFFFFFFFLFFFFFFFFFFRLFFLRFFFRFFFFRFLFFFFFFRLFFRLFLRFFRFLFRFFRFLFFFLLRFFFRLLRFRFFLFFRFFFFRFFFLFRFLFFFFRFFFFRRLFFLFFLFLRRLFFFRFLLFFFFRRFLFFFLFFFRFFLFRFFFRFFLFFFFFFFFRFLFFRFLFFFFLFFFLFFRFLRLFFFFRRLFFLLRLRRFFFFFFFFFRFLFFFFFFFFLFFFFRFFRFRLFFLLRFFRFFLLFFFLRFFFFFRRFFLRFLFFFLRFRFFFLFRFLFLFFFFFRFFFFFFFFFLFFFFRRLRFFLFFFFFLFLFFRFFLFFRRFFFLFFRLLFFFLRFFFFFFFFFRFFRLLFRFLLRRFRFFLFFFLRFFRFLFFRLFFFRLLRFFRFLFFLRFFFFFRLRFFFLRFFFFFFRRFLFFFLFFFFRRLFFRLFFFFFLFLFRLRFFRLFFFLRFRFFFLFRFLFFFLFRLFLFRFRLFFRFFFFFFRLFFFFLRL')" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lc = trace_tour(cross_tour())\n", + "rw = guided_walk(lc)\n", + "print('Found mistakes:', len(mistake_positions(trace_tour(rw))))\n", + "rw_trimmed = trim_all_loops(rw)\n", + "plot_trace(trace_tour(rw_trimmed))\n", + "len(rw), len(rw_trimmed), rw_trimmed" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(rw))" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_trace(trace_tour(trim_all_loops(rw)))" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[Mistake(i=8, step=Step(x=0, y=0, dir=)), Mistake(i=30, step=Step(x=0, y=-8, dir=)), Mistake(i=31, step=Step(x=-1, y=-8, dir=))]\n" + ] + }, + { + "data": { + "text/plain": [ + "'RFFRLFFLRFRFLLFFFFLLFFFFFLRRFRFFFFFFLFFFFFLFFRLLFFFLRRRFFFFRRLFFFFFLFFRFRFFRFRLRLRFFFFFFFRFFRFRRFRFFFFRFFFFLLLFRRRFFFRFFFRFFFFRFFFLLFFFLFFFFLRFRLFFLFFLFRRLFFFFRRFFRFLLLFFFRFLFFFRLFLFRFFFLLRLRLFRFFFRRFFLFFLLRLLFFFFFFRLFFFRLLLFFFRLLFRFFFFRFRFFRFLFFFLFFLFFFFRLFLLRRFFFFFFRLLFFLFFFLFFFRFLFRFFLLRFRRFLFRLLFLFFLLFRFLFLFRFFFFLLFFFFFFFFRLLLFLFLFFRFLFFFLFFFLLRFFFFFLFFFFFFFFRFFFRLLLLLFFFLFFFFLFFLRFFRFLFFFFRRRFRLLRRFLRRLFFFFRFFFFFFFRRFFFFFLLLRFFRFFFFRFFFFLRRFFFFFFFLLFFFLFRRLLFFRFRFFFRRFFFRFFFRRFRFFFFFFFFLLFLRRLLRFFFRLFRFFLLFLLFFFLRRRFFFFFFFLFLLFLLRLLLLLFFFFFFFLFLLLRLFFLLFFFRFFLRFFRLFFFFRLLFRLFLLRLFFFFFLFFLLFFRFLRFRFLFLFRFFFFFRFRRRRFRFFFFFFRRFLFLLFLFFFFLFRFRFFFFFFFFFFFRFFLLRFLFLFLFFFFRFFLFFFRFFFRFFFRFLFFFLLLRFLRRFFLFLRRRFFFFFFFRFFFFRFFFFFFRLFFFLRLLFLRRLFFFFFLFFFRFFRFRFFLRFFRFFRFRRLRFFLFFFFFFLLFLFFRLFRLLFRRRFFRFRFFRFLFFLFFFFRRRRFFFFFFRLFLRRRFRFFFFLFFFLLRFFRFFFFLLFFFFFFFFLFFFFFFFFFFFFFFRFFRFFRFFFLLFFFFLFFRRFRFLFFFRFRLFRLFFRRFFFLLFLFLRFFFLRLLFLFFFFLRRFFRFFRFLLRRFFFFFFFFRRLFRRFRFFFFFLRFFFLLFFFFRRLFFFLLLLFFLLLLRFLRRFRLFFFFRFRRFFFFLRRFFFFLFRFLFFFRLFRLFFLRFFLFLFFFLRLFRFFFFFFFFRFRFRRLRFFRFFLFLFFLFFFFFLRFFFFLFFFRRFRRFFLFFFLLLFRFFLFFFRFRLFFFLFFFRRRFFFRFFRFLFLFLFFLRLFRFFFFFFLLLFFFRFFRLRLLRLRRLLLLFFFLFRFFLLFLFFRFFFFLFFLFFRFFRFRRRFFLFLRRRFFRFFRFFFLFRRFLLLLRFLFFFLFFFFFLFFFLLRRFFRRFFFRFFFFFFFRRFFRLFFFFFFFLFRLLRRFFFRFLFFLLFFRRFFLFLRFLFFRFLFFRRFRLLFRLRRLLFFFRLFLRRLFLRLFFFFFFFRFLFFLFFFFLRFFFFLRFFLFLFFFFFFRLLFFFLRFFRRLFFFLLFLRFLFFFFFFLFFLFRRRLRRLFLFFFLFFFRLFRFRFRRRRFRFLFFLLLFRLFFRLRFFRRLFFFFRFRFFLRRFRFFLFLRRLFFRRFFFFFFRFLRFFFFFFRFFLFFRFFFLFFFRLRFFFFFFFFRFFFFFFFLFFLFFFLFRFRLFRFRRLFLLFFLFFFFFFFFFFLRFFFLRLRFLFFFFFFFFFLFFRLRFLLRFFFFFFLFFFLRLFRRFLFFFFFFLFRRRLLLFRLLFLFFLFRFRLFLRFFFRFLFLFRFFFRFFFFFFFFFFFRFLRRRFFRRRFFFRRFFFFFRRFRLFFLFFFFRLFFFLRLRFRFLLFFFLLFRFRFFFLFLFFFRFRFFRFFFRFFFFFRFFFLFFFFFLRLRRFFRRLRFRRFFFLRRFRFRFLLFRFRRFFFFFFFFRRFFFFFFFRRLRFFRFLFRFFFFFLFRFLLLFFRFLFFFFLFFLFLFRRLLRFFFFLRFFRFLFFLFLFFFLFRFFLLFRRRFFLLFFRRFFFFLLFFFLFFFFFLFLRLRRFLRFFFFLLFRFRLFLRFLFLFLRRFFRFRFFFFFFLFFFFLFRFRLFRLFFFLFFFFFLRLRRRFFFFLFRFFRFFRFFFFRFFLFFLFFFFFRFFRFLFFFLFRFFRRRFLFLFRFFRLRFLLLFFRFRLFFFFLFLLFLFRFFLFFRFRFFFLFFFLFFFRRLRFLRRFRLFFFRRRFLLFFFLLRRFFFRFFFFFRFFFRFFFFFFFRFRFLFFFFLRRRFFFRFRFLRFRLLFFFFRFLFRFFLFRFFFFRFLRRFLRRLLFRLRFLRRRLLFFFFRFRRFRLLLFFLLLFRFFFRRFFRLRFFRFFFFRLLLRRFRLLLLFFFFRRFRFFFRFRLLFRRFFFFRFFFFFFFFRRFFLFFLFRLFFLFFRRFRRFRRFLFRFRFRLRFLLFLFFRFFLFFLFFLLFFFRFFFFLFRRFRFFFFFFRFFFFRFFLFFFLLFFFFFRLRRFFRFRFLRLLFFFLFFRLLFFFFFFFFFLLFFFFFRFRRRRRFFFFRLRFRRFRLFFFFLFRFFFFFFRFRFFRFRFFFLLFFFRFFFRFFFLFRFLFFFLFFRFFFLLRRFFFLRFFLFFFRFFFFFFFRRFFFFFLLFFLFFFFFRFLRFLFRLFFFRFFFLLFFFFFRFFFRFFFLLFFFLFFFRFFFFRFFFRFFFFFFFFLLRFFRFFFFRRFRLFRRLFFFFLFLLFLFFFFFFFFFFFRFLLFFRFLFFLLFRFFLFFFFFFFLLFRFFFFFRFLFFLLRLFFRFFLFLFLFLFFRRLRFFRFRFLFFLFFLFFLLLRFRFRFRFRFRFFRFFFFFFLFLFRRFFFFFFRFLFFFFLFFFRLLFRFFRLRLLFFFRFLFRRLFFRFRRFFRLLFFFLFLLLFLRFFFLFFFFRFFRFFFLRRFFFFRFFRRFFRFFFLFFRFFFLLFFLLRFFFFFFFLFFFFFFFLLLLFFLFFFFFFFFFRLFRLFFFLFFFRRFLLLRRRFRFRFLFFFFFLFLRLFFLFFLLFLFFFFLFLLLRFFFFFRFFRRRFFFFFFFRLFFRRFFLFFFFFFLRFRFRFRFFFFFLFFFFFLFLFRRFFRFFLRFFLFRFFFRRFFFLFLFFLLLRFLFRFRRFFFRFFRFLFFFLFFRLFFLFLLFFFRFRLRLFRRLRFFFRLLRFRFFFFFRFFFLRRFLFFFRFLLFFLLFFRFFFFFFFFFRRFRRFFFRFFFFRFFFLFRFLFFFFRFFFFRLLRRFFRFRFLLFFLFFLFLRRLFFFRLLFFLFRFFFFFRRFLRFRFRFRLFFFRFRFFRLFFLRRFLLLFLFFRFFFFRLFLLFFLFRFLFLLFFFRFRFFFFRFFRFRFFFLRRLFRFFFRLLLFFFFFFLFLRFLFFFLFLLLLFFRFFFRRFRLFLRFFFLFFFFFFFFLFRFFLFLFFFFFFFLFFLFRRFFFRRFFFFFFFFFFLLLRFLLFFFLLFFFFLRRRLRFLFFFFRRRFFFFRFFLFFFFFRFFFFRLLLFFFFFFLFFLLLRLFRFFLLFFFFFLFLFRLFFFRFFRRFFFLRFRRRRLLFFFFFRLFFFLRFLRLLFFLFLFFFFFFFLFFLLLLLFLLRLLFLLRLRFFFRRLRFFFFRRFRRFRFFFFRLFFFFFFFFFFFRFLLFFLFFFLFFRFRFRRFFRFFRFFLLFFLFFFLFFFLFFFLFRRLRLFFFLFRFFRFRRFFLLFFLFLFFFFLFFRFFFFFFLRLRFFRFFRFLLFRLLFFFFFLFFFFFFRFFFFRFRFRFFFFFFFFFFRFLFFRFLFFFFLFFFLFLFFRFRFFFFFFRFFLFLRFRFLLFLFFLFRFFFRRLFRLLLFLFFRRLRFFRFLFRRFFFFFFFLRLLFFFLFFFRLLFLFLLLRRRLFFRFFFLLLFLFFFFFFFFFFFLLFFFLLRFFLLFFFLFFLFRLRFFFFRFRFRFFFRRFFFRFFRRLFFLFFFFRFLFRFLFFLFFFFLFLRFFFFRFRFFFFRFRFFFFFFRRLRFRFLFLFLFFLFFFFFFFFFRFLFFFFFFFFRRRRLRFFFLLFFLFLFFLFLRLLFFFRLFRRFFFFFFFRFFRFRLFFFLRFRFFRRRFFFRLLLFFFFRFFRRRLFRFFFFFLLFFFLFFLRFFFLRFFRRLFFRFRFRLFFFFRFFLFFFLFLFFRRFFLFLFLRFFFRLFFFFLLFFFLRFFFFFRRFFLLFFFRRFLRRFLFFLFFFFLFFFFRRFFFFRFRRFFFFFLFFFLFRLFLFFFFFFFFFFFFLFRFFRFLLLRLFFLFRFFFRFRFLFFFLFFFRFLFFFLRLFFLFFLFLFFFFLFLFLFRFFFFRFRFFFRFLLFLFFFFFFFFLFFLFFFRFRFFRFFFLFRLLFFLRFFFFFRFRFFFFFFFFRFFFFFFFFRFFFFFFFFFRRLFLLFFFFFFFRRLRFFLFFFFFLFLFFRFFLFFRRLLLLLLFLLFFFFFFRFRFLRRFFRFLFFRRFRLRRFFRLLFFFLRFFFFFFFRFFLFLFFFLFLLFRFFRLLFFRFFFFLLFFFFFFFFFLFLFFFFFFLLRRFRFFLFFFFFFRFRLFFFFFFLRRFFRFFRLFFFFFFFRRLRFFFFRFLFRRLRFFFFFFFFRFRRFRRRFRLFLFFFRRFRFFLLLFLFLFFRRFFFRRRLFFLFFLFFRFRFRFFFFLLFLFRFRFLLFFFFFLFRFLFFLFFFFFLFLFRFFRLFFLRRFRFFFFRFFFFRLFFFRLFRFRRRFFFLRFRFFLLFFFLLRRLFLRFLRRFRFFRFLFFFLFRRFRFRRFFFFFFFLLFLFFFFLLLRFRRFFFLRFFFFFRFLFFLFLFFFFFLRRRFFFFFRFLFRLFLLRLFFLFFFFFRRFFFLFRFFRRFFFFRRFFFFRFRRFRRRFFFFFRFRRLFFFFRRFFRFRFLFFLFLFLFRLLFFLLFRLFFFRLLLFLFRLRFFLFFRLFFFLRRRRFFFFRFFRFFFLFFLFFFFFFFFLRRRFFFFFFFRLFLLLFFLLLFFFFFFFFFFFLFLLFFRFFFRFFFFFFLRFFFLFFLLFLFFRLRLFLFFFLFFFLFRRLLLFRFFRLRRFLFFLRFFFFFFLRLLFLFFRLLLFFRFRRFFFFRRRFRFFFFFRRRRFRLLLFFFFRFLLFFRRRRFLLFFLFFLFFFFLLLFFFFRFFFRFFFFFRFRRFRFFRFLLFLFFFLFFLLRLFLFFFLFLFRLRFRLFRFLLFLFFFRRFRRRRRLFFFLRFLLRRRFFFFFLFRFLFFFFLRFFRLFLFFFRFRFFFRFFFRFFFFFFFFFLRFFFLFLRFRFFLLFFRFLFFFFFFFFFFFFLFFFLFRLFLFRFRLFFRFFFFFFRLFFFFLRL'" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_tour = rw\n", + "w_trace = trace_tour(w_tour)\n", + "mks = mistake_positions(w_trace)\n", + "print(mks[:3])\n", + "trim_loop(w_tour)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1867\n", + "1863\n", + "1860\n", + "1859\n", + "1850\n", + "1843\n", + "1837\n", + "1833\n", + "1831\n", + "1829\n", + "1821\n", + "1816\n", + "1814\n", + "1799\n", + "1793\n", + "1788\n", + "1784\n", + "1778\n", + "1777\n", + "1772\n", + "1764\n", + "1760\n", + "1758\n", + "1755\n", + "1752\n", + "1748\n", + "1736\n", + "1731\n", + "1726\n", + "1717\n", + "1705\n", + "1700\n", + "1695\n", + "1692\n", + "1686\n", + "1681\n", + "1677\n", + "1674\n", + "1669\n", + "1661\n", + "1658\n", + "1657\n", + "1653\n", + "1646\n", + "1644\n", + "1642\n", + "1636\n", + "1625\n", + "1623\n", + "1609\n", + "1602\n", + "1597\n", + "1596\n", + "1595\n", + "1590\n", + "1586\n", + "1582\n", + "1571\n", + "1569\n", + "1565\n", + "1564\n", + "1563\n", + "1561\n", + "1557\n", + "1550\n", + "1548\n", + "1547\n", + "1541\n", + "1536\n", + "1534\n", + "1532\n", + "1529\n", + "1527\n", + "1521\n", + "1517\n", + "1516\n", + "1513\n", + "1512\n", + "1510\n", + "1506\n", + "1493\n", + "1489\n", + "1482\n", + "1480\n", + "1479\n", + "1473\n", + "1471\n", + "1469\n", + "1460\n", + "1457\n", + "1453\n", + "1451\n", + "1444\n", + "1442\n", + "1440\n", + "1438\n", + "1432\n", + "1427\n", + "1417\n", + "1413\n", + "1405\n", + "1401\n", + "1393\n", + "1389\n", + "1377\n", + "1372\n", + "1362\n", + "1343\n", + "1341\n", + "1337\n", + "1331\n", + "1329\n", + "1325\n", + "1317\n", + "1313\n", + "1286\n", + "1285\n", + "1281\n", + "1273\n", + "1265\n", + "1255\n", + "1247\n", + "1243\n", + "1236\n", + "1234\n", + "1230\n", + "1222\n", + "1216\n", + "1215\n", + "1214\n", + "1213\n", + "1209\n", + "1206\n", + "1199\n", + "1198\n", + "1196\n", + "1192\n", + "1191\n", + "1189\n", + "1184\n", + "1180\n", + "1176\n", + "1170\n", + "1163\n", + "1161\n", + "1154\n", + "1148\n", + "1146\n", + "1145\n", + "1139\n", + "1136\n", + "1133\n", + "1129\n", + "1126\n", + "1120\n", + "1113\n", + "1111\n", + "1105\n", + "1098\n", + "1095\n", + "1085\n", + "1076\n", + "1070\n", + "1067\n", + "1065\n", + "1062\n", + "1058\n", + "1056\n", + "1047\n", + "1044\n", + "1042\n", + "1041\n", + "1037\n", + "1031\n", + "1027\n", + "1019\n", + "1011\n", + "1009\n", + "1008\n", + "1004\n", + "1000\n", + "990\n", + "986\n", + "984\n", + "982\n", + "980\n", + "974\n", + "966\n", + "960\n", + "959\n", + "957\n", + "956\n", + "954\n", + "952\n", + "950\n", + "947\n", + "946\n", + "941\n", + "936\n", + "933\n", + "930\n", + "928\n", + "922\n", + "910\n", + "903\n", + "888\n", + "883\n", + "878\n", + "874\n", + "867\n", + "857\n", + "849\n", + "847\n", + "836\n", + "833\n", + "818\n", + "808\n", + "802\n", + "801\n", + "800\n", + "789\n", + "783\n", + "768\n", + "766\n", + "763\n", + "754\n", + "746\n", + "742\n", + "734\n", + "716\n", + "706\n", + "705\n", + "702\n", + "691\n", + "686\n", + "682\n", + "670\n", + "665\n", + "663\n", + "648\n", + "641\n", + "640\n", + "639\n", + "638\n", + "633\n", + "616\n", + "603\n", + "601\n", + "594\n", + "593\n", + "592\n", + "586\n", + "582\n", + "573\n", + "571\n", + "562\n", + "550\n", + "548\n", + "545\n", + "537\n", + "530\n", + "519\n", + "517\n", + "513\n", + "509\n", + "508\n", + "501\n", + "497\n", + "476\n", + "474\n", + "465\n", + "459\n", + "448\n", + "438\n", + "435\n", + "428\n", + "421\n", + "413\n", + "412\n", + "411\n", + "408\n", + "406\n", + "402\n", + "400\n", + "394\n", + "390\n", + "384\n", + "377\n", + "359\n", + "344\n", + "340\n", + "330\n", + "324\n", + "320\n", + "309\n", + "298\n", + "291\n", + "290\n", + "284\n", + "283\n", + "281\n", + "274\n", + "268\n", + "267\n", + "263\n", + "262\n", + "257\n", + "242\n", + "238\n", + "234\n", + "215\n", + "203\n", + "199\n", + "191\n", + "180\n", + "169\n", + "166\n", + "164\n", + "149\n", + "145\n", + "141\n", + "139\n", + "132\n", + "128\n", + "112\n", + "110\n", + "102\n", + "97\n", + "89\n", + "73\n", + "65\n", + "61\n", + "54\n", + "51\n", + "44\n", + "37\n", + "33\n", + "32\n", + "26\n", + "20\n", + "17\n", + "14\n", + "12\n", + "8\n", + "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n", + "LLFFFFFLLRLRFFFFFFFRFFFFFFRRFFFLFFFFLRFRLFFLFFLFRRLFFFFRFLFFFRLFRLFFLFFFFRLFLLRRFFFRFRFLFRFFLRFRFLFLFRFFFFLLFFFFFFFRFFFFFFFFFRFFFRLFFFLFFFFLFFLRFFRFLFRFFFFFFFFFLLFFFRFFLRFFRLFFFLRFLFFFFFFLFRFRFFFFFFFFFRFFLRFFRLFLFFFFRFRLLFRFFRFLFFLFFFRLFFFFFLRFRFFFFFLRFFFLLFFFFRRLRFFFFLRRFFFFLFRFFLFFFFLFFFFLFFRRFFLFFFRFRLLRLRFRFLFRFLFFFFFFFLFRLLRRFFFFFFLFLRFLFFRFFFRLRRLLFFFRLFLRFLFRLFFFFFFRFFRFFFFLFFRLRFLLRFFFFFFLFRLFRFLFFRFFFRFLFLFRRLLRFRFLFFFFFLFLRLRRFLRFFFFLLFRFRLFLRRFFLFFFFLFRFRLFRLFLFFFFRFFRFLLRFFLLRFFRFRFLFLFRFLRFRLLFFFFRFFFRFFFFLRLFRRFFLFFLFRLFFFFRRFFFLFRFFFFFFFLLFFFRFFFRFFFLFRFLFFFLFFRFFFLLRRFFFLRFFLFFFRFFFFLFFFRFLRFLFRLFFFRFFFLLFFFFFRLFFFFRFFFRFFFFFFFFLLRFFRLRLFFFFFFFFFFFFFFRFFFFFLLFRFLFRFFFFFFLFLFRRFFFFFFRFLFFFFLFFFLFFLRRFFFFFFFLFFRFRFFFFFFFLFFFFFFFFFLFFFFFFFFFFRLFFLRFFFRFFFFRFLFFFFFFRLFFRLFLRFFRFLFRFFRFLFFFLLRFFFRLLRFRFFLFFRFFFFRFFFLFRFLFFFFRFFFFRRLFFLFFLFLRRLFFFRFLLFFFFRRFLFFFLFFFRFFLFRFFFRFFLFFFFFFFFRFLFFRFLFFFFLFFFLFFRFLRLFFFFRRLFFLLRLRRFFFFFFFFFRFLFFFFFFFFLFFFFRFFRFRLFFLLRFFRFFLLFFFLRFFFFFRRFFLRFLFFFLRFRFFFLFRFLFLFFFFFRFFFFFFFFFLFFFFRRLRFFLFFFFFLFLFFRFFLFFRRFFFLFFRLLFFFLRFFFFFFFFFRFFRLLFRFLLRRFRFFLFFFLRFFRFLFFRLFFFRLLRFFRFLFFLRFFFFFRLRFFFLRFFFFFFRRFLFFFLFFFFRRLFFRLFFFFFLFLFRLRFFRLFFFLRFRFFFLFRFLFFFLFRLFLFRFRLFFRFFFFFFRLFFFFLRL\n", + "Step(x=0, y=0, dir=)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "w_tour = rw\n", + "w_trace = trace_tour(w_tour)\n", + "mks = mistake_positions(w_trace)\n", + "while len(mks) > 3:\n", + " print(len(mks))\n", + " w_tour = trim_loop(w_tour)\n", + " w_trace = trace_tour(w_tour)\n", + " mks = mistake_positions(w_trace)\n", + "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n", + "plot_trace(trace_tour(w_tour))" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mks" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "ename": "IndexError", + "evalue": "list index out of range", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtrim_loop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mw_tour\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mtrim_loop\u001b[0;34m(tour, random_mistake)\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace; {}'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;31m# while this mistake extends to the next step in the trace...\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m while (mistakes[end_mistake_index].i + 1 < len(trace) and \n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0mend_mistake_index\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmistakes\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mmistakes\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mend_mistake_index\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mi\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m \u001b[0;34m==\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mIndexError\u001b[0m: list index out of range" + ] + } + ], + "source": [ + "trim_loop(w_tour)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lc = trace_tour(square_tour(a=10))\n", + "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", + "plot_trace(trace_tour(rw))" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(292,\n", + " 10,\n", + " 'RFLLFFLFLL',\n", + " [Step(x=-1, y=0, dir=),\n", + " Step(x=0, y=0, dir=)])" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\ntnLlSlpbWztvNzY28otf/ILLLrssxVR9T98gkeCOHTvGyJEjO2+PHDmSd999N8VEYahsEtyqVas4\ncOAAALNmzeLAgQNcf/31KafqeyqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqb\nSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptI\nICqbSCAqm0ggKptIICqbSCAqm0ggKptIICqbSCAqm0ggKptIICpbP3f06FHuvfdennjiCQDuvfde\ntmzZknIq6U6sspnZZ83sRTNrN7NpSYWS4jU0NLB48WL27t1LWVkZtbW11NbWph1LuhF3z/YC8NfA\n0wlkkV649tprGTNmDK2trXR0dFBdXc2KFSvSjiXdiFU2d3/V3XcDllAeKVF5eTn19fUMHToUgNGj\nR/PpT3865VTSHb1nGwDmz5/PiBEjGDRoEF/96lcx02vf6ahg2cxsi5nt6nJ5IfrzMyECSmHl5eUs\nWLCAYcOG9au92oQJExg/fnzaMYKpKLTA3WcntbGlS5d2Xs9kMmQymaRGn/Gam5s5cuRIv9mrNTY2\ncuDAAZ588knuv/9+qqqq0o6UVzabJZvNxh/k7rEvwP8A0wuscek7ixcv9v70HM+ePdvNzGtqanzV\nqlVpxylJ9DyX3JO4p/6vN7P9wCeATWb2VMzuyxmgsbGRhoYG3J3m5maWLl3KiRMn0o7V5+KejXzS\n3ce6e7W7n+/u1yQVTAauu+++u7NcZsZ7773HmjVrUk7V93Q2UoJbtGgRy5cvB3JvY5YuXcpVV12V\ncqq+Z7lD0AAbMvNQ2zoT1dbWsnLlSvrTc2xmzJo1i61bt6YdpSRmhruXfCZKezaRQFQ2kUBUNpFA\nVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBU\nNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2kUBUNpFAVDaRQFQ2\nkUBUNpFAVLZ+7rnnnmPSpEmsXLkSgIkTJ3LzzTennEq6E6tsZvYVM3vZzBrN7HEzG5ZUMClOVVUV\ne/fu7by9Z88ejh8/nmIiySfunm0zcJG7XwzsBv4jfiQpxZQpU7j66qspK8v9U1ZWVvLlL3855VSn\nam9v57HHHmP//v1pR0lNrLK5+8/dvSO6+QwwJn4kKVVdXR2DBw+mvLycuXPnMnHixLQjneLtt99m\nwYIFTJ48mQULFpyRpatIcNYCYF2C86RIU6ZM4YorruAnP/kJR48eZd68eWlHOkVTUxMdHR2cOHGC\n7373u3zve98D6NwjnwnM3XteYLYFGNX1LsCBu9x9Y7TmLmCau/9ND3N8yZIlnbczmQyZTKb3yeVD\nduzYwcyZM2lra0s7SlGqq6upqKhg69atzJgxI+04Pcpms2Sz2c7by5Ytw92t1DkFy1ZwgNmNwOeA\nWe7+fg/rPO62pP86dOgQ48aNo7KykurqapYvX84tt9xCZWVl2tFKZma9Klusw0gzmwPUApf1VDSR\ns846i8svv5x58+b125LFFWvPZma7gUrgSHTXM+7+r3nWas8mA0Jv92yxDyOL3pDKJgNEb8t25pwK\nEkmZyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMom\nEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYSiMomEojKJhKIyiYS\niMomEojKJhKIyiYSiMomEojKJhKIyiYSSKyymdlyM9tpZjvM7Kdmdl5SwUQGmrh7tq+4+5+5+8eA\nHwNLEshUkmw22+9m97e5fTm7v82NI1bZ3P1Yl5s1QEe8OKXTL1jfz+3L2f1tbhwVcQeY2T3APwJN\nwBWxE4kMUAX3bGa2xcx2dbm8EP35GQB3/5K7jwP+G7itrwOL9Ffm7skMMhsH/Njd/zTP48lsSOQ0\n4O5W6s/EOow0s0nu/lp0cy7wcr61vQknMpDE2rOZ2XpgMrkTI3uBf3b33yWUTWRASewwUkR61mff\nIDGzr5jZy2bWaGaPm9mwPOvmmNkrZvZbM7ujiLmfNbMXzazdzKb1sG5Plw/cf11k5mJnl5r5HDPb\nbGavmtnPzGx4nnXtZvZ8lPnJ3m7fzCrNbJ2Z7Taz/4veTxdUxNwbzeytKOPzZragyLmPmNlhM9vV\nw5pvRHkbzeziJOaa2eVm1tQl75eKnDvGzLaZ2UvRCcHbE8ns7n1yAf4SKIuu1wH/1c2aMuA1YDww\nCGgEPlpg7keAPwK2AdN6WPc6cE6JmQvO7mXmeqA2un4HUJdn3XtFZCy4feBfgPuj638LrEto7o3A\nN3rxu/AXwMXArjyPX0Pu5BrAx4FnEpp7ObChF3nPAy6Org8FXu3muSg5c5/t2dz95+7+wYfczwBj\nulk2E9jt7nvdvRVYR+5ES09zX3X33UChEy5GiXvuImeXnDl6/LHo+mPA9XnWFXMSqZjtd93eeuDK\nhOYWm/FD3L0BONrDkrnAmmjts8BwMxuVwFzoXd5D7t4YXT9G7sTf6LiZQ30ReQHwVDf3jwb2d7n9\nJqf+pXrLgZ+Z2W/M7J8Smgm9y/yH7n4Ycv+QwLl51g02s1+b2a/MLF+Bi9l+5xp3bweazGxEgYzF\n/r3mRYdNPzCz7l5Ae+PkbR/Is+3e+ER0WP5jM/uTUn/YzCaQ23s+e9JDJWeOe+p/C9C1zUbul/wu\nd98YrbkLaHX3td2N6OY+L2ZuET7p7ofM7Fxgi5m97O4NCcwuNXNR7xMi46LMFwLbzGyXu79RzPYL\nrLFu1pysmLkbgLXu3mpmnye39yxmr1lIMdvuje3AeHdvMbNrgCfJnT0vLpTZUHJHBl/wD381EXqR\nOVbZ3H12T4+b2Y3AtcCsPEveBLq+eR8DHHT3L8TJFWU7FP35tpk9Qe4wqaFQ5iKUnDl6Ez/K3Q9H\n/2XEWwUyv2FmWeBjwMll63b7J63ZD4wFDppZOTDM3QsdbhWce9KMh8i9F03Cm+Ty5t12b3QtiLs/\nZWb3m9kId3+30M+aWQW5on3H3X+UROa+PBs5B6gF/srd38+z7DfAJDMbb2aVwN+Re/UsejN5tj0k\nelXCzGqAq4AXS5ibdza9y7wBuCm6fiNwyj+emZ0dzcPMRgKfBF7q5fY3RtsBmE/uhE8hBefah/8T\nqrl58uVj5H9ON5D7fi1m9gmg6YPD7jhzu76HMrOZ5D7qKli0yLeAl9x9VWKZSz1TU8IZnd3kPuh+\nPrp8cHbsfGBTl3VzyJ3t2Q38exFzryf3yn0c+B3w1MlzgQvJnU3bAbxQzNxiZ/cy8wjg59HPbAHO\nju6fDjwYXf9zYFeUeSdwUw/zTtk+sAy4Lro+GPhB9PgzwIQi//6F5v4nuRetHcBWYHKRc9eSe9V/\nH9gH3Ax8HvhclzXfJHc2dCc9nGUuZS5wa5e8vwI+XuTcTwHtXX6Hno+em1iZ9aG2SCD63yKIBKKy\niQSisokEorKJBKKyiQSisokEorKJBKKyiQTy/zjFjsdEQVmOAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rw_trimmed = trim_all_loops(rw)\n", + "plot_trace(trace_tour(rw_trimmed))\n", + "len(rw), len(rw_trimmed), rw_trimmed, trace_tour(rw_trimmed)[-2:]" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1, Step(x=0, y=0, dir=))" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\noOEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rw_trimmed = rw\n", + "mks = len(mistake_positions(trace_tour(rw_trimmed)))\n", + "while mks >= 4:\n", + " rw_trimmed = trim_loop(rw_trimmed, random_mistake=True)\n", + " mks = len(mistake_positions(trace_tour(rw_trimmed)))\n", + " \n", + "# rw_trimmed = trim_all_loops(rw)\n", + "plot_trace(trace_tour(rw_trimmed))\n", + "mks, trace_tour(rw_trimmed)[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trim_some_mistakes(tour, mistake_limit):\n", + " trimmed_tour = rw\n", + " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n", + " while len(mistake_positions(trace_tour(trimmed_tour))) > mistake_limit:\n", + " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n", + " return trimmed_tour" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, Step(x=0, y=0, dir=))" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rw_trimmed = trim_some_mistakes(rw, 4)\n", + "\n", + "plot_trace(trace_tour(rw_trimmed))\n", + "len(mistake_positions(trace_tour(rw_trimmed))), trace_tour(rw_trimmed)[-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n", + "# tours_filename = 'tours-with-mistakes.txt'\n", + "\n", + "# try:\n", + "# os.remove(tours_filename)\n", + "# except OSError:\n", + "# pass\n", + "\n", + "# success_count = 0\n", + "# while success_count < 100:\n", + "# lc = trace_tour(random.choice(patterns)())\n", + "# rw = guided_walk(lc)\n", + "# if rw:\n", + "# rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n", + "# if len(rw_trimmed) > 10:\n", + "# with open(tours_filename, 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nu6uK/+qrr/Lss8822CJvcXExhYWFzj2UzjnJO++8A8Add9zBxx9/rPf49vDx8VEvZsCAAQwbNoyh\nQ4cybNgwtc7p7e1N+/btHYqvffv2HD9+XBnQfPbZZ4EzPf3gwYPtWt0NDAysM+poDfrTOq0fbTvt\noEGDANQoVdt1V7usmW/HbU00S4+v9e72KC8vd7jH//HHH3nllVdwd3fHzc2Nqqoqxo4dq3r68ePH\nExAQgMlkorq6Gm9vb0pLSwkJCaGoqEiZ9lq+fDmdOnUiIyND38Kr4xQPPPAAu3fvJjc3l88//5yb\nb76ZoKAg8vLy8PPzo7CwkB9++IHXXnut1a3hA82jsqup3Hp5ecnBgwdLPz8/eeGFF8rAwEDZp08f\n2a5dOwnIq666yiVqiunp6Q6H/eOPPyQgb7vttkanrXP2o5VVjfT0dPX7pZdeku3atZMdOnSQERER\nSkW8paClrexqyjIVFRXk5uZSUlJCbm4uhYWFZGVlqSF7Yx1fyNOjCmd6by8vLwDdWo+OQ9Q2uqHt\ntZdS8q9//Uud16ztvv/++82eR0doloqvzb2ff/55dc7T05PKykp69+7Nrbfe6pJ0tPm6h4eHw/do\nJr10lV0dRzhx4oSFBV2tEdDK3sqVK7nxxhut3tuaaNZtubW19jSCg4O5+uqrGx2/9ieYt8j1oXns\nqc+Ygo4O1FiKMlcnb0iZaw00a8U/efIk7dq1w9PTk8LCQkpLSwkPD3e6t62srCQ/P1/11uYquAAH\nDhwgJycHg8GA0WhUQr+goCC8vb0twkopMZlMusqujkMcOHBA7RaFtqvA0ywVX/NnFx4eDkBBQQFB\nQUHq+nnnnedUfBdffDHbtm2zef3KK690OK709HT8/f11bzs6DhEfH19nLwmc6fHbilfnZsml5mVE\nm+NrcyStt9XW8h1l27Zt9OzZU91v7VNzqql9att5zcNAzX7q4uJii1ZcR8cWBw4c4PDhw3XOO+vp\nqaVplorv5eWFEILk5GQAOnXqpK41ZIgUEBDAkSNH1PxcCEGHDh2AM+60a38uWbIEgFOnTql7oGaf\nP6Du19GxR9euXS0UzWrP8SdOnIgQgvnz57dI/hylWYb6lZWVyigG1GzKiY6ObnB8WVlZfPPNN6rn\n3rZtG7NnzwZq/oB33nmHsLAwjEYjRqMRDw8PpJSMGjVKWdxZtWoVN954I//85z+57rrruOKKKxr/\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lc = trace_tour(square_tour())\n", + "rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n", + "plot_trace(trace_tour(rw))" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rw_trimmed = trim_some_mistakes(rw, 1)\n", + "plot_trace(trace_tour(rw_trimmed))" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Mistake(i=32, step=Step(x=10, y=4, dir=))]" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mistake_positions(trace_tour(rw_trimmed))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n", + "# tours_filename = 'tours-open.txt'\n", + "\n", + "# try:\n", + "# os.remove(tours_filename)\n", + "# except OSError:\n", + "# pass\n", + "\n", + "# success_count = 0\n", + "# while success_count < 100:\n", + "# lc = trace_tour(random.choice(patterns)())\n", + "# rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n", + "# if rw:\n", + "# rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n", + "# if len(rw_trimmed) > 10:\n", + "# with open(tours_filename, 'a') as f:\n", + "# f.write(rw_trimmed + '\\n')\n", + "# success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "tours_filename = 'tours-random-walk.txt'\n", + "\n", + "try:\n", + " os.remove(tours_filename)\n", + "except OSError:\n", + " pass\n", + "\n", + "success_count = 0\n", + "while success_count < 200:\n", + " rw = random_walk()\n", + " if rw:\n", + " if random.choice([True, False]):\n", + " rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n", + " else:\n", + " rw_trimmed = trim_all_loops(rw)\n", + " if len(rw_trimmed) > 10:\n", + " with open(tours_filename, 'a') as f:\n", + " f.write(rw_trimmed + '\\n')\n", + " success_count += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2+" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/06-tour-shapes/tour-shapes-problem-creation.ipynb b/06-tour-shapes/tour-shapes-problem-creation.ipynb deleted file mode 100644 index ddfcbdf..0000000 --- a/06-tour-shapes/tour-shapes-problem-creation.ipynb +++ /dev/null @@ -1,3198 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Given a sequence of {F|L|R}, each of which is \"move forward one step\", \"turn left, then move forward one step\", \"turn right, then move forward one step\":\n", - "1. which tours are closed?\n", - "2. what is the area enclosed by the tour?" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import collections\n", - "import enum\n", - "import random\n", - "import os\n", - "\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "class Direction(enum.Enum):\n", - " UP = 1\n", - " RIGHT = 2\n", - " DOWN = 3\n", - " LEFT = 4\n", - " \n", - "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n", - " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n", - "\n", - "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n", - " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n", - "\n", - "def turn_left(d):\n", - " return turn_lefts[d]\n", - "\n", - "def turn_right(d):\n", - " return turn_rights[d]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n", - "Mistake = collections.namedtuple('Mistake', ['i', 'step'])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def advance(step, d):\n", - " if d == Direction.UP:\n", - " return Step(step.x, step.y+1, d)\n", - " elif d == Direction.DOWN:\n", - " return Step(step.x, step.y-1, d)\n", - " elif d == Direction.LEFT:\n", - " return Step(step.x-1, step.y, d)\n", - " elif d == Direction.RIGHT:\n", - " return Step(step.x+1, step.y, d)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n", - " current = Step(startx, starty, startdir)\n", - " trace = [current]\n", - " for s in tour:\n", - " if s == 'F':\n", - " current = advance(current, current.dir)\n", - " elif s == 'L':\n", - " current = advance(current, turn_left(current.dir))\n", - " elif s == 'R':\n", - " current = advance(current, turn_right(current.dir))\n", - " trace += [current]\n", - " return trace " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "k = Step(1, 2, 3)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Step(x=1, y=2, dir=3)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "k" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "__main__.Step" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Step" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "d = Direction.UP\n", - "d" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "turn_right(d)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{: ,\n", - " : ,\n", - " : ,\n", - " : }" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "turn_rights" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Step(x=0, y=0, dir=),\n", - " Step(x=1, y=0, dir=),\n", - " Step(x=1, y=1, dir=),\n", - " Step(x=2, y=1, dir=),\n", - " Step(x=2, y=2, dir=)]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trace_tour('FLRL')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Step(x=0, y=0, dir=),\n", - " Step(x=1, y=0, dir=),\n", - " Step(x=2, y=0, dir=),\n", - " Step(x=2, y=1, dir=),\n", - " Step(x=3, y=1, dir=),\n", - " Step(x=3, y=2, dir=),\n", - " Step(x=2, y=2, dir=),\n", - " Step(x=1, y=2, dir=),\n", - " Step(x=1, y=1, dir=),\n", - " Step(x=0, y=1, dir=),\n", - " Step(x=0, y=0, dir=)]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trace_tour('FFLRLLFLRL')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Step(x=0, y=0, dir=),\n", - " Step(x=1, y=0, dir=),\n", - " Step(x=1, y=1, dir=),\n", - " Step(x=0, y=1, dir=),\n", - " Step(x=-1, y=1, dir=),\n", - " Step(x=-2, y=1, dir=),\n", - " Step(x=-2, y=0, dir=),\n", - " Step(x=-2, y=-1, dir=),\n", - " Step(x=-2, y=-2, dir=),\n", - " Step(x=-2, y=-3, dir=),\n", - " Step(x=-1, y=-3, dir=),\n", - " Step(x=0, y=-3, dir=),\n", - " Step(x=1, y=-3, dir=),\n", - " Step(x=1, y=-2, dir=),\n", - " Step(x=1, y=-1, dir=),\n", - " Step(x=0, y=-1, dir=),\n", - " Step(x=0, y=-2, dir=),\n", - " Step(x=-1, y=-2, dir=),\n", - " Step(x=-1, y=-1, dir=),\n", - " Step(x=-1, y=0, dir=),\n", - " Step(x=0, y=0, dir=)]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trace_tour('FLLFFLFFFLFFLFLLRRFR')" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Step(x=0, y=0, dir=),\n", - " Step(x=1, y=0, dir=),\n", - " Step(x=2, y=0, dir=),\n", - " Step(x=2, y=-1, dir=),\n", - " Step(x=3, y=-1, dir=),\n", - " Step(x=3, y=0, dir=),\n", - " Step(x=3, y=1, dir=),\n", - " Step(x=4, y=1, dir=),\n", - " Step(x=4, y=2, dir=),\n", - " Step(x=3, y=2, dir=),\n", - " Step(x=2, y=2, dir=),\n", - " Step(x=1, y=2, dir=),\n", - " Step(x=0, y=2, dir=),\n", - " Step(x=0, y=3, dir=),\n", - " Step(x=0, y=4, dir=),\n", - " Step(x=-1, y=4, dir=),\n", - " Step(x=-1, y=3, dir=),\n", - " Step(x=-2, y=3, dir=),\n", - " Step(x=-2, y=2, dir=),\n", - " Step(x=-1, y=2, dir=),\n", - " Step(x=-1, y=1, dir=),\n", - " Step(x=-2, y=1, dir=),\n", - " Step(x=-2, y=0, dir=),\n", - " Step(x=-1, y=0, dir=),\n", - " Step(x=-1, y=-1, dir=),\n", - " Step(x=0, y=-1, dir=),\n", - " Step(x=0, y=0, dir=)]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL')" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def positions(trace):\n", - " return [(s.x, s.y) for s in trace]" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(0, 0),\n", - " (1, 0),\n", - " (2, 0),\n", - " (2, -1),\n", - " (3, -1),\n", - " (3, 0),\n", - " (3, 1),\n", - " (4, 1),\n", - " (4, 2),\n", - " (3, 2),\n", - " (2, 2),\n", - " (1, 2),\n", - " (0, 2),\n", - " (0, 3),\n", - " (0, 4),\n", - " (-1, 4),\n", - " (-1, 3),\n", - " (-2, 3),\n", - " (-2, 2),\n", - " (-1, 2),\n", - " (-1, 1),\n", - " (-2, 1),\n", - " (-2, 0),\n", - " (-1, 0),\n", - " (-1, -1),\n", - " (0, -1),\n", - " (0, 0)]" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "positions(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def valid(trace):\n", - " return (trace[-1].x == 0 \n", - " and trace[-1].y == 0 \n", - " and len(set(positions(trace))) + 1 == len(trace))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLLFF'))" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid(trace_tour('FFLLLFRR'))" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid(trace_tour('F'))" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid(trace_tour('LLLL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def chunks(items, n=2):\n", - " return [items[i:i+n] for i in range(len(items) - n + 1)]" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['abcdefg',\n", - " 'bcdefgh',\n", - " 'cdefghi',\n", - " 'defghij',\n", - " 'efghijk',\n", - " 'fghijkl',\n", - " 'ghijklm',\n", - " 'hijklmn',\n", - " 'ijklmno',\n", - " 'jklmnop',\n", - " 'klmnopq',\n", - " 'lmnopqr',\n", - " 'mnopqrs',\n", - " 'nopqrst',\n", - " 'opqrstu',\n", - " 'pqrstuv',\n", - " 'qrstuvw',\n", - " 'rstuvwx',\n", - " 'stuvwxy',\n", - " 'tuvwxyz']" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import string\n", - "chunks(string.ascii_lowercase, 7)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the [Shoelace formula](https://en.wikipedia.org/wiki/Shoelace_formula)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def shoelace(trace):\n", - " return abs(sum(s.x * t.y - t.x * s.y for s, t in chunks(trace, 2))) // 2" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "shoelace(trace_tour('FFLRLLFLRL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "9" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "shoelace(trace_tour('FLLFFLFFFLFFLFLLRRFR'))" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "15" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "shoelace(trace_tour('FFRLLFRLLFFFRFLLRLLRRLLRLL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def step(s, current):\n", - " if s == 'F':\n", - " return advance(current, current.dir)\n", - " elif s == 'L':\n", - " return advance(current, turn_left(current.dir))\n", - " elif s == 'R':\n", - " return advance(current, turn_right(current.dir))\n", - " else:\n", - " raise ValueError" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def valid_prefix(tour):\n", - " current = Step(0, 0, Direction.RIGHT)\n", - " prefix = []\n", - " posns = []\n", - " for s in tour:\n", - " current = step(s, current)\n", - " prefix += [s]\n", - " if (current.x, current.y) in posns:\n", - " return ''\n", - " elif current.x == 0 and current.y == 0: \n", - " return ''.join(prefix)\n", - " posns += [(current.x, current.y)]\n", - " if current.x == 0 and current.y == 0:\n", - " return ''.join(prefix)\n", - " else:\n", - " return ''" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def mistake_positions(trace, debug=False):\n", - " mistakes = []\n", - " current = trace[0]\n", - " posns = [(0, 0)]\n", - " for i, current in enumerate(trace[1:]):\n", - " if (current.x, current.y) in posns:\n", - " if debug: print(i, current)\n", - " mistakes += [Mistake(i+1, current)]\n", - " posns += [(current.x, current.y)]\n", - " if (current.x, current.y) == (0, 0):\n", - " return mistakes[:-1]\n", - " else:\n", - " return mistakes + [Mistake(len(trace)+1, current)]" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def returns_to_origin(mistake_positions):\n", - " return [i for i, m in mistake_positions\n", - " if (m.x, m.y) == (0, 0)]" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'FFLRLLFLRL'" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid_prefix(sample_tours[0])" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all(valid_prefix(t) == t for t in sample_tours)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid_prefix(sample_tours[0] + 'FLLLL') == sample_tours[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Mistake(i=10, step=Step(x=0, y=0, dir=)),\n", - " Mistake(i=13, step=Step(x=0, y=-1, dir=))]" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mistake_positions(trace_tour(sample_tours[0] + 'F'))" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Mistake(i=10, step=Step(x=0, y=0, dir=)),\n", - " Mistake(i=13, step=Step(x=1, y=0, dir=)),\n", - " Mistake(i=14, step=Step(x=0, y=0, dir=)),\n", - " Mistake(i=15, step=Step(x=0, y=-1, dir=)),\n", - " Mistake(i=17, step=Step(x=0, y=-1, dir=))]" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mistake_positions(trace_tour(sample_tours[0] + 'FLLLL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'FFLRLLFLRL'" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "(sample_tours[0] + 'FLLLL')[:10]" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def random_walk(steps=1000):\n", - " return ''.join(random.choice('FFLR') for _ in range(steps))" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "''" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid_prefix(random_walk(1000))" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "''" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "valid_prefix(random_walk(1000))" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": true, - "scrolled": true - }, - "outputs": [], - "source": [ - "walks = []\n", - "while len(walks) < 10:\n", - " w = valid_prefix(random_walk())\n", - " if len(w) > 30: walks += [w]" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['FFFFRFFLRLRRFFFFFFFLRFFFFRFFFRFFFFFLFR',\n", - " 'RFLFFFLFFFFLFRFRFLRFLLFRLFFFFFFLFFFFFLFRFL',\n", - " 'FFRFLFFRFFFLRFRFFFFFRFFFLFRFRFLF',\n", - " 'FFRLFLFFFLRRLLFLRFFFFFLFLRFFLFFL',\n", - " 'FFFFFRFFFFRFLFRFRFFFLFFFFRFFRFFF',\n", - " 'RRLFFLRRLFLFRRFLFLFRFLLFFFFFFLRFFFFL',\n", - " 'LFFFRRLLRFLFLLRFFFRLFFFLFFRFFLFLFFFLRFRLRFLFLL',\n", - " 'FRFLFLRFLRFLFLLRFRFFFFLLFRFFLFFF',\n", - " 'RFFFRLRFFRFFFFLLFFFRFRFFFFFFRFRFLFFRLF',\n", - " 'LLFRFRLFFFFLFLFFFRFFLFFFLLRRFLFLRF']" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "walks" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Step(x=0, y=0, dir=),\n", - " Step(x=1, y=0, dir=),\n", - " Step(x=1, y=1, dir=),\n", - " Step(x=0, y=1, dir=),\n", - " Step(x=0, y=0, dir=)]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trace_tour('FLLL')" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(-1, 3)" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEACAYAAABVtcpZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEvlJREFUeJzt3X+s3XWd5/Hnq7Y0RBFlHNGAlMmIvyaZFEigs27kLDJa\nNqt1Z3SE7EZ0iBKzIyROspBZk17+0Az+s4NLjGKYWTAhSPoHQhkyuOAZ48gUhHbaWah2EtAqUqO1\nYQRSO933/nEPzeVybnvv/X655977eT6Sm37P+b7v9/P55HvueZ3P53tOT6oKSVKb1ky6A5KkyTEE\nJKlhhoAkNcwQkKSGGQKS1DBDQJIa1jkEkqxPsiPJziR7kmwdU3NSkjuS7EvyUJKzurYrSequcwhU\n1WHgP1TVucBG4NIkF8wquxI4WFXnAH8FfLFru5Kk7npZDqqq50eb64G1wOxPoG0Bbh1tbwPe20e7\nkqRuegmBJGuS7ASeAb5VVY/MKjkD2A9QVUeBQ0lO66NtSdLi9TUT+H+j5aAzgQuTvGtWScbc9v+r\nkKQJW9vnwarq2SRDYDPw+Ixd+4G3AE8neRXw2qr61ezfT2IwSNIiVNXsF9vz0se7g96Q5NTR9snA\nJcDeWWX3AFeMtj8CPDjX8apq1f5s3bp14n1wfI6vxfGt5rFVdXvt3MdM4M3ArUnWMB0q36iqv01y\nPfBIVW0HbgG+nmQf8Evgsh7alSR11DkEqmoPcN6Y+7fO2D4M/EnXtiRJ/fITw0toMBhMuguvKMe3\nsq3m8a3msXWVrutJfUpSy6k/krQSJKEmdWFYkrRyGQKS1DBDQJIaZghIUsMMAUlqmCEgSQ0zBCSp\nYYaAJDXMEJCkhhkCktQwQ0CSGmYISFLDDAFJapghIEkNMwQkqWGGgCQ1zBCQpIZ1DoEkZyZ5MMnj\nSfYkuXpMzUVJDiV5bPTzua7tSpK66/xF88C/AZ+tql1JXgM8muT+qto7q+47VfXBHtqTJPWk80yg\nqp6pql2j7V8DTwBnjCld1PdfSpJeOb1eE0hyNrAR2DFm96YkO5Pcm+RdfbYrSVqcPpaDABgtBW0D\nrhnNCGZ6FNhQVc8nuRS4C3hbX21LkhanlxBIspbpAPh6VX1z9v6ZoVBV9yX5cpLTqurg7Nqpqalj\n24PBgMFg0EcXJWnVGA6HDIfDXo6Vqup+kOQ24BdV9dk59p9eVQdG2xcAd1bV2WPqqo/+SFJLklBV\ni7ru2nkmkOTdwH8B9iTZCRTwF8AGoKrqZuDDST4NHAFeAD7atV1JUne9zAT64kxAkhauy0zATwxL\nUsMMAUlqmCEgSQ0zBCSpYYaAJDXMEJCkhhkCktQwQ0CSGmYISFLDDAFJapghIEkNMwQkqWGGgCQ1\nzBCQpIYZApLUMENAkhpmCEhSwwwBSWqYISBJDescAknOTPJgkseT7Ely9Rx1X0qyL8muJBu7titJ\n6m5tD8f4N+CzVbUryWuAR5PcX1V7XyxIcinwu1V1TpILga8Am3poW5LUQeeZQFU9U1W7Rtu/Bp4A\nzphVtgW4bVSzAzg1yeld25YkddPrNYEkZwMbgR2zdp0B7J9x+6e8PCgkSUusj+UgAEZLQduAa0Yz\ngpfsHvMrNe44U1NTx7YHgwGDwaCnHkrS6jAcDhkOh70cK1Vjn4sXdpBkLbAduK+qbhyz/yvAt6vq\nG6Pbe4GLqurArLrqoz+S1JIkVNW4F9sn1Ndy0F8Dj48LgJG7gY8BJNkEHJodAJKkpdd5JpDk3cB3\ngD1ML/EU8BfABqCq6uZR3U3AZuA54BNV9diYYzkTkKQF6jIT6GU5qC+GgCQt3HJYDpIkrUCGgCQ1\nzBCQpIYZApLUMENAkhpmCEhSwwwBSWqYISBJDTMEJKlhhoAkNcwQkKSGGQKS1DBDQJIaZghIUsMM\nAUlqmCEgSQ0zBCSpYYaAJDXMEJCkhvUSAkluSXIgye459l+U5FCSx0Y/n+ujXUlSN2t7Os7fAP8L\nuO04Nd+pqg/21J4kqQe9zASq6rvAr05Qlj7akiT1ZymvCWxKsjPJvUnetYTtSpLm0Ndy0Ik8Cmyo\nqueTXArcBbxtXOHU1NSx7cFgwGAwWIr+SdKKMRwOGQ6HvRwrVdXPgZINwD1V9fvzqH0SOL+qDs66\nv/rqjyS1IglVtagl9z6Xg8Ic6/5JTp+xfQHT4XNwXK0kaen0shyU5HZgAPxWkh8DW4GTgKqqm4EP\nJ/k0cAR4AfhoH+1KkrrpbTmoDy4HSdLCLZflIEnSCmMISFLDDAFJapghIEkNMwQkqWGGgCQ1zBCQ\npIYZApLUMENAkhpmCEhSwwwBSWqYISBJDTMEJKlhhoAkNcwQkKSGGQKS1DBDQJIaZghIUsMMAUlq\nWC8hkOSWJAeS7D5OzZeS7EuyK8nGPtqVJHXT10zgb4D3z7UzyaXA71bVOcBVwFd6aleS1EEvIVBV\n3wV+dZySLcBto9odwKlJTu+jbUnS4i3VNYEzgP0zbv90dJ90XEePHuWpp56adDekVWvtErWTMffV\nuMKpqalj24PBgMFg8Mr0SMve0aNHufzyy9m2bRtf/epX+eQnPznpLknLwnA4ZDgc9nKsVI19Ll74\ngZINwD1V9ftj9n0F+HZVfWN0ey9wUVUdmFVXffVHK9uLAXDvvffy/PPPc/LJJ3PjjTcaBNIYSaiq\ncS+2T6jP5aAw/hU/wN3AxwCSbAIOzQ4A6UWzAwDghRde4JprruFrX/vahHsnrS69LAcluR0YAL+V\n5MfAVuAkoKrq5qr62yT/Mcm/AM8Bn+ijXa0+4wLgRS8GAeCMQOpJb8tBfXA5qG3HC4CZXBqSXqrL\ncpAhoGXjpptu4jOf+QynnHIKa9ZMr1RWFc8++yynnnrqsbrf/OY3vPDCC+zdu5e3v/3tk+qutGwY\nAloVfvGLX/D973//Jfc9/PDDbN26lfvuu+9l9e973/uOhYXUMkNAq9YDDzzAJZdcgo8LaW7L5d1B\nkqQVxhCQpIYZApLUMENAkhpmCEhSwwwBSWqYISBJDTMEJKlhhoAkNcwQkKSGGQKS1DBDQJIaZghI\nUsMMAUlqmCEgSQ0zBCSpYb2EQJLNSfYm+WGSa8fsvyLJz5M8Nvr50z7alSR1s7brAZKsAW4C3gs8\nDTyS5JtVtXdW6R1VdXXX9iRJ/eljJnABsK+qflRVR4A7gC1j6hb11WeSpFdOHyFwBrB/xu2fjO6b\n7Y+S7EpyZ5Ize2hXktRR5+Ugxr/Cn/2t4HcDt1fVkSRXAbcyvXz0MlNTU8e2B4MBg8Gghy5K0uox\nHA4ZDoe9HCtVs5+vF3iAZBMwVVWbR7evA6qqbpijfg1wsKpeN2Zfde2PVpcHHniASy65BB8X0tyS\nUFWLWnLvYznoEeCtSTYkOQm4jOlX/jM7+KYZN7cAj/fQriSpo87LQVV1NMmfAfczHSq3VNUTSa4H\nHqmq7cDVST4IHAEOAh/v2q4kqbvOy0F9cjlIs7kcJJ3YpJeDJEkrlCEgSQ0zBCSpYYaAJDXMEJCk\nhhkCktQwQ0CSGmYISFLDDAFJapghIEkNMwQkqWGGgCQ1zBCQpIYZApLUMENAkhpmCEhSwwwBSWqY\nISBJDTMEJKlhvYRAks1J9ib5YZJrx+w/KckdSfYleSjJWX20K610VcXu3bs5cuTIpLuiRnUOgSRr\ngJuA9wO/B1ye5B2zyq4EDlbVOcBfAV/s2q60Gmzfvp3zzjuPU045hU2bNvH5z3+ehx56yFDQkulj\nJnABsK+qflRVR4A7gC2zarYAt462twHv7aFdacU7fPgwr371qzl8+DA7duzg+uuvZ/PmzYaClkyq\nqtsBkj8G3l9Vnxrd/q/ABVV19YyaPaOap0e39wEXVtXBWceqrv3RZOzfv5/3vOc9PPXUU5Puyoqz\nbt26OZ/k161bx8knn8zhw4fZuHEjX/jCF7j44ouXuIda7pJQVVnM767to/0x981+Jp9dkzE1AExN\nTR3bHgwGDAaDDl2TVo9kUX/jWoWGwyHD4bCXY/UxE9gETFXV5tHt64Cqqhtm1Nw3qtmR5FXAz6rq\njWOO5UxATdm2bRtXXnklzz77LPDSV/7nnnsuH/jAB7j44os5//zzWbdu3YR7q+Vq0jOBR4C3JtkA\n/Ay4DLh8Vs09wBXADuAjwIM9tCuteOvXr+e5555j/fr1PulrIjrPBGD6LaLAjUxfaL6lqv4yyfXA\nI1W1Pcl64OvAucAvgcuq6qkxx3EmoKZUFXv27OGd73ynT/patC4zgV5CoC+GgCQtXJcQ8BPDktQw\nQ0CSGmYISFLDDAFJapghIEkNMwQkqWGGgCQ1zBCQpIYZApLUMENAkhpmCEhSwwwBSWqYISBJDTME\nJKlhhoAkNcwQkKSGGQKS1DBDQJIa1ikEkrw+yf1JfpDk75KcOkfd0SSPJdmZ5K4ubUqS+tPpO4aT\n3AD8sqq+mORa4PVVdd2Yumer6rXzOJ7fMSxJCzSxL5pPshe4qKoOJHkTMKyqd4yp+9eqOmUexzME\nJGmBJvlF82+sqgMAVfUM8Ntz1K1P8nCS7yXZ0rFNSVJP1p6oIMm3gNNn3gUU8LkFtHNWVT2T5HeA\nB5PsrqonF9ZVSVLfThgCVfWHc+1LciDJ6TOWg34+xzGeGf37ZJIhcC4wNgSmpqaObQ8GAwaDwYm6\nKElNGQ6HDIfDXo7Vx4Xhg1V1w1wXhpO8Dni+qn6T5A3APwBbqmrvmON5TUCSFmiSF4ZPA+4E3gL8\nGPhIVR1Kcj5wVVV9KskfAF8FjjJ9DeJ/VtX/nuN4hoAkLdDEQqBvhoAkLdwk3x0kSVrBDAFJapgh\nIEkNMwQkqWGGgCQ1zBCQpIYZApLUMENAkhpmCEhSwwwBSWqYISBJDTMEJKlhhoAkNcwQkKSGGQKS\n1DBDQJIaZghIUsMMAUlqmCEgSQ3rFAJJPpzkn5McTXLeceo2J9mb5IdJru3SpiSpP11nAnuA/wz8\n/VwFSdYANwHvB34PuDzJOzq2uyINh8NJd+EV5fhWttU8vtU8tq46hUBV/aCq9gHH+5b7C4B9VfWj\nqjoC3AFs6dLuSrXaH4iOb2VbzeNbzWPraimuCZwB7J9x+yej+yRJE7b2RAVJvgWcPvMuoID/UVX3\nzKONcbOEml/3JEmvpFR1fz5O8m3gz6vqsTH7NgFTVbV5dPs6oKrqhjG1hoMkLUJVHW9Zfk4nnAks\nwFwdeAR4a5INwM+Ay4DLxxUudhCSpMXp+hbRDyXZD2wCtie5b3T/m5NsB6iqo8CfAfcD/xe4o6qe\n6NZtSVIfelkOkiStTBP9xPBq/7BZktcnuT/JD5L8XZJT56g7muSxJDuT3LXU/VyoE52PJCcluSPJ\nviQPJTlrEv1crHmM74okPx+ds8eS/Okk+rkYSW5JciDJ7uPUfGl07nYl2biU/evqRONLclGSQzPO\n3eeWuo+LleTMJA8meTzJniRXz1G3sPNXVRP7Ad4OnAM8CJw3R80a4F+ADcA6YBfwjkn2ewHjuwH4\n76Pta4G/nKPu2Un3dQFjOuH5AD4NfHm0/VGmlwAn3vcex3cF8KVJ93WR4/v3wEZg9xz7LwXuHW1f\nCPzjpPvc8/guAu6edD8XObY3ARtH268BfjDmsbng8zfRmUCt/g+bbQFuHW3fCnxojrqVdEF8Pudj\n5ri3Ae9dwv51Nd/H20o6Z8dU1XeBXx2nZAtw26h2B3BqktOPU7+szGN8sHLP3TNVtWu0/WvgCV7+\nmasFn7+V8B/IreQPm72xqg7A9AkEfnuOuvVJHk7yvSTLPeDmcz6O1dT0GwMOJTltabrX2Xwfb380\nmm7fmeTMpenakpg9/p+ycv7e5mvTaOn13iTvmnRnFiPJ2UzPeHbM2rXg89fnW0THWu0fNjvO+Bay\n1nhWVT2T5HeAB5Psrqon++xnj+ZzPmbXZEzNcjWf8d0N3F5VR5JcxfSsZyXNdo5nWf+99eBRYENV\nPZ/kUuAu4G0T7tOCJHkN0zPsa0YzgpfsHvMrxz1/r3gIVNUfdjzET4CZFxbPBJ7ueMzeHG98owtU\np1fVgSRvAn4+xzGeGf37ZJIhcC6wXENgPudjP/AW4OkkrwJeW1UnmqIvFycc36yxfI3paz+rxU+Y\nPncvWlZ/b13NfNKsqvuSfDnJaVV1cJL9mq8ka5kOgK9X1TfHlCz4/C2n5aATftgsyUlMf9js7qXr\nVid3Ax8fbV8BvOykJXndaFwkeQPw74DHl6qDizCf83EP0+MF+AjTF/5XihOObxToL9rC8j5f44S5\n/97uBj4Gxz7tf+jFJc0VZM7xzVwfT3IB02+TXxEBMPLXwONVdeMc+xd+/iZ8tftDTL9qfIHpTxPf\nN7r/zcD2GXWbmb4Svg+4btJX6RcwvtOA/zPq+7eA143uPx+4ebT9B8BuYCfwT8DHJ93veYzrZecD\nuB74T6Pt9cCdo/3/CJw96T73PL4vAP88OmcPAG+bdJ8XMLbbmX5leBj4MfAJ4CrgUzNqbmL6HVL/\nxBzv2luuPycaH/DfZpy77wEXTrrPCxjbu4GjTL9jbSfw2Oix2un8+WExSWrYcloOkiQtMUNAkhpm\nCEhSwwwBSWqYISBJDTMEJKlhhoAkNcwQkKSG/X+XpHhUiY9RnAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "plt.axis('on')\n", - "plt.arrow(0, 0, 0.8, 0, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n", - "plt.arrow(0.2, 0, 0, 1, head_width=0.1, head_length=0.1, fc='k', ec='k', length_includes_head=True)\n", - "plt.xlim([-1, 2])\n", - "plt.ylim([-1, 3])" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def bounds(trace):\n", - " return (max(s.x for s in trace),\n", - " max(s.y for s in trace),\n", - " min(s.x for s in trace),\n", - " min(s.y for s in trace))" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(0, 2, -13, -13)" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bounds(trace_tour('RFRFFLRFLFFRRFFRRRRLLLRRRRRRFRLFRFFRFFRRFRLRRFLLFRLLFRFLFLFRFRLLFRLFRFLRRLLFRRRFRRRRLLFLFRFRRFFRRLLLRLRRFRLRRFFRRFLFRRLLRRFFRFRRRRRFLLLLLRRFFFLLFFFRRLFLFFLRRRFRFLLFFRRLLRFLLRRF'))" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n", - " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None, filename=None):\n", - " plt.axis('on')\n", - " plt.axes().set_aspect('equal')\n", - " for s, t in chunks(trace, 2):\n", - " w, h = plot_wh[t.dir]\n", - " plt.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n", - " xh, yh, xl, yl = bounds(trace)\n", - " if xybounds is not None: \n", - " bxh, byh, bxl, byl = xybounds\n", - " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", - " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n", - " else:\n", - " plt.xlim([xl-1, xh+1])\n", - " plt.ylim([yl-1, yh+1])\n", - " if filename:\n", - " plt.savefig(filename)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None):\n", - "# plt.ioff()\n", - "# if fig is None:\n", - "# fig = plt.figure()\n", - "# ax = fig.gca()\n", - "# if subplot_details is not None:\n", - "# ax = fig.add_subplot(*subplot_details)\n", - "# plt.axis('on')\n", - "# # plt.axes().set_aspect('equal')\n", - "# ax.set_aspect('equal')\n", - "# for s, t in chunks(trace, 2):\n", - "# w, h = plot_wh[t.dir]\n", - "# ax.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n", - "# xh, yh, xl, yl = bounds(trace)\n", - "# if xybounds is not None: \n", - "# bxh, byh, bxl, byl = xybounds\n", - "# ax.set_xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", - "# ax.set_ylim([min(yl, byl)-1, max(yh, byh)+1])\n", - "# else:\n", - "# ax.set_xlim([xl-1, xh+1])\n", - "# ax.set_ylim([yl-1, yh+1])\n", - "# plt.close(fig)\n", - "# return fig" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def pqr(p, q, r):\n", - " return '{}:{};{}'.format(p, q, r)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'1:2;3'" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pqrt = (1, 2, 3)\n", - "pqr(*pqrt)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nf/99T6fT/tnPftY3b95clDOOVuG5N+xzOcmXFr/Ln19aPOXXZymdJkD/0mrdunXceuutABw8eJBx\n48YVzfsNjhw5grtTVVXFxRdfzO9//3sAampq2LBhA3PmzIk84akOHDjAJz7xCcyGXbFKggr20iKA\nu//C3f/a3S8eLASjwYQJE4omBADV1dWMGTOGjRs38uabbw48wbq7u3nggQciTze4c889VyEoYsXz\n0y1n5Oqrr6alpYWGhgYAHnroIVauXBl5KilFejtyiaurq2PZsmV0dnbS2trKsmXLYo8kJUorAxEB\nFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEU\nAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQD\nEQkUAxEBFAMRCRQDEQEUg484evQo48ePp7y8HIAFCxZQWVnJ7t27I08mcvblFQMzu9XMfmtmJ8zs\nc0kNFUtFRQWHDx/m+PHjALg7vb29nHPOOZEnEzn78l0Z7ARuBrYmMEt0ZWVlLFmy5CMfy2QyNDQ0\nRJro9J5//nk2b96Mu8ceRUaJvGLg7h3uvhewhOaJrqWlZeA0AWDNmjURpzm9RYsWceONN3LFFVco\nCpIIS+KHyMx+Cdzr7r8ZYhsvlR/Y5cuX861vfYu6ujquvfba2OMM6ic/+cnA/ZqaGsaMGcOf/vQn\nRUFOYWa4+7C/sNM57GgTcP7JHwIceNDdfzqSoVasWDFwP5PJkMlkRvLlBdPS0sL69evZs2fPR550\nxaq3t5cjR47w9a9/PfYoUgSy2SzZbHbEX6eVQYn6/Oc/z/bt2ykvL2fhwoW0tLTwqU99KvZYUoQS\nWxmM5JgJ7kuGMXfuXKZOnaoISGLyWhmY2VeAR4E64BCw3d1vPM22WhmIRJDryiCR04RcKAYiceQa\nA70DUUQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBE\nAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEAMVARALFQEQAxUBEAsVARADFQEQC\nxUBEAMVARALFQEQAxUBEAsVARADFQEQCxUBEgDxjYGaPmNluM9tuZhvMrDapwUSksPJdGfw3MMXd\nLwf2Ag/kP1LxyGazsUcYkVKbFzRzMckrBu6+2d37wsMXgIb8RyoepfafXmrzgmYuJkleM/gnYGOC\n+xORAkoPt4GZbQLOP/lDgAMPuvtPwzYPAsfcfe1ZmVJEzjpz9/x2YPaPwNeAme7eM8R2+R1IRM6Y\nu9tw2wy7MhiKmd0A3AfMGCoEuQ4jIvHktTIws71ABXAgfOgFd789icFEpLDyPk0QkdGhoO9ANLNb\nzey3ZnbCzD5XyGOPhJndYGZ7zOx/zGxJ7HmGY2ZPmtk+M9sRe5ZcmFmDmW0xs11mttPM7oo903DM\nrNLMXjSzV8PMzbFnyoWZlZnZb8zsP4fbttBvR94J3AxsLfBxc2ZmZcBjwBxgCrDQzCbHnWpYT9E/\nb6k4Dtzj7pcCXwDuKPbvcbgmdp27XwFcDtxoZtMij5WLRcCuXDYsaAzcvcPd99L/8mSxmgbsdfc/\nuPsx4MfA/MgzDcndtwEHY8+RK3d/z923h/tdwG6gPu5Uw3P3w+FuJf0X34v6HNvMGoAvAz/MZXv9\nodKp6oG3T3r8DiXwg1qqzGwi/b9pX4w7yfDCkvtV4D1gk7v/OvZMw/gXoIkco5V4DMxsk5ntOOm2\nM/z7N0kf6ywZbNVS1L8BSpWZjQXWA4vCCqGouXtfOE1oAK42s0tjz3Q6ZnYTsC+swIwcVuN5vc9g\nMO4+K+l9Ftg7wKdPetwAvBtpllHLzNL0h2CNuz8be56RcPdOM8sCN5Dj+XgEjcA8M/syUA2cY2b/\n7u7/cLoviHmaUKzXDX4NTDKzz5hZBfC3wLBXYotATvUvIj8Cdrn7d2MPkgszqzOzceF+NXA9sCfu\nVKfn7kvd/dPufhH9P8NbhgoBFP6lxa+Y2dvAdKDNzIruD5vc/QTwz/T/efbrwI/dfXfcqYZmZmuB\nduCvzOwtM7st9kxDMbNG4O+AmeGlut+Ed7MWs08CvzSz7fRf3/gvd/955JkSpTcdiQigVxNEJFAM\nRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRASA/wNQM89DiBxhRAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n0H8Y6szEx/7LWO/o6Ig93i42Nm300lml/o17vuELfr+gIGccqMLPXp8/yzmfJkDXW4t38Nlbi7u8\nfBbTaQKA1RuP/fljXHzYxQBs2r6JYYOGFcz9Bttbt+M4g0oHcdCdB7Fm0xoAhpQN4YnJTzBxzMTI\nE+7q420fs2flnpj1uWKVBOXzNAF3fxb4ehL7KlTDK4fHHuFzKssqAXjmnWd4d/O7GIbjNLU2ccNz\nNxRkDPYavFfsEaQXhfEyJ1/aCTUnUJ+up6aqBoCbT72ZWafOijyVFCPdjlzkqgdXM2P8DLY0b6Fh\naQMzxs+IPZIUKa0MRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxE\nJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQk\nUAxEBFAMRCRQDEQEUAxEJFAMRARQDEQkUAxEBIDS2AMUkh1tOxhx6wiaWpsAmPzYZMpKymi8vJFD\n9z408nQiu1dOKwMzu9jMfmtm7WZ2dFJDxVKeKmdb6zbaOtoAcJyW9hb2qNgj8mQiu1+upwnLgQuB\nRQnMEl0qlWJa7bTPfS59QJqaqppIE/VsyftLWLBmAe4eexQZIHKKgbuvcvfVgCU0T3T16XrKUmVd\nz+f82ZyI0/RsyrNTOPvBsznqF0cpCpIIXTP4gk9XBz/9r59SXVnN1fOujj1St1778DUA3lz/Jhc8\ncgGDywZHnkiKXZ8xMLP5wD47fwpw4EZ3f7o/B5s5c2bX43Q6TTqd7s+35019up7HVzzOyo9X8uTK\nJ2OP06eW9ha2t27n8mMujz2KFIBMJkMmk+n391kSy0szex641t1f72Ub11I2OcfeeyyNHzVSVlLG\nJYdfQn26nv2H7R97LClAZoa793kqn+RpwoC5blAMzj34XI7Y5whFQBKT08rAzC4A7gSqgc1Ao7uf\n3cO2WhmIRJDtyiCR04RsKAYicWQbA92OLCKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIg\nIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAi\ngGIgIoFiICKAYiAigWIgIoBiICKBYiAigGIgIoFiICKAYiAigWIgIoBiICKBYiAiQI4xMLPZZva2\nmTWa2RNmVpXUYCKSX7muDH4DjHX3I4HVwA25j1Q4MplM7BH6pdjmBc1cSHKKgbsvcPeO8PRFoCb3\nkQpHsf2jF9u8oJkLSZLXDL4HzEtwfyKSR6V9bWBm84F9dv4U4MCN7v502OZGoNXdH9otU4rIbmfu\nntsOzL4D/AA4zd2be9kutwOJyJfm7tbXNn2uDHpjZmcB1wPjewtBtsOISDw5rQzMbDVQDnwcPvWi\nu1+ZxGAikl85nyaIyMCQ1zsQzexiM/utmbWb2dH5PHZ/mNlZZrbSzN4xs2mx5+mLmd1nZuvNbFns\nWbJhZjVmttDMVpjZcjO7OvZMfTGzCjN7yczeCDPXxZ4pG2aWMrPXzew/+to237cjLwcuBBbl+bhZ\nM7MUcBcwERgLXGJmh8Sdqk8P0DlvsWgDrnH3w4ATgasK/e84XBM71d2PAo4Ezjaz4yOPlY0pwIps\nNsxrDNx9lbuvpvPtyUJ1PLDa3d9z91bgEWBS5Jl65e6LgU2x58iWu3/k7o3h8VbgbWBk3Kn65u7b\nwsMKOi++F/Q5tpnVAN8E/jWb7fWLSrsaCazd6fk6iuA/arEys9F0vtK+FHeSvoUl9xvAR8B8d38l\n9kx9+CdgKllGK/EYmNl8M1u208fy8Od5SR9rN+lu1VLQrwDFysyGAo8DU8IKoaC5e0c4TagBTjCz\nw2LP1BMzOwdYH1ZgRhar8ZzuM+iOu5+Z9D7zbB0waqfnNcAHkWYZsMyslM4QzHH3p2LP0x/uvsXM\nMsBZZHk+HkEtcL6ZfROoBPYws39392/39A0xTxMK9brBK8AYMzvAzMqBvwT6vBJbALKqfwG5H1jh\n7nfEHiQbZlZtZsPC40rgDGBl3Kl65u7T3X2Uux9I5//hhb2FAPL/1uIFZrYWGAfMNbOC+8Umd28H\n/o7OX89+C3jE3d+OO1XvzOwhYClwsJm9b2aXxp6pN2ZWC3wLOC28Vfd6uJu1kO0LPG9mjXRe3/hP\nd/915JkSpZuORATQuwkiEigGIgIoBiISKAYiAigGIhIoBiICKAYiEigGIgLA/wNoeIjlrOj5kwAA\nAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(sample_tours[0] + 'FLLLL'), colour='g')" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAADqCAYAAAChr/4gAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEs9JREFUeJzt3HuM1eWdx/HPZ4Y6MzAFL1zacNOlVlubha5VsbbxrKuW\nS5VLJUq7va2NdrtE0qKVuk2Y/UOTEtta1m4vkbqrKSXUbgultlVLD6YiYIqIcpe0wsCKKNCKAsXh\nu3/MYRjGGeYM5zC/M/O8X8kv/i7P+T3fPIHP7+E556cjQgCA3q8q6wIAAN2DwAeARBD4AJAIAh8A\nEkHgA0AiCHwASETJgW97mO1ltjfYft72bR20m2d7q+21tseU2i8AoGv6lOEeb0n6SkSstV0v6Y+2\nH4uITcca2B4vaVREnG/7MknflzS2DH0DAIpU8gw/Il6OiLWF/QOSNkoa2qbZJEkPFdqskjTA9pBS\n+wYAFK+sa/i2z5U0RtKqNpeGStrR6nin3v5QAACcRmUL/MJyziOSZhZm+idcbucj/D8dAKAblWMN\nX7b7qDnsH46Ixe00aZQ0vNXxMEm72rkPDwEAOAUR0d7E+gTlmuH/SNKGiPhOB9eXSPqMJNkeK2l/\nROxur2FEsEVozpw5mddQKRtjwVgwFiffilXyDN/2FZI+Jel528+qeanmLkkjm/M7fhgRj9qeYPtF\nSW9I+nyp/QIAuqbkwI+IpyRVF9FuRql9AQBOHW/aVqhcLpd1CRWDsTiOsTiOseg6d2X953SzHZVU\nDwD0BLYV3filLQCgwhH4AJAIAh8AEkHgA0AiCHwASASBDwCJIPABIBEEPgAkgsAHgEQQ+ACQCAIf\nABJB4ANAIgh8AEgEgQ8AiSDwASARBD4AJILAB4BEEPgAkAgCHwASQeADQCIIfABIBIEPAIkg8AEg\nEWUJfNvzbe+2va6D61fa3m97TWH7ejn6BQAUr0+Z7vOgpP+U9NBJ2jwZEdeXqT8AQBeVZYYfEX+Q\ntK+TZi5HXwCAU9Oda/hjbT9r+1e239+N/QIAVL4lnc78UdLIiHjT9nhJv5D03vYaNjQ0tOzncjnl\ncrnuqA8Aeox8Pq98Pt/lzzkiylKA7ZGSfhkRf19E2z9Jujgi9rY5H+WqBwBSYVsR0emyeTmXdKwO\n1ultD2m1f6maHzR722sLADg9yrKkY3uBpJykc2xvlzRH0hmSIiJ+KOkG2/8q6Yikg5JuLEe/AIDi\nlW1JpxxY0gGArstiSQcAUMEIfABIBIEPAIkg8AEgEQQ+ACSCwAeARBD4AJAIAh8AEkHgA0AiCHwA\nSASBDwCJIPABIBEEPgAkgsAHgEQQ+ACQCAIfABJB4ANAIgh8AEgEgQ8AiSDwASARBD4AJILAB4BE\nEPgAkAgCHwASUZbAtz3f9m7b607SZp7trbbX2h5Tjn4BAMUr1wz/QUkf6+ii7fGSRkXE+ZJulfT9\nMvWblBUrVuiKK67QvHnzsi4lc8uXL9fYsWM1f/78rEvJVEToiSee0MUXX6yf/OQnWZeDCleWwI+I\nP0jad5ImkyQ9VGi7StIA20PK0XcKjgX9NddcoxUrVmjlypVZl5SZ5cuX65JLLtHEiRO1atUqrV69\nOuuSMnEs6MeMGaPJkydrzZo1WrNmTdZlocL16aZ+hkra0ep4Z+Hc7m7qv0dasWKF7rjjDq1du1Zv\nvvlm1uVkavny5br99tu1ceNGvfHGG1mXk5mI0O9+9zvNmjVL27ZtS3oscAoioiybpJGS1nVwbamk\nD7c6fkLSB9tpF4g4ePBgjB49Ompra0NS8tu5557LWBS2kSNHRl1dXeZ1VML2hS98Ieu/qhVDUkQR\nOd1dM/xGScNbHQ+TtKu9hg0NDS37uVxOuVzudNZVkbZs2aLnnntO9fX1qqur08GDB9/W5iMf+UgG\nlWVj+PDhWrx4sWpra3Xo0KG3XU9pLIYNG6YlS5aopqZGhw8fftv1VMZi69ateuCBBzRz5kx94AMf\nyLqcbpfP55XP57v+wWKeCsVsks6V9HwH1yZI+lVhf6yklR20O43PwJ7jueeeC0mxf//+mDNnTtTX\n158wq5s+fXrWJXa7vXv3xte+9rXo27fvCbP9W265JevSut2ePXti1qxZ0bdv36ipqWkZi9tvvz3r\n0rrFjh07ora2NmzHxIkTsy6nIqjIGX65fpa5QNIKSe+1vd32523favuWQoo/KulPtl+U9ANJXypH\nv73dgAED1NDQoMbGRn31q19VfX29+vTprn+UVZazzjpL99xzjxobG/XlL39Zffv2VXV1ddZlZWLg\nwIG699579dJLL2nGjBnq27evqqrSeaVmzpw5ampqUkRo2bJleuGFF7Iuqcdw88OhMtiOSqonK+vW\nrdPo0aPVdiz+8pe/6L777tPll1+ua6+9NqPqKsO+ffv0rW99S1dffbWuvPLKrMvJ1KuvvqpvfvOb\nmjx5si677LKsyzmtGhsbdf7557cs7VVVVWn8+PFaunRpxpVly7Yiwp22q6SAJfCbdRT4QOpuvvlm\nPfzwwzpy5EjLubq6Oq1evTrJtfxjig38dP4dCKBHa2xs1IIFC04Ie0k6fPiwZs+enVFVPQuBD6BH\nePLJJ3X48GHV1NS0nKupqVGfPn301FNP6a233sqwup6BwAfQI9x0003as2ePdu7cqbvvvluStHPn\nTu3atUvbt29P9gcNXcEIAegRqqqqdM4550hq/gWbpJZjFIcZPgAkgsAHgEQQ+ACQCAIfABJB4ANA\nIgh8AEgEgQ8AiSDwASARBD4AJILAB4BEEPgAkAgCHwASQeADQCIIfABIBIEPAIkg8AEgEQQ+ACSC\nwAeARBD4AJAIAh8AElGWwLc9zvYm21ts39nO9c/afsX2msL2L+XoFwBQvD6l3sB2laT7Jf2TpF2S\nnrG9OCI2tWm6MCJuK7U/AMCpKccM/1JJWyPipYg4ImmhpEnttHMZ+gIAnKJyBP5QSTtaHTcWzrU1\n1fZa24tsDytDvwCALih5SUftz9yjzfESSQsi4ojtWyX9j5qXgN6moaGhZT+XyymXy5WhRADoPfL5\nvPL5fJc/54i22dzFG9hjJTVExLjC8WxJERHf6KB9laS9EXFmO9ei1Hp6g3Xr1mn06NFiLID2ffe7\n39WMGTP4O1JgWxHR6bJ5OZZ0npH0HtsjbZ8h6SY1z+hbF/OuVoeTJG0oQ78AgC4oeUknIppsz5D0\nmJofIPMjYqPt/5D0TEQslXSb7eslHZG0V9LnSu0XANA15VjDV0T8RtIFbc7NabV/l6S7ytEXAODU\n8KYtACSCwAeARBD4AJAIAh8AEkHgA0AiCHwASASBDwCJIPABIBEEPgAkgsAHgEQQ+ACQCAIfABJB\n4ANAIgh8AEgEgQ8AiSDwASARBD4AJILAB4BEEPgAkAgCHwASQeADQCL6ZF0Amv3tb3/TT3/6U0nS\ntm3bJEk//vGPJUn19fWaNGlSZrUB6B0I/Arx9NNP69Of/rT69evXcu6LX/yijh49qoMHD+qVV17R\nwIEDM6wQQE/Hkk6F+OhHP6rzzjtPBw4c0IEDByRJBw4c0OHDhzVlyhTCHkDJyhL4tsfZ3mR7i+07\n27l+hu2Ftrfaftr2iHL025tUVVVp7ty5qq+vP+H8O97xDt1zzz0ZVQWgNyk58G1XSbpf0sckXSRp\nuu0L2zS7WdLeiDhf0n2S5pbab280ZcoUDR48uOW4urpaEyZM0AUXXJBhVd1j6tSpuu6667R+/fqs\nS8nc+PHj9YlPfEKbN2/OupTM5XI5TZ8+veV7LZQoIkraJI2V9OtWx7Ml3dmmzW8kXVbYr5a0p4N7\nReoeeeSRqK+vD0lRW1sbmzZtyrqkbjFixIioqqqKurq6+PjHPx7r16/PuqTMDBo0KKqqqqK2tjam\nTp0amzdvzrqkzPTv3z+qq6ujtrY2pk+fHtu2bYuIiPvvvz/Ii+MKY9FpXpdjSWeopB2tjhsL59pt\nExFNkvbbPrsMffc6x2b5tpOZ3R9z7AvqRx99VB/60Id0/fXXa8OGDVmXlYmjR4/q0KFDWrx4sUaP\nHq0bbrhBW7ZsybqsTDQ1NenQoUNatGiRLrroIn3yk5/Uq6++mnVZPZKbHw4l3MC+QdK1EXFL4fif\nJV0SETNbtXmh0GZX4fjFQpt9be4VpdbTGyxatEg33nhj1mVkrqqqeT5y5plnau/evRlXk63q6mpF\nhPr166fXX38963IyVV1draNHj7ZeGUiebUWEO2tXjp9lNkpq/SXsMEm72rTZIWm4pF22qyX1bxv2\nxzQ0NLTs53I55XK5MpTYs0ybNk1//vOftXLlyqxL6TY///nP33aurq5OZ599tsaPH689e/ZkUFU2\nOhqLwYMH66qrrtJrr72WQVXZ6Ggshg4dqrvvvjuDiipDPp9XPp/v+geLWfc52abmNfkXJY2UdIak\ntZLe16bNlyT9V2H/JkkLO7hX+Re30COMGDEiJIWk6NevX4wYMSIWLlwYTU1NWZfW7QYNGtQyFvX1\n9TFq1Kj42c9+luRY9O/f/4SxuPDCC2Pp0qVx9OjRrEurKCpyDb/kGX5ENNmeIekxNf/qZ35EbLT9\nH5KeiYilkuZLetj2VkmvFUIfOEFNTY2GDBmiuXPnatq0aS1LOimqra3V0KFDNXfuXE2ePDnpsair\nq9PIkSN17733asKECbI7XblAB0pewy8n1vDTNX/+fNXX1ycf9JL0ve99T0OGDEk+6CVp3rx5GjVq\nFEHfiWLX8Al8AOjhig38tKcPAJAQAh8AEkHgA0AiCHwASASBDwCJIPABIBEEPgAkgsAHgEQQ+ACQ\nCAIfABJB4ANAIgh8AEgEgQ8AiSDwASARBD4AJILAB4BEEPgAkAgCHwASQeADQCIIfABIBIEPAIkg\n8AEgEQQ+ACSCwAeARJQU+LbPsv2Y7c22f2t7QAftmmyvsf2s7V+U0icA4NQ4Ik79w/Y3JL0WEXNt\n3ynprIiY3U67v0ZE/yLuF6XUAwApsq2IcKftSgz8TZKujIjdtt8lKR8RF7bT7vWIeGcR9yPwAaCL\nig38UtfwB0fEbkmKiJclDeqgXY3t1bZX2J5UYp8AgFPQp7MGth+XNKT1KUkh6etd6GdERLxs+zxJ\ny2yvi4g/tdewoaGhZT+XyymXy3WhGwDo/fL5vPL5fJc/V+qSzkZJuVZLOr+PiPd18pkHJf0yIv63\nnWss6QBAF3XXks4SSZ8r7H9W0uJ2CjnT9hmF/YGSPixpQ4n9AgC6qNQZ/tmSFkkaLmm7pGkRsd/2\nxZJujYhbbF8u6QeSmtT8gPl2RPx3B/djhg8AXdQtv9IpNwIfALquu5Z0AAA9BIEPAIkg8AEgEQQ+\nACSCwAeARBD4AJAIAh8AEkHgA0AiCHwASASBDwCJIPABIBEEPgAkgsAHgEQQ+ACQCAIfABJB4ANA\nIgh8AEgEgQ8AiSDwASARBD4AJILAB4BEEPgAkAgCHwASQeADQCJKCnzbN9h+wXaT7X84SbtxtjfZ\n3mL7zlL6BACcmlJn+M9LmiJpeUcNbFdJul/SxyRdJGm67QtL7LfXy+fzWZdQMRiL4xiL4xiLrisp\n8CNic0RsleSTNLtU0taIeCkijkhaKGlSKf2mgD/MxzEWxzEWxzEWXdcda/hDJe1oddxYOAcA6EZ9\nOmtg+3FJQ1qfkhSS/j0ifllEH+3N/qO48gAA5eKI0rPX9u8lzYqINe1cGyupISLGFY5nS4qI+EY7\nbXkQAMApiIiTLa1LKmKG3wUddfaMpPfYHinp/yTdJGl6ew2LKRgAcGpK/VnmZNs7JI2VtNT2rwvn\n3217qSRFRJOkGZIek7Re0sKI2Fha2QCArirLkg4AoPJV3Ju2xb7M1Zvxoloz2/Nt77a9LutasmZ7\nmO1ltjfYft72bVnXlBXbNbZX2X62MBZzsq4pa7arbK+xveRk7Sou8FXEy1y9GS+qneBBNY8DpLck\nfSUi3i/pckn/luqfi4g4LOkfI+KDksZIGm/70ozLytpMSRs6a1RxgV/ky1y9GS+qFUTEHyTty7qO\nShARL0fE2sL+AUkblfD7LBHxZmG3Rs0/Pkl2bdr2MEkTJD3QWduKC3zwohpOzva5ap7Zrsq2kuwU\nljCelfSypMcj4pmsa8rQtyXdoSIeepkEvu3Hba9rtT1f+O91WdRTYXhRDR2yXS/pEUkzCzP9JEXE\n0cKSzjBJl9l+f9Y1ZcH2REm7C//6szpZGSnn7/CLFhHXZNFvD9EoaUSr42GSdmVUCyqI7T5qDvuH\nI2Jx1vVUgoj4q+28pHEqYg27F7pC0vW2J0iqk/RO2w9FxGfaa1zpSzopruO3vKhm+ww1v6h20m/e\ne7lOZy0J+ZGkDRHxnawLyZLtgbYHFPbrJF0taVO2VWUjIu6KiBER8XdqzoplHYW9VIGB39HLXKng\nRbXjbC+QtELSe21vt/35rGvKiu0rJH1K0lWFnyOusT0u67oy8m5Jv7e9Vs3fY/w2Ih7NuKYegRev\nACARFTfDBwCcHgQ+ACSCwAeARBD4AJAIAh8AEkHgA0AiCHwASASBDwCJ+H/mh3TR5lLJjgAAAABJ\nRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour('FFFLLFFL'))" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Step(x=0, y=0, dir=),\n", - " Step(x=1, y=0, dir=),\n", - " Step(x=2, y=0, dir=),\n", - " Step(x=2, y=-1, dir=),\n", - " Step(x=3, y=-1, dir=),\n", - " Step(x=4, y=-1, dir=),\n", - " Step(x=4, y=0, dir=),\n", - " Step(x=4, y=1, dir=),\n", - " Step(x=4, y=2, dir=),\n", - " Step(x=4, y=3, dir=),\n", - " Step(x=3, y=3, dir=),\n", - " Step(x=3, y=4, dir=),\n", - " Step(x=4, y=4, dir=),\n", - " Step(x=4, y=5, dir=),\n", - " Step(x=3, y=5, dir=),\n", - " Step(x=2, y=5, dir=),\n", - " Step(x=2, y=4, dir=),\n", - " Step(x=1, y=4, dir=),\n", - " Step(x=0, y=4, dir=),\n", - " Step(x=-1, y=4, dir=),\n", - " Step(x=-2, y=4, dir=),\n", - " Step(x=-3, y=4, dir=),\n", - " Step(x=-4, y=4, dir=),\n", - " Step(x=-4, y=3, dir=),\n", - " Step(x=-4, y=2, dir=),\n", - " Step(x=-3, y=2, dir=),\n", - " Step(x=-3, y=1, dir=),\n", - " Step(x=-3, y=0, dir=),\n", - " Step(x=-3, y=-1, dir=),\n", - " Step(x=-2, y=-1, dir=),\n", - " Step(x=-1, y=-1, dir=),\n", - " Step(x=0, y=-1, dir=),\n", - " Step(x=0, y=0, dir=)]" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trace_tour(walks[3])" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nCZYCTkSC9X9HKanR5sBgvwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(walks[3]))" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "10" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "long_walks = [w for w in walks if len(w) >= 30]\n", - "len(long_walks)" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAADTCAYAAABOQ5KuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFdtJREFUeJzt3Xtw1fWZx/H3kyuOFFOxVbkkyrAo6w3RelfA0sFZh2Wx\njsbKorhjp4ja1SKi0AbWWgmotat0pstWOnRWQK1Doa2AiEBVcFFuioBkpSkql4JZRTSHkDz7R05Z\niuTG+Z7zyxc+r5nM5MDh83s8HD/88ss5eczdERGRuOQlPYCIiLSdyltEJEIqbxGRCKm8RUQipPIW\nEYmQyltEJEJBytvMfmlmO8xsXYg8ERFpXqgz7+nAoEBZIiLSgiDl7e6vAjUhskREpGW65i0iEqGC\nXB3IzPQ+fBGRI+Duduiv5fTM292j+qioqEh8hqN5Xs2seY+WmbM5b1NClrelP0REJMtCvVTwGeB1\noJeZ/dnMRoTIFRGRwwtyzdvdvxMip73p379/0iO0SWzzgmbOhdjmhfhmTmJea+6aStADmXmujiUi\ncrQwMzzpb1iKiEgYKm8RkQipvEVEIqTyFhGJkMpbRCRCKm8RkQipvEVEIqTyFhGJkMpbRCRCKm8R\nkQipvEVEIqTyFhGJkMpbRCRCoX6e9zVmttHM3jOz+0NkiohI0zL+kbBmlge8B3wT+AhYCZS7+8ZD\n7qcfCSvRcnfMwi+KylZuNrNjy41dNn8k7EXAZnevdvc6YBYwJECuSLtQVVVFly5dePDBB6mpqQma\nfckll3DttdfyzjvvBM2dMmUKPXv25Pnnn6ehoSFY7vr16+nSpQsTJkzgk08+CZYL0KdPH4YOHcrG\njRtbvrMEOfP+NjDI3b+bvj0MuMjd7z7kfjrzlpz49a9/zfDhw4Pn5uXlYWbU19cHz45N+mwwa7nz\n589n0KBBwfNj1NSZd4g1aIf7Ouewf6sTJkw48Hn//v2jW3Uk7V99fT3jx48nPz+fZ599lgsuuCDj\nzE2bNnHttdcydOhQxo4dS+fOnQNM2ujyyy/nhBNO4JFHHuHcc88Ndtng4YcfZvbs2YwfP56hQ4dS\nWFgYJHfdunVcd9113HjjjYwePZqvfvWrQXIBLrzwQrp27cratWuZO3fuMVveS5YsYcmSJS3eL8SZ\n9yXABHe/Jn17LODuXnnI/XTmLVn3xz/+kauuugqA8vJyZs6cGSS3traWDh06BMk6WCqVoqioKPi1\nXndn3759FBcXB82F7D0WtbW1FBcXk5eXx6hRo3jqqaeCHyNG2bzmvRLoaWZlZlYElANzA+SKtNll\nl13GueeeC0BlZWUL9269bJQVQHFxcVa+SWdmWSluyN5j0aFDB33Dsg0yLm93rwfuBBYC64FZ7r4h\n01yRI5Gfn0/fvn0BKC0tTXgakewJcc0bd58PnBEiS0REWqZ3WIqIREjlLSISIZW3iEiEVN4iIhFS\neYuIREjlLSISIZW3iEiEVN4iIhFSeYuIREjlLSISIZW3iEiEVN4iIhFSeYuIRCij8jaz683sHTOr\nN7O+oYYSEZHmZXrm/TYwFFgaYBYROcaNGTMGgKlTp7J58+aEp2nfMvp53u6+CcC0/kJEAigpKaGg\noIC8vDxKSkqSHqdd0zVvOepka/2XZN/dd99NQUEBw4cP52tf+1rS47RrLZ55m9lLwMkH/xKN2+HH\nufu8thxM2+MlF6qqqsjPz2fbtm2ceuqpSY8jbdCxY0dqa2spKipKepTE5Gx7PICZvQL8wN1XNXMf\nbY+XrFu7di19+vQB4I477mDq1KkJTyRtZWbaHn+QbG6PP3CMgFkiR6Rr164HPh8wYECCk4hkV6Yv\nFfwnM9sKXAL8zsxeDDOWyJE56aSTuPXWWwG4/vrrkx1GJIsyfbXJHGBOoFlERKSV9GoTEZEIqbxF\nRCKk8hYRiZDKW0QkQipvEZEIqbxFRCKk8hYRiZDKW0QkQipvEZEIqbxFRCKk8hYRiZDKW0QkQipv\nEZEIZfojYSeb2QYzW2NmvzGzTqEGExGRpmV65r0QOMvd+wCbgQcyH0lEjlULFy4EYMaMGXz22WcJ\nT9O+ZVTe7r7I3RvSN1cA3TIfKTnuzooVK0ilUsGzq6qq+Oijj4Ln7t27l7feeit4rruzfPly6urq\ngmdv2rSJHTt2BM/99NNPWbNmTfBcyZ0ZM2YAsGfPHt5///2Ep2nfguywBDCzucAsd3+mid8PvsOy\nvr6exx57jKqqqiB527dvZ968eZx00kncdttt1NTUBMkFmDZtGoWFhdx000106NCBUI/FrFmz2LNn\nD5deeikXX3wxe/fuDZJbXV3NwoUL+frXv86IESP4+OOPg+RC42NRVFTEsGHDyM/PD5Y7Y8YMUqkU\np5xyCtu3bw/2GEvuVFVV0atXL/r168crr7yS9DjtQlM7LFss79ZsjzezcUBfd/92MzleUVFx4HaI\n7fEPPfQQP/rRjzLKOJzi4mJOPPFEtm3bFjS3oKCAgoICamtrg+bCgb/g4LlFRUV07tw5+GNRWFhI\nYWEhn3/+edBcaHwsRo4cqeXDkTIzRo8ezZQpU5IeJRGHbo+fOHHiYcsbd8/oA7gFeA0obuF+HtLe\nvXu9U6dOXlBQ4BMnTgyS+emnn3p5ebnPnTvXGxoagmT+1Q9/+EN/+OGHfc+ePUFzly5d6jfffLNv\n3rw5aO7u3bv9hhtu8BdffDH4YzFmzBifMmWK7927N2ju/Pnz/ZZbbvEtW7YEzZXcAnzUqFFJj9Fu\npLvzS52a0WUTM7sGeAy4yt13t3Bfz+RYh6qurua0004DoLy8nJkzZwbLFpHkmBmjRo3iqaeeSnqU\ndqGpyyaZvtrkSaAj8JKZrTKzn2eY12plZWVUVlYCqLhF5JiT6fb4vws1iIiItJ7eYSkiEiGVt4hI\nhFTeIiIRUnmLiERI5S0iEiGVt4hIhFTeIiIRUnmLiERI5S0iEiGVt4hIhFTeIiIRUnmLiERI5S0i\nEqFMt8f/m5mtNbPVZjbfzE4JNZiIiDQt0zPvye5+nrufD/weqGjpD4iINGXnzp1A4y7LkMtbjkaZ\nbo//7KCbxwMNTd1XRKQlI0eOBGDBggWsXLkyWO7R+A9Bxte8zezHZvZn4DtA+G3AInLMuP322yks\nLKRr165ccMEFQTIfeOABysrKmDlzJvX19UEy24Mg2+PT97sfOM7dJzSRE3SHJcATTzxBRUUFNTU1\n5OXpe68isXN3evfuzaZNm7KSf/XVV/Pyyy9nJTtbmtphmdEC4kMOUAr83t3PaeL3vaLi/y+J9+/f\nn/79+x/x8dyds88+m40bN/Lcc89x3XXXHXGWiLQf9fX1pFKpYHljx45l9uzZHH/88WzZsqXdX0JZ\nsmQJS5YsOXB74sSJ4cvbzHq6e1X687uAK939hibuG/TMe+PGjfTu3RuAAQMGsHjx4mDZInL0cHfq\n6+u54ooreOONN9p9eR8qW9vjJ5nZOjNbAwwEvp9hXqudccYZDBs2DIDp06fn6rAiEhkzo6Ago13r\n7VKm2+OvDzVIW5kZ55zTeIWmrKwsqTFERBKh7/KJiERI5S0iEiGVt4hIhFTeIiIRUnmLiERI5S0i\nEiGVt4hIhFTeIiIRUnmLiERI5S0iEiGVt4hIhFTeIiIRUnmLiERI5S0iEqEg5W1mo82swcxODJEn\nIiLNC7GAuBuNixiqMx9HRCS8ZcuW8cYbbwBQWVmZ8DRhhDjz/ilwX4AcEZGs6NKlC0VFRRQXF3Pa\naacFydy6dSu33XYba9asCZLXVhmVt5kNBra6+9uB5mnr8ZM4rIhEpmfPngwcOJBUKkV5eTlmlvFH\naWkp06dP58ILL2TAgAE5/29qcQ2amb0EnHzwLwEOjAceBL51yO81acKECQc+z3R7PMDKlSsBWL9+\nPWeddVZGWSJydJs5cyajR49m165dQfJWrVpFdXU1nTt3/ptt75k6dHt8U454e7yZnQ0sAj6nsbS7\nAR8CF7n7zsPcP+j2+D/96U+cfvrpAAwZMoQ5c+YEyxYRaUldXR1Lly6lW7du9O7dO2tb6YNvj3f3\nd9z9FHfv4e6nAx8A5x+uuLPh5JNPpnv37gDcdNNNuTikiMgBhYWFDBw4MLHN9CFf5+20cNkkpOOO\nO44777wTgBtvvDFXhxURaReC/ZPh7j1CZYmISPP0DksRkQipvEVEIqTyFhGJkMpbRCRCKm8RkQip\nvEVEIqTyFhGJkMpbRCRCKm8RkQipvEVEIqTyFhGJkMpbRCRCKm8RkQhlugatwsw+MLNV6Y9rQg0m\nIiJNC3Hm/bi7901/zA+QJyISBXdn0qRJADzxxBM5PXaI8tYWYMnIypUr2bFjR/Dc7du38+abbwbP\n3bdvH4sWLaK+vj549vLly4PtWDzYhx9+yOrVq4Pn1tbWsmjRIhoaGoLmujuvvvoqNTU1QXMBqqur\nWbduXZCsVCrF7NmzAZg6dWqQzNYKsYxhlJn9M/Am8AN3/yRAZquEfsJIbr3++uuMHj2a5cuXAzB0\n6NAguWZGcXExL7zwAqlUKlguwKmnnspzzz3HX/7yF3r37s2ZZ54ZJLdTp06sX7/+wD82oWbOy8sj\nPz+fOXPmsG/fvqCPRZcuXXjmmWeoqanhvPPOo0ePMPtYSkpKWL16NWvWrAHCPRb5+fk0NDQwb948\n6urqguWWlpby7rvvUllZGSSvtVpcQNzM9vhxwApgl7u7mf0YONXd/6WJHK+oqDhwO8T2+HHjxjFl\nyhR27txJSUlJRlmSe4WFhTQ0NGTlH+GSkhK++OILUqlU0Nzu3buzbds29u/fHzQXoKCgICu5nTp1\nora2ln379gXNLS0tZfv27cFz8/PzAbLylU3Hjh1JpVLU1dUFze3Xrx+LFy8mLy/zixmHbo+fOHHi\nYRcQ4+5BPoAyYF0zv+8h7dmzxzt27OgFBQU+bty4oNmSG4BfccUVfs899/i8efOCZtfV1fnTTz/t\nY8aMCZrr7r5ixQofMWKE79ixI2jutm3b/K677vKFCxcGzU2lUv6LX/zCx48fHzTX3X3ZsmU+YsQI\n3717d9DcDz74wL/3ve/5smXLgubW1tb6k08+6Q899FDQ3GxKd+eXOrXFM+/mmNkp7r49/fk9wDfc\n/TtN3NczOdahtm7dSmlpKQC33nor06dPD5YtuWFmDBgwgMWLFyc9iki7ZWaHPfPO9Bx/spmtM7M1\nQD/gngzzWq179+4HrjGpuEXkWJPRNyzdfXioQUREpPX0DksRkQipvEVEIqTyFhGJkMpbRCRCKm8R\nkQipvEVEIqTyFhGJkMpbRCRCKm8RkQipvEVEIqTyFhGJkMpbRCRCKm8RkQhlXN5mdpeZbTSzt81s\nUoihRESkeRn9SFgz6w8MBs529/1mdlKQqeSot3PnTgA2bNhAXV0dhYWFCU8kEpdMz7xHApPcfT+A\nu4dfe91K2dj9l83c+vp6Qm4WOlgMj8XEiROBxg3vCxYsCJYrcqzIdHt8L+AqM/sJ8AVwn7u/mflY\nbXP11Vezbt06qqurMfvyns4j8fHHH/Poo48ybdo0fvvb33LZZZcFyd2/fz/PP/8848aNY8iQITz+\n+ONBcgFWr17N2LFj2bJlC++9916w3F27dlFZWcmvfvUrFixYQN++fTPOHDZsGNOmTaNjx44MHDgw\nwJQix5ZMtsePBx4GXnb3fzWzbwCz3b1HEznBt8e/9tprXHnllQBZO4uVRuk9esFzJ0+ezH333Rc8\nVyRWOdkeD/wBuOqg21VA5ybum43Fyr5+/XofPHiwd+3a1RsaGoLl1tTU+Pjx472kpMRfe+21YLn1\n9fU+e/ZsLysr83vvvTdYrrv72rVrfdCgQd6jR4+gubt37/YxY8Z4SUmJv/XWW0GzRaR5ZGl7/HeB\nru5eYWa9gJfcvayJ+3omx2qJuwe7ZBJzbjazszmziBxeU9vjMy3vQuBpoA+QAn7g7kubuG9Wy1tE\n5GiUlfJu4wAqbxGRNmqqvPUOSxGRCKm8RUQipPIWEYmQyltEJEIqbxGRCKm8RUQipPIWEYmQyltE\nJEIqbxGRCKm8RUQipPIWEYmQyltEJEIqbxGRCKm8RUQilFF5m9ksM1uV/thiZqtCDdYeHLyKKAax\nzQuaORdimxfimzmJeTMqb3cvd/e+7t4X+A3wQpix2gc9gbJPM2dfbPNCfDMnMW+m2+MPdgMwIGCe\niIg0Icg1bzO7Etju7v8TIk9ERJrX4ho0M3sJOPngXwIcGOfu89L3+Tmw2d1/2kyOdqCJiByBrOyw\nNLN84EOgr7t/lFGYiIi0SojLJt8CNqi4RURyJ0R53wjMDJAjIiKtlPFlExERyb2cvsPSzM4zs+Vm\nttrM/tvMLszl8Y+Emd1lZhvN7G0zm5T0PK1lZqPNrMHMTkx6lpaY2WQz22Bma8zsN2bWKemZDsfM\nrkk/F94zs/uTnqclZtbNzBab2bvp5+/dSc/UGmaWl37j39ykZ2kNMzvBzJ5LP4fXm9nFuThurt8e\nPxmocPfzgQpgSo6P3yZm1h8YDJzt7ucAjyY7UeuYWTdgIFCd9CyttBA4y937AJuBBxKe50vMLA94\nChgEnAXcZGZnJjtVi/YD97r73wOXAqMimBng+8C7SQ/RBj8D/uDuvYHzgA25OGiuy7sBOCH9eQmN\nr1Jpz0YCk9x9P4C770p4ntb6KXBf0kO0lrsvcveG9M0VQLck52nCRTS+HLba3euAWcCQhGdqlrtv\nd/c16c8/o7FUuiY7VfPSJx7/APxn0rO0hpl9BbjS3acDuPt+d/80F8fOdXnfAzxqZn+m8Sy83Z1h\nHaIXcJWZrTCzVyK5zDMY2Orubyc9yxG6DXgx6SEOoyuw9aDbH9DOi/BgZnYa0Ad4I9lJWvTXE49Y\nvhnXA9hlZtPTl3r+w8yOy8WBQ749Hmj+TT00fin/fXefY2bXA0/T+FLDxDQz73gaH58Sd7/EzL4B\nPEvjX1aiWpj5Qf72Mf3Si/uT0Mo3e40D6tz9mQRGbMnhHscoCsbMOgLP0/j/3mdJz9MUM7sW2OHu\na9KXLNvFc7cFBUBfYJS7v2lmTwBjabwsnFU5fbWJmf2vu5ccdPsTdz+huT+TJDP7A42XTZalb1cB\nF7v77mQnOzwzOxtYBHxO4xO/G42Xpi5y951JztYSM7sF+C5wtbunkp7nUGZ2CTDB3a9J3x4LuLtX\nJjtZ88ysAPgd8KK7/yzpeZpjZj8BhtF4rf444CvAC+4+PNHBmmFmJwPL3b1H+vYVwP3uPjjbx871\nZZMPzawfgJl9E3gvx8dvqznANwHMrBdQ2F6LG8Dd33H3U9y9h7ufTuOX9udHUNzXAGOAf2yPxZ22\nEuhpZmVmVgSUAzG8GuJp4N32XtwA7v6gu5emi7AcWNyeixvA3XcAW9P9AI19kZNvtga/bNKC24F/\nT7+lvpbGM632bDrwtJm9DaSAdv1EOgwnji89nwSKgJfMDGCFu9+R7Eh/y93rzexOGl8Zkwf80t1z\n8qqCI2VmlwM3A2+b2Woanw8Puvv8ZCc76twN/JeZFQLvAyNycVC9SUdEJEJagyYiEiGVt4hIhFTe\nIiIRUnmLiERI5S0iEiGVt4hIhFTeIiIR+j+lRtB3jPdEdgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(long_walks[0]))" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['FFFFRFFLRLRRFFFFFFFLRFFFFRFFFRFFFFFLFR',\n", - " 'RFLFFFLFFFFLFRFRFLRFLLFRLFFFFFFLFFFFFLFRFL',\n", - " 'FFRFLFFRFFFLRFRFFFFFRFFFLFRFRFLF',\n", - " 'FFRLFLFFFLRRLLFLRFFFFFLFLRFFLFFL',\n", - " 'FFFFFRFFFFRFLFRFRFFFLFFFFRFFRFFF',\n", - " 'RRLFFLRRLFLFRRFLFLFRFLLFFFFFFLRFFFFL',\n", - " 'LFFFRRLLRFLFLLRFFFRLFFFLFFRFFLFLFFFLRFRLRFLFLL',\n", - " 'FRFLFLRFLRFLFLLRFRFFFFLLFRFFLFFF',\n", - " 'RFFFRLRFFRFFFFLLFFFRFRFFFFFFRFRFLFFRLF',\n", - " 'LLFRFRLFFFFLFLFFFRFFLFFFLLRRFLFLRF']" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "walks" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n8v89qQ80wuYWhQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour('FLFFLRFRLFRRRR'))" - ] - }, - { - "cell_type": "code", - "execution_count": 66, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(383, [])" - ] - }, - "execution_count": 66, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w = random_walk()\n", - "ms = mistake_positions(trace_tour(w))\n", - "len(ms), returns_to_origin(ms)" - ] - }, - { - "cell_type": "code", - "execution_count": 67, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n+wAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(w))" - ] - }, - { - "cell_type": "code", - "execution_count": 68, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def trim_loop(tour, random_mistake=False):\n", - " trace = trace_tour(tour)\n", - " mistakes = mistake_positions(trace)\n", - " if random_mistake:\n", - " end_mistake_index = random.randrange(len(mistakes))\n", - " else:\n", - " end_mistake_index = 0\n", - "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace; {}'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n", - " # while this mistake extends to the next step in the trace...\n", - " while (mistakes[end_mistake_index].i + 1 < len(trace) and \n", - " end_mistake_index + 1 < len(mistakes) and\n", - " mistakes[end_mistake_index].i + 1 == \n", - " mistakes[end_mistake_index + 1].i):\n", - "# print('end_mistake_index {} pointing to trace position {}; {} mistakes and {} in trace'.format(end_mistake_index, mistakes[end_mistake_index].i, len(mistakes), len(trace), mistakes))\n", - " # push this mistake finish point later\n", - " end_mistake_index += 1\n", - " mistake = mistakes[end_mistake_index]\n", - " \n", - " # find the first location that mentions where this mistake ends (which the point where the loop starts)\n", - " mistake_loop_start = max(i for i, loc in enumerate(trace[:mistake.i])\n", - " if (loc.x, loc.y) == (mistake.step.x, mistake.step.y))\n", - "# print('Dealing with mistake from', mistake_loop_start, 'to', mistake.i, ', trace has len', len(trace))\n", - " \n", - " # direction before entering the loop\n", - " direction_before = trace[mistake_loop_start].dir\n", - " \n", - " # find the new instruction to turn from heading before the loop to heading after the loop\n", - " new_instruction = 'F'\n", - " if (mistake.i + 1) < len(trace):\n", - " if turn_left(direction_before) == trace[mistake.i + 1].dir:\n", - " new_instruction = 'L'\n", - " if turn_right(direction_before) == trace[mistake.i + 1].dir:\n", - " new_instruction = 'R'\n", - "# if (mistake.i + 1) < len(trace):\n", - "# print('turning from', direction_before, 'to', trace[mistake.i + 1].dir, 'with', new_instruction )\n", - "# else:\n", - "# print('turning from', direction_before, 'to BEYOND END', 'with', new_instruction )\n", - " return tour[:mistake_loop_start] + new_instruction + tour[mistake.i+1:]\n", - "# return mistake, mistake_loop_start, trace[mistake_loop_start-2:mistake_loop_start+8]" - ] - }, - { - "cell_type": "code", - "execution_count": 69, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'" - ] - }, - "execution_count": 69, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w = 'RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF'\n", - "w" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nrC2Hf85MaAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "w_short = w[:100]\n", - "plot_trace(trace_tour(w_short))" - ] - }, - { - "cell_type": "code", - "execution_count": 71, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n", - "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n" - ] - }, - { - "data": { - "image/png": "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\nHk9j8/PzmT59Opdccgk33nhjwuPWrl1LSUkJzz//POPHj/dUc+nSpdx8c3QdujFjxtCrV6+Ex65e\nvZqNGzcC8JOf/KRxnaTzUVV+8Ytf0NDQQFlZGUVFRZ7m3LTxIr4kbCKqqqrYtm0bEP0VICur5f+h\nZPr06UyaNIkhQ4Z4aot999132b17N1VVVQl3mXlZFTHoxv//DbzbzP/5/inkkpkzZyqgr776quex\nS5YsUb+fpwkTJvgaW19f37inOHz4sOfxgObk5Hget23btsa6dXV1nsenw4IFCxTQOXPmeB77pz/9\nyffXVvXce+KW/+PPMT/+8Y8B+OEPf5jmmSQmKyuLwYMHA1BYWJiyugMGDACgU6dO5OQEta5fuO6+\nO7pO4L333pvmmXxVoJ89Vf1P4D+D3KYx5txsT2yM4yzExjjOQmyM4yzExjjOQmyM4yzExjjOQmyM\n4yzExjjOQtyC7N27F/jvtkIv4ouxee1+CkIkEkl5TdfEv7aHDx8OfNsW4pDMmTPH85pKzz33HAC/\n/e1vPdeLrzfV9KT5sFVUVDTer6ysTHhcXV0ds2fPTqq2qvLOO++wevVqz2Pr6+t57bXX2LJli6/a\nr7zyCrt37/Y0Zvr06QAsWLDAV81zau6k6qBvZEgDxKlTp5JqzWvXrp1WVlZ6rvuzn/1MCwsLNRKJ\neB575513aq9evTyPU1Xt3r17Uq+3f//+vupec801aWnZTOaWl5enFRUVvl4v52iAcOPMc4fk5+ez\nYcMG7rvvPn70ox/xzW9+09P4AQMG0KFDB891a2pqKC8v97yeUyQS4fXXXweiF1Do2bNnwmMrKys5\ndOgQAIsXLyYvLy+hcadPn2bcuHEcPHiQ7du309DQ4LkVsaSkhMsvv5z+/fs3Np0kYtWqVTz//PPk\n5+dz9913M3LkyITHzp8/n7feeouCggLGjx/Pt771LU9z7tevHwUFBZ7GJKS5dAd9I0P2xOnitxWx\noaGhcU9x4sQJT2Nra2t9txMeP368cWxDQ4OnsarRPdOUKVM8j/vzn/+sgN52222ex8ZbRRcvXux5\nbLKwVkTTHBFpbEVs3769p7G5ubmN9722E8ZXVBw6dGhKV3S86qqrAG8XMIi76aabvvJvS2EhNsZx\nFmJjHGchNsZxFmJjHGchNsZxFmJjHGchNsZxSYdYRIpFZLWIfCwiH4nIT4OYmDEmMUGcdhkBHlHV\n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\nYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "trimmed = trim_loop(w_short)\n", - "print('{}\\n{}'.format(w_short, trimmed))\n", - "plot_trace(trace_tour(trimmed))" - ] - }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "RFFRRFFFRFFRFLLRFLFFFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n", - "RFFRRFFFRFFRFLLRFLFFLLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLR\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "trimmed2 = trim_loop(trimmed)\n", - "print('{}\\n{}'.format(trimmed, trimmed2))\n", - "plot_trace(trace_tour(trimmed2))" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Mistake(i=104, step=Step(x=-4, y=6, dir=)),\n", - " Mistake(i=105, step=Step(x=-5, y=6, dir=)),\n", - " Mistake(i=106, step=Step(x=-5, y=7, dir=)),\n", - " Mistake(i=107, step=Step(x=-5, y=8, dir=)),\n", - " Mistake(i=108, step=Step(x=-5, y=9, dir=)),\n", - " Mistake(i=115, step=Step(x=-5, y=12, dir=)),\n", - " Mistake(i=116, step=Step(x=-5, y=11, dir=)),\n", - " Mistake(i=127, step=Step(x=2, y=11, dir=)),\n", - " Mistake(i=130, step=Step(x=3, y=11, dir=)),\n", - " Mistake(i=132, step=Step(x=3, y=11, dir=))]" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mistake_positions(trace_tour(w[:130]))[-10:]" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Step(x=40, y=36, dir=)\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVoAAAD7CAYAAAArZlyJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXd8VFX6/z8nMyQhIR0hkFBVmjTpyKpBFBvKLiuK5Sfu\nuq67iCv4RQ0ua8Vd/Kp8BUHUxQV0FSy4UsQCStBFikBC76GFVBLS25Tz+2NyDvdO73Nn8rxfr/tK\nzp1Tnntn5plzn/Oc52GccxAEQRCBIyrUAhAEQUQ6pGgJgiACDClagiCIAEOKliAIIsCQoiUIgggw\npGgJgiACjD7QAzDGyH+MIIhWAeec2TsflBkt5zzox/PPPx+ScUlebR4kL8kaaHmdQaYDgiCIAEOK\nliCIsOTf//43GGOq4/nnn1fVmT17tk2d1157TVW+7rrrnI5z/Phx9O7dW9Wme/fuLmexKgI9TbcM\nEXw2b94cknG9heQNLCRv4AiVrAA4AB4fH8/j4+N5bGwst9Y3AHhsbKysA4BnZmaqyq501A033KAa\nR7QpKCiwGYs70IOMe6KVvYAxxgM9BkEQrQ/GGPr06YPDhw8DAJYsWYJp06apZpqMMaxcuRJTpkyx\n28fRo0fRp08fp7PT+++/Hx9//LFNvwUFBcjIyFCd46FcDCMIgmjNBNy9iyAIwlPMZjPWrVsHvf6S\nijKZTOCcq86dOnUKX331FQDgwIEDACDLYgb6ySef4MiRIwCAxsZG9O3bF+3btwcAnDt3DgDw3HPP\nISrKMu80Go0YMmQIYmJiAADnz59XySb6NZvNbl8PmQ4IgtAc8+bNw+zZs0Mthgqhx5qbmxETE4Pj\nx4/jiiuukK+T6YAgiLBi9+7dANSL9Waz2cZvVdhXOecYPHiwTRsAmD59uiynp6e71e/DDz8sy507\nd1bJFh0dDQBo27at29dDipYgiLCAMbuTRYlOp/Oqnb3XlefatGnjhnTOIUVLEITmaG5udqteQ0OD\nyzpK02V9fb1b/RoMBrfquQvZaAmC0BwTJ07E2rVrnbpdOZqpWrthuarjab/CRnvkyBH07t1b1c6R\njZa8DgiC0BzCDuoKxhhuvfVWAMDhw4dx6tQpmzo9evTAn//8ZwCAXq/Ho48+6rTPoqIifPjhh7L8\n1ltvSe8EpWzt2rVzS0aAFC1BEGFM7969pTuX2LBgTa9evfDUU0+53Wd6erqqfl5eHj7++GOf5CQb\nLUEQRIChGa1GWbp0Kd577z1pLzp//jy+//57lU2IICKVgoICt+qdOHECI0eOBAAUFxfbrfPtt99K\njwTOOd544w3MnDnTbVlMJhMAYMiQIWjTpo201TY1NbndBy2GaRCTyaTa/SIYOHAg9u7dGwKJCCK4\nTJ06FR988IHTRasFCxZgxowZNud9XQyzpnv37jhz5ozq3ODBg7Ft2zbExsaqxqINC2GE+PX95Zdf\nVE7UJ06cCKVYBBE03HHDeuKJJ1QbDRwFjnn88cfdCs7tCuVYubm5KiXrClK0BEEQAYZstBqhqanJ\nJkhFY2OjyiHb+le+ublZ2o8AoK6uTgbLIAgtU1FRodrCWlFRAZPJJF2mSktLve7behNDQ0ODWxsb\nlPWbm5ulG5fYPFFRUSHrREdHe+TeFbGBv8OJt99+WwYTdnbccMMNss2OHTvs1snJyQnhlRCEa4qK\nitz6vHuqO5555hm/9NulSxe3+ti9e7eqHZwE/ibTgQbYt28fANtgGDt37lSd+/7772UbscJq3Wb7\n9u1Blp4gPKOsrAyA7Wf3kUcekeXx48d73K8I/uJI2YlxXHHu3Dn8/ve/l23EzNu6H+XTpCtI0WqA\nuLg4u+edBcNwFECDIMIVZfCWxMREn9o7QsSc9aSeo++hq2A1qv7crkkQBBFA3J1xBmMMf8tCilYD\nWP8Si0eS4cOH22TwFMeECRPs9uVudCKCCBViYcr60XvJkiXy8/3555973G9SUhIAqL4niYmJqrJQ\noMpzsbGxqjIAvP/++7IsvlPWdTzJsOC21wFjLArALgAFnPM7GWPdAawCkAJgD4D/xzk3uj0yISks\nLFSVdTodVq5cieXLl8s3taioCN27d5e7UQoLC/HII4/Y9OWJbx9BhAKRIkZp/tq+fTteeOEFWT51\n6hQWLVrkUb/33nsvVq1ahZqaGvk9SE1Nxb59+5CZmSnrnTlzBt26dQMAlJSUIDc3F+PHj0dUVBQM\nBgPKyspQVFQklfKFCxcAALfccgsAoLKyEtu3b8dll13mtmyeuHc9AeAQAGE8eRXAG5zzzxhjSwA8\nDOBdD/ojWrD3hk2ZMsWhA7Yz3LVBEUSosPcZHTlyJL7++muf+mWMYe3atR61+frrr3Hbbbfh22+/\ndVhH7AxTyscYczvCGOCm6YAxlgngNgBLFadvALC65f8VAH7j9qgEQRCtCHdntP8H4CkASQDAGEsD\ncJFzLowUBQA6O2hLBJE1a9agsrISgMXBesaMGejbt2+IpSJaMxcuXMDf/vY3JCcnA7A8rgOWBSdP\nVu4DiTLrbXJyMjIyMuSTZlFREQDIZJGNjY0e9+9S0TLGbgdQwjnPY4xlidMthxKHy3RK20tWVhay\nsrIcVW2V+GsBa8yYMdi6dSu2bdsmz33xxRfSb5EgQsGUKVNUPuAAcPnll2tC0Q4fPhwAkJub67Lu\nvHnzVOWDBw/in//8p1vjuIzexRj7O4AHABgBtAWQAOBLAOMBpHPOzYyxUQCe55zfaqc9D4bbRjgz\nY8YMLFiwwO8uJSNHjpSbHggiVKSlpaGioiJsPoeMMTz00ENYtmyZx+24t9G7OOfPcs67cs57ApgC\n4AfO+QMANgOY3FJtKoA1HklFSGjzAUFoC3thSn3BlyXqbABPMsaOAUgF8L5/RCL8RU1NjV/68cRf\nkAgf7G1LtX6v7b33rupYl6urq30RMyLwSNFyzrdwzu9s+f8U53wk57wX5/wezrl/8/O2ImJjY/3+\nCwrYdxtzxZdffmmzOUKn08kFDCJyGDhwIKKiomzea2dld+pYl41Go9xMoDUKCwttrg+AzNrgLyhM\nogYoKSmB0ej/vR7erI5u2rQJAPDzzz8DsMx6xowZg5MnT6Jjx45+lY8ILQcOHMDkyZNlWhez2Yym\npiZV+MLm5mbodDpp3jIYDOCcq3xIGxoaVG0MBgOioqJUJrERI0YE+nK8oqqqCsClzztg2bE2ZswY\nv45DilYDaOnXPiEhAQAwevToEEtCBIOMjIxW/V6LzROBvge0jYggCCLAkKLVAIHyJbTOJGoymXD3\n3Xfb2KTi4+Pl/9a+gmJhY8yYMao2HTp0UJUnTZoUkGsg/IPZbEaXLl1sbJHKrAH27JV33XVXQMxa\nweJvf/ubzTVlZGTI//v06RMUOUjRagDlh92fWKcmv3jxIj777DO0adMGbdq0kV+2uLg4eQ4AXn75\nZdkmKioKf/3rXxEdHa2qExsbqyr/5z//Ccg1EP4hNzdX/vCK923UqFH4xz/+IevMmjVL/i/qrF69\n2qe0MqFm7ty58locfXYdRcLzJ2Sj1QApKSkB6beurk5Vjo+PB3ApB5K7zJ07F3PnznX4+saNG72K\niE8EH2ebBsTnRVlHPPGEMx988IFXAZr8Cc1oCYIgAgzNaDXExo0b5f/CLib8aw0GA8xmswx8AQD9\n+/dHp06dZLm8vBx79uyR5ePHjwO4tEfbk0ygzqitrUVOTo6UZefOnX7plwgcIsi28jNm7ZZ19OhR\nVR1PcmJpmby8PKSlpclyVlaWW2lv/InLWAc+D0CxDlyya9cuGdzCU8xms7S1uruo5uv7cdNNN0l/\nW0F0dDQaGxtDHiSEsM/Zs2dlsGtPaWpq8ij2qpZITk6WvrKCmJgYr3zMXeFTrAMi8AwbNgxms1mV\nZdO6bH1u3bp1AGyV69y5cx324a8oYZs2bYJer1f13dTUREpWw3Tt2tXp54lzjjvvvBMAbOqEq5IF\nLAvAyuuJj4+XWUqCCSlajWCtpOwpLeU5R0pNuZWXFB/hDHc+H+H+GbKWX2zICTakaAmvCGffSsI+\noZjptRZI0YYpwrhv7YCenZ3tMHNuXFwcAFu3L29QLsqFkgULFji8XuWh3MuuZRobG3HHHXf45T3y\nlaamJpuNKYwxrFkTvhFRe/Toga5duwZ9XFoMC2MWLVqE8vJyaS4oLCzErl27kJhoyZ+Zk5MDo9Go\n8oG9/vrr8atf/cqncaOiotC2bVtNKIPY2FgYDAa89NJLAICtW7fi66+/xnPPPSdti3PmzMFjjz3m\ncVbVUGA0GtGmTRtUV1cH/TF34sSJWLt2rVwsNZlM0Ov1ePbZZ+WP9Jw5czBo0CDk5eUFVTZ/ISYk\ngdBJzhbDbAzk/j4sQxChYMSIETwQ9x8A1+v1fu/XG2BJoSTLb775ps01A+Bz5swJtmheA4DX19cH\nfdw777zT7r2rrKxUlQcOHBhs0fxGenp6QL4TnHPRr109SKYDgiCIAEMbFiKYQNpRtbYYdu211wKw\nxFgFgF/96ldgjMkFHhEOL1zgITC3nT17FsCleymyKVtz8uTJoMnkK1988QXmz58vTQYXLlwIjSCO\nprr+OkCmg5DRo0ePgDwmde/enffu3dvv/XrD8uXLpfnA2VFeXh5qUd2itraWA+AlJSVBH3vbtm08\nJiZGdd9iY2O5yWSSddq2bcvHjRsXdNm8xd5n4d133w3YWNyBHqTFsAhm+PDh2LVrl99nR4wx6PV6\nGAzay160YMECzJgxI2wyrtqDMYb6+nrV9litwBjDwIEDsXfv3lCL4haMMaxcuTIoQWVoZ1grJdwe\nlwkiUiEbLeEVobLRim2jgpqaGiQkJMj8VN5m7K2qqkK7du1U54KVBj7cgreUl5dLmY1GIwwGg829\n8xTest1X0NjYiKioKNX23+rqaum6KMoJCQnS/moymdDc3OyzLIGApjwRTEpKivR/9Cfdu3e3CSoe\nDDjn0Ol00Ov18khJScFDDz0k64jFL08VbnJysqpfvV6PP/3pT/4U3y5PPfWUzbgAApIV2R906NAB\n58+fl7LGxsYiPT3d536joqJU96Bdu3aIi4tTnUtNTbUpt2nTRpZjYmLQoUMHm7618ENGijaCOXny\npN8CySg5ffp0SFaexczl+++/Vy624t///resIzwtvDGbGI1GVb8//vijryK75KeffgKgXpSuqakJ\nehg/dykpKVHJOn/+fL9tXHnwwQdlvw0NDWhubra5L9ZlZWCcRYsW2Q0FqgV7vTZ/Ngm/kJqaGmoR\nAoIzJepPu3SgMl+4GkOLj76O8Of9Vl53bGys09ftlR3JooWnA5rREl6hNT9agtAypGgjiAcffFAV\n/GPnzp2aCf7iDn/9619tApiIxQ5l4Bx7sx3x+owZM1Rldw/A1pn9559/dtqmW7duKCsr8+maRYYM\nZb+DBg3STCSttLQ0p/dA3G9/8Pbbb6v6fvLJJz1qL+6Z9fuqhZxn5EcbQTDG0L17d/Ts2ROAxZa6\nYsUKn4PIWJOQkICYmBi/77JhjKFt27YYPXo0ACA/Px8jRoyQ49TV1aFbt2745JNPZJuoqChwznHD\nDTcAsGQUzsvLQ2JiInQ6HcxmM6qqqpCUlIShQ4cCsDxKlpSUIDk5WdbJyclBZWUlkpKSpCwAZL+M\nMTQ2NoJzLhX9Dz/8gLVr1+KOO+7w+pqrqqowduxYlbw5OTmoqKgIiunCFYwx9O/fXy4yJSYmYt++\nfejevTsAi/3zmWeewc033+zTOGvWrMETTzyByy+/HACwe/duVFVVeWRfbW5uRnZ2tvTxra+vR4cO\nHfDll18GJa4uBZVpJQDg8+bNC8o4gQgqA4BnZWV53Eb5GcvJyfEqqAwA3tTUpConJCS4bPPtt996\nJK87IERBZewBq6AyweKuu+4KWPCXQAEKKkMQBBE6Qr8cR2iedevWIScnR7XKG6jFMH+tYo8ePVrl\n7F5eXi7/N5vNeOutt1BRUQHAktUXsASFVq5Q19bW4vnnnwdgyT117733SrNGOLJ48WIUFBTI+5KZ\nmYk//OEP8rG6ubkZc+bMQWxsLBhj0heZFj59hxRthOGvlOJKRNI+JUIB+RtP/X5jYmJUdjyhqLdv\n366qp8x6OnbsWLs+soWFhaoy51wGFAeAt956S44l/vr7fguf1JqaGr/GOjh69CimT59uc/7AgQNY\nsGABAMti5Ouvv656PSUlJSTJGQORpTaUkKKNMOytyPuDrVu34pprrglI30o8XbSwXp0XszCl8mWM\nydV94NJOIWUdV7zyyiuYM2eOjZz+DvwiVsj9nV1BzNqt74uyfOzYMZs6oSLS4nRE1tUQYZ+1NFDu\naMovbji5vAWaYMVz8JRwTnFuD1K0hFv4Osux195Vn/yS54rEVQyDQM3GmpubA9Kvu1hfl6uyq/YC\n5f0MxHZtwgKZDiIIxpjfZyjii+ipoklJSXEYod8ZOTk5Ps3KhSmBcy770el0qhlS+/btVVGg7DFw\n4EDs37/f5ry1bEqThD/xRzCg2267DV999RWAS1kRrOVfuHAhFi5c6PNY/iYxMTEgAZFChUtFyxiL\nAfAjgOiW+p9zzl9kjHUHsApACoA9AP4f55yWJ0MIbwm04U/EI7enj9uVlZW499578eijjwKwKGoR\noQmw2EnNZrMqeEpWVha6dOmCDz/8EMClIC+iDuccY8eOxbRp09CrVy8AsNmZJGzUSoViMplUXgf7\n9+9HdXW1U/n379+P9PR0rFq1CgCwYsUKLFu2DDk5OVKWtm3bYsCAAR7dF3fYv38/SktL5Y+mwWAA\n51z1Y9HY2KiyxxuNRtUPbVZWFjZs2KCqDwCPPfaYvDeLFi1C586d8fTTTwMA5s+fL9PZhJoTJ05E\n1AzbpaLlnDcxxsZyzusZYzoAWxlj3wB4EsAbnPPPGGNLADwM4N0Ay0u4QEuzgL59++L666/3qM3l\nl1/uss3kyZORlZUFwFbROkK5uNSpUyccPnzYZZuePXtKWf773/8CgMfX4w39+/f3uY927drJBTDg\nki1WmXJ90aJF6NixI5544gkAlp1uWlG09sIdhjNu2Wg55+KnJQYW5cwBjAWwuuX8CgC/8bt0BEEQ\nkYCjLWPKAxaFnAugGsA/AKQBOKZ4PRPAPgdt/bnLTfMcO3bMJhmcSJIojl69eqnKer3erQSDIie9\nOO677z7V2Nb1ExMTbc499NBD3Gw2u309JpPJriydO3dWlfv162dT59VXX/Xo3lm3j46Otjv2N998\n47CNt4dOp3OrXrhwxRVXuHU9jDFNXOM777zD27ZtqwlZvAVOtuB6GrcgEcD3AH5lR9HuddCGP//8\n8/LYvHlzsK47JGRlZXmsaN09rBWt9QfR3X7q6uo8uqannnrKY0Wr0+l4Q0ODR+MsXbrURtFaK4Lb\nbruN19bWyjbt27fnUVFRflO4kaJot2/fbiO79Q9v165dbbLeLl68OCTy2vuxW7hwYUhkcZfNmzer\ndJvfFC23KM7nAMwCUAogquXcKABfO6gftAvXAoMHD/b4Czl06FC7SnPFihUO26xfv95um1tuuUWW\n4+PjVXXq6+vDSlm4g7UCtBdUxpqUlBS7904ZyAUAv+aaa2R57ty5EXfvtAQAPm3atFCL4RPOFK1L\nGy1jrD1jLKnl/7YAbgRwCMBmAJNbqk0FsMZVXwRBEK0Rd/xoOwFYwRiLgsVW+wnnfANj7DCAVYyx\nl2Gx374fQDk1w7Zt29DU1CRdZAwGAxhj0m3p1KlTAIAtW7bINgaDATqdTrpK1dbW4siRI7JNcXEx\nAODxxx8HAOlcvn//ftmPwWCA2WyWblZ5eXkAgOnTp6tcmU6cOCH3rjvaL75582YpS2xsLEaOHKl6\n3dqXNT09PSTJGH1BeQ3WbmLCbUjcW+ErvGXLFtWW2oqKClnHHS8Fwn2OHTuGoqIi1bm8vDz52TUY\nDMjMzFT5KWdmZsp4tWGHo6muvw5E0OPWrl27gmYL9NeRmJgo5TcYDHbr3H///bLOp59+arfOrl27\nQnHLXXLVVVfxvn37ynJRUVHA7mVycnIIrzRyOHTokNfvQWFhYajFdwh8MR0QlxA+hsobqMzCyTnH\n4MGDXdYBLJH7RXnatGk2bUwmk82bpexn/fr1Nm0A4OWXX1bVr6qqkvLr9Xq7spw+fVrW2bNnj91+\ntRpN6eDBg6rZZnp6us01ms1mu+esr9E6C+4111yjqnPx4sWQXGOkIcIuWn/ele/JXXfdZVMH0Eai\nRW8IT6k1hDvbRe3VUW4ssBdxy170InfGUu60slff3jl3ciqFU7Aaa1ndvQ9E6Ii0aF3WRPbVhQCt\nzvzcxVXQltaEVhIktkZCHcTH39CM1gNEkGfOucMZkXi0cTVjWr9+vUezqldffRXZ2dk2561lUc5o\n3SE+Ph5paWmy7OiHYsyYMR71CwA7d+7E8OHDPW7nCSKmqvIeREVF2fxg5Ofno0ePHnb7ENfc0NCg\nyiIhHlcJ9+GcY8CAATh48KBH7W699VZ88803NuetvyOefr61AilaDxAr0s4UZG5uLhYuXChto+Xl\n5Vi8eDGuvfZaqRQaGhowfvx4qZTLy8vxu9/9zunY2dnZiImJwTPPPCPPTZo0yUYWZfAUd6irq8Ou\nXbtk2V6shLVr16pS2XDOUV1dLTPGApaZsMlkkl+El156CatWrQq4oq2rq8Obb74plWVNTQ1SU1Nh\nMBikXHPnzsW//vUvvPzyy3b7EHEArO1/WoobES4wxnDw4EFMmjRJxmyorKxEcnKyrFNXV2eTmfmb\nb77BgAED8JvfWHbyL126FIWFhXjuuecAWH4Mr7zySlU/YYWjVTJ/HYggr4MvvvjCY6f1yspKvzi6\nA+BxcXEu63iaBRcAHz9+vCxnZ2f7Td6XXnrJ5378AeBeFlyj0agqKzcsEO4DgK9evdrjNsoNC5QF\nlyAIgvAIMh14gHg8HTdunCzHx8fjm2++kaum5eXlmD59OkpLSwFA/vUH9fX1cuzz589j0KBBuHDh\ngko2b1bTlY/MnpoenBGMhbUjR47g17/+NTIyMgBYntAeffRR3HPPPap6y5cvx88//wzAYq/917/+\nhbFjx6rqDB06VGWvzs/PD7D0kYvIy+YJq1evxpEjRwAAO3bs8LdIocXRVNdfB8Js+u+MwsJCnpmZ\naeNE/f7778s6Xbp0sXk9JSXF57EXL15s029SUpLNuYqKCo/6BcCHDRsmy3PmzPGb6eDpp5/2uR9X\n2IsaBkAVoez3v/+9zeuMMVU/CQkJNnU2bdoUcPkjDbPZzAHwjz76yKN2f/7zn23u/+OPPx4gKQMD\nyHTgHzp16oRz587ZOFErNwUIY72yTkVFhc9jT5s2zebNq6ystDmXkpLicd/KBQbhTO4PlCv4geLQ\noUMALt1vkQFBObN///33VfdIbBZRUl1dbXMvxdMD4T7ivnuajfntt9+2uf9aTLHjLaRo/YxWs4o6\nI9KdxQki1NA3zA8onavD0eHf10yonHNV2pRAUltb67F/a2Njo3T3AkBbaf2IyWSKqNxegYIWw/xA\ndna2ajPBNddcE0JpPGPgwIHYtGmTR4toQ4cOlTERnHHttdf6IppdlLm/BMOGDZP/i9m5q+shH1nv\nSE9PR0lJict6ffr0CYI04QMpWh8RAUsE9fX1HtunQskvv/yC5uZmVXhAV6YEoWSFPddsNqO+vl5l\nk62pqQmYc/mmTZtkckZALa94L5TbZ2NiYvDEE0/gjTfesNuGcJ+SkhJkZGTgzJkzACyfgaamJlW8\njEC+9+EKKVofUaZ4BuzPuLRMdHS0Ko21u+j1enndOp1OtUsMQEC/aDqdzqUt3PqaEhISwtJ+rkXS\n0tJU7711KnpSsrbQzzpBEESAIUVLOIVzjttvvx2MMXkAQK9evUIiCwCMHTtWJY/yECYFa3m9cXsL\nZ1auXGlzb5KTkx3eN3HExMSoytHR0Tb3MjMzM8RXF34wT1dwPR7A4hge0DGIwGE2m6HT6TBgwABp\nHjh//jw2bNgQkgWPjz76CEuWLJFf+oKCAvTu3Rt1dXUALKl8iouLZdCSpqYm6HQ6/Pe//21VpgNx\nf8R9KC4uxoABA1BWVgbA4inT3NyMpKQkuYvr5MmTGDFihNwdWFlZia5du6K6uhqA5YfuwoULyMnJ\nQXp6erAvSfO0BI2yuwpLipZwCWMMW7duDQtvii1btiArK6vVhzhMSEjwyhWO8B5nipZMBwRBEAGG\nvA4It3jnnXewefNmAJbtldOnT7dZbdYCynxUWkhX884776C4uFjG6W3bti3q6+ulbFVVVUhJSZFu\naY2NjTJ+q3ATbGxsxJYtW+T9bmxsxNChQ3HZZZcBsFxzamqqzKIM2A+Q/d577+H8+fPSIyMjIwNT\np07VxH2KdMh0QLgkMTERNTU1qnOxsbEy44SW+P7773HjjTfCbDaHXIEcPHhQBr8OBj///DNGjx4N\n4NJ7Jr57x44ds5syfubMmZg/f37QZIxkyHRA+IR1wBVAu7nR3E0lFAyUi0jKezd06FBXEe9QXl6u\nKvfv31+WhcK010YgFgcF4ofSuo0/gwgRjiFFS3hFuKZ91gLeeD8odxu68yPi7hbj1uSJEUpI0RIR\nhT0zlfU5b+v4QxZ/9OWoX2fjkfkutNC0hPCY3r17e7VtNxi4k0DTXT766CPcd999XrcX8RbMZrMq\ntsLOnTtV8vXt21fG1RUZOZSZHgBg9+7dDq9JKFFlFDnh3mXdxro8dOhQj66J8A5StITHHD16NNQi\nOGTkyJE4cOAACgsL5bmGhgZV0ByxiUGYP0wmE8xms2qlfvz48Vi0aJFPilY87lsHsLn11lsxc+ZM\nAMCf/vQnHD58WL7WoUMHbN68Gdu3b5fnZs+ejZiYGKxbtw4AMGvWLOzbt0++LpSn0gukqKgIAPDd\nd98BsKT8+ctf/iLLgEVBjx8/3uvrI9yHFC3hFVq20V511VW46qqrfO4nUAtqAwYMwE033QTAspXZ\nOjdZVlaWKjrZ7NmzodPpZJvMzEyVonWGaJOamqoqE8GFbLQEQRABhvxoCZfcc889+PTTT+WjtfWj\nNmMM2dkTSjNoAAAfgklEQVTZePHFF0Mppl9hjCEqKkquyhsMBgwaNEjaUg0GA7p27Yr8/HxZZ/v2\n7Rg9erTNfdLr9WCMySwP0dHR0q6qzPygHNub74zS9GGvX4AWxQIJxTogfMLdR2gtbBLwFx9//DH+\n+Mc/qvxRe/fubWOf3rhxI2688UYAQM+ePXHq1CmXfXurSP0BfRcDB21YIHxm69atKkd3vV4vy2KB\nJVKULADcd999MiiLOI4cOWLj8K/MrnH+/HkAlzYFPP3006qyaPPUU0/J8i233GK3Tn19vao8bNgw\nWb7tttvstlm3bp2qrKyza9eugN0rwjWkaAmCIAKMdpeOiZBx4MAB1ZZNANi7d69qxhpJs1d3OXjw\noGpbLaDewir8WLdt2wYAOHfunKpsD9GPqCPK//znP1W7wWpqamQdEVPWmgMHDtj434o2wrZMhAhn\ne65b3vRMAD8AOARgP4C/tJxPAfAdgKMAvgWQ5KA9J8KH119/nQNweTz77LOyzbp16zgAbjabQyh5\nYFmyZInd+7B48WJZ5+6773br3u3YsUO2+fTTT91qY+8QmM1mrtPp3GpjNBqDet9aEy3viV096o7p\nwAjgSc55PwCjATzGGOsDIBvAJs557xZFPNuNvgiNIxz9uZX9T2mjNZlMeOWVV2QbsUsskme5xcXF\nAGzvS1VVlazzySefqF7funWrTRuTyYQRI0bINpMnT4bJZLKpY11WnlPee8By341Go6qNyEhs/YWn\n2AahwaWi5ZwXc87zWv6vBXAYllnuRAArWqqtAPDrQAlJBA93ttZa73SKZAUrsBff1RX27ou9NOfW\n5+yVlee8kYUILR4thjHGugMYDGA7gI6c8xLAoowBXOZv4QiC8A4txgpuzbitaBlj7QB8DuCJlpkt\nOeRFIOILap35VDwq20Mk93NWJ9wRmV+t78uzzz7rMKNsoHKsZWRk2MgSExOD06dPyzo069UWbnkd\nMMb0sCjZDznna1pOlzDGOnLOSxhj6QBKHbV/4YUX5P/W+7gJbZGTkwMAePrpp+Xj6tChQzFmzBiH\nbZS+pJHKgw8+iKNHj8JoNEo7Z1JSkspGK1LQCKqrq+VmBn9y33334dChQ2huboZOpwPnHK+++ipy\nc3PRvXt3AEB8fLxmg7NHCjk5OfL74gq3doYxxj4AcIFz/qTi3KsAKjjnrzLGngGQwjnPttOWR/JM\nJ9IYPXo0tm/f7tHsdOPGjRg/fnxEz2i1DmMM69atw4QJEwBQFtxQ4GxnmMsZLWNsDID7AexnjOXC\nYjJ4FsCrAD5ljP0ewFkAk/0nMkEQROTgUtFyzrcCcOQT4v/nIsIuBw8exL333ivtc4AlDUlNTY1M\nW9K+fXvs3r0b3bp1A2DZJltcXIzU1FRpBkhISMC5c+fkI25SUhLy8vLQo0cPAJcc28eNGyc9EFJT\nU3H48GF07NhR9vHmm2+ic+fOAC7ZaInQ8pe//AWLFy8GANTW1oZYGkIJBZUJEy6//HKbuKXWxMfH\n2yTls0an03msGNu1a2f3iyve13Xr1uHOO++MqKAy4cbAgQOxf/9+1bmFCxeqUpATgcUn0wGhDfLz\n8xEXF+dSkQYDa2UqtoqSkg0d7gYCJ0IDBZUhvELLGRYIQmuQog0j6uvr5f+cc1UZQFBnu0pzUGtw\n7yIIX6BpSZjQp08fHDlyxOXj+datW/3qKG82m+3ujzeZTDaycM7JfEAQdqAZbZhw6NAh1NfXy6O2\nthZlZWWqcwDw008/+XVc4a2wadMm1TgAUFBQgIKCAsyaNQsA2WgJwhE0ow0TGGOqlNmAxcsgWLRt\n21Y1vl6vl65m1jFQCYJQQzNagiCIAEMz2jBh6dKleOSRR1zWu3jxYkDGt451YDQayUZLEG5CijZM\nEEpWBI0+ceIEKioq0LZtW0RFRcFsNqOhoQGJiYl+HVd4FOh0OukvK7wbhOmiubkZEyZMICVLEA4g\nRRtGxMXFYceOHQCAr776ChMmTFAtTjHG/B5BXyyG/fjjj9KbgTEGvV5P2zwJwk3IRksQBBFgaEYb\nRiiDORsMBrt1RPZaR/z000/Yvn27LNfV1SE2NlbOhKuqqpCWliazu4pxPvroI5kDizHmVsobJY2N\njfjf//1flecCYwyNjY2IiYkBACQnJ+Phhx+2m+6FIMIZUrRhhHI3llBG1gtQKSkpDttfuHAB1113\nnVdjv/3226ryP/7xD4/az5gxA++++67LeitXrsQPP/zgUd8EoXVI0YYR1dXV8n8xA7VegBIzUXuI\nxStPo6kxxnzecXbw4EGXYzPGKNcVEZHQM1oYIeLORjLCs4EgIglStGGKo5mhckYbyDjA1n27Kmsh\nvCNBhApStGHCddddh/r6epn19I477gBgq9DmzJkj60RFRWHy5EsZhoSys4765QzhR6tcfMvOzkZU\nVJQqC6urcm5ursuxkpKS0L59e7dlI4hwgTIshAnV1dXYuHGj6tF68ODBqtQ2ZWVl2LlzpyzPnDkT\nx48fl8q4rq4O7dq18zgTAmMMP/74I6699lpZ1uv1+PLLL2WdpqYmREdHy35NJhPMZrPKU2Ls2LFO\nzR+MMVx55ZU4duyY27IRhFZwlmGBFG0EM3LkSOzcuVMq2oaGBsTFxfm8GCYUrSMXM29hjCErKwub\nN2/2a78EEQycKVoyHRAEQQQYUrQRzNmzZwFYkiu2a9fO7mP7Bx98AMaYrJOWloa4uDjodDp5DrAE\nlRH2VuBSUBlxdO7cWdbX6XRITk5GU1OTQ9k453j00UdlG2ESEeMRRCRBpoMIJjc3FxMnTsS5c+fk\nuUGDBiEvL0+WAxkI5rXXXpNBwa2prKy0u7kiPz9fpj4niHCCTAetlKuvvhpnz54F51weSiUrGD9+\nvKqO9QEA77zzjqoMQJa/++47VVlpE3ZEQkKCTRvOOSlZIiIhRUsQBBFgQr4Ft7S0VPVo29TUhGHD\nhnkctITwntOnT2P37t0ALLbX/Px8mEwmAJf8aD/88EO7s2Elu3btUpkiaJMCQVgIqY3WaDSq/CwF\nU6dOxfLlywMqF2GhR48eOH36tMftdDqd3IVWUFCALl262NSZOHGiytdWycWLF5GamoqamhpaACMi\nAs3aaPV6y4T68OHDKtve119/HUqxWhWnTp1S2Ug7duwIwNbeumTJElVZOXPNzMyE0Wi0aVNZWelw\nXJEJgpQs0RogGy2hwlGGBlfeCfba+TvbA0GEK5pUtI2NjaEWodXirinJWThGT/siiEgnpIpWLLj0\n7dtX5QwfjAj7W7duVTncOzrefPPNgMuiJcTGAeU9UJ5X4uy+AcDmzZsdvi7MRgTRGgjpp118IW+6\n6SYMGDAAgMW/cvbs2QEfWyjQJ598EoBlFv32229j3LhxGDRoEABg/vz5mDlzJmbMmBFwebTC2LFj\ncerUKVx99dWIioqC0WhE3759MXXqVJu6Q4cOBQAUFRWhsLBQ3kuTyYTq6mokJyfL97isrAydOnWS\nM+G6ujoMGTIkSFdFECHGmaO6Pw7LEI4BwL/66iundQLB9OnTubVsAPhnn32mKicnJwdbtJCSnZ1t\nc1+sAcD1er0sf/fddy7bEESk0/IdsKsHNWmjJQiCiCRC6kdrMpmg1+sxYsQIpKenAwBKSkqQmZkp\nQ/CdP38e/fv3x8WLFwFYHvH1er3Kxnfu3Dn06dNHOsiXl5ejR48eMseWeJRNS0uTDvg//fQTLl68\niFtvvRVt2rSB2WzG+vXrkZSUJDO1FhcXo0OHDigpKQnAnQk8VVVVePLJJ3HhwgUAFt/Vrl27yky5\nZrMZFy9eRIcOHaS9fNu2bSgrK3O6kBUXFweDwYDbbrsNgOU927FjB8aNGyfzkvXu3Rtz586ljSdE\nq8GZH607j/7vAygBsE9xLgXAdwCOAvgWQJKT9g6n2s3NzRyAyyM+Pt6tesojJibG4zb2jl69evn5\nASN4XHnllTbX06ZNG5fX/Jvf/MZpv8uWLXPr3j377LNBulKCCD3w0XSwDMDNVueyAWzinPcG8AMA\nr1avxK4w5YYFe0dtba3HtuHGxkanr0+fPh2ArWP+3r17VeXS0lJvLk0T2Avc0tzc7PLeffHFF077\nfeihh1T1HQWViYmJCewFEkSY4FLRcs7/C+Ci1emJAFa0/L8CwK/9LBfhB0LtQhXIEIwEEU54uxjW\ngXNeAgCc82IAl/lPJFuchdvzFncDnjjbRhqOWN9Lk8lkE6Dbuk5DQ4PKZss5V9UR9l2CIOwT0imP\n8Kl0thPs8OHD6Nevn835DRs24NZbb/V6bOG3az3ruuyyS78ZHTt2VJXDjQkTJmDnzp1Bm1lajyNy\njBFEa8dbRVvCGOvIOS9hjKUDcGrIfOGFF+T/WVlZyMrKsgze8mjrbGV63759ANQzy+TkZBw5csQn\nRTtz5kw88sgjqtlYU1MTOnToIMslJSVO07FonTlz5uDhhx+WngAAUFtbi/j4eKkUDQYDzGazyp5a\nW1urCvZSV1eHuLg4VYbbxsZG2e+mTZtw1113qd6jhoYG6UlCEJFITk4OcnJy3KrrrqJlLYdgLYCH\nALwKYCqANc4aKxWtPdzZcpuUlKQq+8NtKNIjR4lcXkqs76M9rOu4aiMicSnruTMOQYQzykkjALz4\n4osO67rUcIyxjwH8DKAXY+wsY+x3AOYBuIkxdhTAjS3liET43RIEQXiNp25Tnh5w4kdrNpvd9me1\n9ldzdcTGxrr0H3300UdV/fbr18/l2Nb88Y9/tKn/xhtvyNebmpr4qFGjbOocP37cab9a5oMPPvD4\nPhFEpAMnfrSayLCQkpKCbt26AbDYX/Py8tC9e3fAIjmefvpp3HfffbLdwoUL8dxzz8lEfnFxccjP\nz0fHjh2lHTElJQWnTp1CcnIyACAvLw9RUVEYOHAgAODAgQMyWLVCVqSlpclsAWlpaVi6dKmUxcH1\noVOnTjJg9v79+2EymWS/JSUlSE9Px6BBg8AYg9FoxIEDBzBp0iSsXr3ao3upFcQ9Hjx4MABLhoVp\n06Y5fXQiiEjHp51hvh7QSFAZALxz586y7CiozN69ez3ud/78+bI8ePBgVb+VlZV2x5kwYYJH42gJ\nQB1UhiAI33eGEQRBED4QUj9a3vJ4/eWXX+L48eMALK5EsbGxMg1KXV0dsrKy/OKTWVNTgwULFgCw\nBJUBLHFpW6b8AFw732/YsEHKam+h7MSJEwAgxxEuT6+99prKU0KZ+ddfnDlzRpUMsaamBvfff780\nsdjj4sWL+OCDD1RtkpOT5X0wGo1gjNmkpbGXVJMgCPuE1Ebb2NgoI2W5wlc53XHa1+v1OHfunEP/\nz7Vr12LixIk25/Pz86UyS0pKklHDnPHxxx/j3nvvdVnPE+xdY+fOnXH+/HmP2rhDVFQU7QgjCAWa\nzYIr0qM4CyqzatUqv413++23Ow0qYzAYnDrZi51s1jIqZ4xig4N4Tcxordv4W8kK/v73v8sxRowY\ngcLCQpdtrrvuOk/t7uT2RhAe0KpstL5Gk3Jn9heMfGf+Ht9ePjCCIPyH5hStctYkyv7sW9Dc3Oy3\nfpV4kx3W+pr9RW1trcux/YX1DNfeOIE2UxGEVolIG21FRQUuu+wytx5vPen3888/x+TJk2E2m1UZ\ne50plYMHD6J///4u+x4yZAh2797ttixHjhxB37593a5vTzbAYsMtKipSvd6lSxecPXvWYXu9Xu8X\n+6xOp0NVVZUqFgNBhCvObLQh9ToQq/CzZ8/G8OHDAQCTJk0CY0zlzC9ecxcRKGX16tVSIU6aNAnD\nhw9XZdi9/vrrPepXKG6lCYFzjm7duuGee+4BALzxxhsqJSTiKShlaWxsRHR0tHzMX7p0KTZs2OCR\nLEePHgUAGaSbc47f/va3mDx5srT/PvXUUzh58qSsU19fjwceeEDVz65du7BlyxZpPnj33Xfx7bff\nOh27tLQUr7zyigwKdPLkSaxevVp1jSaTCSaTSb7HJpMJRqNRmm+MRiPuvvtut39oCSKs8WQRxJsD\nHm5YAMBbZsFeU1paaneTwKRJk3zq94svvrDb78SJE2W5bdu2qjpnzpxxuT31ySef9HgL6/r16+3K\nMm/ePFkeMWKEqk59fb3LcdzJgmuNN1lwjUYjbdslIgrQhgWCIIjQEVRFW1RUhOuvvx6pqalITU2V\nTvC33367PAdYZtmizBjDjBkzPBqHt9ggGWOIioqSj+inT5/2Sf6qqipVv+Ixec2aNVJekXkgOTkZ\nqampqgDjos7o0aNVNtDy8nKPZRFjR0dHq+5ddnY2GGNgjGHnzp2qNiKrhKifmJgIxhi6du0qz82b\n53kgNqVLmyPy8/MxfPhwOY4wOyjvy4gRI3Dq1CmPxycIzeNoquuvA4rHw9/+9rc2EZ/0er2q3K5d\nOx4dHe1TZKiSkhK70aWGDBni2bOAFbfffrvb0cZcHcOGDZP9zpo1y+NrbG5ulmYKV4cgPz/frfoz\nZ870SJavvvrKpfw9e/Z0a+zevXt7NDZBaAVoxXSQlpYGwHaTgLJcU1ODpqYmWfZmw4KY7XG1wnca\nhcsdxLZT637nz58vy2JxR5TPnDljt41yY4Q3zv9t2rRBfX29Tb+9evVy6C4mgnE7+jCIY/78+R7L\n4goRgFyMYW/zBwB06tTJo7EJIhwgGy1BEESACap7l5i17N+/X55LTU1FRkaGwzYGg8GmTX19PeLi\n4mS5qakJffr0ka5U9sZRnnfE2bNnUVFRIW3H1vm03MmIK+yVwj2tpKQEgCX3maOdZSI2gpCXc442\nbdp45SdbU1NjE+dWlIWNmXPu14SN7mzSsEa8F87uC0FEDK4eI309oLDdCTcg6+PEiRMO7R47d+50\ny7antL+WlZXZrXP11Vc7HIdbhHXrMBqNqjbKjAqJiYlu9fHJJ5/INitXrrRb5/Tp007l9Vb+2tpa\nj/p1xYYNGzgAbjabHda5+eabVXZcEafX+li+fLlfZSOIYAGt2GhvuukmmdWAX1LETrfDDh8+3EZo\n6z769euHPXv2yDbt27e3p/CdRrES7N271+FYs2bNAgCbkIHKGZ2YgYs29oLKCGd9wZQpU+zKW1ZW\n5lJea1588UWn98poNPp9J5bSg8ARxcXFqnJSUpLd93Xq1Kl+lY0gtEDQbbTWSgrwPFSfvT7cQSgE\nb8dyFLDF09is3srvDtaBc6zHCuTYzkhISHBZJ1SyEUSgiYjFMGEXdYWYKQYSitFKEIQ1IQ0q0/K6\nyz5GjRqFbdu2yfKQIUOQm5vrtE3Pnj1x9OhRp4+1HTp0kItVJpPJqxmvu3hyn92VpU2bNtJUIVi+\nfHnQH7+/++473HzzzS7rJSYmygU5gog0NBtUBgBWrFiBTZs2SR9PvV6P4uJitG/fHoAlKPj333+v\napObm4uhQ4di9OjRAICVK1eivLwcjz32GBhjqKurw7Jly2zGioqKwlVXXSX7LS0tla/pdDps3rwZ\nn3/+uVTKixYtAgC5u6uoqAgXLlyQ4xgMBrz77rsYNGgQrr32WgAWhRoTEyPtzjU1NRg1apRH90Sn\n02HLli349NNPpSwVFRVIS0uTCruiogIZGRlyJ5rIKPzggw96NJY/uOmmm7Bs2TIZfcxoNMJgMKgC\nxpSWlmLOnDlBl40gNIGjVTJ/HfBwx5M1q1atstl1BIAvWrRIlvv166eq4yiojDIL7oABA1zuZgLA\nk5OTZdlRUBllFlyCIFon0IrXAUEQRGsk5KYDd5kwYYLqUVSZPeDYsWOqurzl8frmm29GYmKiPF9c\nXIzJkycDuJStVsmCBQvw5ZdfSrMFYNmkIMYVC13WstTU1Hh9XQRBRD4hXwxzRVVVFZKTk1XnEhIS\nkJubi8svvxwAMG7cOOzZswcXL14EYLHhDhkyxK3+lbJ5s0MpPj4eu3fvRu/evT1uSxBE5KDZLLju\nYM+xvbq6WipZwDJTVW6PFdkCuNpWjE6dOsnyY489Znc85YYFgSj/+te/tum3traWlCxBEE7RvKL1\nJ8oZK+2vJwgiWESEorUO9uLIVKHcKusoNGGgTSkEQbQ+wmYxzBk9e/ZUKVsR08B61lpaWmpzzro8\nePBgm/5dtVm/fj1uv/12zwUnCKJVEBEz2oqKCtTX18uy8AgoKSlBaWmp3JiQmJgoy+fPn8eOHTtw\n6NAheQDAe++9p2qTkJAgy++99x4AyLKoYx2OkSAIQklEzGitETPODh06qM63a9cOl112mSyLqP9K\nUlJSVHV0Op0sC7cv5euAbSAXgiAIJRExow2kXZVstgRB+EpEzGgLCgoAuLalFhYWqs499thjMp6B\nWChTmiAAix+vq379Hd+VIIjIwqcNC4yxWwC8CcvM+H3O+at26vi0YcEdoqOjYTAY5CN8U1MT9Hq9\n3Mklxu/bt69UkocPH1b5y4qIWR9++CEeeOABITsAoF+/fgCAkydPoqmpSZYbGhqQkJCAPXv2UCxV\ngmjlBCR6F2MsCsAiAOMAFAL4hTG2hnN+xNs+veXKK6/EoUOH0NjY6Habxx9/XM5mgUtBp8VmBwFj\nDAcPHgQA/Oc//8GkSZNkmSAIwh18sdGOAHCcc36Gc24AsArARP+IRRAEETn4YqPNAHBOUS6ARfkG\nHXu7vGpra2VWXHtcuHBBVRYmhGeeeQbz5s1TnV+yZAkAYOfOnf4QlyCIVoYvitaeLcKuMfaFF16Q\n/2dlZSErK8uHYV0jAtE4sw137dpVlQOsrq4OAJCfn29Td9q0afJ/ZWQvgiBaLzk5OcjJyXGrri+K\ntgBAV0U5ExZbrQ1KRRsIhJIUOMuqK6ivr1dtwxWz39dffx3/8z//A8AyU2aMOdyuSxBE68V60vji\niy86rOuLjfYXAFcwxroxxqIBTAGw1of+vCYuLi4UwxIEQbiF1zNazrmJMTYdwHe45N512G+SBRh3\nZr0AbVggCMJ3fNoZxjn/hnPem3N+Jed8nusWgSEjIwMdO3aUZWFKcObuJYKJC/OAWFCbNWuWqkz+\nsQRB+IrmMyy4Q7t27VBXVydnn2VlZejQoYPL2ejGjRtRUVEBwLIz7IEHHsDcuXNxxRVXAACmTJmC\nlJQUWYcgCMIRzjYsRISiveqqq3Do0CGPFa01jDHs3bsXAwcOlOXk5GSZIocgCMIRYZ3KhiAIItyJ\niKAyCQkJqrKwzTY1NXkcwnDQoEEqe6919gaCIAhPiYgZ7ZEj6vAKer3l9yM6OtqjfkaNGgXAEjC8\npKQEiYmJ2Lhxo3+EJAii1RIRM9qMjAxUVVXJslC0niZg3LZtm1/lIgiCACJkRksQBKFlImJGKzh6\n9CgAoLy8PMSSEARBXCIiZrR/+MMfAAB9+vRBnz59MGbMGADONywQBEEEi4hQtDNnzoTBYJAZEzjn\n2Lx5s00Qby3jbhQgrUDyBpZwkjecZAVCI29EKFrg0gKYgN78wELyBpZwkjecZAVI0RIEQUQkpGgJ\ngiACTFBiHQR0AIIgCI0QsqAyBEEQrR0yHRAEQQQYUrQEQRABJiIVLWPsFsbYEcbYMcbYM6GWxxrG\n2PuMsRLG2D7FuRTG2HeMsaOMsW8ZY0mhlFHAGMtkjP3AGDvEGNvPGPtLy3mtyhvDGNvBGMttkff5\nlvPdGWPbW+RdyRjT1K5IxlgUY2wPY2xtS1mz8jLGTjPG9rbc450t57T6eUhijH3GGDvMGDvIGBsZ\nClkjTtEyxqIALAJwM4CrANzLGOsTWqlsWAaLfEqyAWzinPcG8AOA2UGXyj5GAE9yzvsBGA3gsZb7\nqUl5OedNAMZyzq8GMBjArYyxkQBeBfBGi7yVAB4OoZj2eALAIUVZy/KaAWRxzq/mnI9oOafJzwOA\nBQA2cM77AhgE4AhCIatyN1UkHABGAfhaUc4G8Eyo5bIjZzcA+xTlIwA6tvyfDuBIqGV0IPeXAG4M\nB3kBxAHYBWAEgFIAUYrPyDehlk8hZyaAjQCyAKxtOVemYXlPAUizOqe5zwOABAAn7ZwPuqwRN6MF\nkAHgnKJc0HJO63TgnJcAAOe8GMBlIZbHBsZYd1hmidth+aBqUt6Wx/BcAMWwKLCTACo55+aWKgUA\nOodKPjv8H4CnAHAAYIylAbioYXk5gG8ZY78wxv7Qck6Ln4eeAC4wxpa1mGXeY4zFIQSyRqKitefH\nRj5sPsIYawfgcwBPcM5roeF7yjk3c4vpIBOW2Wxfe9WCK5V9GGO3AyjhnOfh0meXwfZzrAl5W7iG\ncz4MwG2wmJKuhbbkE+gBDAGwmHM+BEAdLE+4QZc1EhVtAYCuinImgMIQyeIJJYyxjgDAGEuH5VFX\nE7QsxHwO4EPO+ZqW05qVV8A5rwawBZZH7+QW+z2grc/EGAB3MsbyAawEcAOANwEkaVReMQsE57wM\nFlPSCGjz81AA4BznfFdLeTUsijfoskaiov0FwBWMsW6MsWgAUwCsDbFM9rCetawF8FDL/1MBrLFu\nEEL+BeAQ53yB4pwm5WWMtReryIyxtrDYkw8B2Axgcks1zcjLOX+Wc96Vc94Tls/qD5zzB6BReRlj\ncS1PN2CMxQMYD2A/NPh5aDEPnGOM9Wo5NQ7AQYRC1lAbrANkBL8FwFEAxwFkh1oeO/J9DMsMpQnA\nWQC/A5ACYFOL3BsBJIdazhZZxwAwAcgDkAtgT8v9TdWovANaZMwDsA/AX1vO9wCwA8AxAJ8AaBNq\nWe3Ifj0uLYZpUt4WucRnYb/4fmn48zAIlslXHoAvACSFQlbagksQBBFgItF0QBAEoSlI0RIEQQQY\nUrQEQRABhhQtQRBEgCFFSxAEEWBI0RIEQQQYUrQEQRABhhQtQRBEgPn/Hr9Pu8XImnAAAAAASUVO\nRK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "w_tour_start = w #[:250]\n", - "print(trace_tour(w_tour_start)[-1])\n", - "plot_trace(trace_tour(w_tour_start))" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n", - "RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF\n", - "Step(x=40, y=36, dir=)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "w_tour = w_tour_start\n", - "w_trace = trace_tour(w_tour)\n", - "mks = mistake_positions(w_trace)\n", - "while len(mks) > 1:\n", - "# print(len(mks))\n", - " w_tour = trim_loop(w_tour)\n", - " w_trace = trace_tour(w_tour)\n", - " mks = mistake_positions(w_trace)\n", - "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n", - "plot_trace(trace_tour(w_tour))" - ] - }, - { - "cell_type": "code", - "execution_count": 76, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def trim_all_loops(tour, mistake_reduction_attempt_limit=10):\n", - " trace = trace_tour(tour)\n", - " mistake_limit = 1\n", - " if trace[-1].x == 0 and trace[-1].y == 0:\n", - " mistake_limit = 0\n", - " mistakes = mistake_positions(trace)\n", - " \n", - " old_mistake_count = len(mistakes)\n", - " mistake_reduction_tries = 0\n", - " \n", - " while len(mistakes) > mistake_limit and mistake_reduction_tries < mistake_reduction_attempt_limit:\n", - " tour = trim_loop(tour)\n", - " trace = trace_tour(tour)\n", - " mistakes = mistake_positions(trace)\n", - " if len(mistakes) < old_mistake_count:\n", - " old_mistake_count = len(mistakes)\n", - " mistake_reduction_tries = 0\n", - " else:\n", - " mistake_reduction_tries += 1\n", - " if mistake_reduction_tries >= mistake_reduction_attempt_limit:\n", - " return ''\n", - " else:\n", - " return tour" - ] - }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'RFFRRFFFRFLRFRFLLRFLLRLRRLFRLRRFFLLRLLRRFRFLRLFFLFLRRLRRLRLFLLRRFFLRLLFFFFFRRFFLFRLFFRLLRRFLFFFLRFLRRLRFLFLFFRLLFFRRFFLRLFRFFRLFFLRRFLRFLRRLFRRLFFFFRLFLFFLRFFLFRFLRRFFFFFLFRLRRFRLLRLLFRFLFFFRLFRFLFLRLRFFFFFLFFRFFFFLRFLFRFLRLRLFFLRRFFFRLLFRLFLRRFLRLLRLFFRFLRRLFLLRFLFFRFLFRLRFFFFFLRLLFRFLLRRFLRRFLRLRFLRRLFFFRFLRRLF'" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w_trimmed = trim_all_loops(w)\n", - "w_trimmed" - ] - }, - { - "cell_type": "code", - "execution_count": 78, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(trim_all_loops(w)))" - ] - }, - { - "cell_type": "code", - "execution_count": 79, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def reverse_tour(tour):\n", - " def swap(tour_step):\n", - " if tour_step == 'R':\n", - " return 'L'\n", - " elif tour_step == 'L':\n", - " return 'R'\n", - " else:\n", - " return tour_step\n", - " \n", - " return ''.join(swap(s) for s in reversed(tour))" - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(w_trimmed))" - ] - }, - { - "cell_type": "code", - "execution_count": 81, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nSS/UKxgF+/bt45JLLuGbb74Je0+yfjalfdQr6BCDBg1i3759ISPNJ02alGj1lASihuUQmkonvVHD\ncohevXppdvo0Rg3LIWpra3WKRxqjhqUoDqCG5RDHjh1LtApKAlHDcoiWUelKeqGG5RDav0pvNPLC\nIawJievWrQOgsLCQkSNHhrx37969HDp0CPhuNVsrWfegQYPo109X50421LAcoqysjLVr1/K9733P\nPnfo0CH69OkTdF9FRQVDhgxpsyyN3kg+tCnoENYESGsDOH78eKv7rPSm1n3WCrfGGJYsWRJXnZXY\noYblMnSxmNQg2oyOz/gzNm4Skb+ISEHANVdndFy9enWr9f1OnjzpiCyrxrKWkw7EqrFCTZoMdX8k\nLFq0KOizWUuuhdry8vKCjvfv39++gBiwZcuWVmstHjlyJC6y40G0fawVwEPGGK+IzAVmA7NFZCTf\nZXTsD6wUkWFuCmN/6KGHAJg2bRrgWy/w22+/JS8vL+ay2sq4aK16G6qmClx2uiPMnDkT8H22U6dO\nUVRUZL806urqKCwsxOPxUFdXR9++fTlx4gTGGJYuXcr8+fMdW9otkD/+8Y80NTUxbdo0vF4vy5Yt\n4+233+bWW291XHY8iMqwjDErAw4/Af6bf/9f8Gd0BPaKiJXRcX008mKJ5X3705/+BPgMy2naaubF\n0rB69+5NVVWV/dkiZenSpZ2S1xny8/OB777/ZcuWxU12PIilV3AGYP1n+gHrAq65LqNjZWVlq3Nz\n586loKCg1Sq28F02kMzMTE6cOGFnBWlqarJrndLSUm688cawMjvaf7KaiU8++STgS6Awe/ZswNe8\nfPHFF6mqqsIYE1T2t99+2yE5gVgOFst5cvDgQYwxFBUVcffdd3e63Ej461//yjfffEN9fT0zZsxg\n+PDhjspzkphkdBSRh4EmY8zSgHta4qqMjueeey719fX2sYgwf/78qMutq6uzm2IWVgs41KBxYB+r\nZQ01ceJEAB555BH7XL9+/bjlllu45ZZbeOWVV8LqYTV1O4o1HHD//ffz29/+Nuja+PHjg4YPosH6\n3BYjR47kzTff5M033wTg97//PYcPH46JrFgR14yOInIrcA3w/YDTrs/oWFFREdRZjsWKSyJCY2Nj\nyPMQet11q7YL1ew766yzgsawRIR9+/YB3zVlY91ttWq7luWLSEx/6C0zqnzxxRf2/sSJE1m7dm3M\nZMWKjmR0jNYrOAn4N+BfjDGBr+O3gKkikiMiQ3BhRseWb8xkIfCHnozlR0JnvaGuIlwSs0g2YBew\nD9jg354PuDYb+ArYDlzVRhkmXvTq1cvga5LaWyxpWXbLbffu3cYYY2bNmtUpPVo+061bN0f1z87O\njvizBW4LFy5sV9acOXPCfu7LL7885v8bJ/DrGPJ3Ha1XcFgb154Gno6m/FhTXV3NHXfcYeecuuGG\nG2Ja/pYtW/jkk0/IysrC4/H4vmB/xsazzjqLoUOHAvD8888DsGTJErxeb8Sd9IMHD1JeXg74atxY\nJ2OorKzknXfescv//ve/a91/9dVXrFmzBvDVKFY+MNPCcTJjxgyefvrpdh0doaJQLJK1NRFEOIuL\n10Yc30yAWbZsWdzkhSMrKysp3sidATB9+vRp977HHnss7Hdw8cUXJ8X3g1M1VjLy2GOP8fzzz1NV\nVcWLL75oe97iSWFhIUePHuXSSy8FoKCggOrqanJzcykqKmLHjh2UlJRgjOG+++7juuuui7uO0VBR\nUcGll15KbW0tQ4YMoaamBmMMjY2NrFq1iq5du7bpLGo5FPL888/z2muvAXDkyBHeeOMNhg0L21hy\nB+EsLl4bcXwzlZWVBfUFcnNz4yY7kFdffTVIj5ycHHs/IyPD0X6g0zzzzDNBuhcVFQUd33fffcYY\nY2bPnh32s/3oRz8ymZmZxhhjmpubW30fo0aNitvnaQvaqLHSKgj3b3/7m/3BJ0yYkLDJiDfeeGPQ\nP+HUqVP2vtU3MyY5o9t//vOfB322I0eOBL5Eqa6uBmhzBaujR48GzUsDOHDggF3Grl27nPwIMSGt\nDCsQN637F9gsSvUMJpE4Jtp74YUaK3QbaWtYp59+uiMBt5Hwwx/+MCiq20oO3nJ/xowZKZfRxIoR\nzMrKCjtWdvbZZwPY3wNgh5ANHDiQM888Mw6aRkfaOS8sjh496tg0kfZ49913Aew13wPjDZuamoJ+\ndAUFBaELSVKs2ujbb7+1m3YtWbJkCU899ZTdHMzNzaVHjx6A7zsLFcHiNtLWsBJJVlYWzc3NDBgw\noP2bU5SWIU0t6du3b5w0cYa0bQpacW9Wc2PMmDFh36CxYObMmbas5ubmtF0eLTB6PlKuuOKKoGah\n9rFczNtvv82IESPsyIjNmzc7NoPVGMOiRYvIysqy5XV0rlSqcNpppwEdcx598MEHgK+mHzRoEB9/\n/LEjusWStG0Kjho1iu3bt9vHTgadWmVv3bo1KTreTmIF2AbOdYuEAwcOJNUycGlrWG3h9XrtsRJr\nbMmqaZqbm23PHfiyivTs2TNhuiYbVVVV7Ny5k5qamrD3eL1evvzyy6ReWEcNi+/eotYYS2lpKXv2\n7Ino2ZycnHbHXaz+REpMh4iC3r17s2LFCkaMGAGEd1A8/vjjPPHEE0HnEjU00lnSto8ViFUbWZ6q\nPXv2kJ2dbUcMBK71F7g/f/78iDrS1pvXkpOuVFZWBkVlHDhwIOR9H374IRAcbldUVBRPVaNGDSsM\ngX2AwCZJMjdP3EYqf5dqWHzXRCsuLrb/2aWlpe0+Zw1ghluzL3CD9sduFB/W8gDWd5ednW3/jxYu\nXBj0vRYUFAQdf/7554lU3UacHLuJSAERk2gdABYvXszrr78O+KIyli1bxuDBg9t8prGxkdmzZ7Nt\n2zbbwWF9lqqqKoYNG8bx48dpbGxk+PDhvPDCC05/jJTg2LFj3HvvvVRWVnLq1ClWrVplewWtl9Sk\nSZOor6+nX79+di6y8vJyrr32Wt5+++246CkiGGNCVrtqWIrrEZEgwwrnMBIRrr76ajtkLB56hTOs\n9O5NK0nDyy+/bMcLtuUEcssy1WpYiqvxeDx0796dX/ziF/a5wHUWA8nPz4+obxwP1LAUV2OtPBwJ\ndXV1rqmx1CuopBRumSiqhqWkFG4ZG1PDUlIKNSxFSWGicl6IyBNAGeAFKoHbjDEV/msLgauBev/5\nTVHqqiituPfee9m9e7cd1VJVVZVgjXxENUAsIvnGmDr//t3ASGPM/xCRa4A7jTE/FJELgAXGmAvD\nlKEDxEqn2L17dyv3+sqVK/nBD34QF/mODRBbRuWnG76aC3wZHf/Df896ESkUkRJjTOtsb4rSSayZ\nBW58MUc9jiUiTwG3AMeAy/2n+wGBWaKtjI5qWEqHMS0SL7Q8diPtOi9E5H0R2RKwfe7/+yMAY8wv\njDEDgT8BVoqJDmV0VJS2yMjICIpgt45HjhwJJGmNZdrJ6BjAUuA/gceIIqNjvFKlKslFeXk5JSUl\nNDc3B8UKBka8O01HUqVG67woNcZ85d+/G5hojJnSwnlxIfBbdV4onSUwut1NtOW8iHYca66/WbgJ\nuAK4B8AY8y6wR0S+Av43MCtKOUqaYoUoWZNK165dS2lpKYWFhYgIU6dOTaR6YdH5WIqrMcaQkZHB\n3r17GTRoUMhmX6J+P07WWIriKKEW4snJycEYw7Zt2xKlVrvotBElKTh69ChdunQJec1aLtzj8dCr\nVy9XuOK1xlJcjdW3Gj16NMXFxQDcdtttgC/lLPgWASouLqakpIQFCxYkRM+WaB9LSSparkQciK55\noSidJFkWPdWmoOJ6SktLw67X2KVLl6C1G+vr6xOsrQ9tCiquR0QoLS2lR48eFBQUsGfPHjsdUI8e\nPaisrCQ3N5cBAwbw4osv2n2xeOil6woqSUsyRl4kR4NVSXveeustevbsicfj4dprr+1wbuZDhw6x\nZs0awOdpnDhxoqOparXGUlyNx+MhLy8vKKvLlVdeyYoVKzpUTksvYs+ePe3xr86ikRdK0pKZmcmp\nU6fsdD4AH330UafKmj9/PsYYJk+e7Pj6g2pYStIRbQK/eLSQ1LCUpMPr9dou9qysrCD3+9q1awH4\n4osvWqVRspwfVuZOJ1HnhZJU1NfX86tf/YqGhgYaGxvJz8+3+19z585lzpw5vPvuu5SXlwPw0EMP\nYYyhS5cu9hST3Nxcx/VUw1KSiry8PB599NGQ1+bOnWvvW8bz9NNPt7ovHk1BNSwlpfj000+ZOXMm\nn332Wdh7qqurAZg5cybNzc0MHDiQxx9/PLaKBCZQTsTmU0FRoufmm282+BYtMoA5//zzQ9733nvv\nBd0HmJ07d3ZYnv+3G/J3reNYStojImzatIlzzz23w88ZHcdSlPihhqWkBdYyaaE2gK5du8ZUnjYF\nlbRARLjjjjuYMmUKXq8XYwyZmZmAz+hGjBjRqTLDNQXVK6ikDcOHD49bwgRtCippQ0NDQ9xkqWEp\naUNOTk7cZKlhKWlDRkb8fu5qWEra0NzcjDEGj8fjeCBuTLyCIvIA8AxQbIw54j8XUapU9Qoq8aDl\nRMczzzyTHTt2RF2mYwPEItIfX0KEfQHnrgbOMMYMA/4V+F/RylGUaAgMNyorK2Pnzp2OyotFU/A3\nwM9bnCsjIFUqUCgiJTGQpShRE48lqKMyLH9Wx/3GmM9bXAqXKlVREs6JEyeCji+88MKwURnFxcX2\nfo8ePVi3bl1EMtodIBaR94HA2kbwRQT/AvifQKiMjx1KlaoZHZV40rNnz6Dj9evXU1RURFFRET16\n9ODrr7+27+nTpw979uyha9eufP3111xzzTXcc8897QsJF/be3gacDVQAXwN7gCZgL9AbX5/qvwfc\nuwMoCVNOh8P1FSUaJk+ebAJ/d4DZtGlTu8/RYioKbUwb6XRIkzFmK9DHOhaRPcA4Y8xREXkLuBN4\nzZ8q9ZiGqYF3AAADgklEQVQxprKzshQlltTW1gLw/vvv2+fWrVtHVVUVxhiam5vJzs62jSRw/MtE\n6sEOZ3Ed3fDVXD0Djn8HfAVsxmdwHZ7ouGrVqnbfIvHALXoY4x5dklmP5557rtVEx0i3JUuW2OXQ\nRo0VswFiY8xQ4x/D8h/fZYwpNcaca4zZ0JkyI81Q7jRu0QPco0sy6zFr1qxOVyDTp0+PSIZGXiiK\nA6hhKYoDuGKiY0IVUJQoMG5N46MoqYg2BRXFAdSwFMUBXGlYInK9iGwVEY+IjGtxbbaI7BKR7SJy\nVRx0mSQiO0TkSxF50Gl5LWQvFpFKEdkScK5IRFaIyE4ReU9ECuOgR38R+VBEtonI5yLy00ToIiK5\nIrJeRDb69XjUf36wiHzi12OpiCR+LZfO+vOd3IAzgWHAhwQMLgNnARvxxTgOxjcALQ7qkeGXMQjI\nBjYBI+L4PVwMjAG2BJybB/ybf/9BYG4c9OgDjPHv5wM7gREJ0iXP/zcT+AS4AHgNuMF//gXgX+P1\nPwq3ubLGMsbsNMbsonUwbxmwzBjTbIzZC+wCzndQlfOBXcaYfcaYJmCZX4e4YIxZCxxtcboM+IN/\n/w/A5DjoUWH8E1WNMXXAdqB/gnQ56d/NxfeCNcDlwF8C9LjOaT3aw5WG1Qbxno7SUt4Bh+VFQm/j\nj7s0xlQAveIpXEQG46tFP8EXWB1XXUQkQ0Q24gsAfx/YjS8W1eu/5QDQ12k92iNhbdE2pqM8bIx5\nO9xjIc45OV4Qb3muRkTygdeBe4wxdYkYg/Qb0FgRKQD+iq970Oq2+GrVmoQZljEm1Dyu9jgABKY6\n7w8cjI1GYeUNjKO8SKgUkRJjTKWI9AGq4iHU7xB4HfijMebNROoCYIw5ISIfARcCPUQkw290bvgf\nJUVTMLDWeAuYKiI5IjIEKAX+y0HZ/w8oFZFBIpIDTPXrEE+E1t/Bbf79W4E3Wz7gEEuAbcaYBYnS\nRUSKLc+jiHTFt9bKNmAVcEO89IiIRHtPwnh+JuPr23wLHAL+T8C12fg8dduBq+KgyyR8XrBdwENx\n/h5exff2PQV8A0wHioCVfp3eB3rEQY9/Ajz4vKIbgQ3+76VnPHUBRvtlbwK24Os2AAwB1gNf4vMQ\nZsfz/xRq05AmRXGAZGgKKkrSoYalKA6ghqUoDqCGpSgOoIalKA6ghqUoDqCGpSgOoIalKA7w/wFK\ngjJMbcJZvAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(reverse_tour(w_trimmed)))" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nkAKBF/H/E7cUOhxnMSgAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "w1 = random_walk()\n", - "w2 = random_walk()\n", - "plot_trace(trace_tour(w1))\n", - "w1bounds = bounds(trace_tour(w1))\n", - "plot_trace(trace_tour(w2), colour='r', xybounds=w1bounds)" - ] - }, - { - "cell_type": "code", - "execution_count": 83, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "w1 = 'FRRFRRFFLFRRRLFFFLRFFFRLRFRRFLFLFFFFLRLFFFFFFLRRFLRLLFLLRFLFLLFFFLRLLFRFFFLFLFFRRLFRFRFFFRLFFFFRFFFRFFLRFRRRRFLLFFFRFFLLFLFLRFLFFLFFFRFLRLFRFLFFLLFFFLFFFFLFFFFFLRFFRRRFFLFRFFRFRRRRLLRFFFRFFRFRRFRLLRLLRFRFFLFLFRFRRLFLFLFLFFFFFLLLRRRFRFFRLLRRLRFLFLLLFFFLLFLLFLRFRLRLFFFRLLFLFRFRFRRLFRLFFLFFFFLFFFFRRRLFFFRLLLLFFRFRLRFFFFRFFRFFLLLFFFLRFRLFFFRFFFFRLLFFLRRFFLFRFFFFFFFFRLRLFFLFFLLFFLRFLRFFFFFFFFFLFFFLFRRRRFRFLLLRRFFRFRLFRFLFFFLLRFLLFLFRFLFFRFFFFFRLFRLLRRFFLRRFFFFFFRRFFFFFFRFFLRFFFLFLRRFLLLFFRFLFFFFFLFLLLRFRLFFFLFRFLRLLFRFRFFLFLFLRLFLFFFFFFFFFRFRLFRRRLFLRFLFFFFLLLLFFLFFFFFFFLLFLLLRRRLFLLLRLLFFFFFLFFFFRFFFLLRLRRLFFRFRLLRRFFFFFLFRFFRFLLFFFLRRRFFLLRLLFFFLLRFLFFLFRFFFRLRFFLRFLFFRFFRFFLFRRFFRFRLFLFRRRFRFFRFFFFFRFFFLRRFRFFRRFFFRFRFLFRLRLFLRLFFRFFFFFRRFRFLFFRLFRRFLFFLFRFLFLLLFLRFLLFLFRRRRFFRFFRFFFRLFFFLFRFRLRRFFFLRFRFFLFRRRFFRFFFFRFLRFFRFRFRRFFLFLFLRLFLFLFLLFLFFRFFFFFFFLFRFFLRLFRRLFFRRRFFRFRFRRLRLFFRFFRRFFFRFRFRLLRLFFLLLRFFRRFRFRFRFLLFFFFFLFFLFFFLLFFFFFLRFLFFFFLFRRFFFLFLFLLFFLFFFFFFFRFFLLFFLLLLFFRFFLL\n", - "w2 = 'FLFFFRLRLFFFLRLRRFFFFFFLFFFFLRFFFFRLFLFFLLRFLRLLFLFRLRRFFLFFRRLLRFRLRRLRRLRFFFFFRLFLRLFFFFLFFFFFRRLFFLFRFRFLFFRRLFFLRLLFRFFRFRFFLLFLRFRRFLFFRRFFFLRLFFRLLFFFFFFFRFFRFFFFRFRFLRFFLFLFLFLFRRRRFFFRFRRFFFFRFFLFFLRLFLFFFRLFFFRRLFFFFFLFRFRFFFFRRFRRFRLFRFFLRRRFFFLFLFFRRRFFFFRFFFFFLRLLLFRFLFLRFRLLFFFRFRLRLFRFFLLFFLFFRLFLLLFRRFRLFRFLLRRRFFLFLLFRFFFFFLLLRRLFLLRLLFFFFRRFLFFFLFFLLFFFRFRFFFRFFRFRLFFFLFLRRRLRFLLLRFLLFFRRFRFRFRFFFFLFLFLFFFFFRFFLLLRRFLLLRFRFFFFFFFLLFLFLFLFFLRFLFRLLFFFFRLFRFFLLFFLFLLRFRRLFFRFFRFFRFFLLLFFFFLLLFRRLFRFLLRLRFLLFLRFRFFFFLFLFLRFFLLLLLRRRLFRFFFLFRFRLLFRFFLRFFLFFFFFLRFRFFFFRLFLFRLRRRFLRFFFFLFRRRRFRFFLLRRFRFFRFFFLLRFFFLFLLLFRFLRLRFLRFFRFRFLRRFRFLLRFFLLRLRFFFRLFFFRFLRRRLRRFFLRFLLLLFFFLFRLRLRLLLRFFLFRRFRRLRFRFRLLLFRFFLFLFFLFLFLFFRLRFRFFLLLLRFFLFRFLFLRRRRRFFFFFLFRFRFLLRFRFLFFFFFLRLFLFLFFRLFFFLRRFLRFLFFFFRLFRFLLRFFRFFRFLRFFLLFFRLLRFFLLRRRLFLLFFFLLFFFRRLLRFLFFLLLLFFFFRFFRFRFRLFFFRLRFRLFFFRLLRFFFFFFFFFRLLFFFRRFFRFRFRRFRLFRLLRFRRLRFRFRFFFLFFFFRRFFFLRFRLFRFFFRFRFFLFFFRLLFRRRRFRLFFFFFRFFL\n" - ] - } - ], - "source": [ - "print(\"w1 = '{}\".format(w1))\n", - "print(\"w2 = '{}\".format(w2))" - ] - }, - { - "cell_type": "code", - "execution_count": 84, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def wander_near(locus, current, limit=10):\n", - " valid_proposal = False\n", - " while not valid_proposal:\n", - " s = random.choice('FFFRL')\n", - " if s == 'F':\n", - " proposed = advance(current, current.dir)\n", - " elif s == 'L':\n", - " proposed = advance(current, turn_left(current.dir))\n", - " elif s == 'R':\n", - " proposed = advance(current, turn_right(current.dir))\n", - " if abs(proposed.x - locus.x) < limit and abs(proposed.y - locus.y) < limit:\n", - " valid_proposal = True\n", - "# print('At {} going to {} by step {} to {}'.format(current, locus, s, proposed))\n", - " return s, proposed" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def seek(goal, current):\n", - " dx = current.x - goal.x\n", - " dy = current.y - goal.y\n", - "\n", - " if dx < 0 and abs(dx) > abs(dy): # to the left\n", - " side = 'left'\n", - " if current.dir == Direction.RIGHT:\n", - " s = 'F'\n", - " elif current.dir == Direction.UP:\n", - " s = 'R'\n", - " else:\n", - " s = 'L'\n", - " elif dx > 0 and abs(dx) > abs(dy): # to the right\n", - " side = 'right'\n", - " if current.dir == Direction.LEFT:\n", - " s = 'F'\n", - " elif current.dir == Direction.UP:\n", - " s = 'L'\n", - " else:\n", - " s = 'R'\n", - " elif dy > 0 and abs(dx) <= abs(dy): # above\n", - " side = 'above'\n", - " if current.dir == Direction.DOWN:\n", - " s = 'F'\n", - " elif current.dir == Direction.RIGHT:\n", - " s = 'R'\n", - " else:\n", - " s = 'L'\n", - " else: # below\n", - " side = 'below'\n", - " if current.dir == Direction.UP:\n", - " s = 'F'\n", - " elif current.dir == Direction.LEFT:\n", - " s = 'R'\n", - " else:\n", - " s = 'L'\n", - " if s == 'F':\n", - " proposed = advance(current, current.dir)\n", - " elif s == 'L':\n", - " proposed = advance(current, turn_left(current.dir))\n", - " elif s == 'R':\n", - " proposed = advance(current, turn_right(current.dir))\n", - " \n", - "# print('At {} going to {}, currently {}, by step {} to {}'.format(current, goal, side, s, proposed))\n", - "\n", - " return s, proposed" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def guided_walk(loci, locus_limit=5, wander_limit=10, seek_step_limit=20, return_anyway=False):\n", - " trail = ''\n", - " current = Step(0, 0, Direction.RIGHT) \n", - " l = 0\n", - " finished = False\n", - " while not finished:\n", - " if abs(current.x - loci[l].x) < locus_limit and abs(current.y - loci[l].y) < locus_limit:\n", - " l += 1\n", - " if l == len(loci) - 1:\n", - " finished = True\n", - " s, proposed = wander_near(loci[l], current, limit=wander_limit)\n", - " trail += s\n", - " current = proposed\n", - "# print('!! Finished loci')\n", - " seek_steps = 0\n", - " while not (current.x == loci[l].x and current.y == loci[l].y) and seek_steps < seek_step_limit:\n", - "# error = max(abs(current.x - loci[l].x), abs(current.y - loci[l].y))\n", - "# s, proposed = wander_near(loci[l], current, limit=error+1)\n", - " s, proposed = seek(loci[l], current)\n", - " trail += s\n", - " current = proposed\n", - " seek_steps += 1\n", - " if seek_steps >= seek_step_limit and not return_anyway:\n", - " return ''\n", - " else:\n", - " return trail" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nVLpP4CKFIBNJl6SFQEV+muMwZFu3buWGG25QGDKRAEKHIVsFPOHufxk9LykEWfRehSETqYDQYcgs\n+ouVHIIMNIFIpBKC3V7MzB4E/g+4xMyOmdmtwF3A9WZ2mFwUorvOt424Y1ARiETCSdrxXkoYsn8o\n8lJJIcjyJb2EISLh6H4CItNEqucO6H4CIuGleiqxiISX6pqAhg2LpJdmEYpUuYreWUgdgyLhDAwM\nJFqvIoVA3FbROAGRcLLZbKL1KloIaJyASPqoY1Bkmkj11QF1DIqEp3ECIlUu1TUBDRsWCS/VhYCG\nDYuEl+pbjseZUzgykXBSPU4gPvmTdlyIyPhSPU4gHiSk5oBI+qhjUKTKqWNQZJq4IOMEzOxGM3vV\nzI6Y2e2T2ZaITE7SuTmJCwEzywD/Si5E2Z8DnzSzSwu9V8OGRdJrMjWBK4Hfufsf3H0A+Am58GRj\naNiwSHpN5qxcDryZ9/w4uYJhjPgS4bXXXktHRwdz584FoL+/n9mzZ9Pd3c1FF13E6dOn6ezsZO3a\ntbS2ttLT08PChQvp7Oxk3rx5dHR00NPTw6pVq2htbaWzs5MlS5bQ0dHBzJkz6e/vp6+vj4svvpiW\nlhY6OjpoaGg4p0+it7eX5cuX09raSnt7O2vWrOHtt99mcHCQ+vp6enp6aGpq4u2336a9vZ1169Zx\n8uRJ+vr6mDt3Lt3d3SxcuJCzZ8/S1dXFmjVraG1tpauri2w2S21tLXPmzKGrq4ve3l5Wrlw5ktdl\ny5bR1tZGNptleHiY3t5eVqxYQWtrKx0dHaxcuZIzZ84wPDxMNpult7eXZcuWcfLkSdra2li3bh2n\nTp1iYGCAgYEB6urqRvLa0dHBunXrRvbbggUL6OzspLGxkfb2drq7u1m9evVIXpuamujo6KC+vp6+\nvr4x+23FihW0tbVhZnR0dDBjxoyRvLS3t7N69WpOnz7N0NAQM2fOpKenh6VLl468Hu+3/v5+5syZ\nQ3d3N4sWLeLMmTPnHON4eXyMjx8/Tl1dHatXr6alpYXOzk6WLl1Ke3s7dXV1DA4OjslrvN/cnWw2\nS09PT9Fj3NDQQHd3N01NTRw9epRMJsPatWs5efIkvb29zJ8/n66uLhYsWEBbW9s5+y3+nra3tzNr\n1ix6enrGHOPly5dz9uzZke9cX18fM2fOZGhoiI6ODlatWsXp06cZHh6mrq6Onp6ec/br2rVrOXXq\nVNFzY926dbS0tBQ8N06cOJHsTHb3RH/Ax4H78p5/CrinwPt8y5YtvmzZMgcc8Lq6upHH8V9DQ8PI\n4wULFox5Pf9v8eLFk3p94cKFI4/r6+vHvD5v3ryRx/Pnzx/z+owZMwpua7J5zWazY17P3xezZ88e\n83r+ssbGxjGv19TUjDxetGjRpPKav/7MmTPHvJ6/r+bOnTvm9fx9Xc5jnP8ZCx2X/O9WofwVOsb5\nx2Kyxzj/cxf67ucftzlz5ox5fSLnxvz58725udmbm5sd8JLO5UkUAlcDT+U9vwO4vVAhMFpzc/OY\nZaEoLaV1odO6UJ+p1EJgMn0CvwH+xMxWmVkd8PfkwpOJyBRSUkDSoiub3QjcQ66D8X53HxOOzMyS\nJyAik+IlBCSdVCEgIlOfbioiUuVUCIhUuYoXAiGHGpvZ/WbWYmb78pY1mtkzZnbYzJ42s3llSGeF\nmT1rZgfNbL+Z3RYwrRlm9isz2xOl1RwtX21mL0RpPWRmZRuJZWYZM3vJzB4PmZaZ/d7MXo4+26+j\nZWXfh9F255nZdjM7ZGYHzOyqQMfrkujzvBT9bzOz2wJ+ri+b2Stmts/MfmxmdRM+XqVcQijXH7lC\n5zVgFZAF9gKXlnH7fwtcBuzLW3Y38LXo8e3AXWVIZwlwWfR4NnAYuDREWtG2GqL/NcALwFXAw8Dm\naPm9wD+VcT9+Gfhv4PHoeZC0gKNA46hlofbhfwK3Ro9rgXmh0spLMwO8BVwc6Hu4LNqHdXnH6ZaJ\nHq+yfeASM301sDvvecGxBZNMY9WoQuBVoCl6vAR4NcDnegxYHzotoAF4kdzIzFYgk7dfnypTGiuA\nnwPX5RUCJwOl9QawcNSysu9DYA7weoHloY/XDcD/BPxcy4A/AI1RwfY4cP1EvxuVbg4UGmq8PHCa\nF7l7C4C7nwAWl3PjZraaXO3jBXIHuexpRdXzPcAJcifo68BZd4/njh4n94Uoh+8BXyU3Ag0zWwic\nCZSWA0+b2W/M7PPRshD7cC1wysweiKrp95lZQ6C08n0CeDB6XPa03P0t4LvAMeCPQBvwEhP8blS6\nECh0zXLKXqM0s9nADuBL7t5JoM/i7sPufjm5X+krgXcVettk0zGzjUCLu+/lnWNljD1u5fqc73X3\nvwY2AF80s/eVcdv5aoErgB+6+xVAF7laaLDvnpllgZuB7dGisqdlZvPJTdpbRe5EnwXcVOCt5027\n0oXAcWBl3vMV5NpMIbWYWROAmS0hV1WatKizZQfwX+6+M2RaMXdvB54nV8WbH03nhvLtx2uAm83s\nKPAQ8AHg+8C8AGnFv4i4+0lyTaorCbMPjwNvuvuL0fNHyBUKIY/XTcBv3f1U9DxEWuuBo+5+2t2H\ngEeB9zLB70alC4FKDDUe/cv1OPCZ6PEtwM7RKyT0I+Cgu98TMi0zWxT3JJtZPbkDfxB4DthczrTc\n/RvuvtLd15I7Ns+6+6dCpGVmDVFNCjObRa79vJ8A+zCqhr9pZpdEiz4IHAiRVp5PkitIYyHSOgZc\nbWYzzcx453NN7HiVsyOkxM6MG8n1pv8OuKPM236QXKnXF+2gW8l1mvwiSvPnwPwypHMNMETu6sYe\ncu2wG4EFAdL6i2j7e4F9wL9Ey9cAvwKOkOsNzpZ5X17LOx2DZU8r2ma8//bH34UQ+zDa7rvJ/Qjt\nBX5G7upAqLTqyXWmzslbFiqtZuBQ9N3YRu6q24SOl4YNi1Q5jRgUqXIqBESqnAoBkSqnQkCkyqkQ\nEKlyKgREqpwKAZEqp0JApMr9P8nYgJi0MFyGAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def square_tour(a=80):\n", - " \"a is width of square\"\n", - " return ('F' * a + 'L') * 4\n", - "\n", - "plot_trace(trace_tour(square_tour()))" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nybOEYIzJ+/+3mLJIMXCXRQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def cross_tour(a=50, b=40):\n", - " \"a is width of cross arm, b is length of cross arm\"\n", - " return ('F' * a + 'L' + 'F' * b + 'R' + 'F' * b + 'L') * 4\n", - "\n", - "plot_trace(trace_tour(cross_tour()))" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def quincunx_tour(a=60, b=30, c=50):\n", - " \"a is length of indent, b is indent/outdent distance, c is outdent outer length\"\n", - " return ('F' * a + 'R' + 'F' * b + 'L' + 'F' * c + 'L' + 'F' * c + 'L' + 'F' * b + 'R') * 4\n", - "plot_trace(trace_tour(quincunx_tour()))" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nWKIAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(('F' * 10 + 'R' + 'F' * 5 + 'L' + 'F' * 10 + 'L' + 'F' * 10 + 'L' + 'F' * 5 + 'R') * 4))" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nKEqpEBbSo95XcuDAAe677z6uu+46PvjgA9txlFIhLGTPo6zK1VdfzUsvvcSwYcMAePjhh5k7d67l\nVEqpUFTTFqVXC/fWhogYX+zjs88+Y9CgQZ7r69at8xRPpZTyxsaNG0lOTq72wr1B36J0GzhwYIUB\nntOnT1tOpJSqK0KmUF5q4sSJiAi333677ShKqTAXkoXyyJEjvP/++3To0IG3337bdhylVJgLyULZ\nunVrRo0aRUREBAAdOnRg+vTpllMppYLV5s2b6dOnDxMnTqzR40NmMKcy69atY+zYsZw7dw6Aixcv\nUq9ePb/sSykVusqfFvSTn/yENWvWeG73ZjAnpAvlJfvhwoULREREEBkZWePzpZRS4cM9ABwREUGL\nFi3Iy8ur8POwG/W+EveqxTExMdSrV4/f/OY3lhMppWwzxuBwODyH6Grzqa9h06Istz86dOjAt99+\nG7B9KqWCk4hQUFBAo0aNEJF/6WnWqRblpQ4ePIiIkJqaajuKUirANmzYQGxsrKcoiggOh6NWh+PC\nrlBu3LiRvn370qpVK9auXWs7jlIqwB544AHOnz9P586dmTZtGo0bN671NiN9kCuo/PjHP2b79u2s\nXbuW1NRU3nvvPerXr09qaqoO8CgVxo4cOcL27ds9n7/19ddf+2zbYVco3a6++moAxo4dC8B//dd/\ncc8999iMpJTyozZt2ngujxs3zqfbDruut1vHjh0rzA3fvXu35URKKX978803Mcbwzjvv+HS7YVso\nL7Vo0SJd/FepMLNjx44Ko9nNmzf3y37Ctutd3jfffMOiRYtYu3atLv6rVBhZsWIFAI8++ihxcXGM\nHDnSL/sJu/Mor+See+7hlVde4e6776Zly5b8/ve/tx1JKVUDBw4cYMGCBXz22Wfs2rWr5gvy1rUp\njN7YunUrQ4YM8VzftGkT119/vcVESqmauNzc7Zpsp86ecH45gwcPrjDAc/bsWcuJlFI1NWXKFIwx\nNS6S1VGnCuWlRo8ejYgwefJk21GUUlXIy8urMHDTr1+/gO27TnW9yzt27Bj79u1j+vTpHDlypMbH\nOJRSgbF9+3b69+/PunXrqFevHoMHD8bhqF1bT49Reqlt27Z89913xMfHM3z4cNLT021HUkqVs2nT\nJn79619z+PBhzpw549NGjRZKL61bt44JEyZw5swZoOYfZ6mU8o/yAzcjR47kww8/9Om2tVBWQ2lp\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "heart_points = [Step(60, 50, Direction.UP), Step(50, 90, Direction.UP),\n", - " Step(20, 70, Direction.UP), \n", - " Step(-40, 90, Direction.UP), Step(-60, 80, Direction.UP), \n", - " Step(0, 0, Direction.RIGHT)]\n", - "\n", - "heart_tour = ''\n", - "current = Step(0, 0, Direction.RIGHT)\n", - "\n", - "for hp in heart_points:\n", - " while not (current.x == hp.x and current.y == hp.y):\n", - " s, proposed = seek(hp, current)\n", - " heart_tour += s\n", - " current = proposed\n", - "\n", - "plot_trace(trace_tour(heart_tour))\n", - "\n", - "def heart_tour_func(): return heart_tour" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'FLFFRLRLFFRFFFFFFRFFFLLFFFFRLRFFFRFFFLFFFLFFLFRFFLFFFFFLFRLFRFFLFFFLRFFFFRRFFFFRFFFFFRLFFFRRLLFFFLFRLRLLFFFRFFFFRLFLLFFLLFFFFLFLLFFFLFFLFLFFFFLFFFLFLFFFLFLFFFLFFFLFRFLLLFFLFFRFFFLFFLRFFFLFRFFRFFRRRLRFRRFFRRFFRFFFFRFFLFFLFFFRFFLFLFFLFRRRFFFLFFFRFLFFFRFRFFLFRFFRRFFFFFFFFFFLFLFLRLFFRFRFLFLFLRFFRLRRFFLLFLFFLFLLFFRLRLFFFFFLLFRRFFRLFLFLRFFFFFLRFFFFFLFFFFFFFLFLFRFFLFLFRLFFLFRFFFRRFFLRFFFRLRRFFFFFFRFFFFLLFFLFFFRFLFFLFFLFRFFFLFFFFFFFFLFRFFFFFFLLRLFRRFFFFFFRFLLFRRLFLLFFFFFFFFFFLFLFFFRRRLFRFRFRFFFRFLLFLRLRFFLLFRFRFRRLLRFRFLFFLRFFRRFFFFFFFFFRRFFRLFFFFFFLFFFFFFFRRFLLRFLFLFFLRFRLFFFLLFFFFFFLRLFFFFLFFFFFRLLFFRFFRFFLFLLFFFFFRRFRFFFRRRRLFFRRRFFLLRRRFRRFRRFRFFRFLLFFFFFFFFFFLFFFLLFRRFRFFRFRLRFRFRLLLFFFFFFFFFFFFFLFFLRRRRLRFRFFFFLFFRFRLFRLFFFLRFRFLLRRRFRRRRFFFRRFRRFFRFRFLRLLLFLFFFFLLFFRRFFLFLFRLFRRFFLRFFFFLRRFFRRLRFRFRFFRFFFFFFFFFFFFFRRLFFRLRRFFLLFFFRRFFRLLFFFFFLFFFFLLFLFFFRLFFFFFLFLLLLLFFFFLRFFFFLRFRRFLFFFLFFLFFLFLRFFFRRRFFFLFFLFFLFFFLFFFRFRRRFFFLLRRFFFRFFLLRRFFFLFFFFRRLFLLFLLFLRFRRFLRFFFFRFRFRRFLLFLFRFFFFFFFFFFFRFFFFFFFFFFFRFFFRLLFLFRRRFRFFLFFFLFFFFRFFFFFFFRRFFFRRFRFRLFRLLLLRRFRLFLLFFLFRRRLLLFRRFRRRFFFFFFLFRRFRFFRLFFRLFLLLRFFFFFFRRFRRRRLLFFLRLFFLLFLRRLLLFFFFFLFRRFRRFFFFFRFFFFLFFFFFRFFLLFRLFFLLFFFFFFFLRFFFFFRRRRRRFRLFFFLFFRRFRRRRRFFFFRLRFLFRLFFFFFFLFFFRRFLFLLLLFFFFLFLLFFFFFLLFFLFFFFFRFLFFLFLFFLFLFFFLLFRFFFRLRFLLFLFRFFFFLFRFRFFFRFLRFFRFFRFRFFRRFFLLLFLRRLRFRLFFLLLRFFRFFFRFFFFFFFFFLFFLFRLLFFRRFRFFFFFFFFFLFFFFFFRLLLFRFRFRFFLFFLLRFFFLLLFLLRRFFFFFFFRRLRFRFRFRRFFLRFRLFFLLRFFLFLFFRFFLFLFFFFLFFFFLFFLFRFFFFFRRFRFFFFRFFFFRFFLFFRFFFLFFFFLFLFFFFFRFFFLFRFFRFLFRLLFRFRFRLRFFFFFRRFRRFLFFFFFFLLFFFFFFFRFLRLRRLLRFFFFRFFFFFFLFLFLFFLFFLFFRFFFFFLFFFFFLFRLFRFLLFFFRFFFFFFFFFRFFRFFFFLFFRFFLFLFRFFFFFFLFRFFFLFFFFLFFFFLFRFFRLRFRFLFRRFFFFFLFFFFFFFLFFRFFFRRFFFLLFLFFLFFLFRFFRFFFFRFFFFRFRFRRRRFFFFFRFFFFFFFFFFFFFRFFFRFRFFFRFRRFFFFLFFRFLFFFRFLRRFFFRFFFRLFFFFFFFFLFLFLFFLFFRRFFRRRLFLFLFLFFFFFFFFFFFFFFFFLFRFFFFFLFRRFFFRFRFFRLFLRRFRRFRFRRFRRFFFLFRFRRFFFRFFLRFRFFLLFFLLFFRLRFFFFFRRFRFRRFLFFLFRFLFFFFFFFRLRFLFFLRRFFFFFFFLRFFFFRFRFFFFRFFFFRFRLFFRFLFFFFLLLLLRFFLLFLFLLRRRFRFFRRFFRFFFRFFFFFLRLR'" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# lc = trace_tour(('F' * 50 + 'L') * 4)\n", - "# lc = trace_tour(('F' * 50 + 'L' + 'F' * 20 + 'R' + 'F' * 20 + 'L') * 4)\n", - "# lc = trace_tour(('F' * 60 + 'R' + 'F' * 30 + 'L' + 'F' * 60 + 'L' + 'F' * 60 + 'L' + 'F' * 30 + 'R') * 4)\n", - "lc = trace_tour(heart_tour)\n", - "rw = guided_walk(lc, wander_limit=8)\n", - "rw" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(rw))" - ] - }, - { - "cell_type": "code", - "execution_count": 95, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rw_trimmed = trim_all_loops(rw)\n", - "plot_trace(trace_tour(rw_trimmed))" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "764" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(rw_trimmed)" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(284, 22, 'FFRRLLRRFFFFFRFFFRFFRL')" - ] - }, - "execution_count": 97, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n9OCDD+qHP/xh7CidMpmMnn76ad18882xo3zMSy+9pGuvvVYfffRR7CidkrCf33///aqoqJAklZeX\n64YbboiW5ZC5e04PSfdI2irpz5KO72GcJ8mUKVNckk+bNs1LS0u9uLjYFy1aFDuW79ixw2fNmuVl\nZWVeWFjo3/rWt2JH8ubmZn/ggQe8srLSS0pKfPTo0bEjeXt7uy9evNhHjhzpFRUVXlRUFDuSu7u/\n+OKL/oUvfMHLy8u9uLjYGxoaYkfyDRs2JGY/z2QyPm7cOC8sLPR58+ZFy9GdbE/12HnWMa57ZrZK\n0pCuT0lySbe7+7Iu4+ZIKnP3mm7W471tqz/Nnz9ft912m8xMScpVWlqqlpYWZTLJmrQn7XVCmKS9\nf0cffbQaGxs7Z51JkX2drKcxRb2txN0nHeT2fqqO85o13Q2oqfn7r1KplFKp1EGuOv/mzJmjqqoq\nzZ07Vx988IFaW1s1e/ZsXXrppdEySdL27dv1gx/8QA0NDWpubtYFF1ygefPmRc20e/duPfTQQ3ru\nuefU0tKiIUOGaNmyZb3/YR9qaWnRM888ox//+MfKZDLau3ev/vCHP0TP9Nvf/lb33HOPWlpa1NbW\npscee0ynnnpqtEyZTEYbN27UHXfckaj9vKqqKhGFmU6nlU6nw/6ot6loTw9Jp3T5+QZJz/Qwtq9m\n1Dlpb2/3p59+2s844wxfs2ZN7DidXnrpJf/iF7/odXV1saN02rhxo0+fPt2vu+662FE67dixw2+6\n6Sb/8pe/HDtKp32nM84880zfvn177Djuntz9PGmUj8PznpjZs5JGqeMC0FuSrnP3xm7Gei7bAoC+\ndjCH5zmVZmAYShNAoh1MafKNIAAIQGkCQABKEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAShNAAhA\naQJAAEoTAAJQmgAQgNIEgACUJgAEoDQBIAClCQABKE0ACEBpAkAAShMAAlCaABCA0gSAAJQmAASg\nNAEgAKUJAAEoTQAIQGkCQABKEwACUJoAECAvpWlmN5tZxsyOy8f6ACCpci5NMxsh6XxJb+Uep3+l\n0+nYET4hiZmkZOYi08EhU37lY6b5H5JuycN6+l0S37gkZpKSmYtMB4dM+ZVTaZrZxZLedveGPOUB\ngEQr6m2Ama2SNKTrU5Jc0h2SbpM0ab/fAcBhy9z90P7QbKyk1ZKa1VGWIyS9K+lsd99xgPGHtiEA\n6Efu3uPk75BL8xMrMvtfSePdfWdeVggACZTP+zRdHJ4DOMzlbaYJAEeCfv1GkJlVm9k7ZvbH7GNy\nf26/J0m6Qd/M7jazP5nZWjNbYWZDE5DpPjNbb2brzOznZjY4AZkuNbNXzazdzMZHzjLZzDaY2SYz\nmxMzyz5mVmdm75nZn2Nn2cfMRpjZC2b2upk1mNmNCch0lJn9Lvt5azCz6p7Gx/ga5YPuPj77WBFh\n+5+QwBv073P3ce5+lqTnJPX4JvaTX0ka4+5nStosaW7kPJLUIOlrkn4TM4SZFUh6RNKFksZIutzM\nTouZKesxdWRKkjZJs919tKRzJH039mvl7nslnZv9vJ0p6SIzO7u78TFKM4nnPRN1g767N3VZrJCU\niZVlH3df7e77cqxRx90SUbn7RnffrPj71NmSNrv7W+7eKmmxpEsiZ5K7vywpURdm3X27u6/L/twk\nab2kz8RNJbl7c/bHo9RxK2a35y1jlOZ3s4d4C82sMsL2PyapN+ib2T1mtlXSFZLuip1nP1dLqo8d\nIkE+I+ntLsvvKAFFkHRmVqWOmd3v4ibpOFows7WStkta5e6/725srze3H8LGu7sZ/nZJ/ynpbnd3\nM7tH0oOS/jXfGQIyRbtBv6fXyd2Xufsdku7Inh+7QVJN7EzZMbdLanX3p/o6z8FmSoAD7TNcYe2B\nmQ2S9KykWfsdWUWRPYo6K3uufqmZjXb31w80Nu+l6e6Teh8lSaqV1C87fXeZsjfoV0n6k5ntu0H/\nFTM74A36/ZHpAH6qjvOaNX2XpkNvmcxspqR/lnReX2fZJ+B1iukdSZ/tsjxC0rZIWRLPzIrUUZg/\ncfdfxM7Tlbt/ZGZpSZMlHbA0+/vqederwNMkvdqf29+fu7/q7kPd/R/c/SR17Pxn9XVh9sbMTumy\neIk6zvtElb3T4VZJU7MnzpMm5nnN30s6xcxGmlmJpH+R9MuIeboyxT/nu79HJb3u7gtiB5EkM/vU\nvlOFZlamjovCG7od35/3aZrZE+o4h5GR9Kaka939vX4L0Asze0PSP7r7/0XO8aykUep4nd6SdJ27\nN0bOtFlSiaS/ZJ9a4+7fiRhJZvZVSQ9L+pSkDyWtc/eLImWZLGmBOiYide5+b4wcXZnZU5JSko6X\n9J6kand/LHKmL0l6UR13Pnj2cVvMO2nM7HRJj6vjvSuQ9LS7/3u347m5HQAOHv+7CwAIQGkCQABK\nEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAf4fZ+6axunv1bcAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "lc = trace_tour(square_tour(a=10))\n", - "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", - "rw_trimmed = trim_all_loops(rw)\n", - "plot_trace(trace_tour(rw_trimmed))\n", - "len(rw), len(rw_trimmed), rw_trimmed" - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# success_count = 0\n", - "# while success_count <= 20:\n", - "# lc = trace_tour(square_tour(a=10))\n", - "# rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", - "# if rw:\n", - "# rw_trimmed = trim_all_loops(rw)\n", - "# if len(rw_trimmed) > 10:\n", - "# with open('small-squares.txt', 'a') as f:\n", - "# f.write(rw_trimmed + '\\n')\n", - "# success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# success_count = 0\n", - "# while success_count <= 20:\n", - "# lc = trace_tour(square_tour())\n", - "# rw = guided_walk(lc)\n", - "# if rw:\n", - "# rw_trimmed = trim_all_loops(rw)\n", - "# if len(rw_trimmed) > 10:\n", - "# with open('large-squares.txt', 'a') as f:\n", - "# f.write(rw_trimmed + '\\n')\n", - "# success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 100, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# success_count = 0\n", - "# while success_count <= 20:\n", - "# lc = trace_tour(cross_tour())\n", - "# rw = guided_walk(lc)\n", - "# if rw:\n", - "# rw_trimmed = trim_all_loops(rw)\n", - "# if len(rw_trimmed) > 10:\n", - "# with open('cross.txt', 'a') as f:\n", - "# f.write(rw_trimmed + '\\n')\n", - "# success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 101, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# success_count = 0\n", - "# while success_count <= 20:\n", - "# lc = trace_tour(quincunx_tour())\n", - "# rw = guided_walk(lc)\n", - "# if rw:\n", - "# rw_trimmed = trim_all_loops(rw)\n", - "# if len(rw_trimmed) > 10:\n", - "# with open('quincunx.txt', 'a') as f:\n", - "# f.write(rw_trimmed + '\\n')\n", - "# success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 102, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n9OCDD+qHP/xh7CidMpmMnn76ad18882xo3zMSy+9pGuvvVYfffRR7CidkrCf33///aqoqJAklZeX\n64YbboiW5ZC5e04PSfdI2irpz5KO72GcJ8mUKVNckk+bNs1LS0u9uLjYFy1aFDuW79ixw2fNmuVl\nZWVeWFjo3/rWt2JH8ubmZn/ggQe8srLSS0pKfPTo0bEjeXt7uy9evNhHjhzpFRUVXlRUFDuSu7u/\n+OKL/oUvfMHLy8u9uLjYGxoaYkfyDRs2JGY/z2QyPm7cOC8sLPR58+ZFy9GdbE/12HnWMa57ZrZK\n0pCuT0lySbe7+7Iu4+ZIKnP3mm7W471tqz/Nnz9ft912m8xMScpVWlqqlpYWZTLJmrQn7XVCmKS9\nf0cffbQaGxs7Z51JkX2drKcxRb2txN0nHeT2fqqO85o13Q2oqfn7r1KplFKp1EGuOv/mzJmjqqoq\nzZ07Vx988IFaW1s1e/ZsXXrppdEySdL27dv1gx/8QA0NDWpubtYFF1ygefPmRc20e/duPfTQQ3ru\nuefU0tKiIUOGaNmyZb3/YR9qaWnRM888ox//+MfKZDLau3ev/vCHP0TP9Nvf/lb33HOPWlpa1NbW\npscee0ynnnpqtEyZTEYbN27UHXfckaj9vKqqKhGFmU6nlU6nw/6ot6loTw9Jp3T5+QZJz/Qwtq9m\n1Dlpb2/3p59+2s844wxfs2ZN7DidXnrpJf/iF7/odXV1saN02rhxo0+fPt2vu+662FE67dixw2+6\n6Sb/8pe/HDtKp32nM84880zfvn177Djuntz9PGmUj8PznpjZs5JGqeMC0FuSrnP3xm7Gei7bAoC+\ndjCH5zmVZmAYShNAoh1MafKNIAAIQGkCQABKEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAShNAAhA\naQJAAEoTAAJQmgAQgNIEgACUJgAEoDQBIAClCQABKE0ACEBpAkAAShMAAlCaABCA0gSAAJQmAASg\nNAEgAKUJAAEoTQAIQGkCQABKEwACUJoAECAvpWlmN5tZxsyOy8f6ACCpci5NMxsh6XxJb+Uep3+l\n0+nYET4hiZmkZOYi08EhU37lY6b5H5JuycN6+l0S37gkZpKSmYtMB4dM+ZVTaZrZxZLedveGPOUB\ngEQr6m2Ama2SNKTrU5Jc0h2SbpM0ab/fAcBhy9z90P7QbKyk1ZKa1VGWIyS9K+lsd99xgPGHtiEA\n6Efu3uPk75BL8xMrMvtfSePdfWdeVggACZTP+zRdHJ4DOMzlbaYJAEeCfv1GkJlVm9k7ZvbH7GNy\nf26/J0m6Qd/M7jazP5nZWjNbYWZDE5DpPjNbb2brzOznZjY4AZkuNbNXzazdzMZHzjLZzDaY2SYz\nmxMzyz5mVmdm75nZn2Nn2cfMRpjZC2b2upk1mNmNCch0lJn9Lvt5azCz6p7Gx/ga5YPuPj77WBFh\n+5+QwBv073P3ce5+lqTnJPX4JvaTX0ka4+5nStosaW7kPJLUIOlrkn4TM4SZFUh6RNKFksZIutzM\nTouZKesxdWRKkjZJs919tKRzJH039mvl7nslnZv9vJ0p6SIzO7u78TFKM4nnPRN1g767N3VZrJCU\niZVlH3df7e77cqxRx90SUbn7RnffrPj71NmSNrv7W+7eKmmxpEsiZ5K7vywpURdm3X27u6/L/twk\nab2kz8RNJbl7c/bHo9RxK2a35y1jlOZ3s4d4C82sMsL2PyapN+ib2T1mtlXSFZLuip1nP1dLqo8d\nIkE+I+ntLsvvKAFFkHRmVqWOmd3v4ibpOFows7WStkta5e6/725srze3H8LGu7sZ/nZJ/ynpbnd3\nM7tH0oOS/jXfGQIyRbtBv6fXyd2Xufsdku7Inh+7QVJN7EzZMbdLanX3p/o6z8FmSoAD7TNcYe2B\nmQ2S9KykWfsdWUWRPYo6K3uufqmZjXb31w80Nu+l6e6Teh8lSaqV1C87fXeZsjfoV0n6k5ntu0H/\nFTM74A36/ZHpAH6qjvOaNX2XpkNvmcxspqR/lnReX2fZJ+B1iukdSZ/tsjxC0rZIWRLPzIrUUZg/\ncfdfxM7Tlbt/ZGZpSZMlHbA0+/vqederwNMkvdqf29+fu7/q7kPd/R/c/SR17Pxn9XVh9sbMTumy\neIk6zvtElb3T4VZJU7MnzpMm5nnN30s6xcxGmlmJpH+R9MuIeboyxT/nu79HJb3u7gtiB5EkM/vU\nvlOFZlamjovCG7od35/3aZrZE+o4h5GR9Kaka939vX4L0Asze0PSP7r7/0XO8aykUep4nd6SdJ27\nN0bOtFlSiaS/ZJ9a4+7fiRhJZvZVSQ9L+pSkDyWtc/eLImWZLGmBOiYide5+b4wcXZnZU5JSko6X\n9J6kand/LHKmL0l6UR13Pnj2cVvMO2nM7HRJj6vjvSuQ9LS7/3u347m5HQAOHv+7CwAIQGkCQABK\nEwACUJoAEIDSBIAAlCYABKA0ASAApQkAAf4fZ+6axunv1bcAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(rw_trimmed), filename='test.png')" - ] - }, - { - "cell_type": "code", - "execution_count": 103, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n", - "# tours_filename = 'tours.txt'\n", - "\n", - "# try:\n", - "# os.remove(tours_filename)\n", - "# except OSError:\n", - "# pass\n", - "\n", - "# success_count = 0\n", - "# while success_count < 100:\n", - "# lc = trace_tour(random.choice(patterns)())\n", - "# rw = guided_walk(lc)\n", - "# if rw:\n", - "# rw_trimmed = trim_all_loops(rw)\n", - "# if len(rw_trimmed) > 10:\n", - "# with open(tours_filename, 'a') as f:\n", - "# f.write(rw_trimmed + '\\n')\n", - "# success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 104, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found mistakes: 1916\n" - ] - }, - { - "data": { - "text/plain": [ - "(5540, 14, 'LFFFFLLRLFFLRL')" - ] - }, - "execution_count": 104, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nx0SoEAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "lc = trace_tour(cross_tour())\n", - "rw = guided_walk(lc)\n", - "print('Found mistakes:', len(mistake_positions(trace_tour(rw))))\n", - "rw_trimmed = trim_all_loops(rw)\n", - "plot_trace(trace_tour(rw_trimmed))\n", - "len(rw), len(rw_trimmed), rw_trimmed" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(rw))" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nx0SoEAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot_trace(trace_tour(trim_all_loops(rw)))" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Mistake(i=9, step=Step(x=0, y=5, dir=)), Mistake(i=29, step=Step(x=5, y=6, dir=)), Mistake(i=33, step=Step(x=5, y=2, dir=))]\n" - ] - }, - { - "data": { - "text/plain": [ - "'LFFFFRFFRFFLFFLFFFLFFRRFRFFFFFFFFFFFRFRLRRLLRFFFFRFLFFLLFLRFFFFFLFFFFFLFFLFRLFRFRLFFFFLLFFFFLFFFRLFRRFFFLFFFFFFFFFLFLRFFFRLRLLFRRFLLFFFLFFFFFRLFFFRRLFFFLLFFLRLFLFLRFRFFFFLFFFRRFFLLLFLLLRLFFFFFLLFFFFFFLFFLRLLFFFRRLFLLLFRRFLFLLFFRFFLFFRFFFFFFFFFFFFFRFRRRRRFFRRRFFFLRRFLRFFFLLFFLRFLFLFFFLFFFLFLFRFFFFFRLFFFFFLFFLFFRRRRFLFFFFFFFFFFFFLFFFFLFRFLLLFFRRFFLLFFLFFLFFFFFFRRFFRLFLLFFFFFFLFFLLFFRFRRLLFRFFRRFLRLFLLFFFRFRFFFFFFFFFFFFFFFFRFFFFRFLFFFFFFFRFFLFFFFRRFFFLLFRFFFRRFFFFRRFFFFFFLLFLFFFFLRRLLFRFFLRFRFLFFFFRRRFFFRRFFRRRRRRFLRRFRFRFRFLFFFFLLLLFFLRRRFFFFFFRFFRFFLLFFFRFFRRFFFLFFFFFLFLFFFFLFLLFFFFFRFFLLFFFLFRFFLLRLFFFFFFLFFLRRLFFRFFFLLFLFFFRRFRRFRFFRFFRFRRRFFRFFFRFRRLRFFFFLFLFFFRFFFFFFFFRFFRFFFRLFRFRFRRRRFRFLRFFFLRLRFRFLFFFFFFLRRFFLLFFFLFLFFFFRFRFRFFLFFRRFFFFFRLRFFFFFRFFFFRFFFFFRFFLLFFRFFLRRLFLFLFFFFFFFFFFFLFFFFFRFFLRLFLLFFFRFRFFFRFFRFFRFLFFLRFFRRLRRFFLLRRLFFFLFFFFFFFRRRLRFFLFRFFRLFRFFRFFFFFLFFFFLFFFFLFFFRRFRFRFLFLFRFFLFFLRFRFFFFRFFFFLFLFFFRRRLFLFFLFRFRFFLFLFFLFLFLLFFFFFFLFFFRFFFLFFRFFFFRFFFLLFLFFRFRFFRFRFFFFFFFFLLLFFLFFFLFFFFFLFRRFFFFLFFFFRRRFRFRFFLLFRFLFRLFLLLRFFLFFLFFFFFRRLFFLFFFFRRFFFLFRFRRRRFRLFLFRFFFLFLRFFFFLFLFLRFFLFRFRFRFLFLFLFRFLRFFRFRLFFFRFLLFFRRFFFFFFFRLFLLFLFFFLFRLRRFFFFLFFLLRFFLFRRRFLFLLFFFFFFLFFLLLFFFFFFLLRRFRFFFRRFLLFFFLLFFFFFRFRRLFFFFLRRLRRFFLRRFFFLFLFFFFLRLFLLRFFRFRFRFRFFLLRRLRLRFRFFFFFFFFFFFFFFFRFFLFRRFFRFFFLRLLLRRFFLFRFRRLFRFRFFRFFFRLFFFRRLFRFFFFRFFFRFFFFFRFFFRLLFFRLFRFFFRFRRRRFFFRRLLFFLFFFFFFFFRFFFRFFFLFFLFFFFFFFFLFLFFRFFFFFFRFFRFFFFLLLLFFFFLLLFRFLFRFRFFFRFFFLRFFRRLFFLFLLRFFRRRLLRFRFRFLFFFFLRRLRRLLFFFFFFRFFRRRFFLFFFFFLFFFFLRFFRLFFFLFFLFLFFLFFFLFFFLLLFFFFLFFFFFLRFFFRLFFFFLFLRRRRFFRFFFLRRLFFFRFLFFLFFFFFLRRFRLFLFLLFRLFRLFLFRFRFRLLFFRFLRFFRFFLRRLRFFFLRFRFFFFFLFFRLRFFFRFRFLRFRFLFFFRRRRRLFFFFFLFFFRFLFFFLFRFFFFFFFRFLFLFLLLRRFFFFFFFFRLFLRFRFFLLLFFFLFLFFRFLFFFRRFFRLFFRLFRFRFFLRFRFFFFFFFFRFFFRLFFRFFFLFLRFFFFLFFLFFFRFFFRFFFLFLLLLFLFFFLFLFFRFLLFLFFLFRFFFFLFFFRFFFFFFFFFFFFLLFFFFFFRLLFRRRFFFFLRFFFFRFFFFRFLFRLFFRFFFLFLFRFRLFFFRRLFRFLRFFFFFFFFRLFRFFFFFRRFRFRRFLFRFRFFFLFFFFFLRRLFLRFRRFRFFRFRRFFFFFFFLFRFFFRFRRLRRFFFFFFRLLLLFRFLLFFLFFLFFFFFFFFFFFFFFFFFLFFLRFFLRFFLFRFLRRLFLFFFLFFRFLRFFFFLRFFRFFFFFFFFRFRFFFRRFFFLLFFFFFFLRFFRRFRFLFFLFLFFLFLFRFLFFFLRFFRFLLFLFRFRFFFFLLFFFFFFFFLFRRRRFFFFFFFFRFFLFFRRFRRFLFFRRFFRRFFFRRFRFRFFFFFRFFFFFRRFFRRFFLFFLFRFLRRRFFFLLFFFFFFFFFLLLFRFFFFRRFLFLFFLRRFFFFRFFLRRFLFRFFFFRLLFLLFFFFRFRFFRFLFLRFLRFLFRFLFFRRRLFFRLFLRLFRFFRFFLFLFRFFFFRFFFFFFFRFFLFRLFLLRLFFFFFFRFFFRFFFFRFFRFFFRFFRLRFFFRLFRRRRRFFRRRRRFFRLRFFRFFLRLFFLRFRRFFRFFFFRFFFFFRFFFFRFFFFFRFRFLLFRFFFFFRFLLFRFRFRFRLFFRRRRRRFFFRRFFFLLFRFRFFRRLFFLLFFFFLFFLRRRFFFFRLLFRFFRFLRRRFRLFFLLFRFFFRFFFFFRFFFFRFFRFRFFFFFFRFLFLFFFFFRRFLLFFFFFLFFLFFFLFFFLRLFFLFFFFFFFLFRFLLFLFFLFFRFFFLFFLLRLFFRFFRFRLFRFFRFFRLRFFLLFRLFFFFRFFLFFLFRRFRFFFLFFLRFRLFFLFLRFFLFLFFFFLFFFLFFFFFFFFFLFFFFFLFFFFRLRFFFFFFFFFFRRFFFFFRRRRFFLLFFLRFFFFRFFFFRFFFFLFFFRFFFFFFRLFFLFFRFFRFRFFLLRFLFLFLFFLFLFFLFLRFFFFRRRFFFRFFLFLRFLFFRRFLFLFLLFFFFRLLLLLRLRRFFRRFFLRLFFRLLFRRLFFRFLLFFFLRLFFFFFFFFFLFRLFRLFLFFFFFRLRLRFFFRFRFFFRFFFFFFRFRFFFLFLFLLRRFRFLRFRFLFRRFRLFFFFFLFLFFFFFFFFLFRFFFFFFRRFFRLFFRFLLFLRFFFFLFRFFFLFFLFLFLFFFRRFRFFLRFLFRLFFFRFFFLFFFFFFRFLFFLFFRFRFFRFFFFFFFFFFFFRFFFFFFRRRFFFRFFFFRFFFLLRFFRLRFRFFLFFFRFFLFLFFFFLLRFFRRRFRLLRRLFFFLFLLFRFFFFRFFFFRFLFFLLFFFLFFFFLFFFFLFLLFRFLFFLRLFFFFLRFRLFRFFRFFFRLFFFRFLFFLLRFRRFFFFFFFFFFFFFFFFRRFLLFFLLRLFFFFFFFFFFFFFFLRFRRFFFRRFLLRFFFRFFLFLFRLRFFFFFRFFRFFFRLRRFFFFFRRRRRLFLLFFLLFFRRFRFFFFFLFFFFLFLFFRFFLFFFFLRLLFFFLFLFFFLLFLFLFFLRRRFFFFFRLFFFRLFFFFRFRFFFFRFFLFLLFLFRRFFRRRFFFLFRFFFRFFFFFFFFRRLFFFFFFRFLLFFFFRLFFFLFFLFFRLFFLFRFFFLFFFFLLFFFRFRLRFRFFRFLFFFLLLRFFFRFFFFFFFFLRLLFRRFLRFRRRLLRFRFFLLRFFLFLLRFFFFFLLFRRRRRRFFFFFRFFRRFLFFFFFRLFFFLFLFFLFLLFFLFFRFFRRRFFLRRRFLFFRFFFFFLFFLLFFRFRRRFFRFRRFRFRFFLRFRFFRRFRFFFRFFLFRFLRFFLFFRLRFFFFFFLRFFFFRLLLFLFLFLFLLFFLRFFRFFRFFLFFFRFFRRRFRLFLFFFLFFLFFFLFFFFFLLRLFFLFLFFFFFFFFLLFFFRRFFLRLFFFLLFLLFFFFLFFFRFFFFLFRFFRFRFRFRLLFFFLLFFFLRRFFRFRFLFLFFFLLRRRRFRRLLLRLFLFFLFFFLFFFFFFFFFLRRRFFFFRFFFRRLFFFFFFFLRFLRLFLFFFFFLFFLFFRFRRFFRRLFFFLFFFFFRLRFFLFRFFFRFFRRRRRLFFFRFFRFRRRLFFFFLFFLLFFRRRRLFLFRRFRRLFFFRFFFLLFRLLLRLFFFRFFRFFFLRRFFFFFFFFFRRRLFFFFLRFFFRRFFFFFRLFFFFRRRLFFFFRRFRLFFFFFFRLLLRLLFFFFFRFLLFFRFFFFRFRFFFLFRFFFFFFFRRRLFFLRFRLFFFFFFFFLFFFFLFRFLRLRFLFFFFFFFFFLFFLLFFFFLFLFFFFFLFFFFLFLFFFLLFFRRFFFRFFFRFFFFRLRFFLFFFFFLRFLLLFRRLLRFFFFFFFFFRFLLLFRLFFFLFRFFRFRFFFFFFFRFLLLFFFFFFLFFFFFRFRLFFFRFLRLFLFLLRFFLRFFFRFFRFFFLRFFLFFLFLFFFFRFFFFFFFFFRFLRRFFFFRRLFRFFFFFRRFRLLFFRRRLLFFRLFFFLLFFFFRFFFFFFRRFRFFLRFFRFFFFFFFFFFFFFFFFRRFLFFFRRFRFFLLFFLRLFLFFFRFFFFRFFRLFFFFFFLFFLFFRLRFFFFRFFFRRLFFFFLLFLRFFLFFFFFFFFFFFRRFRFLFLFRRFFLLFFRFRFFFFLRLRFLLRLLFRFLFRRFLFFRFRFFFRFFFFLFFFRFFRRFFFLFFFFLFFRFLLLFRRLFLRLLLFLFFLLFFFFFFRRFFLLFLLRFRFRFFRFFFFFRFFRRFLFLRFLFFRLFFFLRRRRRFFFRRFFRLFFFRFRLFRFRFLRFRLRFRRFRLFFFLFRFFLRLRFFFRFFFRFFFFFFFFRFLFFFFRFFFFRFFFFLFRRFLFFFFRLLFFFFFLFLFFFRFRFLRLRRFRFLLFLFFFRRLFRFRLFFFLFRFRFLFFFFFFRRFLRRLRLFLLFFFFFFRRFRFFRLFFRFLFFLFFRFFFLFFLFFLFRFRFFFFLLRRRRFFFFFFFFLFFFFFFFFFLFLFRRFFFFRFRFFFFRFFRRFRFFFFLLLRLFFFRFFFFFFRFRLFFFLFFFFFFFFFFLRFFFRRRFRRFRFRFFFFLFLFFLRFLFFLFLFFFLFLFFFLFFFFFLFFFFFRFFFFLLRFFRFFFRFRFLLLFFFLFFFFLFFFFLRRFRFFLRLLFFFRFFFFLLLLRFFFRFFFFFFFFFFFRFRLLFFLFLFRLFFFFFFFFFFFLFFFFFFFFFFFFLRFFFFLFLFFLFLFFRRFRLRFFFFFFFLFLFFRFLRFFFFFRFRFFLLFRLFRFFRRFRLLFFRFLRFFFFRRFRFLFFLFFLFLRFFRFFRRFLLLLFLRFFFFLFFRRFRLFFFFLRFFLFFLFFLFRLFFLFRFFLFFFFLFFFFRRFLFRFFFFRFFFLFLLLRFFFFFFRFFFLLFRFFRRFRFLFFLFFRFLFFFFRFFLRFRFFRFFFLRRFLFFFLRFFLRRFLFRLFFRFFFFRLRLLLRLFFFFFFFFFLFLFFFFRFFFLLFFFFFRFRFFFFFFFLFFLRFFRFRRRLFFLLLRFRFFFLFFFLFRLRFLLFLFFFLFFLRFLFFFLFFLLFLLFRFRFLRLFFLFFFRFFFLLLFRFFFFFFFRLFFLFFLFLFFRLFFFFFRRLRLFFLRL'" - ] - }, - "execution_count": 108, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "w_tour = rw\n", - "w_trace = trace_tour(w_tour)\n", - "mks = mistake_positions(w_trace)\n", - "print(mks[:3])\n", - "trim_loop(w_tour)" - ] - }, - { - "cell_type": "code", - "execution_count": 109, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1916\n", - "1912\n", - "1909\n", - "1903\n", - "1900\n", - "1896\n", - "1894\n", - "1892\n", - "1883\n", - "1881\n", - "1878\n", - "1872\n", - "1860\n", - "1855\n", - "1854\n", - "1849\n", - "1846\n", - "1845\n", - "1839\n", - "1835\n", - "1833\n", - "1828\n", - "1825\n", - "1821\n", - "1819\n", - "1810\n", - "1800\n", - "1793\n", - "1784\n", - "1783\n", - "1763\n", - "1737\n", - "1735\n", - "1729\n", - "1719\n", - "1716\n", - "1713\n", - "1707\n", - "1697\n", - "1696\n", - "1695\n", - "1694\n", - "1689\n", - "1687\n", - "1673\n", - "1669\n", - "1646\n", - "1628\n", - "1621\n", - "1617\n", - "1602\n", - "1600\n", - "1599\n", - "1598\n", - "1595\n", - "1590\n", - "1588\n", - "1582\n", - "1581\n", - "1578\n", - "1571\n", - "1570\n", - "1568\n", - "1564\n", - "1547\n", - "1542\n", - "1536\n", - "1534\n", - "1528\n", - "1527\n", - "1525\n", - "1523\n", - "1520\n", - "1508\n", - "1498\n", - "1482\n", - "1479\n", - "1477\n", - "1475\n", - "1466\n", - "1459\n", - "1456\n", - "1454\n", - "1450\n", - "1434\n", - "1423\n", - "1412\n", - "1405\n", - "1404\n", - "1398\n", - "1395\n", - "1394\n", - "1392\n", - "1388\n", - "1377\n", - "1369\n", - "1365\n", - "1351\n", - "1341\n", - "1337\n", - "1300\n", - "1298\n", - "1295\n", - "1289\n", - "1288\n", - "1286\n", - "1283\n", - "1277\n", - "1276\n", - "1275\n", - "1274\n", - "1269\n", - "1258\n", - "1257\n", - "1253\n", - "1236\n", - "1231\n", - "1227\n", - "1214\n", - "1210\n", - "1198\n", - "1194\n", - "1193\n", - "1173\n", - "1168\n", - "1161\n", - "1159\n", - "1157\n", - "1156\n", - "1152\n", - "1143\n", - "1142\n", - "1135\n", - "1134\n", - "1130\n", - "1122\n", - "1121\n", - "1118\n", - "1109\n", - "1098\n", - "1095\n", - "1094\n", - "1090\n", - "1085\n", - "1082\n", - "1079\n", - "1076\n", - "1070\n", - "1053\n", - "1046\n", - "1036\n", - "1029\n", - "1025\n", - "1023\n", - "1019\n", - "1018\n", - "1011\n", - "1008\n", - "1004\n", - "1000\n", - "998\n", - "997\n", - "990\n", - "985\n", - "981\n", - "975\n", - "971\n", - "963\n", - "962\n", - "961\n", - "958\n", - "952\n", - "950\n", - "948\n", - "939\n", - "936\n", - "933\n", - "928\n", - "924\n", - "920\n", - "918\n", - "905\n", - "903\n", - "898\n", - "897\n", - "893\n", - "884\n", - "878\n", - "876\n", - "870\n", - "850\n", - "842\n", - "834\n", - "826\n", - "820\n", - "816\n", - "806\n", - "802\n", - "795\n", - "789\n", - "773\n", - "765\n", - "759\n", - "749\n", - "744\n", - "731\n", - "728\n", - "725\n", - "720\n", - "719\n", - "713\n", - "707\n", - "704\n", - "696\n", - "685\n", - "681\n", - "678\n", - "675\n", - "674\n", - "666\n", - "661\n", - "655\n", - "646\n", - "645\n", - "644\n", - "638\n", - "637\n", - "632\n", - "628\n", - "623\n", - "615\n", - "614\n", - "610\n", - "608\n", - "600\n", - "595\n", - "586\n", - "582\n", - "578\n", - "577\n", - "573\n", - "568\n", - "562\n", - "561\n", - "557\n", - "555\n", - "545\n", - "542\n", - "540\n", - "532\n", - "520\n", - "512\n", - "500\n", - "494\n", - "491\n", - "487\n", - "486\n", - "485\n", - "481\n", - "477\n", - "471\n", - "449\n", - "440\n", - "425\n", - "423\n", - "419\n", - "407\n", - "401\n", - "400\n", - "398\n", - "390\n", - "389\n", - "381\n", - "371\n", - "369\n", - "367\n", - "363\n", - "362\n", - "358\n", - "357\n", - "340\n", - "334\n", - "330\n", - "326\n", - "320\n", - "314\n", - "313\n", - "307\n", - "303\n", - "299\n", - "291\n", - "288\n", - "284\n", - "278\n", - "266\n", - "256\n", - "251\n", - "247\n", - "238\n", - "232\n", - "226\n", - "224\n", - "220\n", - "211\n", - "210\n", - "208\n", - "201\n", - "194\n", - "193\n", - "191\n", - "187\n", - "180\n", - "169\n", - "157\n", - "154\n", - "151\n", - "145\n", - "143\n", - "115\n", - "101\n", - "95\n", - "92\n", - "88\n", - "85\n", - "79\n", - "75\n", - "72\n", - "68\n", - "65\n", - "63\n", - "58\n", - "57\n", - "55\n", - "44\n", - "43\n", - "42\n", - "39\n", - "38\n", - "29\n", - "28\n", - "24\n", - "22\n", - "20\n", - "14\n", - "10\n", - "9\n", - "8\n", - "6\n", - "RFFRRFFFRFFRFLLRFLFFLLLLFRRRFLFFFFRRFFFRLLLRRFLLFRLLLFRLLRFLRRLFLFFRLLRFLLFRRLLRLFRFFFLLFFLFLRRLFRLRRLRRRRFFFFFFRRRLLFFFFFFLRRRLLLRLLLLRFRLRFRRRFRLRLLRFRLFLLRFRFLRRRRLRFLLRLRRLFFFRLRRFFRFLRFLLFLFRLRLRLRRRLFFRLRRFFRRFFLLRLLFLLLFRFRFLRLFFLFRRRRLRRLRRLRFRRLRRRFRRRRLLRFLLRRFFRLRFFLFLFRRLLLRLFFFRFRLRLLFRRFLLRLFFFLLRLLRRLRFRFFFFFRRFFLFRFLRFRFLFLFRLFLFLRFFLFRLRRRLRRRRFFFRFLLRLFRFRRRLRFFFFFLLFRRLFRRFRFRFLRLLFRFFFLLRRFRRRRLFFFLFLLLFFLRRLRFLFLFFRLLFFRRFFLRLLRFLRLLFLFRLLLRFFFFFFFFLFLRLLRLRLRFLLFFFLFLFFLFRRRRRFFRLLFFFRLFFLFRLFFRFFFFRLRRRLLFLRRFLRFFLRRFRRFLRFLRRLFRRLFFFFRLFLFFLRFFFFFRLFLFLRFFFLLLFLLLFFLRRLFLFRRFRRFFRRRFFRFLFLLFLFRFRFLLLRRRLFRRFFRLRFLFLFLRRLFFFLFRLRFRFFRFLRRFFFFFLFRLRRFRLLRLLFFLLLFFLFFFRLFRFRRRRLFLFLLLLRLFRFRLRLLFLFLLLRRRLLLFRRFRLRFFRRRLLLFRLRLLFFLLRFFFFRLLRLRLLLRLFFFRRLRFRFFRRRFFFRFFFFLRFLFRFLRFRRLLLRLLFRRLFFLRRFFFRLLFRLFLRRFLRLLRRFFLLFLLLFFFFRRFFRLFFLLFLLFRFRLRFLRFFRFRLRLLLFFFLFLRFRFRFLRRLLLLLRFRRLFLLLLRRFFFLLRFLFFRLLLLFLFRLRFFFFFLRLLFFLLLFFLLRRFLRRFLRLRRLLLRRRRRLLLFLRRLFFFRFLRRLF\n", - "LFFFFRFFRFLRFFFFLFFFRLFFLFLRFRFFFFLFFFRRFLLFFRFFLFFRFFFFFFFFFFFFFRFRFLFFRFFFLFFFLFLFRFFFFFRLFRFFFFFFFFFLFFFFFFLFRLFFFLRLRFFRFLFFRFFFLFFLRFFFRLFLFFFFFRFLRFFFLRLRFFRLRRFFLLRRLFFFLFFFFFLFFLFRFFRLFRFFRFFFFFLFFRLFFLRFRFFFFRFFFFLFLRFFLFRFRFLLFRFFFLRFRFFLLFRFLFRRFLFFLFFFFFRRLFLRFFFFFFFLFRRLFLLRFFFFFFFRLLFFRLFRFFFRFFFFRRLLFFLFFFFFFFFRFFFRFFFLFFLFFFFFFFFFRFFFLFFFFFLFFFFFFFFRLFLRFRFLRFFFFRLLFFRFFFFFFFFFFFFFFFFLFFLRFFLRFFLFRFLRFLRFFFFFRFFFFFLFFLRFFLFRFFRFLFLRFLRFLFRFRRLFLRLFRFFRFFLFLFRFFFFRFFFLFRFLRFFFFLRLFLFRFLLFRFFRFFFFRRLLFLRFFFFFRFFLFFFRFLFLFFFFFRRFLLFRLRLFFLFFFFFFFFRRLFFFFRFFFFFLRFRLFFFLFFFFFFFFFLFFFFFLFFFFRLRFFFFFFFFFFRFFFFFRFFFFLFFFRFFFFFFRLFFRFLFFLFLRFFFLFFRFFLFLRFLFFRRFLRFFRFFLFRLFRLFLFFFFFRLRLFRFFFFFFFLFRFFLFFFFFFRFFFFFFFFLRFLLRFLFFFFFRRLFFFFFFRFFLFLFRFFFFFLRFFLRFRLFFRFFLFRRFFFLFFFRFFFRFLFFFLFFFFFLFFFRRLFFFFFFLFRRLFFFLFFFFFRLRFFLFRFFLRFFFFRFLLFFRFFFFRFRFFFLFLFFFFFFLFFFFLFRLRLLRFFFFFFFFFRRFFFFFLFFFRFFLLFFFFRFFFFLFLRFFRFFFFFFFFFFFFFFFFRRFLRLRLFLFFFRFFFFRLRFLLRRFLFLRFLFFRLFFFFFFLFLFFFFRFFFFRFFFFLFRRFLFFFFRLLFFFFFLFLFFFRFRFRLFLFFFRRLFRFRLFFFLFRFRFLRLFFFFLFRLFFRFLFFFFFFFFFFLLFRLFRFFFRFFFFFFRFRLFFFLFFFFFFFFFFFFFFFFRRFFLFFFLFFFRRLFFRFLFFFLFFFLRFFLRRFLFRLRRFFFLLFFFFFRFRFFFFFFFLFRFFFLFRRFLFFLRFLFFFLFFRLFFFFFFRRLRLFFLRL\n", - "Step(x=0, y=0, dir=)\n" - ] - }, - { - "data": { - "image/png": "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\ny70FIvK9iGwTEW125yUVFRXBFiEkmTt3Lrm5uWRmZpKVlUWHDh24+eabde+iifBkVu0l4GnAdUfP\ndGCtUmqeiEzDHr19uoiMBDorpbqKyCDgBWCwv4UOd0REW3nWQVJSErGxsWzatCnYorRIvIreDowG\nnAErX3FcO9NfdTz3JZAkIhn+EbX5MHz4cGNjVNu2bY3zjIwM47y+rdd6SFI35eXllJaWBqz8Hj16\nGP+jtLQ0RITVq1cHpK6cnBxj05yzzvPOOy+g7fMVb9ftWiul8gCUUsdFpLUjva7o7Xnei9j8WLt2\nLf3796d169akpqZSWFiIzWYjLS2NM2fOkJ+fzyeffFJvGdofhnucX6bly5dTXV3NL37xC2JjY+vM\nf/ToUdavX09ERASpqalceeWVxr2qqiree+89bDYb5eXlREdHs3fvXkaOHInVaiUtLY1ly5Yxd+5c\nRowY4bPsx44dY926dcbu2pdffhmAK6+8klOnThEREcHq1avZs2cP/fv397m+QODvhf5GRW8P52DM\n8+bNq/FyuvLll18yeHD9IzVtxeieiRMn8vbbb3PzzTcDkJqaSkFBQZ35e/fuzalTp4zrZ599lrvu\nuguABx98kAULFtTIb7FYeP/99zGZ7J3vd955x28Tq3369KnlRe2iiy5i2bJlxrWzp+FP/BmMuU6v\n1a4H0BHY4XK9G8hwnLcBdjvOXwDGuOTb48znpkwVrgBq7dq1dd7/4osvVH3tx65k1Z133hkI8cKG\na6+9VgEqIyNDVVZWGul/+tOfjM8QUBMmTFBK2T/Xxx57zMg3atSoev8PSimVmJiobrjhhkbLVlVV\npRITE2vIAaixY8fW+xygvv7660bX1xgcbfbou3/u4WkPQ6jZe3gXuB34m+PvKpf0u4E3RWQwcFo5\nhi7NmcOHD7N48eIafheioqKw2WxUVlZisVgwmUxUVlby29/+FqDenaY2m63e+r744gvGjBnDiy++\nyAsvvODXtoQTr732Go8++ijz589n7969LF++nKioKObNm0dqaip33HEHMTExPPzww8YzH330kf3F\nj4xk9+7dDdZx5swZr3yrlpSUcObMGaZMmYLNZiMuLo6oqCiP9gc19H4ElYY0CvA6cBSoAA4DE4EU\nYC2wF1gDJLvkfwbYD2wH+tdTbkC1qD/p2bNnrV+Khg5fehhKKTV27FgVHx/v76aEJYDq06ePAlRk\n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\nDI1G4zH/D8E8vVutsQ6KAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "w_tour = rw\n", - "w_trace = trace_tour(w_tour)\n", - "mks = mistake_positions(w_trace)\n", - "while len(mks) > 3:\n", - " print(len(mks))\n", - " w_tour = trim_loop(w_tour)\n", - " w_trace = trace_tour(w_tour)\n", - " mks = mistake_positions(w_trace)\n", - "print('{}\\n{}\\n{}'.format(w_tour_start, w_tour, trace_tour(w_tour)[-1]))\n", - "plot_trace(trace_tour(w_tour))" - ] - }, - { - "cell_type": "code", - "execution_count": 110, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Mistake(i=1219, step=Step(x=0, y=5, dir=))]" - ] - }, - "execution_count": 110, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mks" - ] - }, - { - "cell_type": "code", - "execution_count": 111, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'LFFFFLLRLFFLRL'" - ] - }, - "execution_count": 111, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trim_loop(w_tour)" - ] - }, - { - "cell_type": "code", - "execution_count": 112, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nRK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "lc = trace_tour(square_tour(a=10))\n", - "rw = guided_walk(lc, wander_limit=4, locus_limit=2)\n", - "plot_trace(trace_tour(rw))" - ] - }, - { - "cell_type": "code", - "execution_count": 113, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(326,\n", - " 80,\n", - " 'RFLLRFFLFRFFLFFFRFLFRFFLRLLFLRRFFFFFLFFFFFLFRFRLFLRFFRLLFFLFFFRFFFRFFLFFRLFLRLFF',\n", - " [Step(x=-1, y=0, dir=),\n", - " Step(x=0, y=0, dir=)])" - ] - }, - "execution_count": 113, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rw_trimmed = trim_all_loops(rw)\n", - "plot_trace(trace_tour(rw_trimmed))\n", - "len(rw), len(rw_trimmed), rw_trimmed, trace_tour(rw_trimmed)[-2:]" - ] - }, - { - "cell_type": "code", - "execution_count": 114, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1, Step(x=0, y=0, dir=))" - ] - }, - "execution_count": 114, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rw_trimmed = rw\n", - "mks = len(mistake_positions(trace_tour(rw_trimmed)))\n", - "while mks >= 4:\n", - " rw_trimmed = trim_loop(rw_trimmed, random_mistake=True)\n", - " mks = len(mistake_positions(trace_tour(rw_trimmed)))\n", - " \n", - "# rw_trimmed = trim_all_loops(rw)\n", - "plot_trace(trace_tour(rw_trimmed))\n", - "mks, trace_tour(rw_trimmed)[-1]" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def trim_some_mistakes(tour, mistake_limit):\n", - " trimmed_tour = rw\n", - " mistake_count = len(mistake_positions(trace_tour(trimmed_tour)))\n", - " while len(mistake_positions(trace_tour(trimmed_tour))) > mistake_limit:\n", - " trimmed_tour = trim_loop(trimmed_tour, random_mistake=True)\n", - " return trimmed_tour" - ] - }, - { - "cell_type": "code", - "execution_count": 116, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(3, Step(x=0, y=0, dir=))" - ] - }, - "execution_count": 116, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQ0AAAEACAYAAACpjCPWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGcBJREFUeJzt3XtwVfX57/H3EyAJIIKXAgINAg5qqRdoEabaYgGPF3rU\ncnC02gPVYhmV46X1J3V0iranM1pHfyg/qWOpCkyxCipehspFxUtPrRpuRQWiyL0EuSg3E0jynD+S\n8IsQyPpmr+y1svN5zewhG9Z3rYe9wydrb9azH3N3RESiyku6ABFpXhQaIhJEoSEiQRQaIhJEoSEi\nQRQaIhIkcmiY2Z/NrNTMltfzZ7ebWZWZHR9veSKSNiFnGk8CFx76m2bWAxgOrIurKBFJr8ih4e7v\nADvr+aP/BP4jtopEJNUyek/DzP4nsMHd/xVTPSKScq0bu9DM2gJ3ARfU/e2MKxKRVGt0aAB9gJOB\nZWZmQA+g2MzOcfeth25sZmpyEWlG3L3ek4DQlydWc8PdV7h7V3fv7e69gI1A//oCo04RLf42ceLE\nxGtI+qbHIP2Pw9GE/JfrTOD/AX3NbL2ZXXtoJqCXJyI5L/LLE3e/uoE/7515OSKSdroiNMvOP//8\npEtInB6Das31cbCGXr/EdiAzz9axRCQzZobH9EaoiLRwCg0RCaLQEJEgCg0RCaLQEJEgCg0Rqq9W\nfuedd9i/f3/SpaReJr0nIqm1b98++vbty6ZNm4LWnXjiiaxcuZITTjihiSpr/hQakpMeffRRNm3a\nxCWXXBLpIqrPP/+cRx99lG3btrFkyRKGDx/e9EU2U7q4S3LS0qVL6d+/P8XFxQwYMCDyOjNjwYIF\nLT40dHGXtDhnnXUWAGeffXbCleQehYaIBFFoiEgQhYaIBFFoiEgQhYaIBMlowpqZ/cHMPjazpWb2\nnJkd2zRlikhaZDphbT7Qz93PBkqAO+MqTETSKaMJa+6+0N2rau6+S/UYAxHJYXG+p3Ed8LcY90d5\neTlbtx5xIkK9Kisr2bx5c9Aad2fjxo1BawA2bNgQvGbjxo0NfkT8of79739TUVERtGb79u3s27cv\naM2ePXvYubO+yZvxqqqqCu4JaexzFLLm1VdfBeD3v/998HFalMBZCD2B5fX8/l3Acw2s9RCLFi3y\nmgFLQbfjjz8+eE1RUVHwml69egWv6dGjR/CaTp06Ba/J5u3+++8Pel63bt3qXbp0CT5Oz549s/Z3\neuyxx4L+TrkIcD/Cv+WMG9bMbAxwCTC0oW3vueeeg1+ff/75R20kuuWWWw7+RL7wwsOG1R+pFjp0\n6MCsWbMYNmwYrVtH++uddNJJPPXUU/Tv35/OnTtHWtOzZ08ef/xxioqKOP300yOtKSoq4k9/+hPt\n27fnvPPOi7Sma9euTJs2DYj+OHTq1InXX3+dzz//PPKatm3b8tlnn7Fs2bLIa1577TUmTJjAuHHj\n6NixY6Q1kydPprS0FIAhQ4ZQWFgYaV337t154okn6NevHz16NPwqeMOGDXz00UdA9fN75plnRjrO\n4MGDGTt2bKRtc8miRYtYtGhRtI2PlCb13agew/ivOvcvAj4EToiwNijpTjvtNA9dI9lFzU/msrKy\nyGvuvvvurDyvCxcudMDnzZvX5MfKRRzlTCPTCWuTgWOABWa22MymRN2fNH/f+973ACgoKEi4ksMN\nHVp94tvSu1WbQqYT1p6MsRYRaQZ0RaiIBFFoiEgQhYaIBFFoiEgQhYaIBFFoiEgQhYaIBEllaLg7\nK1euBKqbqCR3PPDAAwCsWbMm4UqksVIZGmZGr169gHRebSjVjjnmmOA1l156KQDt27ePu5yv8Zq+\npaqqqga2lFCpDA3gYONYmzZtEq5EjmTt2rUAfPXVV5HXnHrqqQB06dKlKUo6aPbs2QA899xzTXqc\nlii1ofHll18mXYI0YPXq1QAcOHAg4UoOV3uGUVlZmXAluSe1oSHpV9uwduyx6fto2CuvvBKAq666\nKuFKco9CQ0SCKDREJIhCQ0SCKDREJIhCQ0SCKDREJEimYxmPM7P5ZrbKzOaZWbSPpBaRZivTsYy/\nBha6+6nA62gso0jOy2gsI3AZMK3m62nA5XEUVbdhbf/+/XHsUlLiiSeeADg4+0San0yHJXV291IA\nd99iZt+IoSYA8vPz2b9/PxUVFeTn50das3v3bsaPH8+nn34aafu///3vAFx99dWsW7cu0pri4mLK\nysoYM2YMn3zySaQ1a9euZdOmTdx+++0HuzzTZsWKFYwaNYpVq1Zx7rnnRlrz4YcfAtUNhlHX1HYt\n7927t3GFSuKsthsw0sZmPYGX3f3Mmvs73P34On++3d1POMJanzhx4sH7DU1Y++EPf0hxcTG7du2K\nXN/o0aOZMWNG5O1r9ejRI3hO6CmnnBI5NOpavnw5Z5xxRvC6ptanT5+statnIzwXLlzIBRdcwIIF\nCzT7JIJDJ6zde++9uLvVu/GRpijVd+OQWa7Ax0CXmq+7Ah8fZW3QhKfGTFijZuLXp59+Gmn7qqoq\nLy0tDTqGu/uWLVsatQbw4uLi4LXZAHh+fr5/+eWXQWsAX7VqVRNW1jiPPvqoAz558uSkS2mWiGPC\nWg2rudV6CfhZzddjgBcD9xerG2+8EYDevXtH2t7MIs9urasxbd1N3Qoel5Dms9qGtb59+zZVOY12\nww03AP/9PSHxyXQs433ABWa2Chhec19EclimYxmhOixEpIXQFaEiEkShISJBFBoiEkShISJBFBoi\nEkShISJBUhsatQ1ruTLspvaS87feeivhSg7nNa0Eag6UKDJtWGsSXqcf5s4776SwsLDBNbNnz051\n5+SSJUsAWLVqVcKVHK5uWFRUVNC6dbRvi7y81P7MOahDhw6MGDGC008/PdL27dq1Y9KkSfTr1y9y\nE15+fj4zZ84kPz//4AS5huTl5bFo0SJKSkr4+c9/HmmNu1NSUsKcOXO44447Iq0xM2688cZGXfl8\n1EKycSOwj2T69OkHextCbj/96U/DL7TPgsrKSgf8H//4R9Kl1OuMM87wgQMHBq358Y9/7N26dfOq\nqqomqqrxqqqqvE+fPsHfPwUFBY36vkvzrXPnzl5ZWRn0+HGU3pOgLtdMmJk35bG++OILNm/ezLe+\n9a0mO0amzIzi4mIGDBiQdCmHMTPy8/MpLy8PWgPVn40R60+ymLg77733HgMHDgw6KyouLubb3/52\n0BzhFStWUFRUFNS7s2bNGtq1a0fXrl0jryktLWXPnj306dMn0va1z9GGDRvo0aNH5OOY2RG7XHMm\nNJqDXAuNAQMGsGTJElr685pmF1xwAQsXLgx+jo4WGul/USqp1bZt26RLkAZEeT8wlEJDRIIoNEQk\niEJDRIIoNEQkiEJDRILEEhpmdpuZrTCz5Wb2FzOLNnNARJqdjEPDzLoB/wcY4NWjDVoDV2W6XxFJ\np7henrQC2ptZa6AdsDmm/eaMrVu3AtVXDqaVGtYkiowb1tx9s5k9CKwH9gHz3X1hxpXlmHnz5gEw\nf/58Ro8enXA1X1f3KtDXX3+dVq1aNbhm1qxZfPbZZ01ZlqRUxqFhZp2onunaE/gSmG1mV7v7zEO3\nveeeew5+3dCEtVxz5ZVXMnr06IPzONKkoKCAW2+9lUmTJjFs2LCgtVddpVeiadatWzd69uxZ3Whm\n9Q9Mg8MnrB1Nxr0nZjYKuNDdr6+5/7+BQe4+/pDt1HuS4t6TUMuXL2fnzp0MGTIk6VLkKGqDYt26\ndRQVFQWtO1LvSRyfp7EeGGxmhUA5MAx4P4b9SoqdeeaZSZcgEfTv358lS5YEBUZDMn4j1N3fA2YD\nS4BlVI9tfDzT/YpI5rp37x77PmP55C53vxe4N459iUi66YpQEQmi0BCRIAoNEQmi0BCRIAoNEQmi\n0BCRIAqNLNm9ezcAGzduTLgSkcwoNLJk9uzZAEyfPj3hSiRpjz32GK+99lrQmlmzZvHss88GjSJ4\n4403WLduXWh5DdLckyzZvXs3J554IvPmzWtRjXq5zt3p27fvwVm9afSd73yHDz74IGhNU/eeSAQd\nOnRg//79QRO4JP0++OADPvnkEwoKCti7d2+kNVOmTOHUU09l6NChR+08reuZZ54B4Iorrog8Le61\n116jpKSEsWPHRto+Kp1pZFEudblKtaqqKlq1asVll13GnDlzki4nNpqwJtJEan/qp3mGcNwUGiIS\nRKEhIkEUGiISRKEhIkEUGiISJK4Jax3NbJaZfWxmH5rZoDj2KyLpE9fFXQ8Dc939ijoDk0QkB8Ux\n96QD8H13/xmAu1cAuzLdb66pnV62a5ceGmne4nh50hvYZmZPmtliM3vczNrGsN9G2bRpEy+//HJQ\nY8/OnTuZPXs2lZWVkdfs27ePZ599lrKyskjbP/300wA89NBDkY8hkkZxvDxpDQwAbnL3D8xsEvBr\nYGIM+w7yzjvv8IMf/CAoMADatWvHvn37mnwNwB133BG8RtKtoKCA9u3bJ11G1sQRGhuBDe5e20Y3\nG5hQ34ZNPZZx5syZuDuDBg3i3nvvjdzYs2PHDh5++GF+9atfRW4o27t3L5MmTWLMmDH06NEj0pru\n3bu3qMuNW4IlS5ZQXl7OI488wl133ZV0OY2W1bGMAGb2JnC9u682s4lAO3efcMg2Td6wdtNNNzFl\nypTgMw2RxiovL6ewsJDvf//7vPXWW0mXE5tstMbfDPzFzNoAa4BrY9qvSKoVFBQAcN555yVcSfbE\nNWFtGTAwjn2JSLrpilARCaLQEJEgCg0RCaLQEJEgCg0RCaLQEJEgORUatU1hItJ0cio0pk6dCsDK\nlSsTrkSaG3enuLiYioqKoHXLly9voorSK6dCY/z48XTo0IHevXsnXYokrKysjN69e2NmkW55eXl8\n97vf5aSTToq8xsw466yzACgqKkr4b5w9OTVhraqqit27d5Ofn590KZKwKVOm8NlnnzF06FDOOeec\nBrffunUrTzzxBOPHj4/8cQf79+/noYce4u6772bcuHGZltxs5NSENTWsSa333nuPQYMG8e677zJo\nkD59MpQmrEmLM3DgwK/9KvFRaIhIEIWGiARRaIhIEIWGiARRaIhIkNhCw8zyakYYvBTXPkUkfeI8\n07gF+CjG/YlICsU1y7UHcAkwNY79iUh6xXWm8Z/AfwCJXoo5ZcoUANasWZNkGSI5LePQMLMRQKm7\nLwWs5paIa665BoDOnTsnVYKkRG23amjXqjQsjoa1c4FLzewSoC3Qwcymu/voQzds6glrHTt2BOCY\nY46Jdb/S/MyYMQOA6dOnM3bs2ISrSb+sT1g7uDOzIcCv3P3Sev5MDWuSNXPnzmXEiBG88sorjBgx\nIulymh01rEmLc/HFF3/tV4lPrJ+n4e5vAm/GuU8RSRedaYhIEIWGiARRaIhIEIWGiARRaIhIEIWG\niARRaIhIkNSPMKioqKB162iXk5hVX8C2adMmunXrFnwsyR3uTl5eHpWVleTl6WdjqKNdEZraYUkl\nJSUMHz6c9evX0759+0hr2rRpw4EDBzQsSQ62EqilIH6pDY1rr72W9evXA7B3797I66ZMmcKJJ57Y\nVGVJMzFnzhwAXnzxRUaOHJlwNbkltaGxfft2AL766isKCwsTrkaam3379gGwe/fuhCvJPal9T+P0\n009n5cqVOr2URtF7GplRl6uIxEahISJBFBoiEkShISJBFBoiEkShISJB4hhh0MPMXjezj8zsX2Z2\ncxyFiUg6xXFxVwXwS3dfambHAMVmNt/dV8awbxFJmYzPNNx9S82gJNx9D/Ax0D3T/a5cWZ05Bw4c\nyHRXIhKjWN/TMLOTgbOBf2ayn7pXgZaXl2dUk4jEK7bek5qXJrOBW2rOOA4TdcKamTFs2DAWL16s\naWnSKG+//fbBX4cMGZJwNemX9QlrZtYaeAX4m7s/fIRt1HsiWTNp0iRuu+02HnzwQX75y18mXU6z\nc7Tek7hCYzqwzd2P+OwoNCSb1LCWmSZtWDOzc4FrgKFmtsTMFpvZRZnuV0TSKeP3NNz970CrGGoR\nkWZA520iEkShISJBFBoiEkShISJBFBoiEkShISJBUvtp5LXT0qqqqg5+LRKVLu7KTLObsFY3XO6/\n/37atm3b4Jo5c+ZQUVHBY489Rr9+/ZqyPKlRVVXFU089FXm2yNy5c9m1axfXXHMNlZWVkdb885//\npLi4mJtvvpmKiopIa1avXs0LL7wAwMMPPxwpNLZt28bkyZN55JFHGD16dKTjtFSpPdOYOnUq119/\nffBxWrVqFfmbSzIzevRoZsyYkZVj5eXlUVVVlZVjFRcXM2DAgKwcK62a5dyTsWPH4u6Rb1u3buWK\nK66I/BNMMlcbGKWlpZGeo+3bt/P+++8HPa979+7l7bffpqKiIvKaAwcOcN111wHw29/+NtKaqqoq\n3nzzTQB27NiR2GPaHKT2TKMxbrrpJqZMmaImtyw544wzWLFiRSof7/3791NQUEBZWRkFBQWR15kZ\nCxYsYPjw4U1YXfo1yzMNSb9jjz026RKOqE2bNl/7VeKj0BCRIAoNEQmi0BCRIAoNEQmi0BCRILGE\nhpldZGYrzWy1mU2IY58ikk5xfEZoHvBfwIVAP+AnZnZapvsVkXSK40zjHKDE3de5+wHgr8BlMew3\n2Lvvvgugq0KlUb744gsAPvzww4QrSbc4Gta6Axvq3N9IdZBk3bJlywB46aWXOOWUUxrcfunSpbzx\nxhvccMMNFBYWRjrG2rVrmTlzJuPHj498cdOOHTt45JFHmDBhAueck8hDIxEsWLAAgPnz53PLLbck\nXE16xREa9V1qWu91xVEnrDXWM888w6hRoxg5cmTQuieffLJRxwq9fPr5559n3bp1FBUVBR8vjfr0\n6cO2bduSLqNea9euJT8/n7Vr19K7d+9Iay6//HKguh2hpQmZsBbUPFTfDRgMvFrn/q+BCfVs52mz\nadMmnzZtmpeXl0des3PnTp86darv2bMn8pqvvvrKp06d6oAXFxc3ptRUovqHg5eWliZdymEmTpzo\ngP/mN78JWgf4ggULmqiq5qPm32u9/+Yzblgzs1bAKmAY8G/gPeAn7v7xIdt5psdq7swsp9quTzrp\nJLZs2ZLKhrVdu3bRsWNHdu7cSadOnSKvU8NatSZtWHP3SmA8MB/4EPjroYEhuSnqaX8SOnToAKS7\nqa65iuWTu9z9VeDUOPYlIummK0JFJIhCQ0SCKDREJIhCQ0SCKDREJIhCQ0SCKDSyZO/evQBs2bIl\n4UrkSMrKygDYvHlzwpWkm0IjS5599lmgegiUpNOLL74INK4XqSVRaGTJyJEjKSwsZPz48UmXEps+\nffpE6iZOwtatW7/2axQ/+tGPaNeuHbfeemtTlZUTFBpZ0rFjR8rKyoL6INJuxowZfPLJJ5SWliZd\nymH++Mc/fu3XKNq3b8++ffto3759U5WVExQa0mi1g4i6dOmScCWHGzduHAC/+MUvEq4k9yg0pNEG\nDhyYdAlH1LVrV6C6E1fipdAQkSAKDREJotAQkSAKDREJotAQkSAZhYaZ/cHMPjazpWb2nJnps9VE\nclymZxrzgX7ufjZQAtyZeUkikmYZhYa7L3T3qpq77wI9Mi8pN1VUVAD/3bgm6VM7mW/Pnj0JV5Ju\ncb6ncR3wtxj3l1NmzpwJwAMPPBBpe3dn3rx57Ny5M+g4b731VnCX5uLFi1m9enXQmpKSkmbxj+uV\nV16hvLw80rbPP/88EP05aqkanHtiZguAutcJG9VDcu5y95drtrkLGODu/+so+2nRc0+2bNnCySef\nHPkbuFZhYeHBlu006tWrF2vWrEm6jMO4O3l5jfuZOHfuXC6++OKYK2pejjb3pMERBu5+QQM7HwNc\nAgxtaF9NPZYxzbp27cqKFSsoLi6OtH1ZWRm/+93vuP322znuuOMiH+eee+7h2muv5Zvf/GbkfzST\nJ09m8ODB9O/fn9ato021ePrppzn22GO57777IteWTWbGokWLuO222xg1ahR9+vSJtK5nz54MHjy4\niatLn5CxjBlNWDOzi4AHgR+4+/YGtm3RZxoizcnRzjQyDY0SIB+oDYx33f3GI2yr0BBpJposNAKL\nUGiINBNNOstVRFoWhYaIBFFoiEgQhYaIBFFoiEgQhUaWRb2AJpfpMajWXB8HhUaWNddvlDjpMajW\nXB8HhYaIBFFoiEiQrF4RmpUDiUgsEr+MXERyg16eiEgQhYaIBMlqaJjZRDPbaGaLa24XZfP4STKz\ni8xspZmtNrMJSdeTFDNba2bLzGyJmb2XdD3ZYmZ/NrNSM1te5/eOM7P5ZrbKzOaZWccka4wqiTON\nh9x9QM3t1QSOn3Vmlgf8F3Ah0A/4iZmdlmxViakCznf3/u5+TtLFZNGTVD//df0aWOjupwKv00w+\nzT+J0Kj3Hdkcdw5Q4u7r3P0A8FfgsoRrSorRAl8Wu/s7wKGfEn0ZMK3m62nA5VktqpGSePJuqhmu\nNLW5nI7FoDuwoc79jTW/1xI5MM/M3jez65MuJmGd3b0UwN23AN9IuJ5Ion2KbICjfXo5MAX4rbu7\nmf1f4CHg53HXkEL1nV211P/r/p67bzGzbwALzOzjmp/C0kzEHhoNfXp5HX8CXo77+Cm1ESiqc78H\nEDacJEfU/ETF3T83sxeofunWUkOj1My6uHupmXUFtiZdUBTZ/t+TrnXujgRWZPP4CXofOMXMeppZ\nPnAV8FLCNWWdmbUzs2Nqvm4P/A9azvcAVJ9x1j3rfAn4Wc3XY4AXs11QY8R+ptGAP5jZ2VS/g74W\nGJfl4yfC3SvNbDzVs2/zgD+7+8cJl5WELsALNS0FrYG/uPv8hGvKCjObCZwPnGBm64GJwH3ALDO7\nDlgPXJFchdHpMnIRCdLi/utLRDKj0BCRIAoNEQmi0BCRIAoNEQmi0BCRIAoNEQmi0BCRIP8fr9Ji\ni19zoDMAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rw_trimmed = trim_some_mistakes(rw, 4)\n", - "\n", - "plot_trace(trace_tour(rw_trimmed))\n", - "len(mistake_positions(trace_tour(rw_trimmed))), trace_tour(rw_trimmed)[-1]" - ] - }, - { - "cell_type": "code", - "execution_count": 117, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n", - "# tours_filename = 'tours-with-mistakes.txt'\n", - "\n", - "# try:\n", - "# os.remove(tours_filename)\n", - "# except OSError:\n", - "# pass\n", - "\n", - "# success_count = 0\n", - "# while success_count < 100:\n", - "# lc = trace_tour(random.choice(patterns)())\n", - "# rw = guided_walk(lc)\n", - "# if rw:\n", - "# rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n", - "# if len(rw_trimmed) > 10:\n", - "# with open(tours_filename, 'a') as f:\n", - "# f.write(rw_trimmed + '\\n')\n", - "# success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nlqVxt930NPWIREPDG4SGhjJq1CjKysrcxps4cSIffPAB/fv3Jzc3l7CwMAoKCvDz86OqqorKykrA\nquFnMpk4fvy4/B0REUFoaKjUDvzvf/8LIOOosgNPVNtbTMPXDGdq+CIxMTH07NmT0tJS1q1bx5df\nfulRumeffZbKykry8vIoLi7m5MmT5OTk2L04VDNfer0ei8VCbm4uhYWFVFRU8Pzzz0vHHbXp06dP\nndf36aH+Sy+9JIctmnBPwxdRFEUq2SiKUq8O6uWXX+aWW25h2bJl6HQ6FEXhm2++YevWrQwePBiw\ndnxRUVF89tlnDm2g9rLdpEmTWL58OWlpaXVe22cb/ueff87MmTMBq0cSbcivcbFhNBoZOnQoJ06c\ncDi3ZcsWu9833XQTX3zxhcu82rdvz/LlywGYNm1andf22YafnZ0NWN94paWl5OXlYTAYiIyMvMAl\n09BwTWFhIadOncLf35+amhrZSxcWFmIymezW+8+cOcOJEydITEzkyy+/pLKyku+//57p06eTnZ1N\n69atWbt2LTfeeCPZ2dnk5ORQU1ODn58fFouFgoICed36Ot702eW8N954g8mTJ8sbVfnuu++48sor\nvVlEDQ2vEBAQIOflzYmr9tUi9+ObzWZphEP9DdaNCRoavoi6ScdisciNNxaLRergCyFkvVbj2MZV\nz7mKUztf9bMh+GzDVxu87SYd2+MaGr6GMy2+2lZza6/728atrdlXO07tfGsfqw8+24rUBl9bgUdb\n1tNoafiiRyefbfi11+/VT026r9HS8EXrUT7b8Gv3+Oqn1vA1Whq+WGd9tuHXfkt27twZ4IJITTU0\nPOG1116jS5cudO/e3c7NljpN7dKlC4899phvvAhc2eRSA5AEbAJ+A3YD084djwA2AAeA9UC4i/R1\n2gZzxuLFi6VdsW7duknbY2PHjm1QfhoaTQ029vJuvvlmeby0tFTodDq3DjWaqjzCRbv2RIGnBnhY\nCPGroighwM+KomwAJgFfCyHmK4ryOPAk8IQ3Xka2vPrqq1x99dV07dqVjz/+2DfelhqXLDU1Nbzz\nzjuUl5djNBqpqamRyjoA//znP7n99tvtevzg4GC5KqUoik+sTNXZ8IUQp4HT576XKoqyD+so4GZg\nyLlo7wCb8WLDV3WVa9sO+8Mf/uCtS2ho1JuePXuyZ88eu2PqdliAQYMGERkZSWJiokNaW0H1hd5m\n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\nA8MAAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "lc = trace_tour(square_tour())\n", - "rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n", - "plot_trace(trace_tour(rw))" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "rw_trimmed = trim_some_mistakes(rw, 1)\n", - "plot_trace(trace_tour(rw_trimmed))" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Mistake(i=702, step=Step(x=-1, y=1, dir=))]" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mistake_positions(trace_tour(rw_trimmed))" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "patterns = [square_tour, cross_tour, quincunx_tour, heart_tour_func]\n", - "tours_filename = 'tours-open.txt'\n", - "\n", - "try:\n", - " os.remove(tours_filename)\n", - "except OSError:\n", - " pass\n", - "\n", - "success_count = 0\n", - "while success_count < 100:\n", - " lc = trace_tour(random.choice(patterns)())\n", - " rw = guided_walk(lc, seek_step_limit=0, return_anyway=True)\n", - " if rw:\n", - " rw_trimmed = trim_some_mistakes(rw, random.randint(0, 15) + random.randint(1, 3))\n", - " if len(rw_trimmed) > 10:\n", - " with open(tours_filename, 'a') as f:\n", - " f.write(rw_trimmed + '\\n')\n", - " success_count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2+" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/06-tour-shapes/tour-shapes-solution.ipynb b/06-tour-shapes/tour-shapes-solution.ipynb new file mode 100644 index 0000000..9a0a4e1 --- /dev/null +++ b/06-tour-shapes/tour-shapes-solution.ipynb @@ -0,0 +1,674 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given a sequence of {F|L|R}, each of which is \"move forward one step\", \"turn left, then move forward one step\", \"turn right, then move forward one step\":\n", + "1. which tours are closed?\n", + "2. what is the area enclosed by the tour?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import collections\n", + "import enum\n", + "import random\n", + "import os\n", + "\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Direction(enum.Enum):\n", + " UP = 1\n", + " RIGHT = 2\n", + " DOWN = 3\n", + " LEFT = 4\n", + " \n", + "turn_lefts = {Direction.UP: Direction.LEFT, Direction.LEFT: Direction.DOWN,\n", + " Direction.DOWN: Direction.RIGHT, Direction.RIGHT: Direction.UP}\n", + "\n", + "turn_rights = {Direction.UP: Direction.RIGHT, Direction.RIGHT: Direction.DOWN,\n", + " Direction.DOWN: Direction.LEFT, Direction.LEFT: Direction.UP}\n", + "\n", + "def turn_left(d):\n", + " return turn_lefts[d]\n", + "\n", + "def turn_right(d):\n", + " return turn_rights[d]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Step = collections.namedtuple('Step', ['x', 'y', 'dir'])\n", + "Mistake = collections.namedtuple('Mistake', ['i', 'step'])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def advance(step, d):\n", + " if d == Direction.UP:\n", + " return Step(step.x, step.y+1, d)\n", + " elif d == Direction.DOWN:\n", + " return Step(step.x, step.y-1, d)\n", + " elif d == Direction.LEFT:\n", + " return Step(step.x-1, step.y, d)\n", + " elif d == Direction.RIGHT:\n", + " return Step(step.x+1, step.y, d)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step(s, current):\n", + " if s == 'F':\n", + " return advance(current, current.dir)\n", + " elif s == 'L':\n", + " return advance(current, turn_left(current.dir))\n", + " elif s == 'R':\n", + " return advance(current, turn_right(current.dir))\n", + " else:\n", + " raise ValueError" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def trace_tour(tour, startx=0, starty=0, startdir=Direction.RIGHT):\n", + " current = Step(startx, starty, startdir)\n", + " trace = [current]\n", + " for s in tour:\n", + " current = step(s, current)\n", + " trace += [current]\n", + " return trace " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def positions(trace):\n", + " return [(s.x, s.y) for s in trace]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def valid(trace):\n", + " return (trace[-1].x == 0 \n", + " and trace[-1].y == 0 \n", + " and len(set(positions(trace))) + 1 == len(trace))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def valid_prefix(tour):\n", + " current = Step(0, 0, Direction.RIGHT)\n", + " prefix = []\n", + " posns = []\n", + " for s in tour:\n", + " current = step(s, current)\n", + " prefix += [s]\n", + " if (current.x, current.y) in posns:\n", + " return ''\n", + " elif current.x == 0 and current.y == 0: \n", + " return ''.join(prefix)\n", + " posns += [(current.x, current.y)]\n", + " if current.x == 0 and current.y == 0:\n", + " return ''.join(prefix)\n", + " else:\n", + " return ''" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mistake_positions(trace, debug=False):\n", + " mistakes = []\n", + " current = trace[0]\n", + " posns = [(0, 0)]\n", + " for i, current in enumerate(trace[1:]):\n", + " if (current.x, current.y) in posns:\n", + " if debug: print(i, current)\n", + " mistakes += [Mistake(i+1, current)]\n", + " posns += [(current.x, current.y)]\n", + " if (current.x, current.y) == (0, 0):\n", + " return mistakes[:-1]\n", + " else:\n", + " return mistakes + [Mistake(len(trace)+1, current)]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def returns_to_origin(mistake_positions):\n", + " return [i for i, m in mistake_positions\n", + " if (m.x, m.y) == (0, 0)]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sample_tours = ['FFLRLLFLRL', 'FLLFFLFFFLFFLFLLRRFR', 'FFRLLFRLLFFFRFLLRLLRRLLRLL']" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def bounds(trace):\n", + " return (max(s.x for s in trace),\n", + " max(s.y for s in trace),\n", + " min(s.x for s in trace),\n", + " min(s.y for s in trace))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot_wh = {Direction.UP: (0, 1), Direction.LEFT: (-1, 0),\n", + " Direction.DOWN: (0, -1), Direction.RIGHT: (1, 0)}" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def chunks(items, n=2):\n", + " return [items[i:i+n] for i in range(len(items) - n + 1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_trace(trace, colour='k', xybounds=None, fig=None, subplot_details=None, filename=None):\n", + " plt.axis('on')\n", + " plt.axes().set_aspect('equal')\n", + " for s, t in chunks(trace, 2):\n", + " w, h = plot_wh[t.dir]\n", + " plt.arrow(s.x, s.y, w, h, head_width=0.1, head_length=0.1, fc=colour, ec=colour, length_includes_head=True)\n", + " xh, yh, xl, yl = bounds(trace)\n", + " if xybounds is not None: \n", + " bxh, byh, bxl, byl = xybounds\n", + " plt.xlim([min(xl, bxl)-1, max(xh, bxh)+1])\n", + " plt.ylim([min(yl, byl)-1, max(yh, byh)+1])\n", + " else:\n", + " plt.xlim([xl-1, xh+1])\n", + " plt.ylim([yl-1, yh+1])\n", + " if filename:\n", + " plt.savefig(filename)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 1" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "226" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with open('06-tours.txt') as f:\n", + " tours = [t.strip() for t in f.readlines()]\n", + "len(tours)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61762" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sum(len(t) for t in tours if valid(trace_tour(t)))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 loop, best of 3: 209 ms per loop\n" + ] + } + ], + "source": [ + "%%timeit\n", + "sum(len(t) for t in tours if valid(trace_tour(t)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 2" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 loop, best of 3: 1min 29s per loop\n" + ] + } + ], + "source": [ + "%%timeit\n", + "[(i, j) \n", + " for i, pi in enumerate(tours) \n", + " for j, pj in enumerate(tours)\n", + " if i != j\n", + " if not valid(trace_tour(pi))\n", + " if not valid(trace_tour(pj))\n", + " if valid(trace_tour(pi + pj))]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(16, 125),\n", + " (70, 48),\n", + " (91, 128),\n", + " (110, 134),\n", + " (116, 194),\n", + " (123, 51),\n", + " (136, 9),\n", + " (142, 193),\n", + " (152, 63),\n", + " (168, 150),\n", + " (201, 83),\n", + " (208, 204),\n", + " (212, 113)]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[(i, j) \n", + " for i, pi in enumerate(tours) \n", + " for j, pj in enumerate(tours)\n", + " if i != j\n", + " if not valid(trace_tour(pi))\n", + " if not valid(trace_tour(pj))\n", + " if valid(trace_tour(pi + pj))]" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "80622" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(sum(len(t) for t in tours if valid(trace_tour(t)))\n", + " +\n", + " sum(len(pi + pj) \n", + " for i, pi in enumerate(tours) \n", + " for j, pj in enumerate(tours)\n", + " if i != j\n", + " if not valid(trace_tour(pi))\n", + " if not valid(trace_tour(pj))\n", + " if valid(trace_tour(pi + pj)))\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 1\n", + "2 1\n", + "3 4\n", + "4 5\n", + "5 7\n", + "6 3\n", + "7 1\n", + "8 2\n", + "9 2\n", + "11 2\n", + "18 1\n", + "19 1\n" + ] + } + ], + "source": [ + "l1s = {}\n", + "for t in tours:\n", + " tr = trace_tour(t)\n", + " l1 = abs(tr[-1].x) + abs(tr[-1].y)\n", + " if l1 > 0:\n", + " if l1 not in l1s:\n", + " l1s[l1] = []\n", + " l1s[l1] += [t]\n", + "\n", + "for l1 in l1s:\n", + " if l1 < 20:\n", + " print(l1, len(l1s[l1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(0, 124),\n", + " (1, 1),\n", + " (2, 1),\n", + " (3, 4),\n", + " (4, 5),\n", + " (5, 7),\n", + " (6, 3),\n", + " (7, 1),\n", + " (8, 2),\n", + " (9, 2),\n", + " (11, 2),\n", + " (18, 1),\n", + " (19, 1)]" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[(l1, len(l1s[l1])) for l1 in l1s if l1 < 20]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 loop, best of 3: 1min 28s per loop\n" + ] + } + ], + "source": [ + "%%timeit\n", + "(sum(len(t) for t in tours if valid(trace_tour(t)))\n", + " +\n", + " sum(len(pi + pj) \n", + " for i, pi in enumerate(tours) \n", + " for j, pj in enumerate(tours)\n", + " if i != j\n", + " if not valid(trace_tour(pi))\n", + " if not valid(trace_tour(pj))\n", + " if valid(trace_tour(pi + pj)))\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "good_is = []\n", + "goods = []\n", + "tried = []\n", + "for l1 in l1s:\n", + " possible_l1s = [i for i in range(l1-1, l1+1) if i in l1s]\n", + " candidates = [t for i in possible_l1s for t in l1s[i]]\n", + " for t1 in candidates:\n", + " for t2 in candidates:\n", + " if t1 != t2:\n", + " t12 = t1 + t2\n", + " if (t12) not in tried:\n", + " tried += [(t12)]\n", + " if valid(trace_tour(t12)):\n", + " good_is += [(tours.index(t1), tours.index(t2))]\n", + " goods += [t12]" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "80622" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(sum(len(t) for t in tours if valid(trace_tour(t)))\n", + " +\n", + " sum(len(t12) for t12 in goods)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 loop, best of 3: 1.16 s per loop\n" + ] + } + ], + "source": [ + "%%timeit\n", + "\n", + "l1s = {}\n", + "for t in tours:\n", + " tr = trace_tour(t)\n", + " l1 = abs(tr[-1].x) + abs(tr[-1].y)\n", + " if l1 > 0:\n", + " if l1 not in l1s:\n", + " l1s[l1] = []\n", + " l1s[l1] += [t]\n", + "\n", + "goods = []\n", + "tried = []\n", + "for l1 in l1s:\n", + " possible_l1s = [i for i in range(l1-1, l1+1) if i in l1s]\n", + " candidates = [t for i in possible_l1s for t in l1s[i]]\n", + " for t1 in candidates:\n", + " for t2 in candidates:\n", + " if t1 != t2:\n", + " t12 = t1 + t2\n", + " if (t12) not in tried:\n", + " tried += [(t12)]\n", + " if valid(trace_tour(t12)):\n", + " goods += [t12]\n", + "\n", + "(sum(len(t) for t in tours if valid(trace_tour(t)))\n", + " +\n", + " sum(len(t12) for t12 in goods)\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2+" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/06-tour-shapes/tours-random-walk.txt b/06-tour-shapes/tours-random-walk.txt new file mode 100644 index 0000000..ffb1608 --- /dev/null +++ b/06-tour-shapes/tours-random-walk.txt @@ -0,0 +1,200 @@ +RFFLFFRRFLFFFFFFLRFLFFFRFRFFLRFLFRLFFLFFRFRLRRFLFFFFLFFLRFFRFLFFLRRLRFFFLLRFLFRFRLFFFRFLLFRFFFFFRLRLFRFLFFRFLFFLFFFFFLRRFRFFFLRFFFLFFLFFRLFLFRFRFLRFLRFLFFFRFLFFLLRLRRFFFFLFRFFF +FLFFLLRLRFLFFFRFRLRFFLRLFLFFRFFFRFFFFLFFLRFRFLRFFLFRFLRFFFFLFLFFFFFFFLLFRRFFRLFRFLRFFLRFRLLRLFFFLRFFFRFLFFFF +FRLLFLRFFFFFRRFLFFLLFRFRFFFLFRRFLFFFFFLLFRLRFFFRFFLLFFFRLFRFFRFFFLLFFRFRFFLLRFLFRRFFFFFRFLFFRFFFLFFFFLRRFLFFLRRFFFFFRFFLRFLFFFLRRLRFFLFLFFFLFRFFFFFLFFLRRLRFFFFRLRLLFLRRFRLFFLRFRFRLLFFRFFLRFRRLFLFFLFLRFFRFLFFRFRFFLFRFRR +FFFRLFFRLLFRRLFRLRLFRFFRFFLLRRLFFFLFFFLRLRFFFRLLFFFFLFRFLFRFFRFLFFFRLRLFFFFFFFLLRLRLRFFFRLLRFLRRFLLFRFLRFLRFRLFRFFFRFLFFLFRLFRFFLLRFFFRLFFLRFFRFLFLFFRLFFRFFLFLFFRLLFRFRLRFFRLFFFLFLFR +RRLRFFLRFFLLRFFRFLFRLFFFLFFRFLFFFFFRLFRLFFLFFRRFLFFRLLRFFRRFLLRFFFLFFRLFLFFRFFRLLFLRRLFLFRFRFFFLLRFFRLFFRLRFFFFFFLFLFFLRFFFFRFFFLFFRFFFRFFFFLRFFLFLFFRFFLFFFRFFFRLRFFFLRLLFRRLRFFLFFFLRL +FFRFFRLFRFLRRLRFLRFFFRFFFFFFLFLRFFRFFLFRLLRFRFFLLFFRFFRFFRLFLFRFFFLFFRLFRRLFFLFFFFFFFFLRFFFFRLRFFLFFFFFFFFRFFRLRRLFLFFLLRFRFFLRLRLFFFFLRFFLFLRLFRFFRFFFFLFRFRLLFFFLRFFFFFLRFLFRFLRFFFFFFLFLFFRFFRFLFRFLLRRFLFFLFFFFFRFFLFFFRLRFLRRLLFFLRFRRL +FLRFFRFFLFFFFFFLFFRRLFFLFFFRFRFFFFLFLRRFFFLRRFFLLFRFLFRFLFFFFFRFFRLFLLRFFLRFFFLRLLFFFRFFFRFFFFFRRRRFLRFFLFLRFFFFRLLFFRLFLRLFFFFF +FLLFFLLRRFRFLFRFRFFRFLFRFLRFRFFLFRFFLFRLFFFRLLRFRFFFRFFRLLFRFFLFFFFRFFRFFFFRLFLFFFLFFFFRLFRFLRFFFFLFFFFLFRLRFRRFFRFRFLFRRLFLRLFLRFFFRLFLFRRLFLFFLFLRLRFFFFLFRLFRLLRRLFRLLFFFRLLRFLFFRFRRLFFLFRLFLFFFFFRRFFFFFFLFRFFFFFFLRFLRLFLFLFRFFFRFFFFRLLFFLLRFFFLFFFLFFRFFFFRLFRLRFLFFLFRFFRLFFFRFFFFRLRFFLFLRLFF +LLFFFFFLLFRFFLFRLRFFFLRLFRFFFRLLFFFFFRRLFFFFRFFFFLRLFLRLRLFFLFRFLRFFFLRLFFRRLLRRLFLFFFRFRFLLFFFRFFFFFRRFFFFRFRFFFFLFRFFFFLFFFFRFFRLLFRFLFRFRFFLFRLRFFLFRFFFFLFLRFRRLFFFFFRLFFLFFRRLFLLRFLFFFFFRFLRRLFLLFRFFFFLRFRFFRFFLFLFFFFFFLFRLFLRFFFFRFFLFRRFFLLFFRFRLFRRFFRFFRFFFFRFLLRFFRLRRFRRFFRLFRLFFFLRRFLFLRFFRRLRLRFFFFRLFRFFFRFLFLFFLLFFFFRLFLFFFFRFFRFLLFFFRFRLLRRLRFRFFF +LLFFFRRLFFFRFLLFFFFRRFLFLFFRLFLLRRFFRFFFFFLFFFFLFFRFLRRFRLFFLLRFFFFRFRLFRLFRFRLFFFFFRFFLFRLFRFFLLRLFRFFFFRFFLFFRFFLFFFLRFFFRFFLFRLRRFFFLRLLFFRRLRFLFFFFLFFRRFLLFRFFRLRFFFLLFRFFRLLRLLRFFRFFFLLRRLLRLFFRFFRLRFLFRLRLFFFRRLFFRFFLFFLFRFFRFLFRFRFFRLLFRFRLFFLRLLFRLFF +RFLRRLRFLLFRFFFLRFRFFFFFLFRLFFRRFFFFLFFFFFFFLFFRFFFRFFFRFRRLFFFFFFRFFLLRFRRFFFFFFFLRFLLLRRLRRLLFFFFFFFFRFRLFRLFRRFLFFFFFFLLF +FRRFRFRLFRLFRFRFLLFFFRLFRLFLFLRFFFFFRRLFFLFFFLFRRFFLFRFLFFLRFFLFFFRRLFLFFFFFFRLLRFFFFLFFFFFLLRRLFLRFFFFFFFRFRFFFFFFLFRFFFFFFFFLRLLFRFFRLFRLRFFFFRFLRRLLFFFRRLLFFFRFFLFFLFRRFFLFLFFFRFRFFFLLFFFFFRLRFFFFFFLLRRLLFRFFFFLFFRRLFLRRLFL +RRLLFRLRLFFFLFRFRFLLFRRLFRFLRLFFFFFFFRLLFFFRFRLRFFFFFFLLFRFRFRLFFFRLFFFRLFRFLFLRRFLFRLRFFLLRLFFRFFLFFRLLRFLFRRLLFRFRLFFRLFRRLFRLRFFFFLFLFRFFFFFLRFFLFFFLFLRFRFFFFFRFFLFRRLFRLFFFFRLFFFLRFLFLLRRLRLFFLRRLFRRLFRLFFFRF +FRFFFRFLFLRFFFFFFFLFLRFRFFLFRRFFFLRLFFFLFFRFFFRFRFLLRFFFFLFRFFFFFFRFLFFFFRFLFFFLRRLFFFFFFFRLFRFFFFFFFRLFFRRLFFLLFRFLLRFFRFFLFRLLFRFFFFFFFRFFLRFRFLLFRFLRFRRLFFRFFFLFFFLF +RFFRLLFFLLRFFFRLRLRFLFRFLFFLFFFFLRFRRLLFRFFLFFFRLFFRRFFFFRLFFLFLFFRFRFFFFFLLRRLRRFFLLRRLLRLFFRLRLFFRRLLFFLFFFFFRFFLFRFFFRLLRFLFFFFFFRRFRFFFFFFRLRFFFRFLLFFRFRLFFRLFFFRLLFRFRFLFRLFFFFFFRFFFFFRFFLFFFLFLFRFFRLLFFFRRFFLRLFFFLLLFFRLFFLFFLRFRFFLLRRFRFRLFFRRRFFFFFLRRFLFFLFLRFRFFFFRFFLFLRRFLFFRRLFFFLLRRFLFRFFLFFRLFRFFFFFFFFFFFRFLRFLFFRFFRFLRFFRFFF +LLFFFFFRLFLFRRFFLFFRRLFFRFFRLFFFRLFFFFLFRFFLFLRRFFLLFFRRFFFLRFLLFRLRFLFFRFFFLFFFFFFRLRRLFRLFLRFFRFFLRFFRLLFFLLRFRLLRFFFRLRFFLFRLRLFFRRFLFFRFFFFFLRLRFRFLFFFLLFRLRLRFLFFFRFRLFLRFFFRLLFFLLRRFFFFRFFFFLRFLLFRFFFFFFLFRLRFLFFFFLRRLFLRFFRLFFFRFFFFRLLFLFFRLFFFRLLRFFRFFRFFFRLLFFFFFLFFFFFRFLFFRLRFFFRFLRLLFRFFRLLFRFFFF +LFLRFRFLFFRFFLRFFFFRFLRRLLFRFFLRLRRFLLRFFFFFRFLLRFLFFFLFLRRRLFFRFFLRRLRFFLLFRLFFRLFRRLFFFLFFRFFLFRFFLRFFFRFLFFLFFFFLLRRLFRRFFFLRRLLRFFLFFFLRFRFFFFRFLRRLLFRLFLRLFLRFFFFLFLRLLLLRLRFFFLFRFRFRFFLRLFLRLFRRFLFFFFFRFFLFLFFFFL +RLLFLRLFRFFFLFFLFRFFRRLFLFRFFFLRFFFLFFFRLLRFRLFFFFFFLRLRFRFFFRLRLFLFRLRLLRFFFFFRFLFFFLFFRRFLRFRLFLFLRFRFRFFFFFRFLFFFRFLLFFFFFRLFLRRLFRFFLFFFFRRFLFLRFFFLFFRFFFFFLLFRFRFFFFRRLLRLRRLFLFRLRLRFFLLRFRFRFFLFFFF +FRFFFFFRLFFFFLRFFFFLRLFRFLFRFFFLRRRRF +RFFFFRFFLFFFFFFRLLRFFFRRLFFFRFLRLFLRFFFLFRLRFFLRFFRLFRLFLFRRFLFRFLFFLRFRLRLFFFFFFRFFLFLRRRFRFLFLRLRFFFLFFLFFFFLRRFFLRFFFRLRFFLFLRFRLFFFLFRLFFFFFLLRFFLLFLFFFFFFRFFRLLFFFRFRLFLFLLLFFFRFLFFFFFRFFFFFFLFFFFFFLRRFFFFFFLLRF +FRLRLRFLRFLFFFFLFRLLFFFFRFFFFRLFFFRFRFRFRFFLFLRFRLFFFLFLLFFFFFFFFRFFLFFRFFFFFFFFRFFF +LLLFFRFLRFFFFFFFFLLFRFFFLFFFFFLFRFLLFRFFFFFFFFRLFLFRFFFLLFRFLFFFFLFFRFFFFRRFLFFFLFFFFFLRFF +FRLRLFLFRRLLRLLRRFFRFRLLFFRFFRFLLFFFLFFFLRFFLFRFRFFFFFFFFFLFFRRFFFFLFLFFFFFFRLFRFFFLFFLFFRFFFRLFFFFFLFRFFLLRLFFFFFFRFFRFFRLFLRFLRLRRFLFLFFFFRLLRFFLFRFLRRFFFFRLFLFFFFRLRFLRLFRFLRFFFFLFFLRFLFRRFFFFFFFLFLFRFLFFFRFRLRFFRLFFLRFFFRLLFRFLFFFRFLFFFFLFRRFFLLFFFLF +RLRLRLRFRFFFFLFLRRFLLRFLFRFLFLRFFLFFFRFFRLFRLFFFLFLLFFFFLFFFLFFFRFFFFFFLLRFFFRFRLFRLRFFFLLFRLFFFFFLRFFLLRRFFFFFFFRLFRLFRFRLFLFFFFLFFFFLLFLFRLFFLRRLFRRLRFFLFFFFFFRFFFLFRFRFFFFFFLFFFLFRLRLRFLRFFLRRFLFFFLFLFFRRFLFFFRFFFFFLRFRFLFFLLRFLRFFLRFFRLRLFRFLFLFFFFFRFRLFFFFFFFFRRFFFFRFFFFRLFFLLF +RLLFRLRFFRFRRLLFFLFLRFFRFFFFRFFLFFFFFFFFLLFRRLFFFRFFFRLFFFRLRLLRFFRFFFLRFLRFFFFRLRLLRFFFLRLFRFFLFRLRLLRFRFFLFRFFLFFFLFFFRFLLLRRLFRRFLFLFRLFLLFRRFLRLFRFFLRLFFFRLFFFLLFRLRRFFFFFFFFLFFFFFRFFLRRFFLRFLFRRFLFLRFRLFLFFRLFRRFFFFFRFFLLRLFFFFLLLFFFFLRFFLLRRLFFRFRLFLLRFLRFRFRFLFF +FRFLRRLFFLFRFLFFLRLRLRLRRFFFLFFFRFFLRFFLFFFRFFFRFRFFFFFFFFRFLFFFLFFFRRLRFLFFRLRLFFFRFLLFFFFRLFLRFRFLFRLRFFFFFRFFFRLFLFLLLFFRFFLRFFLFFLRLFFFRLFFFFRFFFRLRFRLRFRRLFRLFLFFRLRFFRFLFFLRRFRLLRFFFRLLFFFFFFFFRLFRLF +FFFFLFFFFRLFFFRRLLFFFRFRFFLLFFRFLRFFFFFLRRLRLRLFLRLFFRFFFRFFFFFRLFLFFLRFLRFFFFLFRFRLFFFLRFFFFRFFLRFFFFRLFRLFFFFFFFRLLRFFRFFLLFRLFFFFLRFFFFRLFRRLLFFRFFFFLFRFRFLFFRLFLRFLFFFLRFFFFFLFRRFLRLFLRLFRRFFLLRFLRRFFFFLFFLFRFFRLFFLRFFLRFRLRLRFFLFRFLLFFFRRFFFLFFFFFFRFRFRLFFLFFFFRFRF +LFFRRFFRFFFRRLLRFRLFFFFRFFFRLLRFFFLFRLFRFFFLRLFRLFRLRFFFFFFRRLFRLFFFFRRFFLLFLFFFRRLLFRFRFFLLRLFRFFFFFLFLFFRRFFFRLFRFFLLFRFLRFFRRLFFFFRLFFFFLFF +RFRRFLRLFFLFRFFRLFLFFFFFFFLRLRRFRLFRLLFRRLFFFRLRLFFFLLRRFFRLRFFRLRRLFLFFFLFFRLRLLFFRFFRLRLRFRLLFLFFFFLRFRFFFFFLFFFLRFFFRFLFFFFFLRRLFFFLRFLFFRRLRFFFFLFFRFFFLRFFFFFLRFLFFFFRFFRFFFLFLLRFFFRLRLFFRLFLRFLLRFFFFFFLFFRRFFFLRFFRLFLFFRFLFFFLFRFLLRRFFFFFFFFFLRRFFRLRLRFRLFLFRFFLRFLFFRLLFFRRFFFFR +LLLFLRFRRLLFLFRLFRRFFFFFFLRFRLLRLFLRFFFFFRFLFFLRFLFFFFRFFRLFRFLRFLRRLLFLRLFRFLLRRLFFLFRLRRLFFRFFRRLLFFFFFFLFFFFFRFFFFFRFFLRFFFFLRFRLLFFRFFFLFRLLRRLRFLRFFFRLLFFRLRRLFLRFLRFRLFFLLRLFFFFRLRRLFRFLFFRFFFRFLRFFFFLFFRFLRLLRFFFRFFFFLRLRRLFFFFLFRFFLFRRFFLRFLLRRFFLFLRFFLRRFRLLFFFFFRFLF +RRRLLFLRLFLFRLFFRRFFFFLFRFFLFLRRFFFFLFFLFRLFFFLFRRFLFRFFFFLFFFRFFRFLFRFLFRLLRFFFRFFFLRFLFLRFFFFFLRFFLFFFRFFFFLRFRRLFFFLFRFFLRFFFLLRFFFRLRFRFFFFFLFLFRFFRFFFFLFRLRLFLFRFF +FRFFFLFRFLRLFFRLRLFLFRLRFFFFFFRLFFRRFLFFFRFLRLFFLRFFRLFFFLFFFRLFFFFRFFLFFLFRFLFFRFLLRLRRFFFFRFLRFLFFFFLFFFFRFLFFFRLRFFFFRFFLRFRLFFFFFLFFRFRFLLRFLFLRFFFLRFLRFFLFRFRFFLLFFRLLFRRFFLFRLFFFFFLFRFRFLFFRRFFLFFRFLRFLFFRRLLRFFFLFFFRLFFFLRLRLFFFRLFFLFRFFFFLRFFFLFFFLRFFRRLFRLFFFLLRFFRFRFLFFFFFFLRFFRLFFRFFFLFLRLRLLRLFRFFRLRFFLRRFLFRFFLFLF +RFFFFFFFFRFLRLLFRLLRLFRLRFFRLFRRFFFLLRLFFFRRLRFFFLRFLRLFLFFRFLRFFFFLFLLFLFRFFFFFRFFLFFFFFLFRFRFFFFLLFRLFFFFLRFFRRFLFFFRRFLFLFFLRFFLFFRFFRRLFLFFFLFFRFFFRLLFFFFFRFLRLLRRFRLRLRFLFRFFFRLFFFFFLFRFFFFLFFFRRFFFLFFLLRRLRLFFFRFLFLLFFF +FLFLRLLFFRLFFRFLFLFFFFRRLLFLRFFFFLRFLFFFFFLFFFRLFL +FRRFFFFFLLRFLRLFFRRFFFFLLRFRFFFLLRRFFRFFLLFLFRFFFFRLRLFRLLRFRFRFLFRFLRFRFFLFRFRFRFFFRLLRLFRFFRFRFRLRFFRLFFRLRLRFFRFRRRLFFFRFRLRFFLRLRFLFLFRFFFFFRFFFFFFFLFRLFFRFLFFLFRFFFFRFFRFFFLFFFRFFFRFFLFFLRLLFFLFRRLFRLFRFFFLRLFRFFRLRFRLLFFRLLFRRFFFLFFFFFRFLLLFFLL +FFLRRLFLFLRFFRLFFRFFFLRRFLFFFFLRRLRLFFFLFFRRFLFLRLRFFFFFRFLFRLLFRRLLFFRLFFFLLRFRLFRLFRFLLRFRFRFFFFFLFRFFFRRFLFFLFFFFRRFLFFFFFFFLRRFFLFFRLRLRRLFLFLRFFFFLLRRLFFRLRLFLFRFFFRFFLRLFFFRFFLFFLRFRLRRLLFFRFRLFFFFFLFRFFFFLFLRRFFFFRFFFFFLRLLFFFFFFRRLRFFFFFFRFLFLRFLFRFFFRFLRFFLRLFFLFLLRRFL +FLFRFFRFFFLRLFFFFRFFLFFFFLRLRLFRFRFFFFFFFRFLFLFFFFRFFLRRLFFLFFFRFRFFRRFFFLFFRRRLFLFLFRLFRRFRRRLLRRRLRFLFRFFLLRFFLFFFLLLLFFLRFRFFLFFRFFFLFRLRRLRLRFLFFFFLLLFFFLLFF +FFFFFFFFFFRFRLRRLFFLFRLLRRFFRLFFLFRFRFRRFLRRFFFLFFRLFLFFRFFRRFRLFRFFFFFRFLFRFFFFFFLRFLFRLRFFRFFRRRFLRFFFFFFFLFLRRFFLFRLFFFFRLLFFRRFLLFFFF +RLLRFFFLLLFLFFRLFFRLFRLLRFRLLFRLFRLFFFRLFLFFLFRLLFLFFRRFLLRFLRFFFFRFFFFFFLLRFRFFLLFRFFRFLFFRRLLFRFRFFFLRFFLFRFLFLRFLFLFRFRFLFLFFLLFLFRFRLRLRLFRFFFLFFFFFRFRFFFLFRRFFRF +FFRRFFRFFFLRFLFFFFRFFLLFFFFFFFLRFFRFRFFFLFFLFRLRRFRLLFFRLFRFFFLFFFLFFRFLRLRFFFRLFFFLFLFRFRFLFRLLFLRFRFFLFFLFRFFLRRFFFRLFLLRFFFFFFFRLFFFRLFRFFLRFFFFRFFFLFRLRLFFLRFFLRFRFRFLFRLLFFLRRFFFLFFFLRLRRFFRLFRLLFFFFRFFLFRLRFLLFRLFRFFLFFLRFLRFFFLRLFFRFFRLLFRFFLFRFLLRRLLRFFRFFFFRRLLFFFFFLRLFRRFFFFLFLRLRFLFFFLFFRFFLRFFLFFRFFLLFRFLFRRLFRFF +FLRLFRRFLFFRFLFLFFFFFRRLFFFFFFLFFFLLFRLRFRFFLFRRFLLRFFFRFFLFRFFFFLFFFLLRFFFFRLRLRLRFFRRLFRLLFFRFRLFLFFRFLLRFFLRRFLRLFRLLRFFFRFRFFFFLLRLRFFRLFFLFFFRFRLRFLFFLFFLFRRLRLRRLFLRRFLRRLLRLFLRLFFFRFFFRFFLFFFRLFFLLFRLRRFFFLRFLRFRLFLLRFFLFFFRFLFFFRFRLRFFRFLLRFFFFLFFLFRFLRFRFLFFLFFFFLRFLFFFRFFFLRFLFFFFFRL +FFFLLFFFRFFFRLRFLFFFFFFFFRRLRFFFFFFFLLLFRFFLRRFFRLLFRFRRLFFFFLLFRRFFFFFFFRFFFFRRRLRFFFLFFRLFFLRFLRFRFFLFFFLFFFFFFRRFLFFFLFFFFRFFFFRFFRFRRFFFLFFRFFRFFFLRLRFFLFFLFFLLRLFFRLFLFFRFRLLFFLFLRRFLRFFFFFFFFRFRFRRFLLRRFFLRRFFLFFFFFFFRRRFRFRFLFFFLFFFRFFLFRLFRRFLLRRFLFRRRFFRLRLFRFFFLFLFFFLFFFLRLFFLFRL +RFLFRFFLFLFFFFFFFLRFFRFFRRFLFRFRFFFLRRFFLFFFFFRFFFLFRRLFFFFRRFLFRRLLFFRRLFFFFFRLFFLFFFRLRFFRFFLFLFFFRRLFFFRLFFLFRFLRFFFRLRLRFLFFLRRLFFRFFFLLRFLRFLFRFFFRFFRRLLFRLFRFLFFFRFLFRLFLFFFFLRRFRFLLRRLRFLFLRRFFLLRFFFRLRFFFFRLRFFFRLFLLRLRFRRRFFFFFFFFFLFRFRFLFFLFFRFRFFFRFLRLFFRFRLFFRFFLFLRLFFLFFRRFFFRFLLRFFRRFRRFRLRLFLFFLFLLLFFRFFLFFFFFLFFLRRLFLRFFFFRFRFRFLFRFFRFFRF +FFFLLRFRFFLFRLFFFFFRLFFLRRFFFLRLRRFLLFRLFFFFLLFRFFRFFFFFFRLFLRFLLRRFFFLFFRRFFRLLFRLLFRFFFRFFLRLRFRFRLFRRFRLFFLLLFFLRRLRLLRFFFLLRRLLFRLRRFFFFRLFFFFRFRLRLFLFRFRFLRLFFF +FFFLRFFRFFFLLFRLRRFFFFLRLLFRLFFFFFFFFFFFFFRFRLFRRFLLFFFFFRFFLFLFRFFLFFRRLF +RFLFRLRFLFLFRFLFRRFLLRFRFRLFFLFFLFRLFLRFRFRFLLRFFLFFRLRLRLFFFRFFRRFLRFFFRFFRRFLLFRLRFLRFFFFLRRFFFLLFRRFLFFFRLLFFFFRRFLFFFRFRFFLFFLFFRLFFFFFFFLRFRFFRFLFLFFFFRFLFRLRFFFLFRFFFFLRRFFFFFLLRFFRFFLFFRFFFLLFFLFFFFFFFFRFFLR +FFFFLRLLFFFRFRFLFRFFFFRFFFFFLFFFRRLFLRFRLFRLRLFFRFFFLRFRFLFLFRRFFLLFFFFRFLFFLRFFFRFFFLLFFFFRFFFLFRFFFFRLLFRFLLFFRFFFFFFFRFFFLLRFFFFLFFFRRLRLRLLFFFLFRRFFLFRFRLFRFFFFFFFLFFRRFLFFRFFFFLRFLFFFLLRRFFFLLRLRFFFLRFFRFLFFLFFFFRFFRLFFLFFFLRFFFFFFRRFFLLFFFLRFFRFFLRRFF +RFLFLRFFFFRLLFFFFLRLFFRFLFRFRFFFFLFFFRLLFFFFFFFRFRFFLFFRLLFFLFFRFFRLRFLFFFRLLFRLFFLRFLFFFRLRFRLFFFRFRFLFFLRFRLLRFFFRFRLFFLFLFFFFFRFRLRFLFRFRFRLFLL +RFRFFFRFFRFFRRFFLRRFFFFFFFFFRLRFLFRFLFLFFRFFLRLRLLRRFLRLFLFRFFFFFFFFFRLFFFFFFRLFFFRFFFFFLFRLFFLFLFRFFFFRFFFFRRFRFRLRFFFFRFLLRFFFFRFLRRLFFFFFFFLRLFFFLFFRFFFRRLLRLFFLFRRFLFFFFLFFFFFRRLFLRFLFFFRFFRFFFFLFFFFRFFFFFFF +LFLRLFLFFFFFRLFFLFFFFFLRFRLFRRLFFFFFLLRFLFFFRFFFFFLFFRFFFRFRFFLFFLRRFLFLFRFRFLFRFFLFFLFFRFLFRFRFLFRLRFLFFFRFFRLLFFRFFFFFFRLFFFRFFFFFRLFFFRFFRLLFFFRLLRLLRFRFFFLFFRRLFFLFFRFRLFLFLRFFRFLFLRLFRFFRFFFFLRLRLLFFLRFRLFRRFLFRRLFFLFFFFFFR +FFFRLFLLLFFRRLFFLRLFLFFFFFRLRFLFFRFFRLFRLFFLLFLFLFRLRFLRLRFFFLFLRLRLFLRRFLFFFFFRFFFRLFFLLFLFFLFRFFRLFFLFLFRRLLRLLFRFLRFFRFRLFRFLFRFRLFFFFFLRLRFLRFRLLFLFRFRFFFFLFLFFFF +FFFFFFRFFRLFRLFLFFRFFRLLFFFFRRLFFFFFFFLFRLFFLFRFRFLRFLFRFLLFFFRFFLLRFRFFFFFLFFFFRFFLFFFLLRLFRRFFFRFLLRF +FRFFLFFRFRLFLFRFRLLFFLLRRFRFLLFFRRFLFFLLRLRRLRFLLRRFFLFFRFFRFLRFFFLFLFFFRRLRFLRLRFLFFRRLFFLRLFRRLFLFFRLFLFRFFFLRRLFFFRFRFLFFRFLFFFLRFLFFFFFRFRFLFFFRLFFFLFFFFFFLRFFRFRLLRRFLFFFFRFFFRLFLLRFLRFFFFFRFRFLL +FFFRFFLLFRRLRLFFRRLFLLRRFLLRFLRFFFRRFLRFFLFRFLLRFRFFFRFFFFFFLFLRFLRFLFLFFRLRFLRFRLFFFFLRLFRFLFFLFFLRFFFRFFRLLFFLFRRLFFRRLFFRLFFFFLFRFLRFFFRFLFFFFFRRLRLLRFLFFLRFFRFFFFFFRFFRLFLFLFFRFFFRFFRRLFLF +FFLLRRFFFFFLRFFFLFFFRFFRLFFFRFFFRLLFRFLFFRLFLFLRLRRFRLFRLFRRLRFLFRFLLFRLRFFRLRFFFFFLFFRFFFFFFFLRFLLRFF +RFLRRFLFFRFFRFRFFRLFFFRLLRLRLFLFRFFLFRLLRFFLFRLFFFFFRLLFLRFRFFLFFRFRRFRFFFFFFLFFRFFFFFLLFFFFLFFLLRLLFRFFFRFFFLFFRFFLFLRRFFFFRLFFFFFFLRLLFRFRLRRLFLFFFRFLFRRRLLLRRLFRFLLRLLRRLFF +FFLRFRLRFLFRFFLFRFFFFLRFFFLRFLRRFFLLRFRFLLRFRFFFFLFFFRFFRLFLRRFLFFLFFFRRFFFFFFFFFRLLFLFFFFFRFFFRLFRRLLFRFFFFLFFFFFFFRLFFRLFRFFLRRFFLFFFFFLRFRFRLLFRLLFRLFFFFFLFFRLRLRFRLRFRLFRFLFFLRRLFRLFLRLFFRFRLLRRFRLFFRFLFFFLFFRRFLFFFFFRFFFFFLFLRFFRFFLLFRFLFFFRFLLRFFFFFLRFFLFRLRFLFFRFFFFFLFFLRLRLRRFFFLRFRRLLFRLRFLFRFLRFLRFLFRFFFFLF +LFFFLFLLLFFFFRLFRLFFFLFLRFFLFFFFRLLFLFRRFFRFFFFFFRFFLFLRFLFFRLLFRFRFFLRLFFFFFFFRFFFFFRFRFFFLRLLFRFRLLFFFFFFRLFFRLRFFLFLFFFLFRRLFFLRRFLFFFFFFFRFLFFFRFLFLRLFRLLFRFLRFLRFFRFFRFLLFLRLFRFFRFLFRFLFFFFFFLRRRFRLFRLFLLLFLFFFFFLFFFFFLRFLFFLLFFFLFLRFLRFFLFLFFFRRLFFFFLRFRFRLRLFRFFLLRRFRLFFFLFLRFLLF +LLRFFRFFFLFLLFLFFFLFRLFLFLRRFFLFFRLFLRFFFFFRFRFFLFFRRLFRLFLRFLRFFFFFFFFFFFLFFFFFFLRLFRRLRLFRFLRFLFFFLFRFFLLRRFFFFRLFLFRFLFRFRLLFRFFFRLFFFFFFFLFFFFFFRRFFFFFF +FLFRFFLLFFRFFFRFFFFLFRRRLFFFLLFRLFLFFFFRRFFFLFFRLFLFFLFLFLFFRLRLRRLFLLFFFFFFLFFFFRFRLFFFLRRFFLLFFRRFLFFFRFRLLF +FFRFLRLFRLFLLRFFFLFRFFRFRLRLFFLRFFFFFFFRFRLFLFRFFRFLFRFFLFFLFRFFFFRLFFFRFFLLFFFFFRRLLFFFFFRFFFLFFFRFFRLLFRLRFRFFFFFLLFRFLFRFFFLLFFFRFLFFRFLFLFRRFFRFFFFFFFFLFRLFFFRRFLFLFFLLRRLFFFLFRFRFLFFFRFFFFFFFFRLFFFRFFLFFLRLLFRFFRFFRLLRLRFRRLFLRFLFFLRRFFRFRLLRLFFFRFLRLRFLFRRFFLFFFFLRFLLFFFRFFFFLFRLFRFLLFFFFFRFFRFFFLFLFFFFRFRLFFRRFFFLFFFLFFRFFLFFFFFFFRRFFRFRFFLFFFRFLFFFFLRRFLFFRLRFFFFRLFRFLFFFLFFLRFFLFRFFFFRRRFLRFRFLRLFFFFRLRFFFFFF +FLFFFFLFLRFFFLLRFFFRRLLLFFRFFFLFFFLFFRRLLFRRLRFLFLFLRFFFFFFLLLFFRLLRLRFLRFFLFFFFFRFFFRLFLLRFFFFRFFRLFLLLFLFRFFRFFFFLFFFFFRFFFRFFFFFFFLRLRFRLFFFRLRFRLFFFFLRFRFLFFLFLFRLLFRFRRLFFFFLRRF +FFRLRFFFFLRLRRFLLRFFFRFFRFFFFFLFRLFRRLFRRFRFRFLRRFFLLRFLFRFFFFLLRRFFLRFFFLFRFFFLFRLFLRFFFFLFFFLRRFFFFLFFFFFFRFFFFLRRRRFFLRFLFFRRFFFFFFRLRFLFFRFRFLRFFLLFRFLRFLFFFRFLLRFFFFRFFRLFLRFFLRFFLRLRLRRLFFFLFRFRFFFLRFRFLFLRFRFLFFLLRFFFFFRFLFLRF +FFLLFFFFFFFFRFFFRFLRFRFRFFRLFLRFFFRRLFFLRFLFRRFFLRRLLFLRFFFFFLRFFFFFFFFRFFFFFLFRFFFFFFFRFFFLFRFFFFRFFFRFFRFLRLFFFFFFLFFFLFLFLFFFRLRRLFRFLFFFLFFFFLRRFLFRFLFFFFFLFFRR +LFRLRRFLFRRLFFLRRFLFRFFLLRFLFRFRFFFLFFLRFFFFFLRFFRFLFLRFFFLFFLRFLFFRFL +LFFLLRFRFFFLFRLFFFFFLRFFFFRFFFLFFRFLRLFRLFFFLFFFRFFFLRLRFFFRFLFFRFFLFFFLFFFRFFFRLRFLFRLFFFFFFFFLRFFRLRRLLFLRFFFLFLRRFFFFFLFFFFLRFLFRFFLRFFRFLFLFFRFFFLFFFRFRFLRFFLFFFRLFRFFLFRFFRFLFLFFFLFRLRFFRFLLFFRFLFRFLRFLFLRLRLRFFFFFRRFFFLLRFFFRLLFFL +RLFLFRFRFLRFRFRFRLFFFFFLLFLLRFFRRFFFFFRFFLRFFFLRRRLFLFLFRRLLFRRLRLFLLRFLFRRRFLFFLRFFFFRLFFRLRLRFRLLFLRRLLFLRLFRFRFLLRRLRFRFLRFLRLFFLFRFLRFLFFFFFLLFFLF +FFFLRFRFFFFRLLFLFRFFFLLRFRLRFFFLFRFLRLRRLRLFFLRRFFFFFFLFRFFLFFFRRFLFFFFLLFRRFLLRFRLFLRFFRFFLRFFRFLFLFLRRFLFFFFFRFLLRRFFFFFFFRFLLFFFRFRFFFRLFFFFFRLFFRLLFFFFFFFRFLRFLRRLFFFFFFRLLRRFRFLRLRFLFFFFFFRRLLRRFLLFFF +RRRRRFFFRFFLFLFFLFRFRFRLFLRFRRLFRLLRFRRRFFLRLFRLFFFFFFLFRFFFRRLFFFFFFFFFFLFFRFLFRFLFFFLRFFLFRFLFFFLLRLRFFFLFFRRRLFLLRFFFLRFFLFFLLFFRRFLRFRLFLFRRFFLFRLFFRLFFLFRFFRLR +RRLRFLFFFRFLLFFFLRFFFFFLFFFFLRRFFFRFFLFFFFFLFFFFRRLFFFRLRLLRFFFFFLFRFLRLFRFLFFRFFRFLRRFFLFFFFRLFFFFFFFFFFRLFRLFRFFFFRRLFLFFFFRFLFFLFRFFRFRLFFLFFLRFFFFLLRRFFFFLLFRFLRLRLLFRFRFLFLRFFFFRFFFFFFFFFLRFFFFFFRLFLRFFRFFLFFRFLFFFFFFFFRFLLRLRLRFFFLFFRFLFRFFRRLFFLRLFFFFRFRFLFLRFRFLFFFLFRLFRFLFRLLFLFRFRRLFLRFRLFFLFRFFFLFF +RLLRLFFFFLFLFRFFFFLLRLFRFFFLFFRLRFLFFFRLLRFFFFFFLRLFFRFLFFFLRFRFFLRFLFLFRLFLFRFLRRFLRFLRFFLLRFFRFFFLFFRFFLFRFFFLFRLLFFLF +RRFRLRLFFLRRLLFFFFRFFFFLLFRLRRLRLFFRFFLFRLLFLRFFFFRFFRLFRFFLFLRFRLFLRFLRFLFRFFFRFRFLLRLFRLRFFFLRLFLRLFRLFRFLFLFFLFRFRFFFLRRFRFLLRLLRRFFFRLRFLLRRFFFRFR +LFRFLFLFRFRFFFLLFRLFFLFRFLFRFRFFFLRFLFRFLRRFLFLFRFFRFLFRFFLFRRFFFFLFFFLFFLFRFRFLFFFRFFFFRFFFLFFLFFFFFFLFFRFFRRLFFFFLRFRFFFRFLFFFFFFFFLRLFLRRFFRFLFFRRLLFLRFLFFRLFLFRFRFLFLRFFRFLFFFLLRLRLFRRLFFFLFFFRRLFRFFLRFLRFFRLFFFFLFFFRFFLFRLRFFFLFFFLFRFLRFFFLRFFLFFFFFLFRFLRRFLFRLFRLLFFF +FLFFRFLFRLRFLLFFFFFLRRLRFLRFFLFFRFFLRLFRRLFFFLRFLRRLRLRFFRFFFLFFLRLLRRLRFL +LLFRFFLLFFFFFFRLFFRLLRRFFLRRFLFRLFFFFLLFRLRRLRFFFRRLFFFRLRFLFLRRLLFFFFFFLLRFFFFFRFLFLFFRFLFFFRFFFFFFFRFLFFFFRRFLLFFRRFFLLFFFFFFRLFFFFRLLFFFLRFFFFFLRFFFLFFFLRRLFRFLLRFRLLRLFRFRLRRLFFRFLFRFFLRFRLFRFFRRL +FRRFFFRFFFRLFRRLLFLFFFRRFFLFFFFFFFRFLFLRLRFRFFLFFFFLRFRFLFRRFLFRRLFFFRLFFFFFFFLFFLRFFLRLFFFRLFFRFLFRFFFRFLFFFFFFFFLLFFRLRFRLFFFLLRFRLFFRFFFFFLFLFRLRFRFFFFFRLFRFRLRFLFFFFFFRFFFLFFLRFLRLFRFFFLFFFFFFFFFFFLRFFRLFRFFFFRFLRF +FRRFFRFRFLRFLFRRFLRFRLLFFFLFLRRLLRFFFFRFFLRFLFFRFLFFRFLFRLLRFLFFRLRFFFRLLFFRLF +FFFFRRLRFFFRFFFLRFFLFFRLFLRFFFFRFFFRLLFRFLRLRLFRLLRRLFRFFFFRRLFLFLFFRFLFFFFFFFLFRFRFLRRFLFRFLRLRFFLLFRFRLFFFFRFLFFLRRLLRFFFFFFFR +RRFFLRFRLFFFFLFFLFRRLLFFLFLRFRLLFRFRRLFLFFFFFFFLRLFRFFFLFFFRFLFFFFFFFFLRFRFLFFRFFFFFFRRLRFFFFLFFRLFFFFFLRLRLRRLFLFFFRFFFFFFLFFFFLLRFFLRRLFFFFRFFRLFRFFRFRL +LLFFFLFRFFRLRFLRLFRRFFFFRLFLLRRFFFFFFRFFLFRLRLFRLFFRLRLLRRFFFLFLLRRFLFRFFFFFRLFRFLFFLFFFFRLFRLFFLFRFFRRLFLFRFLRFLRFFRLFLRFLFFFFFFFFFFFLFFRFFRFFLLRRFFLLRLFFRFFFFLRFRFLRFFF +LLFFFFLFLFFFFFLFRFFRLFFRFLRRFFLFFFLFRFFFRLFFFFRFLRFFLLFFRRLFFFFFRFRFLFRLRLFFRLFLRLFFFFFLLFFRFFRLRRFFLFRFFFFFRLFLRFLRLRLFLRRFLFLFRRLFFFFFRFLFLFFRFLRRFFFFFFFFFFFRLFFLRFFFRFFLFFFFRFLRFRLFFRFRLFLRFFLRFFRLRFLFFFFLFLRFFLFFFFFLRFFFRLFRFFRLLFFLFFFFFRFFFLFFFFFRFFRL +FFLLFFFFRFRFFFFLFRFLFFFRLRLRRFFFFFFRFFLFFFFRFLFFLRLFRFFRLFFRLRFFLRLFLFLRRLRFFFRFRFLLRRLLFFRFFFLRFFLLFFRRFFFFLFFFRFLRLRFFFFFFFFFFFLLRFRLRFLRFLFRFFLFFFRFLFLFRRLFRFFLFLRRFFFFFFRLRLLRFFFLFFFRFFFRFLFLFFLFRLFFFFRFRFFFFFFFFFFFLFRFRFRLRLLRFFFFFFFRLLRFFFFFFLFLFFFRRFFFFFFFLRFFLRFRLRFFLFFLFFRFRFFFFFRFLFLFRFFLFRFFFRFLFFRLFFF +FFFRRLFLRFFFFRRLFFLFRLFLRRLFFFFLFFLRRLFFFFFLLRLFFLLRFFFFFFRRRFFFRLLRFFFLFFLLFFFRLLRFFRFLRFFRRRFFFRLLRFLRFRFFLFLRFFFFFRFRFLFFFRFFFFLFLFRRLFLFRFRLLFFLFFRFFFFFFFFFFLFRLFFFFRLRFRFLFFFFLLRFLFFRFLFRFLLRRFFFLLRFRFLFFFFRRLFRRFRFFLRRRRRFFLRLRFRFFRFFRRRFFR +LRFRLRRFLRFLRFFFFFLFFFFFLFRLFFFFRFFFLRFFRLLRFRFFRLLFRFLFRFLLRFLFLFFFRFFRLLRFFFLFLFRFFRFFLRLRFRLFRFFLFRFFFLFLRFFLRFRLFLFFFFRFLFFLFFLRRFLFRRLFFFFRRLLFLRFRFFFLFLFFFRFFFFLLFRFRRLFFFLFRFFLLFFFRFFFRFFLRFFLFFRFRLRLFFFFRFLFFFRFFFRLLRFFLFFFRRFFLLRFFRFFFFFRFFLLF +FRRFLRFFLFLRFFRFRFFFFFRLLRFRLRLFRFFRFFLLRFLRFFLLRFFFFLFRLFFFFFFRFLLRFFRFFLLFFFRLFFFRFFFLFFRFLLFRRLFR +FLFLRFLFFFRLRLLRFLFRLFFFFLFRRFFLRFFFLLRFFRFLFFFRFFLFFLLRRLRRLLFRFFRFFLRFFFFFFLFLFRFLLRFRFLLRFRRRFRFFFFFRLRLLRFRFRLLLFLFLRLFRFLFFRFLFLFFRFFFLFFRFRFLRRLLFRRFFRRFFLRLFFFFFFLLRFFFRFFRLRFLRFLFFFF +LLFFFLFLRFFFFRLRLLRRLRFLFFRFFLFRFFFLFFRLFFFFFFRFLFFFFFFFFFRLFRLRLFRFLRRFLRFRLLRFFLLFRRFFRFFFFLFFFFFLFLRFFLFRFLRFFFFLFFFFRLFRFFFLFRFLRLRRLLRLFFFFLFRRLLRFLRFFFFFLFRFRLFLFFLRFFFFFFLLRFRFFFRLFFLFFRLFFFFRRLFLFLRRFFFLFLFRFFRRLRLFFFFFFFFFLFFFFFFFFFRFLLRRFRFLFFFRFFLRLFLLRFFRFFFFRFFFLRLRLRRFFLRRF +FRFLRFRLFRFRFFLFFFFFFFRFLFLRRLFFLRFFFFFRLRLRFFLFLRFFFFFFFRFFFFFFRLFLFRRFFRFLFFLFLRFFFFFFFFRFLLRRLFFLFRFLRLRFFFFFRFRFFFFLFFFRLRFLRRFLFLFRFLFLLRFRFLRFLFFRFRFLFFFFFFLRLFLFRFLFFFFRRLRFFFFFLFFFFFFLFFFRFFLRLFRFLR +RRFLFRRFFFRLFRLFRFLLRLFRFFLFFRFRFLLRLFRRLFLRFRFRLLFFRLFFFLFRFRFRLFFLRLFFFLRFRFLRLRLRRFLLFRLFLFRFRFRLLRRLLRFLFRRFFFRFLFRLFRLFFFFLFFRLFLFRFLRFRLRLFLRFFFFFF +LLFRRFFFRFLRRFFLFFLFFFRFFFLFRLFFLFFFRFFFFRRLFFFFFRFLFRFFFFFFLFFRLLFFRFFLFFRFLFFFRFFLFFRLFRLFRRFFFFLRLFRLFFFFRLFFRLRFFF +FLFLRFFRRFLRLFFRLFFFFFRLFLFFRFRLLFLFFFFRLRFLFFFFFFRRFFLFFFFRFFFFFLFFRFLFFRFFFRLRRLLRFLRLFRLFLLRL +FRLRFFFFRLFRLFLFRRLRFLRFRRRFLFRFFFFRFLFFLFFFRFFFFFFFLFRFFLFFFRLFFRRFLFFRFLFFFFRLLFRFRFLRFLFFLFRLFFRFFFRLFLRFFFFLFFFFFLRFFFLLLFLFFRRLFFLRRLFFRLRFFFRLLFRFFLFLFRFFFF +FRFLFFFFFFFFLFLRFFRFFLFFFFRFFRFLLRFFLRFFFFFFFFRFLFLFFFFFFRFFFRLFRLLRFRFFFFFLLRFRRLFFRLFFFLFFFLLRFFFFFFFFFLRLRFFFRFLRFLRLRLLRFRFFRLLFFLRFRLRLRRFFFFFLFLFL +LFRLLRRLFFRLFFLFRFFFFFLRFFFLRFLFFFRFRLRRLLFFFFRLFRFFFFFRFFFLFFLRRLFLFFFFFFFFRLFRLFFFLFFFLRFFFRFLLRFFFFFFRFLFFFFFFLLRLFFRLRFLRFLRFLRFFRFFFLRFFLRRFFLFLFFRLRFLFLLRFFRFFFFFFFFFFLRFLFFRFFRFLFFRFFFLFLFRFRLFFRFRFLRLLRLRRLLFRLFFLFLF +RRFLRLFRLRFFFFLRLLLLRLFLFRFRFFLLRRLFFLFRFLRLFFFFFFLLLFFRLFFFLFLFRLRRLFFFLRLLFFRFFFFFRLFLRFFFFRRLFL +FRFRRFFFFFLRFLFFRFRLFLLFFLRRFFLFFRFFFLFFLFFRFFFFLFRFRFFFFLRLRFFRFLRFFLFFLLLFFLFFFFFFFFRRFFFRFLFFRFRLFRFLFFFRFFFRFFRRFFFRFFRRRFFFRF +RLFLFRFFRLFFFRLLFLRRFFFFFFFRLFRFRF +FRLRLFFRFRLFLRFRLRFLFFLLRFRFFFFFLFFFLLFFRFRFLFRLFLFFFRRFLRLFFFRFRLFFFFFFLFFLFRFLFFRFFFRRFLLFFFLLRFRFFRFLFFRFFFFFRLFFFLLRLFFRFFFFLFFFFFFFFRLFFFFFRRLFFFRRLLRRLFFFFLFFLRLFFFFFFFLRLFRFFRLRFLLRFFFFFRFFLFRFLFFFRRLLRFRLFRFRLRLFLLRFFFRFLLRFFFLFRLRFFLFFFFLFRLFRLRRFFLFFFLRFFLFFFLFFLFLFFFFFFFFFFFFRLFLFRFFRLLFFFRLRFFFLLRFLRLFRFFLRFFFRFFFFFFFFFRFF +LRFFLRLLRRLLFFLFFFFLRFFFFFFLRLFFRLFRLLFLFLFFFFFFRLRRRFLLFFFLLFLRRFFRFLFFFFRFFRFFLFFLRRFFFLFFLFFFLRRLFFRLFRFRLFFFRLFFLRFFLRFRFLFF +FFFLLRFFFFFRFLRFFFRFRFRLLFRLFRFFFFFFFFLFLFRRF +FRFLRLRFRFLLLLLFRFFLRFLLFFRLRFFLFLFFLLFFRLFRFRFLFRFLFFFLFLRLFRFFFRFFFFLLFFFFFFFFRFLFFFLRFFFFLFFFFFFLRLLFLRLFFRLRLFFRFLRFLRLFRFFLFRRFFFFFLLRFRFFFFFRFFFFFFFLFFLLRFFFFRLFRLFFRFLFFFRFLFLFFFFFRLFRLRLRFLRFFLFLFFFRFLRRLFFFLFRLRFRFRRFFFFFFRFFRLFLRFFRFFFFRRLRFLLFFFFLLRRLFFFLRRLLRFFFRFLLFFRFFRLFLRFFLFFLLFFLFLRFFLFFFFFFLFFFRFFLFRLFFRFFFFFLFLFFRLRFLL +RLLFLFFRFLFFRLFLFRFFRLFLFFFFLFFRRFLLRFFFLFFFFRFLFLFRFFFRFRFFLRFFLFRFLRLFFFFRFFFFLFFFFRFLFFLFRLRFFLFFFRFRFRLFFLFRLFLRFLRLFFLFFRFRFFFFFFFLFRLFFRLFFRFLFLFRLRFRFFLFFFFRFRFFLRLLRFFFFFRRFFFFLFLFFRFFRLLRRFLRFLFFFLLFFRFFRFLFFFFFFFFFFFFFFFFRFFFFFFLFFFRFFFLFFFRFLRLFFFLFRLFFFRFFRFRLRLFFFFLRFFFLLFFRFFFFRLFFLLRFFRFLFFLRFFFFFLF +RRFLFFFFRRLRLFFRFRLRFLLFFFLFFRFLRLRLRFLRFFFFRFRFFLFFRFFLRLFLRFLFFFFFFFLFFRLRFFFFLRFLFFRFLFLRFFRLRRFLLRFFRRLFFFRFFLFFLRLFFFRLFRFRFFFFLFRRLLRFFLRRLLFFFFFFFLFFFRRLLFFLFRRLRFRLFFFRLRRFLFLRLFFFFRFRLFLFFRLFFFFLRFRFLRFFRFLLFRFRLLFLRFFFLRLLRFLRFFFFFRFFFLFFFLFLFRRFFFRFLRFFFFFFFRFFFFRLFRLLRFFFFLRFLRFFLFLFFFRRFLFFRFRLRLFFFFFFFFFRRFLLFFFRLFRLRFLRFLLRLFFFFFRFFLFFLRFFFFFFFFFFFLFFRLFFFRFFFFRFLFFFFLLRRFFLRFLRRFLFRRFLFFFFLF +FFFFRRFFLFRLRLFRFFFFFFFRLLFFFLFRRFLLRFRLFLRLFFFFFFFFFFLFLLRRFFFFFRLFFRRFLLRLFFRFFLRRFRLFLFRLRFRFFLFFFFLFFRLRFRFFFFFLRFFFLFLRRFFLRFFLFFLFFRFLFRLFLFFRFRFFFRFFLFFLFRRLFRLFFFFFRRFLRLRLRLLFFFLFFRFFFFFFLFRFFRFLRFFFRFFLFFFRFLFLRLRFFLLFRRFLLRRLRRFFFFFLFFFFRFLRFFFRFLRFRFFLRFLLFFFFRLRRLFFFLLRLFRLLRRFLFRRLFFRFFLF +FLLFLRFFFRRLLFRFRFLRFLFRFRFFFFLFFFFFFRLLFFFRFFRFFLFFRFFRLRFLFRLLFFFFRFLFFFFFFFFFFRLFLLFRRFFFFFFFFFFLRLRFRLLFFRFFFRFFFLFFLFFFRFFFLRLFRLLLRFFRLFFLFLFRLLFFFRFFFLFFFFRFFRLLFLRRRRRFFLFRRFFFFLRFFLFFLRRFRLLLRFLLLLLFRFRFLFFFLLRRFLRFRLFFRFLLRFFFFLF +RLFLFRFFFFRRFLFFLFLFRLRFRLLFFRFRFFFLFFLRFFFFFRLLFFFRLRLFFFLRRFFLRRFFLFRRLFFFRFRFRFFFFRFLFFRFFFFFFFFLLRLRFRLFFRLFFRFLLRFFLFFFFFRLFFLFRFRLFFFLRFRLFFFFRLLLRFRFRLLFRLRFRFFLLFRFFRFF +FFLFFLRRFLFRFLFLRRFFFRFLLLLLFLRLRLRLRFRFFFFFFFFFFLFFFFFFFFFFFFRLRLFLFFFRLRFFLRRLFFLFLFFFFRFLRFRFFFLFLFLLFRFFFLRFLLFFFRFRLFFFFRFFLFRFFFRFLRFLFRFFRRRFFLRFFFFFFLFFRLFRFFFFFFLRFLLFFLFRRLRLFRFFRFFLFRFLRFFLLLRLFLFFFFFRLRFLFFFLRFLRRLRFFFLRLFFRLRFFLFFFFFFRFFLFLRRLLFRFLFRFRLFFLFFRFRFLFFLRFFLRFFF +LFFFFFFLFRFLFFFLFRRFFFFFFFLRFFRLFLFRLRFRFFFFFFLLRFFRFRFLLFRLFRFFFFRFLFFFFFFLRFFLRFFFFFFRFLFFFFRLFFLRRLRLLFFFFLRFFFFFFFLFFFRFLFFLFFFRLRFRLRFFRFLFLRLFFRRLLFFRLRFFRFFLRLLFFFRLLRFFRFLLFFFRFLFFFRFFFFFFLLRFLRRFFFFFLRFLFFRRFLFFFFLRLRLFFFFRRLFFLFFLRFFFRFFLRFFRLFFFFLRFFFFFLRFFFRLLRFRRLFFLRFFFFFFFFFRFLFFRLFLFFRFLFFLRFF +FLLLFFFFLRFFFFLFRLFFRFRRFFLFRFLFFRLRFFFLRFLLRLFRFFLFFFFFLFRRFRLFLRLLRFFFFLRRRLRFLFLRRLRFLRFFRFLRRFRFFLFFRRLLRFFFFFFRFFLFFLRFFFLFFFFFFRFFFFFLRFLFFLFFRRLFFFLRFFRFLFFFFFLFFFFFFRFFFLFFRFFLFRLFFFRFLFFRRFFFFFLFRFFLFFRLRFRFLFLRFFLLLFLRLLFRFLFRLRLFFFFRFFLFRLLFFFFFRRLRLFLFFRLFLLRFRFRLRFRLRFFFFL +FRFFFRLRFLRFRFFLLFRFFLRFFFLRFFFFLFLFFRFRRFLLFR +FRFFFLLFFRFLFRFFFRFFLRRFFFFRRFFFFFLLLLFRLFFRLFRFFLFFLRFRLRLFFFFFFFLFRFFRRLFFLRRFFFRRFLFFLLRRLFRFFFRLFFFFLFFFFFFRLFFFRFRLFFLFRFFFFLRFLFLRFRFFLRLLFRRFLLFFFFFRFFFFFFFFFRFFFR +FFFFLRLFFLFFFRLLFRLLRRLFFFFRRLLRFLFLRLFFRLRFLRFRFFFLRFFLFRFFFLRFFFFLRRLRFLRLLFRLFFFLRRLRFFFFFLFFFFFRLFRFFFFFFLFFFFLRLFFRFFRFFFFLLRFFLFFFFFLR +FFRLFFFFFFRLFFFFFLFFLFFLLLFLFRLFFFRFFFRFLFFFLRLFFRFLFFFFRLLRFRFRFFFRFFRFFLLRFRFFFFFFFRLRFLFFFFFFFRLRRFLFLFFFFLFRFFRLFRFLFFLLRFFFFLFFRFFRFRFLLFFFRFFFFLRLFRFFFF +FFFLRLLRFFRFLLRFFRFFLRFFLRFFFFLFFRRFFFFFRFFFLFFFFLFRFRLFRLFFFFFFRFFFLFRLFFLFFRFRLRFRLFLFRRFFRLFFFLLFRLFRFFFRFLFFF +LFRRLFRFFFLRFFRFFFLLFFRRFLFFFLLLFLFFRRLFLLLRFFRLFRFRLFFFFFLLFFRFLRFFFFRLFFFFFRRLLFLFLFFRRRFFFLLLRLFFFFFLFFLFFFFRLFFRFFFRFLLRRLFFRFFLFFFLLRFFFFFLFFFFFRLL +FFLFFRFFLFLFFRFRLFFLFFFFRFFLRRFFRFLLRRFLFFFFFRLFRLRFFLFLFLRFRFLFFRFFFFLRRFLRLLRLFFFLRFLFRFLFFFRFFRFFLRRFRLLFFRFLLFFFRLFFFRFLRFLRFFLRFFLFLLRFFRFRLRLLRFFLRLFFFFFRFFRLRLRFRFFLFFLFRRFLLRFFLFFRLRLFRLFRRFFLLFFFFLFRRFFFLFRLRFFFFLRRLLFFRLLFRRFLRLFFLRRFFRLLRFLRFLFLRLLRLRFRRLF +LFRRFFRFFFFLLFFLFFLFLFFRFFLRFLFRLLRFFFRFRFFLRFLFRFRFLFLFFRFFFLRFLFFFLRLRLRRFLLFFRRLLFRFFRLRFFRFFLLFFRFFFRLFFFFFFFFFLRFFFRRLLFRRFFLLFRFRFLFFFFRLFFFLFFFRRLFFLRFRLFLRFFLFFFFRLFLRLRRFFLLRFFRFLFRFFRLLRFFFFRLFFFFRLLRFLRFFFFLLRLRRFLFFFLFRLRFLFFFFRFF +RFLFFLRFRLLFFRFFLLFRFFLFRLFFFFLFRFLFRFFFFFFLLRFFFRFLFFFFFLFFRFFFFFLFFFFLFFRFRLRLFFLFRFFFLRFLFLFRLRFRFLLRRFRFFLFFFFLFRFLRFFLFFFFFFRLFFFRRLRFFFLFRFFFLFFLFLFRFFRFLFFRRLRLRFLFLRLRLRLFRFLFRFFFRFRFLLFFFFLFFRFLRFRLFFLRLFRRLRFFLFFRLRLFLRFFFFLFFRFLLFFRFFLFRFFFFFLFRFRFFFLFFFRLRFFRLFFLFRRLFFFFFFLRLRLRFRLLFFFFFRLFLFRLRFFFFFFFLRFFLFFLLRFFFRFFRLFFFFF +FFRFRFLFFFRFLFLRFFRFFLFFLFFFLFFFRFFFFRFFRLLFRFFFLLRRLLFFLRFFRRFLFRLFRLRRLFLFFLRFFRFRFLFFRLFRFLFFLRFLRFRFRLFLRRLRLRLLRFFLFFRLRFFFLFFFRFRFFFFFFFFFFRFFFLFFFFRF +FFFFFFFFFRLRFLRFLFRFLLRRFRLFFFFFLFRFLRFFRFFFLLFFFRLRLRFRLRFFLRFFLFFFFLRLRLRFLFFFLLFRFRFFFRRLFLFFFRRFFFFFFLFFFFFFLFRFLFFRFRLLFFLRFFFLRFFFFFLFLFFRFLFLRFLL +RRFFFRFFFLFFFFLFLFRFLRLRFRLFFRFFFFLFFFFLRFFFFRFFFFFLFRLFLRFFLFRRFFLLRFRFFLFFFRLFLFFRFFFFLFFFFRRLFLRFFLRFLRLFFRLFFFFFLFRFRLRFFLRFFFFFLFFFFRRLFFRFFLRFRLFFFFRRLFFLFRFFLRFLFFFFLFRLFFRFLRLFFFRFRFLRLFFFFFFFRFLFRRLRFRFLLRFFRLLRFFFF +FLFRFLFFLRFLLFRRFLLRRFFRLRFLLFFFLRFFFFFRFLLFFFRRLR +FLFFFFFFRFRRRLRFFLFFRLRFLFLLLFFFLFFLRRFLFLRFFFLRFLFFFRLFFLLFLFRLRLFFLFFFLRFFFFFLLRLLFFLLRRFFLRFFFLRLLRLFRFRLFFLLRFFFFFFFFLRFFLFFLRLLRFRLFRRFFFFFFLFRFFLRFLRFRLFFLFLLF +LLFRFLLRLRRFFLFFFFLRLRFFFRFRLRFFFLLFFRFFFFFFFFRRFFFLLRFLRRLLFRFFFRFLFFFLFFRLRLFFFFFLRFLFLRRLFFLLRRFFFFRFFFRFRLFLRFFFFFFLLRRLFLRFFFFLFFRFRFRLLFLF +RFRRFFFFFRFFFFFFRRLLRFLFFFFLFRRLRFFFLFRFFRFFLFRRLLFFLLRFFFRFFLFLRFRFLRRFLFLRFFFRLFRLFFFFRLFLRFFFRRLLRLFRFRFFFFFLLFFFFFFFFFRFRFRLLRRLLFFLFFFFFLRFRFLFFRLRFRLFFFFFFLFFRFLFFRLLFLFRRLFFLRLFFFRRLFRLFRLLRLRFLLRLRRLRRLLRFRLFFFFRFLFFRFFLFFFFRLFFFLFLRRF +FFRFFFLFFLRLFFFFRLRRLLFRLRFRFLFFLFLRFFFLFFRFLLFRRFFLFFLLFLFRRRLFFRFFFLFFRLFRRFLFFFRLFFRFFFLFFLRRRRRFFFFFFFFFFFFFLFRRFFFFFRLRFFFLLFFLFFLFFRFLLFFLRRFFFFFFLFLFRLFFRFLRFFFRFLLRFFFLLRLFRRLFFRRFLLFLLRFFFRLFRLFRFFRFFFLFFLLLRFFLRLRLLFFFRRLFLFRRLFRFFLFFRRLLFF +RLFLFRFFLFLLRFFRLRRLRLRFFFLFRLFRFLLFFFFFFRFFRLFFFFLRLLRLLRRFFFRFLRFFLFFFFFFLFFRLFFFFRRFFFLRFFFFRFFFLFRFFFLLRLFFFFRLFRLFFFFFRLFRFLLFRFFRLRFLRFFLRFRLRFLFFRLFRFRLLFRLFFRLLRRFLFRFLRLLFFRRFLFFFFRLLRFRLRFFFFLRFFFLFFFFFLLFFRFRLFRRLLRRLRLRFFFLFFFFRFRFFLRFFLFLRFLFRFFFFLRFFFLRFRRLFLRFRLFFFLFFFFFFFFFRFLRFLFLFFFFFRFFLRRFFFLFFLFFFFFFFFFFRRLFFFRFLFLFFRFRLLRLFR +LRLLFLRFLFFLFRFFLRRFLFFFRFFFRFFLFLFRLRFFFLFRFRLFFRLFFFRLFLFLFFRFLFRLRFFFLRRLFRLLFRFLFFRLLRFFFLFFFRRLFFRRFLLRFRLFFFRLFLRFRFLFFF +FFLFLFRRFLRLRFRLFFLRLRFFFRFFLLFFFFFFRLRLFFFFRFLLFRLRRLFLRR +RRLRRLRLLFFFFFFFRLLRFRLLFFFRFFFFFLLFRLFFRFFFFRLLFFFRLRFFFLRFFFRFRLFRFFFRLLFFFRLLRFRFLFFRFRRLFLFFFFFLF +LFFFLRFRFRLFRFFFFFFFFFLLFFRFFFLFLFRFRRLFLRLRFFFFFFFFLFFFFFLRLFFRFFFLFFFRFFFFLFLRFFRFLFRFFFLFFLFFRFFLRLLRFRFRFLLRRFFFFFLRFFRLFLFFFFFLLRFFLRLRRLRRFLRFLFLFRFFFFFRRLFRRLFLFRFLFFLRFFRFLLRFRFFFLRLRFLFLFRFLL +FFFLFRFFFLFFFRFFFFFFRLLFLRFFRFFFFLFRLRLRFFFRRLLRFLFFFLFRLLRFFFLRRLFFLRFFFLRLFFFFRFLRFFLRRFFFFLFLFRRFLFLRRFFLFFFFFRLRFFLFLRLFFFRFRLRFRLFFLFFRLRFLFFLRFFFRFLRFFFFFRLFFLFFLF +FRLRFLFFFFRFFRFRLFLFFRFFFRLRRLRRRLLFLFFFFLLRLLFLFFFLRLFLR +FFLFRLFFFFRRFFLRFLFFFFFFLFFFLRRFFFLFRLRLLRLRRFFRLRFFRFLFLRLRLLRFRLLFRRLFRLRFFLFFLRLFFFLRFFFFFFFFFLFRRFFLFLFRFFRFLFFFRRFLFFFFLFLFRFFFLFRFRFLRRLFLFRLFFLLRFRFFFFFFLFRFRLFFRFLFRFRFLFRLRLFFFFFLFFRLFFFFFFRRFFFFFFLRFLFRRLLRFFFFRFLRRLFLFLFRRLFFFLLF +FFLLFFFFRRFLFRLFRFLLFFFFRLLLFLFRFFRRRRFLRFFFRLFFLLRFFFFLFRFFFLFLLLRLLFFRLFLLRRFRFFLLRRFFLFRFFFFLRRLRFLFRFFLFLRFLFRRFFFFFFFFLRFFFFFLFLLLFLRFFLLRRFRFFLRRLFFFFLRLFRLRRLFLFRFLLFLRFFRFFFFLRFLRFFFLFRLFLRFFFFLFFLRFRFFFRLRFLFFFFLFFFFRFFLFRFRRFFFRFLRFRFLFLFFRFLFRFFFFFLLFFRF +LRFFLFFFRLFFFFLLRFFFFFLFFFFFFFRFRLLFFLRRLRFFFRFFFFLFFFFLFFLFFFRFRFFFLFFFFRFFRLFRFLLFFLRFRFRFFLFFFFRLRLLRFLFRRFFLFRFFLFFFFFFFRFRFFFFFLLRFFLFRFFRLRFLFFLFLRFLFRLRRF +FLFFFFFLRFFLRFFFLFFRFFFFRFLFFRFLFFRFFFFRFRFRFFFRFLFFFRFFFFLLRLRRLRLFLFFRFFLFFFLLRFRFRFFLFFFLFRFFFFRLFLRFFFFFRFFLLFFRRFFFFFFRLRRFFLFFFLRFFFFFFFFFFFFFFFFFFLRLRFF +FLLFFRLFFLRFRFFFLFRRFLRRLLRFFFRLLFLRRLRFRLLFFLRFFLFFFRFLRFRFRLLFFFFFRLLFRFRRLLFRLRFLLRFFLFLRFFFFFFRFFLFFRLLRLFRRLFFRRFRLRFFRFLFFFFLRRRLFFFFFLFFLRFRLFLFFRFLFFFFLFFRFLRF +FLFLFLFFFFLFRFRFLFFLFFFRFFLRFFFLFFLRFRFLLRLRLRFLFFRFFFLRLFRLFLFFRLFFLRRFFFFFFLFRFRLFFLRFFFFFFRFLFLFFFLRFLFLRFFRFRFLRFFFRLFLRLFFLFRFRFRLLRFFFFRLFFFFFFRFFFFFRFFRF +FFFFRFFRFLRRLFRLFLFLFFRFRFFFFRFLLRRLLFRFFFLLFFFRLRFFFFFFFFFFLFFFLRFFFFFLRFFFFFFLFRFLRLRLFRFFFFFLLRFFRFLRLLFFFRRFFFFFFRFFRFLLRFLRFFRFFFLFLFRFFFFFRFLFFLRFFFLRRLFLRFRRLFLFFRLLFFRFLFRLFFRFLFFFLRFRLRFFRFFRLLFLFFFFFRFFLLFFRFLFRRLLRFRFFFFFFFLRLFFFLFFRFLFFFFFFRLRFFLFRFFLFFFRFRLFFLFLFRFFFRLRLFRFLLFRRFFLFRLFLRLRLFRFRFLFFFLRLRLLRLFFRLRFLFLRFFRFL +FFLFLFLRFRLFFRRFLRLLFFFLFFRRFLRFFFFFRFLFF +FFFLFLFRLLFFRLFFFFFLFRFRFFRRFLFLFFLRFFFFLFRLFFFRFFFFFRFRFRRLRRFLLRFFLFFFRLFFLRLFRRLFFRLLRLRFFLRLFFRFFRLFFFRLFLFRFFFFFLFRFFFFFFFLLRLFFFRFFFFFRFFFFFFLLRFFFFFFFFFFFFRLFLFFRLFFRFFFFFRFFRFFFRLLFLRFLFLFFLLFFFFLRFFLRFFRFFRFLFFFFFLFRFFLFFLRFFRFLFFRRFFLRLFFLFRFFFRFLLRFFFFFFLFRFLLFFRFLRLFRFFLFFFLFLFLFFLFFRFFFRRF +FFRFLFLRRFLFLRFLFRRFFLRFFFLFFLRFFRLLRFLLFFRFRFFLRFLRFFFFLRLFRFLFFRFRLFFFFFFLRRLFFLFRRFRRLFRFRFRLFLLFRFLRFFRFLFLRRFFFFRRFFLFFLLFFFFFFFFFFFFRFRLFLRLLFFFFFFFRFLRLRLFFFFFRLLLRLFFFFRRFLFRLLRFFLF +RFFRLFFLFLRLRFLFLFFFFFRFFRLFFFFRFLRRFRLFFFLLLLFFFFRLFLRFFFFLRRFFFFLFFLRFFFFFFLFRFLRFLFRFRLRFLFLLFFFFFLLRFRLRFRFFLFFFFFFFFRRLFFRFLLRFLF +RFFFFFLRFRLFFRFFRLFRLLFRLFFLFFFFFRFRFFLFFRLFLFFFFFFRLLRRFLFFFLFFRLLRFFFLRFFFLLFRRLRLRFRFFLRFFLFRLFRLFFFFLFRLFFRRFFFFLLRFFLRFLFFFLRRFFFFFLRLRFRFFFFFRFLRLRLFLRLFLRRLRFFFFFFFFRLLFFRRLFLFFFFFRRLFFLFFRFFLFFFRFRFFLRFFFFFRFLLRFLFLFFRLFFRFRLRFFLFFFRRLLFRFRLLFRRFFFFRLRFLFFLFLRRFFFFRFFLLFFFFFRFLLRFFFRLFRFFLRLRF +LFFLFFFLFRFRFFRFFLRFFFRLLRFFFFFRFFLFLRFFRFLFRFLLRFFFFLFFFLRRFFRFLFFRLFFRFFFRLLRFRLFLRLFFFRFFLLFRLFFFFRLLFFFRLFRRFFRLLFFFLRRLFFRFLRLRRLRFFLFFFFFFFRFLRFFFFLRFLRFFRFLFLFRFLFRFFFRRLFFLLLRRFFFFLFFRFFFRFFFFFRFFLLFFFRLFRFFRFFFLLRLRFFFLFFLRFLRFFFFLFRLLFRFFFLRLLFF +FRRFFLRFFFFLLRFRFRLFFFFFFFFFRFRLRLRLFFFRFLFLFLRFLRFFRFFLRFFLRLRLRLRLFRRLFFRLRFLRLFFFRLFLRFLRRFFLFFRFLFFFFFFFFLLRRFLFFLFFRLLRRFFFFRLFFFLFRFLFFFFFLLRLRFLLF +FFRFFFFFLLRFLRFFRFRFLFRLFLFFFFLFFFRLRFFFLLFFRFRFRLFFRRLLFLRFFFFFFRLFRLFRFFLFFFLFRFFLLRLRRLFFFFRLFFFLFLLFFFFFLFFRRLFFFRLFRLFFFFRRLFLFFRFRFLLFRFFLFLFFRFRLFFRLFFFLFRLRFFLFRFFFRFLFFFFRLFFFRLLLFFLLFRLFFFFRLLRRFRLFLFRFRFRLFRLFFRLLF +FFFLRFFFFFFLFRFLFRFRFFLFFFLRRLFFLFFLRFFFFFLRFFRFFFFRLFFRLLFFFFRLLFFLRFFFLRFFRFFFRFLLRFFLFFFRRFFLFFFLRFRFLLRFFFLRFFFFLFFRFFFFRLFLFFFRFFFFRLFLRRLFFLRRFRLRFLLRFFFRRFLFFLFRFFLFRFRFFLFFFFFFLFRLLRFFRRLLFLRRLFRFFLFRLFFFFFLFFLFFRFFFFFRFLFFRFFRFLFFFRFFFFFFFRFFLLFFFRLRRLFFLFRLFFRLFFFFFFFRLFFFFFFFRLFFRF +LFLRLRFFFFFRRLFLLRLRFFFFRFFFFLFFRLRFFFLFFFFRLFFLRRLLRRFFRFLFRLFLRFLFFFFFFLFRFRFFLFFLRFRFFFFLLRFFFFLRFRFFLFFFLRFFFFFFFRFFLFRLFFFRFLRFFLLRLFFFFRFRFFLFFRFFRFLFFFRFFRLFRLRFLFLFRRFFLLFFFFFFLRRFLRLRRFFRLLFFFFFFLFFR +FRRFLFFFRLFLFRFFFLRFFRFLFLLRRFLRFLFFFFFFLFFRFFFRLRRLFFFLFRFRLFFFFLRFRLFRLFLFFRLFRFRLFRRFLFFFFRLLFFFLRFFFFFFFFLFRRFFLRLLFRRFFLRLL +FRRFLRRFFLFFRFRFRRFFRLFRRLRFFLRFLRRLLFFRFFFFFFRFFFFFFFRLRFLRLLLRFFFFFFLRLLRFLFFFFLRFFRLLFFFFRLLRRFLFFFFFLFFRFRLLFFLLLFLRLFRFRFLFFRLRLLRFFRLFLFFFFFLRLRFRLLLFLFLFFLFRRLRFLFRLRFFFLFFRFLFRFRFRLRFLRFFLFLFFRLRRFLLRFRLFFFFFFFLFFFFFLLFFLLLFRLRFFFFLLRRFFLRFFFFRFFLFFRRFFFLLFRLLRRFRLRFFRFFLFFFL +RLLFLRLRFRLRFFLFRFLFLRFFLLFFRLRRFFLRFFFFLLFRFLFRFLFFFFRLRLLFFRFFFLFRFFRLRLFFFLRLFLRFFFFFRFLFLRLLFRRLRFFLRFFFLFLRFFRFFFFFLFFFFFRFRFLFRLFFRFRFLLFFLRLRFFRFLFFFRLRFLRLFRFLFLFRRFFLFFFFRFFFFRLLFFFRLLRFFLRRFLFFRFFFFRFLFFFRLRLFLFF +FLFRFFLRLRLFFFLFRFFFRFFLFFFRRFFFFFLRRLLFFRFFRLFFRLRRLFLFLFFFFFRFFLFRFFFRLLFLRFLFRFLFFFRFRFFFLFLFFRFFFFLFFRFFFLFRFFFRLLRFLRLFFLFFLLFR +FRFRLLRFRLFRFLFFFFFRFRFRFFFFLFRFFRLFFLLFLFRLFRRFLLLFFRLLRFLLFRFRFFFRFLFFLRFFRFFFLRRFFLRLFFRRFFFFRFFFFLRLFFLRFRFRRFRFLFRLRFFRFLLFFRLRFLFLFRLRLFLLRFLFFFLFFRFFLLFLFFFRLLFFRLRFFLLRLRRLFRFFFRFFFFLFRLFRLFLRFRFFLRFFLRFFLFFFLL +FRFFFFLFFFLLFFFFRLFRRLFFRFFFFFLFLLFFRLFRFRFFFFFFFLFRLRRRLFLFRFFFLFRLFFLFRLLLRRFFFLRLFRFLFFRFLRRFFFLFRFFFFFFFLLFFRFLLFRFFFFFRFLFFFFFFLFLFFL +FLRLRLRFLLRFFLFRFFLLRRFFLFLRFFFRLRFLFFFFFLLRFFLFRLRLFRFLRFFLRLFRFRLRFFLFFLRFFFFFFLFFLRRFFFFLFFRFLFRFRLFRFFLLFFRLFRRLRFLFFLLRRFRFFFLFFFFLFRFFFFFLFFFRLRFRFFLRLLRFFLFLRLFRFFFFFFLFFRFFRLFFRFFLFFRRFLLRLF +RFLFRLRLRFFLLFFFFRRLLFFFFLRFFRRLFLRFFFFLFFRFLFRRLLFFLRRFFRFLRFLFFRLLRFFLFFFFFFFRLLRRLRFFLLRLRLRRLLFFRFRL +RFLFRFFRFFFFRFFFFFFRRLFFRLLFFF +FFLLRRFLFFRLFFFFFRFFFRFFFFLRRLFFFLRRFLRFLFLFRRFLRFFLRLFFRLFLFRRLFFLLRFRRLLRLFFFFFRFFRFLRLLFFLRLFFRFFFFRLRFRLFRLFLFRRFFFFLRFFFRLFLFLFFFRRRFFF +FFLLRFFLRFFRRFLFRFFLFRLLRLRFLRRFRLFFLFFFRFFFLFFRFFFLRFLFRRFFRFLRFFLLRLFRFLFFRFFFLFRFFLFFRFFFLFFLFFFRFFFFFFRFLRLFFFFFLRFFRFRLFFFFLFFLRFRFFFFLRFFFLFLFRRLFFFFFFRRFFFFFFLFLRFRLRLLFRFFRFFFLFLFFLRFLRFFFFLFFFRFRFLFFFFLRFLFRRLRRLFFRFFRLLFLFRFFFFLLRRLRF +RRLFRLRLLRRFFFFFLFFFFFLFFRLFRFLFFFFLRLRFFFFFLRRLFFFRLRLFLFRRFFLRFRFLFFRLFLFRFLRFFFFLRFFRLFFFLRRFLFFRRLFFRLLFFRRLFRLFLRFFFLFFRLRLRFFFFFFFFFFFFFRFFLLFFFFFRFFFLRRLFLLR +FLFRFFLFRFFFFFFFFRFLFLFRFLFLFFFRFRFFFFFFFRFLRFFLLFFFRLFFFRFFLLFFFFFFRLFFFFFFRFRFFFFLFRLLFFLRRFFLLRFFFLFFRFFLFRFFFRLLRFFFFRFFFLFFLFFFRFFRFLLFRRFFFFFLLFRRLFLRLFLFFRRFFLFFFFFFFFRFFLFRLFFFFFRFLRFRLRFLFLFFRLRFLRRFF +FLFFFLRLRLFLRFFFLRLRFFLRLFFFFRFFFLFFFFRRFLRFFFLFFLRFFFFFLFFFFRRLLRRLRFLLRRFFFFLLRRFFLLFFRFLRRLRRLRFLFFFFLFFFFFRLFFFLFFRFLFRRFLRFFFFLLRFRRLFFLRLRFFRFLFRFFRLFLFFF +FFRLRLRFLRLFFRLFRFRFLFLRRFFLRFFRLRFRFRLLRLFFFFRLFRFFFFLFFFFFRRLFFFRRRFRFRFFLFFRLRFFFLRLFFRRLLLRRFRLRFRLRFLLRLFFFFFLRFFFFFFLFFRFFFLLFRFLFFRFRLFFLRLFRLFFFLFRFRRLLFRRLFFFLFFRFFRFLLRRLLFRLRFFFFFLRFRFFFFRFFLFFFFRFLFFFRFFLRFFLFLLRFFFRFLLFFRLFRRLFFLRFRRRFLFRLRFRRFRLFFFFLFFRFFLFFRFFLFLFRFLRFRFLLRLRLRFRLFFFFRLFRRLFLRLRRLFFLFRFRLFFFLFLFFFRRLFFRFFFLFLFFLLLFFF +RFRFFFFFRLRFLLFFFFLFFRLFLRRFRFFFFFRLFRLRLRFLFLRFRLLFFFFFRFLRRFFFFRLFLFRFLRLFFLRFRFFFFRLFLFFFFFFRFLLFRFFRFFFFFFRFLFRFLRFLFFLFFLRRLFLRFFFFFRLFLFFLRRLFFRFLFFFLFRFLFRLRRFLR +FFFFRRFFFFFLFFFRFRFFFFLFFFFFFFFFFRLLFRRLFLLRFRLFFFFFLRLRRFRLRFLFFFFFFFLFRLRLFRRFLLFFFFFFFFRLLRFFFLFRLRRFRLFFLFFL +LFFLFFLLFRFFFFRLFFLRLFFRFLLRLRFLLFRFFLRFFRFLFFLRRLLFRLFRFFLRFLRRLLRLRLFRFLLRFFFFLRFFFLLFFFFF +LFLLRRLFLRFFRLFFLRFFLLRRLRRFLFRLRFFFFRLLFRFLFRFFFFFFFRFFLFRLRRFLFFFFRFLFFFFRLLRFFRRRRRFLRLRLLFRFFFFFLFRRLFLFLFFRFFRLLFLFRFFLFFRFFRFFRLFLFRRFLLFRLFLFRFRRLLFRRLLFFFLFFRRLFFFLFFFLFFFLFFFRFLFLRFRLRF +FFFFFFFFFFFFFFFFFFFLFLFRFFFFLFRLRFFRLLFFFFRLFFRLFLRFRFFRRRFRFLFLFLLRLLFFRFRLFFFFLLLLFFRRLFLFLFRFRLFRFRRFFFFFFFRFLFFRLFFFFLRFFFRFFLFFLLFFFFLFLRLFRLFFFFRLFRFFFFLLFFRLFRFFLRFFFLFFRLRLFLRFRLRRLFFFFRFFFRRRFFLRFRLFRLLFLRRFFFFLFFFFFFFFFRFLLFFFFFLFRFFRFFLFFFRRLFLFFFFFLFFRFFFLRFFLLRFRFFRRFLFFFRFFLFFFFFLLFF +FFFLRLLFFRFFFFRLFLRFLRRFFLFFFRLRRFFLRLFLRLLRFFLFFFFRRFLLRF +FLFFLFFLFLRFRFLRLFRRFLFLFRFLFRFFFRRLFLLRFLRFFFFFFFFFFLFFRLRFFFRFFFLFFFRFRFLRLFFLFFRFLLFRFFRFRLFFLFFFFRFFFFFFLRFLFFFRLFFFFRLRFFFFFRLFFFFFRFLRFRFLFRLLRRFFFLLFFRFRFLFRLFFLFFRFFLFFFFRFRFLFFFFRFLRRLFFFFLLRFRFFLFRFRRLFFLFFRFFFLFFFFFFRFFFLRLFLFLFRFFFLFFRRFLF +LFFFFRFRFFLFFFRLFRFFLFFFFFRFLFFRRLRFFFLRRLFLFFLFRLFLRFRFFFLFRRLLFLLLFLFFFRFRLRLLRFLFFRFFRFFRLFFLFRFFLFFFLRLFRFFRFFLFFRLRRLLRRFFFRRLFRFFL +FFRLFFFLLFRRLFRFLFFRFFLFLRFFFFFFFFLFLRRLRFFFRLFFRLFLRRFFFFLLFFFRLFLFFRFRFFFFLFFFFLRLFFRFLFRFFFFRLLFRRLFFLFFRRFFFLFFRRFLFLFFFFRFFLFRRFFLFRFRLFLFLRLFRRLFFFRRFFLFFFFLFLFFRFFFFFRLFFFFFFRLFFLFFRFLFFLFFFFRFLFLRRLFRLRFFFFRFFLRRLFFLLRFFFRFFFRLFFLFFFRFLRFFFFLRFFLRLFFRLRLFFLLRRLFRLFFFFFRFFFRLRLRFFFLFRFFLFRFFFLLFFFRLFLRLRRLFF +FFLLRFFFFLFFLFFFRFFFLFRFFLFRLRFFFFFFRFLLFFRRFFLFFFRFFLFFLFRLRLRFLFFFRRFFFFLRLFFRLLRRFRLFFLFFLFFFRLLRRFFFLRFFFLRLRLFFFFFLF +LLRFLRFFFLFLFFFRFFLRFRFLFFFLLRLRFRFLFFLFRFFRRFRFFLFRFFFFFLRFRFRFFLFRFLFLFFLRRLRFRFLFRFLFFRRFFFFLFFLRLRFFRLLFFFLFRFRFFRLFFLFFFLFRFFFFLLFLFFFRLFFFLRLFRLFRFRFRLFFLFFFRFFFLRLFRFLFFRRRFRFFRLFLFFRFLFFRFLFRFLLRLRLLFFRFRFFFFRLFLLRRLRLFRFFFFLFFRRFLLLRFFFFLFLFFFRFFLRRLFFLRRLFFLF +FFFRLLRFLLRLRFFFLRFRLFRFFFLFFRLLFRRLFFFFRFLLFFRFRLLFRFFFLFFFRFRFLRFFLFFLFRLFRLFRLRLFFRLFFFFFRFFLRFLRRLFLRLFLRRLFFLFFFFLRFLFRRLFRLFFLRFFFRFRLFRLFLFRFRLLFLRFLFFFRFRLFFFLRFRFRRRFRFFRLFFLFFFRLLFFFFFFLRFFFFFRRLFFRLFRRLLRLFFFFFFRFLFRFFFLFRFFFFFFFF +RRFLRRLFFFFFFLRRLFLFFRFLFFFLRFFRFFRFRRFFRFFFFFLRRFLFFRFLFFFLFFRLFLRFLFFRFFFFFRLFFFRLFRFFLFLRRFFFRRRFFRFFLRFLFLRRFFFFRFRRRFRFFFLLFRRFFFFFLRFFFLRFFFFFFFLLRFFFFLLLFRFLFFRFLFLFFFFFRFFFLLLFLFRLFLRLRRLLFFLFLRRLLLRLFRFFLFFFFFFRLFFFFFLFRFFLFFLLLFFFFFFFFFRFLFFRRFLFFFFLFLFFRFLFRFLRFFRLFFRFRFLLFRRFFLFFFLRLFRLFFLFFRFRLLFRLRRLFFFFRFRLRLFFFRRFLRFLLRLLRFR +FRRFLFFLFFRFFLLRRLLRFFFLRLRLFFLLRFFFRRFFFLFFFFLRFFFRRLFLFFRFFFFRLLRFLFFFFRFFLFLFFFRFLFRLFFFFFFFRFFLRFFRFFLRFFFFRFLFRFFFFLLRFFRFLLFFRFLRFRFLFLFFRFFFFRFFLLLLRRFFRRLFRFLFFRRFLRLFFFFFFLFFFRLLRLLLFFRFFFLFFRFFFLFFLFFFRFFFRLRRFFRRLFFRLFFFRRRFFFRLRRLFFFLRFLFRFLFFRFLRLRFFFRFLLRRLLLRRFLLFRFFRFFRFFRLFLFFFLFLFRFRFFRFLLFRFFLFFFLFFFFFFRLLFLFRRFRFLLFRF +FFRFFFRLLRFFFRLFLFRRLLFRRLFLLRFFRFFRFFLFFFFRLFRFLRLFFFFRLFRLRLLFLRLFRFFFLRLRFFFLFRFLLRRFFRFFFRLRFLFRFFFFLFFRLFFRFLFLFFRFLFFFFFFRFRFFFLRFFFLFFFFFFLRFRLRLRLFFFRFRLLFFRFFFLRFLFFFFLRRFFFFFLFLFF +FLFRLFRFFRLFRLLFFFFRLFRLFFRFRFFFFFLRLFFFFRFLFFFLRFRFFRFFFLFFLRFRFFLRFFFFFLFRLLFFRRFLFLRFFLRFRLFFFFFRLFRFLFLRFFRLFLLRLRFFRFFLLRFFFFFLFFRLFFFRRLLRFLFRLFFFFLFRFFFLFLRFFLF +FFLFRLRFFLRFFFLFFFLFFFFFLRFFRRFRFRLFFFRLRFFFFLRLFLRRFRFFLFFLRFFRFLFFFRFLFFFRLLFFFRFFFFFFRLRFFFRFFFLFFRFRLFFFFFLLRLFFRLRLRFFLFRFLFFFFRFFLFLRFFRFFRFFFLLFFRFFRFLRFLLFRRFFLFLFRFFFLLFLFRRFFFRFRLLFRFFLFFFRLRLFRLFFRLLFLFLFFFFLFFLFFLFRLFFFFFLRLFLFFRLRFRRRRLLRFRFFFFRFFFFFFLFRFRLLRLFFFRFRLFLLRFFFFRFLFLLRRFFLFRFFRRF +RRFLFFRFLFRFLRFFFFLFRLFRFFFRLFFFFFFLFFFFLFRRLRFFLFFRRLRLFRFLRFFRFFFR +FFFFRFFFLRFFFRFFFLFLRFLFLRFFLRFFFLLRFFRFLRRLFFFLRRLLFFRFLRFFFFLFFFFFFFFFLRRLFFLRLFLFRFFFFLRFRFFLFFLRFLFFFRRLFRLFRFFFFFFLLFRRFFLFFLFFRLFFFRLRFFFFFFFFFFLFFRFRLFFLRFFFRFFLFFLRFFLFRRLFRFLFFLFFFFLLFRFRFFFRFFLLRFLRRLRLLRFFLRLLRRFLFFFRRLFFFLFFFRFFFLRRFFFFLRFRLLFFRFLRLLRRFFFFFFFRRFLFFLLRLRFLFFRFLFFFFRFFRR +LFFFLLRFRFFFFFLFLFFRLLRFFFRLFLLRFFRFFLLRFFFFFRLFFLLFLLRRFFLRFLFFLFLRFFFFFLRFRFRRFFFFFLFRLFRLRFFLLFLLFRLFRLFLFLLFLFRLRLFFFFFFFLFRRFFLLFRFRLLRRLLRFFFRFLFFRLRRRFLLRFFFFLFLRFLFFFLRRFLFLLFFLFLFFRLFFFRFFFLFFRRLFFFLFFFRLFRFLFFFLLLLFFFRRF +FFFFLFLFRFFLRFRFFLFRFLRLFRFFFFLFLRFFFRLFLRFRFFFFFLRFFRFFFFFLLFRFRFLLFFRRFLRFLRLFFFFLFFRLFFFFFLFRLFRLFLRRLFFLRRFLFFRLFFFRFFLRFLRFRFRLFFRLLFRLFFLFRFLRFRLFRFFFFFF +LFFFLFFFLRFFFFRLFFRRLFLFFFLFLRRFLFFRRFFFLRRFLFRFLFFFFLFLFRFLRRLRFRLLRLFFLRRFLLFRFLLFFRFRFFLLFRFLRFRFFFRFFFFLFFFRLFFLRFFFFFFRFLFLFFFRLFRRFLRLRFFFLRFRFLFFFLFLRFFRFLFRFLRFLLFRLRFFRLLRFFFFF +RFFRFLFRRFLLRFFRFFFFFFRLLFLFFFFRFFFFLFLRLRFFRLFRFFFLLFFFFFFRFLFLFRFFFFFRFRLFFFFFFLRLRFFLFFFLFFRFLRFRFLRFFLRLRFLLFRRFFRLFFFLRFRFFFLFRLRLFFLLFRL +LFFLFFFFRFRFLFLFFFFFRLLRRFLFRFLFRFFFRFLRFFFLFRRFFFFFFLFFFFFLRFFLFFLFRFLFFFRRLRFFFFLRLFRLRRLFLFLFRFRFFFFFLRLRFLRLLRFFLFFRLFFFRLFLFRFRRLFFFLLRFFRRLFFLFFLRFFFFFFFLLFRFFRLRFRFFFLFFFFFRLFRFFLFRFFFLFFRRFLFFFFFRFFLFLFRFRFLFFLRFFLFFFFRLFFFFRLFFFLFFLRFFRLFFRLFLFRRFFFFFFFFFFFRRFLFFLFFFFRFLLFFRFLFLRFFRRLLRLLRFFFFRFRFLFLLRRFFFFFFRFLFFFRFLLFFFLFFRFLRFLFRFRFFFLFFFLFFFRFFFRFFRLFFFFFRFFFFLFLFFFRLFFFFRFLFFFLRLFLFRFFRFLFFFRFFFFFLFLRLR +FLRRFFRLFLRFFFRFLRFLFFLFRLRFFFRLFLFRRFFLFFRFFRFFRLLFLFFFRRFLRFRLRLFFLFLRLRFLFRFFLFRFRFRLFFLRFFFFFLRRLLRFFLRRFLFFFRLLFRFFFLFFFRFRLRLRFLRFFFRLLFFFFRFLFRFRLFFRLRLFRLFFRLFFRFLFRLFFLRFLRFLFRLFRFFFLLRRFRLLFFRLFRLFFFRRFLFFLFFFLRRFLFLFFFRRFLRLFFLRFRLLFRLRLFLRFFFLRRLFFRLFLFRFFFFFLFLRRLLFFRFFRFLLFFLRFRFFFFFFF +FLFRFLFFRLFRFRLLRFFFFFFFFLFFFFFFFLRFFFFLRFFFRFFLLRRLFRFFLLFFFRRLRFFRFLFFFLRLFFRFFFFRRFLFLFLLFLFFLLLFRFFFFRFFFFFRRFLFFFLFFRRFFFFLFLFFLFRRFFRLFLFFFFRFFFFLFRRLFLFFFFFFFRFFRLFFFFLFRRFFLFRFFRRFLLFLRFFLRLFRFFRLFFRLFFFFFFLFFLRLFLFFRRFFFLRLFRFFFFFFFRRRFFRFFFFFFFRLFFFLFRFFRFFRFFFFLLFFFRRFFFFLFFRLLFFFFFLFRRFFFRRFLLRLLRFFLFFFRFFLLFRFFFFLFFFLLLFLFLFRFRFLLRFFFF +RFRFFFRFLLFRLFLFLFFFFRFFFFLFLRFFRLFFFRFLFFLFFFRFLRRLFFLLLLFRRFLFLFLRFFRFFLFFRFFLFRFFLRFFFLFRFFRLFFRFRFFLRLFLLLFFFFLRRFFLRFFFFFFFFRFFFFRLRFFRFFLFFLRFRLFFRLFLRRLRLFRFRFLLFFFLFFFRFFLFFFLRLFFRFFFLRFRLLRFFLFFFRFLFFRFFFFFFLRLFRRFFFLF +LFFRLRRFFFFFFFLRLRRFFRLRFFFLFFFLRFRFFLFLLRRLFFRFFLFFFRFFRFLRFFLRFLRRRLFRFLFFFRFRFLFFFFLFFLFFFRFLFLLFFLLRRFFFFFRLFLFFFRRRFFLRRFFFRFFFFFRLRRLRLFFFLLRRLFFFRFFFLRFFFLRFLFLLFFLFFFRLLFRFFRLFFLRLLRLFFLLRLLFFRFFFLRLFFFFRLRFLFRFRLFFFLFFFFLRRFFFFFFLLFRRLFFFFFFFFLFLLRFLFLFFFRLLFRLRLFRLLFFFFFFFF +FLLFLRRFFFLRFFFRFFLFFLRFRLFLFFRLRLLFFFFFRLFFFFRRLLFFFRLFFFFFRLFFFLFFRFRFFLLRFRLRFLFFFFFLRFRLLFFFLFRFLRLLFRLRFRRLLFFRRLRFFLFFRRLFLRRFFLFFFFLLFFFRRFFFLFFFFFRFRFLRFRLFFL +FRLFRLFFFLRFFRFLFRFRFFLLRFFFLFFRFLRLFLRFRFFFLFFRRFLFFFFFFLFFFFFFFRLRFRLFLRLFFFFFRFLLFRFFFFLRRRLFFLFFRFFFLFLLFLFLFRFRFLFFLRFRRLFFLFFRFLFFFLFRFLFFFFRLRFRLFFFFFRLLFFLFFFFFFRFFFFFRFFLRRLLRFRFLFFFLFLRFLFRLLRLFFFFRLFFLLRFFFFFFFLRFFRFLRLFLFFFFRFLLFFRLRRLFFFRLFLRFFFFLLRFFFFRFFFLFFFFRFRLFLFFFFRLLFRLRRRFFFFRL +RRFLRFRLRRLFFFLRFFFFFFRRLFLFFFRFFFFRRRRFLFRFFFFLFLFRFRRLFRLRFLFFFLRFFFFRFLFLFRLFLFRLLLFFFFLRRFFFLFLRFLFRFFRFFLFFFFRFLRLRFFFFFLLRRRLRFFFFFRLFFFFRLLRLFLRFRRLFLFFFFFFFFFRFFLRFRFFRFFFFRRLLFRFRRLFLRFRFFLLRFLFFLRFLFFRRLFLFFRFFFFFFFFRLLLRF +FRFFRLFLFFFFRFRFFLRFFRLFFFRFFRFLFFRLFFFFLFFFLRLRFRFLFFRFFLFLFFFFFFFRFLFLFFFRLRFRFFFRFLFFFFRFLRRLFRFFFLLFFFFFRFLFLFRFFLFFFFFLFFRFFLFRLFFFLLFFRF +FRFFRFLRFLFFLLRFFRFFFFFFFFFFRLFRFFFRLFFRFLFFFFFLFFRLRFLRFFFRRLFLRRLFLFLRLF +FRRLRLLRFFLFFFF +LLLFLFFFLRLRFFLFRLRLFLFRFFLLRFRLRFLFFFLFRRLFLLRRFFLLRRFRFLRLFFFFFRLFRFLRRFFFFFFFLFLFFRFFFRFRFLFLRFRFLFLLRFFLRRFLRFFFFLRFFFFFFFFFRFFLFLFFFFRFRFLFFFRFFFFFLFFFFLRFLFFFRLFRFFLFFFRLLFFFFFFFRFFRLFFFRFFRLFFRFLRLLFRFFFRLRFFRFLFRLFFRLFLRLFFFFLFRLLFFRRFLRR