diff options
Diffstat (limited to 'day05')
-rw-r--r-- | day05/Dockerfile | 7 | ||||
-rw-r--r-- | day05/Makefile | 17 | ||||
-rwxr-xr-x | day05/entrypoint | 13 | ||||
-rw-r--r-- | day05/input | 1 | ||||
-rwxr-xr-x | day05/part1 | 27 | ||||
-rwxr-xr-x | day05/part2 | 34 |
6 files changed, 99 insertions, 0 deletions
diff --git a/day05/Dockerfile b/day05/Dockerfile new file mode 100644 index 0000000..5e0a8b7 --- /dev/null +++ b/day05/Dockerfile @@ -0,0 +1,7 @@ +FROM ruby:2.5-slim + +WORKDIR /opt + +COPY . . + +ENTRYPOINT ["./entrypoint"] diff --git a/day05/Makefile b/day05/Makefile new file mode 100644 index 0000000..07dec9a --- /dev/null +++ b/day05/Makefile @@ -0,0 +1,17 @@ +DAY = 05 + +.PHONY: run clean push + +run: build + docker run -it --rm aoc2018day$(DAY) + +build: part* input + docker build -t aoc2018day$(DAY) . + touch build + +clean: + rm -f build + +push: build + docker tag aoc2018day$(DAY) advent.4574.co.uk/aoc2018day$(DAY) + docker push advent.4574.co.uk/aoc2018day$(DAY) diff --git a/day05/entrypoint b/day05/entrypoint new file mode 100755 index 0000000..8982d21 --- /dev/null +++ b/day05/entrypoint @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ -x part1 ] ; then + echo -ne "Part 1:\n\t" + time ./part1 < input +fi +if [ -x part1 -a -x part2 ] ; then + echo +fi +if [ -x part2 ] ; then + echo -ne "Part 2:\n\t" + time ./part2 < input +fi diff --git a/day05/input b/day05/input new file mode 100644 index 0000000..7de7072 --- /dev/null +++ b/day05/input @@ -0,0 +1 @@ +bBCRGgrwgKknNGWnNWUuwHoeEtTOvEeVhYZzrZJjFfzNnpPHtTgGhNtTxBeEbxXqVvwWhjJHQuUnNXGgvsYySOPphHKaAkoXxVQtTqQJmMjqVvzZHhOodDhHocHhbFfBHhKkGwWghCcHnNCvVOztTTQqtLlvVZzsSZnOuUfFiIHBbbBoEeOfFhHpPhDHwWMmgGhAaJUujqQMmdKkoRDdoOrNnReEUigAazZfFOFforyYOOoOooPpfWwFRqQFfiEeVvIVvGlLbBIGgroORqpnNPQoOohbBHOkNnKaASJkSsLlfFKwWjJgxXGuUMNnmYWsSOCcowywWvVyGNnQEeqgYxXyOZzoaAVvUoOQquSsyiIPpNnZzCcNnYsDKkdShebBEfCcFdcCuUDmMHDdWwLfFzZIilYIUubZrRYyzBiPpxXfLlFPpjBMmPfFeEpmfXxFMbQqTtuUsSVvJjxtCcTXHafNnFlLAlLVGgNnoMIiLlmOLqQnNoDdOlgPpGvVWwknNWwKQqKkiITtnNiIVvrsSrRuURvpPgGeENnzZKkPpLlqQLlSswWjJlOoaAxBbXkKSAaGgPbBxXpkkKqhHQqHhXxQQuUqKwgkKGEeWwFfCIictnSNnsqQNuUbHwWhBlWwvVYyeERrLwWTnNcCzZtThwWHLlSFfNfFXxEoOeQqnsaAUujJhHfFsSWDdgcCjsSsSJoOGQOoqOoDDdIidvFfuYyUVzbYyBsPpSsSEesufFUSUAatTgGSsuSLqQEelCcRrRrsMmowcZzKkcYyCbBCNnWwYWwGgzRrZNEerRsLXxluUSPprnNOoSsRYyRrnFZXxzfSsmMrQqFfOWwIiOTtHGghuUooQXrRxqRXBbxGCcDdgTLuUXxZCczlPpiIpYyZzPCctxtTXuxXFfUwWwWbBFHhZDdzmMCcusRreESfFUfFXiIlgGLsScpPCxAnNaOTwWuUmMtowWIzZSsZmMlLzyqQYiwWlLjJsSfsEtTejJSppPPxUuXgGyFpBbHWwhfGKkXwWxhsSHgFPKkIihkmMKJjHcCiIzzHfFqQOohgGkKZXxyYBbZBbafmgGMaAsSXxFWwSsSAhRPprMmbBmkKMHaTtPNnpIiyyYbBYWwstTjGLlgJOgGLlokgDdTtGhHKxXQqAtoOUuZzTJjinNSsqQqQILZzaAcNnCVvRJjJxXgGjrPpDdtTXxaAIvVgGiWwllLIiEeEecWwRkKtCcTrvVXKklPpLxlLyuUYVKpPqwWNnQkkKvlLVvnNOOLloRrkKvVEeoAAaCcsSHAahAaFQqfwGbBUugWarRdNQZzqoeEOQwhHWqWgGkKmMwNfFnLlTzZtoOZzvVcCvVuLlUQqsnNSnDJjbLlBvVWwPmMpaLjJlhHrRAeAaEDaIiAmMSFfsdeEfaAFqQfFXZrRzcDIipPoOdMFbBfeEmzZlLoOdaADLltTQMmCcqQqYybBvVWLlJjwXxkKVweUuEzZlqQQhHLlqpbBPLGgoGgOoObvVByGgYWWwmFRrBbYyrRnNxUMmhHuXfBbEeMmKkYtkKjJrRtTRrBwWbTpkvVaAKYyoeEOlLPQRrjJqSsfVwWvnNeESBbsFYybcCBMrmMRmNncCLlCKkcAJcCjKkaDuNkKnMmBbOLlRroBbvVWYqQywWwhHcdDCGgWEewyUrRuYRrlLWVvwLlzZGBBbPyhLRrlMmpPHYMmAapPzZRrJsSRrUubuJsGgSGghOoHjAagGUVvFfsSblKkLBfgGSMmsSsFWiqWyxXPpPpxXYZzoWwkKOwcFTtjSsJfCbBxXrDQqdFQqfRVvHvgGnNVhkKpbBVvbBVvPIFfpPFJJjJjjlLoOmMnqyYQNfHSslLqQoVvOUAauhkKOoChHkKcHhbPpaAzZvVBhHirRcFftTtTCxXyYUuxXbwWBtoOiIYkZzeEKTtEBbenNCcIAaoOjJiKkxXrBbZzQXxqREeoUuOvZzVeEyNYRryqQJjkKpPeEpPyYpDeEdPnUMmusgGSvqQVKkeiIEGeEJjDdirDdsAaxzcCZaXoOLlxAUJjrAafFRbNnBEejJuWNnHhnXxEwWebBNNeEnSsBbwYyRVvrnXxUuIHhDdPphyYLlRQqrHoOvzZIyYiVfTtVmMWAVeEvawvRrIiFPkKpIMmiKkElLoOevvVcCRrsLlGgKzZLbGgBDdlzZkeESHlLhUCHhcMnNBbJjUuesFfSqQEfFRrjJkKaTtAaAGgOoViBbHhrRKkHhIZzZzeErRfSAaSwWPkKpsCNncIipPejiIJxXQzZqEzMoEeiIKkHhjJOlVjJHhvSsUueELKknNtWwTmRrZfFkJjQqKWwzPpSFfIisjJlLuYyUwWZAvVeYyEcCSyaADdlLYlSfHhFCcnCcNsAaLLlYyzZiIkKfFWbdDiIByYGgwaAQqkfFKbIEeiKkHhKkBKkshHqYSssSyzZlLQCaAAacFqQgPGgpGfaJjoiIRrOteEwWOoTtDbBdiILlLlPpVnDSsdXxNDsFfMlLmSdAaRraAMoWwOUucjJtoOTfFCmTgGNnOFfoEetZxOoXUusSZzXxoOnGgNzOobBOyYgPpGIsSiuUDdeeEHhdjJDviIDBbLlaAdwWyqQYJYHhqQvVOoOoLlIiTtzZYySlLsySsjndDNUuunNkyYKUVfGEwWepPgFUuaALlHJjMmAqQaVoONnvyYTtovOHULlYyuhHmxXMiIhXxZzdDXFfxDdSYysRTtPpcCBcCyYbNnrIHpVNnvkcCKodIVvidDDQqKkHkKuTtUsvVSpFfPVhHvLlkwWKDcUuCsSAaFfNndYyNnazZAhhHkKIiHiIcChHwWxXBbMmKkyYIsLlnNEevFxqQXFdDoOiIVvGgfxXEeEbLiIlKkeEodeFfEoOTzZtLOolDSsOZtTzCcLeaAEPHhplwWmKkTtMUuSOosUuRtTrsSFXpPxvuUAaVSspPQqnNoOFwWaZzSsvtTVaLhHlVvApPhSvVkvJsSjdfFGgrRDANwWjJVNnXHhxvgGGgKtUuAaThVJtTlLXxDdsSpPjpxXPvHdheEHGZzMmgNeEYjVvYyiSXZTtLMmlzxWwksnNSKhPpHkKAaAuaAUbZzBHhXxBbAaHhajxdDEeXJgGlZGgKkzRrYyxmMAXxaSsmvVMNnoOHhXwlKkurRULWZzOoQqqQJjOuUobBFqQEyYefkzYyIiZKEAabJjBWwnNeHhhzZNnHsSJqIibOrMmVQyYqbBhcCALlKkCcrTtRaHxXvFCcfMmRBESsqqQQeeEiIblTtmCZzcMXtTxDdeEqQLJjoHQkKPpBVYyvbalLyYGgFZoOzYyAqQCcxfFXaAGIoOHhisSpPgCuQqNSsdDxXmMnVNnNnvezZEiIVNnXxeEvLwBegkKeEGEbWboOZzaABmmMwWMpPKkAiIIfFxXksSTtRVaAnNvwEeZGgSszzYoOMmyGCfFcgnNoOjNnJrRoyYdaAxVvXDeEVvKkOLvqIisSHhcCQbBzNEUueuUzQMGggPpGmqDdREepPzZiQqIrgGDdZlGgmMLIiBBbbCcxXneEjOoDdJZFfBrRbeECcIiYaAXCkJbhHBjJjumwWMFfNQqnXxoOrtTxtTXOoRUFLkKvVGgdYyyeEYDsSVjJJjwVWwRrCcVeEsSzZvcCeEXxvfFWqzZQCmMgmMGONnoCcSsBbDbBHhdqzjJHLlhXxZSsQGgQNniIGgAamMXxCcyWwHFfsSyBZhlLHGgRrsdDSzRiIdDwWtThHhHlLxXrxnNXbYKkUAaRWwWwKkaAwWEEeErReVvgGlDpPtToOowNJjnbsSBIipPWpPOPRrpxoOXAaQXxCcqYydCEyfFYecwcQLlqRrhHbSLfFluUsShdDHzZgRlLrGjJpPRrsScVvCDdovTQqtsSaAPpjAaKkcFfhlLUuiInNHiIPpbDMNxXTtzZnskiIiIMmKmMrsSgGRnNnKkNSpPoxXZzOopOoPRrzsSYyZOukKaACTbBtcUVKlLXCcKkxUWwuBJjaAvsqQSdJjZzgeEeQqZzoOMmwWNnkjXwyNnYtTMmXAaWwsSoUZzuwJjOcAaColCcdDOjJAaoUQOoqoOteEURrjgvCcxXFfJjFfVQoOqhvVHxXGvVwzRrZmuUMCaAcwzZWmaAMXQqtBbNnSaMmpPcqQCyYAsaKQqkGgXxEdBKkbDTwWMmMmteXxhHJUxXkKMmTtujBTmMoOWwaQqAnNYytuUcjJHMmhCRVvrjRvVrPIipKkyVvYtTUuLiXxItTNniRrIGFAaLlfyYaAknNKONnoglgLlrlpsSPUuLeEQqldEemMFyYfgpPGmPptTjJKHZpPjJzQRrqfmMYypPutTdDwWUluUQqIiyzkKZMmUuadDyYHhFfJjHYyYjJyhlFfLpHLDdkFfvVWwnNEqQeRrKIOoxXZyYIwWqQqQizpiIAaOMmxXaobeEBbBaElLwWesSAOASyYsPpwBLlIisSuUAuUeEwJjWaSQqLlsWwoZghHGiyYSsIDJiIjrRaQqAIOEeFFfKkmMQqeEJjsnDdNwWNnJjpAaPStaRrbBAuEekKUMZzmlbBLTwWfPvVpjUuAaPpRrWwJoEeLljPpIiIsSEfFewWfFaARrQXRrxunNUuOoZZoOlLIFfQqgGXoONvqQaSsWXWzZztTKkZwoOpTMMmmPgdDGpMwOaAqdDQBTtbBjvVTQqtJTGKSsRVvrkgtqQtTfPpFDdzZeEOozZWwImkAVvaQcCqYmMpJjIipPeEWwdDGTNNSsLlnnmpPizZIMAaLlHfVdDvFhlLQrXxRAaQqsSqaoOAkZwfMzZljJLiZmbBxXfFgNhzZHquUQYyTYyXxTtSsZzuUtPyRrFJPpjvcUuGgCRhHrVFqQfXaqQFtOoTvVHhIilLXUPpufFxFfBlLbUpgfFGffFIikabBASLDdAaHhMmwUuWogGSsCTtUJjaAuBpPsSlLQqKbBwWkKiILlDdqQBbJjklYfDdFEeOMmEebBBCFfhLlMmZzHUurwCNtTGzcSsCfFTtZAaeDdhSRpPrslGgLHEzZXSUusVvWfFPnNgqQGzpPOopCxXqaAQqEeQcixzZfFXLDdlHhIwnNWPgGzZfFyJjIjJTeEtoSCcNFvlLVIuUMAxEekKXKZqOoOoKeEMmkxgGdAvVdDaHhHHhhdDoIlNcCnrRLiMmvVAaCchvMmUusTtbqQOEeIiTtaAVvUjJKkuUzZljJVvcxmMoOVGgvFROcCzZoYZzyrcCpyyYGlLszZrReECcYyMRWwrmSgyjJYDbBbBoOHhdYZziunNtTUXOEeoWOocChIiyYwWHYDdyTjsSJlSVPpSiLauoOiIUyNnXbBrRtgGTOoxJjPpHhYjoOEeyYRrSskKnNDMmddDjdDJTaABbbBddfFBbLlDRrvVWwiIDsKkStOomrCcuURMWwAaXxZzTtIdaNnANnmMlLDiinCcaANwyYWwXQqkKpPiIFfknDdtTalLyYTeEhfFhrRHHqxXCcjJQNntdwWhmBbMHAawTEetEemdDQqMEmMJsIicpUuPvvrRVQEeqVWbBwfuUFCRrGoOWARraxXnNwqQUulWMIiNnmmMmAasSIiXxsOlnYyNgGHhLPpWwoPpUufFeTtuaAUEiKsSkRoOlLZzpPrVvvVkKAaJbiIFfqlLQqQhhHVvMzAaAaMmkwfFtNnWYSsyHhwcCTtbQqWMmCcFfieEIwujJKioxLQqDdljJXFffMmFbBVVvvBbOPEenNlLIgGBjJbBEnNebiJQqMmVvuUjJjivwQFfqtgIJjvANnkKQqgGIiIoOuUiQBbqUuEeabxtzZIiGgTXuURrBimMIEATtXxaLNnYYyIivVYIFcCxSsXpmMtTpPPfGMmNCcngWZpzZPaPANnRrkKQcCvMNnUuJjmaAWnOcCzZoTdDtUuNuGgUwVvfeEFVqQpNjJgGnPiQqJdDiIQaAqYyAaLlIuxXUieoOieBXxbvVBbrREIIioHhOUJjuQZlLCuUcYGgGGDdjjJnNJbBDXbBdDfFxgyrJCczdJjDHVaAuUvlIinNLSswWSshPpozZOolLtTpPGkKEqQPGgadDAFcCFfFfWwfOofFplLRdNnDbBrcVvKCUucAmMaZzKkEoOFfVRrjmpPMXhHwpPnNdDmMWGJjSsmNVvuUwWBODdoFfTtbnMgxQLlUuqQGgshHMXxJKTtFUGguKkMmqQfIexdDvyYieEIOoVvoGgOVGgvJjHUHuUBbSslPprRhhOoLxrRXlNnCcHRcJpFfeEzZPasYFjJokoDdOqQKXxhHKkAanukKEeQYGYygoOynQIiqNFfCBbcgSsWdDMmwGFOXOZWwzkuUKoUkYXxyTjhvwWuZzHgGmCcMrRsSbBhMCcYnpwWPHhFfiJjmMIoRSsreqQEOmsSRrSsMOEeafFlkHhLtTlKLWwACzEOTtrHhxwRmMrWlLkOoOUzwrebcGgvVfdRrDFZzIJjiiaAeEImMmMdDzZzpPZuMmFfuUqQePKkNnDdpEzZtTecCEShHSssbBUuRrdDbPnNpbBfFJAamYyMjHhuUBAKkaSxXbBseECcSpBzpPSsGghBbrRUuxXsSOrRoSnNnjJOqQgMmGyyRjJToOCcMmivVIOotXXCcxlXxcxoOXlLnNIWPbBxdDuUyYXpxXEhvVzBodDxXHMdDAaJNnhHjkOHhoLlInNoOiNBbErAaFBbQqwvVOopAaaAzhJjyYjJUuvwWwWDdspVvZFfDYoOpRryqQiIYPqQOonqQNevVoieEIVHXxqQhPWPsSIKkdQqkKzZotTbdDBOTtcmMCDFcQxXbBrxXRJrJvVjRGLvJHgcCGkXXxxZzKgGWsSlLwhQOnNqQVuUvoaUuABbQZzSsPZmMGNnzcCZgfsSHhsSVvFWwztlLljyfFOWWwwosAXIixaHoRrOcJjbPpcCRwWwWzOIlLifUvVuQyxbBIHhFWwfkBbKMmQqiubacCABUyKgzuUZGkZziIUJzZuhQqjJMvVuUMmUuDdgUuYgiIGMmwWlnNnOoNeEbEeBPFVvQqfGgqoOXMHhjJZzcYZocCXUuxkKHhfsSFhnNmgGfdDFqjJLeEeEnuKkVvuXeExeEoOrRWoOJjnNJMmjbUsyAaYMbBQqwzZHhWhHcCJcCyMkCcdzZDsSPCbBcXkKZzyYDdxcCRrqQfkqQKHhsSVvWwZAyYfFirYyqyYsdjbBrRiHSslhHxKkXLFfcCpPHcChZHXZmMzpDdPYydDxZyIiYtTCSFfnNsckCUKkuuwXxWjqNnjJmyYMnNfFHhQqQDRrsSIpPiTKkFIeEPELlyYeNdRXqQeExHzZuUDdpKkzVvZygfFhYyOmMaAGOaSsrRAQnsSnNXxoKJfFjkDdxsHsShPpSHmMEBbDdkUuooOOCcjJKMIimXOoxIiMmphHPUPpGgsShHQIVDdGPbBRNnrSmMwBbbBWQseEyeEeOoEIjkKQUudDbhHhHBdDTsEemWwfAatLlMmAaeEdDYeEycLlCzmMZdLcChhwTHhtwWoOmMWFNWwnHhtTGzTtpMmkyNMmnoOQhHqovSCSsckfFPTtHhBbKkoOwKqQiKktTLloXxOVvRcqcCaAEeCcWwTttToYyMClPwRXxzZhfyADJjDqXxYSsyQzZaAiIdJhHtTEmMPVvdbmSJEAhHHtTBdDbpPegGEOolLXNnySsqQPIiuWwhmZzMefJjppPjJjJxdDyHKkcZzLlCzZYeEyRrHhtOojJcClLtobQKkLlqQvVvWwCcVCcqgroOCIicZYJjBbcClLTPRrLFmMfgZpPzsIiZsSlLrRLtTtYyTSNzZnzxXZRDdrOoxWwXrRGgNnknNKNnSySBAapPttTAnNaLllTjJCcrRAzRrZXPpxvVHYybBhjJaSsbxWwXqJoBbOqYyMmbTtqEeHnNJtCkKrqQRcUPpTttaAiIoOKkTdDQHhMIiwtBbvYQqyXxlFfLAKkJjdDUCIiUGgTnNzZtuEekkqQzZvhHXKkRrSssSxtwjqQJuUTlrRaBbXxAbzZBRdOoDXUuLlxvVHhrLfFlykKXxWwgMMlPpYyLtqQToEemkKpPBbMcLlBvVfmMWZUuSxXSPpwbCcFJEifFwWBbJGgRmMrZzGCXmMxVxXngGnNLlYMJjmQxfFXnNMeMmiIlLEZzmqSsyPpwWXoOSNGgyWYywPpnNXJjUuxavTorRwuUWqrLlsPpSgGOEWbBwegfaAHhkKuBbYyyOoHhYgCcmtTUiIfqRrRrsSpPjEegGJtySEDFFIiffmMFbTtsXxSVvBUtkKjgGEeJddkKVnMzZmtTLlwiGTtiIGgcTEetCTeEtdoOgOmMoMmdDkKdDUuVvzyYdyYBbDZGyaAYJjfFMmEenOglLGADpPxXdXFfqxXWbNnoDuUyYAEndeEDvVNADdaWwRxOWwgGocCTjJUBbjJNnNnPJtpeEkKPgpPGtAUuhHCcNnaiIPWwpTmASsQqKTtkYNZzntTHhczdDOoqDdQsSZOoCHyYhkKlLmMHhvqQMmVaAYyytTwzBaADmcCGsHhtcCwWrgGRDeZpyYPUfFuJzqlLlLXxQnNZfHceECOohpyYPFZiqHhoCcUeEnNYylLulLzIiZTvVtzfFZAZwhaAHuPkKlsSnwWNLmNnrRBbuBEwSjJsWKkvVxKAzZaIFXDdxSZPpxXzsMmuUfcFfCDdFfjPwWUIiuIiBYEjJqQeMmgNnZDHCchdONKkociLJfORrIiodDFVvNdYJjzAbTtJjBDKkdbByRrYaqfFQGcCBbPpglZjZwWKkzvVJHPphlYyJOxmMmutPplLKxCiIBDdbcgTtqmlLMCbLlZzMmlLGLlIigBwKoOGIhHoOaAyVYyvhnNpPYZzyfFtTKkYfnaANTtFKkHUqQAawWyEsSURGgrobiEeAXxaFGAaTtjhaApPXdDECcmMqQcCQqHhoXxEeXaAthHTIiKkzBbuUNnXxGgjJZgqDyYrRtXxtuUWgGwogdTtrRBgGXxMmiIWwgGLMYymlnYyNYnvViWwvQqVvdDZzViIAacCxXNnSGgAbBrRasnYcTtNnnkKRrFcJjrAaRdDygIhHiGYkXqQmMOocCnNSsXxRrolLqgsbBJjAaSlseEfFkjQqQqjRrJBULcClbBZzrRGmMwWgubJOotTzlLBrRbNIinZGkKCcgqqQwWAWeEozZOQqaADdBHhbdDSyYswaxnNfFxhtTVvnNuVvnLlNSThHurEeRUlCcqQbBLmMEenNoOxSfFskKxgmMGXxgaHuUDdkPHhppPeuGgICcxXOWVlUubBJUuxXjFfEezUubkKYLbAaBlypPhWCcwQKkqBqSYynyTtqUuQYioOIEeYyoOFLlzdrRLBRXxziIZSFfsSsjONbbBLdCcIZziFfLpIiPIPhiIHaAALlrRYyansxXmMpPQqYZWwzOwxXdDUOotpPIiwPpzZvVPBxDfQqdAaDzaAZAaFrTtvVmMuOmMVvQqmEpXxPkKPgGpeGghNnaAFGDQmaAZzIiMwWquULDdldJYyjUuDdEexXaAnKkNtgWeEvVwaUunNGjwEonNOeNnrRWBsSWwaqDdjJQkKEeYOovAaVyIKXxmKjxXMiOoGgxXKkIuUxoOVvXgacCFHBbhrRoOffIFfipKkPDueEFfIwQqIZzuUipSsPWIqQiDRXBrRlLTttvVBbTbltTLZzxBbRoOtTZTBocCckbByxXYfFfKmMjJlLkFXxJjTtjEehYQFczZJjCRKDNbBnoOdAaiifFeEftHvVbQqBbTXxteEeEtpPTtzpPkKFXQqGgZTtiyYIPpIiQumMnNKvVKkkwrRKyuMmUQqhHVvYJjdnXxSsndDZJjzJiIWNdDnwZzxjWFxXfFfVvwfLlCKOokcRrUuHguUSsGhHmpPJtbBqQczZCJjTvVjCccCWwWVvwPparRAZFfzckKvVCRrJAaSKkuGjJSsgAaZjPpZWwlLzJzfFjedDECnNcJkKkKaAoOkrEzkAagGURruQbpEePjMhRrHMcFfLloONnruURcCoOnNFfmMnqiyhHuxXFfYyUGLlgzUTtEHhYOUulZSsjJrBZWbBwrHhnYysuUSZpGeYAtTnNCVuyYyYLAaltnPpNPSstInCcgGNnkVxXvcXxwWxXrRJDdrxqQGgGJcZbDdBzpPyKNwWnqXxQRrJJVvysPpSxlLXPpVzZiISuLlodDAacCVwAaWDbBbBowWGgOtyYTdTtXLlxRiIfoOogGguPpaTtYyQQqGgcoOzZgXxzZgBbGdiIDGLAaMmPplFfvlnNLcCVBwHoOhmMWUudPpzZWwDduUIiZzrRnNVOOoHObsDdfaiIAOWGgwocAaKiQqIUuzZgyGGnNRSdTtlnLlNLmKDkyYhHRgGrcCKzZINnilMmmMZzmMLVvAVvadLUuVyYvxZNnhOoSsGgQhHEeqWcCOowDdRUujJjJWiVtXzZEeWVvdsSSGyUuYsSqkaAKQgWwXxpPcCWTtqQdDSseEYhXMmxJbBjdDlTQiICeEuUDdeESuxXUJjqQRebiXxIzZDdBbzZaAOolLyYgGBbAqQFIifFeXjlVvLwzBbWMgGwWnRrZzNSsaAsSVvvVnSslLAaUuyOxAXLxRYxXzsSZWwzJjisSZzyTXzsSpPwWSsYXvVOoxyalvVjJLeEKkcCOorRrbrUuRBFfsGpjJXVitTLlIqnLlNAhHFftToOFpPnNqQnURrutNnVvxXdAaDyyYpPuHLoOcZnNhHzgGvVPaVvAtTQMrHhQqXxhrReJjNjCUucEeJsKksaJrRjewWoiIrnNRbBmMuUhHXxbBuDdgGCcUlLyDwWuUrqQvlLRqQqQzvVkYyOneENgvVLBDGgVbZzAjJXNnCwWcVvhHUuFVvfxXpqQElLTEeBXxbtoOleVvEFZzhHVuUvfMsiVwcCKCcKIiKkKkWwtpPTtTmSsMyYXxMdDmDdhHaATtdcCwWLqQjJNRXxEBlLfSsoOpGgdDsSzMpPmbBcMmYxXqQyJMmPphHdoOteEKkTzhHTtiIZaOoDdwWKKktVWwznNvVZNnDdzwWjJZhHTtlLgWwGZzgRbBwWdDyYFcCgGJkKtTjTtgzOdDxEeXoNnxXkKvViIuohkKOvVSspfNJjBbjpPpPjJpQqsSPFfMyZOoinNIbBVvuAgGaDQtPpGgHhJjeEpNbAuUNnmMopsSKkPGgqQgGqQLzZlSyYsvVOlMmLvVNnvaAmtrGQiiIIPncHhBbCuUwTHfBbFkGgKaLjJlAwPphHgPIiOoYyqprReEMFfpPlLmWxXwhRoOlfFLZzlLmMrKkPiYLlyXxtTIpzcCEdYyxdUEeuBbnnvVNZzPpNsSGgkKvVPnNaAaATPqpPGgXCcxWwQvIoOikKSnNsUcdvVDyfwWgGFLVvyGvVCctTOohFfSsoLlOtNnIiNnFERraAejsYyfFbtTByYTtSsSEeqQHdDgrPpkKptTtCptTPclEeLMmvbBBbXxSscCQqKkeEkLlHRrAxXDlKeEkLNTkKEVEHDdheEMmjJxXxqQaiMmvUOouXxVGpKkvanTtvokZzKLlvVHhXxHwhsYyvVVkKvAavVWTtIiwSChHfFcSsuUiTXxtpIiDdzZJwWoOjRBPRJjrKhrxrRneWwcQqoGKklZJjjJLXLlCpPSscgGzZqQyYFfqPHTshHbBSIjJAMmsaACcEnSuUPTtqDdWZkYyKznwwWeEkFJkXZzkKnFfoOhgsKkSFmAaMdmlWTtgGofFnoOdmMfFDzKkZNrROxyYXVvnNwZrRzLMmmMIahHunDrqjuUJGgvVGBLlVvbgYjkgbBGKdDIVgGvZzZYYBWTtwxKkcClPEepMmwbSINnglLGiIinrbVvSpcCQINbkKzyYZmMmMcHhDTtWwnbGgFQqcCTZcrRQwGgkFAafDEDTkKpPVzZiCQqesWwSFzZfFkluUQVvNnBbwbBNhKWjJQCfFcNvVmMnqpOoPZSRHxwWpPXstTSaKBbPpkAzZgkKGoOiILlMCPkqHhQlbBbBrbPnNUuHXxhnJNnjosSscyYiFftTOPWcCZzLlmtTlNaAkKiInDduUymUudJjcmlNkKMmnlxKkLaAlXREeUeEhnNbMCcmbeQWfFwhHrRBBbjsSJTLlWwTtjJPeRrOovVbBEmMwtTuUvxYMFfemMEvMmVMmvBbVSsmnzZluCcGGgEegGoPYypSnNqtIfFuUOlLcLlCdLOnfFNUuRRrcsEedDShHRYyjJNnZzvQqhHIJjizZWwGgNnQqAaBbiIFwWIifVxLQpAxXaAqrtcCTRtoOAaeqIiGZzaAgYmbwWBFLqyvpNnPMfFWHaRJjmCkKcMrSsYyAtWfzZFsSSsDeEeLyYdDgyYwWyYtkKToCBNneESEeuUAkNuEdIiDeytITtiDZiOoIzdYPzmbBMUuhHGgqQEeZiIPyoOEeQoOUnzZVvsSkKNhHcCcChWwMdRLlrJYoOtTyWGMKkgkKZEezUuGmfUusSTtFbTAaZBYyjJNnZzTtoODduUvVIiBbbBxXhoOQqgPLnaoOArrkKRZzYyiIzZUUEeutIiwWTFfFfBbuuSsKkHhOpxwWeEaAAasCOoUufFRJjIiHjMkKaIiOoAqORfFWwOVvonhHYyNWLlfWfFwVveRJopPnNOqQeEUEedaNnLtTjgGebBjJGytUuAioaHzEJwtUvVuUufFPpsIpPHhiyYSsSzZGgxcCXsrNqQndDRNnSwVczZvVTmMTlLLsSMmPrRWCnDdKkNyYfFcHPoJFOoJjyhuUHdxXDwWpYgbhHvLlrRxXbBaAVmMnNOoINzZMOGgUoOuohjJHyCcYyAaTtYWGgwoOQPpqUuUwWoWnydoOMmmMLlzxZzpPNNnZzMrRJdjpmMPoOyYvVTIIiifqQeEtnHhNTEwGRrvVPpXCVzKuUbRrUsSjTJUbWEewmMKkgUeEpxIPdUuwWwWDBsWwhIiHmLlMRriIXdrPpResSLBOoVafTtSGgstTqIfFiTtDdYyltTLrfFRIizhHzeEdDQGgvVqzZdDlTtFfRFvnNJyYjTEedvVDkKtmSWwAlAaLaxCcKuUjJfFOashGwYyWjJuIiSsJjAaqezmMCcZEKkQUWwFUSsuCclXxIiCrRsScaAxaZEuxXXxVvYygiXxyssiUuLRGyCcFfKkeEHEehTtSIVKTtkqQryYWcCpPgQWwCceuhjJFfaAytpPoOTLlBHhboiIPoOFcdDCSMmKLDMCIiTteDCeiIrRkKSGEegcqQyYQqzCcEeZCtTjLJjlJeEsEwouwWUWvVqJIvVmQuUqMCcsSeBbwuUOoitTNkQuEpPjhBbHAaSsbMMEeIiMmmXQFgGEDddoODsRrSrRMdDpNnPPLyJZKkzhwiIpzZxXRGOOkCcAaAahxPpxeJDdxXbBSfRPjkKJzDdHhcLwWwJjPOqCsScSsiUuIUuQyLlEInNnXxFfHgaAGhAIfFPuXxiIkKpetThGgOXxszsSZSuUiWwLlIkKbccOsSMgJjxzOCcUuoZXOoGmocCCFfJjjJBbHhaAFVvNneIicTWwpPtnbiIaABXiIxUuEeQqIAngVtTBbcEzmfFZzDdYyfNnOqDdweuAZzwWeTZMmLisSOhHPBxXpPAxycoOCYqvVBbjJjJpDAadDIJjHhTVUuvtTKAaHhSsYyXxSyiDdWBFuUCcfFRrqrRLoAefFWRrkmzqQZuuUTZzTUuZGgeEWuYfNnZkIPobUlxLTmMvVGnNcLuIOodykWEewZzKRrDnNdpISsicCKkWwPYDitwKkmFuQhuNnFfsSOvVfsCPgGEeJjpcZzDdggYnNfklKkpPbukeeEeEEkdkmMHxXoNnOhUNZzzqQqQOoSsffbBIeEVvFfcCjJkblLodZdtTesSEvVpGpaAzGBsSbKgGGBvZMUuPfFnEkXYyxfFdYPDhJjEjIiIdphHPCSxCcGgFJjcCDsSgWXtTuUXxPpvvgYeEyGLNnuKguUdDQBbIFdDEKkexXweUoWwrReEHhUDduOuUpXgroPUPZTtmvdvcCVUuDgdamOYjJtQqVWJjWwwKknNgxLFYEeFZfDQqdbyYBFzfaAfFeElyYgoOLlfxXAaQqFjgGSdFcCbqQwADUbdDjpPJBVvQjJIMrbBQnPcCSspxXNgwkKeTthgGaAVATvwWDMwWsSVvvVmAjkaAuUKJKLTYySsgGtlnVzBVvbXRrKDfzZFqdDQYySCcaNmwWMBuPWwuUivVsSNWuUdTCUuXTtxcLxXZzlvaALwAaWIMtRrbOGVvCcAaxsSUrQGgqFaSsBbfsHpPxjVvOoCcJrRXQbBEeqwWXkrRKuEeIiHhUEjJDdDdsSRrMzZuDdLHfFhjidHIihnNBvkKVbxXCbKfMmHhMqWoORSWwiLcPXbNnMgGmSJhHBbjmMLlsBJvfFKprRHhsSpAassSyYIiokKyqQYPqQNnjutUHIibcxNnIScCsiusqOxioOmMLlUuYydKfvXnoXQRukKrEeWwRTtOLDMhHZznwWUuCcNCzZcbZfFJAayYeVvErlhWwhHIiEYjZXlfFLDEsSRoOrBTtbkQlJjWwlLXxisnNcvNnEcPTAaTtEekHhiLlrRsKbBSsRXxiuKJzXYyNntyGgikVVhlTBfSsjBbBbJFABbNnZzTJjUnNuVvtkKJjIcrRrRrWwAaQqqQRHGdDhHvVfFvBiWwqOUTcmMKoqiIXDdgGxUpPuQnNBEoAaNlxXGgBmVOovUNnujJMWfFedDWNHaAeAfTtAsSPpvVSXqUMcXSHpFmkKyjmkTLgZdDzHEqsLlSmxIPuiLBblIrJoOIiWUNhHFffsSAaFSvzZIcCbXMynQYSsnNyMOosRTBbAayMmVAHlvWGgDdwfFESMunNUpmMBbPWcsSBhHonPpNDKkdKKFfIiiIkzJUujxvEeFxnfFAEvzZVsSMvVmeaxXNCnNcXfuUgMjcCJkKhHOoNxXjJncwmVXcCxvsuFfeeRIHhjJhAaHiXxOsQyYKFkaAAaUuvYRfFraAyVbmWvCHhbMmBbBAAaAaacVTtoOwoRPJfFMmZzZwnRoOlLFfsSqSQmbMmRmMWNUnzzZjtEehzJrnNqwIiehTtOHhoKSrRirgGXuHWvVkfIUPpgVvGbUuXYyQXlLgGNtVMJjtXoJWRrAZzHeENjSsgVvGslLkEVOovpPepQqqSsPDkNnuUcvvVVXqFfIOoipPFWwfQjLlPAOoKLlkxpmAaMPIyYgGWqQXxpPCcLKkrWwOoRfjpJjHCcJPrRmZAaqTkUnzZxuaAkkjtIKKYCtTAacjeWsSwSsELcYOoqFfOZKkaAiIqrGgOAaDBbFfdQqCcoOWOowxgGjJSlLxrEenCGOyKkaAYogcsEuxXxDdaAmxXcCbWyYDYynPpNnNnKkHBUuWFdcCDSskCDlTtLFfUaXlLYysSUuPLRrCnzxGgGSpCccCPjJIhPpHDSsMGgHxkKiIyqZzQvALlaJcgEKkvVrXxIzEeZeQqlcfFCzZNIxoiVvWwmMZrRLlRDdrzGggYONHEeNVKkvnQRrqYyXGUXmMlStrRaZJtzZAaTlLDduUeEXvaAVxSLgGXxFBeqjJwWUuQFoOhHUqQPpuslPlBbtcCTFfvEeVWeEKAysSnNlLMmVPLUTkKBbVrrBbRsAawTLpTtHlCqQqQaeEslsCcaFfAFfSlIkvaFJvVfWrRHbndoOZTtwWzwWsWTtPjiIJRLlrDVcCKrwWsJjpNbBnVvMSsDdHhrRzZmEeFfKmNWSRrsOfbarxSZbBoOHKkwWwWfUutAPpNnpxXPUndgYRbFzZfsSDUTtBbiAkKaXfFxIGfeEFZzauUugfFckKGiIaABYynlLJoesLDVINnPpIiaxXapMgLhJjJjXtTrRanNADduUxYyFsjJtTqyCzZzhHInpPyRrYNNKRrjJAHhLlayVvYkIHhivigwWrJjIEeMlbQFmzjKkJdQUuGghqAaQHqMlLmMWwVduUBbubBCbBaAAQNnqzUuZafmVhGOsScMmClLQGkEeKhHrREhOmZKvHUuyYhVAaVZztfvOoxRrjxmFfFrVvWhHwXxgGINBIiigLlGbBIusKkIbHhBlLlPpvVFfLYyiDdSIijJMmjJZlbptTPeEmMiVvYNnyfoOiEeIayYADDdfFeEQqYRJldIivAaznidDyYIFwWbBNWIZPMyqQxAarNnZurZGgDdigVuUBbUuxlLXqQtnzZcajJfFexWnNyGgKkiRrUieCcvVEPLlQMmjJsjJZzSqFsAwWwWQqBBDzHhzguPpGdDbBGdeTtmPBbplpDdBiOPMmpYyMeEwWtoOfHSsOKklkKJiJjdqQhZznJCHuUwWiXVLllLdDZzZhzaAffFGgFiIiDUgDFqQBbfdKCDdyYoObSUuvMiImVMmAsUaAKkJrRPIzXxZiAaAVXmMQqqXSKGdDDjJdVfFFKkWwMmfNzZZzfoywWYbRtTroOHfFPsmMirBFfYLlYyoOHHhehUWdDwzZCcqZzfFkKTtfLbVTtaUnNdCJjchjJwGqSBrnNyEyAiIaeMisaAQyYodDOgBzhAqQBbaAJjRropvVqGhlVeEvVvHVjuqSXxsfFlLoaKkVvZzzZlaQLlqSdDsnJjmLfFMIiFfADdaXJjxVvpXLlxfFOWwyjgDJjmRdOHbBnNUNDipPmMQjJTTrxqQanNPfFpDdfjJwBYveEVvmMVlLJjqWUukrWiIBDWwdqQgXIUutzmvrmxCGqQlvVtIiTwWjJeKkNPJVvTLHhmMTqQtltAzwDKbpPBZznVvtTNsSNnGgtToOHhIRriOCmIZFoOfziMcibfbtTqkkKKDXuCcUxdJjBpXxuPpxOXxoOGgZibBNnEexXxWzcAavaOOJjiRotTOEemeyYzZlHhgGoOPptTFfbBqGzZlLgiIjaAJbBeEjJQQHXxmlWwwNKkFfybBYEeUKNZeEjeiIYyETtsSxHwWkKhQfFqXqcvhHVwWKowKkDIGnQzZqTTmjvRrMmVJQAPpadDqMHhmOoBLdDlbJzZjNbBqQOVvYrKfFgGsSgGpAkKnZzyYMufFIbBIzqQZSyzZGguUXxYyYQpPEesSuUHhuUugvjJfFSbtluzrgsSGEevVRZUoORBbrDdxMmPpFfkCLltTcKMmrkcFfnlLsTtSeCccCENyYqohHHhXxOkGWgGwVvqeNxXkKnEnCpPHjlmtTMLJlLhGgKnfNqQgGhFfoHhAlLpPmCRSscZzJNZnNzNcKVbXxxCcqQxEeJjDbBdDsoFXxEYyfFevVedaARJmRcnntTetWroOmfbbfHhFBzlpmEeYWwfsSFyYsuUjnhiIWwFplnNjJSfJjyWwYeBkKbJaUJjeEspPSzqQZVLlJIijMQwXIgeEpmYtJjKLlDPpjJRrdJuQqrRUKmMkMkKUcCtTKkequkyYKTtUjJHCnNwWzWGRFLlYcdkeIiEsSvZpSFjmMJFfjAaaARDSKGwWihHzZercCWGZiDdRrIQkNbqUjJujSIAXxUuAacCLSsyNLlnNpPBfqmWaGBKkiIBKzAaJAqIivNhHKkTHhaBnOJwKPgbNfakKBbdDdDAnUyidDdMjeIYBbnlLpHhDJpPFfwVvoGgpbfNqDuVviqannoUurWwzZNjjJQagSsGmOoBbMDdXrRitTQhHPpmEeqQrxFfXCdIiDmWwmNSsSHuUrgDdGpdzAawxSiIxXmMsnNXZlyqZlkKBbdLpHxXbWsScCWbdyYDTtFpPVJjaRrdDiIhHwWxdpPaNntjJgXWwxwWQEdDjZlMNnpseEhHUZzuhHODUPAYrRHPGeEgydVNlVfsSwLlXxsSSTtWZGjfUorfkTtfsgZnfAPrRpJDaAyYdyeZuXxsSaviOorsICEeciGeHRSrRVQlLIiQqcCYybswWsUNnuVuqQSRiIQqKkVvYWYixXKVhHjnNOoNLMwWmVfFvJnNVvjPfYyFxXxQqBbXfCmMXoRnNOoGJuUnHhWMCGgdcQqCRrbDdeEFfqoORwWLrjJptcCscsatHrRXxDdoOhKktxkPpKcaEyFfYfrRjJlLsYjJnNgGyYHhUueIeEIOoZzZFEEeYwkGpJancCWMmwgnhrBbRHNAmgmrRaczsKkUBIibpnNXVlOonNLaciIXMGnwgYWwsMzZnNmhHrkHhPLdDbTFOoOvVGMmzGCBWwXIixoONSdbvkNCPySsaAPpbBevwXxAiINsSnaqGhVvSuUsgfALFfqdDiawWKAWtxPrdbOeEOooYiIPMTxXrReEGlLKHhOoyYVvyYxXkxXTYfGUubcCoASszQqZBBAYyIODdLzhHFBDdboOWOoqQmLleEdZtvVrDheYyoOuUdXxgGpPvxjJXfFjJuFEeffFzZyZzZPpzYyYgMiIJfmMuqQSsgyMfpPFmtTPpjJGgBeDnNvVdJjKiZmxXKkMhHgGPpdLHhmgGQfqsRGQtTLpLxXNIinYyWwzZwKsQqTUKsSndlBDDqgGeGLoOjrrRZZeEIYpqgGoOQgcpziEepDdxxjJXJjAaRrfFgGnYCsSckKJAaPphRQVgCtTcSsRrHFAKIPpqyTAatnWwjKkkLlKzBbzOoIiZuyYlSsLGgHWKQqfFCckMXGgdDyGKcCeNsSTEekERrVveEaKemMEkZUJQqjZqVGgfFvQiIpxsRrDRrddQqXEeMKFaAavVxPOfOofmMFGLlpPzZrPdDNiDZQcJjCwOonupGBnNjKkOoVqMyYolrtKkRfsmBEeSseiIIlkPpYnFfNuUFUTtalssSoOviIgKgGPpVMtzrhHRZPpgeEedGgvIbBqwfFTUwWDXxGoCnCcvVNFpGqQSFcCYJZZzzwWZUuggdIiDuLrRfAooIqIiWjJvtwWPpTPpeWwXPdDWTtgEiReaAEVBJjuTWvVwnkmqLChYUssxXQIRrQqGLlRKkJgHeQEGgIsSzUuzZAadGCmYwFqsSlLOrTfzZmMAnCyYcHRKmMcCkrhWwCcafFKkAkKnhHNlWQxVncCEeRYVsSaAqrRxXJOxIpPeEYyjJjJueYyMnWVviTtVuUxXFbvmmWwnByrRUuXaAsVwAafFkKNMmuUnwWPpovrRvgnxyJjoSkiJjWwJMyiOHhIXxHnNmMNsrRpqQnfFPpeaAmwtTwmFfhgcCHhTRrirvVHdhBlLbDoObhmGgLDHFfhFfvYbBPpFfCcZzZqIJeEjicCyYQznSsNytcVvpFfInxXMUifSsmuTMtTLvdnNhHYyxxXdBbqQxXzAyxjbBDdLlAaoOvVaXqQPmMBbmVZCcRUueLyYZzleEaAiJodDCcItVZztTvmsThAazYWwmZbBsfLsSvYRjSsEeJBbKxpbsSpPtJzZjxqNnFfLqAawWXxvDHhceEJjjMfFGlnZyqQYvUiIuVFaNxWWkHUCJjCUuqQOJvUdcaAyYUvoCVzZQZzqlLwmQFuUxvmVkmMaAiIUHtcOTaEfFMmtDsRhwXxKIRryYiUuWvPpeqtZzzdXFHTYyGdgcJjHwWPpkRrKlLkPiXxhHZzCnNKkcPpjSOLYSsSqsbjFfwsSDeEuUeEsSNCATzcPFfipbLqqwrWzQPpBeaAMCJiIuOjdiIAcCalrjSnPDxNpbBWwzZEeBVrCGXJncJTlibBXuUqQDdKfFAahjJapUuKmhCLlRrcnNHYVvyQqKkVHTEetlRHhIizSXFkKZrRzDdfbBybcCkKUcCAMmkxXOhHxiIwWJTttzXxZXTuLlFfulLyYqQgcCGJZTCxTtdyYaZEeQiIPaiIQLltdEbBhtbBJjSYiSsIysLltPwKQqHhkHFKFfvtMytKEMqIgAvVmMcruUFfuUGgRCwIiRKAfLMAPpahHmGBugxAupfOoFkuIiXcrnNAapPcRrCFfPpRcQHygdrlXEDTwfFgZeSknmQmMxNuUnCvVtzZCchHJTtkhNyyLyLdDlHhXAaPpfPpxCRGSsbVvADpiIPdPsrOmMoEeRSpmMmYbBxeEHaJqcCQDkKamIhHiUxRrrRbCcBCtTAORxbEYQqySaILliBPwieETtCcGnBTjsSFFffsSvauovhHVTrRrzEDRrnNwGmMwWTtPmMZsSzPpSxiIxKyYPUMiIzQiNnAaPpQqtQZFfdlLFRrbBjPpqQmcCcjrsEeyYSVzZwBEUoOcCNbvjUuiFUjJNnbBJyxRnLiIOHrRngSsIitfFTUDIiduNLVvNQqrPmMpfAHGgTllBKkbGXxQDOoTpPCSsaCezZvVVGjuxfFGgcabBANnTtCeQqErBhVvObBogkbBhgeSUeJeeViIpFMhBWlwWVTzZDzGgOeACdfFqkVfSdYEeEGgPpGaMmAUunrRNFfnNcMJjXxmDRbpPgSDIitQlLFfleoVpPSjJQvVjJqsxXmMkOoKvcCOyUCcMmeEBiICPpDFfdcpFBbghJtTMfEeJjWexXFLlHcChtTUuPpVvViXGrYRPprRPpUxQqCEegXelmMfFJbBDaTtAsSdAaDcCLlskGcSbwWdDmUueninNtjVgnBeQchHCLaNnADdyYyOtTJqQjwIiWNkJjBtTUXoOZzxbAylLAtwSbBCBaAAanwDdWNHhBbrjJiCTxoowfQqRrAaFUiRrIVvkwYyWMNnKkFuPQqptVUudSpWEPpewjJvMCEruUReohEeEedSqGLvtzZagjaRhoBbNbBoOcKkBqeLhRrHlrvVRSKaAoPJtaAhHOiVHmdDEvtTVRredDNWkMmeEDiuoOlHhLFflLyYpPvAwWfFiIFWIiwRQTtLcUuCvyFfZKaAkBlcrvFOorbBStTBQtxXjpPQqvVJDdPpztTLlJjZMDtTdTJXyUxzvDdgJIoOiTtjUuuAJRrjaXxSlxtTXHhHGclodrbHhBHhhCwqdgxXVvVBbjJvdDsFQBpliTtGslLQCdnNDmfFvMmVnROmMCrRcdBbkQqsSVvlOozZLxHSRgGOoxCcAAtyYTXUFfeElcvLGrRgtmKHIQqEeZzQZzqBgZPnNkDdiIKCkKXkKSWiVxXAbytkYyuDdYGWqdUuaqQBnGoDdnkEeKgBbgzZGWwByXxqhUqaAQycKfpPFkYjMIKYyBbsSjJTaZRrzAaJPPSVvVuIijsQaeYvNtrRFQBhPiHRFlQXIaPyYywWNWsShHRyYbVXZhMIWhdQqEenpPzpApPwWrRJkHhUVvBbLGzFfFZTYNnCZzkjJipCcCzYGgrRGuUgyKTxFlLnNpfqkwWrsSRNnWWwxFmcCcyxoZzOhHIiRMbkKBmaAriwWbMYkzbBpPdFffsGVvehvRyOMzGaRXxrNiIkKktUuGgDCAXxaznPRrnNZyCcYVRrvMZTtPzgEetTqQRwWuACFfzoSukKzvVZziperTOZzCTDwAaMlLlLiIlLWwGFEBKoEuUdDeQWwOohHqEWKLlnWwiPpwWQPpVYaAMSonVvNqFfuibgaCdIeFfpPZrRkzZKKKJjEvaAcCDHhzvuDcGNneEgCdfFZpPzrRBbXzCcenNMXxuOoqpEVYzZSQiFfbmoOKRrkkKhjycyDdkKkKxCcusLwYYydDMmmoiIHvCcVsjDLlKCqpPnnuBdDoLiKtKErolQqbdDRUuvYyOojJNYsOolsYxkKTSViTtNtMfAYCcKbsSjEnRPpYNsStTWwqQoJqQnNfWwFjHhOdDpdJIkTZzkKbsLJltTqQKvjghyYMNLlwgoNnvVlJjELlLvVwMmXxXkKWwGKBrQKkcMHhuyXxtkrXfwWiWSuUHPpRDaUnNHiIlNsSCcbySyHhzZYwhHTtxyMuimMcYnfFNdbwWCaPpARwlUuMJjzZMOYySJwzmyYLqtBDBbHZMKkwpPWQzZhHnNhXPccGZzjwWYBCcSHafXaAxFYyCOsSDOodVhHFfvUurRiheZqQuUuUUGUPSWKvdRrVvCYglNBcxXUYtiIxeqFfUjJQPUGFfguaUuAzZPBgGskRrjprYymBbjLHhioOkeMmjpzmpDooayJKCUFjshHnNSXwWeEzQdbQqFswCYyHhKErvTiIsSgGmibcCjjJwWRrjXsSxbCcBXLldvVDBbkZVvKkzKeOdDZhtTQCcphkKqYAajwyYAjjsCfFqxFfcotaAzBbZozKycOuvbVlLtnyYWgruyOolSzrJpjJPcUhLlmqOopPQVQqAcCutqQlLxHhXRRrRIrXYqQyHpxTCicGgCiSyrTewxRUVvuVHKlkKIHhLliHhLWuKkPUuUzdDjlzKRLlqIiQxBsRMrBbqfnoOuUSuGgUsqYmjJEHqXKkrIirRJiEeYvcCeEWzqaTlEhHjTOtPPpmRFUTKrLlsNvFLRwWnDaAxcCoMmtiFPpUodXxOUuoRZzBbIoOsSkKiSrRkmVKEekUyXyEjzZzsSRrRNhTcCardDhHOolLipWwrRuUeGgjJSKjJUxjaAVqyPyWwyYmHHVvkFfHIhYHhyUrSOXxomaAkjqQJfKWtTdaviezpPveBzZpuVWbiIDdKgGbtnNExTtXYEeyFoaHszlyYiTtOoSaATvVxOocIWwGRDdxDuUvVdAZblPNZTtvYCchZBXDdACfqkEqTtyLtmKkZzMmROLEUuelrfmMgVvIpPyYhHoZzOERxXLktoOkKoOwNtQqDdULluiIiumVvzZMLlhHgGTTCoaoOttvYlWwLbOooihbBwWbPBZWRPycGPSsLliCcCMxmQALrRhSszuUjaNnIiOhqPplhHfObEUPMmTtLlLtpPTddyAHfFsQylLVvCWRVvIyYPwnIXBbxdPPLlrHAXxarRAKkdIGSlMqgAaojcCQqJOecQqXQkrjSoOsJiIMOphVeEvHITNNnnSsEdDchekKPqxXFrCsSUucRfzFqDozGTCcRrWFcCbMYumNiwaadDwQheuPJNnkJcZJjYyiWwTtJjbdUuEwrRaAQcCnAiDGgdyYFdjJhtcCERenNgkqbGjJnwSsWNePkKNvOrcCRoKpPeEzBzZbZcCdLlYyEZKkpGlubmIGgAWtUuCcYyTtFtsBlaALNnSunueEUIvEUXulttTRrcCszpjhqQHJPTtPEgGebBATtuUxUutTUZzCxXcYyRxtlFxbduQlLmMzCcfFFfAaCcFpSUqTPzrGRrgRZteYnwxuUGlnUFUqmMxXQAaufbwUsBAcGeaHPpzQqlxqFGXvSsrKkPpaAbbQYZbBrlNgGnVvyYmrQvcCwNDdnKVMQqmLlvfiIeEHhoyYDdqQUgoOliKfFSklBAkKdDNFxqQJLlkKNEDddxXDwVveEhGAatbZYCHxuLlQGrYqfRRndjJWmMZzFEnndtCuNqGXxkKcCgMJolLbqSsBAaiyfyYTfFpVxpPiSNnPpbBbhhEnNmJjqlnuhMPpZzEemwgLqZgOVAWSgeIicFwfFKkYZaWBbBbwkeEKQKjLOIGwyPZsmUueERrYXmJuRgCcNBQqAatILgGZgkKRIwXxpuUfeEJxjWKkLjJExCcihldbNCLWUuzrfwWserphIKVvVQQoJxwWkKXyYOHWAhIgMRrKKUKSVqQjKEqVBgGtdVvHhVmDpmMPfROMKUhpcCqBbGZEMmFlsSMlwaAtWEtOXJvmlnCcCcNLwWlQqXQIiPRrIiDdIVnyEHhexXYEeBqQtWktGgTbBVGBzcCVvwKkskKuLlovoOVHwWuWDddDdaAMGzMaAlWUXUlxVbqWshqQUEeuoRWwrrMmRbXxNNdqBPdtToDFfPdxHfWwFmWAzjBqsZknvafRrDdqoOrhXxHRkKQrRKztTGFDdJlzZLVvMQIqNWyvVYKoeoOXZDIlkKAGeWaAHBCYYyycbhisgchJLiIrdfqQEeFdjSsBOtbBTOoVUuQsaAYysRrtTqQXxMmJYZzNIutAaTrRlnbeEBNLUBiUubiIBIJyAaYjkKXwhOIisuiwffaEAhAodRrhHDVvGmJRrjpPbNSPsWSsFfdAaisuWklFDdiuXxUKnqyDaAkKQaAqnBJkVbBYrhUuHRUucCcxmmGgGeOTGKtibBEMUtTumZNNbbyYGrRLAacWwsSxZfzZtTgvskhHNnbBJNOGhHfrDdfjJMmMaQOoPpjJdeJHMYklLkOLeEAdzLsSxXkKyWwmMcJHEgVrcCDHhsbvVBhHVjevwaUeEXwAwCYZWwGCmMFvKkeEVfGPcCpzqpCcnXYvHhVyYKBdZSBCTTeErRttKmRrLDSWkBsSKXIBwgGRjAszvKxyLuOnNMTFOynMUumWSswoXxlLrVwpCcPmrTOpQHEgGxQeHzREFfeLHUBtTSsgyYkyWSsuCcgXxkNdFfpIiiaAOwSIispAzktTCclLagcgdPpSsJlXBbxaDdxFFDdHhzWHhwZunNUkKaETtciqSZzsnGguDuWwgjAaoOJxjJJjaXxvVSBxwKERrVVOFfdXxoOVgGcCKOzHcWXszuUMmZrUORHoCSxCtTTZxXKQqzugGKqQkhXSnaAfiGgoWwoMrBEjJAALlSmNdlRIilMAoPCcuUpOchQMcsjJfFQqmMdDSCyYkdDhRVvSmdDMsImDdetTUppPAJJkKexqRdbLqmFfMAcVrRvpPKkrcswPCWuUcAOnNuUKOoeEkpBxXOCPpLPqUQTkzhWwAaHkCGgYMuHhtneYyWCcjJjvVJQPpDdZOnBnafFQNpqjtAGldDmAavFuFJjrVbBvKoLTwRryfcdYIiPXPpXqxsErMjpsJWsSwWwaIYkfScvVdDjJlgPpGRqxqQxAaVQxPoDdRqgiBqQeEJyYUuBZFfkzeEgSseOHRKwyYoOoFOhzBgGtTbZSsmMIYyiTxodkiAnNiIQtTVGyvVvVBPpBctTtiIWiEecWXxNWQnNIiGIYyvgGVYUOebYORZbBJZWnNQoOqYbIEUPpueVBqcCIxTtuJMaqhwSsqZzXxQWbPLwntVMVvPVDgghHUuGtpPMTNHNmMKMeHhdDMmRreEBbEmknhntaAmTKkdSsDsSdDGdvpmwWvTNsXGgDdxkNnkKKxXSlZzLWlwWpBHQAZGgzmjUTdDtXicCQuUbviBywTqQtBCcbzjzoOFfroyBEouyigqwnwTtCIhHwoWwODxXdTCbPpvVYywKkdMmvVDWbvVxXYgvqaaAIKDOXtpPHoRrfOWkrhEeowWEGZKSszbjYyvVbIGQrOpXAwWaqvXXQrLjJjJCsFKkKyiAjSPJAamcCReSXQxxpyDFfCKuUkFYWtwWlOkFfQpYMmyPqRpPfTkKZztUfVMLgZzvyYVawWTsSJQPnqANbNVSsXxvoziIqsSEefFwENTUOomycKZVvKoOtqqQuOoQplpPrRSrRscobGuUgPKkDdoaCwcpWSCRpRKkrPCpxnNXPaQlDKkdQqBDNnrQXXxCcEjjaPubkKBEMivGgGgVBMmbBbaAkKrHKZzzZmqHCamnNTtLrLDnMsyYahHaebRfFnNmmMOWwOIcCFHhNsxHUZKRrkmRrMJjkztgGWwcXscOqQqKkQhrouRSxwChZoknNvfFxXWwDdDovsSvQqwWekWXbsAXGaALlUdUNAamMAaQISsCelLAffXALFfjDJjGCGAOoKkKZaPWoIPDnKvVGaACfFcUwYKTtvdUuoODVGbuhlEerZhEqbBQqXRrehUuqPotRVvDdMWvROMmNdEeDYbBogGftmlLoURrlpPYXLgGlkVZSENZzneamNnMJrxGgGgXWbixkbKwsdlNyYnMkTtcbsRfFzZrzDbkyCcqQxVDdzeEZvNPIHhitTQZgcgnNzyVfFvcWMCcmHlqQLKkDmMdhaWxLluAWsSVEJlTtLvNEengGbBSMmdRvGehjCYEeSsOoOoxXlZDawWlovVKWgGwCcjJKymhjElLDOoqAfzZFPpmjJFRFgYyonBbjUuKSVqQGFdMyCcYLlmDzHhLIileEXpPClsSbBgBBUunnzeITkgtdDoEgMMXCyvKjbNdYQNkIuGgUfLKwUStTIDtTCcwSpsCcnBpPvVPpSsMgZznNkKsSOmMaHaekKFfAFFWIUSoHWxyYbtTinZzDdtTyjhHSSSsqEOoevojJfFbJHhBbDDRZzbRrEeBljHFfCGSIwxXEgoOnTtFfNaiILidzxxXOoEOkwnQiqmhHiIjfgZvVkFaAAVAaRrNKzaASgGbBDdQYyNnbJZawkKMfFfFhXDpdOflyCeYyEcaKkAdDYLFDpbQpPDngGnNnBTtOcCHSwQBjJvXLuuUxKkuwlGgLLmZYXuUxygmcCMmaEeIiAGgDwUhOUSWZqPOopQbgvdDtXDdFfxTKEiIewTbNvipqxLMVjxoTVxXvIiewTnNLlWLmSsLfezgJjQPHukKkmorFdMvDTbvxXQeSskJvskuwWyYkkNnmuRrUGgIgGiGiHawSshovVjOqqxXnNvkiZzHPRESFsSRZwlBbcnBSsDLFfmMHIXelpPwJrRXbBsSjFPWirGzlCcqQiTtWbBwTiIbnGrRrUjMxsSypOBboMSzpYWgiolOoJkqAzyMmzVvZDdUubBWfCEGFfswoOavvVoGzQWwlGWHUNvVLQxXMeHtTHBiIsIXvPtFYDdISsbQGgBlLOJjjgGmuUQnUcTDNNsSefwDNrrFQLlsjJSyRgqtTUXhcyzdDnKkNBIiTggGHWoOrRePGgpnjXTCctTtTtXUulLxfHvVhnabLKskILGeEuzRrZOoOiIyYnOousSUNiIFkcZzCWVCcCcqRIiMlLLRzyHsOoShOoqBWBbwWhHwBRVxgfQAawWXMKknNkKmYyLZhAEgCaCcbxXSuPpWBuNLcCgXWYyaAlDdqQLUuNzZGgyJJjjrRETKkzZptXxXxQsOoSuYysJfFXxhZQqzHLljXxPfVvZqUDBoOXfJjLTQqQqXkKruXKknSsNapgGZSTLUyYxXxuAaNneViNUslLbSTfTwKkaiMBULkUuKgPuUpPLNAanlznNeCcDpPkVnpEjJvVgBQKYyGEreTHeEDfIaNqQqvVWwWeDBFfFfIzCjKjpHhpPUEHqWAAWInMUywWVviImBKkfwSstgZOdQfZQaApEHCsSetiPoDdmRcxXiQqICBLlbyYKqqQEeCcCcxCEGQmLsgiDmMahRaVfFvAppDgGiNWpirwcYqSgGdUuDhaYDDlpuedDBoFUvVZzMmuLEADrRdaeQHoAJVvZHlakQqKqAaMDmMdXmcIplLgCYCcprwzbpBpPHIrROByjJVTTAOcttbBUIJjAaDdTnkKWoOTjJKRrFfjJtTlreiGFRorMqQTlYdDVvQeLxXlKjrRJQIWwiFcBbawWDdxJMmjbwWzHDdynNVznWwpLBzeEaQqCcXrgivjJVCzZXtsIDaAdLPcCpZShAwWOfeTBkBwXxvUnNXxKkwWjJPyYbEZzVZEIVAYyeEDRrwkeESsFKMsRwWuHQqAaXeExiMmhKDdhhMYaApYQvJGgXukUyYusEPOoIoOiIIiRALlCctHKksTtMmSnrTtZZzvkKVGgJeYxYuvMKwWsxdXYyxDXrpPDpPOuGrRgwWwWfITfFNlLJjnOXYydIiNrlfaAVnqQSRktpPufrMpOoTotJeLlLtNnAKLlwWkQZwUuLluUVyIjRxsSQhLleMyQNFQRmrSbXMmrXxkZLeTtEJZubBpLCclUwrRkhveErXDdWEDdtRYsIcCzZIVvcDdFfAazZttTXPhSsxRirrTUaXxvEeMLrRlmbBRVvrrDsSoOHhdRMHuCjaLlyYAdDRZsLYetTEUQqBbRzZGLlwNTvtTBsRrSVnVvQqNUDdoCnNYkyYZOTYaAyOCXFfjJQcSkKOoJeEuEeZzUJaWJyQHKRrJjdDkvVvVPqIiQuwWUcCqHzoExJSsJBIIiMtVXSsmMxReJjLlkzZpfFzgGCcZPcWSfBDqjJZgHhGNnxJFhHfuUfucTWwtklmMLjYAiIOgGOeuUEdPwWRwWrMZPJaAVnNvlLEKvPpVIBoOpPbuUlRrJMRPJKSbcCpvVpCQqcqjJuQqeEQOfFoEXxXiITEeOoYywWyuCvIKkiVbnLGZzyFeEXxfcFfDVvVBbkOowjuUJsfFpugSsuzEHIocAhHmMhsbyJHhgCCpxHgGzZqmzhdbTQlMZbBWSsjsoDzpIiPOGgoZdlLVvmnNhHmLWrXxcBDbBjJlLyCIUmQqYXCcWsYBBbrRnaALaAheEuAdrhswZzUuVvIqQFRfFLhVvFfHLlLllrxRKTYUXxmJjyYCrRqRbfBbRrFkgxWgGleLZzOPpGWnsPpSMObBoSsfQDdCcqFmmHGJVkrRLjlSBtzJjZKijDPnylLrNbBeJBfFTxXpPtkyaFmNrRUunVOoRNnrNnvTfFejJOMQjJkKWwqmoyYZzEnqkKQmMsSIvkKstBbXyBbSLCcSDdyTtjJfFnVrBgGLORFfekTXxkIsMmBBbbbBSlOuUOobUNNzZQcktTdJQqbBShOMLlyWjJlSUXYCfFYDdaAJHMBIqsylLvePDdQMmUTtmnuUNEZaAxUCcuRrUVZHqQhdVpPKkehHkIiPpkzEkFtTfKiDcAaApPGYyBIUtTQOdUWwuDTNUuntNnsmlFcCzZfLyUuvqNnvVINkwcCeAaOkbcCefxXgmWdtcZzKkotRtTbBEDVvdRMUumrLlPmMwWWwpPIZbBUsOwWZxXcaLlWwUrGOoZpzcChmMHmzLlpNZTtcCcdsSMSsmgGQqTpPKnAJjgZmoYrVCcHEQqiIgGgSFDRzZMmrZKytTmRrBJjIrcCcMmndDYyNCRfMmcCFIiXYCMIifXwEerRKpPQFPfNnXtkZzOoYYydDyUuZvVcfFPItTRrKNuUnqQcAaytzfZaAglRjJhHruKrRrRjaUuPZNxHGghXDAaHwimHzxvBrdDwdDnYzZpAKkixnNqLfPjJprhIpHYybqfcCTnAaVyEAqSJUvsbBMmuUppjAfALkKlaAaFtkiGKuUkgmJmMyKpPGgZzPpkJjuUOoCkWwKZzYuHQYbckKCGeESsNOgNbATtDQwgsSyUSsKTYBavIwsZzxMmcpzGISsibihkMeEJjPpTltTVCLeEaAFfuxaaMmWwXKUuKkkSiIkKrRsHhrshjwWJXAalOoLtTKDRrorNFfMcrRqtTZqQzSgYyILhHPbqfSGgGDQAaWfFcHRdDDOLChHgxXvVhlLleEjlLVvJLLiIHhsUGwWVZjJXuYxjuUtOoxXmcNnCPpTqbsRfeEzZVRCLbKkzYVvVlVvqrfaNnVlLmMQqnNUIdaAKwrRnWwDYydMhvIoSsTjpOkWwsEQbCnAaaACcNnOHkKrAnNJpPGhHjJATVlTtgyYQsDIipPHOcMmmVPsDvTHhHbBhUfmKRrHhuaAveEVWOOXtcIRbcsWTaYvVaBubKnCrRcPpoYlvVqEbNGvbBfFiIJTIEeuUNEMkKUuBsCgTtKSdPeEpjLExPpGcCcXurwWZzyRgxIvfEwpPFmjHGfIizZPbuYEyTtYLqTdsAaGBUurdxXiICgeyDsFvKQDcaEoZdmMcCtGgvWwLwbHmfPvEEUNnujEusEDdGHKGHbRVvXUJgvECKkccAcmMnNtPuUpgfFGdzZqgLLNnthcCXxaFQqREqQwWZlsSLzenoOlnmBbMYNnghHgGGyGNlLholAaNrXYjuRrlLfIJpKkPVBnuLlebWOovfQqegGSsEFoOCccrRCsLlSRJCMQqJfDzqTIqZSsmupkNDdnXXhHwxUuXmMubBUWwOoTtWsnNrjJRvVrRpjJnNgWdeZRtOUAVZzsSJtbNgIpoOPWTtNnpqBbQbAsVvZzUupPcMmCgGerRBXrzZoKkacXTtJMmjuMYyAdkKjKkFfAhXgGpPlLyMGnNguUVvwSsVvWlLDaoOAdgGafFCcBahHAgrcXEeFEePpxuYyUYzZlCcYUuYnHKkKVvjTvjJVhHctsRVvwWkKrjJSTXqMNKsEzVUUuuwWvGWTtJjtdbejJAaEnAXgGxaxpPXmMXxNBRrexLRDFftTGuUYhqCuUbBHhCwWxUKPUeEDdHhaXGUbglnNFhsSBbzZHakKkrWrRcaAXxeECmMamMhHGiQjJmVvevuMmPpUzxXZPppPXxdDVkAaTYmTdDRrjJVSsAMmMmakfnNZzhWNnpgGTLlTHeDTHhqCcAZzpqzADXctHMmhzjiIyJjYUttTwWlLTmMUniINJjtxjJTpPjXoKPpabBuBYUuxsTZbBsSztoSsmCcMxkOoKqQXOZyYhHruULnNhvMoOktTPAHkuLlUqQaAgGxGgILtjCAaNjxcCgcRvbPnXRrLldiIpNsuUJRLDNnJhHcCoUjOocmEbUuqZwYyQqRaALlWQQlBPIqQpCZtyYaGPpgcnTtdWJVvGgBSQHhsRryEelmnNMosJIpNHhnKzZhCGDgtAPpahfxDZMmqDdQPpvVTQIiEVwkWOqQUVvuoHvVrWwaAuUSdTuIiUeAtoCGgThuHhoOKvMVSfVvFjaAJsXucCYydWwDaAUfmMqMQqmMWLlvcrROVufFCDuVjocMGgVvmJQqjcRrXxuhKwwXnAfzNLgmHhJHmMhEeCdVQlQXVvTvcCVBjJeEPXkbBryVlFSAaEMmezcCMyhkKDRrdHZHWwiItSSsiPpLluUIMRrTiOFfjIrRESsrzvMpCcCmMckKxIiHhAJXVvYaZDXDVlWLlwmVvtYyUMpPWkKwFIumpPxfFXNIiuUiZzPrRCTLlVdlMvVHJjBdUuHDhkhHKRmMmMItGHMWWMENiWwIPSnhioIYmjIKsOdnNDMmYCcXhHHhNGVpPoYyOVOWvnNSFfJjxYbNwWMMVXxEeBfvIwNmoOEUJjleELfFiXxXojTtQvzZyrNvVvXqwLnpHhPNaANaFtRhHNmMnnOoFNnfNoxXgpPdfFDhHGQnNFffWyMqQcgDfFkKZieHhqEhGjrgyYuUYyiqSSsSuybrRBHclQMKNtUbnBebmMBEHtThbBlpPLbNvQaAqrKkIyrRYenNGaAwpXxxEJjtaAMmTVwQvVinNOZzLFflOaFAaKkOoIilQqUcHpFfYgGyHlIiGxXZzZzPpUuRhHwWraAFQqmMmBbNnMfgLhPhCGGzmdDdDMAajyfwWsgPfcOSsgdyAaYGUuguCctWQiKkRlLrOoVDECcCcqQfFfFhXxHGPpTmnNlGgJjLvBbaAkGVSLAuYyfynNMmsUuSKLiFfEFfyYBbRrZzbMSfFFrMmTRLbBOmQvWwgNIiLlnGLlZzwWHhKkJbgPUGgrRNWqzQuUqdInpRpvXxLKklVPguUMmrRFoDdYypXAfkmkOoKBbxXxDoOvVScCXPozxXJjZzmMuzAeoOKtnzZEkgEeYrRxmluXxULwhlLhMmHLlUJjsSZvXLlxiIVJNrRnNYQwfFcCWikaiIAafgbBGIihyOoYGvqrHjcCyNaADdiIPpXPIZPFfCGPyvVizzVvRjJJkKlgErRQAaddbUupPLDNkugGtSAakQuUqWlPlqgryYSQFqMlhHFfLUuaAlDzIBbkuUPpAaNnEbYGyeEYUQqMmFznTtNZjmGgGQqxXgGMmSsxXvVUMmVDEwWYyMmsSHfFdRTzDJjMwkKmMJjuUPXxpUuWwuUiIfZlopPiabAiIabcClLaOBgLlFyvVLltgNTttTtTnEeDdtmjEeJpyBDhHfFRpXTwGgfFtTaVvmMkAEeILlvVPpQhHlajJFbBGUuSlLsHgqQsSSEeuUsqQTCctQkKkmMOoKWEnNeVEgGQqSsYpcnKVBDaAnNDyYdrRmMscHhCnWtFfMmTwmMbcNEengZYygoGgpFfoOAaPftBlpKRSRJjEerKsYydDSrvnpeEPeENVRjJmMkyAcCaDGguUpPdHhGjJhHWtTzZNgDdmxuUCpPJjAvxPuKkShHZCAaAsXxrRSMGMaGNYvVyAjLlvVPBbglYyLKWyefuUziBbiXxZeEzEYyyWwScCFeBbQqAClLXTIOoiKlLLlCckTAIiSCBbyYUuAatsSTSTPJjKkRwWllLrQcCByYDdDcmwlhHLNjLlZzgrVvrROcCxcpPFpgGltTncCYyJIivkIOoywzZyoOMzZmlLrsUlLvSSBIilLqdDvsrRrhEnNgSRIHhVAUzEYDdjPpEeIivVaFNzXxGSSVYyvsUIiuFeEKFwpPWRQqDdOuFJgGgRVvrpPzwTxcKkCsSXIiVUuvtjJsTtiIpPJoOjWDdHhFGgvFfLdDnzZvDYphyapueEdoANnhHaqQXxZzSPmLzJZzeqXxCcGPpTFfwWXxAuUDlLXAcCvfYwWvVzZNEenyBwQqwBhPlDLzQYLTtzWIiZDPRhsnMMAacRtTMJjuUOoguUGNnqIxGgqQSsADdYyEeqJnBJjImMibRhHhAZzaGkKgHONNAqOxWwXoQYyQXxXxIUdQYynFBPOWjdHhgGPkKcCjJNyiEJqKkQRrmDIYuGgNFnBjJCckKYyGpkfFWjoNbvVAtnVyMmYQqQajZWwkbbfFgAwMQFfFSsbhKkHnYlEeaXxiZzhHHimMIhsJcCQGgBnKMmrRxxXjJXqzgLlwREqQIgPpfuUFnNksdrJfVfQqWbBAawVvPpKkQqFvsPzVKkKIiDCyfrgLlwZcJjhJjgNnGQEumMmjWwkJjGgTyMPGcpCcPoyYOCixnGgNWqmeEGgvzZuAjgGEFsLUYyuPfHeEIiDdNlLTRrtcCJSyYUuEEKHhFfkFpPfDdJjeLlWwegGWwymMMPLZsJjQqSBFMmMWwRwTEFfsStTpTtmMPeEsSNNCECcerXxIiMjrfFiIDxXEeEMeEmfsSOSdhcCHeEXXBJjyYvkCrRBeEoOZzbNnnnjCrcMaOHtGgTnFNksSxOolLXnNDdcdAaqQcCAaMmOoDNvVQDdgmMKFfMmQCKRXaAoOpPgGLTzpPZtTBsEejJhHKHdDhkVGUqsiSsHhiVvUmLlNaPsyYSgXgGlLkKxGkRyoiIqQnKkMTttJpPjbBtqQbBNgidWuuUUOkInNiftTFCQyYwWJHhznkugdDGnWGgZzLMVvpgGPhqaARrqQLEuHhdDUMrIKkoKkoHhAKMmkVCZgGJjPpkKwXiUupRJSsjrPIIzfPpLFflFNnoXUTbBOotkKPbtTLlQBHWwhFQqvVjJmMBXxIotNnTkmpPMdWoOZajpmMnEmsSMEePpXXSsxxLzZOoXxYyRbBsSrvVgcXMziIZRVMKkCcZTixGbwRKQqWAnNaduUrCcRYyQqDwwQybWFDWpPktTKwdMQqmAhHXRttCcqIdnuhiIcCoDrMgGdGJSdDsYoPBzOoZQqAabmBbcClMNALAOQUoOJvwWhLHgQPOaoOHZbFNnjJfGeEqiCcISRrImTbBtEYeOoYRZzbsQGgdQqDgoYyOWbHhNnVvBHDuAvBiIlFQnNqQMmhHGJjftKkTFgqQvVOouHBbHhERjJZzrhybRISphBAabBOFnvgVvksiIoDdOxXxQIiTHJjhLltxvafFzZpGgYyjlLuSaIisZIizBckGCcudIZHzXBbxvnNqQxIhdKkNnVIivDNnHhcjNHjJDISsjKkSsLoyYFMmfhFTmonCcbBuUIiNIbPeELMTtEDBbhHgDdBbtTFbmMBfgUjJGZGgZLTXxtldbgcCGQqbiIxXaSfzZprRIuIYwXEACNTLlEeMOosSmvGIzRUVvzaAqQXxhHDdRaAXWwqoRroRrOBboOnNOQRrGgqQYPpmfFpVLlvSszEeiwnflGgLZznNlXxSsLNZVAaqQzZPpDtTZzhzZwWmMNnHLjryiSsIdQqFIBoObBpPLfFzZzeEkKTtRrnNUFfmMQqLllLbniKkgQqGRrRfIiuUNnjJMXJXkKVFTvkpPyYzZzHfFGgfFhMoHegqzZogHvcyYCEwWmMesStTMFcUDvuUbBUumDvVZMdDfoOdDAaqVvCfFcBQqwWqQnNSsrRLmNniRGqQRrUSsuIRrVniZkKcYHhQoOHhNnOoSfwWHQXxqlGmPEwSsWeCcAAivdlSEOkKyYRroOjqQIiNbgCGUPoObBppPFIifEezZXxpLvVdDlPTtnmiIMNXxHhAJjSxXsRrgudRrBryGDNugPprRGhHgGyYaTFyMmrRsSYhzsXMmRRrAXxBFownFfMmvVMkYNWwuUdDyYnyCoOcYYyyFfKkPSRNCcnoUuOkvdsSUupwSZzhcqQCHwfFWDNBYyAanNDvVsSdhwKiIvVkPpFPpnNNnjfnXxNAVKizZLLSzBbZBbAFfcLrRhbBTtMmPlmMwWCctzZWSRwWvZztAauWwlpClLcvYakwJFfjLHhpLSftcCTbBWwdDEbflqQsuUgnNyYGjzATsLxugxhnoyGhHmNAaDdncCMgGIQqrRPpOXnNinLEikKrRRBbLlBbWweGCjVlLYXhmrRvPpVdteETBbisgXrRZNcqQlpxAudcKUZZzzuoOFzZffwbBbhNdwBMOoemPkKeEppPMbBEeEGsSgXUbBeSEeNRwkKcCsSWvVXsXQqxyfFVvYtTyYXTtRrFfohHRQsSzoQvVyaAsoOYySClJyGgqQkkiNGgIinTJKKUXvKkVNLluKwWrRtQAazMpjOpPSsozZhPJFZzKklweEyYipexXkKYyUuEPwCcWXapJxleELCxXHhKeExXRrbBGfFgdpeEoOQPbBKEeXxZzUuSoOJoOmTZztMnhZzaNnqQYaAywDdfFeEjOHhxTmvTOonxqCcgGxBujJiFKoORrasSnNAwhUxRoOWLlNnwhHiIrRIskHEoOCcjJaAWmMHlLhpPoOQMmDdjJRjRrZHuUTJjJZGgNubBnwrWSswXxBMqsQKkmMrPphVvHNWzNnaBbMmAiIOojzZUdDuRrpriIIiOMBlLKzZfkWwhHyYxyGgYBbVvXqUuSbBorAfFacCMeEmYyEErRUVvtTEmZzMepPSMWCmMmBbGEeVXhHZkObCxXwmqQsyYeVkKLhavYtrSmYSsTtyqNYNniImxhHHhBipPVsnurRTtwjRCcUpeElXxLiXMmxXMZVvgGzQeiaAIhGltKMJRrYvVnwWRfuUMmFpPrNMfEecCPhsPpxCgGmDdGglLaAuQxsSsaFmsSKkMYyaEMmAbJjBnNahnwEwDzoOZdbFfGkKrRgwWvVBbDdLlkKLnOfFeJQqOojNnlLpPJjbUeEiIuOOokwWCtuTtkKoQpPtTIbVgGgrRhChlLHiPIilLpLlTrRtTtaaAbtzlLZoOLtTHsSrRvvaAUudDYyKQqxXvVIoOYrRPZzpZzTMmxXmMtTxZiIjkUIrpPkwWWwSrRzZnNIKtpCeayYAVCwWSjSsJItTJGgjLqcVJjvCSsUuKguUQqJgGjbBGedkeEKpPxzJyeHLRsSeEjtTzBmdlfFoUSsGgrqCciIZzjJxONxoOVFgEehHQPpAaoOqcCGkfFDIOTtoXxiIbrIibOoBtTAaRBXoKkQSUIiXCBhuTdyYDUJhUuHpxXovVOOdDPMmpSCcRTtnoONrqtTRrrRQPPkfFVEeDEedjxpCYylIbBQquUstTzZBbrIieEwQmFkBcSsDZzIJliIUmexbBhSFQqhHAfFmMfRuKkXgoBTomMMmOgGmilVbBZztLlVvDwdrRDzNnZnOMmIpUbnCcAsXxJjdpPiqQIkwRrWxhHZvnNTtirRINKkkqYyQKkGjJgGgaCcdVPptDdavnNHEWOoGqRJjmJjiquEeQqdeEaWBWwffFDsbBHhJRrmMNnHhgGbeEzZqLluUpdDPwWQXxBZzNnhUuHtTwWGLHhMmSsyEeflXGYyvbBPpTyojJMoOAbBvVDSsGVMzBbpzZBWcCFfwbupVvOBbCcsShHRGxuUPWwYyxXuEWuUfiTUuoOteEZzqSsGkUkKlVTmMtVBbPpxwGdPpfuUNnXPpPpscvVDiJeAaaAHdpyDKeNpwWmzVgUPpuGbgkgZjJaxXAPgPDzcCDOBKNniPfFpFjzZJFBDdbZnuKKWwkPpyYVvDKKwWUgGBLVvKFpPyGGSFoAaUHsSWwqIiUhHfMCcWKkvVLlgGTqQUaADFbBfdlCgsSYyEetKklXTsStLuBzZWwOpiHhKyYzuUkdYyDsSKFykKUwziHhIOoQqtlLMmSsTWwtYytUIizijkKGgJlLIzZLlrRjJZMBbeEDdaASgGshHKLlwSPpsxXkYQqUTsStuyKEWwaOlQFfaAfQqbwiIFfIYEQqeyYsFMmfktTtLlHKkhyYKjDdJgGntTNkidPrRQXapPWwbpxXoIlzibCnNcahLldDsSHABcCIeEHpeEQqxXHOohaAPkKMsXxSmhCctEBbOoaUuUEWlLQoFxXMUuIiZyYeCvGNaQqiIiJjNWwCfvOoVdgGIipnNPcRrGGggGgxXCjJjKkJDCcHcAInNSsiaChFEfoOCBQQqcPpCqoHEPUUuGgpifFaNieYpPoNIiGgmVvEeIzZiJjGgGgMniIqQpWlCZprFkKsmMpPgGZhHzZzKkjEXeEXFfrRoOaACcHsSKvVvVrRooIiWwgOorPWNncCHoOBbcCjnNYFflpcpPCPpUuLlYIiyeEDwWdOomeOOooGgfqrRxldDLpPmzKkZcCHhIiBJBbeUqvVKnIOBoOtTbBIiHhuUwYyQqWXrCcRzZxbHhoWEPpidDWwiKkIcCjQIibBwOWGgSsuUcdEbBDdcgGmeEdlkRAaeEJjrzZIisfnNUuhHBwWMmuKkUxXbpOChHcreEReEYPBbpHwkKmMWUZzyYfFEkKVvyXxYCcqXxrRqVvQTtGvVlLwRvisqTtWwQYOogWwgVjJjJtTvGrlIiICcSSYHhIJjGJjiItQqlsRrSpPLNaAhHCcnJjTUefFTtzAXgGYyLBOobfgQSsGgqHCcSAuUzmaAMZEerRaXxvViIAmMokXdDJjYysJjNnMvVVMBbmJjfrsSLZLlZyYcCCclkXxiIJjKyYqQLQYyFNniIAGgvbyKkYWwlECccCboOCcBDgGCcBuUIiXcEeCxbxPpvZtTQqzVxXmMoOmIiPpxrRXLLllniINMDswWSvVdSbRreExXNXnNxnCcCcMmJjHhpYyiAaXPuGrRBEeujtYmkKMdDyJuEeOozRRJjruUrlLGgZBEeOBbokZOovXxcxVvOoNnBlLbgWeFtTtwWJyYnNaADZzKkfFjmnoeEhHvVhHOhHXDdKkZgYyPpJjUuGCcDsAaSFfYNwOYyYvVyubVwWvBwWGgcoOCUZzumniCcAaBgGZzGRryFeEfgGrRiIPyYzZYxXzZflLNnjOphwpHhvWwVltcCPpstTSHhUBbutCvqNnQvVWUjoOJcCuTWjrNnlLRJoOjbhHBeZhTtALVbJWwjBkqIiIiQyYKvNnlOIaKkZzTmMYgEJlADujrJjEFwroWwyVCcvYtTDdEeQqQhOoTtHaArRmeEJiIkLXxlKLlZaQqAzhrDduNnAagGUcCcSXPlLoArRIisSaSsyuZzUYBwWbURNnbBaAWwOoUuNsSlxXwWbBTBbtpGHshsKkSHHhSBbtTRrbSJjfFszAPpatCckKBgwDDdyYtlLTDdddEeDhHMmQqjeEYyDmUuHcCAzZauqYpmMhHmiIMpBbyIihHDdTPQldDLlLbBqtTpTtYJyYjUnKapPOgGosbVvcOGWwjDdJlEBbbBBSqvVzZpPEeQsbdvVwiITcChwmVYQJAaRrjLlLllEefMyWwQzhHZFfhHAaEtTTJyYjQEeDIiQqHhxXdAaMmaUuPqlFfXrCFfrHhodEeDdDRLlromvVMAwWaOxaANnXSpPoOPpslDoXiIxSPpnNsieERmMNnrxXnNpPtTTSsfHhFkKQUuUlLusPpOgUOoLqQNQdDOoqDdyXZzVNnaAvHhVYyPpNnHLKklhWptbqEBkKkKzZBHAauXxFfrnNkegGEKNyYkmMKntOoTLmMsSLMCVQYyLlqvDMfFeEYCcLEeMGPpbOoBgwpoHheEeEFfICSPVSsvpOfFXxNKkphHByYRllrfFRLgUuYUrRmMuyGLLKkUBbuKpcmhEeVvBbrQqKksfFzVqDdQvwkHnWqLaAQhgnNGDdHqKjJuUfEehHEcIXxmsSMiIIivtFfdedBbaAgGEeKWqdDIiCzwwWWivVtTjJZzjJZzHhItfBgGPpNsVvpPSdCHcCsShvJjJDdjjJVEeBnTOotGgiqPkKpPwWrRsPpBKkRNslLbBqQBWnNMmHhDdBbLXbwWyyzMmeEkUuwWhgGHKqQiGgJyQREgGaAeXxdIiNwWTtUAipPcCMDSsUufFhHfGHNFfpPxxXKFfjfKZzLlPSBbsSspWpPNwvVxXQBbSEEeesnNpsNeKkSaiMGgmMmzZtUIiupPKkOohpsyYSjJQxlzLgJjosSOdDzIiFTtfFfiIZMmOClLENrRMmXRrYydDRhoOHHgGsSkpbraAGgPVvItrRTJNnjHzZzZWnNhLVcNnCpYyPvOoWwHhoOcCiITtpPlpPwWcYyCOVNQqAVgIiGUuPbyYBgoOIIiAXRrNnePfFpveMFfdDCcAcCaIUunNipqQyIiYBbhHPmuUWwDdaAtXxmMndgHhIDdiGgGwWeEAqQODdaAoaUmMkXSsxBbKuiIaFfDdihHSKksIWwBbhhHKEebBoBbOVCLhHlcbBEeTPaBbATtHhRGkjJKcChnNJNsSnfTXqQxvVJjoOcgGRrVvCHteLlEwRrWTgYOoEehHlYBbCubIiBaSsALaAlVptzZpMSsmBbZzXxEedDVvJjDEeXDeZqQHMmVlLEeLlMmvbBzjJZPwWQpRrGKKkkWhxXgIiGIOdDkKjJlLIcCioitdDWNnGgNpilLIqAaBbgRoQqOTnNMLKklVAzuUZroORaPXxpAZCcOozadYyDwWJUujzZaNnBnPUubBTqPMmpdxXXFfEeAaxzZruURmMcCUEejJzYmuUHhwWUuJnFtTIiPpPoEeDdHOUivVISsZUuGTDdttDdTJjJjfcCwWTtrTtuUgGKUukkVvKcGgCGvTXxEejJkruURAWwDHhjmMCZPGFNndxXDfcCjJZzgFbernDdvVKkPoOplnNDYykkWvWwVvICcSWwLGtTgRruUlmQqBGgbFfLHhBbePxaBvYvVjJydbxXlvVGoOoKZvHhVbPpSGgsBIirbBVRGNngdcwWCsSNnYJRrFgGfjOgGQqZzLlJaiIBbAjEbIiBtTPtTpBbWwnNzXxZAcEfFeCSxXSDdFfnEHRkKmqpCnNlpPhrRUmMQqUuAaYTNxXfaAdDacCQRrvxYVvyRrPgdDwWCcSbiIBRjCcJDdAZxkKtYIZyrXzAieExXIaZlxYydDakmMKXoYXxaOoANqQPpTtLlIiiIHhmwuULBblZWEeJxSsGRrUPpuglLEmGgNKknEeMVvfaGgFfBHsShEYyrgGsOoueEUCrRwWTTttyYAxXaAYyaceHMmhmnNMEsScqtLHyDdwNdDYynsQqDwkUuKxTvIRrwypPYrRrHpPeEoOkKlLzXQFfqUIiulDhUhHzZyYZzuHlKPpAaoLbBloOOkTtHhsSLTtdkMwWiIDsfFkKrggvVQqPRrQqrRpMmYGkCqQFSsPpTtMmcCSShHssSBomMhovoOJqjJQpPoZZztTzOjmMDbCMmqSsheEHAUGOAaPpFrinMmNIxXvgGfFZzXxOUZzsvNVvnBbccCCYIzZiUeEuZzjKkpQqPyYjbBpnNSsKkPkYCXxOoiIxiIRrKkyNnPpYXjEeyYgXCcRyYjMmzZEeAaCbBtqwWQTNntTTtKiINQqhaAHpPiTpsSRriIaAGgFfTUtTymMTtYHBbhvcayEhHXxgfFzZzZPeTtigGIigGIEzaOoApPNjJwWaAXtTxRznNbRzIiLozkKZygGeuZdDMmEeThHtnkKNPpYIMmDdTtHhQqQssSSqQKkNDdhHkhHKCiICsScLlzZgGmJwWplLPBqKZegGRKdDxnNXHhUsLljEAaRreuLlLlUMhlLFQJjqiIJAaXgGjoprRPONXxgGMmaAFfHRrhMmNCcDiYyktTUuKQqIAaNnRrWwiImMYykPpKkGgWKEekUlLAaqmMNsPpSBbnzxlZzLfnNZTsSqQaTmMtABhpPrRrRTFIIkfJjhHFrfqQqymJhHjXGgxMOosSLlHfFgGzZtTMmJKeXxqQEeEYqQMNXxnmpPyCWwObtVOovzoOgGSCcWwMOomsSsOorrqQdmMQoOqiXsSxUjJWwXxhHpYZzvVyPDdDddcCFZzAXxGLlEeDdDdmPpJkMkZziRrzZAhuUDJjdlLnqQNHbJzZVEevfFXxcCTtgHPphUuAVvGagGATgfrpPYyRqQyYHjDdJMyYoUDdTtiIRDdnNdVvXNnhPGnNaAgpfwWFHmjBbVvJMEeirRRrwWIuUbpBWwIyrRpPyYYibSsWwWSsTuWoQBbqEewWyCcRrMmSzZNdtTxXyYaADLNnlGnNrFYEmMeyfRgezZEpPAaCZzcpdDWwilDpPUuESszZbBcCEerRrRqTtQelBnorMmRwWJJjrblDiPpIKkZfNJjaAsQbqQbBFfaiIAbBHtTBZLmMSskKWweEIicCvwGgsAlLaSEAaeggKkGGOooZzhHFfiUEbJjBKhAGXbBLlSsjhHJYyoNnmbBMLlOwWXtzZhHOoKKkkRrqQgGsUrRHgGQqXeEwWCcXQGgNnKkjEeJnNKnNzZXxSXrRLlxjJeaAELlYlLyYyVvLGMmXxQOxIUuiKJnNjvVCSsfNCDdyNWwINygFfhHTtNneEGbDdPpDeEgGGOTTuUPNnpnNIiCcdQGxWwOIIiJjIiFfBBbKkbBoOrRbiIiepWGgwUuEePAaxgGsSHUuSseHhEJgfgGDoOdFfIGgQqmMBWwOkKFfmjJMNnSsgGrRuWwVvYyeYuhnNtTfFyRrRrHKZDXxduUquUjJQJXxCcjzkjJzZYiuUgDerREdLlkLldDEeWcQoOUuGXlLkxXTLAatTlgGiIUMXqQohHPpjLuonNOUeEzLNnfjJTGgVEevtFZnNjHhJjJjJmQqkKMmMqQnNyDntTIijuUlICusSUcCyXFfXxxtTYObBFfFftTnoPiIpPpzLcClGsSEmMegVvGlLJDdjTtjyYJyyBbYoOrRbsSpJiSrVvFfRHhKyTtYDdkskAaVvSsXzZebUbBEeMrRLluUDTtdYyDduUVLluURrvWwyYuhHbBUeEeVvEPvVpUuIixXUupLRrvVlsSUAUuTxXtaWgqQGVUuvbBzjJvVBbaDdLlOdDQqLlqXxQYyZzcPpCFHpPhfUuQoOIzeCcEbBeEjBeEbzELldRrTWwyYpPSyYNnuUgtTcCbBMdMmbZWUTtRrtTusSkKcCaMAaOoTjpPpIibEewTtGgWwWxXButXrHheKcQNnqCbBeEWwgGVvVsSqQOovQqKKkkkadOyYWwCcBtJjyYTwPpQWRpPrwZzxYRrmLlDdMFfDdyayKkGtTgQEeqBblLYkPpJjKeEoNDgILirFfRBbmMIlDdKkWAaXxBbNvDlLDTiIunNLlUufdbeEBeszZBbyYYWHhwOoaOoAmMbtTBTfFRrwfFWxXvVQqpEePQFuMGUhzQAaqpPZdDdDHLlYyHhwKkWFiINnGrRTtzGFfXxOLlKkogRrZRrcCzZYOoyUugGoRQOtVAYFwWHXxhdDENneAaSgGsWRrMmfFwqQSsLlfpPiKkInsrRpyYnNLlPAaxtTNBbNnHhJjSsvhHNnTLleEhHhHtcuUgjDdrRFfoLlOttTTnNaiIAtTBbqGgQICcejfBWmMEeEcrRCeqQsxXQqNnIisSxXsCorROclLzwpYyVvPFXFfIixPpHhbCOtNnTBbfFmmMfFnNmwWLxXlGgGGAagUuAdDaAaZzLlgGQMmqQqITtiYLQqtRrWoOMwGgWmUuTEeVKQoOqdKkDKFfcuaEelLxXVQqAawWuUMmTWNnSsmOlLtTtTobBHOoIibNnADdacCHhoPtTpqQOByaAdDYhVvuUMmpHgGMmLtTCclVvdDtThPqFVvfuaOoATeEPpufFUPpjhkwWKzZzZorROQXTtxKEhHeqNnNnQsSyYkBhHFfQDdQqnNxXAxqQKkXauUpaAmMPwWjEeMmbBQBtLjJeEQNnqaAzZTbsGgdDYsbuULlPpsSUuIYyiBcCsSsFpPTtfgGlzSGlptyzoOJPdzZDpMmwWjRzaJjAZGBOTvVTtTqNntTQhXxhHYXsSPMnNmIiaAFhHEzZHUPcCpMmptAaTYeEpXxPjaAAaBbCcxHhFfoOLlHhXJEQcCqexDduUhdDTCcCctakKeEejsUuMmMBDkKZzppOoyYPgDdfFHbBhSsGejvVRrsSdfsSxXRrFMaAKkmDCcdjJaTtYpPfdoOhZzHDQqFxnNDdLlXFuUjJBbXxHrWpLvPHhpVNncpPmOQMvwWVIiRfFroOmCrDdIWwBGgbZzXxkqQCcOocCWNnqQMKkTuUtJjlLmpKsQqVOYKPRrZeEgHfFhUgGXQqxjbBJuQqVvIBbiCqQcfpjJDdPHHiIjJkKgQqGlIiHhDBbdDcZzCIiBbTFMkKLlYyLligGIUdDuDdSgPpDdpPGtBPphHKkanNAbKkqJiYShHqscVvrVvcCcCRCIibBpgaoJjNnOTtAMeEmeEviquIiaJiIjAuiIUQqsSeqnNTtQFCcfhYybBXOUBbCcuPpGNnOogGTtrRgvwWFfVNreNaAnNnERqoOogoKkHPpSszxXZkKGaLlxXtTTtxXxXASQqoOtTCcctAaTCssSYlLPIihrOoRrDHhnpNnfGgCcFWwrRzZLliftLlDIiddrRJmtlLrGgoORTeNnEiIeEKTpPxXtdDkMrRUWwuUcKVmMvUuIiIizXEeiIAaHhgGTtDdTtxhdDdDzQqIitTsShIoOAPpagjNnZzJVvDJjIidqHhQCcGCcJAaDSQqQajJAQBbqRILlzQGgqHhCcZBbazHhdDkKDdFNgGntTtTplLKmYRrjFgGffHhJjJjFuULtyYTlfoERCcrlLeOFPpyqzZUuQYBbmSsCcqIJjiQaASsjJSFfVaAvqXxQuvVFyYfBwBBzZbBuUGgOoOEeolLJjbbUUNsBRrbSsYytTSsofFOSlQMHWwOfFzcTtCsSyCaAmxnNJjQpHnNnHhNhLYJjtTIRrtTixXyyGwWKkoOQGBbgqLlmHIiUjuYXqQEeYyjJYsSwPpWwWqFoZrBvYyAaVCUSsuhSZpMmPzsEeJjfFdDrUuRvVSJjYZzJPvGgVpYyeELTumMUBbaAzZpqBgGbquUjVkKtTAalCcDIidgkzZfFKjRrqCdzZDeErUuAaRQKcCkqvVEtTefipwpuUjJlqQLNrRnvWwaADnNdBsSuqQUuUVvzZPpXxbOpGmMgqQbBPdGkKIFfimMyLlYgDEAaeGgEydzBVvbPjJSeEwWxXVqQrRNnHZPIiLqQVvVvlWAKkdDaawWzZQqosvVkKSmMOAfRejJniIKYycqBbQCHhnNtTzZQHAahUaJjoOAiQqqKkbeEBQIOoZzZzuqqbBQfFmajJIiAhgCcGWwwbHJGZzgXxjhXxBcCJiIjSsTJvzZvVpPVGgjQqPptXxkKuUWAaOqQPpVvdDbRlLrEeZjgGJvVoOHeCcXxwCzZcLEelThHQqJjtiLvVlHfFIihCgGLVvxdOoiIDpPnNkKrYYbBoczSsZjoOJyYCNsVvRrhbAaIRFfrVpPvaPpAkKiBHHqaAyaAXxYYyQXxYCcycKkCcCMMmmSsZbiIPsLxOoXHEecCYyhlUqQCcCBEvVeEKkRWZuokKqMPpmQKSsmMXuUyYwWwWbBQCcqZzFfoORfFoVvaAaAeZcoSsGYygmqQARraMNYCcyysSmQqgTtGhHUVHHhJtoODdUZzHhuKuMmUuxofFGgWwfqUZzeEMmNFfoOGgOfwWySDhHdApPNnDdjUgGuCrZzpRrZMmJuUjzDdCcPUEeuHQqLhuhWwXvyDdYMmCcVMmxWwpPFfVuUXGgEHhaAHqQcCGgKkulLhHqLlQfaAFUhgGpPiJjrRMfFmxXRXxgGIirCcrRhSTDdtsiImMHxXkjBbmSUVzZPpvDducCTtqXEhHmMeNnfFeEvCcVQqRriIJjXdIiDYeEyFfxbBrRxoOJvaAlLeSsrReEEeoOtTVQlLqvkYyCkKevVPpXeECRrcxgxXNsSfEeFnOHSshZPpAaPpbBxXjYyRJAahwWYyHaoYyOXxAbuUBTtjYeEDdaAGXxTaAtiIYKcCkydggyzqOSsoKDdYyjiItTJfJjJrRjFkqQfFEeEjIqrDdtTaOoAlLCcSxXKksRWwJjajJpiIVXxMmvARrJjElLPpCcezzdDZNnwsSmMiyyAalzZCcOouXxUKKkBbkLubBiWwXxIpgGPqQUroORmMlGgewWOFfYvVyoVgGgGiDdwWGTPpPpIiWhHcDdCrRBPpyzHhZlPpLYbHhVkbBKklLKOXxbBdDtTNUYyunoXxVzKkqNnoOQAaZvsWwSJjIgzAaZGpZzIQgGkjJKXxqiNlLEentTHfFhKRrUukRoOrHUuhIkHhMmSslLXxpPCcUfFXxBcCjJPpTWKcCZmeEHEdDeAaBJdDjaAUuyYjrEeDdiJjLlxXPIipIWwqQLlCcRqQIKkBbSDdMyYgIiGwLdDTtbByYZzhHglSsvVDiIdgGLrRwcCcEsSeYYyyCEeKkWSjaArvVJjAaTtOoRHhdpPiIDeWmMCyYcFfNncChwWHDAJtTZzjBbNPUupKWwmMxRrWIwWjJmMISIisilLUuBbhHVYyKFfpSsPIikgSsGvCcfFJNnwbBWASsWwHVvhTtqQlIsvshHhHLpvVwSsWPWwtTZJjzkfFaAKoOrFfeEtTXFfxzmCcOoMuUZvVRBbtwHhxXcqeENnQtTCxgGIiIeUuEeEBbhHmgLllLzvVZGGgMcgGEeCdDPaAwfFWDdblLBAafvVXLlCCwWcXHhxrRVvLRruJLliIjMphHbBPmmMoBSKkhHzZeHhEOoMmVHFfLwWTtbBlIoiUsSuIaAsSOsSIRrijJBhHbfFSsEeiODXTtQvuUVzkzZnFfxXMmNRrMitTIChHWNnwNnCcKkcmamiZzlLEeiIjJFfVvfQSshHYyhswWcCSiIxyYXHqRrWVvwOPeZzEpobIiEZzeBgGNnuUnsrRrROiXNnhJjHitTIxTtTSstiIKkLlYrRfNnRLlOorDdFOoaAZcCpaApPaAGMYyfFBbMmXtTkKxCcmoOzlLiIZvVgwWzFfZwVxXBbjHhJZzfFWwtTjJDFfduUsSYyJjSsveEFfxHhtTghHhHScCsrRBbLlGmMCclsSLgncHhRrcENneCWROocbAayYoyLMBbwRwWrZzmbBtTlLMWrRWwlLLllLNnUsWqQjJwSlLujAaJmwWbAMmacPeEpOldDdOoTtVvfFDtTUusoUuOnNKdrRDFUNnYyurqQRZiIzPuXxfAxrwEeWGgRrYyQvVGgqMmZOouUzRqQAaboHhOsSBZAazaAQqSsbmMbBBvValLEeAfYjJBnQqNTtFfbXlLXuUxxddDDphHnGEeFfgGMzIoSsiIAaUvVuGgTOosSwWOotdDOuoONnUQqmFoOWoOzKMvVDdkvVQOoqKLDdUugGlXxmtFfTtgQqNnrRPiIfFmLlrRMwnNRTtaArIiZzjJSsWfyYFKkyjJKRrPBEebNrRnGgGlLzZgcCcCTwWcCnNtWwpMeESWwsGgcCWwQqgGiuUboVvWmtRQqIivbBVwWrsBbSrRGuUgPVvVvxWwNnwjJJjseAaEaAVvSVvAVKkKOLlwWoknWwiIBbcCAVvZzakgGKpPxvbSsBBOoFfBbbHzZRrhvVVpPiUMmujJzzDEedUNnKYyIiFfNnoUuOVgGvgIilnNSsaAmMLqQGhHkquUWwtTfKkFicCZzJiSsfkFQAaqfGfFgKFBbyYIiDddzEeaAziIZOlLjJmMdDVvtuUTZUuZzFfdWwDzmMXxbIBbiiIQqnNqQsSWHhaAjhHJxXRsSrEjJeoPNnstiIdDTaASlLBFpPnTtNfbdDrReBbQqJjIiOofFEePsSpHMmhHhfFeELlcCEiJjUuiCcIljJQqhPAIiPpYgGFBbfMvVbBgGuUmpPLDSsdjjJeEbEepPgGBJFdkKDgGBbhHEehwWkyYMkixXIKeENnPgoOGXxpfdDFDgGLbBRGhJjHTtnNjJyYJrROogSxXsDBbdGLlFfOobAFfTxrRBbzeEZWSsJDdBbcCuvVbrRvVWwBTHIihaAxRrXPFfnSsCcNuhGgHKkgGHhtEeTLFfWOxeEEyYVvejJWxJaTVJmMjgGvAaJXxjrRtVvAKgGFpPiIfVvEcCGIiceECtTDVcSsFfeErmMRKkCjSsJbGgkJdDIiYMmhHFfzZQqnNXxyjvtTmdWwPpmMIiLvVhHlWwjJVKMmkvZzdDDdTtTtYyZzweEWBrRXxeEuUbBCDdsSoOxaAzVvZjJXKkJVvVLldDrRmMOQqsOoBRpqPpaAQsHhSGxXiIgPiPFfdDpIFdDUuxXIiYyfmgGtTMdOoDrjhHJplLlLXZzxbYyBPtTLMmlCBbWPpBbSsnNwWTteELPvVpPmMBbuUpePpdDGgrmMmMuhPaAzZwWpXxEediIDYnNWwrRPHVvhprdDFiyYIJbBIijTtfFPpmMulLlmMLUDcCwWIidNnvCcVfOPpcDjJdCoRZDtVvTdzZztTqlLAadXxDOoyYHUuhyYdKkQqdDDofFOlLsSyYMaATtAacXxCmcdMmDvlBfFbneEtdDLmMBbXxkHhKuUqPpQlRrCcnRrpPNTMmIiNfzZxXJGgyTtYyeEBEebwWYEAaAaRrtTCcNnBbejvVKcHhSsDdxtTmMTtQjJqMmyzZVtyYTPpXWwxbBELlllLcCLelIDdiWSsrRwiIDMmdxBbXZnNyYfFeHhUuExXWrYyKvqQVeEiamuJjUMRrxXlUcryYRafFZzFffJHhdDjaAVvQqySyYsYFEZAaSszefAkZzKqhJXxpPjAaBNguUGnQAbBagJjGPpIygKkGjJnamMMmSsAfFNQbBqYMjMIimYEesSgGyJmipPsFfSjzdDZJnPpNcCeEnNTtnPOopByYbHhNDdjNnoOFfWwnkAawWKNLIisIiJjIeNndDPpTBbtelLEjJYyEvVUuZzcCjGaAGggSsyYJKZzkaAhOoHiIgYdDytTnNGJyFWwflLfFnXxCGgfFpPPpGgcrRtGgTiIrmtTMRpzZPmoNncCOMbBSSskKseEOoJjpPOodDwWsHhSMmNWwlGWwguULnDWYyJjRrCcjJOonNiIwkneEEeBcCbTCcQqtaBbYyFwWfrRnNVejJEKejJEzrRZsfFlTteIiELHvVfcCFNHhmMtTnAPpBapPAbKkchHWceEtTCwCLOohHlsZIictTCzSfYyAWwaRuUZzrAadDgGtTJmMPpjUFfDdPpJjDdBbusqQIfdDFVvlLiSeNnEfODdmMorRBeTtfrgtfFTGkWwKRfFjJFfYyzZBQquUMmbBbsSHqQhVXxzZvVyYTtuUUtTCcLnNluScCLlDdcCiigGHhTtISsHTUuthrRFYyhjJHfnNHfFhRriINnMTtaAmhCcbByYlLZhHzgGouUkKgeEGOvyqQtTYUuHhBbuUVOqkPpbBaAKQXxhHHqQhHhoOfFeLlOopPKkEPhEegGWnNPpPTtoOhHpWfiInNMmFnXxNwJjuXsSxUwRrioVxaAXtTHnNhmrReEMTtWwIbBiDdOFfdHhuUDUHhuoOhiIbyYBZzllsSLLEoviIbBVvxXQVvqTlLAsYybBSmMFfcjJCNntGgTCvPpVmSssSMckKpPQqVrRbBHhuUYnNiIyvroORbKvVEcjJlYyLOAaiIodDCxNnYyYyXMEemMmzcCZJVvuiIUySsdDYjNnQqtTCpPcwWitTISsUsSufFdDarRAedtSsTDIvViRrkQZzqnNfhHFwxXWBcCvVfjQqyXxYyYMmuGgJdDdDjhHfFUyYBAEeabJFjJZzaOoWkKpPwyBbYLfFliIsFvqQCcmgGuHhXxNFfEMmeBgeEcRrCGGIigbxXndDVGZzglKkLiCVvEegGczZyfFYcWmMXxZQqzwCNTauUnNATOdyYcCDoPpzNnZtTnNyYwvmMkKTtVBbGgWufFUugGdDkrRKUczZjJJjjzZLMmLllJaAGgrcCRcCiIUuCtQCtTcFfwWqQnPpNvKkVxrRMmjJjJXUCcukerREyYdDKqthHHPsSpVvaAhPpgGKkiXxIVwWSsvXUuxXgtTBbnNYyGpPSrQqReEeErRRPpcCIgTYyDdXxsZOozSYyLlQInNwsSZzznNZfFqQBbpPJjBFkKzZYyfrRiqIiQINnjSspAaKkiIsSbgkKqQpPGXxuzZdCcEeDkKgGwWUCcRlCcLrXdDRrxJMAmMamMWwmvVjjJUukLlZIFfWeEwiGgNngGbgGBzxJjXBBcClLgGsSSsbIpPiEebJBbjKyYDkKdgUEepPcCcCXxhVvgGGxpPPpXgHbuUxYyXMrRmtTrOMmoRwWedDajJyYAVgGRrvaAVvuUExXBVvnNUufAaFOoQLlqcCOofFkKeTtEjJdBkKbOiIxXMnNtrrrRrUuHhRRaARRrTmoaNnAhHadDSlLiUuIdQqqQDsCEeQqcAyEIhHiDdKkeXxEHMwWmhlLRZPpzrHheEHhHhGBqQbOogpPeGNnguUvrRSzZFfsYygGnRcCrqxZzXsSzRrZgLlGQoONChHWwxUjJuSsRYyLpPlmMurRPpXxqQQkKqXEexyyYeEzZYAGgPpkKwWakKnNoOjxIHhiXJAeEaJEeGgdxBbXDjpPULlrZzjLlgBHhbDxTtXdGtTOoJSVvoOmMfFsZBbxXMiIaAeEmhhHHYeENsSEenHhyMmYSkKMmsySuEenDdrRYyNvfGLlgFVJjUeEeRqLlQPpDaAdQqFfrwWmMEbBsgGzdDIiSsEXxeCcQaAMmvVqjEenwgGWNZzYyJFfnNCeEtNnAoOOoaTOowWQqfyYxXgKkGxZKkzXdDhgGtTHoTtQqwWOaPpdDAgdrnNRDkJjKQLbBVvlqXPgGtTFfpUMmhNAanHuQqMwUuWEeTUutuUmxnNGGiIgotTOvVaMmABbXTtxgXxgGyYeEQUuqCczZTtGDAadfFyNnYmCcMjJLlWLiIFfABbaRrImAaMEeHhafFAIishHDiIdCaAbBcmAarRLCclLloOKkqQMxOKkPpoXSbBSdDtTsXxhHcCyBbNnTtgnNGrRYiEevDfFRrdAaWrRaAwnyYTtNdNnDVlTtObpHNnhPnNVvWYyNnMwWmUukKSEZzesEZFfJPpjzltNnTLiLlIOwWfFjJoeKCckwIjVvJANzZiUqQuImMnavViBqQQCcMmqAaWwWwbBZsLSsDqQYdDyWcCwdvVhEetTpPQqEeIiNxXGgjJnfFKUuJJjjLAazZlkwXxVvNndDWJZzFfjNrRnQqlLrCcHhWwRdDLlWkKZCYyBbYycznbBiIBbNkKwmIipPAaKyYBbRrkmMaAjrRJMVvsfbBFjubxXBUPpJCWwkZzKYPpdDSEessdDSVyYvZqQzUIiuYNnNnyYyyMmcuVvCcCevVExXcUiIKPpkXrRxlLTtHhuYNnfFQqyKkzZWwGcAeEaCnNQBUPpnNudDjEeqQJbqOoaAwWZzXxgqmMzZDZzdQHnNxXwWrRSPpshzZfFNVvuhHUiInjJjJFZzfrRnNPpiIeEmeEMmMjpPQqJmMKCckSHctTCSsSshcwWCSssZIizHhyTtktFfTRrzZJjRrKLtuUgxXGTdDlSsKFytTYmMjbBRrLlJfBbWwuWwXjJoOnNdDyYVvxUCAoOackKvVhYyHImWwMiLFfclLClIjJRrJjKkhHiNnYyTVvBrRbjwWKkRrCcxXynNIiLluUYcCBbFfJoOtatTAOokUcCIiPpuc diff --git a/day05/part1 b/day05/part1 new file mode 100755 index 0000000..4761380 --- /dev/null +++ b/day05/part1 @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + +input = gets.chomp.chars + +l = input.length +loop do + i = input.length - 1 + loop do + break if i < 1 + + if input[i] == input[i-1].swapcase + input[i] = nil + input[i-1] = nil + i -= 2 + else + i -= 1 + end + end + input = input.compact + if input.length == l + break + else + l = input.length + end +end + +puts input.length diff --git a/day05/part2 b/day05/part2 new file mode 100755 index 0000000..b71d84e --- /dev/null +++ b/day05/part2 @@ -0,0 +1,34 @@ +#!/usr/bin/env ruby + +input = gets.chomp.chars + +units = input.map(&:downcase).uniq +lengths = {} + +units.each do |unit| + polymer = input.dup + polymer.delete_if {|u| u == unit || u == unit.upcase} + l = polymer.length + loop do + i = polymer.length - 1 + loop do + break if i < 1 + + if polymer[i] == polymer[i-1].swapcase + polymer.delete_at(i) + polymer.delete_at(i-1) + i -= 2 + else + i -= 1 + end + end + if polymer.length == l + break + else + l = polymer.length + end + end + lengths[unit] = polymer.length +end + +puts lengths.values.min |