Análise de Impacto de Mudanças de Software

Propaganda
Análise de Impacto de Mudanças de
Software – Preparação dos Dados
Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Mineração de Dados
Professor: Marcus Sampaio
Aluno: Fernando Cardoso
Para proceder à execução dos algoritmos de descoberta de regras de associação nos logs de
CVS fornecidos e descobrir os acoplamentos de mudanças nas classes que compões o software que
se quer analisar, é necessário proceder a uma série de passos de preparação dos dados, uma vez que
os mesmos não estão apresentados de maneira correta, além de apresentarem uma série de
informações que devem ser desconsideradas.
O primeiro destes passos é filtrar do log do CVS os arquivos que não dizem respeito ao
software. Por este ter sido escrito na linguagem de programação Java, é sabido que os códigos
fontes de suas classes (a palavra classe, neste documento, se refere às classes às interfaces Java)
apresentam a extensão de arquivo “.java”. Desta maneira, todos os arquivos que não apresentavam
tal extensão foram desconsiderado da análise de associações.
Tendo restado apenas as informações referentes aos commits efetuados nos arquivos de
código fonte das classes  ou, simplesmente, arquivos  que compõem o software, foi necessário
agregar os commits de modo a decidir quais arquivos sofreram commits que satisfazem as seguintes
condições: (i) efetuados pelo mesmo autor, (ii) com o mesmo comentário sobre as razões do
conjunto de commits e (iii) dentro de uma mesma janela de tempo. Segundo Zimmermann e
Weißgerber, os melhores resultados da mineração de dados em repositórios CVS são obtidos
utilizando uma janela de tempo deslizante, de tamanho de 200 segundos [ZW04].
O passo seguinte da preparação dos dados foi a limpeza dos mesmos, para retirar as
informações consideradas como sujeira. Foram desconsideradas todas as classes que apenas
sofreram um commit no CVS, uma vez que se esta classe não sofreu alterações, ela não está
acoplada a nenhuma outra; desta forma, obteve-se uma significativa redução dos dados a minerar.
Os grupos de commits que envolvem muitos arquivos (mais de 20) também foram descartadas por
serem, geralmente, correspondentes a mudanças infra-estruturais no software e não a mudanças
devidas à evolução do mesmo. Após este processo, os grupos de commits vazios foram retirados do
conjunto de dados, para não interferir no cômputo dos valores de suporte dos itemsets encontrados.
Por fim, uma vez que os algoritmos, para serem executados pela plataforma Weka, exigem
que os dados estejam no formato ARFF [WF05], foi montado um arquivo nestes moldes, no qual
cada atributo corresponde a uma classe do software analisado, e cada linha representa um conjunto
de commits efetuados pelo mesmo autor, com o mesmo comentário, e dentro de uma mesma janela
de tempo (vide arquivo em anexo). As classes que não fazem parte de um commit têm seu valor
indefinido (?) uma vez que o algoritmo Apriori gera regras do tipo “Se a classe_A não estiver no
commit, então a classe_B também não está”, enquanto o interesse é por regras positivas, tanto no
antecedente quanto no conseqüente da regra.
REFERÊNCIAS BIBLIOGRÁFICAS
[WF05] Ian H. Witten and Eibe Frank (2005) "Data Mining: Practical machine learning tools and
techniques", 2nd Edition, Morgan Kaufmann, San Francisco, 2005.
[ZW04] T. Zimmerman and P. Weißgerber (2004) " Preprocessing CVS data for fine-grained analysis ",
Proc. International Workshop on Mining Software Repositories (MSR 2004) 2004.
Anexo I – Arquivo ARFF referente ao log do CVS
@relation changelog
@attribute
design_wizard/design_wizard/resources/test_aplications/AttibuteRedefined/SubClass.java {y,n}
@attribute
design_wizard/design_wizard/resources/test_aplications/Patterns/SingletonBadConstructor/Single
tonBadConstructor.java {y,n}
@attribute
design_wizard/design_wizard/resources/test_aplications/Patterns/SingletonWrong1/SingletonBadCo
nstructor.java {y,n}
@attribute design_wizard/design_wizard/src/SubClass.java {y,n}
@attribute design_wizard/design_wizard/src/SuperClass.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/common/Config.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/comparator/CalculateDiffAction.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/comparator/DesignDiff.java {y,n}
@attribute
design_wizard/design_wizard/src/designwizard/comparator/SimpleCalculateDiffAction.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/AbstractEntity.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/ClassNode.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/Design.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/DesignIF.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/Entity.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/FieldNode.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/MethodNode.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/Modifier.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/AbstractEntity.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/ClassBL.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/ClassNode.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/Entity.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/FieldBL.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/FieldNode.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/MethodBL.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/MethodNode.java {y,n}
@attribute
design_wizard/design_wizard/src/designwizard/design/entity/factory/ElementsFactory.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/test/ClassNodeTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/test/FieldNodeTest.java
{y,n}
@attribute
design_wizard/design_wizard/src/designwizard/design/entity/test/GetConstructorsTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/test/ReturnTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/test/ThrowsTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/test/VisibilityTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/ui/Class.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/ui/Field.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/entity/ui/Method.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/factory/ElementsFactory.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/manager/DesignManager.java
{y,n}
@attribute
design_wizard/design_wizard/src/designwizard/design/manager/test/DesignManagerTest.java {y,n}
@attribute
design_wizard/design_wizard/src/designwizard/design/manager/util/TranslatorUtil.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/relation/Relation.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/relation/test/RelationTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/test/ClassNodeTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/test/FieldNodeTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/test/InheritanceTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/test/MethodNodeTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/test/ReturnTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/design/test/VisibilityTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/main/DesignWizard.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/main/ResultOfImpact.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/main/test/DesignWizardTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/main/util/FileUtil.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/patternchecker/CheckError.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/patternchecker/CheckWarning.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/patternchecker/CheckingResult.java
{y,n}
@attribute
design_wizard/design_wizard/src/designwizard/patternchecker/SingletonPatternChecker.java {y,n}
@attribute
design_wizard/design_wizard/src/designwizard/patternchecker/test/SingletonPatternCheckerTest.j
ava {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/AllTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/DescriptionTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/EARTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/ImpactTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/TraceForMethods.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/AllClassesInSuiteTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/CatchBlockTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/CatchedExceptionsTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/DesignWizardTest.java
{y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/EJBTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/ImpactTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/RedBarTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/UseFieldTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/design/WarningTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/impact/DescriptionTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/impact/EARFilesTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/impact/ImpactTest.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/test/impact/TraceForMethods.java {y,n}
@attribute design_wizard/design_wizard/src/designwizard/testcases/InheritanceTest.java {y,n}
@data
?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,y,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,y,?,y,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,y,y,?,y,?,?,y,?,?,?,?,?,?,y,y,y,?,y,y,y,?,?,?,y,?,?,?,?,?,?,
?,?,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,y,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,y,y,?,?,y,?,y,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,y,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,y,?,y,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,y,?,?,?,?,?,?,
y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,y,y,?,y,?,?,?,?,?,?,?,?,y,y,y,?,y,?,?,?,?,?,?,?,?,?,?,
?,y,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
y,y,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,y,y,y,y,y,y,y,y,y,?,?,?,?,?,?,y,y,y,?,y,?,?,?,y,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
y,?,?,?,?,?,y,?,?,?,?,y,y,?,?,?,?,y,?,y,y,?,y,?,y,y,?,y,?,?,?,?,?,?,y,?,y,?,?,y,y,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,y,?,y,y,?,y,?,?,?,y,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,y,?,?,?,y,y,?,?,y,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,y,?,y,y,?,?,?,?,?,?,?,?,?,y,?,y,y,?
?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,y,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,y,?,y,?,?,?,?,?,?,y,y,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,?,?,y,?,y,?,?,y,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,y,y,y,?,?,?,y,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?
?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,
?,?,?,y,?,?,?,?,?,y,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,?,?,y,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,y,?,?,?,y,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,y,
y,?,y,y,?,?,?,?,?,?,?,?,?,?,y,y,y,y,?,?,y,y,y,y,?,y,y,?
?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,y,?,?,?,?,?,y,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,y,?,?,?,?,y,?,?,y,y,?,?,?,?,y,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,y,y,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,y,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,y,?,y,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,y,
y,?,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,y,y,?,y,?,?,
?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,y,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?
?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,y,y,?,?,?,?,y,y,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,y,?,?,y,y,?,?,?,?,
?,?,?,?,?,?,?,y,?,y,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,y,?,?,?,?,y,y,?,y,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,y,y,y,?,?,?,
?,?,y,?,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,
?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
y,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,y,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,y,?,?,?,
?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y
?,?,?,?,?,y,?,?,?,?,y,y,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,y,?,y,?,y,y,?,?,
?,?,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?
?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,y,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,y,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,
?,?,y,?,y,y,y,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,
y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,
?,?,y,?,?,?,?,?,?,y,?,?,?,?,y,?,?,y,?,?,?,?,?,?,?,?,?,?
Download