Merge branch 'randomKey'

This commit is contained in:
mimic
2019-08-26 16:24:14 +02:00
45 changed files with 3061 additions and 842 deletions
+1
View File
@@ -10,6 +10,7 @@ OUTPUT/
*.csv
*.pdf
logs/
.idea/
GumTreeInput/
GumTreeInput1/
GumTreeOutput1/
+774 -495
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -51,5 +51,11 @@
<orderEntry type="library" name="Maven: org.apache.commons:commons-text:1.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.7" level="project" />
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:4.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-core:4.8.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.lucene:lucene-analyzers-common:4.8.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.3.1" level="project" />
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.4" level="project" />
</component>
</module>
+574
View File
@@ -0,0 +1,574 @@
[(60@@[(59@@[(32@@[(42@@[(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])][(38@@[(-1@@)][(34@@)])])][(42@@)])])])])])]
[(60@@[(59@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@[(42@@)])][(42@@)])])])]
[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
[(60@@[(39@@)][(59@@[(42@@)][(32@@[(22@@)][(42@@)])])])]
[(60@@[(39@@)][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])])]
[(60@@[(5@@[(39@@)])][(59@@[(32@@)][(42@@)])])]
[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(32@@[(42@@[(32@@[(40@@)][(32@@)][(42@@)])])])])])])])]
[(60@@)]
[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])]
[(60@@[(43@@)][(59@@[(32@@)][(32@@[(42@@)][(32@@)][(32@@[(86@@[(59@@[(42@@)])][(32@@[(42@@)][(42@@)][(32@@)])])])][(42@@)])])][(74@@[(43@@)][(43@@)])])]
[(60@@[(59@@[(36@@[(16@@[(27@@[(-1@@)])][(33@@)][(33@@)])])])])]
[(60@@[(59@@[(42@@)][(34@@)])])]
[(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
[(60@@[(74@@[(43@@)])])]
[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
[(60@@[(59@@)])]
[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])])])])]
[(60@@[(5@@[(43@@)])][(59@@[(42@@)])])]
[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(22@@[(52@@)][(42@@)])])])])]
[(46@@[(45@@)][(45@@)][(9@@)][(42@@)][(42@@)])]
[(46@@)]
[(46@@[(32@@[(42@@)][(42@@)])])]
[(46@@[(42@@)])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])]
[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@[(42@@)])])])])]
[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(42@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])][(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])])])]
[(12@@)]
[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(53@@[(42@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(53@@[(42@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])])]
[(12@@[(44@@[(43@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(41@@[(33@@)])])]
[(12@@[(21@@)])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)])][(42@@)])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@)])]
[(49@@)]
[(49@@[(40@@[(42@@)][(42@@)])])]
[(49@@[(42@@)][(45@@)])]
[(49@@[(42@@)])]
[(49@@[(45@@)][(40@@[(42@@)][(42@@)])])]
[(55@@[(83@@)][(42@@)][(74@@[(43@@)][(43@@)][(43@@)])])]
[(55@@[(83@@)][(83@@)][(83@@)][(42@@)][(43@@)])]
[(55@@)]
[(55@@[(83@@)][(83@@)][(42@@)][(74@@[(43@@)][(43@@)])][(43@@)])]
[(55@@[(83@@)][(42@@)][(43@@)])]
[(55@@[(83@@)][(42@@)])]
[(55@@[(83@@)])]
[(55@@[(83@@)][(83@@)][(42@@)][(43@@)])]
[(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)][(42@@[(33@@)][(33@@)])])])]
[(41@@[(27@@[(32@@[(42@@[(27@@[(38@@[(34@@)][(42@@)])][(-1@@)][(42@@)][(34@@)])])])])])]
[(41@@[(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])][(42@@)])]
[(41@@[(14@@[(42@@)][(22@@[(52@@)][(42@@)])])])]
[(41@@)]
[(41@@[(32@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)])][(42@@[(32@@)])])])]
[(41@@[(16@@[(32@@)][(27@@[(42@@)][(-1@@)][(33@@)])][(33@@)])])]
[(41@@[(22@@[(52@@)][(42@@)])])]
[(41@@[(86@@[(60@@[(59@@[(16@@[(32@@[(32@@[(32@@[(42@@[(42@@)])])])])][(32@@[(32@@[(32@@[(42@@[(42@@)])])])])])])])])])]
[(41@@[(33@@)][(42@@)])]
[(41@@[(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(14@@[(-2@@)][(43@@)][(42@@)][(40@@)])])]
[(41@@[(27@@)])]
[(41@@[(32@@[(42@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])])]
[(41@@[(32@@[(42@@[(33@@)][(42@@)])])])]
[(41@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)][(40@@)])][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)])])])]
[(41@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(34@@)])])])])]
[(51@@[(21@@)][(22@@[(52@@)][(42@@)])][(21@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
[(51@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
[(51@@[(25@@)][(22@@[(52@@)][(42@@)])][(41@@)])]
[(51@@)]
[(51@@[(22@@[(52@@)][(42@@)])])]
[(51@@[(21@@)][(52@@)])]
[(51@@[(42@@)])]
[(51@@[(21@@)][(22@@[(52@@)][(42@@)])])]
[(50@@)]
[(50@@[(42@@)])]
[(25@@[(32@@[(45@@)][(42@@[(42@@)])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])])]
[(25@@[(27@@[(40@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])][(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])])])])]
[(25@@[(27@@[(42@@)][(36@@[(27@@[(32@@)][(32@@)])])])][(42@@)][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(-1@@)][(42@@)][(32@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])][(25@@[(27@@[(-1@@)][(42@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(61@@[(27@@[(42@@)][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(38@@[(-1@@)][(42@@)])])])])])])])][(25@@[(53@@)][(27@@[(27@@[(42@@)][(-1@@)][(13@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(13@@)])])])])])]
[(25@@[(27@@[(32@@[(42@@[(42@@)])])][(-1@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])])]
[(25@@[(32@@[(42@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
[(25@@[(27@@[(36@@[(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(36@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])])]
[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(21@@[(7@@[(42@@)][(-1@@)])])])]
[(25@@[(27@@)][(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])]
[(25@@[(27@@[(32@@[(57@@)][(42@@)][(42@@[(42@@)])])])])]
[(25@@[(27@@[(38@@[(-1@@)][(42@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])])][(41@@[(42@@)])])]
[(25@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@[(42@@)])])])])])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])][(25@@[(32@@[(42@@[(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)])])])])])])])])]
[(25@@[(27@@[(42@@)])][(21@@[(7@@[(42@@)])])])]
[(25@@[(22@@)][(25@@[(22@@)][(21@@[(7@@[(22@@[(42@@)])][(9@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])]
[(25@@[(32@@[(42@@)][(32@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])][(42@@[(45@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])])]
[(25@@)]
[(25@@[(21@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
[(25@@[(42@@)][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])][(27@@[(27@@[(2@@)][(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])])])])]
[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(51@@[(25@@)][(52@@)])])]
[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])])])]
[(25@@[(25@@)][(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(34@@)])])])])])][(21@@[(32@@[(42@@)][(42@@[(13@@)])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])][(61@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@)])])])])]
[(25@@[(60@@)][(21@@)][(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(21@@[(7@@[(11@@)][(42@@)][(-1@@)])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(57@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(11@@[(74@@[(43@@)][(43@@)])][(32@@[(42@@)][(42@@)])])])])])]
[(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(34@@)])])][(-1@@)][(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(21@@[(7@@)])])][(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(53@@[(32@@[(42@@)][(42@@[(33@@)])])])])][(60@@)])]
[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(25@@[(27@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(-1@@)][(22@@[(52@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)])])])][(21@@[(37@@[(22@@[(52@@)][(42@@)])][(-1@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(2@@[(22@@[(52@@)][(42@@)])][(22@@[(52@@)][(42@@)])])])])][(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])][(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])][(2@@)])])])])])]
[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])])]
[(25@@[(27@@[(-1@@)])][(41@@)])]
[(25@@[(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(42@@)][(-1@@)][(45@@)])])])])]
[(25@@[(42@@)][(41@@)])]
[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(9@@)])])]
[(25@@[(21@@)])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@[(32@@[(42@@[(42@@)][(42@@)][(42@@)])])])])]
[(25@@[(27@@[(27@@[(-1@@)])][(-1@@)])])]
[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
[(25@@[(21@@)][(42@@)][(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)])])])])]
[(25@@[(32@@[(42@@)][(32@@)][(42@@[(45@@)])])][(21@@[(32@@[(32@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(18@@)])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(11@@[(39@@)][(36@@[(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])])][(-1@@)][(11@@[(39@@)][(42@@)])])])])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(34@@)])])][(41@@[(9@@)])])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(2@@[(42@@)][(42@@)])][(2@@[(42@@)][(42@@)])])])])])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@)])]
[(24@@)]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(2@@[(42@@)][(42@@)])][(-1@@)][(2@@[(42@@)][(42@@)])])])])]
[(24@@[(32@@[(42@@)][(42@@)])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(32@@)])])]
[(24@@[(27@@[(42@@)])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(41@@[(9@@)])])])]
[(61@@[(32@@[(42@@)][(42@@[(45@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(45@@)][(45@@)])])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
[(61@@[(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])])])])]
[(61@@[(27@@[(36@@[(7@@[(32@@[(42@@)])])])])])]
[(61@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@)][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@[(34@@)])])])])])]
[(61@@)]
[(61@@[(32@@[(42@@)])][(21@@[(32@@[(42@@[(32@@[(42@@)])])])])])]
[(61@@[(27@@[(27@@[(42@@)])])])]
[(61@@[(27@@[(-1@@)])])]
[(61@@[(21@@)][(32@@[(42@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
[(61@@[(32@@)])]
[(61@@[(27@@[(42@@)][(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(42@@)])])][(21@@[(38@@[(-1@@)][(42@@)])])])]
[(70@@[(44@@[(43@@)][(42@@)][(74@@[(43@@)][(43@@)][(74@@[(43@@)][(43@@)][(43@@)])])])][(32@@[(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])])])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])]
[(70@@[(21@@)][(44@@[(83@@)][(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@)])])]
[(70@@[(44@@[(42@@)])][(25@@[(27@@[(38@@[(32@@[(42@@[(42@@)])])])][(32@@[(42@@[(42@@)])])])][(21@@[(32@@[(42@@[(42@@)])])])])])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@)])]
[(70@@)]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
[(70@@[(32@@[(42@@)][(42@@)])])]
[(70@@[(44@@[(43@@)])])]
[(70@@[(44@@[(83@@)][(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
[(70@@[(42@@)])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])]
[(70@@[(32@@[(42@@)][(42@@)])][(42@@)])]
[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
[(10@@)]
[(17@@)]
[(17@@[(42@@)][(42@@)][(33@@)])]
[(17@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(32@@[(42@@)][(42@@)])][(45@@)])])][(45@@)])]
[(17@@[(42@@)])]
[(17@@[(33@@)][(33@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])]
[(71@@[(83@@)][(42@@)][(72@@[(42@@)])][(72@@[(42@@)])][(72@@[(42@@)])])]
[(71@@[(83@@)])]
[(18@@)]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(38@@[(-1@@)][(34@@)])][(-1@@)][(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])][(41@@[(42@@)])][(41@@[(34@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(52@@)])][(41@@[(9@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(9@@)])])][(25@@[(38@@[(-1@@)][(48@@[(42@@)][(42@@)])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(32@@)][(32@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(42@@)])])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(41@@[(9@@)])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(33@@)])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@[(32@@[(42@@)][(42@@)])])][(32@@[(34@@)][(40@@[(42@@)][(42@@)])])][(42@@)])])])])][(41@@[(42@@)])])]
[(31@@[(44@@[(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@[(42@@)])])])][(60@@[(74@@[(43@@)][(5@@[(43@@)])])][(59@@[(42@@)][(32@@[(42@@)])])])][(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(70@@[(44@@[(5@@[(43@@)])][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(2@@[(42@@)][(34@@)])])])])])])])])][(41@@[(32@@)][(42@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(45@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(46@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@[(14@@[(40@@[(42@@)][(42@@)])])])])])][(21@@[(32@@)])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])])][(41@@[(42@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(27@@[(42@@)][(-1@@)][(42@@)])])])]
[(31@@[(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])])]
[(31@@[(83@@)][(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(41@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(34@@)])])])])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(54@@[(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(11@@[(74@@[(43@@)][(76@@)])][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])])])])]
[(31@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
[(31@@)]
[(31@@[(83@@)][(39@@)][(42@@)][(21@@[(32@@)])][(21@@[(32@@[(42@@)][(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(32@@)])])][(41@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
[(31@@[(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(9@@)][(32@@[(42@@)][(42@@[(9@@)][(9@@)])])])])])]
[(31@@[(83@@)][(43@@)][(42@@)][(41@@[(32@@[(42@@)][(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(9@@)][(42@@)])])])])]
[(31@@[(41@@[(32@@[(42@@[(14@@)])])])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(1@@[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)])])])][(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])][(31@@[(83@@)][(5@@[(39@@)])][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(5@@[(39@@)])][(59@@[(42@@)][(4@@[(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])])])])])][(41@@[(32@@[(42@@[(42@@)][(42@@)])])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(83@@)][(39@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(32@@)][(-1@@)][(42@@)])])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(34@@)])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(32@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(27@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(34@@)])][(41@@[(34@@)])])])][(41@@)])]
[(31@@[(83@@)][(43@@)][(42@@)][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(54@@[(60@@[(5@@[(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])][(33@@)])])])])][(70@@[(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(42@@)][(41@@[(11@@[(43@@)][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(33@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(33@@)])])])][(41@@[(42@@)])])])]
[(31@@[(60@@)][(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(25@@[(27@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(42@@)])])])])])])][(41@@[(42@@)])])]
[(31@@[(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(42@@)])])])])])])])][(41@@[(42@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(83@@)][(43@@)][(42@@)])][(43@@)][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(86@@[(21@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])])][(41@@[(33@@)])])][(32@@[(42@@[(42@@)])])])])])])])]
[(31@@[(42@@)][(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(44@@[(39@@)][(42@@)])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(41@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
[(31@@[(83@@)][(83@@)])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@[(42@@)][(9@@)])])])])]
[(31@@[(83@@)])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])])]
[(31@@[(39@@)][(43@@)][(41@@[(52@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(34@@)][(32@@[(42@@)][(42@@)])])])])]
[(31@@[(39@@)][(42@@)][(41@@[(27@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(43@@)][(54@@[(21@@[(32@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])][(21@@[(32@@)])])])])]
[(21@@[(7@@[(14@@[(14@@[(-2@@)][(43@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(42@@)][(-1@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(42@@)])])])])])])])]
[(21@@[(7@@[(27@@[(36@@[(27@@[(27@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(-1@@)][(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])][(32@@)])])])]
[(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(34@@)])][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])][(-1@@)][(42@@)])])])]
[(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(45@@)][(42@@)])])])])]
[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(32@@[(40@@)][(42@@)])])])])])]
[(21@@[(32@@[(42@@)][(32@@[(42@@)])][(42@@[(45@@)])])])]
[(21@@[(32@@[(42@@)][(42@@[(2@@[(42@@)][(34@@)])][(2@@[(42@@)][(34@@)])][(32@@[(42@@)][(42@@)])][(32@@[(42@@)][(42@@)])])])])]
[(21@@[(32@@[(42@@[(42@@)][(42@@)])][(32@@)])])]
[(21@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(34@@)])][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])][(34@@)])][(42@@)])])])])]
[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(27@@[(45@@)][(-1@@)][(45@@)])])][(42@@)])])])])]
[(21@@)]
[(21@@[(32@@)][(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])]
[(21@@[(32@@[(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(14@@[(-2@@)][(43@@)][(45@@)])][(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(45@@)])])])])])])]
[(21@@[(14@@[(-2@@)][(43@@)][(42@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])][(41@@[(48@@[(42@@)][(42@@)])])])])])])]
[(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])]
[(21@@[(7@@[(27@@[(32@@[(42@@)][(42@@[(22@@[(52@@)][(42@@)])])])][(36@@[(16@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(34@@)][(32@@[(22@@)][(42@@)])])])])])])]
[(21@@[(7@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(27@@[(36@@[(27@@[(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(-1@@)][(2@@[(40@@[(42@@)][(42@@)])][(42@@)])])])][(-1@@)][(36@@[(27@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(-1@@)][(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])])][(36@@[(27@@)])])])])]
[(21@@[(7@@[(42@@)][(-1@@)][(16@@[(36@@[(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(32@@[(42@@[(32@@[(42@@)][(32@@[(34@@)])][(32@@)][(42@@)])])])][(42@@)])])])]
[(21@@[(32@@[(42@@)][(42@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])])])])]
[(21@@[(7@@[(42@@)][(9@@)])])]
[(21@@[(32@@[(42@@[(32@@)][(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])])]
[(21@@[(7@@[(14@@)])])]
[(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)][(42@@)][(45@@)][(9@@)][(9@@)])])])]
[(21@@[(32@@)])]
[(21@@[(32@@[(42@@[(14@@[(40@@)][(16@@[(42@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])])])]
[(21@@[(32@@[(42@@[(22@@[(42@@)])])])])]
[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(45@@)])][(42@@)])])])])]
[(21@@[(7@@[(27@@[(38@@[(-1@@)][(42@@)])])][(27@@[(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(-1@@)][(42@@)][(42@@)][(42@@)])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])]
[(54@@[(21@@[(32@@[(42@@)][(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(41@@[(42@@)])][(12@@[(44@@[(43@@)][(42@@)])][(41@@[(42@@)])])])]
[(54@@[(8@@[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
[(54@@[(41@@)][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
[(54@@[(21@@)][(21@@)][(8@@)][(41@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(53@@[(42@@)])])])]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])])])]
[(54@@[(25@@[(27@@[(62@@[(42@@)][(-3@@)][(43@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(32@@)])][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])]
[(54@@)]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(32@@[(42@@[(42@@)])])])])])]
[(54@@[(21@@)][(8@@[(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])][(21@@)][(8@@[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@)])])])])])]
[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
[(54@@[(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])][(12@@[(44@@[(43@@)][(42@@)])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])][(42@@)])])])])])])]
[(54@@[(21@@)][(8@@[(21@@)])])]
[(54@@[(58@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
[(54@@[(21@@)][(21@@)])]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])])]
[(54@@[(60@@)])]
[(54@@[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(9@@)])])])][(53@@[(42@@)])])][(21@@)])]
[(54@@[(12@@[(44@@[(43@@)][(42@@)])])])]
[(54@@[(21@@)][(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(32@@[(42@@)][(42@@)])])][(53@@[(42@@)])])])]
[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(52@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])])]
[(6@@[(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
[(6@@[(36@@[(27@@)])])]
[(6@@[(27@@)])]
[(6@@[(27@@[(42@@)][(-1@@)][(33@@)])])]
[(53@@[(14@@[(45@@)][(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
[(53@@[(14@@[(32@@[(42@@[(27@@[(32@@)][(32@@[(42@@[(32@@[(42@@)][(42@@)])])])])])])])])]
[(53@@[(14@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])])])]
[(53@@[(14@@[(42@@)][(32@@[(42@@[(42@@)])])])])]
[(53@@)]
[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(42@@)])])])]
[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])]
[(53@@[(14@@[(27@@[(45@@)])])])]
[(53@@[(14@@[(45@@)])])]
[(53@@[(42@@)])]
[(53@@[(14@@[(27@@[(32@@[(42@@)])])])])]
[(23@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(9@@)])])])]
[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(33@@)])])]
[(23@@[(83@@)][(83@@)][(83@@)][(5@@[(39@@)])][(59@@[(42@@)][(3@@[(5@@[(39@@)])][(4@@[(34@@)][(34@@)][(34@@)][(34@@)])])])])]
[(23@@[(59@@[(27@@[(45@@)][(45@@)][(45@@)])])])]
[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
[(23@@)]
[(23@@[(83@@)][(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(57@@)][(42@@)])])])]
[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(14@@[(-2@@)][(43@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(9@@)])][(32@@)][(42@@)])])])]
[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(42@@)])])]
[(23@@[(59@@[(14@@[(45@@)])])])]
[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
[(23@@[(43@@)][(39@@)])]
[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])])])])])]
[(23@@[(83@@)])]
[(23@@[(59@@[(32@@[(32@@[(14@@[(-2@@)][(43@@)][(34@@)][(40@@[(42@@)][(42@@)])][(9@@)][(9@@)])])])])])]
[(23@@[(59@@[(32@@[(32@@[(45@@)])])])])]
[(23@@[(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
[(60@@[(59@@[(32@@[(42@@[(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])][(38@@[(-1@@)][(34@@)])])][(42@@)])])])])])]
[(60@@[(59@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@[(42@@)])][(42@@)])])])]
[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
[(60@@[(39@@)][(59@@[(42@@)][(32@@[(22@@)][(42@@)])])])]
[(60@@[(39@@)][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])])]
[(60@@[(5@@[(39@@)])][(59@@[(32@@)][(42@@)])])]
[(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(32@@[(42@@[(32@@[(40@@)][(32@@)][(42@@)])])])])])])])]
[(60@@)]
[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])]
[(60@@[(43@@)][(59@@[(32@@)][(32@@[(42@@)][(32@@)][(32@@[(86@@[(59@@[(42@@)])][(32@@[(42@@)][(42@@)][(32@@)])])])][(42@@)])])][(74@@[(43@@)][(43@@)])])]
[(60@@[(59@@[(36@@[(16@@[(27@@[(-1@@)])][(33@@)][(33@@)])])])])]
[(60@@[(59@@[(42@@)][(34@@)])])]
[(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
[(60@@[(74@@[(43@@)])])]
[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
[(60@@[(59@@)])]
[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])])])])]
[(60@@[(5@@[(43@@)])][(59@@[(42@@)])])]
[(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(22@@[(52@@)][(42@@)])])])])]
[(46@@[(45@@)][(45@@)][(9@@)][(42@@)][(42@@)])]
[(46@@)]
[(46@@[(32@@[(42@@)][(42@@)])])]
[(46@@[(42@@)])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])]
[(12@@[(44@@[(42@@)])][(21@@[(32@@[(42@@[(42@@)])])])])]
[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(53@@[(42@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])][(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])])])]
[(12@@)]
[(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(53@@[(42@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(53@@[(42@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])])]
[(12@@[(44@@[(43@@)])])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(41@@[(33@@)])])]
[(12@@[(21@@)])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)])][(42@@)])])])])]
[(12@@[(44@@[(43@@)][(42@@)])][(21@@)])]
[(49@@)]
[(49@@[(40@@[(42@@)][(42@@)])])]
[(49@@[(42@@)][(45@@)])]
[(49@@[(42@@)])]
[(49@@[(45@@)][(40@@[(42@@)][(42@@)])])]
[(55@@[(83@@)][(42@@)][(74@@[(43@@)][(43@@)][(43@@)])])]
[(55@@[(83@@)][(83@@)][(83@@)][(42@@)][(43@@)])]
[(55@@)]
[(55@@[(83@@)][(83@@)][(42@@)][(74@@[(43@@)][(43@@)])][(43@@)])]
[(55@@[(83@@)][(42@@)][(43@@)])]
[(55@@[(83@@)][(42@@)])]
[(55@@[(83@@)])]
[(55@@[(83@@)][(83@@)][(42@@)][(43@@)])]
[(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)][(42@@[(33@@)][(33@@)])])])]
[(41@@[(27@@[(32@@[(42@@[(27@@[(38@@[(34@@)][(42@@)])][(-1@@)][(42@@)][(34@@)])])])])])]
[(41@@[(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])][(42@@)])]
[(41@@[(14@@[(42@@)][(22@@[(52@@)][(42@@)])])])]
[(41@@)]
[(41@@[(32@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)])][(42@@[(32@@)])])])]
[(41@@[(16@@[(32@@)][(27@@[(42@@)][(-1@@)][(33@@)])][(33@@)])])]
[(41@@[(22@@[(52@@)][(42@@)])])]
[(41@@[(86@@[(60@@[(59@@[(16@@[(32@@[(32@@[(32@@[(42@@[(42@@)])])])])][(32@@[(32@@[(32@@[(42@@[(42@@)])])])])])])])])])]
[(41@@[(33@@)][(42@@)])]
[(41@@[(32@@[(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(14@@[(-2@@)][(43@@)][(42@@)][(40@@)])])]
[(41@@[(27@@)])]
[(41@@[(32@@[(42@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])])]
[(41@@[(32@@[(42@@[(33@@)][(42@@)])])])]
[(41@@[(14@@[(-2@@)][(74@@[(43@@)][(43@@)])][(42@@)][(40@@)])][(32@@[(42@@[(40@@[(42@@)][(42@@)])][(42@@)])])])]
[(41@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(34@@)])])])])]
[(51@@[(21@@)][(22@@[(52@@)][(42@@)])][(21@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
[(51@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
[(51@@[(25@@)][(22@@[(52@@)][(42@@)])][(41@@)])]
[(51@@)]
[(51@@[(22@@[(52@@)][(42@@)])])]
[(51@@[(21@@)][(52@@)])]
[(51@@[(42@@)])]
[(51@@[(21@@)][(22@@[(52@@)][(42@@)])])]
[(50@@)]
[(50@@[(42@@)])]
[(25@@[(32@@[(45@@)][(42@@[(42@@)])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])][(21@@[(7@@[(40@@[(42@@)][(42@@)])][(-1@@)][(32@@[(57@@)][(42@@)])])])])]
[(25@@[(27@@[(40@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])][(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])][(59@@[(42@@)][(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)][(42@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(36@@[(27@@[(42@@)][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])])])])])]
[(25@@[(27@@[(42@@)][(36@@[(27@@[(32@@)][(32@@)])])])][(42@@)][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(-1@@)][(42@@)][(32@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])][(25@@[(27@@[(-1@@)][(42@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(61@@[(27@@[(42@@)][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(38@@[(-1@@)][(42@@)])])])])])])])][(25@@[(53@@)][(27@@[(27@@[(42@@)][(-1@@)][(13@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(13@@)])])])])])]
[(25@@[(27@@[(32@@[(42@@[(42@@)])])][(-1@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])])]
[(25@@[(32@@[(42@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
[(25@@[(27@@[(36@@[(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(36@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])])]
[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(21@@[(7@@[(42@@)][(-1@@)])])])]
[(25@@[(27@@)][(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])]
[(25@@[(27@@[(32@@[(57@@)][(42@@)][(42@@[(42@@)])])])])]
[(25@@[(27@@[(38@@[(-1@@)][(42@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])])][(41@@[(42@@)])])]
[(25@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@[(42@@)])])])])])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])])])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)])])])])][(25@@[(32@@[(42@@[(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)])])])])])])])])]
[(25@@[(27@@[(42@@)])][(21@@[(7@@[(42@@)])])])]
[(25@@[(22@@)][(25@@[(22@@)][(21@@[(7@@[(22@@[(42@@)])][(9@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])]
[(25@@[(32@@[(42@@)][(32@@[(42@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])][(42@@[(45@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(45@@)])])])]
[(25@@)]
[(25@@[(21@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])])])])])]
[(25@@[(42@@)][(21@@[(7@@[(42@@)][(-1@@)][(9@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])][(27@@[(27@@[(2@@)][(2@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])])])])])]
[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(51@@[(25@@)][(52@@)])])]
[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])])])]
[(25@@[(25@@)][(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(27@@[(42@@)][(-1@@)][(34@@)])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(42@@)][(34@@)])])])])])][(21@@[(32@@[(42@@)][(42@@[(13@@)])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(60@@[(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])][(61@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@)])])])])]
[(25@@[(60@@)][(21@@)][(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(21@@[(7@@[(11@@)][(42@@)][(-1@@)])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(57@@)])])])])][(21@@[(7@@[(42@@)][(-1@@)][(11@@[(74@@[(43@@)][(43@@)])][(32@@[(42@@)][(42@@)])])])])])]
[(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(36@@[(27@@[(42@@)][(-1@@)][(34@@)])])][(-1@@)][(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(21@@[(7@@)])])][(25@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(34@@)])][(53@@[(32@@[(42@@)][(42@@[(33@@)])])])])][(60@@)])]
[(25@@[(27@@[(42@@)][(-1@@)][(34@@)])][(25@@[(27@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(-1@@)][(22@@[(52@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)])])])][(21@@[(37@@[(22@@[(52@@)][(42@@)])][(-1@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(2@@[(22@@[(52@@)][(42@@)])][(22@@[(52@@)][(42@@)])])])])][(41@@[(32@@[(22@@[(52@@)][(42@@)])][(42@@)])])])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)][(42@@[(42@@)])])])][(25@@[(27@@[(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])])])][(27@@[(27@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])])][(2@@)])])])])])]
[(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@[(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(40@@[(42@@)][(42@@)])][(-1@@)][(42@@)])])])])])]
[(25@@[(27@@[(-1@@)])][(41@@)])]
[(25@@[(27@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(42@@)][(-1@@)][(45@@)])])])])]
[(25@@[(42@@)][(41@@)])]
[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(9@@)])])]
[(25@@[(21@@)])]
[(25@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@[(32@@[(42@@[(42@@)][(42@@)][(42@@)])])])])]
[(25@@[(27@@[(27@@[(-1@@)])][(-1@@)])])]
[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])])]
[(25@@[(21@@)][(42@@)][(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)])])])])]
[(25@@[(32@@[(42@@)][(32@@)][(42@@[(45@@)])])][(21@@[(32@@[(32@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(18@@)])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(42@@)][(-1@@)][(27@@[(11@@[(39@@)][(36@@[(27@@[(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])])][(-1@@)][(11@@[(39@@)][(42@@)])])])])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(34@@)])])][(41@@[(9@@)])])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(38@@[(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(2@@[(42@@)][(42@@)])][(2@@[(42@@)][(42@@)])])])])])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@)])]
[(24@@)]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(40@@[(42@@)][(42@@)])])][(37@@[(42@@)][(-1@@)])][(21@@[(7@@[(2@@[(42@@)][(42@@)])][(-1@@)][(2@@[(42@@)][(42@@)])])])])]
[(24@@[(32@@[(42@@)][(42@@)])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(21@@[(32@@)])])]
[(24@@[(27@@[(42@@)])])]
[(24@@[(58@@[(39@@)][(59@@[(42@@)][(34@@)])])][(27@@[(42@@)][(-1@@)][(32@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(38@@[(-1@@)][(32@@[(32@@[(42@@)])][(42@@)])])][(41@@[(9@@)])])])]
[(61@@[(32@@[(42@@)][(42@@[(45@@)])])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(45@@)][(45@@)])])])])][(21@@[(37@@[(42@@)][(-1@@)])])])]
[(61@@[(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(13@@)])][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])])])])]
[(61@@[(27@@[(36@@[(7@@[(32@@[(42@@)])])])])])]
[(61@@[(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(34@@)])][(21@@)][(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(32@@)][(42@@[(34@@)])])])])])]
[(61@@)]
[(61@@[(32@@[(42@@)])][(21@@[(32@@[(42@@[(32@@[(42@@)])])])])])]
[(61@@[(27@@[(27@@[(42@@)])])])]
[(61@@[(27@@[(-1@@)])])]
[(61@@[(21@@)][(32@@[(42@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
[(61@@[(32@@)])]
[(61@@[(27@@[(42@@)][(-1@@)][(42@@)])][(21@@[(7@@[(42@@)][(-1@@)][(42@@)])])][(21@@[(38@@[(-1@@)][(42@@)])])])]
[(70@@[(44@@[(43@@)][(42@@)][(74@@[(43@@)][(43@@)][(74@@[(43@@)][(43@@)][(43@@)])])])][(32@@[(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@)])])])])]
[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])])])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])])]
[(70@@[(21@@)][(44@@[(83@@)][(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@)])])]
[(70@@[(44@@[(42@@)])][(25@@[(27@@[(38@@[(32@@[(42@@[(42@@)])])])][(32@@[(42@@[(42@@)])])])][(21@@[(32@@[(42@@[(42@@)])])])])])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@)])]
[(70@@)]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])]
[(70@@[(32@@[(42@@)][(42@@)])])]
[(70@@[(44@@[(43@@)])])]
[(70@@[(44@@[(83@@)][(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
[(70@@[(42@@)])]
[(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])][(42@@)])])])])]
[(70@@[(32@@[(42@@)][(42@@)])][(42@@)])]
[(70@@[(44@@[(43@@)][(42@@)])][(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
[(10@@)]
[(17@@)]
[(17@@[(42@@)][(42@@)][(33@@)])]
[(17@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(32@@[(42@@)][(42@@)])][(45@@)])])][(45@@)])]
[(17@@[(42@@)])]
[(17@@[(33@@)][(33@@)][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(40@@[(40@@[(42@@)][(42@@)])][(42@@)])])]
[(71@@[(83@@)][(42@@)][(72@@[(42@@)])][(72@@[(42@@)])][(72@@[(42@@)])])]
[(71@@[(83@@)])]
[(18@@)]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(27@@[(38@@[(-1@@)][(34@@)])][(-1@@)][(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(60@@[(39@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])][(41@@[(42@@)])][(41@@[(34@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(52@@)])][(41@@[(9@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(9@@)])])][(25@@[(38@@[(-1@@)][(48@@[(42@@)][(42@@)])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(32@@)][(32@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(60@@[(43@@)][(59@@[(42@@)][(11@@[(43@@)][(42@@)])])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(25@@[(32@@[(42@@)][(42@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(41@@[(9@@)])])][(41@@[(9@@)])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(33@@)])])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@[(32@@[(42@@)][(42@@)])])][(32@@[(34@@)][(40@@[(42@@)][(42@@)])])][(42@@)])])])])][(41@@[(42@@)])])]
[(31@@[(44@@[(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(21@@[(32@@[(42@@[(42@@)])])])][(60@@[(74@@[(43@@)][(5@@[(43@@)])])][(59@@[(42@@)][(32@@[(42@@)])])])][(25@@[(38@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(70@@[(44@@[(5@@[(43@@)])][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(2@@[(42@@)][(34@@)])])])])])])])])][(41@@[(32@@)][(42@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(45@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(46@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@[(14@@[(40@@[(42@@)][(42@@)])])])])])][(21@@[(32@@)])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])])][(41@@[(42@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(27@@[(42@@)][(-1@@)][(42@@)])])])]
[(31@@[(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])])]
[(31@@[(83@@)][(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(39@@)][(42@@)])][(41@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(38@@[(-1@@)][(34@@)])][(36@@[(16@@[(27@@[(42@@)][(-1@@)][(42@@)])][(34@@)][(34@@)])])])])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(54@@[(60@@[(74@@[(43@@)][(76@@)])][(59@@[(42@@)][(11@@[(74@@[(43@@)][(76@@)])][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])])])])]
[(31@@[(44@@[(42@@)])][(21@@[(32@@[(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
[(31@@)]
[(31@@[(83@@)][(39@@)][(42@@)][(21@@[(32@@)])][(21@@[(32@@[(42@@)][(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(60@@[(43@@)][(59@@[(42@@)][(32@@)])])][(41@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
[(31@@[(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(42@@)])])])])][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(9@@)][(32@@[(42@@)][(42@@[(9@@)][(9@@)])])])])])]
[(31@@[(83@@)][(43@@)][(42@@)][(41@@[(32@@[(42@@)][(42@@)])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(9@@)][(42@@)])])])])]
[(31@@[(41@@[(32@@[(42@@[(14@@)])])])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(1@@[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)])])])][(31@@[(83@@)][(39@@)][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(40@@[(42@@)][(42@@)])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])][(31@@[(83@@)][(5@@[(39@@)])][(42@@)][(44@@[(39@@)][(42@@)])][(44@@[(5@@[(39@@)])][(42@@)])][(60@@[(5@@[(39@@)])][(59@@[(42@@)][(4@@[(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])][(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])][(12@@[(44@@[(43@@)][(42@@)])])])][(41@@[(42@@)])])])])])])][(41@@[(32@@[(42@@[(42@@)][(42@@)])])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(83@@)][(39@@)][(42@@)])][(60@@[(39@@)][(59@@[(42@@)][(27@@[(32@@)][(-1@@)][(42@@)])])])][(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(41@@[(34@@)])])][(24@@[(58@@[(39@@)][(59@@[(42@@)][(32@@)])])][(27@@[(42@@)][(-1@@)][(42@@)])][(37@@[(42@@)][(-1@@)])][(25@@[(27@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])][(34@@)])][(41@@[(34@@)])])])][(41@@)])]
[(31@@[(83@@)][(43@@)][(42@@)][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(54@@[(60@@[(5@@[(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])][(33@@)])])])])][(70@@[(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(42@@)][(41@@[(11@@[(43@@)][(32@@[(42@@)][(42@@[(42@@)])])])])])][(41@@[(33@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)])])])][(41@@[(33@@)])])])][(41@@[(42@@)])])])]
[(31@@[(60@@)][(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(25@@[(27@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(42@@)])])])])])])][(41@@[(42@@)])])]
[(31@@[(83@@)][(74@@[(43@@)][(43@@)])][(42@@)][(44@@[(74@@[(43@@)][(43@@)])][(42@@)])][(60@@[(74@@[(43@@)][(43@@)])][(59@@[(42@@)][(33@@)])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)])])])])][(70@@[(44@@[(43@@)][(42@@)])][(42@@)][(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@[(42@@)])])])])])])])][(41@@[(42@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(83@@)][(43@@)][(42@@)])][(43@@)][(60@@[(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@[(42@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(86@@[(21@@[(32@@[(42@@)][(32@@)][(42@@[(42@@)])])])][(41@@[(33@@)])])][(32@@[(42@@[(42@@)])])])])])])])]
[(31@@[(42@@)][(44@@[(74@@[(43@@)][(76@@)])][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(83@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])]
[(31@@[(44@@[(39@@)][(42@@)])])]
[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(41@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(42@@)])])])])])]
[(31@@[(83@@)][(83@@)])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@[(42@@)][(9@@)])])])])]
[(31@@[(83@@)])]
[(31@@[(83@@)][(39@@)][(42@@)][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])][(44@@[(43@@)][(42@@)])])]
[(31@@[(39@@)][(43@@)][(41@@[(52@@)])])]
[(31@@[(83@@)][(39@@)][(42@@)][(41@@[(16@@[(27@@[(42@@)][(-1@@)][(33@@)])][(34@@)][(32@@[(42@@)][(42@@)])])])])]
[(31@@[(39@@)][(42@@)][(41@@[(27@@[(27@@[(27@@[(42@@)][(-1@@)][(33@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(33@@)])])][(-1@@)][(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])])])])]
[(31@@[(83@@)][(39@@)][(42@@)][(43@@)][(54@@[(21@@[(32@@)])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])][(42@@)])])])][(21@@[(32@@)])])])])]
[(21@@[(7@@[(14@@[(14@@[(-2@@)][(43@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(60@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(27@@[(42@@)][(-1@@)][(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(42@@)])])])])])])])]
[(21@@[(7@@[(27@@[(36@@[(27@@[(27@@[(-1@@)][(32@@[(42@@)][(42@@)])])][(-1@@)][(27@@[(32@@[(42@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])])][(32@@)])])])]
[(21@@[(7@@[(42@@)][(-1@@)][(27@@[(36@@[(16@@[(27@@[(42@@)][(-1@@)][(34@@)])][(27@@[(42@@)][(-1@@)][(42@@)])][(42@@)])])][(-1@@)][(42@@)])])])]
[(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(45@@)][(42@@)])])])])]
[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@[(42@@)][(32@@[(40@@)][(42@@)])])])])])]
[(21@@[(32@@[(42@@)][(32@@[(42@@)])][(42@@[(45@@)])])])]
[(21@@[(32@@[(42@@)][(42@@[(2@@[(42@@)][(34@@)])][(2@@[(42@@)][(34@@)])][(32@@[(42@@)][(42@@)])][(32@@[(42@@)][(42@@)])])])])]
[(21@@[(32@@[(42@@[(42@@)][(42@@)])][(32@@)])])]
[(21@@[(32@@[(42@@)][(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(34@@)])][(27@@[(32@@[(42@@)][(42@@[(34@@)])])][(-1@@)][(32@@[(42@@)][(42@@[(34@@)])])][(34@@)])][(42@@)])])])])]
[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(27@@[(45@@)][(-1@@)][(45@@)])])][(42@@)])])])])]
[(21@@)]
[(21@@[(32@@)][(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(32@@[(42@@)][(42@@)])])])]
[(21@@[(32@@[(42@@[(42@@)][(14@@[(-2@@)][(43@@)][(14@@[(-2@@)][(43@@)][(45@@)])][(14@@[(-2@@)][(43@@)][(42@@)][(14@@[(-2@@)][(43@@)][(45@@)])])])])])])]
[(21@@[(14@@[(-2@@)][(43@@)][(42@@)][(1@@[(31@@[(83@@)][(43@@)][(42@@)][(44@@[(43@@)][(42@@)])][(43@@)][(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])][(41@@[(48@@[(42@@)][(42@@)])])])])])])]
[(21@@[(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(45@@)])])])]
[(21@@[(7@@[(27@@[(32@@[(42@@)][(42@@[(22@@[(52@@)][(42@@)])])])][(36@@[(16@@[(27@@[(22@@[(52@@)][(42@@)])][(-1@@)][(33@@)])][(34@@)][(32@@[(22@@)][(42@@)])])])])])])]
[(21@@[(7@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(27@@[(36@@[(27@@[(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])][(-1@@)][(2@@[(40@@[(42@@)][(42@@)])][(42@@)])])])][(-1@@)][(36@@[(27@@[(2@@[(40@@[(42@@)][(42@@)])][(42@@)])][(-1@@)][(36@@[(27@@[(2@@[(42@@)][(42@@)])][(-1@@)][(34@@)])])])])][(36@@[(27@@)])])])])]
[(21@@[(7@@[(42@@)][(-1@@)][(16@@[(36@@[(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(40@@[(42@@)][(42@@)])])])][(32@@[(42@@[(32@@[(42@@)][(32@@[(34@@)])][(32@@)][(42@@)])])])][(42@@)])])])]
[(21@@[(32@@[(42@@)][(42@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(40@@[(42@@)][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])][(42@@)])])])])]
[(21@@[(7@@[(42@@)][(9@@)])])]
[(21@@[(32@@[(42@@[(32@@)][(27@@[(32@@[(42@@)][(32@@)][(42@@)])][(-1@@)][(45@@)][(32@@[(42@@)][(32@@)][(42@@)])])])])])]
[(21@@[(7@@[(14@@)])])]
[(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)][(42@@)][(42@@)][(42@@)][(45@@)][(9@@)][(9@@)])])])]
[(21@@[(32@@)])]
[(21@@[(32@@[(42@@[(14@@[(40@@)][(16@@[(42@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])])])])])])]
[(21@@[(32@@[(42@@[(22@@[(42@@)])])])])]
[(21@@[(32@@[(42@@)][(42@@[(32@@[(42@@)][(32@@)][(32@@[(42@@)])][(32@@[(42@@)])][(32@@[(45@@)])][(42@@)])])])])]
[(21@@[(7@@[(27@@[(38@@[(-1@@)][(42@@)])])][(27@@[(36@@[(27@@[(27@@[(42@@)][(-1@@)][(42@@)])][(-1@@)][(27@@[(-1@@)][(42@@)][(42@@)][(42@@)])])])][(-1@@)][(36@@[(27@@[(42@@)][(-1@@)][(42@@)])])])])])]
[(54@@[(21@@[(32@@[(42@@)][(42@@)])])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(41@@[(42@@)])][(12@@[(44@@[(43@@)][(42@@)])][(41@@[(42@@)])])])]
[(54@@[(8@@[(25@@[(42@@)][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])])]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
[(54@@[(41@@)][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
[(54@@[(21@@)][(21@@)][(8@@)][(41@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(42@@)])])])][(53@@[(42@@)])])])]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])])])]
[(54@@[(25@@[(27@@[(62@@[(42@@)][(-3@@)][(43@@)])][(-1@@)][(38@@[(-1@@)][(32@@[(42@@[(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(32@@[(42@@)][(42@@)])])])])])][(41@@[(32@@)])][(8@@[(21@@[(32@@[(42@@[(42@@)])])])])])]
[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])]
[(54@@)]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(32@@[(42@@[(42@@)])])])])])]
[(54@@[(21@@)][(8@@[(21@@[(32@@[(42@@)][(42@@[(42@@)])])])])])]
[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(14@@[(-2@@)][(43@@)][(42@@)][(42@@)])])])][(21@@)][(8@@[(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@)])])])])])]
[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
[(54@@[(60@@[(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(40@@[(42@@)][(42@@)])][(42@@)][(9@@)])])])])][(25@@[(27@@[(42@@)][(-1@@)][(33@@)])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])][(21@@[(32@@[(42@@)][(42@@[(14@@[(-2@@)][(43@@)][(42@@)])])])])])][(12@@[(44@@[(43@@)][(42@@)])][(53@@[(14@@[(-2@@)][(43@@)][(32@@[(40@@)][(42@@[(42@@)])])])])])])]
[(54@@[(21@@[(7@@[(32@@)][(42@@)][(-1@@)])])][(12@@[(44@@[(43@@)][(42@@)])][(25@@[(32@@[(42@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])][(42@@)])])])])])])]
[(54@@[(21@@)][(8@@[(21@@)])])]
[(54@@[(58@@[(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(42@@)])])])][(21@@[(32@@[(42@@)][(42@@[(42@@)][(42@@)])])])])]
[(54@@[(21@@)][(21@@)])]
[(54@@[(21@@)][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])])])]
[(54@@[(60@@)])]
[(54@@[(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(9@@)])])])][(53@@[(42@@)])])][(21@@)])]
[(54@@[(12@@[(44@@[(43@@)][(42@@)])])])]
[(54@@[(21@@)][(12@@[(44@@[(84@@[(43@@)][(43@@)])][(42@@)])][(21@@[(32@@[(42@@)][(42@@)])])][(53@@[(42@@)])])])]
[(54@@[(21@@[(7@@[(42@@)][(-1@@)][(32@@[(52@@)][(42@@)])])])][(12@@[(44@@[(43@@)][(42@@)])][(21@@[(32@@[(42@@)][(42@@[(45@@)][(42@@)])])])][(21@@[(7@@[(22@@[(52@@)][(42@@)])][(-1@@)][(42@@)])])])])]
[(6@@[(27@@[(27@@[(42@@)][(-1@@)][(34@@)])][(-1@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
[(6@@[(36@@[(27@@)])])]
[(6@@[(27@@)])]
[(6@@[(27@@[(42@@)][(-1@@)][(33@@)])])]
[(53@@[(14@@[(45@@)][(27@@[(45@@)][(-1@@)][(32@@[(42@@)][(42@@)])])])])]
[(53@@[(14@@[(32@@[(42@@[(27@@[(32@@)][(32@@[(42@@[(32@@[(42@@)][(42@@)])])])])])])])])]
[(53@@[(14@@[(27@@[(45@@)][(-1@@)][(42@@)][(45@@)])])])]
[(53@@[(14@@[(42@@)][(32@@[(42@@[(42@@)])])])])]
[(53@@)]
[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)][(45@@)][(42@@)])])])]
[(53@@[(14@@[(-2@@)][(43@@)][(27@@[(45@@)][(-1@@)][(42@@)])])])]
[(53@@[(14@@[(27@@[(45@@)])])])]
[(53@@[(14@@[(45@@)])])]
[(53@@[(42@@)])]
[(53@@[(14@@[(27@@[(32@@[(42@@)])])])])]
[(23@@[(83@@)][(43@@)][(59@@[(42@@)][(14@@[(-2@@)][(43@@)][(9@@)])])])]
[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(27@@[(42@@)][(-1@@)][(42@@)])])])]
[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(33@@)])])]
[(23@@[(83@@)][(83@@)][(83@@)][(5@@[(39@@)])][(59@@[(42@@)][(3@@[(5@@[(39@@)])][(4@@[(34@@)][(34@@)][(34@@)][(34@@)])])])])]
[(23@@[(59@@[(27@@[(45@@)][(45@@)][(45@@)])])])]
[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(74@@[(43@@)][(76@@)])])])])])]
[(23@@)]
[(23@@[(83@@)][(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(57@@)][(42@@)])])])]
[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(14@@[(-2@@)][(43@@)][(40@@[(42@@)][(42@@)])][(40@@[(42@@)][(42@@)])][(9@@)])][(32@@)][(42@@)])])])]
[(23@@[(83@@)][(83@@)][(83@@)][(39@@)][(59@@[(42@@)][(42@@)])])]
[(23@@[(59@@[(14@@[(45@@)])])])]
[(23@@[(83@@)][(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
[(23@@[(43@@)][(39@@)])]
[(23@@[(83@@)][(83@@)][(43@@)][(59@@[(42@@)][(32@@[(42@@)][(42@@[(32@@[(57@@)][(42@@)])])])])])]
[(23@@[(83@@)])]
[(23@@[(59@@[(32@@[(32@@[(14@@[(-2@@)][(43@@)][(34@@)][(40@@[(42@@)][(42@@)])][(9@@)][(9@@)])])])])])]
[(23@@[(59@@[(32@@[(32@@[(45@@)])])])])]
[(23@@[(83@@)][(74@@[(43@@)][(43@@)][(43@@)])][(59@@[(42@@)][(14@@[(-2@@)][(74@@[(43@@)][(43@@)][(43@@)])])])])]
Regular → Executable
+49 -1
View File
@@ -107,8 +107,51 @@
<version>4.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-core -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers-common -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>4.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
</dependencies>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.4.4.v20170414</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
@@ -149,3 +192,8 @@
</plugins>
</build>
</project>
<!--edu.lu.uni.serval.fixminer.Launcher
edu.lu.uni.serval.fixminer.akka.compare.CompareTrees
edu.lu.uni.serval.utils.ClusterToPattern
-->
+3 -2
View File
@@ -71,14 +71,15 @@ public class Launcher {
pairsPath = datasetPath + "/pairs";
dumpsName = "dumps-"+pjName+".rdb";
int iCursor = Integer.valueOf(cursor);
// jobType = "CACHE";
try {
switch (jobType) {
case "ENHANCEDASTDIFF":
EnhancedASTDiff.main(gumInput, gumOutput, numOfWorkers, pjName, eDiffTimeout,actionType,parallelism);
EnhancedASTDiff.main(gumInput, gumOutput, numOfWorkers, pjName, eDiffTimeout,actionType,parallelism,portDumps, dbDir, actionType+dumpsName);
break;
case "CACHE":
StoreEDiffInCache.main(gumOutput, portDumps, dbDir, actionType+dumpsName,actionType);
StoreEDiffInCache.main(gumOutput, portDumps, dbDir, actionType+dumpsName);
break;
case "SI":
// CalculatePairs.main(dbDir, actionType+dumpsName, portDumps, pairsPath+actionType, pjName+actionType,isBigPair,iCursor);
+2 -1
View File
@@ -22,7 +22,8 @@ public class TestTreeLoader {
// String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput/ENTESB/ASTDumps";
String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput2/";
// String inputPath = "/Users/anilkoyuncu/bugStudy/dataset/GumTreeOutput2/";
String inputPath ="/Users/anil.koyuncu/projects/fixminer-all/enhancedASTDiff/python/data/EnhancedASTDiffgumInput-old/AssertStatement";
File folder = new File(inputPath);
File[] listOfFiles = folder.listFiles();
Stream<File> stream = Arrays.stream(listOfFiles);
View File
@@ -0,0 +1,601 @@
package edu.lu.uni.serval.fixminer.akka;
//Import the Java utility classes
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
//Import the Apache Commons Maths library classes to handle the term-vectors from Apache Lucene
import org.apache.commons.math3.linear.ArrayRealVector;
import org.apache.commons.math3.linear.RealVector;
//Import the Apache Lucene classes
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.DocsEnum;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.MultiFields;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.search.similarities.DefaultSimilarity;
import org.apache.lucene.search.similarities.TFIDFSimilarity;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.Version;
import com.thoughtworks.xstream.core.util.Fields;
//A class to find the similarity of all text documents referenced in a text file
public class DocumentSimilarity {
private static final String CONTENT = "Content"; /*the name of the field stored by Apache Lucene which includes the text from the
text documents.*/
private Set<String> terms = new HashSet<>(); //changed state with new terms after each call to getTermFrequencies() method
private ArrayList<Integer> directoryIndex; //The Apache Lucene index for documents to mine for similarities
/* Indexed, tokenized, stored. */
public final FieldType TYPE_STORED = new FieldType(); //This is the field profiled by Apache Lucene to collect its term frequencies
private HashMap<String,Integer> termsCount; //stores the counts of all terms found in the corpus
private ArrayList<Integer> scannedDocs; //stores the IDs of docs already scanned and stored in termsCount
DocumentSimilarity(String lookupFile) {
//Initialise the field to profile in each document
TYPE_STORED.setIndexed(true);
TYPE_STORED.setTokenized(true);
TYPE_STORED.setStored(true);
TYPE_STORED.setStoreTermVectors(true);
TYPE_STORED.setStoreTermVectorPositions(true);
TYPE_STORED.freeze();
termsCount = new HashMap<String,Integer>();
scannedDocs = new ArrayList<Integer>();
try {
//initialise an in-memory (RAM-based) index of the documents in the input folder using Apache Lucene
Directory directory = createIndex(lookupFile);
IndexReader reader = DirectoryReader.open(directory);
String outputFile = "C:/Users/default/test/docs_similarity.csv"; /* the output file where the document similarities will be stored */
PrintWriter writer;
writer = new PrintWriter(outputFile, "UTF-8");
writer.println("doc1,doc2,similarity");
//loop on the documents in the folder and compare them together
for (int i=0; i<directoryIndex.size(); i++) {
for (int j=i+1; j<directoryIndex.size(); j++) {
Map<String, Double> f1 = getTermFrequencies(reader, i); //get the term frequencies profile of the first document
RealVector v1 = toRealVector(f1); //convert term frequencies profile to a vector
Map<String, Double> f2 = getTermFrequencies2(reader, j); //get the term frequencies profile of the second document
RealVector v2 = toRealVector(f2); //convert term frequencies profile to a vector
double sim = getCosineSimilarity(v1, v2); //compute the cosine similarity of the documents pair using their terms frequencies profiles
writer.println(directoryIndex.get(i)+","+directoryIndex.get(j)+","+sim); //write the similarity to an output CSV file
}
terms = new HashSet<>();
}
reader.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
writeTermsCount();
}
//A method to initialise an in-memory (RAM-based) index of the documents in the input file using Apache Lucene
Directory createIndex(String lookupFile) {
try {
Directory directory = new RAMDirectory();
/* Initialize the analyzer which profiles the text inside the documents. This analyser does all the pre-processing of the
* text including stop-word removal, tokenization, etc. depending on the type of analyzer used.
* Check the reference website for different types of analyzers: https://www.tutorialspoint.com/lucene/lucene_analysis.htm
*/
Analyzer analyzer = new SimpleAnalyzer(Version.LUCENE_CURRENT); //create a new SimpleAnalyzer
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_CURRENT,
analyzer);
IndexWriter writer = new IndexWriter(directory, iwc); //write the index of the documents with their analysis in-memory
int did=1; //documents are numbered by a document ID as 1,2,3...n in a lookup file of the documents to be indexed
BufferedReader dsLookup;
dsLookup = new BufferedReader(new FileReader(lookupFile));
String ds; //The document number in each line
ArrayList<Integer> directoryIndex = new ArrayList<Integer>();
while ((ds = dsLookup.readLine()) != null) {
//Set the document id to the string read from the line in lookup file
try {
String documentText = ""; //stores the text from the document
FileReader fr = new FileReader(did+".txt");
BufferedReader br = new BufferedReader(fr);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
documentText += (sCurrentLine);
}
//add the document to the index
addDocument(writer, documentText);
directoryIndex.add(did);
} catch (Exception e) {
System.out.println("!!! Document "+did+" has an error and was skipped !!!");
continue;
}
}
writer.close();
this.directoryIndex = directoryIndex;
return directory;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//a method to add a document to the index by writing its text as a "content" field in Apache Lucene
void addDocument(IndexWriter writer, String content) {
try {
Document doc = new Document(); //create a new Apache Lucene document
Field field = new Field(CONTENT, content, TYPE_STORED); //Add the field with the text content to the index
doc.add(field);
writer.addDocument(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
//a method to get the cosine similarity between two term-frequency vectors from a pair of documents
public double getCosineSimilarity(RealVector v1, RealVector v2) {
return (v1.dotProduct(v2)) / (v1.getNorm() * v2.getNorm());
}
//a method to get the term frequencies from a document
Map<String, Double> getTermFrequencies(IndexReader reader, int docId) {
try {
Terms vector = reader.getTermVector(docId, CONTENT);
TermsEnum termsEnum = null;
termsEnum = vector.iterator(termsEnum);
Map<String, Double> frequencies = new HashMap<>();
BytesRef text = null;
TFIDFSimilarity tfidfSim = new DefaultSimilarity();
boolean scannedDoc = scannedDocs.contains(docId);
while ((text = termsEnum.next()) != null) {
String term = text.utf8ToString();
org.apache.lucene.index.Fields fields = reader.getTermVectors(0);
Term termInstance = new Term("Content", term);
long indexDf = reader.docFreq(termInstance);
int docCount = reader.numDocs();
//increment the term count in the terms count lookup if doc not scanned before
if(!scannedDoc) {
if(termsCount.containsKey(termInstance.toString())) {
Integer cnt = termsCount.get(termInstance.toString());
cnt++;
termsCount.replace(termInstance.toString(), cnt);
} else {
termsCount.put(termInstance.toString(), 1);
}
}
DocsEnum docs = termsEnum.docs(MultiFields.getLiveDocs(reader),null,0);
//calculate the TF-IDF of the term, as compared to all documents in the corpus (the Apache Lucene Index)
double tfidf = 0.0;
while(docs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
tfidf = tfidfSim.tf(docs.freq()) * tfidfSim.idf(docCount, indexDf);
}
frequencies.put(term, tfidf);
scannedDocs.add(docId);
terms.add(term);
}
return frequencies;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Map<String, Double> getTermFrequencies2(IndexReader reader, int docId) {
try {
Terms vector = reader.getTermVector(docId, CONTENT);
TermsEnum termsEnum = null;
termsEnum = vector.iterator(termsEnum);
Map<String, Double> frequencies = new HashMap<>();
BytesRef text = null;
TFIDFSimilarity tfidfSim = new DefaultSimilarity();
boolean scannedDoc = scannedDocs.contains(docId);
int docCount = reader.numDocs();
while ((text = termsEnum.next()) != null) {
String term = text.utf8ToString();
Term termInstance = new Term("Content", term);
long indexDf = reader.docFreq(termInstance);
//increment the term count in the terms count lookup if doc not scanned before
if(!scannedDoc) {
if(termsCount.containsKey(termInstance.toString())) {
Integer cnt = termsCount.get(termInstance.toString());
cnt++;
termsCount.replace(termInstance.toString(), cnt);
} else {
termsCount.put(termInstance.toString(), 1);
}
}
DocsEnum docs = termsEnum.docs(MultiFields.getLiveDocs(reader),null,0);
double tfidf = 0.0;
while(docs.nextDoc() != DocsEnum.NO_MORE_DOCS) {
tfidf = tfidfSim.tf(docs.freq()) * tfidfSim.idf(docCount, indexDf);
}
frequencies.put(term, tfidf);
scannedDocs.add(docId);
}
return frequencies;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//convert the term-frequencies extracted to a real vector
RealVector toRealVector(Map<String, Double> map) {
RealVector vector = new ArrayRealVector(terms.size());
int i = 0;
for (String term : terms) {
double value = map.containsKey(term) ? map.get(term) : 0.0;
vector.setEntry(i++, value);
}
return (RealVector) vector.mapDivide(vector.getL1Norm());
}
//Write the terms-frequencies from the documents to a CSV file
private void writeTermsCount() {
try {
String outputFile = "C:/Users/default/test/document_terms_count.csv";
PrintWriter writer;
writer = new PrintWriter(outputFile, "UTF-8");
writer.println("term,count");
for (String key : termsCount.keySet()) {
writer.println(key+","+termsCount.get(key));
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//MAIN class to execute with the .txt-file lookup of the documents to index
public static void main(String[] args) {
new DocumentSimilarity("documents_lookup.txt");
}
}
+45 -14
View File
@@ -26,19 +26,19 @@ public class AkkaTreeParser {
switch (parallelism){
case "AKKA":
ActorSystem system = null;
ActorRef parsingActor = null;
final TreeMessage msg = new TreeMessage(0,listOfPairs, innerPool,outerPool,eDiffTimeout);
try {
log.info("Akka begins...");
system = ActorSystem.create("Compare-EnhancedDiff-System");
parsingActor = system.actorOf(TreeActor.props(Integer.valueOf(numOfWorkers)), "mine-fix-pattern-actor");
parsingActor.tell(msg, ActorRef.noSender());
} catch (Exception e) {
system.shutdown();
e.printStackTrace();
}
// ActorSystem system = null;
// ActorRef parsingActor = null;
// final TreeMessage msg = new TreeMessage(0,listOfPairs, innerPool,outerPool,eDiffTimeout);
// try {
// log.info("Akka begins...");
// system = ActorSystem.create("Compare-EnhancedDiff-System");
//
// parsingActor = system.actorOf(TreeActor.props(Integer.valueOf(numOfWorkers)), "mine-fix-pattern-actor");
// parsingActor.tell(msg, ActorRef.noSender());
// } catch (Exception e) {
// system.shutdown();
// e.printStackTrace();
// }
break;
case "FORKJOIN":
int counter = new Object() {
@@ -70,6 +70,15 @@ public class AkkaTreeParser {
}
public static List<String> getRMessages(JedisPool innerPool, int cursor){
try (Jedis inner = innerPool.getResource()) {
while (!inner.ping().equals("PONG")){
log.info("wait");
}
List<String> pairs = inner.srandmember("pairs", cursor);
return pairs;
}
}
public static List<String> getMessages(JedisPool innerPool, int cursor){
@@ -81,7 +90,6 @@ public class AkkaTreeParser {
while (!inner.ping().equals("PONG")){
log.info("wait");
}
ScanParams sc = new ScanParams();
//150000000
log.info("Scanning ");
@@ -91,6 +99,7 @@ public class AkkaTreeParser {
// sc.match("pair_[0-9]*");
scan = inner.scan("0", sc);
int size = scan.getResult().size();
log.info("Scanned " + String.valueOf(size));
}
@@ -102,5 +111,27 @@ public class AkkaTreeParser {
}
public static String getMessage(JedisPool innerPool){
ScanResult<String> scan;
try (Jedis inner = innerPool.getResource()) {
while (!inner.ping().equals("PONG")){
log.info("wait");
}
String myset = inner.spop("pairs");
return myset;
}
}
}
View File
+289 -150
View File
@@ -1,22 +1,29 @@
package edu.lu.uni.serval.fixminer.akka.compare;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import com.github.gumtreediff.actions.ActionGenerator;
import com.github.gumtreediff.actions.model.Action;
import com.github.gumtreediff.matchers.Matcher;
import com.github.gumtreediff.matchers.Matchers;
import com.github.gumtreediff.tree.ITree;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import org.apache.commons.text.similarity.JaroWinklerDistance;
import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static edu.lu.uni.serval.fixminer.jobs.MultiThreadTreeLoaderCluster3.getNames;
@@ -29,168 +36,300 @@ public class CompareTrees {
private static Logger log = LoggerFactory.getLogger(CompareTrees.class);
public static void main(String[] args) throws IOException {
public static void main(String[] args) throws Exception {
String portInner = "6380";
String port = "6399";
CallShell cs = new CallShell();
String cmd = "bash "+args[1] + "/" + "startServer.sh" +" %s %s %s";
cmd = String.format(cmd, args[1],args[2],Integer.valueOf(port));
log.info(cmd);
cs.runShell(cmd, port);
String cmdInner = "bash "+args[1] + "/" + "startServer.sh" +" %s %s %s";
cmdInner = String.format(cmdInner, args[1],args[3],Integer.valueOf(portInner));
log.info(cmdInner);
cs.runShell(cmdInner, portInner);
String numOfWorkers = "100000000";//args[4];
String host = "localhost";//args[5];
// -Djava.util.concurrent.ForkJoinPool.common.parallelism=256
final JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(portInner),20000000);
final JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), host,Integer.valueOf(port),20000000);
List<String> listOfPairs = AkkaTreeParser.getMessages(innerPool,Integer.valueOf(numOfWorkers));
// String pair = AkkaTreeParser.getMessage(innerPool);
// ActorSystem system = null;
// ActorRef parsingActor = null;
// final TreeMessage msg = new TreeMessage(0,listOfPairs, innerPool,outerPool,timeout,args[0]);
// try {
// log.info("Akka begins...");
// Config load = ConfigFactory.load();
// system = ActorSystem.create("Compare-EnhancedDiff-System");
//
JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
List<String> listOfPairs = AkkaTreeParser.getMessages(innerPool,100000000);
// listOfPairs.stream().parallel().
int counter = new Object() {
int counter = 0;
{
listOfPairs.parallelStream().
peek(x -> counter++).
forEach(m ->
{
// Compare compare = new Compare();
coreCompare(m, args[0],innerPool, outerPool);
if (counter % 1000 == 0) {
log.info("Finalized parsing " + counter + " files... remaing " + (listOfPairs.size() - counter));
}
}
);
}
}.counter;
// coreCompare(args[0],args[1],args[2],args[3]);
}
public static void coreCompare(String pairName, String treeType,JedisPool innerPool,JedisPool outerPool ) {
// String portInner = "6380";
// String port = "6399";
// JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
// parsingActor = system.actorOf(TreeActor.props(Integer.valueOf(numOfWorkers)), "mine-fix-pattern-actor");
// parsingActor.tell(msg, ActorRef.noSender());
// } catch (Exception e) {
// system.shutdown();
// e.printStackTrace();
// }
// try {
// coreCompare(pair, args[0], innerPool, outerPool);
// } catch (Exception e) {
// try (Jedis inner = innerPool.getResource()) {
//
// JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
Map<String, String> resultMap;
Jedis jedis = null;
ITree oldTree = null;
ITree newTree = null;
try {
jedis = innerPool.getResource();
String[] split = pairName.split("_");
String i = split[1];
String j = split[2];
String keyName = split[0];
switch (treeType) {
case "shape":
oldTree = EDiffHelper.getShapes(keyName, i, outerPool);
newTree = EDiffHelper.getShapes(keyName, j, outerPool);
break;
case "action":
oldTree = EDiffHelper.getActions(keyName, i, outerPool,innerPool);
newTree = EDiffHelper.getActions(keyName, j, outerPool,innerPool);
break;
case "token":
oldTree = EDiffHelper.getTokens(keyName, i, outerPool,innerPool);
newTree = EDiffHelper.getTokens(keyName, j, outerPool,innerPool);
List<String> oldTokens = new ArrayList<>();
List<String> newTokens = new ArrayList<>();
// inner.sadd("pairs",pair);
//
//
// }
// }
ArrayList<String> samePairs = new ArrayList<>();
ArrayList<String> errorPairs = new ArrayList<>();
listOfPairs.stream().parallel().forEach(m->coreCompare(m, args[0],innerPool, outerPool,samePairs,errorPairs));
oldTokens = getNames(oldTree,oldTokens);
newTokens = getNames(newTree,newTokens);
CharSequence[] oldSequences = oldTokens.toArray(new CharSequence[oldTokens.size()]);
CharSequence[] newSequences = newTokens.toArray(new CharSequence[newTokens.size()]);
JaroWinklerDistance jwd = new JaroWinklerDistance();
Double overallSimi = Double.valueOf(0);
if(oldSequences.length > 0 && (oldSequences.length == newSequences.length)){
for (int idx = 0; idx < newSequences.length; idx++) {
Double simi = jwd.apply(newSequences[idx], oldSequences[idx]);
overallSimi = simi + overallSimi;
}
overallSimi = overallSimi / oldSequences.length;
}else{
overallSimi = Double.valueOf(0);
// if(oldSequences.length != 0) {
// log.info("ERROR");
// }
}
int retval = Double.compare(overallSimi, Double.valueOf(0.8));
String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
if(retval >= 0){
String result = i + "," + j + ","+String.join(",", oldTokens);
jedis.select(2);
jedis.set(matchKey, result);
}
jedis.select(0);
jedis.del(matchKey);
return;
default:
break;
}
Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
m.match();
ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings());
ag.generate();
List<Action> actions = ag.getActions();
double chawatheSimilarity1 = m.chawatheSimilarity(oldTree, newTree);
String chawatheSimilarity = String.format("%1.2f", chawatheSimilarity1);
double diceSimilarity1 = m.diceSimilarity(oldTree, newTree);
String diceSimilarity = String.format("%1.2f", diceSimilarity1);
double jaccardSimilarity1 = m.jaccardSimilarity(oldTree, newTree);
String jaccardSimilarity = String.format("%1.2f", jaccardSimilarity1);
String editDistance = String.valueOf(actions.size());
String result = i + "," + j + "," + chawatheSimilarity + "," + diceSimilarity + "," + jaccardSimilarity + "," + editDistance;
String matchKey = keyName+"_" + (String.valueOf(i)) + "_" + String.valueOf(j);
if (((Double) chawatheSimilarity1).equals(1.0) || ((Double) diceSimilarity1).equals(1.0)
|| ((Double) jaccardSimilarity1).equals(1.0) || actions.size() == 0) {
// log.info("{} tagged to be similar" ,matchKey);
jedis.select(2);
jedis.set(matchKey, result);
}
// int size = samePairs.size();
try (Jedis jedis = innerPool.getResource()) {
// jedis.select(2);
// for (String samePair : samePairs) {
// jedis.set(samePair,"1");
// }
jedis.select(0);
jedis.del(matchKey);
} catch (Exception e) {
log.debug("{} not comparable", pairName);
// e.printStackTrace();
}finally {
if (jedis != null) {
jedis.close();
jedis.flushDB();
for (String errorPair : errorPairs) {
jedis.hset(errorPair, "0", "1");
}
}
log.info("End process");
// listOfPairs.parallelStream().forEach(m->coreCompare(m, args[0],innerPool, outerPool));
// for (String listOfPair : listOfPairs) {
// coreCompare(listOfPair, args[0],innerPool, outerPool);
// }
// int counter = new Object() {
// int counter = 0;
//
// {
//
// listOfPairs.parallelStream().
// peek(x -> counter++).
// forEach(m ->
// {
//// Compare compare = new Compare();
// coreCompare(m, args[0],innerPool, outerPool);
// if (counter % 1000 == 0) {
// log.info("Finalized parsing " + counter + " files... remaing " + (listOfPairs.size() - counter));
// }
// }
// );
// }
// }.counter;
// coreCompare(args[0],args[1],args[2],args[3]);
}
public static void coreCompare(String pairName, String treeType,JedisPool innerPool,JedisPool outerPool,ArrayList<String> samePairs,ArrayList<String> errorPairs ) {
// if (samePairs.size() % 1000 == 0) {
// log.info("Same pairs size "+samePairs.size());
// }
ITree oldTree = null;
ITree newTree = null;
Pair<ITree, HierarchicalActionSet> oldPair = null;
Pair<ITree, HierarchicalActionSet> newPair = null;
String matchKey = null;
try {
String[] split = pairName.split("_");
String i = split[1];
String j = split[2];
String keyName = split[0];
matchKey = keyName + "_" + (String.valueOf(i)) + "_" + String.valueOf(j);
// jedis.select(0);
// Set<String> keys = jedis.keys(matchKey);
// if (keys.size() > 0) {
// jedis.del(matchKey);
// } else {
// return;
// }
// jedis.srem("pairs",matchKey);
switch (treeType) {
case "shape":
oldTree = EDiffHelper.getShapes(keyName, i, outerPool, innerPool);
newTree = EDiffHelper.getShapes(keyName, j, outerPool, innerPool);
break;
case "action":
oldPair = EDiffHelper.getActions(keyName, i, outerPool, innerPool);
newPair = EDiffHelper.getActions(keyName, j, outerPool, innerPool);
oldTree = oldPair.getValue0();
newTree = newPair.getValue0();
break;
case "token":
oldTree = EDiffHelper.getTokens(keyName, i, outerPool, innerPool);
newTree = EDiffHelper.getTokens(keyName, j, outerPool, innerPool);
String oldTokens = EDiffHelper.getNames2(oldTree);
String newTokens = EDiffHelper.getNames2(newTree);
JaroWinklerDistance jwd = new JaroWinklerDistance();
Double overallSimi = Double.valueOf(0);
if (!(oldTokens.trim().isEmpty() || newTokens.trim().isEmpty())) {
overallSimi = jwd.apply(oldTokens, newTokens);
}
int retval = Double.compare(overallSimi, Double.valueOf(1));
if (retval >= 0) {
String result = i + "," + j + "," + String.join(",", oldTokens);
// jedis.select(2);
// jedis.set(matchKey, result);
try (Jedis jedis = innerPool.getResource()) {
// jedis.del(matchKey);
jedis.select(2);
jedis.set(matchKey, result);
}
// samePairs.add(matchKey);
// try (Jedis jedis = innerPool.getResource()) {
//// jedis.del(matchKey);
// jedis.select(2);
// jedis.set(matchKey, result);
// }
}
// jedis.select(0);
//// jedis.srem("pairs",matchKey);
// jedis.del(matchKey);
return;
default:
break;
}
if(oldTree.toStaticHashString().equals(newTree.toStaticHashString())){
String editDistance = "0";
String result = i + "," + j + "," + editDistance;
if (editDistance.equals("0")) {
if (treeType.equals("action")) {
HierarchicalActionSet oldProject = oldPair.getValue1();
HierarchicalActionSet newProject = newPair.getValue1();
oldTree = EDiffHelper.getTargets(oldProject);
newTree = EDiffHelper.getTargets(newProject);
if (oldTree.toStaticHashString().equals(newTree.toStaticHashString())) {
try (Jedis jedis = innerPool.getResource()) {
// jedis.del(matchKey);
jedis.select(2);
jedis.set(matchKey, result);
}
}
} else {
try (Jedis jedis = innerPool.getResource()) {
// jedis.del(matchKey);
jedis.select(2);
jedis.set(matchKey, result);
}
}
}
}
// if(oldTree.toString().equals(newTree.toString())) {
// Matcher m = Matchers.getInstance().getMatcher(oldTree, newTree);
// m.match();
//
//
// ActionGenerator ag = new ActionGenerator(oldTree, newTree, m.getMappings());
// ag.generate();
// List<Action> actions = ag.getActions();
//
//
// String editDistance;
//
// editDistance = String.valueOf(actions.size());
// String result = i + "," + j + "," + editDistance;
//
//
// if (editDistance.equals("0")) {
//
// if (treeType.equals("action")) {
//
// HierarchicalActionSet oldProject = oldPair.getValue1();
// HierarchicalActionSet newProject = newPair.getValue1();
//
// oldTree = EDiffHelper.getTargets(oldProject);
// newTree = EDiffHelper.getTargets(newProject);
//
// if(oldTree.toString().equals(newTree.toString())) {
// m = Matchers.getInstance().getMatcher(oldTree, newTree);
// m.match();
//
//
// ag = new ActionGenerator(oldTree, newTree, m.getMappings());
// ag.generate();
// actions = ag.getActions();
//
// editDistance = String.valueOf(actions.size());
//
// if (editDistance.equals("0")) {
// try (Jedis jedis = innerPool.getResource()) {
// jedis.del(matchKey);
// jedis.select(2);
// jedis.set(matchKey, result);
// }
// }
// }
//
//
// } else {
// try (Jedis jedis = innerPool.getResource()) {
// jedis.del(matchKey);
// jedis.select(2);
// jedis.set(matchKey, result);
// }
//// jedis.select(2);
//// jedis.set(matchKey, result);
//// samePairs.add(matchKey);
// }
//
// }
// }
} catch (Exception e) {
errorPairs.add(matchKey);
// jedis.select(0);
//// jedis.srem("pairs",matchKey);
//
// jedis.hset(matchKey, "0", "1");
log.debug("{} not comparable", pairName);
}
}
+6 -4
View File
@@ -7,17 +7,19 @@ public class RunnableCompare implements Runnable {
private String name;
private JedisPool innerPool;
private JedisPool outerPool;
private Compare comparer;
private CompareTrees comparer;
private String type;
public RunnableCompare(String name , JedisPool innerPool, JedisPool outerPool, Compare comp) {
public RunnableCompare(String name , JedisPool innerPool, JedisPool outerPool,String type) {
this.name = name;
this.innerPool = innerPool;
this.outerPool = outerPool;
this.comparer = comp;
this.type = type;
}
@Override
public void run() {
comparer.coreCompare(name, innerPool, outerPool);
// comparer.coreCompare(name,type, innerPool, outerPool);
}
}
+4 -2
View File
@@ -4,6 +4,7 @@ import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
import akka.routing.BalancingPool;
import akka.routing.RoundRobinPool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,7 +22,7 @@ public class TreeActor extends UntypedActor {
public TreeActor(int numberOfWorkers) {
mineRouter = this.getContext().actorOf(new RoundRobinPool(numberOfWorkers)
mineRouter = this.getContext().actorOf(new BalancingPool(numberOfWorkers)
.props(TreeWorker.props()), "tree-router");
this.numberOfWorkers = numberOfWorkers;
}
@@ -47,6 +48,7 @@ public class TreeActor extends UntypedActor {
List<String> pairs = ((TreeMessage) message).getName();
JedisPool innerPool = ((TreeMessage) message).getInnerPool();
JedisPool outerPool = ((TreeMessage) message).getOuterPool();
String type = ((TreeMessage) message).getType();
int size = pairs.size();
@@ -60,7 +62,7 @@ public class TreeActor extends UntypedActor {
int toIndex = (i + 1) * average + counter;
List<String> pairsOfWorkers = pairs.subList(fromIndex, toIndex);
final TreeMessage workMsg = new TreeMessage(i + 1, pairsOfWorkers,innerPool,outerPool,((TreeMessage) message).getSECONDS_TO_WAIT());
final TreeMessage workMsg = new TreeMessage(i + 1, pairsOfWorkers,innerPool,outerPool,((TreeMessage) message).getSECONDS_TO_WAIT(),type);
mineRouter.tell(workMsg, getSelf());
logger.info("Assign {} task to worker #" + (i + 1) + "...",pairsOfWorkers.size());
}
+14 -3
View File
@@ -13,21 +13,32 @@ public class TreeMessage extends BaseMessage{
private JedisPool innerPool;
private JedisPool outerPool;
public String getType() {
return type;
}
public TreeMessage(int id, List<String> name, JedisPool innerPool, JedisPool outerPool,String eDiffTimeout) {
public void setType(String type) {
this.type = type;
}
private String type;
public TreeMessage(int id, List<String> name, JedisPool innerPool, JedisPool outerPool,String eDiffTimeout,String treeType) {
super(id,new Long(eDiffTimeout));
this.name = name;
this.innerPool = innerPool;
this.outerPool = outerPool;
this.type = treeType;
}
public TreeMessage(int id, List<String> name, JedisPool innerPool, JedisPool outerPool,Long eDiffTimeout) {
public TreeMessage(int id, List<String> name, JedisPool innerPool, JedisPool outerPool,Long eDiffTimeout,String treeType) {
super(id,eDiffTimeout);
this.name = name;
this.innerPool = innerPool;
this.outerPool = outerPool;
this.type = treeType;
}
+7 -4
View File
@@ -41,6 +41,7 @@ public class TreeWorker extends UntypedActor {
List<String> files = msg.getName();
JedisPool innerPool = msg.getInnerPool();
JedisPool outerPool = msg.getOuterPool();
String type = msg.getType();
int id = msg.getId();
int counter = 0;
@@ -49,19 +50,21 @@ public class TreeWorker extends UntypedActor {
{
Compare compare = new Compare();
final ExecutorService executor = Executors.newSingleThreadExecutor();
final ExecutorService executor = Executors.newFixedThreadPool(1);
// // schedule the work
final Future<?> future = executor.submit(new RunnableCompare(name, innerPool, outerPool, compare));
final Future<?> future = executor.submit(new RunnableCompare(name, innerPool, outerPool,type));
try {
// wait for task to complete
future.get(msg.getSECONDS_TO_WAIT(), TimeUnit.SECONDS);
counter++;
if (counter % 100 == 0) {
if (counter % 1000 == 0) {
log.info("Worker #" + id +" finalized parsing " + counter + " pairs... remaing "+ (files.size() - counter));
}
} catch (TimeoutException e) {
future.cancel(true);
System.err.println("#Timeout: " + name);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
+1 -1
View File
@@ -54,7 +54,7 @@ public class EDiffActor extends UntypedActor {
int toIndex = (i + 1) * average + counter;
List<MessageFile> filesOfWorkers = files.subList(fromIndex, toIndex);
final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers,((EDiffMessage) message).getSECONDS_TO_WAIT(),((EDiffMessage) message).getActionType());
final EDiffMessage workMsg = new EDiffMessage(i + 1, filesOfWorkers,((EDiffMessage) message).getSECONDS_TO_WAIT(),((EDiffMessage) message).getInnerPool());
mineRouter.tell(workMsg, getSelf());
logger.info("Assign {} task to worker #" + (i + 1) ,filesOfWorkers.size());
}
+28 -12
View File
@@ -4,9 +4,13 @@ import com.github.gumtreediff.actions.model.Delete;
import com.github.gumtreediff.actions.model.Insert;
import com.github.gumtreediff.actions.model.Move;
import com.github.gumtreediff.actions.model.Update;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.FileHelper;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@@ -21,7 +25,7 @@ public class EDiffHunkParser extends EDiffParser {
@Override
public void parseFixPatterns(File prevFile, File revFile, File diffentryFile,String project,String actionType) {
public void parseFixPatterns(File prevFile, File revFile, File diffentryFile, String project, JedisPool innerPool) {
List<HierarchicalActionSet> actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile);
if (actionSets.size() != 0) {
// String folder= null;
@@ -73,8 +77,9 @@ public class EDiffHunkParser extends EDiffParser {
try {
String astNodeType = actionSet.getAstNodeType();
int size = actionSet.toString().split("\\n").length;
// int size = actionSet.toString().split("\\n").length;
actionSet.toString();
int size = actionSet.getActionSize();
// int size = actionSet.strList.size();
String datasetName = project;
@@ -82,19 +87,30 @@ public class EDiffHunkParser extends EDiffParser {
String root = split1[0];
String pj = split1[1].split("/")[1];
File file = new File(root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/");
file.mkdirs();
String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
// File file = new File(root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/");
// file.mkdirs();
// String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/"+astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
// String hunkTreeFileName = root + "EnhancedASTDiff" + datasetName + "/" + pj + folder + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
f = new FileOutputStream(new File(hunkTreeFileName));
ObjectOutputStream o = new ObjectOutputStream(f);
o.writeObject(actionSet);
o.close();
f.close();
// f = new FileOutputStream(new File(hunkTreeFileName));
// ObjectOutputStream o = new ObjectOutputStream(f);
// o.writeObject(actionSet);
//
// o.close();
// f.close();
// String name = f.getName();
String key = astNodeType+"/"+String.valueOf(size)+"/" + pj +"_" + diffentryFile.getName() + "_" + String.valueOf(hunkSet);
try (Jedis inner = innerPool.getResource()) {
inner.set(key.getBytes(), EDiffHelper.toByteArray(actionSet));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
} catch (Exception e) {
e.printStackTrace();
}
hunkSet++;
+15 -2
View File
@@ -1,6 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
import edu.lu.uni.serval.fixminer.akka.BaseMessage;
import redis.clients.jedis.JedisPool;
import java.util.List;
@@ -13,19 +14,31 @@ public class EDiffMessage extends BaseMessage{
private String actionType;
public JedisPool getInnerPool() {
return innerPool;
}
public void setInnerPool(JedisPool innerPool) {
this.innerPool = innerPool;
}
private JedisPool innerPool;
public EDiffMessage(int id, List<MessageFile> msgFiles,String eDiffTimeout,String actionType) {
public EDiffMessage(int id, List<MessageFile> msgFiles,String eDiffTimeout,JedisPool pool) {
super(id,new Long(eDiffTimeout));
this.msgFiles = msgFiles;
this.actionType = actionType;
this.innerPool = pool;
}
public EDiffMessage(int id, List<MessageFile> msgFiles,Long eDiffTimeout,String actionType) {
public EDiffMessage(int id, List<MessageFile> msgFiles,Long eDiffTimeout,JedisPool pool) {
super(id,eDiffTimeout);
this.msgFiles = msgFiles;
this.actionType = actionType;
this.innerPool = pool;
}
public String getActionType() {
+2 -1
View File
@@ -3,6 +3,7 @@ package edu.lu.uni.serval.fixminer.akka.ediff;
import com.github.gumtreediff.actions.model.Action;
import edu.lu.uni.serval.gumtree.GumTreeComparer;
import edu.lu.uni.serval.utils.ListSorter;
import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.ArrayList;
@@ -62,7 +63,7 @@ public class EDiffParser extends Parser {
}
@Override
public void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, String actionType) {
public void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool) {
}
+4 -2
View File
@@ -5,6 +5,7 @@ import akka.actor.UntypedActor;
import akka.japi.Creator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.List;
@@ -41,7 +42,8 @@ public class EDiffWorker extends UntypedActor {
int id = msg.getId();
int counter = 0;
JedisPool innerPool = msg.getInnerPool();
for (MessageFile msgFile : files) {
File revFile = msgFile.getRevFile();
File prevFile = msgFile.getPrevFile();
@@ -53,7 +55,7 @@ public class EDiffWorker extends UntypedActor {
final ExecutorService executor = Executors.newSingleThreadExecutor();
// schedule the work
final Future<?> future = executor.submit(new RunnableParser(prevFile, revFile, diffentryFile, parser,project,msg.getActionType()));
final Future<?> future = executor.submit(new RunnableParser(prevFile, revFile, diffentryFile, parser,project,msg.getInnerPool()));
try {
// wait for task to complete
future.get(msg.getSECONDS_TO_WAIT(), TimeUnit.SECONDS);
@@ -171,6 +171,10 @@ public class HierarchicalActionSet implements Comparable<HierarchicalActionSet>,
private List<String> strList = new ArrayList<>();
public int getActionSize(){
return strList.size();
}
@Override
public String toString() {
String str = actionString;
+1 -1
View File
@@ -187,7 +187,7 @@ public class HierarchicalRegrouper {
if (action instanceof Addition) {
parent = ((Addition) action).getParent(); // parent in the fixed source code tree
}
if (parent.getType() == 55) {
int type = action.getNode().getType();
// Modifier, NormalAnnotation, MarkerAnnotation, SingleMemberAnnotation
View File
+3 -1
View File
@@ -1,5 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
import redis.clients.jedis.JedisPool;
import java.io.File;
/**
@@ -18,7 +20,7 @@ public abstract class Parser implements ParserInterface {
protected String originalTree = ""; // Guide of generating patches.
protected String actionSets = ""; // Guide of generating patches.
public abstract void parseFixPatterns(File prevFile, File revFile, File diffEntryFile,String project,String actionType);
public abstract void parseFixPatterns(File prevFile, File revFile, File diffEntryFile, String project, JedisPool innerPool);
@Override
+6 -4
View File
@@ -1,5 +1,7 @@
package edu.lu.uni.serval.fixminer.akka.ediff;
import redis.clients.jedis.JedisPool;
import java.io.File;
public class RunnableParser implements Runnable {
@@ -9,7 +11,7 @@ public class RunnableParser implements Runnable {
private File diffentryFile;
private Parser parser;
private String project;
private String actionType;
private JedisPool pool;
public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser) {
this.prevFile = prevFile;
@@ -18,17 +20,17 @@ public class RunnableParser implements Runnable {
this.parser = parser;
}
public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser,String project,String actionType) {
public RunnableParser(File prevFile, File revFile, File diffentryFile, Parser parser, String project, JedisPool innerPool) {
this.prevFile = prevFile;
this.revFile = revFile;
this.diffentryFile = diffentryFile;
this.parser = parser;
this.project = project;
this.actionType= actionType;
this.pool = innerPool;
}
@Override
public void run() {
parser.parseFixPatterns(prevFile, revFile, diffentryFile,project,actionType);
parser.parseFixPatterns(prevFile, revFile, diffentryFile,project,pool);
}
}
View File
View File
+54 -39
View File
@@ -6,9 +6,12 @@ import edu.lu.uni.serval.fixminer.akka.ediff.EDiffActor;
import edu.lu.uni.serval.fixminer.akka.ediff.EDiffHunkParser;
import edu.lu.uni.serval.fixminer.akka.ediff.EDiffMessage;
import edu.lu.uni.serval.fixminer.akka.ediff.MessageFile;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.JedisPool;
import java.io.File;
import java.util.ArrayList;
@@ -21,12 +24,20 @@ public class EnhancedASTDiff {
private static Logger log = LoggerFactory.getLogger(EnhancedASTDiff.class);
public static void main(String inputPath, String outputPath, String numOfWorkers, String project, String eDiffTimeout, String actionType, String parallelism) {
public static void main(String inputPath, String outputPath, String numOfWorkers, String project, String eDiffTimeout, String actionType, String parallelism, String portInner, String dbDir, String chunkName) throws Exception {
String parameters = String.format("\nInput path %s \nOutput path %s",inputPath,outputPath);
log.info(parameters);
CallShell cs = new CallShell();
String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
cmd = String.format(cmd, dbDir,chunkName,Integer.valueOf(portInner));
cs.runShell(cmd, portInner);
JedisPool innerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(portInner),20000000);
File folder = new File(inputPath);
File[] listOfFiles = folder.listFiles();
Stream<File> stream = Arrays.stream(listOfFiles);
@@ -41,10 +52,11 @@ public class EnhancedASTDiff {
List<MessageFile> msgFiles = getMessageFiles(target.toString() + "/"); //"/Users/anilkoyuncu/bugStudy/code/python/GumTreeInput/Apache/CAMEL/"
allMessageFiles.addAll(msgFiles);
// System.out.println(msgFiles.size());
if (msgFiles.size() == 0)
if (msgFiles == null)
continue;
allMessageFiles.addAll(msgFiles);
String GUM_TREE_OUTPUT = outputPath + "/" + pjName + "/";
@@ -65,7 +77,7 @@ public class EnhancedASTDiff {
case "AKKA":
ActorSystem system = null;
ActorRef parsingActor = null;
final EDiffMessage msg = new EDiffMessage(0, allMessageFiles,eDiffTimeout,actionType);
final EDiffMessage msg = new EDiffMessage(0, allMessageFiles,eDiffTimeout,innerPool);
try {
log.info("Akka begins...");
log.info("{} files to process ...", allMessageFiles.size());
@@ -79,25 +91,25 @@ public class EnhancedASTDiff {
}
break;
case "FORKJOIN":
int counter = new Object() {
int counter = 0;
{
allMessageFiles.stream().
parallel().
peek(x -> counter++).
forEach(m ->
{
EDiffHunkParser parser = new EDiffHunkParser();
parser.parseFixPatterns(m.getPrevFile(),m.getRevFile(), m.getDiffEntryFile(),project,actionType);
if (counter % 10 == 0) {
log.info("Finalized parsing " + counter + " files... remaing " + (allMessageFiles.size() - counter));
}
}
);
}
}.counter;
log.info("Finished parsing {} files",counter);
// int counter = new Object() {
// int counter = 0;
//
// {
// allMessageFiles.stream().
// parallel().
// peek(x -> counter++).
// forEach(m ->
// {
// EDiffHunkParser parser = new EDiffHunkParser();
// parser.parseFixPatterns(m.getPrevFile(),m.getRevFile(), m.getDiffEntryFile(),project,msg.getInnerPool());
// if (counter % 10 == 0) {
// log.info("Finalized parsing " + counter + " files... remaing " + (allMessageFiles.size() - counter));
// }
// }
// );
// }
// }.counter;
// log.info("Finished parsing {} files",counter);
break;
default:
log.error("Unknown parallelism {}", parallelism);
@@ -115,26 +127,29 @@ public class EnhancedASTDiff {
private static List<MessageFile> getMessageFiles(String gumTreeInput) {
String inputPath = gumTreeInput; // prevFiles revFiles diffentryFile positionsFile
File revFilesPath = new File(inputPath + "revFiles/");
File[] revFiles = revFilesPath.listFiles(); // project folders
List<MessageFile> msgFiles = new ArrayList<>();
if (revFiles.length >= 0) {
for (File revFile : revFiles) {
String fileName = revFile.getName();
File prevFile = new File(gumTreeInput + "prevFiles/prev_" + fileName);// previous file
fileName = fileName.replace(".java", ".txt");
File diffentryFile = new File(gumTreeInput + "DiffEntries/" + fileName); // DiffEntry file
log.info(revFilesPath.getPath());
File[] revFiles = revFilesPath.listFiles();
if (revFiles!= null ){
// List<File> collect = Arrays.stream(revFiles).filter(x -> x.getName().startsWith("b50867_6e80c3_src#main#java#org#apache#hadoop#hbase#regionserver#HRegion"))
// .collect(Collectors.toList());// project folders
List<MessageFile> msgFiles = new ArrayList<>();
for (File revFile : revFiles) {
// for (File revFile : collect) {
String fileName = revFile.getName();
File prevFile = new File(gumTreeInput + "prevFiles/prev_" + fileName);// previous file
fileName = fileName.replace(".java", ".txt");
File diffentryFile = new File(gumTreeInput + "DiffEntries/" + fileName); // DiffEntry file
MessageFile msgFile = new MessageFile(revFile, prevFile, diffentryFile);
MessageFile msgFile = new MessageFile(revFile, prevFile, diffentryFile);
msgFiles.add(msgFile);
msgFiles.add(msgFile);
}
}
return msgFiles;
}
else{
return null;
}
return msgFiles;
}else{
return null;
}
}
View File
+38 -16
View File
@@ -2,6 +2,7 @@ package edu.lu.uni.serval.fixminer.jobs;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import com.github.gumtreediff.tree.TreeUtils;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
@@ -171,6 +172,7 @@ public class MultiThreadTreeLoaderCluster3 {
public static List<String> getNames(ITree oldTree, List<String> oldTokens){
List<ITree> descendants = oldTree.getDescendants();
@@ -209,17 +211,26 @@ public class MultiThreadTreeLoaderCluster3 {
List<String> m = new ArrayList<String>();
if(label.startsWith("UPD")){
upd = true;
java.util.regex.Matcher matcher;
if(sType.equals("53")){
String timeRegex = ".*@@(ClassInstanceCreation:new [a-zA-Z0-9]+).*@TO@\\s(ClassInstanceCreation:new [a-zA-Z0-9]+).*";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
matcher= pattern.matcher(split[1]);
}else {
String timeRegex = "@@(.*)@TO@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
matcher = pattern.matcher(split[1]);
}
String timeRegex = "UPD (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@TO@(.*)@AT@";
// java.util.regex.Matcher matcher;
// if(sType.equals("53")){
// String timeRegex = ".*@@(ClassInstanceCreation:new [a-zA-Z0-9]+).*@TO@\\s(ClassInstanceCreation:new [a-zA-Z0-9]+).*";
// Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
// matcher= pattern.matcher(split[1]);
// }else {
// String timeRegex = "@@(.*)@TO@(.*)";
// Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
// matcher = pattern.matcher(split[1]);
// }
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
String group = matcher.group(2);
String group1 = matcher.group(3);
String hours = matcher.group(1);
String to = matcher.group(2);
if(sType.equals("31")){
@@ -296,11 +307,16 @@ public class MultiThreadTreeLoaderCluster3 {
}
}else if(label.startsWith("INS") && upd == false){
String timeRegex = "@@(.*)@TO@(.*)";
String timeRegex ="MOV (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@TO@ (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@AT@";
//
// String timeRegex = "@@(.*)@TO@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
java.util.regex.Matcher matcher = pattern.matcher(split[1]);
java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
String group = matcher.group(2);
String group1 = matcher.group(4);
String hours = matcher.group(1);
if (hours.startsWith("MethodName:")) {
String methodName = hours.split(":")[1];
@@ -313,11 +329,13 @@ public class MultiThreadTreeLoaderCluster3 {
}
}else if(label.startsWith("DEL") && upd == false){
String timeRegex = "@@(.*)";
String timeRegex = "DEL (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@AT@";
// String timeRegex = "@@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
java.util.regex.Matcher matcher = pattern.matcher(split[1]);
java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
String group = matcher.group(2);
String hours = matcher.group(1);
if (hours.startsWith("MethodName:")){
String methodName = hours.split(":")[1];
@@ -327,11 +345,15 @@ public class MultiThreadTreeLoaderCluster3 {
}
}
}else if(label.startsWith("MOV") && upd == false){
String timeRegex = "@@(.*)@TO@(.*)";
String timeRegex ="MOV (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@TO@ (AnonymousClassDeclaration|ArrayAccess|ArrayCreation|ArrayInitializer|ArrayType|AssertStatement|Assignment|Block|BooleanLiteral|BreakStatement|CastExpression|CatchClause|CharacterLiteral|ClassInstanceCreation|CompilationUnit|ConditionalExpression|ConstructorInvocation|ContinueStatement|DoStatement|EmptyStatement|ExpressionStatement|FieldAccess|FieldDeclaration|ForStatement|IfStatement|ImportDeclaration|InfixExpression|Initializer|Javadoc|LabeledStatement|MethodDeclaration|MethodInvocation|NullLiteral|NumberLiteral|PackageDeclaration|ParenthesizedExpression|PostfixExpression|PrefixExpression|PrimitiveType|QualifiedName|ReturnStatement|SimpleName|SimpleType|SingleVariableDeclaration|StringLiteral|SuperConstructorInvocation|SuperFieldAccess|SuperMethodInvocation|SwitchCase|SwitchStatement|SynchronizedStatement|ThisExpression|ThrowStatement|TryStatement|TypeDeclaration|TypeDeclarationStatement|TypeLiteral|VariableDeclarationExpression|VariableDeclarationFragment|VariableDeclarationStatement|WhileStatement|InstanceofExpression|LineComment|BlockComment|TagElement|TextElement|MemberRef|MethodRef|MethodRefParameter|EnhancedForStatement|EnumDeclaration|EnumConstantDeclaration|TypeParameter|ParameterizedType|QualifiedType|WildcardType|NormalAnnotation|MarkerAnnotation|SingleMemberAnnotation|MemberValuePair|AnnotationTypeDeclaration|AnnotationTypeMemberDeclaration|Modifier|UnionType|Dimension|LambdaExpression|IntersectionType|NameQualifiedType|CreationReference|ExpressionMethodReference|SuperMethodReference|TypeMethodReference)@@(.*)@AT@";
// String timeRegex = "@@(.*)@TO@(.*)";
Pattern pattern = Pattern.compile(timeRegex, Pattern.DOTALL);
java.util.regex.Matcher matcher = pattern.matcher(split[1]);
java.util.regex.Matcher matcher = pattern.matcher(label);
if (matcher.matches()) {
String group = matcher.group(2);
String group1 = matcher.group(4);
String hours = matcher.group(1);
if (hours.startsWith("MethodName:")){
String methodName = hours.split(":")[1];
View File
+5 -3
View File
@@ -4,6 +4,8 @@ import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import edu.lu.uni.serval.utils.CallShell;
import edu.lu.uni.serval.utils.EDiffHelper;
import edu.lu.uni.serval.utils.PoolBuilder;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
@@ -25,9 +27,9 @@ public class StoreEDiffInCache {
private static Logger log = LoggerFactory.getLogger(StoreEDiffInCache.class);
public static void main(String inputPath,String portInner,String dbDir,String chunkName,String operation) throws Exception {
public static void main(String inputPath,String portInner,String dbDir,String chunkName) throws Exception {
String parameters = String.format("\nInput path %s \nportInner %s \nchunkName %s \ndbDir %s \noperation %s",inputPath,portInner,chunkName,dbDir,operation);
String parameters = String.format("\nInput path %s \nportInner %s \nchunkName %s \ndbDir %s \noperation %s",inputPath,portInner,chunkName,dbDir);
log.info(parameters);
CallShell cs = new CallShell();
String cmd = "bash "+dbDir + "/" + "startServer.sh" +" %s %s %s";
@@ -137,7 +139,7 @@ public class StoreEDiffInCache {
try (Jedis inner = innerPool.getResource()) {
inner.set(key, EDiffHelper.toString(actionSet));
inner.set(key.getBytes(), EDiffHelper.toByteArray(actionSet));
}
View File
View File
+1
View File
@@ -81,6 +81,7 @@ try{
runPing(command);
}else{
TimeUnit.MINUTES.sleep(1);
System.out.println(e);
}
View File
+84 -12
View File
@@ -3,16 +3,12 @@ package edu.lu.uni.serval.utils;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import org.apache.commons.io.FileUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -22,8 +18,81 @@ public class ClusterToPattern {
String shapesFolder = "/Users/anil.koyuncu/projects/fixminer-all/enhancedASTDiff/python/data/shapes";
String port = "6399";
JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
// JedisPool outerPool = new JedisPool(PoolBuilder.getPoolConfig(), "127.0.0.1",Integer.valueOf(port),20000000);
Jedis jedis = new Jedis("127.0.0.1",Integer.valueOf(port),20000000);
// writeTofFile(shapesFolder, outerPool);
// File file = new File(shapesFolder);
//
//
// File[] files = file.listFiles();
// ArrayList<String> strings = new ArrayList<>();
// List<File> folders = Arrays.stream(files).filter(x -> x.isDirectory())
// .collect(Collectors.toList());
// for (File target : folders) {
// File[] files2 = target.listFiles();
// for (File file1 : files2) {
// File[] files1 = file1.listFiles();
// strings.add(((File)files1[0]).listFiles()[0].getName());
//// System.out.println();
//
// }
//
//// Collection<File> files1 = FileUtils.listFiles(target, null, true);
//
// }
//
// for (String string : strings) {
// export("*"+string,jedis);
// }
// String export = export("VariableDeclarationStatement"+"/*/camel_8f0c15_ab3e17_camel-core#src#main#java#org#apache#camel#component#bean#BeanInfo.txt_0", jedis);
String export = export(args[0], jedis);
System.out.println(export);
}
private static String export(String filename,Jedis outer) throws IOException, ClassNotFoundException {
// String key = shape.getName() + "/*/" + file.getName();
// Jedis outer = outerPool.getResource();
String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
Set<String> keys = outer.keys(filename);
if (keys.size() == 1) {
s = (String) keys.toArray()[0];
} else {
throw new Error("cok key");
}
byte[] si = outer.get(s.getBytes());
// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(si);
// ITree tree = null;
// ITree parent = null;
// ITree children =null;
// TreeContext tc = new TreeContext();
// tree = EDiffHelper.getASTTree(actionSet, parent, children,tc);
// tree.setParent(null);
// tc.validate();
//
// String s2 = tree.toStaticHashString();
// try(FileWriter fw = new FileWriter("myfile.txt", true);
// BufferedWriter bw = new BufferedWriter(fw);
// PrintWriter out = new PrintWriter(bw))
// {
// out.println(s2);
// //more code
// } catch (IOException e) {
// //exception handling left as an exercise for the reader
// }
String s1 = actionSet.toString();
outer.close();
return s1;
}
private static void writeTofFile(String shapesFolder, JedisPool outerPool) throws IOException, ClassNotFoundException {
File folder = new File(shapesFolder);
File[] listOfFiles = folder.listFiles();
@@ -39,8 +108,10 @@ public class ClusterToPattern {
.collect(Collectors.toList());
for(File cluster:fileList){
File[] files = cluster.listFiles();
// for (File f:files) {
// File file = f.listFiles()[0];
File file = files[0];
String key = shape.getName() + "/*/"+file.getName();
String key = shape.getName() + "/*/" + file.getName();
Jedis outer = outerPool.getResource();
String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
Set<String> keys = outer.keys(key);
@@ -55,17 +126,18 @@ public class ClusterToPattern {
String s1 = actionSet.toString();
File saveFile = new File(folder.getParent()+"/shapePatterns/" +shape.getName()+"/"+cluster.getName()+".pattern");
// File saveFile = new File(folder.getParent() + "/actionPatterns/" + shape.getName() + "/" + cluster.getName() +"/"+f.getName()+ ".pattern");
File saveFile = new File(folder.getParent() + "/shapePatterns/" + shape.getName() + "/" + cluster.getName() + ".pattern");
saveFile.getParentFile().mkdirs();
BufferedWriter writer = new BufferedWriter(new FileWriter(saveFile));
writer.write(s1);
writer.close();
writer.close();
// }
}
}
}
}
+430 -66
View File
@@ -3,14 +3,18 @@ package edu.lu.uni.serval.utils;
import com.github.gumtreediff.actions.model.*;
import com.github.gumtreediff.tree.ITree;
import com.github.gumtreediff.tree.TreeContext;
import com.github.gumtreediff.tree.TreeUtils;
import edu.lu.uni.serval.fixminer.akka.ediff.HierarchicalActionSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import org.javatuples.Pair;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
@@ -39,6 +43,24 @@ public class EDiffHelper {
}
public static Object fromByteArray( byte[] data ) throws IOException,
ClassNotFoundException {
// byte [] data = Base64.getDecoder().decode( s );
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream( data ) );
Object o = ois.readObject();
ois.close();
return o;
}
/** Write the object to a Base64 string. */
public static byte[] toByteArray(Serializable o ) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream( baos );
oos.writeObject( o );
oos.close();
return baos.toByteArray();
}
public static ITree getTokenTree(HierarchicalActionSet actionSet, ITree parent, ITree children,TreeContext tc){
int newType = 0;
@@ -79,6 +101,66 @@ public class EDiffHelper {
}
public static ITree getTargetTree(HierarchicalActionSet actionSet, ITree parent, ITree children, TreeContext tc){
int newType = 0;
String astNodeType = null;
Action action = actionSet.getAction();
if (action instanceof Update){
astNodeType = actionSet.getAstNodeType();
List<Integer> keysByValue = getKeysByValue(ASTNodeMap.map, astNodeType);
if(keysByValue.size() != 1){
log.error("More than 1");
}
newType = keysByValue.get(0);
}else if(action instanceof Insert){
newType = ((Insert)action).getParent().getType();
}else if(action instanceof Move){
newType = ((Move)action).getParent().getType();
}else if(action instanceof Delete){
astNodeType = actionSet.getAstNodeType();
List<Integer> keysByValue = getKeysByValue(ASTNodeMap.map, astNodeType);
if(keysByValue.size() != 1){
log.error("More than 1");
}
newType = keysByValue.get(0);
}
if(actionSet.getParent() == null){
//root
// parent = new Tree(newType,"");
parent = tc.createTree(newType, "", null);
tc.setRoot(parent);
}else{
// children = new Tree(newType,"");
// parent.addChild(children);
children = tc.createTree(newType, "", null);
children.setParentAndUpdateChildren(parent);
}
List<HierarchicalActionSet> subActions = actionSet.getSubActions();
if (subActions.size() != 0){
for (HierarchicalActionSet subAction : subActions) {
if(actionSet.getParent() == null){
children = parent;
}
getTargetTree(subAction,children,null,tc);
}
}
return parent;
}
public static ITree getASTTree(HierarchicalActionSet actionSet, ITree parent, ITree children, TreeContext tc){
int newType = 0;
@@ -163,25 +245,89 @@ public class EDiffHelper {
}
public static ITree getShapes(String prefix, String fn, JedisPool outerPool) {
public static ITree getShapes(String prefix, String fn, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
Jedis inner = null;
try {
inner = outerPool.getResource();
while (!inner.ping().equals("PONG")){
log.info("wait");
// Jedis inner = null;
// Jedis outer = null;
try (Jedis inner = innerPool.getResource(); Jedis outer = outerPool.getResource()) {
// inner = innerPool.getResource();
try {
while (!inner.ping().equals("PONG")) {
log.info("wait");
}
inner.select(1);
String dist2load = inner.get(prefix + "-" + fn);
// outer = outerPool.getResource();
outer.select(0);
String key = prefix.replace("-", "/") + "/" + dist2load;
byte[] s = outer.get(key.getBytes());
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(s);
ITree parent = null;
ITree children = null;
TreeContext tc = new TreeContext();
tree = EDiffHelper.getASTTree(actionSet, parent, children, tc);
//tree.setParent(null);
tc.validate();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
inner.select(1);
String dist2load = inner.get(prefix+"-"+fn);
inner.select(0);
String s = inner.get(prefix.replace("-","/") +"/"+dist2load);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(s);
}
// finally {
// if (inner != null) {
// inner.close();
// }
// if (outer != null) {
// outer.close();
// }
// }
return tree;
}
public static ITree getTargets(String prefix, String fn, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
// Jedis inner = null;
// Jedis outer = null;
try {
String dist2load = null;
String si = null;
try(Jedis inner = innerPool.getResource()){
inner.select(1);
dist2load = inner.get(prefix+"-"+fn);
}
// while (!inner.ping().equals("PONG")){
// log.info("wait");
// }
try(Jedis outer = outerPool.getResource()){
outer.select(0);
String s = null;
Set<String> keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
if (keys.size() == 1) {
s = (String) keys.toArray()[0];
} else {
throw new Error("cok key");
}
si = outer.get(s);
}
// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
ITree parent = null;
ITree children =null;
TreeContext tc = new TreeContext();
tree = EDiffHelper.getASTTree(actionSet, parent, children,tc);
tree = EDiffHelper.getTargetTree(actionSet, parent, children,tc);
//tree.setParent(null);
tc.validate();
@@ -189,43 +335,100 @@ public class EDiffHelper {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
if (inner != null) {
inner.close();
}
}
return tree;
}
public static ITree getActions(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
public static ITree getTargets(HierarchicalActionSet actionSet) {
ITree tree = null;
// Jedis inner = null;
// Jedis outer = null;
try {
// String dist2load = null;
// String si = null;
// try(Jedis inner = innerPool.getResource()){
// inner.select(1);
// dist2load = inner.get(prefix+"-"+fn);
//
// }
//// while (!inner.ping().equals("PONG")){
//// log.info("wait");
//// }
// try(Jedis outer = outerPool.getResource()){
// outer.select(0);
// String s = null;
// Set<String> keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
// if (keys.size() == 1) {
// s = (String) keys.toArray()[0];
// } else {
// throw new Error("cok key");
// }
// si = outer.get(s);
//
// }
//
//
//// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
ITree parent = null;
ITree children =null;
TreeContext tc = new TreeContext();
tree = EDiffHelper.getTargetTree(actionSet, parent, children,tc);
//tree.setParent(null);
tc.validate();
} catch (Exception e) {
e.printStackTrace();
}
//
// } catch (IOException e) {
// e.printStackTrace();
// } catch (ClassNotFoundException e) {
// e.printStackTrace();
// }
return tree;
}
public static Pair<ITree,HierarchicalActionSet> getActions(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
Jedis inner = null;
Jedis outer = null;
// Jedis inner = null;
// Jedis outer = null;
HierarchicalActionSet actionSet = null;
try {
inner = innerPool.getResource();
inner.select(1);
String dist2load = inner.get(prefix + "-" + firstValue);
outer = outerPool.getResource();
outer.select(0);
String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
Set<String> keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
if (keys.size() == 1) {
s = (String) keys.toArray()[0];
} else {
throw new Error("cok key");
}
String dist2load = null;
byte[] si = null;
try (Jedis inner = innerPool.getResource();Jedis outer = outerPool.getResource()){
inner.select(1);
dist2load = inner.get(prefix + "-" + firstValue);
outer.select(0);
String[] split = prefix.split("-");
String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
// Set<String> keys = outer.keys(split[0] + "/"+split[1]+"/" + dist2load);
String key = split[0] + "/"+split[1]+"/" + dist2load;
// if (keys.size() == 1) {
// s = (String) keys.toArray()[0];
// } else {
// throw new Error("cok key");
// }
si = outer.get(key.getBytes());
// String key = prefix.replace("-", "/") + "/" + dist2load;
// byte[] s = outer.get(key.getBytes());
actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(si);
// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
String si = outer.get(s);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
// actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
}
ITree parent = null;
ITree children = null;
@@ -239,45 +442,56 @@ public class EDiffHelper {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (inner != null) {
inner.close();
}
if (outer != null) {
outer.close();
}
}
return tree;
Pair<ITree, HierarchicalActionSet> pair = new Pair<>(tree,actionSet);
return pair;
// return tree;
}
public static void getLeaves(ITree tc){
int height = tc.getHeight();
if(height == 0){
log.info(tc.getLabel());
}else{
List<ITree> children = tc.getChildren();
for (ITree child:children){
getLeaves(child);
}
}
}
public static ITree getTokens(String prefix,String firstValue, JedisPool outerPool,JedisPool innerPool) {
ITree tree = null;
Jedis inner = null;
Jedis outer = null;
// Jedis inner = null;
// Jedis outer = null;
try {
inner = innerPool.getResource();
try{
try (Jedis inner = innerPool.getResource();Jedis outer = outerPool.getResource()) {
// inner = innerPool.getResource();
inner.select(1);
String dist2load = inner.get(prefix + "-" + firstValue);
outer = outerPool.getResource();
// outer = outerPool.getResource();
outer.select(0);
String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
Set<String> keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
if (keys.size() == 1) {
s = (String) keys.toArray()[0];
} else {
throw new Error("cok key");
}
// String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
// Set<String> keys = outer.keys(prefix.split("-")[0] + "/*/" + dist2load);
// if (keys.size() == 1) {
// s = (String) keys.toArray()[0];
// } else {
// throw new Error("cok key");
// }
// String filename = project + "/"+type+"/" + pureFileName + ".txt_" + actionSetPosition;
String si = outer.get(s);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
String[] split = prefix.split("-");
// String s = null;//inner.get(prefix.replace("-","/") +"/"+dist2load);
// Set<String> keys = outer.keys(split[0] + "/"+split[1]+"/" + dist2load);
String key = split[0] + "/"+split[1]+"/" + dist2load;
byte[] si = outer.get(key.getBytes());
// HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromString(si);
HierarchicalActionSet actionSet = (HierarchicalActionSet) EDiffHelper.fromByteArray(si);
ITree parent = null;
@@ -286,21 +500,25 @@ public class EDiffHelper {
tree = EDiffHelper.getTokenTree(actionSet, parent, children, tc);
tree.setParent(null);
tc.validate();
// getLeaves(tree);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (inner != null) {
inner.close();
}
if (outer != null) {
outer.close();
}
}
// finally {
// if (inner != null) {
// inner.close();
// }
// if (outer != null) {
// outer.close();
// }
return tree;
}
@@ -349,4 +567,150 @@ public class EDiffHelper {
}
return parent;
}
public static List<ITree> retainLeaves(List<ITree> trees) {
Iterator<ITree> tIt = trees.iterator();
while (tIt.hasNext()) {
ITree t = tIt.next();
if (!t.isLeaf()) tIt.remove();
}
return trees;
}
public static String getTokenAtNode(ITree leaf,String token){
// if (leaf.getParent() == null) {
String label = leaf.getLabel();
String key = label.split(String.valueOf(leaf.getType()))[0];
String group="";
Pattern pattern;
java.util.regex.Matcher matcher;
List<ITree> parents;
List<String> actionList = new ArrayList<>();
Set<String> uniqueGas = new HashSet<String>(actionList);
switch (key.trim()) {
case "DEL":
parents = leaf.getParents();
for (ITree parent : parents) {
String s = parent.getLabel().split(String.valueOf(parent.getType()))[0];
actionList.add(s);
}
actionList.add(key);
if (uniqueGas.size() == 1){
Optional<ITree> first = parents.stream().filter(p -> p.isRoot()).findFirst();
if(first.isPresent()){
ITree parent = first.get();
label = parent.getLabel();
}
}
pattern = Pattern.compile(delPattern);
matcher = pattern.matcher(label);
if (matcher.matches()) {
group = matcher.group(2);
}
break;
case "INS":
parents = leaf.getParents();
for (ITree parent : parents) {
String s = parent.getLabel().split(String.valueOf(parent.getType()))[0];
actionList.add(s);
}
actionList.add(key);
if (uniqueGas.size() == 1){
Optional<ITree> first = parents.stream().filter(p -> p.isRoot()).findFirst();
if(first.isPresent()){
ITree parent = first.get();
label = parent.getLabel();
}
}
//
pattern = Pattern.compile(insPattern);
matcher = pattern.matcher(label);
if (matcher.matches()) {
group = matcher.group(2);// +" " + matcher.group(3);
}
break;
case "MOV":
parents = leaf.getParents();
for (ITree parent : parents) {
String s = parent.getLabel().split(String.valueOf(parent.getType()))[0];
actionList.add(s);
}
actionList.add(key);
if (uniqueGas.size() == 1){
Optional<ITree> first = parents.stream().filter(p -> p.isRoot()).findFirst();
if(first.isPresent()){
ITree parent = first.get();
label = parent.getLabel();
}
}
pattern = Pattern.compile(movPattern);
matcher = pattern.matcher(label);
if (matcher.matches()) {
group = matcher.group(2);
String group1 = matcher.group(3);
}
break;
case "UPD":
pattern = Pattern.compile(updPattern);
matcher = pattern.matcher(label);
if (matcher.matches()) {
group = matcher.group(2) +" " + matcher.group(3);
}
break;
}
token = group;
return group;
// }else{
// getTokenAtNode(leaf.getParent(),token);
// return token;
// }
}
static String movPattern = "MOV (.*)@@(.*)@TO@ (.*)@@(.*)@AT@.*";
static String delPattern = "DEL (.*)@@(.*)@AT@.*";
static String insPattern = "INS (.*)@@(.*)@TO@ (.*)@@(.*)@AT@.*";
static String updPattern = "UPD (.*)@@(.*)@TO@(.*)@AT@.*";
public static String getNames2(ITree oldTree){
List<ITree> leaves = retainLeaves(TreeUtils.postOrder(oldTree));
List<String> res = new ArrayList<>();
String resu="";
for (ITree leaf : leaves) {
String tokenAtNode = getTokenAtNode(leaf, resu);
res.add(tokenAtNode);
}
// log.info("s");
if (res.size() == 1){
final String regex = "MethodName:([a-zA-Z0-9]+):.*MethodName:([a-zA-Z0-9]+):.*";
Pattern compile = Pattern.compile(regex);
Matcher matcher = compile.matcher(res.get(0));
if(matcher.matches()){
res.set(0,matcher.group(1) +" " + matcher.group(2));
}
}
return String.join(" ",res);
}
}
+10 -6
View File
@@ -15,19 +15,23 @@ public class PoolBuilder {
static final JedisPoolConfig poolConfig = buildPoolConfig();
private static JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128);
poolConfig.setMaxIdle(128);
poolConfig.setMinIdle(16);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMaxTotal(1024);
poolConfig.setMaxIdle(1024);
// poolConfig.setMinIdle(16);
// poolConfig.setTestOnBorrow(true);
// poolConfig.setTestOnReturn(true);
// poolConfig.setTestWhileIdle(true);
poolConfig.setMinEvictableIdleTimeMillis(Duration.ofMinutes(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofHours(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
}
Regular → Executable
View File
Regular → Executable
View File
View File