From: Tara L Andrews Date: Sun, 30 Sep 2012 03:01:40 +0000 (+0200) Subject: implement relationship logical propagation X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9e9b754027af3f4e72c61efb67f13de37f9f1229;p=scpubgit%2Fstemmatology.git implement relationship logical propagation --- diff --git a/base/lib/Text/Tradition/Collation/RelationshipStore.pm b/base/lib/Text/Tradition/Collation/RelationshipStore.pm index 4801152..31c0716 100644 --- a/base/lib/Text/Tradition/Collation/RelationshipStore.pm +++ b/base/lib/Text/Tradition/Collation/RelationshipStore.pm @@ -155,7 +155,7 @@ sub BUILD { { name => 'lexical', bindlevel => 2 }, { name => 'uncertain', bindlevel => 50, is_transitive => 0, is_generalizable => 0 }, { name => 'other', bindlevel => 50, is_transitive => 0, is_generalizable => 0 }, - { name => 'transposition', bindlevel => 50, is_colocation => 0, is_transitive => 0 }, + { name => 'transposition', bindlevel => 50, is_colocation => 0 }, { name => 'repetition', bindlevel => 50, is_colocation => 0, is_transitive => 0 } ); @@ -442,7 +442,7 @@ try { ok( 0, "Failed to add normal transposition complement: " . $e->message ); } -# TODO Test 4: make a global relationship that involves re-ranking a node first, when +# Test 4: make a global relationship that involves re-ranking a node first, when # the prior rank has a potential match too my $t4 = Text::Tradition->new( 'input' => 'Self', 'file' => 't/data/globalrel_test.xml' ); my $c4 = $t4->collation; @@ -459,6 +459,80 @@ $c4->calculate_ranks(); # Do our readings now share a rank? is( $c4->reading('r463.2')->rank, $c4->reading('r463.4')->rank, "Expected readings now at same rank" ); + +# Test group 5: relationship transitivity. +my $t5 = Text::Tradition->new( 'input' => 'Self', 'file' => 't/data/john.xml' ); +my $c5 = $t5->collation; + +# Test 5.1: make a grammatical link to an orthographically-linked reading +$c5->add_relationship( 'r13.5', 'r13.2', { type => 'orthographic' } ); +$c5->add_relationship( 'r13.1', 'r13.2', { type => 'grammatical', propagate => 1 } ); +my $impliedrel = $c5->get_relationship( 'r13.1', 'r13.5' ); +ok( $impliedrel, 'Relationship was made between indirectly linked readings' ); +if( $impliedrel ) { + is( $impliedrel->type, 'grammatical', 'Implicit inbound relationship has the correct type' ); +} + +# Test 5.2: make another orthographic link, see if the grammatical one propagates +$c5->add_relationship( 'r13.3', 'r13.5', { type => 'orthographic', propagate => 1 } ); +foreach my $rdg ( qw/ r13.3 r13.5 / ) { + my $newgram = $c5->get_relationship( 'r13.1', $rdg ); + ok( $newgram, 'Relationship was propagaged up between indirectly linked readings' ); + if( $newgram ) { + is( $newgram->type, 'grammatical', 'Implicit outbound relationship has the correct type' ); + } +} +my $neworth = $c5->get_relationship( 'r13.2', 'r13.3' ); +ok( $neworth, 'Relationship was made between indirectly linked siblings' ); +if( $neworth ) { + is( $neworth->type, 'orthographic', 'Implicit direct relationship has the correct type' ); +} + +# Test 5.3: make an intermediate (spelling) link to the remaining node +$c5->add_relationship( 'r13.4', 'r13.2', { type => 'spelling', propagate => 1 } ); +# Should be linked grammatically to 12.1, spelling-wise to the rest +my $newgram = $c5->get_relationship( 'r13.4', 'r13.1' ); +ok( $newgram, 'Relationship was made between indirectly linked readings' ); +if( $newgram ) { + is( $newgram->type, 'grammatical', 'Implicit intermediate-out relationship has the correct type' ); +} +foreach my $rdg ( qw/ r13.3 r13.5 / ) { + my $newspel = $c5->get_relationship( 'r13.4', $rdg ); + ok( $newspel, 'Relationship was made between indirectly linked readings' ); + if( $newspel ) { + is( $newspel->type, 'spelling', 'Implicit intermediate-in relationship has the correct type' ); + } +} + +# Test 5.4: add a parallel but not sibling relationship +$c5->add_relationship( 'r13.6', 'r13.2', { type => 'lexical', propagate => 1 } ); +ok( !$c5->get_relationship( 'r13.6', 'r13.1' ), + "Lexical relationship did not affect grammatical" ); +foreach my $rdg ( qw/ r13.3 r13.4 r13.5 / ) { + my $newlex = $c5->get_relationship( 'r13.6', $rdg ); + ok( $newlex, 'Parallel was made between indirectly linked readings' ); + if( $newlex ) { + is( $newlex->type, 'lexical', 'Implicit parallel-down relationship has the correct type' ); + } +} + +# Test 5.5: try it with non-colocated relationships +my $numrel = scalar $c5->relationships; +$c5->add_relationship( 'r62.1', 'r64.1', { type => 'transposition', propagate => 1 } ); +is( scalar $c5->relationships, $numrel+1, + "Adding non-colo relationship did not propagate" ); +# Add a pivot point +$c5->add_relationship( 'r61.1', 'r61.5', { type => 'orthographic' } ); +# Add a third transposed node +$c5->add_relationship( 'r62.1', 'r60.3', { type => 'transposition', propagate => 1 } ); +my $newtrans = $c5->get_relationship( 'r64.1', 'r60.3' ); +ok( $newtrans, 'Non-colo relationship was made between indirectly linked readings' ); +if( $newtrans ) { + is( $newtrans->type, 'transposition', 'Implicit non-colo relationship has the correct type' ); +} +is( scalar $c5->relationships, $numrel+4, + "Adding non-colo relationship only propagated on non-colos" ); + =end testing @@ -475,6 +549,7 @@ sub add_relationship { my $relationship; my $reltype; my $thispaironly = delete $options->{thispaironly}; + my $propagate = delete $options->{propagate}; my $droppedcolls = []; if( ref( $options ) eq 'Text::Tradition::Collation::Relationship' ) { $relationship = $options; @@ -550,12 +625,23 @@ sub add_relationship { } } $self->_set_relationship( $relationship, $source, $target ) unless $skip; - push( @pairs_set, [ $source, $target ] ); + push( @pairs_set, [ $source, $target, $relationship->type ] ); # Find all the pairs for which we need to set the relationship. if( $relationship->colocated && $relationship->nonlocal && !$thispaironly ) { - push( @pairs_set, $self->add_global_relationship( $relationship ) ); + my @global_set = $self->add_global_relationship( $relationship ); + map { push( @$_, $relationship->type ) } @global_set; + push( @pairs_set, @global_set ); } + if( $propagate ) { + my @prop; + foreach my $ps ( @pairs_set ) { + my @extra = $self->propagate_relationship( $ps->[0], $ps->[1] ); + push( @prop, @extra ); + } + push( @pairs_set, @prop ) if @prop; + } + # Finally, restore whatever collations we can, and return. $self->_restore_weak( @$droppedcolls ); return @pairs_set; @@ -774,9 +860,9 @@ sub _restore_weak { =head2 related_readings( $reading, $filter ) -Returns a list of readings that are connected via relationship links to $reading. -If $filter is set to a subroutine ref, returns only those related readings where -$filter( $relationship ) returns a true value. +Returns a list of readings that are connected via direct relationship links +to $reading. If $filter is set to a subroutine ref, returns only those +related readings where $filter( $relationship ) returns a true value. =cut @@ -796,25 +882,10 @@ sub related_readings { my $type = $filter; $filter = sub { $_[0]->type eq $type }; } - my %found = ( $reading => 1 ); - my $check = [ $reading ]; - my $iter = 0; - while( @$check ) { - my $more = []; - foreach my $r ( @$check ) { - foreach my $nr ( $self->graph->neighbors( $r ) ) { - if( &$filter( $self->get_relationship( $r, $nr ) ) ) { - push( @$more, $nr ) unless exists $found{$nr}; - $found{$nr} = 1; - } - } - } - $check = $more; - } - delete $found{$reading}; - @answer = keys %found; + @answer = grep { &$filter( $self->get_relationship( $reading, $_ ) ) } + $self->graph->neighbors( $reading ); } else { - @answer = $self->graph->all_reachable( $reading ); + @answer = $self->graph->neighbors( $reading ); } if( $return_object ) { my $c = $self->collation; @@ -824,6 +895,124 @@ sub related_readings { } } +=head2 propagate_relationship( $rel ) + +Apply the transitivity and binding level rules to propagate the consequences of +the specified relationship link, ensuring all consequent relationships exist. +For now, we only propagate colocation links if we are passed a colocation, and +we only propagate displacement links if we are given a displacement. + +Returns an array of tuples ( rdg1, rdg2, type ) for each new reading set. + +=cut + +sub propagate_relationship { + my( $self, @rel ) = @_; + ## Check that the vector is an arrayref + my $rel = @rel > 1 ? \@rel : $rel[0]; + ## Get the relationship info + my $relobj = $self->get_relationship( $rel ); + my $reltype = $self->type( $relobj->type ); + return () unless $reltype->is_transitive; + my @newly_set; + + my $colo = $reltype->is_colocation; + my $bindlevel = $reltype->bindlevel; + + ## Find all readings that are linked via this relationship type + my %thislevel = ( $rel->[0] => 1, $rel->[1] => 1 ); + my $check = $rel; + my $iter = 0; + while( @$check ) { + my $more = []; + foreach my $r ( @$check ) { + push( @$more, grep { !exists $thislevel{$_} + && $self->get_relationship( $r, $_ ) + && $self->get_relationship( $r, $_ )->type eq $relobj->type } + $self->graph->neighbors( $r ) ); + } + map { $thislevel{$_} = 1 } @$more; + $check = $more; + } + + ## Make sure every reading of our relationship type is linked to every other + my @samelevel = keys %thislevel; + while( @samelevel ) { + my $r = shift @samelevel; + foreach my $nr ( @samelevel ) { + my $existing = $self->get_relationship( $r, $nr ); + if( $existing ) { + # Check that it's a matching type + throw( "Conflicting existing relationship at $r, $nr trying to propagate " + . $relobj->type . " relationship at @$rel" ) + unless $existing->type eq $relobj->type; + } else { + # Try to add a new relationship here + try { + my @new = $self->add_relationship( $r, $nr, { type => $relobj->type, + annotation => "Propagated from relationship at @$rel" } ); + push( @newly_set, @new ); + } catch ( Text::Tradition::Error $e ) { + throw( "Could not propagate " . $relobj->type . + " relationship (original @$rel) at $r -- $nr: " . + $e->message ); + } + } + } + + ## Now for each sibling our set, look for its direct connections to + ## transitive readings of a different bindlevel, and make sure that + ## all siblings are related to those readings. + my @other; + foreach my $n ( $self->graph->neighbors( $r ) ) { + my $crel = $self->get_relationship( $r, $n ); + next unless $crel; + my $crt = $self->type( $crel->type ); + if( $crt->is_transitive && $crt->is_colocation == $colo ) { + next if $crt->bindlevel == $reltype->bindlevel; + my $nrel = $crt->bindlevel < $reltype->bindlevel + ? $reltype->name : $crt->name; + push( @other, [ $n, $nrel ] ); + } + } + # The @other array now contains tuples of ( reading, type ) where the + # reading is the non-sibling and the type is the type of relationship + # that the siblings should have to the non-sibling. + foreach ( @other ) { + my( $nr, $nrtype ) = @$_; + foreach my $sib ( keys %thislevel ) { + next if $sib eq $r; + my $existing = $self->get_relationship( $sib, $nr ); + if( $existing ) { + # Check that it's compatible. The existing relationship type + # should match the looser of the two relationships in play, + # whether the original relationship being worked on or the + # relationship between $r and $or. + if( $nrtype ne $existing->type ) { + throw( "Conflicting existing relationship at $nr ( -> " + . $self->get_relationship( $nr, $r )->type . " to $r) " + . " -- $sib trying to propagate " . $relobj->type + . " relationship at @$rel" ); + } + } else { + # Try to add a new relationship here + try { + my @new = $self->add_relationship( $sib, $nr, { type => $nrtype, + annotation => "Propagated from relationship at @$rel" } ); + push( @newly_set, @new ); + } catch ( Text::Tradition::Error $e ) { + throw( "Could not propagate $nrtype relationship (original " . + $relobj->type . " at @$rel) at $sib -- $nr: " . + $e->message ); + } + } + } + } + } + + return @newly_set; +} + =head2 merge_readings( $kept, $deleted ); Makes a best-effort merge of the relationship links between the given readings, and diff --git a/base/lib/Text/Tradition/Parser/Tabular.pm b/base/lib/Text/Tradition/Parser/Tabular.pm index 2e56320..6d70155 100644 --- a/base/lib/Text/Tradition/Parser/Tabular.pm +++ b/base/lib/Text/Tradition/Parser/Tabular.pm @@ -438,7 +438,6 @@ sub _add_collations { # reading at $rank-1. my @collate_pairs; foreach my $r ( 1 .. $collation->end->rank - 1 ) { - $DB::single = 1 if $r == 82 || $r == 104 || $r == 167; my $anchor; my @need_weak; my @here = grep { !$_->is_meta } $collation->readings_at_rank( $r ); diff --git a/base/t/data/john.xml b/base/t/data/john.xml index 75452a6..2f66aa8 100644 --- a/base/t/data/john.xml +++ b/base/t/data/john.xml @@ -1,7619 +1,7471 @@ - - - - - - - - - - - - - - - - - - - - 3.0 - , - base text - 1 - (a.c.) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + 3.2 + inline + 0 - #END# - 1 - #END# - 68 + #END# + 1 + __END__ + 68 + 0 - #START# - 1 - #START# - 0 + #START# + 1 + __START__ + 0 + 0 - Λ̣έγει - 1,1 - 1 + Default + Λ̣έγει + r1.1 + 1 + 0 - Λεγει - 1,2 - 1 + Default + Λεγει + r1.2 + 1 + 0 - ν̣ηθια - 1,3 - 1 + Default + ν̣ηθια + r1.3 + 1 + 0 - λεγει - 1,4 - 1 + Default + λεγει + r1.4 + 1 + 0 - λέγει - 1,5 - 1 + Default + λέγει + r1.5 + 1 + 0 - Και - 10,1 - 9 + Default + Και + r10.1 + 9 + 0 - Καὶ - 10,2 - 9 + Default + Καὶ + r10.2 + 9 + 0 - και - 10,3 - 9 + Default + και + r10.3 + 9 + 0 - τουΤο - 11,1 - 10 + Default + τουΤο + r11.1 + 10 + 0 - τουτ̣ο - 11,2 - 10 + Default + τουτ̣ο + r11.2 + 10 + 0 - τουτο - 11,3 - 10 + Default + τουτο + r11.3 + 10 + 0 - Τουτο - 11,4 - 10 + Default + Τουτο + r11.4 + 10 + 0 - τοῦτο - 11,5 - 10 + Default + τοῦτο + r11.5 + 10 + 0 - ειπον - 12,1 - 11 + Default + ειπον + r12.1 + 11 + 0 - εἰπὼν - 12,2 - 11 + Default + εἰπὼν + r12.2 + 11 + 0 - ειπων - 12,3 - 11 + Default + ειπων + r12.3 + 11 + 0 - ειπω¯ - 12,4 - 11 + Default + ειπω¯ + r12.4 + 11 + 0 - ειπ̣ῶν - 12,5 - 11 + Default + ειπ̣ῶν + r12.5 + 11 + 0 - παλιν - 13,1 - 12 + Default + παλιν + r13.1 + 12 + 0 - Παλιν - 13,2 - 12 + Default + Παλιν + r13.2 + 12 + 0 - πάλιν - 13,3 - 12 + Default + πάλιν + r13.3 + 12 + 0 - παλην - 13,4 - 12 + Default + παλην + r13.4 + 12 + 0 - παλι¯ - 13,5 - 12 + Default + παλι¯ + r13.5 + 12 + 0 - παΛιν - 13,6 - 12 + Default + παΛιν + r13.6 + 12 + 0 - εξήλθεν - 14,1 - 12 + Default + εξήλθεν + r14.1 + 13 + 0 - εξηλθεν - 14,2 - 13 + Default + εξηλθεν + r14.2 + 13 + 0 - εξηλθε¯ - 14,3 - 13 + Default + εξηλθε¯ + r14.3 + 13 + 0 - εξηλθε - 14,4 - 13 + Default + εξηλθε + r14.4 + 13 + 0 - ἐξῆλθεν - 14,5 - 13 + Default + ἐξῆλθεν + r14.5 + 13 + 0 - εξηλθ̣εν - 14,6 - 13 + Default + εξηλθ̣εν + r14.6 + 13 + 0 - Προϲ - 15,1 - 14 + Default + Προϲ + r15.1 + 14 + 0 - προϲ - 15,2 - 14 + Default + προϲ + r15.2 + 14 + 0 - πρὸς - 15,3 - 14 + Default + πρὸς + r15.3 + 14 + 0 - τοὺς - 16,1 - 15 + Default + τοὺς + r16.1 + 15 + 0 - τουϲ - 16,2 - 15 + Default + τουϲ + r16.2 + 15 + 0 - τουϲ̣ - 16,3 - 15 + Default + τουϲ̣ + r16.3 + 15 + 0 - ιουδαιουϲ - 17,1 - 16 + Default + ιουδαιουϲ + r17.1 + 16 + 0 - Ἰουδαίους - 17,2 - 16 + Default + Ἰουδαίους + r17.2 + 16 + 0 - ϊουδαιουϲ - 17,3 - 16 + Default + ϊουδαιουϲ + r17.3 + 16 + 0 - ϊουδαιουϲʼ - 17,4 - 16 + Default + ϊουδαιουϲʼ + r17.4 + 16 + 0 - καὶ - 18,1 - 17 + Default + καὶ + r18.1 + 17 + 0 - Και - 18,2 - 17 + Default + Και + r18.2 + 17 + 0 - και - 18,3 - 17 + Default + και + r18.3 + 17 + 0 - λεγει̣ - 19,1 - 18 + Default + λεγει̣ + r19.1 + 18 + 0 - λεγει - 19,2 - 18 + Default + λεγει + r19.2 + 18 + 0 - λέγει - 19,3 - 18 + Default + λέγει + r19.3 + 18 + 0 - ου̣ν - 2,1 - 2 + Default + ου̣ν + r2.1 + 2 + 0 - αυτοιϲ - 20,1 - 19 + Default + αυτοιϲ + r20.1 + 19 + 0 - αὐτοῖς - 20,2 - 19 + Default + αὐτοῖς + r20.2 + 19 + 0 - εγω - 21,1 - 20 + Default + εγω + r21.1 + 20 + 0 - ἐγὼ - 21,2 - 20 + Default + ἐγὼ + r21.2 + 20 + 0 - εγῶ - 21,3 - 20 + Default + εγῶ + r21.3 + 20 + 0 - ουδαιμιαν - 22,1 - 21 + Default + ουδαιμιαν + r22.1 + 21 + 0 - ουδεμίαν - 22,2 - 21 + Default + ουδεμίαν + r22.2 + 21 + 0 - ου̣δεμιαν - 22,3 - 21 + Default + ου̣δεμιαν + r22.3 + 21 + 0 - οὐδεμίαν - 22,4 - 21 + Default + οὐδεμίαν + r22.4 + 21 + 0 - ουδεμιαν - 22,5 - 21 + Default + ουδεμιαν + r22.5 + 21 + 0 - ευριϲκω - 23,1 - 22 + Default + ευριϲκω + r23.1 + 22 + 0 - ε̣υριϲκω - 23,2 - 22 + Default + ε̣υριϲκω + r23.2 + 22 + 0 - αιτιαν - 24,1 - 23 + Default + αιτιαν + r24.1 + 23 + 0 - ευ - 25,1 - 24 + Default + ευ + r25.1 + 24 + 0 - ριϲκω - 26,1 - 25 + Default + ριϲκω + r26.1 + 25 + 0 - ευ̣ριϲκω - 26,2 - 22 + Default + ευ̣ριϲκω + r26.2 + 22 + 0 - ευριϲκω - 26,3 - 24 + Default + ευριϲκω + r26.3 + 24 + 0 - εὑρίσκω - 26,4 - 22 + Default + εὑρίσκω + r26.4 + 22 + 0 - ευρηϲκω - 26,5 - 24 + Default + ευρηϲκω + r26.5 + 24 + 0 - ἐν - 27,1 - 23 + Default + ἐν + r27.1 + 25 + 0 - ε¯ - 27,2 - 25 + Default + ε¯ + r27.2 + 25 + 0 - εν - 27,3 - 25 + Default + εν + r27.3 + 25 + 0 - αυτῶ - 28,1 - 26 + Default + αυτῶ + r28.1 + 26 + 0 - αυτω - 28,2 - 26 + Default + αυτω + r28.2 + 26 + 0 - αὐτῷ - 28,3 - 24 + Default + αὐτῷ + r28.3 + 26 + 0 - αιτια¯ - 29,1 - 27 + Default + αιτια¯ + r29.1 + 27 + 0 - αυτῶ - 3,1 - 2 + Default + αυτῶ + r3.1 + 3 + 0 - αυτω - 3,2 - 3 + Default + αυτω + r3.2 + 3 + 0 - αὐτῷ - 3,3 - 2 + Default + αὐτῷ + r3.3 + 3 + 0 - αυΤω - 3,4 - 2 + Default + αυΤω + r3.4 + 3 + 0 - αι̣τια̣ν̣ - 30,1 - 23 + Default + αι̣τια̣ν̣ + r30.1 + 23 + 0 - αἰτίαν - 30,2 - 25 + Default + αἰτίαν + r30.2 + 27 + 0 - αιτίαν - 30,3 - 27 + Default + αιτίαν + r30.3 + 27 + 0 - αιτιαν - 30,4 - 27 + Default + αιτιαν + r30.4 + 27 + 0 - έϲτιν - 31,1 - 28 + Default + έϲτιν + r31.1 + 28 + 0 - εϲτιν - 31,2 - 28 + Default + εϲτιν + r31.2 + 28 + 0 - ἔστιν - 32,1 - 26 + Default + ἔστιν + r32.1 + 28 + 0 - εν - 32,2 - 24 + Default + εν + r32.2 + 25 + 0 - αυτωʼ - 33,1 - 25 + Default + αυτωʼ + r33.1 + 26 + 0 - εϲτι - 34,1 - 27 + Default + εϲτι + r34.1 + 28 + 0 - εϲτ̣ι̣¯ - 34,2 - 26 + Default + εϲτ̣ι̣¯ + r34.2 + 28 + 0 - εϲτι¯ - 34,3 - 27 + Default + εϲτι¯ + r34.3 + 28 + 0 - δε - 35,1 - 29 + Default + δε + r35.1 + 29 + 0 - δὲ - 35,2 - 27 + Default + δὲ + r35.2 + 29 + 0 - ϲυνηθεια - 36,1 - 30 + Default + ϲυνηθεια + r36.1 + 30 + 0 - ϲυνιθεια - 36,2 - 30 + Default + ϲυνιθεια + r36.2 + 30 + 0 - Συνηθεια - 36,3 - 30 + Default + Συνηθεια + r36.3 + 30 + 0 - ϲυνηθια - 36,4 - 30 + Default + ϲυνηθια + r36.4 + 30 + 0 - συνήθεια - 36,5 - 28 + Default + συνήθεια + r36.5 + 30 + 0 - ϲυνειθεια - 36,6 - 30 + Default + ϲυνειθεια + r36.6 + 30 + 0 - ϲυνήθεια - 36,7 - 30 + Default + ϲυνήθεια + r36.7 + 30 + 0 - υ - 37,1 - 31 + Default + υ + r37.1 + 31 + 0 - ὑμῖν - 38,1 - 32 + Default + ὑμῖν + r38.1 + 32 + 1 - ϊ̣ν̣α̣ - 39,1 - 33 + Default + ϊ̣ν̣α̣ + r39.1 + 33 + 0 - ἵνα - 39,2 - 33 + Default + ἵνα + r39.2 + 33 + 0 - ιΝα - 39,3 - 33 + Default + ιΝα + r39.3 + 33 + 0 - ϊνα - 39,4 - 33 + Default + ϊνα + r39.4 + 33 + 0 - Ινα - 39,5 - 33 + Default + Ινα + r39.5 + 33 + 0 - απολεϲ̣θαι - 39,6 - 33 + Default + απολεϲ̣θαι + r39.6 + 36 + 0 - ινα - 39,7 - 33 + Default + ινα + r39.7 + 33 + 0 - ο - 4,1 - 4 + Default + ο + r4.1 + 4 + 0 - Ο - 4,2 - 4 + Default + Ο + r4.2 + 4 + 0 - ὁ - 4,3 - 3 + Default + ὁ + r4.3 + 4 + 0 - ε̣ν̣α̣ - 40,1 - 34 + Default + ε̣ν̣α̣ + r40.1 + 34 + 0 - το - 40,2 - 34 + Default + το + r40.2 + 37 + 0 - ενα - 40,3 - 34 + Default + ενα + r40.3 + 34 + 0 - ἕνα - 40,4 - 34 + Default + ἕνα + r40.4 + 34 + 0 - απολυω - 41,1 - 35 + Default + απολυω + r41.1 + 36 + 0 - υμι¯ - 41,2 - 35 + Default + υμι¯ + r41.2 + 35 + 0 - υμειν - 41,3 - 35 + Default + υμειν + r41.3 + 35 + 0 - ἀπολύσω - 42,1 - 35 + Default + ἀπολύσω + r42.1 + 36 + 0 - απολ̀ύϲω - 42,2 - 35 + Default + απολ̀ύϲω + r42.2 + 36 + 0 - απολυϲω - 42,3 - 36 + Default + απολυϲω + r42.3 + 36 + 0 - υμι¯ - 43,1 - 37 + Default + υμι¯ + r43.1 + 37 + 0 - ϋμὶν - 43,2 - 36 + Default + ϋμὶν + r43.2 + 37 + 0 - ὑμῖν - 43,3 - 36 + Default + ὑμῖν + r43.3 + 37 + 0 - ϋμιν - 43,4 - 37 + Default + ϋμιν + r43.4 + 37 + 0 - υμιν - 43,5 - 37 + Default + υμιν + r43.5 + 37 + 0 - απολυϲω - 44,1 - 38 + Default + απολυϲω + r44.1 + 38 + 0 - ἐν - 45,1 - 37 + Default + ἐν + r45.1 + 39 + 0 - εν - 45,2 - 39 + Default + εν + r45.2 + 39 + 0 - το - 46,1 - 40 + Default + το + r46.1 + 40 + 0 - τω - 46,2 - 40 + Default + τω + r46.2 + 40 + 0 - τῷ - 46,3 - 38 + Default + τῷ + r46.3 + 40 + 0 - πάϲχα - 47,1 - 41 + Default + πάϲχα + r47.1 + 41 + 0 - παϲ̣χα - 47,2 - 41 + Default + παϲ̣χα + r47.2 + 41 + 0 - πάσχα - 47,3 - 39 + Default + πάσχα + r47.3 + 41 + 0 - παϲχα - 47,4 - 41 + Default + παϲχα + r47.4 + 41 + 0 - βουλεϲθαι - 48,1 - 42 + Default + βουλεϲθαι + r48.1 + 42 + 0 - βουλεϲθ - 48,2 - 42 + Default + βουλεϲθ + r48.2 + 42 + 0 - βουλεϲθ̣α̣ι̣ - 48,3 - 42 + Default + βουλεϲθ̣α̣ι̣ + r48.3 + 42 + 0 - βούλεσθε - 48,4 - 40 + Default + βούλεσθε + r48.4 + 42 + 0 - βουΛεϲθαιουν - 48,5 - 42 + Default + βουΛεϲθαιουν + r48.5 + 42 + 0 - βουλεϲθε - 48,6 - 42 + Default + βουλεϲθε + r48.6 + 42 + 0 - βὸύλεϲθε - 48,7 - 42 + Default + βὸύλεϲθε + r48.7 + 42 + 0 - οὖν - 49,1 - 41 + Default + οὖν + r49.1 + 43 + 0 - ουν - 49,2 - 43 + Default + ουν + r49.2 + 43 + 0 - ου¯ - 49,3 - 43 + Default + ου¯ + r49.3 + 43 + 0 - πειλατοϲ - 5,1 - 5 + Default + πειλατοϲ + r5.1 + 5 + 0 - υμι¯ - 50,1 - 44 + Default + υμι¯ + r50.1 + 44 + 0 - υ - 50,2 - 44 + Default + υ + r50.2 + 44 + 0 - ϊνα - 50,3 - 44 + Default + ϊνα + r50.3 + 44 + 0 - ινα - 50,4 - 44 + Default + ινα + r50.4 + 44 + 0 - μιν - 51,1 - 45 + Default + μιν + r51.1 + 45 + 0 - ἀπολύσω - 52,1 - 42 + Default + ἀπολύσω + r52.1 + 46 + 0 - απολ̀ύϲω - 52,2 - 43 + Default + απολ̀ύϲω + r52.2 + 46 + 0 - απολυϲω - 52,3 - 46 + Default + απολυϲω + r52.3 + 46 + 0 - ϋμὶν - 53,1 - 44 + Default + ϋμὶν + r53.1 + 47 + 0 - ϋμϊν - 53,2 - 47 + Default + ϋμϊν + r53.2 + 47 + 0 - ὑμῖν - 53,3 - 43 + Default + ὑμῖν + r53.3 + 47 + 0 - ϋμιν - 53,4 - 47 + Default + ϋμιν + r53.4 + 47 + 0 - υμιν - 53,5 - 47 + Default + υμιν + r53.5 + 47 + 0 - απολυϲω - 54,1 - 48 + Default + απολυϲω + r54.1 + 48 + 0 - το¯ - 55,1 - 49 + Default + το¯ + r55.1 + 49 + 0 - τον - 55,2 - 49 + Default + τον + r55.2 + 49 + 0 - τὸν - 55,3 - 44 + Default + τὸν + r55.3 + 49 + 0 - βαϲιλέα - 56,1 - 50 + Default + βαϲιλέα + r56.1 + 50 + 0 - βαϲιλεα - 56,2 - 50 + Default + βαϲιλεα + r56.2 + 50 + 0 - βασιλέα - 56,3 - 45 + Default + βασιλέα + r56.3 + 50 + 0 - των - 57,1 - 51 + Default + των + r57.1 + 51 + 0 - τον - 57,2 - 51 + Default + τον + r57.2 + 51 + 0 - τῶν - 57,3 - 46 + Default + τῶν + r57.3 + 51 + 0 - τω¯ - 57,4 - 51 + Default + τω¯ + r57.4 + 51 + 0 - ιουδαιων - 58,1 - 52 + Default + ιουδαιων + r58.1 + 52 + 0 - ιουδαι̣ω̣ν̣ - 58,2 - 52 + Default + ιουδαι̣ω̣ν̣ + r58.2 + 52 + 0 - ϊουδαίων - 58,3 - 52 + Default + ϊουδαίων + r58.3 + 52 + 0 - ιουδαιω¯ - 58,4 - 52 + Default + ιουδαιω¯ + r58.4 + 52 + 0 - ϊουδαιων - 58,5 - 52 + Default + ϊουδαιων + r58.5 + 52 + 0 - Ἰουδαίων - 58,6 - 47 + Default + Ἰουδαίων + r58.6 + 52 + 0 - εκρὰύγαϲαν - 59,1 - 53 + Default + εκρὰύγαϲαν + r59.1 + 53 + 0 - εκραυαϲαν - 59,2 - 53 + Default + εκραυαϲαν + r59.2 + 53 + 0 - εκραυγαϲαν - 59,3 - 53 + Default + εκραυγαϲαν + r59.3 + 53 + 0 - ἐκραύγασαν - 59,4 - 48 + Default + ἐκραύγασαν + r59.4 + 53 + 0 - ε̣κ̣ραυγαϲαν - 59,5 - 53 + Default + ε̣κ̣ραυγαϲαν + r59.5 + 53 + 0 - εκραυπαμανου - 59,6 - 53 + Default + εκραυπαμανου + r59.6 + 53 + 0 - εκραυγαϲα¯ - 59,7 - 53 + Default + εκραυγαϲα¯ + r59.7 + 53 + 0 - ε̣κραυγαϲαν - 59,8 - 53 + Default + ε̣κραυγαϲαν + r59.8 + 53 + 0 - εΚραυγαϲαν - 59,9 - 53 + Default + εΚραυγαϲαν + r59.9 + 53 + 0 - πειλατοϲ - 6,1 - 5 + Default + πειλατοϲ + r6.1 + 5 + 0 - πιλατοϲ - 6,2 - 5 + Default + πιλατοϲ + r6.2 + 5 + 0 - πιλάτοϲ - 6,3 - 5 + Default + πιλάτοϲ + r6.3 + 5 + 0 - Πιλᾶτος - 6,4 - 4 + Default + Πιλᾶτος + r6.4 + 5 + 0 - ὃῦν - 60,1 - 54 + Default + ὃῦν + r60.1 + 54 + 0 - Ουν - 60,2 - 54 + Default + Ουν + r60.2 + 54 + 0 - οὖν - 60,3 - 49 + Default + οὖν + r60.3 + 54 + 0 - ουν - 60,4 - 54 + Default + ουν + r60.4 + 54 + 0 - ου¯ - 60,5 - 54 + Default + ου¯ + r60.5 + 54 + 0 - παλιν - 61,1 - 55 + Default + παλιν + r61.1 + 55 + 0 - παλ̣ιν̣ - 61,2 - 55 + Default + παλ̣ιν̣ + r61.2 + 55 + 0 - Παλιν - 61,3 - 55 + Default + Παλιν + r61.3 + 55 + 0 - παντ̣ε̣ϲ̣ - 61,4 - 55 + Default + παντ̣ε̣ϲ̣ + r61.4 + 56 + 0 - πάλιν - 61,5 - 55 + Default + πάλιν + r61.5 + 55 + 0 - παλι¯ - 61,6 - 55 + Default + παλι¯ + r61.6 + 55 + 0 - παντεϲ - 61,7 - 55 + Default + παντεϲ + r61.7 + 56 + 0 - παντεϲ - 62,1 - 56 + Default + παντεϲ + r62.1 + 56 + 0 - λέγοντες - 63,1 - 56 + Default + λέγοντες + r63.1 + 57 + 0 - λεγονΤεϲ - 63,2 - 57 + Default + λεγονΤεϲ + r63.2 + 57 + 0 - λεγοντεϲ - 63,3 - 57 + Default + λεγοντεϲ + r63.3 + 57 + 0 - λεγο¯τεϲ - 63,4 - 57 + Default + λεγο¯τεϲ + r63.4 + 57 + 0 - πα̣ντεϲ - 64,1 - 58 + Default + πα̣ντεϲ + r64.1 + 58 + 0 - μη - 64,2 - 58 + Default + μη + r64.2 + 58 + 0 - μὴ - 64,3 - 57 + Default + μὴ + r64.3 + 58 + 0 - τοῦτον - 65,1 - 58 + Default + τοῦτον + r65.1 + 59 + 0 - τουτον̣ - 65,2 - 59 + Default + τουτον̣ + r65.2 + 59 + 0 - τουτον - 65,3 - 59 + Default + τουτον + r65.3 + 59 + 0 - τουτο¯ - 65,4 - 59 + Default + τουτο¯ + r65.4 + 59 + 0 - αλλα - 66,1 - 60 + Default + αλλα + r66.1 + 60 + 0 - αλ - 66,2 - 60 + Default + αλ + r66.2 + 60 + 0 - ἀλλὰ - 66,3 - 59 + Default + ἀλλὰ + r66.3 + 60 + 0 - αλλα̣ - 66,4 - 60 + Default + αλλα̣ + r66.4 + 60 + 0 - τον - 67,1 - 61 + Default + τον + r67.1 + 61 + 0 - τὸν - 67,2 - 60 + Default + τὸν + r67.2 + 61 + 0 - βαραββα¯ - 68,1 - 62 + Default + βαραββα¯ + r68.1 + 62 + 0 - βαρραββαν - 68,2 - 62 + Default + βαρραββαν + r68.2 + 62 + 0 - Βαραββᾶν - 68,3 - 61 + Default + Βαραββᾶν + r68.3 + 62 + 0 - βαραββαν - 68,4 - 62 + Default + βαραββαν + r68.4 + 62 + 0 - ἦν - 69,1 - 62 + Default + ἦν + r69.1 + 63 + 0 - ην - 69,2 - 63 + Default + ην + r69.2 + 63 + 0 - Τι - 7,1 - 6 + Default + Τι + r7.1 + 6 + 0 - τιϲ - 7,2 - 6 + Default + τιϲ + r7.2 + 6 + 0 - τι - 7,3 - 6 + Default + τι + r7.3 + 6 + 0 - τί - 7,4 - 6 + Default + τί + r7.4 + 6 + 0 - δε - 70,1 - 64 + Default + δε + r70.1 + 64 + 0 - δὲ - 70,2 - 63 + Default + δὲ + r70.2 + 64 + 0 - ο - 71,1 - 65 + Default + ο + r71.1 + 65 + 0 - ὁ - 71,2 - 64 + Default + ὁ + r71.2 + 65 + 0 - Βαραββᾶς - 72,1 - 65 + Default + Βαραββᾶς + r72.1 + 66 + 0 - βαρραβαϲ - 72,2 - 66 + Default + βαρραβαϲ + r72.2 + 66 + 0 - βαραβαϲ - 72,3 - 66 + Default + βαραβαϲ + r72.3 + 66 + 0 - βαραββαϲ - 72,4 - 66 + Default + βαραββαϲ + r72.4 + 66 + 0 - β̣αραββαϲ - 72,5 - 65 + Default + β̣αραββαϲ + r72.5 + 65 + 0 - ληϲτηϲ - 73,1 - 67 + Default + ληϲτηϲ + r73.1 + 67 + 0 - ληϲτ̣η̣ϲ̣ʼ - 73,2 - 66 + Default + ληϲτ̣η̣ϲ̣ʼ + r73.2 + 66 + 0 - λῃστής - 73,3 - 66 + Default + λῃστής + r73.3 + 67 + 0 - ἐστιν - 8,1 - 7 + Default + ἐστιν + r8.1 + 7 + 0 - εϲτιν - 8,2 - 7 + Default + εϲτιν + r8.2 + 7 + 0 - ε̣ϲ̣τιν - 8,3 - 7 + Default + ε̣ϲ̣τιν + r8.3 + 7 + 0 - εϲτι¯ - 8,4 - 7 + Default + εϲτι¯ + r8.4 + 7 + 0 - εϲτιν̣ - 8,5 - 7 + Default + εϲτιν̣ + r8.5 + 7 + 0 - αληθεια - 9,1 - 8 + Default + αληθεια + r9.1 + 8 + 0 - αληθια - 9,2 - 8 + Default + αληθια + r9.2 + 8 + 0 - αλήθεια - 9,3 - 8 + Default + αλήθεια + r9.3 + 8 + 0 - αληθηα - 9,4 - 8 + Default + αληθηα + r9.4 + 8 + 0 - ἀλήθεια - 9,5 - 8 + Default + ἀλήθεια + r9.5 + 8 + 0 - base - path + base - w11 - path + w11 - w2 - path + w2 - w211 - path + w211 - w37 - path + w37 - w38 - path + w38 - w44 - path + w44 - w54 - path + w54 - P66 - path + P66 - w1 - path + w1 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w21 - path + w21 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w39 - path + w39 - w41 - path + w41 - w45 - path + w45 - w7 - path + w7 - P60 - path + P60 - w290 - path + w290 - w290 - path + w290 - w11 - path + w11 - w2 - path + w2 - w211 - path + w211 - w37 - path + w37 - w38 - path + w38 - w44 - path + w44 - w54 - path + w54 - P60 - path + P60 - w30 - path + w30 - w45 - path + w45 - - w1 - path + + P66 - w13 - path + w1 - w17 - path + w13 - w19 - path + w17 - w21 - path + w19 - w22 - path + w21 - w28 - path + w22 - w3 - path + w28 - w32 - path + w3 - w33 - path + w32 - w34 - path + w33 - w36 - path + w34 - w39 - path + w36 - w41 - path + w39 - w7 - path + w41 - - P66 - path + + w7 - base - path + base - w11 - path + w11 - w37 - path + w37 - w44 - path + w44 - w54 - path + w54 - base - path + base - - w211 - path + + w290 - - w30 - path + + P66 - P66 - path + w1 - w1 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w22 - w22 - path + w28 - w28 - path + w3 - w3 - path + w32 - w32 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w38 - w38 - path + w41 - w41 - path + w45 - w45 - path + w7 - - w7 - path + + w211 - - w290 - path + + w30 - w39 - path + w39 - w211 - path + w211 - w30 - path + w30 - w290 - path + w290 - - w19 - path + + P66 - - w34 - path + + w1 - - w7 - path + + w11 - P66 - path + w13 - w1 - path + w17 - w11 - path + w2 - w13 - path + w21 - w17 - path + w22 - w2 - path + w28 - w21 - path + w3 - w22 - path + w32 - w28 - path + w33 - w3 - path + w36 - w32 - path + w37 - w33 - path + w38 - w36 - path + w41 - w37 - path + w44 - w38 - path + w45 - w41 - path + w54 - - w44 - path + + w19 - - w45 - path + + w34 - - w54 - path + + w7 - w39 - path + w39 - base - path + base - w211 - path + w211 - w7 - path + w7 - base - path + base - - w41 - path + + P66 - - w38 - path + + w1 - - w2 - path + + w11 - - w30 - path + + w13 - P66 - path + w17 - w1 - path + w21 - w11 - path + w22 - w13 - path + w28 - w17 - path + w3 - w21 - path + w32 - w22 - path + w33 - w28 - path + w36 - w3 - path + w37 - w32 - path + w39 - w33 - path + w44 - w36 - path + w45 - w37 - path + w54 - - w39 - path + + w30 - - w44 - path + + w38 - - w45 - path + + w2 - - w54 - path + + w41 - w34 - path + w34 - w19 - path + w19 - w290 - path + w290 - - w1 - path + + w19 - - w11 - path + + w3 - w13 - path + w1 - w17 - path + w11 - w21 - path + w13 - w211 - path + w17 - w22 - path + w21 - w28 - path + w211 - w32 - path + w22 - w33 - path + w28 - w36 - path + w32 - w37 - path + w33 - w39 - path + w36 - w44 - path + w37 - w45 - path + w39 - w54 - path + w44 - w7 - path + w45 - - w19 - path + + w54 - - w3 - path + + w7 - P66 - path + P66 - w34 - path + w34 - w41 - path + w41 - base - path + base - w38 - path + w38 - w30 - path + w30 - w2 - path + w2 - w290 - path + w290 - - w1 - path + + w13 - w11 - path + w1 - w17 - path + w11 - w2 - path + w17 - w21 - path + w2 - w211 - path + w21 - w22 - path + w211 - w28 - path + w22 - w30 - path + w28 - w32 - path + w30 - w33 - path + w32 - w36 - path + w33 - w37 - path + w36 - w38 - path + w37 - w39 - path + w38 - w41 - path + w39 - w44 - path + w41 - w45 - path + w44 - w54 - path + w45 - w7 - path + w54 - - w13 - path + + w7 - w19 - path + w19 - w3 - path + w3 - w34 - path + w34 - base - path + base - P66 - path + P66 - w13 - path + w13 - - P66 - path + + w1 - w1 - path + w11 - w11 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w211 - w211 - path + w22 - w22 - path + w28 - w28 - path + w290 - w290 - path + w3 - w3 - path + w30 - w30 - path + w32 - w32 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - w45 - path + w54 - w54 - path + w7 - - w7 - path + + P66 - base - path + base - base - path + base - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - w1 - path + w1 - w290 - path + w290 - w3 - path + w3 - P66 - path + P66 - - w11 - path + + w37 - - w13 - path + + w38 - w17 - path + w11 - w19 - path + w13 - w2 - path + w17 - w21 - path + w19 - w211 - path + w2 - w22 - path + w21 - w28 - path + w211 - w30 - path + w22 - w32 - path + w28 - w33 - path + w30 - w34 - path + w32 - w36 - path + w33 - w39 - path + w34 - w41 - path + w36 - w44 - path + w39 - w45 - path + w41 - w54 - path + w44 - w7 - path + w45 - - w37 - path + + w54 - - w38 - path + + w7 - base - path + base - w1 - path + w1 - w290 - path + w290 - w3 - path + w3 - P66 - path + P66 - base - path + base - w37 - path + w37 - w38 - path + w38 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - P66 - path + P66 - w290 - path + w290 - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - - w290 - path + + base - - base - path + + w290 - P66 - path + P66 - - w290 - path + + P66 - P66 - path + w1 - w1 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w211 - w211 - path + w22 - w22 - path + w28 - w28 - path + w3 - w3 - path + w30 - w30 - path + w32 - w32 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - w45 - path + w54 - w54 - path + w7 - - w7 - path + + w290 - base - path + base - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w54 - path + w54 - w7 - path + w7 - w45 - path + w45 - base - path + base - w290 - path + w290 - w45 - path + w45 - w290 - path + w290 - P66 - path + P66 - base - path + base - - w1 - path + + w211 - - w11 - path + + w3 - - w13 - path + + w33 - w17 - path + w1 - w2 - path + w11 - w21 - path + w13 - w22 - path + w17 - w28 - path + w2 - w30 - path + w21 - w32 - path + w22 - w34 - path + w28 - w36 - path + w30 - w37 - path + w32 - w38 - path + w34 - w39 - path + w36 - w41 - path + w37 - w44 - path + w38 - w54 - path + w39 - w7 - path + w41 - - w19 - path + + w44 - - w211 - path + + w54 - - w3 - path + + w7 - - w33 - path + + w19 - w211 - path + w211 - w3 - path + w3 - w33 - path + w33 - w290 - path + w290 - w54 - path + w54 - - w1 - path + + w17 - w11 - path + w1 - w13 - path + w11 - w2 - path + w13 - w21 - path + w2 - w22 - path + w21 - w28 - path + w22 - w30 - path + w28 - w32 - path + w30 - w34 - path + w32 - w36 - path + w34 - w37 - path + w36 - w38 - path + w37 - w39 - path + w38 - w41 - path + w39 - w44 - path + w41 - w45 - path + w44 - w7 - path + w45 - - w211 - path + + w7 - - w17 - path + + w211 - w54 - path + w54 - w54 - path + w54 - P66 - path + P66 - - w1 - path + + w22 - w11 - path + w1 - w13 - path + w11 - w19 - path + w13 - w2 - path + w19 - w21 - path + w2 - w28 - path + w21 - w30 - path + w28 - w32 - path + w30 - w34 - path + w32 - w36 - path + w34 - w37 - path + w36 - w38 - path + w37 - w39 - path + w38 - w41 - path + w39 - w44 - path + w41 - w45 - path + w44 - w7 - path + w45 - - w22 - path + + w7 - base - path + base - w17 - path + w17 - base - path + base - w22 - path + w22 - - w1 - path + + w290 - w11 - path + w1 - w13 - path + w11 - w17 - path + w13 - w19 - path + w17 - w2 - path + w19 - w21 - path + w2 - w211 - path + w21 - w28 - path + w211 - w3 - path + w28 - w30 - path + w3 - w32 - path + w30 - w33 - path + w32 - w34 - path + w33 - w36 - path + w34 - w37 - path + w36 - w38 - path + w37 - w39 - path + w38 - w41 - path + w39 - w44 - path + w41 - w45 - path + w44 - w7 - path + w45 - - w290 - path + + w7 - w290 - path + w290 - - w30 - path + + w19 - - w34 - path + + w30 - - w1 - path + + w34 - - w11 - path + + w3 - - w13 - path + + w33 - w17 - path + w1 - w2 - path + w11 - w21 - path + w13 - w211 - path + w17 - w22 - path + w2 - w28 - path + w21 - w32 - path + w211 - w36 - path + w22 - w37 - path + w28 - w38 - path + w32 - w39 - path + w36 - w41 - path + w37 - w44 - path + w38 - w45 - path + w39 - w7 - path + w41 - - w3 - path + + w44 - - w33 - path + + w45 - - w19 - path + + w7 - base - path + base - w19 - path + w19 - w290 - path + w290 - - w28 - path + + w1 - w1 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w211 - w211 - path + w22 - w22 - path + w3 - w3 - path + w32 - w32 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w54 - w54 - path + w7 - - w7 - path + + P66 - - P66 - path + + w28 - base - path + base - w30 - path + w30 - w45 - path + w45 - P66 - path + P66 - base - path + base - w290 - path + w290 - w3 - path + w3 - w33 - path + w33 - w290 - path + w290 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w32 - path + w32 - w33 - path + w33 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - base - path + base - P66 - path + P66 - P66 - path + P66 - w34 - path + w34 - P66 - path + P66 - w30 - path + w30 - - w1 - path + + P66 - - w290 - path + + w13 - - w211 - path + + w17 - - w54 - path + + w19 - - w11 - path + + w2 - - w28 - path + + w21 - - w34 - path + + w22 - - w7 - path + + w3 - P66 - path + w30 - w13 - path + w32 - w17 - path + w33 - w19 - path + w36 - w2 - path + w37 - w21 - path + w38 - w22 - path + w39 - w3 - path + w41 - w30 - path + w44 - w32 - path + w45 - - w33 - path + + w290 - - w36 - path + + w211 - - w37 - path + + w11 - - w38 - path + + w28 - - w39 - path + + w34 - - w41 - path + + w7 - - w44 - path + + w54 - - w45 - path + + w1 - base - path + base - - w30 - path + + P66 - P66 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w22 - w22 - path + w3 - w3 - path + w32 - w32 - path + w33 - w33 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - - w45 - path + + w30 - w211 - path + w211 - w11 - path + w11 - w28 - path + w28 - w34 - path + w34 - w7 - path + w7 - w1 - path + w1 - base - path + base - w54 - path + w54 - w290 - path + w290 - w30 - path + w30 - - w54 - path + + w211 - - w1 - path + + P66 - - w290 - path + + w11 - - w3 - path + + w13 - w11 - path + w19 - w13 - path + w2 - w19 - path + w21 - w2 - path + w22 - w21 - path + w28 - w22 - path + w30 - w28 - path + w32 - w30 - path + w33 - w32 - path + w34 - w33 - path + w36 - w34 - path + w37 - w36 - path + w38 - w37 - path + w39 - w38 - path + w41 - w39 - path + w45 - w41 - path + w7 - - w45 - path + + base - - w7 - path + + w1 - - w211 - path + + w290 - - P66 - path + + w3 - - w17 - path + + P60 - w44 - path + w44 - - P60 - path + + w54 - - base - path + + w17 - P66 - path + P66 - base - path + base - w17 - path + w17 - - w1 - path + + w290 - w3 - path + w1 - - w290 - path + + w3 - w44 - path + w44 - P60 - path + P60 - w11 - path + w11 - w13 - path + w13 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w22 - path + w22 - w28 - path + w28 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w45 - path + w45 - w7 - path + w7 - - w290 - path + + w2 - - w2 - path + + w211 - w211 - path + w3 - w3 - path + w32 - w32 - path + w38 - - w38 - path + + w1 - w1 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w21 - w21 - path + w22 - w22 - path + w30 - w30 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - w45 - path + w54 - w54 - path + w7 - - w7 - path + + w290 - w28 - path + w28 - base - path + base - P66 - path + P66 - P60 - path + P60 - w21 - path + w21 - - w32 - path + + w22 - - w54 - path + + w11 - - w22 - path + + w13 - - w1 - path + + w2 - - w17 - path + + w28 - - w19 - path + + w34 - - w3 - path + + w36 - - w30 - path + + w38 - - w33 - path + + w39 - - w37 - path + + w45 - - w41 - path + + w7 - - w44 - path + + w54 - - w11 - path + + w32 - - w13 - path + + w1 - - w2 - path + + w17 - - w28 - path + + w19 - - w34 - path + + w3 - - w36 - path + + w30 - - w38 - path + + w33 - - w39 - path + + w37 - - w45 - path + + w41 - - w7 - path + + w44 - w290 - path + w290 - base - path + base - w32 - path + w32 - w21 - path + w21 - w22 - path + w22 - base - path + base - w290 - path + w290 - - w21 - path + + P66 - - w211 - path + + w17 - - w22 - path + + w19 - - w44 - path + + w30 - P66 - path + w33 - w17 - path + w37 - - w19 - path + + w21 - - w30 - path + + w211 - - w33 - path + + w22 - - w37 - path + + w44 - w41 - path + w41 - w1 - path + w1 - w3 - path + w3 - w41 - path + w41 - w290 - path + w290 - base - path + base - w3 - path + w3 - - w54 - path + + w1 - - w1 - path + + w54 - - w11 - path + + P66 - - w13 - path + + w17 - - w2 - path + + w19 - - w28 - path + + w30 - - w34 - path + + w32 - - w36 - path + + w33 - - w38 - path + + w37 - w39 - path + w11 - w45 - path + w13 - w7 - path + w2 - - P66 - path + + w28 - - w17 - path + + w34 - - w19 - path + + w36 - - w30 - path + + w38 - - w32 - path + + w39 - - w33 - path + + w45 - - w37 - path + + w7 - w11 - path + w11 - w13 - path + w13 - w2 - path + w2 - w28 - path + w28 - w34 - path + w34 - w36 - path + w36 - w38 - path + w38 - w39 - path + w39 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - base - path + base - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w22 - path + w22 - w28 - path + w28 - w290 - path + w290 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - w211 - path + w211 - w211 - path + w211 - - w1 - path + + P66 - w11 - path + w1 - w13 - path + w11 - w17 - path + w13 - w19 - path + w17 - w2 - path + w19 - w21 - path + w2 - w22 - path + w21 - w28 - path + w22 - w3 - path + w28 - w30 - path + w3 - w32 - path + w30 - w33 - path + w32 - w34 - path + w33 - w36 - path + w34 - w37 - path + w36 - w38 - path + w37 - w39 - path + w38 - w41 - path + w39 - w44 - path + w41 - w45 - path + w44 - w54 - path + w45 - w7 - path + w54 - - P66 - path + + w7 - w290 - path + w290 - base - path + base - w290 - path + w290 - P66 - path + P66 - base - path + base - - w2 - path + + w19 - - w22 - path + + P60 - w32 - path + w2 - w37 - path + w22 - w38 - path + w32 - w45 - path + w37 - - P60 - path + + w38 - - w19 - path + + w45 - - w7 - path + + w1 - w1 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w21 - w21 - path + w211 - w211 - path + w28 - w28 - path + w3 - w3 - path + w30 - w30 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w54 - - w54 - path + + w7 - w2 - path + w2 - w22 - path + w22 - w32 - path + w32 - w37 - path + w37 - w38 - path + w38 - w45 - path + w45 - w19 - path + w19 - P60 - path + P60 - base - path + base - w7 - path + w7 - w30 - path + w30 - w44 - path + w44 - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w21 - path + w21 - w211 - path + w211 - w28 - path + w28 - w3 - path + w3 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w39 - path + w39 - w41 - path + w41 - w54 - path + w54 - w290 - path + w290 - base - path + base - w45 - path + w45 - - w17 - path + + w13 - - w32 - path + + w21 - - w41 - path + + w28 - - w54 - path + + w34 - - w1 - path + + w36 - - P60 - path + + w37 - - P66 - path + + w39 - w2 - path + P60 - w211 - path + P66 - w22 - path + w2 - w3 - path + w211 - w33 - path + w22 - w38 - path + w3 - - w13 - path + + w33 - - w21 - path + + w38 - - w28 - path + + w11 - - w34 - path + + w1 - - w36 - path + + w17 - - w37 - path + + w32 - - w39 - path + + w41 - - w11 - path + + w54 - - w19 - path + + w30 - w44 - path + w19 - - w30 - path + + w44 - P66 - path + P66 - w211 - path + w211 - w3 - path + w3 - w32 - path + w32 - w38 - path + w38 - w11 - path + w11 - w45 - path + w45 - w1 - path + w1 - w17 - path + w17 - w30 - path + w30 - w32 - path + w32 - w41 - path + w41 - w54 - path + w54 - w45 - path + w45 - base - path + base - w290 - path + w290 - - w11 - path + + w1 - - w38 - path + + w3 - - w45 - path + + w54 - P60 - path + P60 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w211 - path + w211 - w22 - path + w22 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w41 - path + w41 - w44 - path + w44 - - w1 - path + + P66 - - w3 - path + + w11 - - w54 - path + + w38 - - P66 - path + + w45 - w290 - path + w290 - P66 - path + P66 - base - path + base - w1 - path + w1 - w3 - path + w3 - w54 - path + w54 - w22 - path + w22 - w33 - path + w33 - - w13 - path + + P60 - - w21 - path + + w17 - - w28 - path + + w19 - - w34 - path + + w2 - - w36 - path + + w211 - - w37 - path + + w30 - - w39 - path + + w32 - - w7 - path + + w41 - P60 - path + w44 - - w17 - path + + w13 - - w19 - path + + w21 - - w2 - path + + w28 - - w211 - path + + w34 - - w30 - path + + w36 - - w32 - path + + w37 - - w41 - path + + w39 - - w44 - path + + w7 - w13 - path + w13 - w21 - path + w21 - w28 - path + w28 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w39 - path + w39 - w7 - path + w7 - w1 - path + w1 - w22 - path + w22 - w33 - path + w33 - w7 - path + w7 - - w290 - path + + P60 - P60 - path + P66 - P66 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w211 - w211 - path + w28 - w28 - path + w3 - w3 - path + w30 - w30 - path + w32 - w32 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - w45 - path + w54 - - w54 - path + + w290 - base - path + base - w290 - path + w290 - w19 - path + w19 - P60 - path + P60 - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - w38 - path + w38 - base - path + base - - w1 - path + + w13 - - w3 - path + + w290 - w54 - path + w1 - - w13 - path + + w3 - - P60 - path + + w54 - P66 - path + P66 - w11 - path + w11 - w17 - path + w17 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w7 - path + w7 - - w290 - path + + P60 - w38 - path + w38 - base - path + base - w19 - path + w19 - - w37 - path + + w11 - - P66 - path + + w17 - - w45 - path + + w2 - w11 - path + w211 - w17 - path + w22 - w2 - path + w28 - w211 - path + w30 - w22 - path + w32 - w28 - path + w33 - w30 - path + w34 - w32 - path + w36 - w33 - path + w38 - w34 - path + w39 - w36 - path + w41 - w38 - path + w44 - w39 - path + w7 - - w41 - path + + w37 - - w44 - path + + w45 - - w7 - path + + w19 - w19 - path + w21 - - w21 - path + + P66 - P60 - path + P60 - w290 - path + w290 - w13 - path + w13 - w1 - path + w1 - w3 - path + w3 - w54 - path + w54 - base - path + base - w290 - path + w290 - w19 - path + w19 - w21 - path + w21 - - w11 - path + + w2 - - w39 - path + + w22 - w54 - path + w11 - - w13 - path + + w39 - - w17 - path + + w54 - w211 - path + w13 - w30 - path + w17 - w32 - path + w211 - w33 - path + w30 - w34 - path + w32 - w36 - path + w33 - w38 - path + w34 - w41 - path + w36 - w44 - path + w38 - w7 - path + w41 - - w2 - path + + w44 - - w22 - path + + w7 - w28 - path + w28 - base - path + base - P66 - path + P66 - w37 - path + w37 - w1 - path + w1 - w3 - path + w3 - P60 - path + P60 - w45 - path + w45 - w2 - path + w2 - - w37 - path + + w11 - - w1 - path + + w13 - w11 - path + w17 - w13 - path + w19 - w17 - path + w21 - w19 - path + w22 - w21 - path + w28 - w22 - path + w30 - w28 - path + w33 - w30 - path + w34 - w33 - path + w36 - w34 - path + w39 - w36 - path + w41 - w39 - path + w44 - w41 - path + w45 - w44 - path + w54 - w45 - path + w7 - - w54 - path + + w1 - - w7 - path + + w37 - w290 - path + w290 - base - path + base - w290 - path + w290 - - w39 - path + + w11 - w54 - path + w39 - - w11 - path + + w54 - base - path + base - - P60 - path + + w34 - w1 - path + w1 - w13 - path + w13 - w19 - path + w19 - w21 - path + w21 - w211 - path + w211 - w3 - path + w3 - w32 - path + w32 - w33 - path + w33 - w38 - path + w38 - w45 - path + w45 - w7 - path + w7 - - P66 - path + + w17 - w17 - path + w30 - w30 - path + w41 - w41 - path + w44 - - w44 - path + + P66 - - w36 - path + + P60 - - w34 - path + + w36 - w22 - path + w22 - w2 - path + w2 - w1 - path + w1 - w19 - path + w19 - w3 - path + w3 - w32 - path + w32 - w33 - path + w33 - w45 - path + w45 - w13 - path + w13 - w21 - path + w21 - w211 - path + w211 - w28 - path + w28 - w38 - path + w38 - w39 - path + w39 - w54 - path + w54 - w7 - path + w7 - P60 - path + P60 - w2 - path + w2 - w34 - path + w34 - P66 - path + P66 - - base - path + + w290 - - w290 - path + + base - w36 - path + w36 - w11 - path + w11 - - w17 - path + + w22 - w13 - path + w13 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w28 - path + w28 - w30 - path + w30 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w54 - path + w54 - w7 - path + w7 - - w22 - path + + w17 - base - path + base - w17 - path + w17 - P60 - path + P60 - w1 - path + w1 - w13 - path + w13 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - w11 - path + w11 - w22 - path + w22 - w290 - path + w290 - w290 - path + w290 - - w22 - path + + P60 - - w54 - path + + P66 - P66 - path + w1 - w1 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w211 - w211 - path + w28 - w28 - path + w3 - w3 - path + w30 - w30 - path + w32 - w32 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - w45 - path + w7 - - w7 - path + + w22 - - P60 - path + + w54 - base - path + base - base - path + base - P60 - path + P60 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w7 - path + w7 - P66 - path + P66 - w22 - path + w22 - w54 - path + w54 - - w1 - path + + w211 - w11 - path + w1 - w13 - path + w11 - w17 - path + w13 - w19 - path + w17 - w2 - path + w19 - w21 - path + w2 - w22 - path + w21 - w28 - path + w22 - w3 - path + w28 - w30 - path + w3 - w32 - path + w30 - w33 - path + w32 - w34 - path + w33 - w36 - path + w34 - w37 - path + w36 - w38 - path + w37 - w39 - path + w38 - w41 - path + w39 - w44 - path + w41 - w45 - path + w44 - w54 - path + w45 - w7 - path + w54 - - w211 - path + + w7 - P60 - path + P60 - base - path + base - P66 - path + P66 - - w1 - path + + w38 - - w11 - path + + P66 - - w39 - path + + w13 - - w41 - path + + w17 - - w38 - path + + w19 - P66 - path + w2 - w13 - path + w21 - w17 - path + w22 - w19 - path + w28 - w2 - path + w3 - w21 - path + w30 - w22 - path + w32 - w28 - path + w33 - w3 - path + w34 - w30 - path + w36 - w32 - path + w37 - w33 - path + w44 - w34 - path + w45 - w36 - path + w54 - w37 - path + w7 - - w44 - path + + w1 - - w45 - path + + w11 - - w54 - path + + w39 - - w7 - path + + w41 - base - path + base - w1 - path + w1 - w11 - path + w11 - w39 - path + w39 - w41 - path + w41 - w38 - path + w38 - base - path + base - P66 - path + P66 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - base - path + base - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - w37 - path + w37 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w21 - path + w21 - w211 - path + w211 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - P66 - path + P66 - w22 - path + w22 - w38 - path + w38 - w2 - path + w2 - base - path + base - w290 - path + w290 - - P66 - path + + w1 - w1 - path + w11 - w11 - path + w13 - w13 - path + w17 - w17 - path + w19 - w19 - path + w2 - w2 - path + w21 - w21 - path + w211 - w211 - path + w22 - w22 - path + w28 - w28 - path + w3 - w3 - path + w30 - w30 - path + w32 - w32 - path + w33 - w33 - path + w34 - w34 - path + w36 - w36 - path + w37 - w37 - path + w38 - w38 - path + w39 - w39 - path + w41 - w41 - path + w44 - w44 - path + w45 - w45 - path + w54 - w54 - path + w7 - - w7 - path + + P66 - base - path + base - - w38 - path + + w34 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w36 - path + w36 - w37 - path + w37 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - - w34 - path + + w38 - base - path + base - base - path + base - w38 - path + w38 - w34 - path + w34 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w36 - path + w36 - w37 - path + w37 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - P66 - path + P66 - w1 - path + w1 - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w21 - path + w21 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - P66 - path + P66 - base - path + base - base - path + base - w11 - path + w11 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w211 - path + w211 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w37 - path + w37 - w39 - path + w39 - w41 - path + w41 - w44 - path + w44 - w45 - path + w45 - w54 - path + w54 - w7 - path + w7 - w21 - path + w21 - w290 - path + w290 - P66 - path + P66 - w1 - path + w1 - w22 - path + w22 - w38 - path + w38 - w2 - path + w2 - w11 - path + w11 - w37 - path + w37 - w44 - path + w44 - w54 - path + w54 - w1 - path + w1 - w13 - path + w13 - w17 - path + w17 - w19 - path + w19 - w2 - path + w2 - w211 - path + w211 - w22 - path + w22 - w28 - path + w28 - w3 - path + w3 - w30 - path + w30 - w32 - path + w32 - w33 - path + w33 - w34 - path + w34 - w36 - path + w36 - w38 - path + w38 - w39 - path + w39 - w41 - path + w41 - w45 - path + w45 - w7 - path + w7 - P66 - path + P66 - w290 - path + w290 - w21 - path + w21 - base - path + base + + + + + __END__ + + + __START__ + + + r11.1 + + + r37.1 + + + r38.1 + + + r39.1 + + + r39.2 + + + r39.3 + + + r39.4 + + + r39.5 + + + r39.6 + + + r39.7 + + + r4.1 + + + r11.2 + + + r4.2 + + + r4.3 + + + r40.1 + + + r40.2 + + + r40.3 + + + r40.4 + + + r41.1 + + + r41.2 + + + r41.3 + + + r42.1 + + + r11.3 + + + r42.2 + + + r42.3 + + + r43.1 + + + r43.2 + + + r43.3 + + + r43.4 + + + r43.5 + + + r44.1 + + + r45.1 + + + r45.2 + + + r11.4 + + + r46.1 + + + r46.2 + + + r46.3 + + + r47.1 + + + r47.2 + + + r47.3 + + + r47.4 + + + r48.1 + + + r48.2 + + + r48.3 + + + r11.5 + + + r48.4 + + + r48.5 + + + r48.6 + + + r48.7 + + + r49.1 + + + r49.2 + + + r49.3 + + + r5.1 + + + r50.1 + + + r50.2 + + + r12.1 + + + r50.3 + + + r50.4 + + + r51.1 + + + r52.1 + + + r52.2 + + + r52.3 + + + r53.1 + + + r53.2 + + + r53.3 + + + r53.4 + + + r12.2 + + + r53.5 + + + r54.1 + + + r55.1 + + + r55.2 + + + r55.3 + + + r56.1 + + + r56.2 + + + r56.3 + + + r57.1 + + + r57.2 + + + r12.3 + + + r57.3 + + + r57.4 + + + r58.1 + + + r58.2 + + + r58.3 + + + r58.4 + + + r58.5 + + + r58.6 + + + r59.1 + + + r59.2 + + + r12.4 + + + r59.3 + + + r59.4 + + + r59.5 + + + r59.6 + + + r59.7 + + + r59.8 + + + r59.9 + + + r6.1 + + + r6.2 + + + r6.3 + + + r12.5 + + + r6.4 + + + r60.1 + + + r60.2 + + + r60.3 + + + r60.4 + + + r60.5 + + + r61.1 + + + r61.2 + + + r61.3 + + + r61.4 + + + r1.1 + + + r13.1 + + + r61.5 + + + r61.6 + + + r61.7 + + + r62.1 + + + r63.1 + + + r63.2 + + + r63.3 + + + r63.4 + + + r64.1 + + + r64.2 + + + r13.2 + + + r64.3 + + + r65.1 + + + r65.2 + + + r65.3 + + + r65.4 + + + r66.1 + + + r66.2 + + + r66.3 + + + r66.4 + + + r67.1 + + + r13.3 + + + r67.2 + + + r68.1 + + + r68.2 + + + r68.3 + + + r68.4 + + + r69.1 + + + r69.2 + + + r7.1 + + + r7.2 + + + r7.3 + + + r13.4 + + + r7.4 + + + r70.1 + + + r70.2 + + + r71.1 + + + r71.2 + + + r72.1 + + + r72.2 + + + r72.3 + + + r72.4 + + + r72.5 + + + r13.5 + + + r73.1 + + + r73.2 + + + r73.3 + + + r8.1 + + + r8.2 + + + r8.3 + + + r8.4 + + + r8.5 + + + r9.1 + + + r9.2 + + + r13.6 + + + r9.3 + + + r9.4 + + + r9.5 + + + r14.1 + + + r14.2 + + + r14.3 + + + r14.4 + + + r1.2 + + + r14.5 + + + r14.6 + + + r15.1 + + + r15.2 + + + r15.3 + + + r16.1 + + + r16.2 + + + r16.3 + + + r17.1 + + + r17.2 + + + r1.3 + + + r17.3 + + + r17.4 + + + r18.1 + + + r18.2 + + + r18.3 + + + r19.1 + + + r19.2 + + + r19.3 + + + r2.1 + + + r20.1 + + + r1.4 + + + r20.2 + + + r21.1 + + + r21.2 + + + r21.3 + + + r22.1 + + + r22.2 + + + r22.3 + + + r22.4 + + + r22.5 + + + r23.1 + + + r1.5 + + + r23.2 + + + r24.1 + + + r25.1 + + + r26.1 + + + r26.2 + + + r26.3 + + + r26.4 + + + r26.5 + + + r27.1 + + + r27.2 + + + r10.1 + + + r27.3 + + + r28.1 + + + r28.2 + + + r28.3 + + + r29.1 + + + r3.1 + + + r3.2 + + + r3.3 + + + r3.4 + + + r30.1 + + + r10.2 + + + r30.2 + + + r30.3 + + + r30.4 + + + r31.1 + + + r31.2 + + + r32.1 + + + r32.2 + + + r33.1 + + + r34.1 + + + r34.2 + + + r10.3 + + + r34.3 + + + r35.1 + + + r35.2 + + + r36.1 + + + r36.2 + + + r36.3 + + + r36.4 + + + r36.5 + + + r36.6 + + + r36.7 + + + εξήλθεν + εξηλθεν + 0 + orthographic + local + + + ἐν + εν + 0 + orthographic + local + + + εν + εν + 0 + orthographic + local + + + αυτῶ + αυτω + 0 + orthographic + local + + + αυΤω + αυτω + 0 + orthographic + local + + + αὐτῷ + αυΤω + 0 + orthographic + local + + + εϲτιν + έϲτιν + 0 + orthographic + local + + + εϲτι + εϲτιν + 0 + spelling + local + + + εϲτι + εϲτι¯ + 0 + orthographic + local + + + εϲτι¯ + εϲτ̣ι̣¯ + 0 + orthographic + local + + + απολεϲ̣θαι + απολυϲω + 0 + lexical + local + + + ὁ + ο + 0 + orthographic + local + + + απολυω + απολυϲω + 0 + grammatical + local + + + ἀπολύσω + απολ̀ύϲω + 0 + spelling + local + + + απολ̀ύϲω + απολυϲω + 0 + orthographic + local + + + ἐν + εν + 0 + orthographic + local + + + απολ̀ύϲω + ἀπολύσω + 0 + orthographic + local + + + απολ̀ύϲω + απολυϲω + 0 + orthographic + local + + + τὸν + τον + 0 + spelling + local + + + παντ̣ε̣ϲ̣ + παντεϲ + 0 + orthographic + local + + + παντεϲ + παντεϲ + 0 + orthographic + local + + + λέγοντες + λεγο¯τεϲ + 0 + orthographic + local diff --git a/base/t/text_tradition_collation_relationshipstore.t b/base/t/text_tradition_collation_relationshipstore.t index 65a2de8..c78d343 100644 --- a/base/t/text_tradition_collation_relationshipstore.t +++ b/base/t/text_tradition_collation_relationshipstore.t @@ -172,7 +172,7 @@ try { ok( 0, "Failed to add normal transposition complement: " . $e->message ); } -# TODO Test 4: make a global relationship that involves re-ranking a node first, when +# Test 4: make a global relationship that involves re-ranking a node first, when # the prior rank has a potential match too my $t4 = Text::Tradition->new( 'input' => 'Self', 'file' => 't/data/globalrel_test.xml' ); my $c4 = $t4->collation; @@ -189,6 +189,79 @@ $c4->calculate_ranks(); # Do our readings now share a rank? is( $c4->reading('r463.2')->rank, $c4->reading('r463.4')->rank, "Expected readings now at same rank" ); + +# Test group 5: relationship transitivity. +my $t5 = Text::Tradition->new( 'input' => 'Self', 'file' => 't/data/john.xml' ); +my $c5 = $t5->collation; + +# Test 5.1: make a grammatical link to an orthographically-linked reading +$c5->add_relationship( 'r13.5', 'r13.2', { type => 'orthographic' } ); +$c5->add_relationship( 'r13.1', 'r13.2', { type => 'grammatical', propagate => 1 } ); +my $impliedrel = $c5->get_relationship( 'r13.1', 'r13.5' ); +ok( $impliedrel, 'Relationship was made between indirectly linked readings' ); +if( $impliedrel ) { + is( $impliedrel->type, 'grammatical', 'Implicit inbound relationship has the correct type' ); +} + +# Test 5.2: make another orthographic link, see if the grammatical one propagates +$c5->add_relationship( 'r13.3', 'r13.5', { type => 'orthographic', propagate => 1 } ); +foreach my $rdg ( qw/ r13.3 r13.5 / ) { + my $newgram = $c5->get_relationship( 'r13.1', $rdg ); + ok( $newgram, 'Relationship was propagaged up between indirectly linked readings' ); + if( $newgram ) { + is( $newgram->type, 'grammatical', 'Implicit outbound relationship has the correct type' ); + } +} +my $neworth = $c5->get_relationship( 'r13.2', 'r13.3' ); +ok( $neworth, 'Relationship was made between indirectly linked siblings' ); +if( $neworth ) { + is( $neworth->type, 'orthographic', 'Implicit direct relationship has the correct type' ); +} + +# Test 5.3: make an intermediate (spelling) link to the remaining node +$c5->add_relationship( 'r13.4', 'r13.2', { type => 'spelling', propagate => 1 } ); +# Should be linked grammatically to 12.1, spelling-wise to the rest +my $newgram = $c5->get_relationship( 'r13.4', 'r13.1' ); +ok( $newgram, 'Relationship was made between indirectly linked readings' ); +if( $newgram ) { + is( $newgram->type, 'grammatical', 'Implicit intermediate-out relationship has the correct type' ); +} +foreach my $rdg ( qw/ r13.3 r13.5 / ) { + my $newspel = $c5->get_relationship( 'r13.4', $rdg ); + ok( $newspel, 'Relationship was made between indirectly linked readings' ); + if( $newspel ) { + is( $newspel->type, 'spelling', 'Implicit intermediate-in relationship has the correct type' ); + } +} + +# Test 5.4: add a parallel but not sibling relationship +$c5->add_relationship( 'r13.6', 'r13.2', { type => 'lexical', propagate => 1 } ); +ok( !$c5->get_relationship( 'r13.6', 'r13.1' ), + "Lexical relationship did not affect grammatical" ); +foreach my $rdg ( qw/ r13.3 r13.4 r13.5 / ) { + my $newlex = $c5->get_relationship( 'r13.6', $rdg ); + ok( $newlex, 'Parallel was made between indirectly linked readings' ); + if( $newlex ) { + is( $newlex->type, 'lexical', 'Implicit parallel-down relationship has the correct type' ); + } +} + +# Test 5.5: try it with non-colocated relationships +my $numrel = scalar $c5->relationships; +$c5->add_relationship( 'r62.1', 'r64.1', { type => 'transposition', propagate => 1 } ); +is( scalar $c5->relationships, $numrel+1, + "Adding non-colo relationship did not propagate" ); +# Add a pivot point +$c5->add_relationship( 'r61.1', 'r61.5', { type => 'orthographic' } ); +# Add a third transposed node +$c5->add_relationship( 'r62.1', 'r60.3', { type => 'transposition', propagate => 1 } ); +my $newtrans = $c5->get_relationship( 'r64.1', 'r60.3' ); +ok( $newtrans, 'Non-colo relationship was made between indirectly linked readings' ); +if( $newtrans ) { + is( $newtrans->type, 'transposition', 'Implicit non-colo relationship has the correct type' ); +} +is( scalar $c5->relationships, $numrel+4, + "Adding non-colo relationship only propagated on non-colos" ); }