Golly suggestions

For general discussion about Conway's Game of Life.
bubblegum
Posts: 737
Joined: August 25th, 2019, 11:59 pm
Location: click here to do nothing

Re: Golly suggestions

Post by bubblegum » October 19th, 2020, 2:53 am

PC101 wrote:
October 19th, 2020, 2:22 am
- A way to see the population inside of a selection. It would report information of the selection in the same place where it already reports wd x ht
- A way to see the population outside of a selection. It would report information of the selection in the same place where it already reports wd x ht.
insidepop.lua:

Code: Select all

local g = golly()
if #g.getselrect() == 0 then g.exit("There is no selection.") end
q = g.duplicate()
s = g.getselrect()
g.setlayer(q)
g.select(s)
g.clear(1)
f = g.getpop()
g.dellayer()
g.note(f)
outsidepop.lua:

Code: Select all

local g = golly()
if #g.getselrect() == 0 then g.exit("There is no selection.") end
q = g.duplicate()
s = g.getselrect()
g.setlayer(q)
g.select(s)
g.clear(0)
f = g.getpop()
g.dellayer()
g.note(f)
I am going to hope my rudimentary Lua knowledge will not fail me this time.

which is not helped by the seven minutes until midnight
Each day is a hidden opportunity, a frozen waterfall that's waiting to be realised, and one that I'll probably be ignoring
bubblegum wrote:
July 2nd, 2020, 8:33 pm
conwaylife signatures are amazing[citation needed]
part-time stator reducer

User avatar
PC101
Posts: 105
Joined: May 9th, 2019, 11:32 pm
Location: :noiɟɒɔo⅃

Re: Golly suggestions

Post by PC101 » October 23rd, 2020, 12:20 am

bubblegum wrote:
October 19th, 2020, 2:53 am
PC101 wrote:
October 19th, 2020, 2:22 am
- A way to see the population inside of a selection. It would report information of the selection in the same place where it already reports wd x ht
- A way to see the population outside of a selection. It would report information of the selection in the same place where it already reports wd x ht.
insidepop.lua:

Code: Select all

local g = golly()
if #g.getselrect() == 0 then g.exit("There is no selection.") end
q = g.duplicate()
s = g.getselrect()
g.setlayer(q)
g.select(s)
g.clear(1)
f = g.getpop()
g.dellayer()
g.note(f)
outsidepop.lua:

Code: Select all

local g = golly()
if #g.getselrect() == 0 then g.exit("There is no selection.") end
q = g.duplicate()
s = g.getselrect()
g.setlayer(q)
g.select(s)
g.clear(0)
f = g.getpop()
g.dellayer()
g.note(f)
I am going to hope my rudimentary Lua knowledge will not fail me this time.

which is not helped by the seven minutes until midnight
Thanks
Puffer Suppressor
Would we be able to know when we know everything there is to know?
How would we know what we don’t know that we don’t know?

Still working on the (34,7)c/156 caterpillar <- HELP WANTED!

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 11th, 2020, 11:11 am

DRH-oscillators.rle needs to be updated. My suggestions:
8: 76P8 (on the 230P8 page on the wiki)
9: 104P9 which is the one I used to make a P18. One of the P9s in the recent P45 stabilization is also not in the file currently.
10: 24P10, 37P10.1 and 37P10.2
11: Pinwheel, Jason's P11, Merzenich's P11
13: The three that are on the wiki and not in the file, plus the four in the billiard table file
14: 34P14 shuttle and 44P14, plus the four in the billiard table file
15: Karel's P15, plus the two in the billiard table file
16: Rob's P16
17: 54P17.1, 71P17.1 (on the 54P17.1 wiki page), honey thieves, the one in the phase shift file
18: The one that I co-discovered, and the honey farm hassler
21: The one in the phase shift file
22: All of them, including the P22 gun with suppressed output; there is no entry for 22 in the file
23: The one that's known, with several isomers
24: The P24 gun with suppressed output and dueling banjos
25: Honey farm hassler
26: Honey farm hassler
27: The three that have wiki pages; there is no entry for 27 in the file, plus the one in the phase shift file
29: Honey farm hassler
31: The one on the wiki and the honey farm hassler
33: Jason's P33, plus the P33 gun with suppressed output
35: 50P35 and the honey farm hassler
37: The two that are known
42: Honey farm hassler, traffic light hassler
43: Snark loop
45: The one that was stabilized with P9s just a few days ago, also honey farm hassler
(46 can be cut down a bit, but Tanner's P46 needs to be added)
48: The one in the phase shift file
49: The bumper loop and the glider shuttle. (The skewed pulsar hassler is probably too large.)
57: Bumper loop
58: Traffic light hassler
(60 can be cut down a bit.)
62: The one on the wiki
90: Traffic light hassler
92: Traffic light hassler (all examples in the file are currently P46 shuttle variants)
94: Honey farm hassler
120: The one in the traffic light hassler file
130: The shuttle
138: Gabriel's P138
177: The only one known

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 11th, 2020, 11:45 am

hotdogPi wrote:
December 11th, 2020, 11:11 am
DRH-oscillators.rle needs to be updated. My suggestions:
8: 76P8 (on the 230P8 page on the wiki)
9: 104P9 which is the one I used to make a P18. One of the P9s in the recent P45 stabilization is also not in the file currently.
10: 24P10, 37P10.1 and 37P10.2
11: Pinwheel, Jason's P11, Merzenich's P11
13: The three that are on the wiki and not in the file, plus the four in the billiard table file
14: 34P14 shuttle and 44P14, plus the four in the billiard table file
15: Karel's P15, plus the two in the billiard table file
16: Rob's P16
17: 54P17.1, 71P17.1 (on the 54P17.1 wiki page), honey thieves, the one in the phase shift file
18: The one that I co-discovered, and the honey farm hassler
21: The one in the phase shift file
22: All of them, including the P22 gun with suppressed output; there is no entry for 22 in the file
23: The one that's known, with several isomers
24: The P24 gun with suppressed output and dueling banjos
25: Honey farm hassler
26: Honey farm hassler
27: The three that have wiki pages; there is no entry for 27 in the file, plus the one in the phase shift file
29: Honey farm hassler
31: The one on the wiki and the honey farm hassler
33: Jason's P33, plus the P33 gun with suppressed output
35: 50P35 and the honey farm hassler
37: The two that are known
42: Honey farm hassler, traffic light hassler
43: Snark loop
45: The one that was stabilized with P9s just a few days ago, also honey farm hassler
(46 can be cut down a bit, but Tanner's P46 needs to be added)
48: The one in the phase shift file
49: The bumper loop and the glider shuttle. (The skewed pulsar hassler is probably too large.)
57: Bumper loop
58: Traffic light hassler
(60 can be cut down a bit.)
62: The one on the wiki
90: Traffic light hassler
92: Traffic light hassler (all examples in the file are currently P46 shuttle variants)
94: Honey farm hassler
120: The one in the traffic light hassler file
130: The shuttle
138: Gabriel's P138
177: The only one known
I will be very happy to check in a revised DRH-oscillators pattern, if someone will make one -- especially if it includes LifeViewer labels for some or all of the subpatterns.

Probably the "right" way to do this would be to write a script, borrowed maybe from the one that generates the Elementary Conduits Collection -- where the raw input is just a folder full of individual subpatterns, with label information maybe in comments or maybe in a separate text file. The script would build a DRH-type stamp collection for whatever patterns it finds in its input folder, and add LifeViewer labels in the right places.

Setting up the input folder would be a lot of work, but then it would become very easy to rebuild the collection with different organizational systems, partial or full attribution in labels, etc., whenever new discoveries need to be added.

User avatar
otismo
Posts: 554
Joined: August 18th, 2010, 1:41 pm
Location: Florida
Contact:

Re: Golly suggestions

Post by otismo » December 11th, 2020, 12:42 pm

such a script would come in handy down the road...
In the Game of Life there are no winners there are no losers there are only SURVIVORS.
.....**
...****
.******
*( ͡° ͜ʖ ͡°)*

Code: Select all

#CXRLE Pos=0,0
x = 26, y = 34, rule = B3/S23
23bo$23bobo$23b2o9$2b3o2$o5bo$o5bo$o5bo2$2b3o5b2o$10b2o3$2b2o$2b2o10$
15b2o$15b2o!

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 11th, 2020, 12:44 pm

Here would be my idea for the algorithm:
Step 1: For each pattern, it would run it to find its period and its maximum bounding box. If any pattern isn't stable, it generates a comment in the console and doesn't put it in the file. If a pattern isn't currently an oscillator but becomes one that's almost identical to the original (this is the case for the P200 currently in the file), advance its state to when it becomes one.
Step 2: Start placing the number "1" and still lifes in Column 1. Spacing between objects horizontally is only required to be 3 here. Column 1 is 120 cells wide. Still lifes are ordered by number of bits, with a 10-cell gap between sizes less than 10.
Step 3: Do the same for period 2 oscillators. Horizontal spacing must be 5 for periods from 2-10 and 7 for higher periods, but the last sentence of step 4 also applies within each row for horizontal spacing. Oscillators of period and 2 and higher are ordered by how many rows they take up. Patterns can be placed in groups (so the large P2 ones could be in the "agar2" group, and some of the P3s could be in the "pulsar3" group), which will be grouped together after all oscillators of that period without a group label.
Step 4: Continue, assuming vertical spacing same as horizontal spacing, until you can't fit the next number within 600 rows. (The current file is only 400 rows, but it's much wider than it is tall.) If this leaves enough space at the end that you can increase the vertical spacing by 1 for each row of patterns, do so until you can't anymore.
Step 5: Start the next column with the number you tried to fit in the previous column but couldn't. There are 5 cells between the end of the previous column and the numbers for the next column and 5 cells between the numbers and the pattern. The usable space of each column is 120 cells unless a single pattern is bigger than 120×120 (if it's wider but not taller, rotate it), in which case it expands to its bounding box.
Step 6: Convert the grid to RLE format.

It will require human trial and error to determine which patterns should fit vertically and which ones should fit horizontally.

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 12th, 2020, 12:30 pm

I'm going to start trying to code my algorithm in Python unless someone else has already started or this community doesn't like Python.

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 12th, 2020, 1:39 pm

hotdogPi wrote:
December 12th, 2020, 12:30 pm
I'm going to start trying to code my algorithm in Python unless someone else has already started or this community doesn't like Python.
Python is good! The Elementary Conduits Collection maintenance script is in Python.

Python was maybe a little embarrassing for a while, when Golly only supported Python 2.x and we had Lua as an alternative. But now we have Python 3.x available, so we should be good to go.

Technically Lua might be a slightly better choice of language for a maintenance script, only because it can be run immediately by anyone who downloads Golly, no extra Python installs necessary. But in practice, probably everyone who is likely to run this particular script will have Python installed anyway.

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 12th, 2020, 8:01 pm

Code: Select all

def convert_rle_to_grid(rle):
    if 'B3/S23' in rle:
        rle = rle[rle.index('B3/S23')+6:] #starts after the dimension and rule identifiers
    x = 0
    y = 0
    pattern = {}
    num = '' #num keeps track of digits and then processes it when it hits a b, o, or $
    while rle:
        if rle[0] in '0123456789': #digit
            num += rle[0]
            rle = rle[1:] #remove leftmost character
        elif rle[0] in ('o','b'):
            if num == '': #no number: only one
                num = 1
            num = int(num)
            for i in range(num):
                pattern[(x,y)] = (1 if rle[0] == 'o' else 0)
                x += 1
            num = ''
            rle = rle[1:] #remove leftmost character
        elif rle[0] == '$':
            if num == '':
                num = 1
            num = int(num)
            for i in range(num):
                y += 1
            x = 0
            num = ''
            rle = rle[1:] #remove leftmost character
        elif rle[0] == '!':
            break
        elif rle[0] in ' \n\t*': #asterisk is used to mark as period 1000+; just for this program, not typical RLE
            rle = rle[1:] #remove leftmost character
        else:
            raise ValueError('Invalid RLE', rle)
    max_x = max((-1000 if pattern[cell] == 0 else cell[0]) for cell in pattern)
    max_y = max((-1000 if pattern[cell] == 0 else cell[1]) for cell in pattern)
    for i in range(max_x+1):
        for j in range(max_y+1):
            pattern[(i,j)] = pattern.get((i,j), 0)
    return pattern

def print_grid(pattern): #shows pattern as a readable grid
    min_x = min((1000 if pattern[cell] == 0 else cell[0]) for cell in pattern) #only reads cells that are on
    max_x = max((-1000 if pattern[cell] == 0 else cell[0]) for cell in pattern)
    min_y = min((1000 if pattern[cell] == 0 else cell[1]) for cell in pattern)
    max_y = max((-1000 if pattern[cell] == 0 else cell[1]) for cell in pattern)
    for y in range(min_y, max_y+1):
        for x in range(min_x, max_x+1):
            print(('o' if pattern[(x,y)] == 1 else '.'), end='')
        print('') #newline
        

def run_pattern(pattern, extended):
    initial_pattern = pattern.copy()
    pattern_120 = None
    min_x = 0 #these four are the temporary minima and maxima
    max_x = max((0 if initial_pattern[cell] == 0 else cell[0]) for cell in pattern)
    min_y = 0
    max_y = max((0 if initial_pattern[cell] == 0 else cell[1]) for cell in pattern)
    initial_box = (min_x, max_x, min_y, max_y)
    cell_count = sum(initial_pattern.get(cell, 0) for cell in pattern)
    min_min_x = min_x #these four are the permanent minima and maxima, used for determining maximum pattern size
    max_max_x = max_x
    min_min_y = min_y
    max_max_y = max_y
    for period in range(1, 100000 if extended else 1000): #maximum oscillator period
        if period == 120:
            pattern_120 = pattern.copy()
        if period == 122:
            identical = True
            for i in pattern_120: #checks if it has returned to its original state
                if pattern.get(i, 0) != pattern_120.get(i, 0):
                    identical = False
                    break
            if identical:
                print('Not an oscillator, generations 120 and 122 are identical: %s' % convert_grid_to_rle(initial_pattern))
                return
        if not sum(pattern.get(cell, 0) for cell in pattern):
            print('Not an oscillator, dies out completely: %s' % convert_grid_to_rle(initial_pattern))
            return
        new_pattern = {}
        for x in range(min_x-1, max_x+2):
            for y in range(min_y-1, max_y+2): #for each cell
                count = 0
                for x1 in range(-1,2):
                    for y1 in range(-1,2): #check adjacent cells
                        if (x1 != 0 or y1 != 0) and pattern.get((x+x1,y+y1), 0) == 1:
                            count += 1
                if count == 3: #3: always alive
                    new_pattern[(x,y)] = 1
                elif count == 2: #2: stays the way it was before
                    new_pattern[(x,y)] = (pattern.get((x,y), 0) == 1)
                else: #0, 1, 4+: dead
                    new_pattern[(x,y)] = 0
        min_x = min((1000 if new_pattern[cell] == 0 else cell[0]) for cell in new_pattern)
        max_x = max((-1000 if new_pattern[cell] == 0 else cell[0]) for cell in new_pattern)
        min_y = min((1000 if new_pattern[cell] == 0 else cell[1]) for cell in new_pattern)
        max_y = max((-1000 if new_pattern[cell] == 0 else cell[1]) for cell in new_pattern)
        new_pattern2 = new_pattern.copy()
        for i in new_pattern: #reduces size if it's smaller
            if not (min_x <= i[0] <= max_x) or not (min_y <= i[1] <= max_y):
                if new_pattern[i] == 1:
                    raise ValueError('Live cell outside grid: %s, %s' % (i[0],i[1])) #should never happen, ideally
            else:
                new_pattern2[i] = new_pattern[i]
        min_min_x = min(min_min_x, min_x) #sets new absolute minima and maxima
        max_max_x = max(max_max_x, max_x)
        min_min_y = min(min_min_y, min_y)
        max_max_y = max(max_max_y, max_y)
        pattern = new_pattern2.copy()
        if max_max_x - min_min_x > 40 + (initial_box[1]-initial_box[0]) or max_max_y - min_min_y > 40 + (initial_box[1]-initial_box[0]):
            print('Not an oscillator, bounding box limit: %s' % convert_grid_to_rle(initial_pattern))
            return
        identical = (cell_count == sum(pattern.get(cell, 0) for cell in pattern))
        for i in initial_pattern: #checks if it has returned to its original state
            if pattern.get(i, 0) != initial_pattern.get(i, 0):
                identical = False
                break
        if identical:
            if period == 1 and sum(pattern.get(cell, 0) for cell in pattern) >= 24:
                return
            return (convert_grid_to_rle(pattern), period, max_max_x-min_min_x+1, max_max_y-min_min_y+1, -min_min_x, -min_min_y)
            #0: RLE. 1: period. 2, 3: maximum bounding box for x and y. 4, 5: Greatest negative for calculating offset.
    print('Not an oscillator, maximum generations reached: %s' % convert_grid_to_rle(initial_pattern))
    return

#these create the digits for labeling periods
zero = 'x = 8, y = 14, rule = B3/S23\n2b2obo$2bob2o$2o4b2o$o5bo$bo5bo$2o4b2o$o5bo$bo5bo$2o4b2o$o5bo$bo5bo$2o4b2o$2b2obo$2bob2o!'
one = 'x = 2, y = 14, rule = B3/S23\n2o$bo$o$2o2$2o$bo$o$2o2$2o$bo$o$2o!'
two = 'x = 8, y = 14, rule = B3/S23\n2b2obo$2bob2o$6b2o$6bo$7bo$6b2o$2b2obo$2bob2o$2o$o$bo$2o$2b2obo$2bob2o!'
three = 'x = 6, y = 14, rule = B3/S23\n2obo$ob2o$4b2o$4bo$5bo$4b2o$2obo$ob2o$4b2o$4bo$5bo$4b2o$2obo$ob2o!'
four = 'x = 8, y = 14, rule = B3/S23\n2o4b2o$bo5bo$o5bo$2o4b2o$2bob2o$2b2obo$6b2o$7bo$6bo$6b2o3$6b2o$6b2o!'
five = 'x = 8, y = 14, rule = B3/S23\n2bob2o$2b2obo$2o$bo$o$2o$2bob2o$2b2obo$6b2o$7bo$6bo$6b2o$2bob2o$2b2obo!'
six = 'x = 8, y = 14, rule = B3/S23\n2b2obo$2bob2o$2o$o$bo$2o$2b2obo$2bob2o$2o4b2o$o5bo$bo5bo$2o4b2o$2b2obo$2bob2o!'
seven = 'x = 6, y = 14, rule = B3/S23\nbob2o$b2obo$5b2o$6bo$5bo$5b2o$3b2o$4bo$3bo$3b2o$b2o$2bo$bo$b2o!'
eight = 'x = 8, y = 14, rule = B3/S23\n2b2obo$2bob2o$2o4b2o$o5bo$bo5bo$2o4b2o$2b2obo$2bob2o$2o4b2o$o5bo$bo5bo$2o4b2o$2b2obo$2bob2o!'
nine = 'x = 8, y = 14, rule = B3/S23\n2b2obo$2bob2o$2o4b2o$o5bo$bo5bo$2o4b2o$2b2obo$2bob2o$6b2o$6bo$7bo$6b2o$2b2obo$2bob2o!'

num_dict = {'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine'}

digit_rles = [zero,one,two,three,four,five,six,seven,eight,nine]

height = 600 #note: if a single period is taller than height variable, it won't work properly

                        

#These aren't quite valid RLEs in reality, as there needs to be a newline after the rule.
#The program ignores anything before and including "B3/S23". If you need to save space, it can omitted, too.
patterns = ['x = 24, y = 12, rule = B3/S23 $2o20b2o$bo20bo$bobo16bobo$2b2o16b2o2$5b6o2b6o2$2b2o16b2o$bobo16bobo$b\
o20bo$2o20b2o!',
            'x = 11, y = 15, rule = B3/S23 4b2o$5bo$4bo$3bob3o$3bobo2bo$2obo2b2obo$bobobobobo$bobobobob2o$2bo4bo\
2bo$3b2o3bo$5b3o$b3o$bo2b2o$4bobo$5bo!',
            'x = 14, y = 14, rule = B3/S23 10b2o$6b2o2bo$6bobobo$7bo2bob2o$10bob2o$10bo$b2o5bobo$bobo4b2o$2bo3b2o\
$7bo$7o$o$3b2o$3b2o!',
            'x = 22, y = 25, rule = B3/S23 10b2o$9bobo$9bo$7b2ob4o$6bobobo2bo$6bobobo$4b2o2b2o$3bo4bo$3b5o$b2o3bo\
4bo$o2b3o3b2ob2o$2obo5b2ob2o3b2o$3bo14bo$3b2o3b2ob2o5bob2o$8b2ob2o3b3o\
2bo$10bo4bo3b2o$14b5o$13bo4bo$12b2o2b2o$11bobobo$8bo2bobobo$8b4ob2o$\
12bo$10bobo$10b2o!',
            'x = 31, y = 12, rule = B3/S23 2o$bo27b2o$bobo25bo$2b2o23bobo$7bo4bo14b2o$5b2ob4ob2o3bo4bo$7bo4bo3b2o\
b4ob2o$2b2o14bo4bo$bobo23b2o$bo25bobo$2o27bo$29b2o!',
            'x = 20, y = 24, rule = B3/S23 \
2o16b2o$bo7b2o7bo$bobo3bo4bo3bobo$2b2o2bo6bo2b2o$5bo8bo$5bo8bo$5bo8bo$\
2b2o2bo6bo2b2o$bobo3bo4bo3bobo$bo7b2o7bo$2o16b2o$7b2o2b2o$7b2o2b2o$2o\
16b2o$bo7b2o7bo$bobo3bo4bo3bobo$2b2o2bo6bo2b2o$5bo8bo$5bo8bo$5bo8bo$2b\
2o2bo6bo2b2o$bobo3bo4bo3bobo$bo7b2o7bo$2o16b2o!',
            'x = 22, y = 24, rule = B3/S23 \
2o16b2o$bo7b2o7bo$bobo3bo4bo3bobo$2b2o2bo6bo2b2o$5bo8bo$5bo8bo$5bo8bo$\
2b2o2bo6bo2b2o$bobo3bo4bo3bobo$bo7b2o7bo$2o16b2o$10b2o2b2o$10b2o2b2o$\
2b2o16b2o$3bo16bo$3bobo12bobo$4b2o12b2o$8b8o$8bob4obo$8b8o$4b2o12b2o$\
3bobo12bobo$3bo16bo$2b2o16b2o!',
            'x = 23, y = 23, rule = B3/S23 \
10b3o$10bo$13bo$12b2o$8bo3bo$9bobo$10bo2$18bo$2b2o13bo$o2b2o11bo4b2o$o\
4bo11bo4bo$2o4bo11b2o2bo$5bo13b2o$4bo2$12bo$11bobo$10bo3bo$9b2o$9bo$\
12bo$10b3o!',
            'x = 13, y = 12, rule = B3/S23 11b2o$11bo$8b2obo$6bo3bo$5bo$5bo$7bo$7bo$2bo3bo$bob2o$bo$2o!',
            'x = 15, y = 15, rule = B3/S23\
10bo$9bobo$10bo2$8b5o$7bo5bo$10b3obo$5bo3b2obobo$4bo4bo3bo$bo2bo2b2o$o\
bobob2o$bo2bobo$4bob2o$5bo2bo$6b2o!',
            'x = 10, y = 10, rule = B3/S23 2o5bo$o2b2obobo$b2o4bobo$8bo$b4o$bo3bo2bo$2bo2bo2bo$3bobobo$4b2obobo$8b2o!',
            'x = 16, y = 14, rule = B3/S236b2o$5bo2bo3$7b2o2b2o$2b2obob2o3bo$o2bob5o2bob2o$2obo2b5obo2bo$3bo3b2o\
bob2o$3b2o2b2o3$7bo2bo$8b2o!',
            'x = 19, y = 19, rule = B3/S23\
10b2o$8bo2bo$8b3o2$6b7o$5bo7bo$4bob3ob3obo$2o2bobo5bobo$obobobo5bobob\
2o$2bobo9bobo$b2obobo5bobobobo$4bobo5bobo2b2o$4bob3ob3obo$5bo7bo$6b7o\
2$8b3o$7bo2bo$7b2o!',
            'x = 47, y = 16, rule = B3/S23\
6b2o18b2o8b2o$7bo18bo2bo6b2o$4b3o20b3o10bo$4bo4bo2bo2bo2bo2bo2bo9b7o$\
2bobob26o2bo$bobobo26bobob2o2b3o$bobobob2o2b3o2b3o2b3o2b3o2b2ob2obo3bo\
bob2o$2ob2obo3b2o3b2o3b2o3b2o5bo2b3o4b2obo$bobobob2o2b3o2b3o2b3o2b3ob\
2o2bo2bo3bobo2bo$bobobo25bobo6b3o2b2o$2bobob25obob4o$4bo4bo2bo2bo2bo2b\
o2bo2bo2bobobo4bob2o$4b3o24bobo2b4obo$7bo25bob2o5bo$6b2o25bo5b3o$32b2o5bo!',
            'x = 12, y = 12, rule = B3/S23 4b2o$3bo2bo$4b2obo$5bobo2bo$2b4obobobo$bo5b3obo$ob3o5bo$obobob4o$bo2bo\
bo$4bob2o$5bo2bo$6b2o!',
            'x = 33, y = 33, rule = B3/S23\
14b2o$14b2o2b2o$12b2obo2b2o$12b3o3$13b2o$10bo2b2o$9bo$8bo$9b2o$9b3o$3b\
4o4b2o$2bo4bo4b2o16b2o$bobo3bo4b3o15b2o$obo3bo7b2o$o14b2o$o14b3o12b3o$\
o2bo13b2o6b2o2bob2o$b2o15b2o5b2o2b2o$18b3o8b2o$20b2o$21b2o2bo$21b2obo$\
23bo$18b2o$17bo2bo$20bo$20bo$14bo3bobo$13bo3bobo$13bo4bo$14b4o!',
            'x = 107, y = 21, rule = B3/S23\
b2o100b2o$b2o99bo2bo$105bo$bo103bo$obo96bo3bobo$o2bo2b2o90bo3bobo$4bob\
2o90bo4bo$2b2o95b4o2$7bobo2bob2obo2bob2obo2bob3o4b4o4b4o4b3obo2bob2obo\
2bob3o4b4o4b4o4b4o$7bob4ob2ob4ob2ob4ob4o2b6o2b6o2b4ob4ob2ob4ob4o2b6o2b\
6o2b6o$7bobo2bob2obo2bob2obo2bob2obo2bob2obo2bob2obo2bob2obo2bob2obo2b\
ob2obo3b4o4b4o4b4o$100b2o$2b2o95b4o$2b2o2b2o90bobo2bo$2obo2b2o90b2o2bo\
bo$3o100bobo$105b2o$104b3o$b2o100bobo$b2o100b2o!',
            'x = 28, y = 19, rule = B3/S23\
2o24b2o$2o24b2o$8b2o$7bo2bo$8b2o2$12b3o$12bobo$12b3o$13b2o$13b3o$13bob\
o$13b3o2$18b2o$17bo2bo$18b2o$2o24b2o$2o24b2o!',
            'x = 31, y = 15, rule = B3/S23\
19bo$18bob2o$18bob2o$19b2o2$8b2o12b2o$8b2o12b2o3$7bobo$6bo18b2o$b2o2bo\
4bo10b2obo2bob2o$b2obo2bob2o10b2o2bo4bo$5b2o19bo$27bobo!',
            'x = 23, y = 39, rule = B3/S23\
3b2o10b2o$2bo2bo8bo2bo$2b3o2b6o2b3o$5b2o6b2o$4bo10bo$4b2obo4bob2o$9b2o\
$18bo$4bo12b2o$4b2o$10b3o2b3o2bobo$obo2b3o2b3o4bob4o$4obo3bo3bo7b2o$2o\
9bo$11bo2$10b2o$9bo2bo$10b2o2$10b2o$9bo2bo$10b2o2$11bo$2o9bo$4obo3bo3b\
o7b2o$obo2b3o2b3o4bob4o$10b3o2b3o2bobo$4b2o$4bo12b2o$18bo$9b2o$4b2obo\
4bob2o$4bo10bo$5b2o6b2o$2b3o2b6o2b3o$2bo2bo8bo2bo$3b2o10b2o!',
            'x = 41, y = 52, rule = B3/S23\
13b3o$14bo10b3o$14bo11bo$13b3o10bo$25b3o$13b3o$13b3o9b3o$25b3o$13b3o$\
14bo10b3o$14bo11bo$13b3o10bo$25b3o6$8o$ob4obo8b2o15b8o$8o8bobo14bob4ob\
o$16bo16b8o4$13b2o12b2o$13b2o12b2o4$16bo16b8o$8o8bobo14bob4obo$ob4obo\
8b2o15b8o$8o6$25b3o$13b3o10bo$14bo11bo$14bo10b3o$13b3o$25b3o$13b3o9b3o\
$13b3o$25b3o$13b3o10bo$14bo11bo$14bo10b3o$13b3o!',
            'x = 20, y = 20, rule = B3/S23\
10b2o$10bo$2bob2ob2obo5b2o$2b2obobobo6bo$8bo8bo$16b2o$10bo$9bo6b2o$o8b\
o2bobo2bo$3o6b2o5bo$3bo13b3o$2bobo14bo$2b2o2$2b2o$2bo8bo$3bo6bobobob2o\
$2b2o5bob2ob2obo$9bo$8b2o!',
            'x = 30, y = 30, rule = B3/S23\
19b3o$19b3o$12b2o3b2o2b3o$12b2o3b2o$17b3o$19bo$2bo10b2o4bo$2bo9bo2bo$\
3o9bobo$2o7bo3bo4b3o$2o2b3o2bo$2b3o4bo5bo6bo$2b3o9bo7bo3b2o$14bo2bobob\
obo2b2o$7bo6b2o6b2o$6bobo$2b2o2bo2bo$2b2o3b2o16b3o$20bo4b3o$20bo2b3o2b\
2o$9b3o4bo3bo7b2o$15bobo9b3o$14bo2bo9bo$10bo4b2o10bo$10bo$10b3o$11b2o\
3b2o$6b3o2b2o3b2o$8b3o$8b3o!',
            'x = 35, y = 23, rule = B3/S23\
25b2o$25bo$17bob2ob2obo5b2o$10b2o5b2obobobo6bo$10bo12bo8bo$2bob2ob2obo\
20b2o$2b2obobobo15bo$8bo4b3o8bo6b2o$24bo2bobo2bo$10bo6bo6b2o5bo$9bo7bo\
14b3o$o8bo2bobobobo15bo$3o6b2o6b2o$3bo$2bobo$2b2o15b3o4bo$25bobobob2o$\
2b2o20bob2ob2obo$2bo8bo12bo$3bo6bobobob2o5b2o$2b2o5bob2ob2obo$9bo$8b2o!',
            'x = 17, y = 17, rule = B3/S23\
5b2o3b2o$5bobobobo$7bobo$7bobo$7bobo$2o4bo3bo4b2o$o4bo5bo4bo$b4o7b4o2$\
b4o7b4o$o4bo5bo4bo$2o4bo3bo4b2o$7bobo$7bobo$7bobo$5bobobobo$5b2o3b2o!',
            'x = 11, y = 11, rule = B3/S23 5b2o$4bobo$bo2bob2o$obobo3bo$bo2bo3b3o$4bo5bo$5b5o2$7bo$6bobo$7bo!',
            'x = 10, y = 12, rule = B3/S23 2o$bo$bobo$2b2o4b2o$9bo$5b4o$5bo$2bo3b3o$2b4o2bo$5bo$4bo$4b2o!',
            'x = 13, y = 12, rule = B3/S23 11b2o$11bo$9bobo$9b2o$5b2o$6bo$6bo$6b2o$2b2o$bobo$bo$2o!',
            'x = 25, y = 15, rule = B3/S23\
$5bo$4o3bo11bo$3bo3bo9bo3b4o$7bo3b3o3bo3bo$4bo7bo4bo$5b2o13bo$18b2o2$\
5b2o8b2o$5bo2b6o2bo$6b2o6b2o$3b3o10b3o$3bo2bobo4bobo2bo$4b2o4b2o4b2o!',
            'x = 33, y = 13, rule = B3/S23\
17bo$16b2o$15b3obo9b2o$14b2o13b2o$15b2o$16bo2$16bo$15b2o$2b2o10b2o13b\
2o$2b2o11b3obo9b2o$16b2o$17bo!',
            'x = 33, y = 26, rule = B3/S23\
11b2o7b2o$10bo2bo5bo2bo$3bo5bobobo5bobobo5bo$2b2o4b3obo7bob3o4b2o$bob\
2o3b3o11b3o3b2obo$3o2bo21bo2b3o$2bobobo19bobobo$3bobobo17bobobo$4bo2b\
3o13b3o2bo$5b2obo3b3o3b3o3bob2o$6b2o4bobo3bobo4b2o$6bo5b3o3b3o5bo3$6bo\
19bo$6b2o17b2o$5b2obo15bob2o$4bo2b3o13b3o2bo$3bobobo17bobobo$2bobobo\
19bobobo$3o2bo21bo2b3o$bob2o3b3o11b3o3b2obo$2b2o4b3obo7bob3o4b2o$3bo5b\
obobo5bobobo5bo$10bo2bo5bo2bo$11b2o7b2o!',
            'x = 23, y = 7, rule = B3/S23\
obobo$obobo11b3ob3o$o3bo3bo2bobo5bo$bobo5bo3bo2b2o3b2o$o3bo3bo2bobo5bo$obobo11b3ob3o$obobo!',
            'x = 18, y = 21, rule = B3/S23\
3bob2o4b2obo$3b2o2bo2bo2b2o$b2o3bo4bo3b2o$o3b2ob4ob2o3bo$b3obobo2bobob3o$3bob\
obo2bobobo$6bo4bo$7b4o$8b2o2$4b2o6b2o$4bo8bo$5b3o2b3o2$3b4o4b4o$2bo4b4o4bo$3b\
12o2$3b3ob4ob3o$2bo2b8o2bo$2b2o10b2o!',
            'x = 21, y = 22, rule = B3/S23\
7b2o$3b2o2b2o2b2o$3b2o2bo2bobo$9b3o$9b2o4$9b3o$8bo3bo$4b2o2bo3bo2b2o$\
4b2o2bo3bo2b2o2$10bo$4bo11bo$3bobo3b3o3bobo$3bob4o3b4obo$2obo13bob2o$\
2ob2o2b2o3b2o2b2ob2o$3bo13bo$3bobo9bobo$4b2o3b3o3b2o!',
            'x = 33, y = 26, rule = B3/S23\
7b2o15b2o$8bo15bo$6bo19bo$6b5o11b5o$10bo11bo$4b4o17b4o$4bo2bo17bo2bo$\
21bo$21bo$9bo4b2ob2o2bob2o$8b3o3b2obo6b2o$7bo2b2o6bo$7b3o12bo$22bobo$\
3b2o11b2o4bo2bo2b2o$3bo12b2o5b2o4bo$2obo12b2o11bob2o$ob2ob2o19b2ob2obo\
$5bo21bo$5bobo17bobo$6b2o17b2o$10bo11bo$6b5o11b5o$6bo19bo$8bo15bo$7b2o15b2o!',
            'x = 65, y = 65, rule = B3/S23\
27b2o$27bobo$29bo4b2o$25b4ob2o2bo2bo$25bo2bo3bobob2o$28bobobobo$29b2ob\
obo$33bo2$19b2o$20bo8bo$20bobo5b2o$21b2o$35bo$36bo$34b3o2$25bo$25b2o$\
24bobo4b2o22bo$31bo21b3o$32b3o17bo$34bo17b2o2$45bo$46b2o12b2o$45b2o14b\
o$3b2o56bob2o$4bo9b2o37bo5b3o2bo$2bo10bobo37b2o3bo3b2o$2b5o8bo5b2o35b\
2obo$7bo13bo22b2o15bo$4b3o12bobo21bobo12b3o$3bo15b2o22bo13bo$3bob2o35b\
2o5bo8b5o$b2o3bo3b2o37bobo10bo$o2b3o5bo37b2o9bo$2obo56b2o$3bo14b2o$3b\
2o12b2o$19bo2$11b2o17bo$12bo17b3o$9b3o21bo$9bo22b2o4bobo$38b2o$39bo2$\
28b3o$28bo$29bo$42b2o$35b2o5bobo$35bo8bo$44b2o2$31bo$30bobob2o$30bobob\
obo$27b2obobo3bo2bo$27bo2bo2b2ob4o$29b2o4bo$35bobo$36b2o!',
            'x = 19, y = 15, rule = B3/S23 \
2o15b2o$obo13bobo$2bo13bo$2b3o9b3o$6bo5bo$2b5o5b5o$2bo4bo3bo4bo$4b4o3b\
5o$3b2o4bo5bobo$7b6o3b2o$6bo4bobo$7b4o2bo$9bo3bob2o$11bobo2bo$10b2ob2o!',
            'x = 12, y = 12, rule = B3/S23 2o$o2bo$bobo2$3bobo2$5bobo2$7bob2o2$9bobo$10b2o!',
            'x = 18, y = 12, rule = B3/S23 4b2o6b2o$3bobo6bobo$3bo10bo$2obo10bob2o$2obobo2b2o2bobob2o$3bobobo2bob\
obo$3bobobo2bobobo$2obobo2b2o2bobob2o$2obo10bob2o$3bo10bo$3bobo6bobo$4b2o6b2o!',
            'x = 16, y = 16, rule = B3/S23 3b2o$3bobo$2bo4bo5bo$3bobob2o2b2ob2o$3bo3bo7bo$12bobo2$3bo7b3o$2b3o7bo\
2$bobo$o7bo3bo$2ob2o2b2obobo$2bo5bo4bo$10bobo$11b2o!',
            'x = 27, y = 10, rule = B3/S23\
2o25b$bo25b$bobo13b3o7b$2b2o3bo8bo3bo6b$6bob2o6bo4bo5b$5bo4bo6b2obo6b$6bo3bo8bo3b2o2b$7b3o13bobob$25bob$25b2o!',
            'x = 49, y = 31, rule = B3/S23\
22b2o7bo$23bo8bo2bo$23bobo4bo4bo4b2o$24b2o13bo2bo$29bo8b2ob2o$28b2ob2o\
8bo$28bo2bo13b2o$29b2o4bo4bo4bobo$35bo2bo8bo$39bo7b2o4$23bo8b2o$16bo5b\
2o7bobo$15bobo3bo10bo$15b2o5bobo$22bobo2$19b2o$2o16bo2bo$bo16b2obo$bob\
o4b3o5bo2b2o$2b2o4bobo4bo$7bo3bo3bo3bo$7bo3bo3bo3bo$11bo4bobo4b2o$6b2o\
2bo5b3o4bobo$5bob2o16bo$5bo2bo16b2o$6b2o!',
            'x = 33, y = 23, rule = B3/S23\
12b2o5b2o12b$7b2o3bo7bo3b2o7b$8bo4bo5bo4bo8b$5b2obob3obo3bob3obob2o5b$\
8bobo3bo3bo3bobo8b$6bobo5bobobo5bobo6b$7bobo2b2obobob2o2bobo7b$8bo3bo\
2bobo2bo3bo8b$4b2o8b2ob2o8b2o4b$2o2bo23bo2b2o$obobo4bo13bo4bobobo$2bob\
2o3b2o11b2o3b2obo2b$obobo4bo13bo4bobobo$2o2bo23bo2b2o$4b2o8b2ob2o8b2o\
4b$8bo3bo2bobo2bo3bo8b$7bobo2b2obobob2o2bobo7b$6bobo5bobobo5bobo6b$8bo\
bo3bo3bo3bobo8b$5b2obob3obo3bob3obob2o5b$8bo4bo5bo4bo8b$7b2o3bo7bo3b2o\
7b$12b2o5b2o!',
            'x = 21, y = 54, rule = B3/S23\
3bob2o4b2obo$3b2o2bo2bo2b2o$b2o3bo4bo3b2o$o3b2ob4ob2o3bo$b3obobo2bobo\
b3o$3bobob4obobo$5bo2b2o2bo$6b2o2b2o3$4b2o6b2o$4bobo4bobo$5b2o4b2o$8b\
2o$3b5o2b5o$2bo12bo$3b3o6b3o$6bo4bo$3b3ob4ob3o$2bo2bo6bo2bobo$2b2o10b\
2ob3o$6bo8bo4bo$10bo3bo2b3o$14bo2bo4$10b3o$10bo$10bo$14b2obo$8b2o4b2o\
b3o$6bo4bo8bo$2b2o10b2ob3o$2bo2bo6bo2bobo$3b3ob4ob3o$6bo4bo$3b3o6b3o$\
2bo12bo$3b5o2b5o$8b2o$5b2o4b2o$4bobo4bobo$4b2o6b2o3$6b2o2b2o$5bo2b2o2b\
o$3bobob4obobo$b3obobo2bobob3o$o3b2ob4ob2o3bo$b2o3bo4bo3b2o$3b2o2bo2bo2b2o$3bob2o4b2obo!']
            
def spacing(period): #both for horizontal and vertical spacing
    if period == 1:
        return 3
    elif 2 <= period <= 9:
        return 5
    else:
        return 7

def create_column(pattern_dict):
    global grid
    pattern_dict_copy = pattern_dict.copy()
    for i in pattern_dict_copy:
        if i[1]+pattern_dict[i][3] >= period_y:
            del pattern_dict[i]
    max_y = max(i[1]+pattern_dict[i][3] for i in pattern_dict)
    rows = max(i[2] for i in pattern_dict)
    while max(i[1]+pattern_dict[i][3]+rows for i in pattern_dict) <= height:
        if max(i[1] for i in pattern_dict) < 30:
            break #prevent infinite loop on single line
        pattern_dict_copy = {}
        for i in pattern_dict:
            pattern_dict_copy[(i[0],i[1]+i[2], i[2])] = pattern_dict[i] #spaces out patterns vertically
        pattern_dict = pattern_dict_copy.copy()
    for x1 in range(-len(str(period))*12 - 5 + column_x, 120 + column_x): #negative numbers used for creating the digits
        for y1 in range(0, height-1):
            grid[(x1,y1)] = 0 #fill everything with off scells
    for i in pattern_dict:
        grid_form = convert_rle_to_grid(pattern_dict[i][0])
        for j in grid_form:
            if grid_form.get(j, 0) == 1:
                grid[(j[0]+i[0], j[1]+i[1])] = 1 #paste patterns in

def convert_grid_to_rle(grid):
    min_x = min(i[0] for i in grid)
    min_y = min(i[1] for i in grid)
    max_x = max(i[0] for i in grid)
    max_y = max(i[1] for i in grid)
    to_return = 'x = %s, y = %s, rule = B3/S23\n' % (max_x-min_x+1, max_y-min_y+1) #\n is newline
    for j in range(min_y,max_y+1):
        while to_return[-1] == 'b': #remove blanks at the end of a line
            to_return = to_return[:-1]
        to_return += '$'
        for i in range(min_x,max_x+1):
            to_return += ('o' if grid.get((i,j),0) == 1 else 'b')
    while to_return[-1] == 'b': #remove blanks at the end of the last line
         to_return = to_return[:-1]
    while to_return[-1] == '$': #remove empty lines at the end
         to_return = to_return[:-1]
    to_return += '!'
    while '\n$' in to_return:
        to_return = to_return.replace('\n$', '\n')
    for i in ('b','o','$'):
        for j in ('b','o','$','\n'):
            if j != i:
                to_return = to_return.replace(j+i+i, j+'2'+i) #bb becomes 2b, but bbbbbbb becomes 2bbbbb, not 2b2b2b
        num = 2
        while (str(num) + i + i) in to_return:
            to_return = to_return.replace(str(num) + i + i,str(num+1) + i) #2bbbb becomes 3bbbb, 3bbbb becomes 4bb, etc.
            num += 1
    to_return = to_return.replace('B3/S23 $','B3/S23 ') #remove newlines at the beginning
    return to_return

def open_file(file, distance):
    f = open(file, 'r')
    f1 = f.read()
    f1 = convert_rle_to_grid(f1)
    start_x = 0
    while sum(n for n in f1.values()):
        found = False
        for x in range(start_x,max(i[0] for i in f1)+1):
            if found:
                break
            for y in range(0,max(j[1] for j in f1)+1):
                if found:
                    break
                if f1.get((x,y),0) == 1:
                    pattern_min_x = x
                    pattern_min_y = y-distance
                    pattern_max_x = x+distance
                    pattern_max_y = y+distance
                    previous = (pattern_min_x, pattern_min_y, pattern_max_x, pattern_max_y)
                    while True:
                        for x1 in range(pattern_min_x, pattern_max_x+1):
                            for y1 in range(pattern_min_y, pattern_max_y+1):
                                if f1.get((x1,y1),0) == 1:
                                    #pattern_min_x = min(x1-distance, pattern_min_x)
                                    pattern_min_y = min(y1-distance, pattern_min_y)
                                    pattern_max_x = max(x1+distance, pattern_max_x)
                                    pattern_max_y = max(y1+distance, pattern_max_y)
                        if previous == (pattern_min_x, pattern_min_y, pattern_max_x, pattern_max_y):
                            found = True
                            break
                        previous = (pattern_min_x, pattern_min_y, pattern_max_x, pattern_max_y)
        grid = {}
        for x in range(pattern_min_x, pattern_max_x-distance+1):
            for y in range(pattern_min_y+distance, pattern_max_y-distance+1):
                grid[(x,y)] = f1.get((x,y),0)
        to_add = convert_grid_to_rle(grid)
        if to_add not in digit_rles and to_add not in patterns: #no digits, no duplicates
            patterns.append(to_add)
        print(len(patterns), end=('\n' if len(patterns) % 10 == 0 else ' '))
        for x in range(pattern_min_x, pattern_max_x+1):
            for y in range(pattern_min_y, pattern_max_y+1):
                f1[(x,y)] = 0
        start_x = pattern_min_x

open_file('/Volumes/Golly/golly-4.0.1-mac/Patterns/Life/Oscillators/billiard-table.rle', 3)
open_file('/Volumes/Golly/golly-4.0.1-mac/Patterns/Life/Oscillators/unique-high-period.rle', 5)
open_file('/Volumes/Golly/golly-4.0.1-mac/Patterns/Life/Oscillators/low-period.rle', 3)
open_file('/Volumes/Golly/golly-4.0.1-mac/Patterns/Life/Oscillators/traffic-light-hasslers.rle', 5)
open_file('/Volumes/Golly/golly-4.0.1-mac/Patterns/Life/Oscillators/honey-farm-hasslers.rle', 5)

data = [(0,1234567,0,0,0,0)] #this period 1234567 marks the end of the file
count = 0
for i in patterns:
    count += 1
    if count % 50 == 0:
        print(str(count) + ' done')
    data.append(run_pattern(convert_rle_to_grid(i), '*' in i)) #max period 1000 without *, 100000 with *

while None in data: #non-oscillators:
    data.remove(None)
#for i in num_dict.values(): #digits from other files
#    if eval(i) in data:
#        data.remove(eval(i))
    

data.sort(key=lambda a:(a[1],a[3])) #first by period, then height

grid = {}
column = 1 #column number
column_x = 0 #column x offset
period = 1
period_y = 0 #y value at the beginning of the period
x = 0
y = 0
pattern_dict = {}
pattern_list = [] #pattern_list empties into pattern_dict at the end of each row, column, and period
while len(set(j[1] for j in data)): #this allows repeating periods that couldn't fit due to end of a column
    x = column_x
    rows = 0
    for period in sorted(set(j[1] for j in data)): #lowest periods first; they get deleted as they're completed
        if period == 1234567: #end of file
            period_y = height + 100 #so that everything will be included
            period = max((j[1] * (j[1] != 1234567)) for j in data) #so it doesn't try to place a 7-digit number
            create_column(pattern_dict)
            data = [] #empties data to complete program
            break
        period = int(period)
        if y < period_y + 28 and y > 0:
            y = period_y + 28 #so displayed digits don't conflict
        elif y > 0:
            y += spacing(period)
        period_y = y #becomes the y value at the beginning of the period
        period_str = str(period)
        for digit in range(len(period_str)): #creates displayed digits
            pattern_dict[-12*(len(period_str)-digit)-5+column_x, y, rows] = (eval(num_dict[period_str[digit]]),1,14,8,0,0)
        period_patterns = list(filter(lambda a:a[1]==period, data)) #only patterns of the correct period
        for pattern in period_patterns:
            if x + spacing(period) + pattern[2] >= 120 + column_x or y + pattern[3] + spacing(period) >= height: #end of row or column
                if y + pattern[3] + spacing(period) >= height: #end of column
                    create_column(pattern_dict)
                    column += 1
                    column_x += 140 + len(str(period))*12
                    #130 probably works as long as you don't have two consecutive columns with a 2-digit difference
                    y = -1 #-1 is used to break out of loop
                    period_y = 0
                    pattern_list = []
                    pattern_dict = {}
                    rows = 0
                    break
                while x + len(pattern_list) <= 120 + column_x: #end of row
                    for i in pattern_list:
                        i[1] += i[2] #i[2] is the pattern number in the row; this spaces the row out to fill the full 120 cells
                    x += len(pattern_list)
                for i in pattern_list:
                    pattern_dict[(i[1], y+pattern[5], rows)] = i[0] #puts the list into a dict
                x = column_x
                rows += 1
                y += pattern_list[-1][0][3] + spacing(period) #will return an error if a single pattern is more than 120 rows wide
                pattern_list = []
            pattern_list.append([pattern, x+pattern[4], len(pattern_list)])
            x += pattern[2] + spacing(period)
        if y == -1: #end of column; beginning of new column
            y = 0
            break
        data = list(filter(lambda a:a[1] > period, data)) #removes a period when it's done
        print('Period done: ' + str(period))
        while x + len(pattern_list) <= 120 + column_x: #these lines are the same as the end-of-row lines
            for i in pattern_list:
                i[1] += i[2]
            x += len(pattern_list)
        for i in pattern_list:
            pattern_dict[(i[1], y+pattern[5], rows)] = i[0]
        rows += 1
        y += pattern_list[-1][0][3] + spacing(period)
        pattern_list = []
        x = column_x
print(convert_grid_to_rle(grid))
This contains two rows of P5s and P9s and a few of other periods. It probably has bugs with other data sets, though. Note that I set maximum y to 200; this would be a higher number in reality, but I'm showing it as an example.

Edit 1: Fixed a bug that causes an infinite loop when the last column has a single row. Made height a variable instead of typing 200 everywhere. Added a few P12s and P32s, plus some more P5s.

Edit 2: Fixed it going past the height limit.

Edit 3: Fixed the code that shifts the oscillator when it doesn't belong in the top left corner. This is most noticeable with the P138.

Edit 4: Commented the code to make it more readable. Added a few more oscillators.

Edit 5: Major. Includes file paths that you will either need to comment out or change to your own file path, making the number of oscillators 281 without having to write all of them in the code. (I couldn't add any file with high periods because it would see them separately and not as a single oscillator.) More checks to make sure the code to run the pattern doesn't crash (if it dies to nothing) or take a really long time (escaping gliders). Note that all still lifes with 24 or more cells will be rejected.

Edit 6: Three high period files added, with greater checking distance for those files only so that more of the oscillators will be correctly recognized as a single object. Height increased from 250 to 600.
Last edited by hotdogPi on December 13th, 2020, 2:09 pm, edited 3 times in total.

User avatar
ColorfulGalaxy
Posts: 315
Joined: July 16th, 2020, 3:37 am
Location: China
Contact:

Re: Golly suggestions

Post by ColorfulGalaxy » December 13th, 2020, 7:56 am

Does GoIly support scripts?

[[ STOP 2 ]]

Code: Select all

x = 9, y = 9, rule = LifeColorful
6E.2B$6E.2B$7.2B$2D5.2B$2D5.2B$2D5.2B$2D$2D.6C$2D.6C!
List of helpful topics

Schiaparelliorbust
Posts: 2483
Joined: July 22nd, 2020, 9:50 am
Location: Acidalia Planitia

Re: Golly suggestions

Post by Schiaparelliorbust » December 13th, 2020, 8:27 am

ColorfulGalaxy wrote:
December 13th, 2020, 7:56 am
Does GoIly support scripts?

[[ STOP 2 ]]
Umm of course. Haven't you ever seen the Lua and Python scripts in Golly?
Edit: Sorry, I did not see the [[ STOP 2 ]].
Last edited by Schiaparelliorbust on December 13th, 2020, 11:03 am, edited 1 time in total.
Hunting's language (though he doesn't want me to call it that)
Board And Card Games
Colorised CA
Alien Biosphere

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 13th, 2020, 10:13 am

ColorfulGalaxy wrote:
December 13th, 2020, 7:56 am
Does GoIly support scripts?
Golly 4.0 supports LifeViewer scripts like your "[[ STOP 2 ]]" example, via a Lua script called showinviewer.lua.

Once LifeViewer is installed and updated (via update-viewer.lua) you can run showinviewer.lua to open the pattern that's currently displayed in Golly, in a new browser window with LifeViewer taking up the full display width.

Any LifeViewer commands that are included in the Golly pattern's comments will be carried over to LifeViewer. Some examples are in the Patterns/Life/Rakes subfolder.

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 14th, 2020, 9:39 am

Has anyone tested my Python script to see if it's what you want? The open_file function is there to add a whole bunch of patterns without having to put in all the RLEs (and it's not perfect anyway, sometimes seeing a single pattern as multiple); you'll either have to change the file path (I use a Mac) or just comment out the lines calling open_file and change height from 600 to around 200. When this program becomes the official way to create the pattern list, the file with all the data will probably be a .txt with the RLEs that can simply be read line by line, and the current implementation of open_file won't need to be there. I can't do this here because even if I add all the RLEs to a .txt file I create, you won't have that file on your computer. This will also save time over having to check every pixel to see if it's on.

There's one minor issue I haven't fixed yet, and that's that for displaying period numbers, it doesn't recognize the digit 1 as being thinner than the other digits, and the 1 is left-justified instead of right-justified. Also, the program rejects all still lifes of 24 cells or more as well as those looking like the digit 1 (which is only 18 cells) to avoid putting digits in the period 1 section; these lines can be removed when reading from a .txt file.

Note that the program does make sure that it's an oscillator or still life before adding it, although this takes time to verify, especially with high-period oscillators and erroneous non-oscillators (which run for 122 generations if generations 120 and 122 are the same and 1000 otherwise, with a bounding box check in case of escaping gliders). It does not make sure that it's only an oscillator, though; one of the files has a P56 (I believe) that gets separated, putting a Kok's Galaxy plus a noninteracting faraway block in the P8 section.

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 14th, 2020, 5:03 pm

hotdogPi wrote:
December 14th, 2020, 9:39 am
Has anyone tested my Python script to see if it's what you want?
I tried and failed to get it working yesterday, but this time it worked much better.

Have you considered converting this to a Golly script? Basically just add import golly as g at the top, and then use g.show("text") for status updates instead of print() statements, and build the pattern directly in the Golly universe.

That would be one way to fix the spacing problems with your number labels. The "Snakial" font is already defined in Python/glife/text.py, and it deals with varying character widths correctly.

What's the next step for this script? For me it currently produces

Code: Select all

x = 1101, y = 607, rule = B3/S23
2o16b2o4b2o2b2o4b2o3b2o5bo5b2o8b2o4b2o8b2o5b2ob2o5b2o2b2o8bo8b2o33bob
2o15b2o20bo18b2o14bo18b2ob2o21b2o28b2o12b2obo13bo3bo30bobo23b2o3b2o13b
2o17bo34b2obo8b2obo15b2o5b2o14b2o6b3o3bobo29b2o18b2o40b2obo10b2obo146b
2o4b2o4b2o4b2o38b2o38b2o7b2o57b2obo8b2obo18b2o15b2o$bo16b2o4b2o2b2o4b
2o3b2o4bobo5bo8bo5bobo6bobo6bobo6b2o2b2o7bobo6bobo33b2obo15bobo18bobo
16bo2bo12bobo16bobobobob2o16bo2bo28bo12bob2o13b5o11b2o3b2o12b2obob2o
19bo3bobo8b2o2bo2bo15bobob2o30bob2o8bob2o15bo7bo15bo6bobo2bo32bo19b2o
2bobo6b2o27bob2o10bob2o22b2o33b2o48b2o38bo5bo5bo5bo37bo2bo37bo2b2ob2o
2bo57bob2o8bob2o17bo19bo$o45bo6bobo4bobo7bo6bo6bobobobo17bobo6bo39b2o
15bo17bobobo16bobo12bobo15bo2bo3bobo14bo3bo2bo26bo17b2o13bo7bo2bo3bobo
bo16bobobo12bo2b2obo3bo10bo2bob2obo13bo2bobo35b2o10b2o10b2obo7bob2o12b
obo6b3o5b2o28bo18bo2bobo5b3o31b2o12b2o20bo34bo49bo38bo5bo5bo5bo38bobob
o37b2obobob2o56b2o4b2o4b2o4b2o18bo13bo$2o52b2o4b2o8b2o4b2o6b2o3b2o15b
3ob2o4b2o40bo11b5ob2o14bobobo13b3obob2o7b2obob2o2bo10bob3o3bo2bo10bo2b
4ob2obo25b2o16bo13bobo4b2o3b2o2b2ob2o13b2obobobo2bo9b4obob2ob2o10b3o2b
obo14b3obobo33bo11bo11bo2b2o4b3o2bo13b2o5bo6bo2bo24b5o20b2o41bo13bo13b
ob2ob2obo5b2o19bob2ob2obo5b2o34bob2ob2obo5b2o31b2o4b2o4b2o4b2o38bo2bo
38bo5bo57bo5bo5bo5bo15bo3bo4bo3bo4bo3bo$95b2o2b2o4bo15b2o34bo12bo6b2o
10b2ob2ob2ob2o9bo2bo3bobo6b2obobo2bobo9bo5bo2bobo8b3o5bo4bo44bo13bo7bo
2bo3bobobo9b2obobob2ob2obobo13bo3bo2bo12b3ob2o17bob3o32bo11bo11b2o2bo
6b2o20bobo7b2o24bo26b2o4bo35bo13bo12b2obobobo6bo20b2obobobo6bo28b2o5b
2obobobo6bo34bob2o8bob2o44bo37bo5bo58bo5bo5bo5bo11b4o3bo4bo3bo4bo3b4o$
2o93b2o2b2o5b3ob2o10bo34b2o12b2ob3ob3o8bobo4bob2o9bo2b3o3bo9bo3b2obo7b
2ob4ob4ob2o6bo3b4obo2b2o26b2o16b2o11b5o11b2o3b2o8b2obobobobobo2bo11b2o
2b2obobo12bo2bobo14b6o3bobo28b2o10b2o13bob7o21b2o7bobo23b2o3b2o21b2o3b
ob3o32b2o12b2o17bo9bo25bo8bo27bo11bo9bo33b2obo8b2obo21b2o18bobo39b5o
58b2o4b2o4b2o4b2o16bo17bo$bo106bob2o7b3o33b2o15bobo4bobo10b4o10b2obobo
3b3o10bo6b2o7bobo2bo5bo8bobobo2bobo4b3o24bo12b2obo13bo3bo29bo5bobo13bo
3bobob2o13b3obo2bo2bo9bo3bo2b2ob2o24b2obo8b2obo15bo7bo21bo2bo6bo5b2o
13b2obo5bobob2o22b2o31b2obo10b2obo18b3o7b2o33b2o19bob2ob2obo10b3o7b2o
37b2o10b2o18bobo61b3o14b2o45b2obo6bo5bo$o118bo36bo15bobo6bo25bo2b2obob
o13b6o9bo2bo3b3obo9b3o2bo3b4o2bo23bo13bob2o47bo3bob2o13bo2bobobo20bob
5o11b2o4bo27bob2o8bob2o16b7o22b2o5b3o6bobo13bobo7bobo24bob2o28bob2o10b
ob2o18b2o64b2obobobo4bo6b2o48bo11bo18b2o10bobo2b3o37b2o5bobo13bo2bo44b
ob2o7bo5bo$2o153bo17bo7b2o11b2o11bo4b2o20bo10bobo3bo2bo14bob3o3bo26b2o
10b2o52b4o17b2ob2obob4o11b2ob2o18bobo2bo25b2o10b2o55bo2bobo6bo12bo2b2o
5b2o2bo13b2obo42b2o6b2o23bo8b2o26b2o5b2o24bo6bo7bo8b2o37bo11bo24bo7b7o
5b3o29b2o5b3o13bobobo47b2o4b2o4b2o10b2o27b2o$155b2o37b2o12b3o3bo16b3o
10b2obobobobo11b6o3b3o39bo57b2obo14bo3bob2o2bo11bo2bob4o14bob3o26bo11b
o23b3o27bobo3b3o6b2o12b2o2bo2b2o2b2o17b2o41bo7bo17bo5b2o7bobo17bo7b2o
5bobo23b3o5bo6b2o7bobo37b2o10b2o22bo8b4obob2o42b3o14bo2bo47bo5bo5bo11b
o2b2o6bo7bo6b2o2bo$2o151b2o55b2ob2o16bo16b2ob2o12bo6b2o30b2o11bo50b5ob
ob2o12bobo3bo18bobobo2bo15bo30bo11bo22bo2bo57b3o2b2obo16b3obo3b2o37bo
7bo16b3o3b2obo6bo18b3o6b2o5bo24b2o9bo3b2obo6bo74b2obob4o8bo2bo3bo26b6o
4bo19bo47bo5bo5bo11b2obo4bobo7bobo4bob2o$bo152bo112bob3o2bo30bo10b2o
50bo2bobo16b2o3b2o19b2obobo17bo28b2o10b2o24b2o57bo2bo4bo18bo4b2o37b2o
6b2o19bo4b2o7b3o18bo13b3o22bo8bobo4b2o7b3o73b7o7bo3bo3bo25bo6bo20bobo
47b2o4b2o4b2o15bo3bo11bo3bo$o152bo112b2obo3b2o29bo13b2obo98bo17b2o30b
2obo8b2obo80b7o26b2o31b2obo10b2obo14bobo14bo17bobo14bo15bo5b2o8bo2bo
14bo35b2o10b2o24b3o2bobo40b2o2b3o67b2obo8b2obo17bo5bobo3bobo5bo$2o151b
2o149b2o12bob2o148bob2o8bob2o103b3o5bobo2bo29bob2o10bob2o14b2o33b2o31b
3o3b2obo7b2o51b2o10b2o42bo3bo44bobo2b3o47bob2o8bob2o13b2obo7bo5bo7bob
2o$568b3o18b2o6bobo2b2o131bo4b2o115bob3obo28bo7bo7b7o5b3o67bo2b2o7bo5b
o7b2o2bo$567bo2bo31b2o60b2o33b2o33bobo15bo104bo5bo28bo2bo3bo8b4obob2o
73b2o27b2o$567b2o95bo8bo25bo8bo25b2o16bo5bo97b2obobob2o27bo6b2obob4o8b
o2bo3bo$665bo6bobobob2o20bo6bobobob2o37bo4bobobob2o68b2o9b2o9bo2b2ob2o
2bo22b2o2bo8b7o7bo3bo3bo$664b2o5bob2ob2obo19b2o5bob2ob2obo19b2o20bob2o
b2obo72b5o13b2o7b2o22bo3bo3bo4b3o2bobo87bo17bo$671bo34bo27bo8bo12bo72b
o3b3ob5ob3o3bo39bo2bo26bo3bo67b4o3bo13bo3b4o$175b2o22b2o20bo47b2o64bo
25bo69b2o237b2o33b2o28bo6bobobob2o5b2o71bob2obo3b5o3bob2obo35b3o3bo25b
ob3obo69bo3bo13bo3bo$175bo24bo19bobo24bo21b2o64b3o7b2o9b4o3bo4bo6bo16b
2o37bobo300b2o5bob2ob2obo78bobo17bobo35bo5bo2bo22bo5bo73bo13bo$176bo
17b2o3bo3bo16bobo15b3o3bo2b3o3b2o83bo6bo13bo3bo4bo4bo3b4o11b4obo15b2o
18bo307bo85b2o3b2o2bobobobo2b2o3b2o40bo9b2obo11b2obobob2o69bo19bo$173b
3obob2o12bo2bobob4o15b2obob2o11bobobo2b3o3bo2bo15b4o64b2o4bobo17bo3bob
o3bo3bo14bobo2b3o3bo5bob4o16bob2ob2o302b2o85bo2bo2b3o2bobo2b3o2bo2bo
57b2o8bob2o2bo70b2o15b2o$172bo2bobobo2bo10bob2obo23bo2bo9b3o3b3o4b2obo
bo14bo4bo69b2o15bo7bo4bo28b3o2b3o2bobo16b2o4bo390b2ob2o2bobo3bobo2b2ob
2o37b2o2b3o14bobo7bo3bo$173bo2b2obob2o9b2o2bobobob2o14b2obobo10bo4bo4b
4obobo2b2o9bo2b2ob2obo86b2o5bo7bo19b2o4b3o29b2o62bo43b2o5b2o34b2o5b2o
235bo5bo2b2obobo5bo38bo6bo4b8obobo6b2o3b2o$170b3o4bobo11bo2bo2bo5bo14b
o2bob2o9b2ob2obobo4bobob2obo9bobobobobobo2bo61b3o25bo6b2o20bo12b2o20b
3ob2o61b3o36b2o3bo7bo3b2o24b2o3bo7bo3b2o230bobob2ob2o2bo3b2obobo39b6o
5b2o9b2o$170bo2b5obo12b2o2bobob2o15bobo3bo14bobo3b4obo4bo10bo2bobobobo
bobo60b3o68bo13b2ob2obo6bo2b2o59bo17bo16bobo4bo5bo4bobo24bo4bo5bo4bo
228b2obobo3bo2bo8bobob2o46b2o7bobo$173bo4bo15b5obo15b2obobobo14bobobo
3bo2b2obob2o12bob2ob2o2bo58b2o23b2o8b2o51bo3bobo2bob2obo2bo58b2o15b3o
18bob3obo3bob3obo23b2obob3obo3bob3obob2o225bo2bo3b2o2bo4b4o3bo2bo38b2o
6bo8bobo$174b4o16bo4bo2bo9b2obobobob2o14b2obob4o6bobo14bo4bo60bobo4b2o
17bo10bo23b2o2b4o2b2o17b3o2bobobobob2o76bo18b2obobo3bo3bo3bobob2o23bob
o3bo3bo3bobo230b2ob2o2b2o4bo4b2ob2o40bo15bobob2o$18bo176b3obob2o9bob2o
bo2bo20bo4b6o2bo15b4o61bo6bo19b10o24bo2b6o2bo19bobo3bob2o2bobo63b2o9b
2o20bo5bobobo5bo24bobo5bobobo5bobo230bobobo7b3obobo40bobo2b2ob3o5b3obo
bo$2b2obo12bo8b2o10bo9b2o9b2o6b2o4b2o6b2ob2o9bo11b2obo12bo51b2o19bobo
18bobo22bo2bo2bo4b2o78b2o7b3o13b3o2b6o2b3o22b10o22b2obobo2b2o2b3o61b3o
29bobo2b2obobob2o2bobo24bobo2b2obobob2o2bobo231bobobo9bobobo40b2o3bob
3obo2bo4bo2bo$2bob2o12bo8b2o8b2o9bo10bobo6bobo2bobo6bo3bo9bobo9bob2o
10b3o51b2o20b2o19bo22b2o28b2o71bo13bo2bo2b4o2bo2bo19b3o10b3o17bo2bob3o
3bobo3bo61bo6bo24bo3bo2bobo2bo3bo27bo2bo2bobo2bo2bo159bo74bobo11bobo
48bo2bo3bo2bobobo$6b2o21b2o8b2o10bo18b4o9b3o8bo26bo150b2o86b2o10b2o20b
o2bo8bo2bo17b2o2bo3bo2bob2ob2o61bo5bo21b2o8b2ob2o8b2o18b2o8b2ob2o8b2o
67b2o2bo34b2o7b2o31b2o4bo4b2o69bo13bo46bo10bobob2o$6bo22b2o7bo10b2o6bo
bo10bo2bo10bo14b2o8b3o9bo2b3o268b2o10b2o23b2ob3o67bo5bo18b2o2bo6bo9bo
6bo2b2o10b2o2bobo19bobo2b2o59b2o2b2o3bo32bo2bo5bo2bo29bobo4bo4bobo128b
obobo9bo$7bo49b2o12b2o11bo8b2o13bobobo7b2obobobo305b2o69bo6bo18bobobo
5b3o7b3o5bobobo10bobobo6bo9bo6bobobo59b2o7bo31bobobo5bobobo28bo13bo
128b3obo8b2o$6b2o75b3o13bo8b2ob2o10b2ob2o303bo4b2o72b3o19bob2o3b2ob2o
5b2ob2o3b2obo14bobo6b3o5b3o6bobo66b4o25b3o4bo2bo7bo2bo4b3o18b2ob2o11b
2ob2o123b2o5bo$2b2obo76bo3bo8bobo11bobo11bobobob2o300b2ob2obo62b2o9b2o
17bobobo5b3o7b3o5bobobo10bobobo6bo9bo6bobobo92bo6bo15bo6bo17b2obobo9bo
bob2o122bo2b5o$2bob2o76b2ob2o10bo9bobobobo10b3o2bo305bo65bo28b2o2bo6bo
9bo6bo2b2o10b2o2bobo19bobo2b2o92bo3bo3bobo9bobo3bo3bo20bob11obo125b2o
3bo$2o105b2o3b2o15bo305bobo60b3o15b2o16b2o8b2ob2o8b2o18b2o8b2ob2o8b2o
96bo2bobo6bo5bo6bobo2bo20bobob7obobo$o125b3o307b2o60bo17bo21bo3bo2bobo
2bo3bo27bo2bo2bobo2bo2bo75bo27bobo2bo3b2o5b2o3bo2bobo23bo5bo5bo$bo124b
o51bo2b2o14b2o7b2o16b2ob2o2b2o12bo24bo2bo243b3o17bobo2b2obobob2o2bobo
24bobo2b2obobob2o2bobo72b3o27bo3bo3bobo3bobo3bo3bo236b2obo8b2obo44b2o$
2o174b3o2bo15b2o7b2o17bobo2bobo11bobo23b4o245bo18bo5bobobo5bo24bobo5bo
bobo5bobo71b3o31bo4b2o3b2o4bo34bo205bob2o8bob2o44b2o$2b2obo164bob2obo
6bo37b2o3bo3b2o13bobo288b2obobo3bo3bo3bobob2o23bobo3bo3bo3bobo68b2o9b
2o23b3o4b3o3b3o4b3o30b3o202b2o4b2o10b2o$2bob2o164b2obobo2b5o14b4o3b4o
12bo2b2obo4bo9b2obob2o20b8o262bob3obo3bob3obo23b2obob3obo3bob3obob2o
65b2o9b2o30bobo3bobo33b2o7b2o198bo5bo11bo41b6o$173bo2b2o18bo4bobo4bo
12b2obobob4o2bo6bob2o2bo19bo3bo4bo259bobo4bo5bo4bobo24bo4bo5bo4bo112bo
5bo34b2o7b2o199bo5bo11bo39bo2bo3bo$173bobo2b2ob2o12bob3obobob3obo12bob
obo5b3o10b3o18bo2bo3b3obo259b2o3bo7bo3b2o24b2o3bo7bo3b2o110b3o3b3o242b
2o4b2o10b2o20b2ob2o14b2o2b3o9b2o$170b2obobobo2bo2bo8bo2bo5bobo5bo2bo7b
o3bo4b3o13bo2bo17bob2o3bobobo264b2o5b2o34b2o5b2o72bo11bo283b2obo8b2obo
22bo3bo19bo10bobo$171bo2bobobobo2bo7bobob2obobo3bobob2obobo6b2o11b2o
11b3o14b2obo7b2obob2o384bobo9bobo22b3o17b3o237bob2o8bob2o24b2o4b2o5b2o
7b2o10b2o$171bo2bo2bobobob2o7bo2bo5bobo5bo2bo10b3o4bo3bo14b2o13bob2o9b
obo385bobo2b5o2bobo25bo15bo28bo11bo203b2o4b2o20b2o2b4obobo3bo6b3o5b2o$
23bo148b2ob2o2bobo13bob3obobob3obo10b3o5bobobo13b2obob3o10bobo9b2obo
62bob2ob2obo32b2o10b2o36b3o226b2obo2bob5obo2bob2o18bo3bo15bo3bo23bobo
3b3o3bobo202bo5bo20bobo2bo4bob4o5bo4bo4b2o$21bobobo151b2o2bo14bo4bobo
4bo11bo2b4obobob2o12b2obobob3o7b2obob2o7bob2o61b2obobob2o31bo2bo8bo2bo
36b2o226b2obo4b5o4bob2o17bobo2bo15bo2bobo22bob4o3b4obo203bo5bo19bo5bo
2bobo4b3obob4obo3b3o4b4o$19bobobobobo144b5o2bobob2o12b4o3b4o15bo4bob2o
2bo15b2o4bo9bobobo3b2obo104b3o10b3o35b2o230bo13bo18bo2bobo19bobo2bo17b
2obo13bob2o199b2o4b2o16b2obobo9bo2bo2bobobo3b3o2b2o5bob2o$20b2obob2o
145bo6bob2obo39b2o3bo3b2o17b4o10bob3o3bo2bo64b3o3b3o34b10o39bo230bobo
4bo4bobo18bo3bo3bobo9bobo3bo3bo17b2ob2o2b2o3b2o2b2ob2o195b2obo8b2obo
13bobobo5b2o2b2ob3o2b3o3bobo2b2o3bob2o17bo3b2o$18bo4bo4bo144bo2b3o18b
2o7b2o14bobo2bobo22bo14bo4bo3bo65bo2bobo2bo33bo2b6o2bo34b2o234b2o4bo4b
2o19bo6bo15bo6bo20bo13bo32b2o4b2o6bob2o37b2o109bob2o8bob2o13bobob3o2b
2o2b3o3b2o2b3obo2bo2b2o7bobo13bobo2bo$19b4ob4o144b2o2bo20b2o7b2o14b2o
2b2ob2o22bo14b8o68b2ob2o27b2o6b2o2b4o2b2o35bob2o237bo26b3o4bo2bo7bo2bo
4b3o21bobo9bobo33bo5bo6b2obo37bobo138bobo2b4obobob2ob3o2bobo2b3o2bo7bo
3b2o10bobo4bo$18bo4bo4bo223b2o86b5o3b5o23bobo54bo272bobobo5bobobo29b2o
3b3o3b2o33bo5bo5b2o43bo2b2o136bobobobobobo5bo3bo2b2obob3o2bo4b2ob2o10b
obo4b2o2b2o7b2o$20b2obob2o243b4o60b2o3b5o5b5o3b2o19b3o25b2o25bo65bo3b
2o5b2o3bo49b2o13b2o125bo2bo5bo2bo76b2o4b2o5bo27b2o13b2obobo136bobo3bob
o2b2obo2b3o6bo11b2ob2o10b3o3bo2b3obo6bo$19bobobobobo242bo2bo60b2o2bo3b
obo3bobo3bo2b2o18bo3bob2o20bobo90bobo2bo7bo2bobo49bo6b3o3bo2bo125b2o7b
2o79bob2o6bo29bo16bo139bob4obo4b2obo2bo8bo9bobobo6b2o2b3o2b4o4b3o6bo$
21bobobo312bo4b2o3b2o4bo22b2obo5bo6bo9b3o25b3o64bobo4bo3bo4bobo49bobo
5bo3bo219b2obo6b2o28bobo11b4o140bo6b3o4b2obo3bo3bo7bobobo10b2o11b2o4bo
b4obo$23bo315bo13bo26bo5bo6b2o7bo3bo18b2o3b5o64bob5o3b5obo51b2o4bo4bo
2bob2o217b2o6bob2o25b2o6b2o3bo3b2o140bo6bob3o3bob3o3bo7b2ob2o9b2o2bo5b
3obob2o2bobo3bobo$377b2obo5bo6b2o3bo2bo2b3o18b2o2bo3bobo65bo11bo60bo2b
obob3o219bo6b2obo39b3o2bo138b2o7b2o2b2o3bo2bo10b2ob2o4bo3b2o3b3o4b2obo
3bobo2bobo2bo$339bo13bo23bo3bob2o8b3o2b2obo27bo4b2o64bo3b2o3b2o3bo58b
3obobo2bo219bo11b2o39bob2o151bo3b2obo10b2o3bo7bo2bo6b2o4b2o2bo2bo3b2ob
obo$338bo4b2o3b2o4bo23b3o9b4o4bo2bo2b3o23bo68bo4b2o3b2o4bo56b2obo2bo4b
o4b2o212b2o11bo17bo21bo155bo2bobo13bobo9bob4ob3obo3b2obo2bo5b2obobo$
334b2o2bo3bobo3bobo3bo2b2o17bobo11b3o9bo3bo92b2o13b2o62bo3bo5bobo223bo
18b3o18b2o154b2o3bo17b2obo4bo4bo2bo2bo4bobo5bo3bo2bobo$215b2o117b2o3b
5o5b5o3b2o17b2o5b2o18b3o21bo146bo2bo3b3o6bo223b2o20bo194b2obo6b2obobo
5bobo2b4o4bo6bob2o$177b2ob2o26b2o3bo4bo3b2o27b2o87b5o3b5o30bo5bobobo
11bobo19bo76bo5bo64b2o13b2o210b2o6bob2o15b2o4b2o8b2o184b4o6b2o2bob4obo
b3o7bo7bo$178bobo27bo2bobo4bobo2bo28bo7b2o82b2ob2o31b2obo5bobobobo10b
2o18b2obo74bo5bo291b2o6b2obo16bo13bo2bo193b2o3bo4bo5b4obobo2bo2bobo$
177bo3bo23b2obob2obo4bob2obob2o23bo5b2o2bo2bo4bobo71bo2bobo2bo29bob2ob
2ob2o6bo32b2o72bobo3bobo318bobo12b3o193b3o3b3o6bo3bobob4o2b2o$173b2obo
5bob2o19bo2bo2bobob2obobo2bo2bo23b2o4bobobob2o3bob2o71b3o3b3o34bobo3b
2ob2o30bo144bo259b2o13bo181b2o19b2o5b2o4b2o$173b2obob3obob2o21bobo4bo
2bo4bobo33bobo6bo117bob4obobo31b2o139b2o3bo2b2o95b2o7b2o25b2o51b2o75bo
13b2o174bobo11bo18bo3bo$176b7o25bo6b2o6bo29bo3b2obob2o2b2ob4o69b2obobo
b2o35bo3bobobo30b2o132bo7b2o3bobobo94bo2bo5bo2bo24b2o52bobo72b3o12bobo
174b2o9b2o3b2o14b2ob2o$173b3o7b3o25bo2bo2bo2bo25b2obo2bob2o4bobobo4bo
3bo68bob2ob2obo36bo3bobo31b3o130bobo5bo3b2o3bo94bobobo5bobobo69b2o3bo
5bo71bo2bo13bo184bo6bo$170bobo2bo7bo2bobo21bob2o4b2obo25bobo4bobo2bo2b
ob3obo2bobo112b2o4bo106b2o13b2o42b2o7b2ob2o91b3o4bo2bo7bo2bo4b3o14b6o
42b2o3b2o3bo73b2o8b2o4b2o184b6o$2obo166b2o2b2o3bo3b2o2b2o22bo8bo26bob
2obobob3ob3o5bob3o226bo4bobobobo4bo51b2o93bo6bo15bo6bo12bo2bo3bo135bo$
ob2o18bo20b2ob2o10bo11bo11b2o14b2o9b2o8bo54b2o2bobo2b2o62b2obo3bo3b2o
2bo237bo3b2o3b2o3bo147bo3bo3bobo9bobo3bo3bo12b2o2b3o8b3o37bobo66b2o18b
3o190b2o$4b2o16b3o3bob3o6bo4bob2o5b4o3bo7bo3b4o5bo2bo10b2o2bo5b2obobo
8b3o48b2o2b2o3bo3b2o2b2o18b2o14b2o22bob2obobob3ob3o5bob3o228bo11bo148b
o2bobo6bo5bo6bobo2bo17bo8b2o2bo20bo10b2o4bo67bo21bo190b2o$4bo16bobo3bo
bo8bob2o2bo11bo3bo7bo3bo8bobo2bo7bo10b2obo13bo47bobo2bo7bo2bobo18bo2b
4o4b4o2bo22bobo4bobo2bo2bob3obo2bobo225bob5o3b5obo27b2o16b2o101bobo2bo
3b2o5b2o3bo2bobo19b2o5b2o4bo19bobo8bo2bo68b2obo$5bo12b3obo3b3o10b4obo
15bo7bo13bo3bo7bobobo9bo12b2o50b3o7b3o22bobobobo2bobobobo22b2obo2bob2o
4bobobo4bo3bo224bobo4bo3bo4bobo27bo18bo101bo3bo3bobo3bobo3bo3bo20b2o
10b2o29b2o6bo64bo2b3o$4b2o22bo13b2o13bo13bo14bo6b2o3bo9bo2bo64b7o24b2o
bo3b4o3bob2o28bo3b2obob2o2b2ob4o225bobo2bo7bo2bobo27bob2o12bo3bo104bo
4b2o3b2o4bo24b2o3bo6bo9b2o8b2o3bo5b2o6bo65b2o3bo3b2o6b2o$2obo54b2o9b2o
12bo11b3o11b2obo10b2o48b2obob3obob2o25b2o6b2o37bobo6bo86bo144bo3b2o5b
2o3bo29bo13bo5bo100b3o4b3o3b3o4b3o15b3o3b3o2bo5bo9bobo8bo5bob6o5bo67b
4o11bobo$ob2o80b2o9bo16bo10bo49b2obo5bob2o27b2o2b2o31b2o4bobobob2o3bob
2o83bo194bo2b2o5b2obo110bobo3bobo28b2o3bo5bo7b3o13bobo5b2o74bo16bo$4b
2o106b2o10b3o50bo3bo31bo2bobo31bo5b2o2bo2bo4bobo82b3o194bob2o5b2o2bo
110bo5bo29b2o13b2obo3bo11b2o8bo8b2o3b2o57bobob2o13b2o$4bo121bo51bobo
33b2o36bo7b2o285bo5bo13bo105b3o3b3o28b2o5b3o3bo5bob2o20b2o8bobo2b2o57b
2o2bo$5bo171b2ob2o69b2o100b3o192bo3bo12b2obo141bo12bo5bo19bo3b2obo6b3o
65bobo$4b2o543bo18bo97b3o17b3o16b2o2b3o11bo5bob2o15bobo4b2o75b2o$2obo
345b2o2b3o2b2o190b2o16b2o99bo15bo19bo2bo3bo12b2obo3bo11b2o2bo2bo$ob2o
345bobo2bo2bobo305bo3bo15bo3bo16b6o17b3o12b2o3b2o17b2o$350bo7bo305bobo
2bo15bo2bobo27b2o11bobo32bobo$662bo2bobo19bobo2bo15b2o6bob2o12b2o18bo
8b3obo5bo$350bo7bo303bo3bo3bobo9bobo3bo3bo15b2o5bo36bo5bo7bo3b2o$349bo
bo2bo2bobo302bo6bo15bo6bo25bo33bo4bobo$21b3o10bo19b2obo12bo2bo13b3o14b
3o11bo230b2o2b3o2b2o303b3o4bo2bo7bo2bo4b3o22b2obo38bo2bo8bobo$34b3o17b
ob2o12bo2bo44b3o549bobobo5bobobo29b2o36bo4b2o10bo$20bo4bo11bo13b2obo
14b2o2b2o11bo4bo11bo17bo231b3o315bo2bo5bo2bo67bobo208b2obo6b2o4b2o25bo
7b2o$19bobo3bo10bo2b2o11bobob4o7b3o4b3o8bobo3bo9bo7bo10bo551b2o7b2o
279bob2o7bo5bo25b3o5b2o7bo$19bo2bo2bo10bo4bo9bo7bo23b3o2bo2bo9b4o4bo
10bo2bo229b3o8b2o3b2o378bo3b2o3b2o200b2o4b2o4bo5bo20bo8bo11b3o$18b2o3b
o13b2o2bo9b4obobo30bo15bo3bo13bo30b2obo181b2o3b2o8bo9bobobobo377bo5bo
3b2o200bo5bo5b2o4b2o19b3o5b2o10bo$20b3o17bo15bob2o7b3o4b3o10b2o12b2o2b
obo13bo2b2o28bob2o181bobobobo8bo11bobo380bobo209bo5bo6bob2o24bo15bobo$
20bo20b3o9b2obo12b2o2b2o12bo13bobobo15bo30b2o4b2o12b2o13bo3bo8b2o19b2o
9b2o14bo15b2o14bo60bobo19bo2bobo2bo379b2o207b2o4b2o6b2obo23b2o13b5o$
43bo9bob2o13bo2bo13bo14b2ob2o15b2o3bo24bo5bo12b3o12b7o6bo2bo18b2o8bobo
14b2o12bob2o13b3o56bo2bobo2bo7b3o3bo2bo2bobo2bo2bo587b2obo12b2o36b3o$
70bo2bo51b2obo24bo5bo10bobo2bo2b2o6b2obob2o7b5o25b3o14b2obo10bo16bob3o
52bo2bo2bobo2bo2bo4bobo3b2o4bobo4b2o421b2o4b2o6b2obo148bob2o13bo$128bo
23b2o4b2o10b2o2b2o2b2o8bobo10b2obo25b2o14bo2b3o12bo12bo3bo53b2o4bobo4b
2o4bo5bo2bo2bobo2bo2bo422bo5bo6bob2o28bo3b3o117b2o10bo42b2ob2o$128b2o
24b2obo16b2o26bobo15b2o11b2o10bobobo10b2obo12bo3bo54bo2bo2bobo2bo2bo
13bo2bobo2bo98b2obo6b2obo21b2o15b2o272bo5bo5b2o31bobo2b5o3b2o110bo11b
2o11b2o28b2obo2bo$154bob2o29bo3bo10bob2o14b3o9b3o9bobobo11b2o13b3obo
58bo2bobo2bo19bobo101bob2o6bob2o22bo15bo273b2o4b2o4bo32bo3b2o3b2o2b2o
111bo22bo2bo2b2o26bob2o$152b2o4b2o27bo3bo10b5o7b2o2bo2bobo18b3o2bo28b
3o62bobo11bo8bobobobo103b2o8b2o18bo19bo273bob2o7bo32bo2bo3b2o115b2o23b
2o2bobo26bo$152bo5bo28bo3bo12bo2bo6b2o2b2o2b2o19bob2o30bo61bobobobo9bo
8b2o3b2o103bo9bo19b5o11b5o273b2obo6b2o33b3o3bo112b2obo12b2o13b2o8bobo
17b2o$153bo5bo45b2o11b2o12b2o10b2o93b2o3b2o8b3o118bo9bo22bo11bo281b2o
6b2obo148bob2o12b2o13bo26bobo2b2o$152b2o4b2o72b2o11bo228b2o8b2o16b4o
17b4o276bo6bob2o29b3o3bo140b2obo7b2o17b2o2bo2bo$154b2obo196b3o113b2obo
6b2obo18bo2bo17bo2bo275bo5b2o4b2o26bo2bo3b2o139bo2bob2o5bo4b2o16b2o$
154bob2o312bob2o6bob2o318b2o4bo5bo12b2o12bo3b2o3b2o2b2o136b2ob2o5b2o3b
obo$350b2o2b3o2b2o107b2o14b2o323bo5bo11b2o12bobo2b5o3b2o153bo$25bo23b
2o3bo3b2o22bo25b3o3b3o233bobo2bo2bobo107bo15bo27b2ob2o3b3o285b2o4b2o
26bo3b3o158b2o$24b3o22b2o2b3o2b2o21bobo90bo34bo141bo7bo109bo15bo20b2o
4b2ob2o2bo2bo279b2o6b2obo201b2o$22b3ob3o22b3ob3o22bobobo21bo4bobo4bo
70bo32b2o17b2o17b2o11bob2o191b2o14b2o33bo3bo278b2o6bob2o183b2o16bo$22b
o5bo22bo5bo22bo3bo21bo4bobo4bo53bob3o11b3o16b3obo10b2o13b2obo2bo12b2ob
o2bo10b2obo74bo7bo110b2obo6b2obo36b4o474bo10b2o5b3o$21b2o5b2o20b2o5b2o
19b2o2bo2b2o19bo4bobo4bo55b2obo9b3obo14bob2o26bobob2obo12bo3bobo87bobo
2bo2bobo109bob2o6bob2o22b3o13bo472b3o11bo8bo$20b2o7b2o18b2o7b2o17bo4bo
4bo20b3o3b3o57bob2o10bo3bo13b2obo10b6o10bobo4bob2o11b2obo11b3o74b2o2b
3o2b2o140b2o3bo2bo3b2o11b2o467bo7b2o5b3o$21b2o5b2o20b2o5b2o17bobob2ob
2obobo86b3obo9bo3bo10bob3o10bo6bo7b2ob2ob2obobo8b4obo9b2obo3bo224bo8bo
bo2bo11bo104b2obo10bob2o32b2o49b2o4b2o262b2o7bo$22bo5bo22bo5bo19bo4bo
4bo20b3o3b3o73bob3o23bobo2b3obo7bobo5bobo7bo3bo2bo8b2obo3bo77b3o141b2o
bo2b3o2bo3b2o12bob2o101bob2o10b2obo23bo7bobo49bobo2bobo$22b3ob3o22b3ob
3o20b2o2bo2b2o19bo4bobo4bo58bo13b3o12bo12bo6bo8bobob2ob2ob2o7bobob3o
11bobobob2o218bob2ob6o15b2ob2obo105b2o6b2o25b3o8bo52bo2bo$24b3o22b2o2b
3o2b2o20bo3bo21bo4bobo4bo73bo27b6o8b2obo4bobo12bo14bo3bob2o74b3o146bo
21bo110bo8bo24bo7b3o53bo4bo$25bo23b2o3bo3b2o20bobobo21bo4bobo4bo118bob
2obobo12bob2o12b3o79bo147bobo17bobo111bo6bo26bo5bo56b6o$81bobo138b2o
13bo2bob2o11bobob2o94bo148b2o17b2o111b2o6b2o21bo3bo4bo3bo54b4o$82bo25b
3o3b3o105b2o14b2o15b2o15bob2o232bo11bo111b2obo10bob2o25bo3bo$272b2obo
228b5o11b5o107bob2o10b2obo17bo3bo3bo2bo6bo60bo2b2o$504bo19bo111b2o12b
2o10b2o4bo3bo2bo3bo4b2o59bobo2bo$506bo15bo113bo14bo10bo6bo2bo3bo3bo53b
o10bobobo$505b2o15b2o113bo12bo17bo3bo47b2o11b3o8b2obob2o$636b2o12b2o
15bo3bo4bo3bo38bo2bo9bobobo7bo2bo3bo$632b2obo10bob2o20bo5bo37bo2bo2bob
o12b3o6b3o2b2obo43b2o4b2o5bob2o24bo7bo$632bob2o10b2obo17b3o7bo36b5obob
2o20b4o4bo44bo5bo5b2obo23bobo5bobo$665bo8b3o43bo2bo20b3o2b3o44bo5bo10b
2o22bo7bo$175b2ob2o16b2o14bo18bo18b2o18b2o392bobo7bo41b3o2b3o20bo2bo
48b2o4b2o10bo$171b2o3bob2o16b2o14b2o2b2o12bobo14b2o2bo17b4o391b2o49bo
4b4o20b2obob5o44bob2o11bo$172bo2bo35b2obo2bo13bo13bo2bobo17bob2ob2obo
438bob2o2b3o6b3o12bobo2bo2bo44b2obo11b2o202bo$170bo4bob3o34b3o28b2o3b
2o21b2o2bo438bo3bo2bo7bobobo9bo2bo53b2o7b2o149b2obo8b2obo76b2o11b2o$
170b5obobobo15bo16bo15b5o15bo4bo13b2o2b2o2b3o438b2obob2o8b3o11b2o55bo
8bo18b3o3b2o5b2o3b3o110bob2o8bob2o21bo15b3obo33bobo$71bobobo100bobobo
14b3o10bo5b3o9bobo5bobo11bob4obo12b4obo2b3o25b2o10b2obo18b2ob2o26bo25b
2o32b2obo285bobobo10bo68bo8bo26b2o3b2o115b2o4b2o4b2o24bobo13bob2o35bo
11bo3bo$2o4b2o12b2o2b2o2b2o11b2o28bobobo31bo3bo58b4o2b3ob2o11b2ob2o8b
3o4bo2bo9b2obobobob2o11bobo4bo11bo2bo3bo2bo27bo10bob2o17bobobobo24bobo
23bobo32bob2o284bo2bobo79b2o7b2o15b2o5bo2bobobobo2bo5b2o105bo5bo5bo32b
o8b2obo4bo25bob2ob2o4b2o4bo4bo$bo5bo12bo2b4o2bo10b3o9b2o2b3o2b2o8bo3bo
10b2o2b4o2b2o9b5o10b3o45bo4bo3bo12bo2bo11bo2bobob2o13bobobo12b2o2b2ob
2o11b3o2bob4o27bo15b2o15bo5bo23bobobo22bobob2ob2o23b2obo287b2o2bo87b2o
16bobo5bo11bo5bobo105bo5bo5bo17b2o7bo4b3o4bob3o4bobo24b2ob2o5bobo6bobo
bo$o5bo14b8o10bob2o9bo2b5o2bo9bobo11bo2b6o2bo11bo12b3o47b2obobobo15bo
12b2obobo15bo3bo13bobo5b3o8b3o2b2o2b2o27b2o14bo13b2obo5bob2o18b3obob3o
21bobobobobo20b3obob3o377bo16bo7bo2bobobobo2bo7bo104b2o4b2o4b2o16bobo
6b2o7bo44bo4bo9bobobo$2o4b2o10b3o8b3o6bobo12b9o9bo3bo11b10o11bobo9b3o
2b2o46bobob2o30bobobo16b3o14bo2b5o2bo9bo2b2o49bo12bobo2bobob2obo15bobo
3bobo3bobo20bo3bobo19bo4bobo2bo295b4o69b2o5bo16b2o10b2o3b2o10b2o105b2o
bo8b2obo12bobob2o3b5o3b2o5bo6bo31bo2bo3bo8bo4bo$2bob2o12bo2bo6bo2bo6bo
2bo8b3o9b3o6bobobo8b3o10b3o9bo15b2o46bobo15bo2bo12bobob2o33b2o7bo12bob
2ob2obo27b2o14b2o15b2obobo19b2ob2o5b2ob2o20bo3bobob2o16bob2o3bobobo35b
2obo6b2o4b2o19b2o64b2o153b6o68b2o5b2o26b2o5b2o116bob2o8bob2o13bobobo3b
2ob2o4b3o10b2o30b2obobo11bo3bo$2b2obo13b2o8b2o8b2o9bo2bo7bo2bo6bobobo
8bo2bo8bo2bo7b5o12b3o47b2o16b2o13b2o21b2obo18b3o17b4o29bo10b2obo18bobo
bo22bobo3bobo18b2obobo3bobob2o17bobo3bobobo35bob2o7bo5bo18bobo63b4o
152bo4bo99b2o2b3o3b3o2b2o116b2o4b2o4b2o13bo6bo8b4o5b5o30bo4bo$6b2o43b
2o9b2o21b2o10b2o8bo3bo12bo105bob2o18bo20b2o29bo11bob2o17bo2b2o23bo7bo
18bob2obobobobo22bobobobob2o38b2o4bo5bo19bo61bob2ob2obo152bo2bo100b2o
2b3o3b3o2b2o116bo5bo5bo14b2o13bo2b2o5b2ob2o5b2o22b3o4bo2bo3bo4b2o$7bo
116bo179b2o14b2o15b2o27b7o23bo2b3obo18b4ob2obobo41bo5b2o4b2o12b2o2b2ob
4o56bo2b2o155bobo2bobo102b2o5b2o121bo5bo5bo13b3o12bo3bo8bo6bobo22bo4bo
8b2o$6bo313bo72b2o2b2o3bo19bo2bo3b2obo42bo6bob2o14bo2bobo4bo55b3o2b2o
2b2o150b2o4b2o91b2o10b2o3b2o10b2o109b2o4b2o4b2o13b3o3b2o8b2obo12b2obob
o22b2obobo7bo$6b2o296b2o15bo43bob2ob2obo19bo5b3o24b2o3bo42b2o6b2obo16b
2obob2o2b2o53b3o2bob4o250bo7bo2bobobobo2bo7bo106b2obo8b2obo15b3o2bo2bo
9b2o12bobobo23bo2bo3bo$305bo14b2o43b2obobob2o21bo3bo28b3o39b2obo12b2o
15bobo3b2o2bo53bo2bo3bo2bo249bobo5bo11bo5bobo106bob2o8bob2o15b3o6bo17b
o6bo25bo4bo$304bo11b2obo74b2o32bo41bob2o13bo15bobob2o2b2obo53b4obo2b3o
249b2o5bo2bobobobo2bo5b2o138b2o3b2obo17bob2o3b2o20b2ob2o5bobo$6b2o296b
2o10bob2o148b2o16bo17bo4bo4bo53b2o2b2o2b3o259b2o3b2o148bo6bo17bo6b3o
20bob2ob2o4b2o$6b2o460bo17b2o17b3obob3o59b2o2bo253b3o3b2o5b2o3b3o139bo
bobo23bo2bo2b3o25bo$184bo22bo26bo15bo15bo202bo37b2ob2o56bob2ob2obo413b
obob2o24b2o3b3o25bobo15bo$54bo119b2o8b3o19b3o21bob3o14bobo14b3o199b2o
99b4o13b2o402bobo6bo25b3o26b2o10bo4bo12b2o$21bobo14bo15bo13b2o15b2o15b
2o19bo49bobo11bo18b3o21b2o18bo18bo200b2obo12b2o11b3o23b2o33b2o8b2o10b
2o4b4o399b2o5b2ob2o23b2o37bob2o2bo12bobo$19b3ob3o11bobo14bo12bo2bo14b
2o15b2o18b3o48bo8b3o2bo12b2o2b2o3b2o2b2o18b2o2bo30b2o9b2o189bob2o12b2o
10bo57b2o2b2o2b2o16b2o2b2ob3o406b5o17bo6bo37bo20bo$18bo3bo3bo9bobobo9b
2o5b2o9b2obo50b3o45b2ob2o6bobobob2o11bo2b9o2bo15b3ob4o10b5o26bo218bo3b
o9bo4bo5bo3bo28b2o2bo2bobo9bo10bo250bo7bo152b2o17b2ob2o3bobobo36bobo
10b2o4b2ob2obo$18bobobobobo6bo2bobobo2bo8bo3bo14bo2bo10b4o13b4o11b2o2b
o3bo2b2o40b2obo4bo2b2ob2obo13b13o12b2obo17bo3bobo23bobo218bo2bobo7b2o
4b2o4bo4bo33b3o10b2obo257bobo5bobo152bo6bo5b2o3b5o3b2obobo36bo11bobo5b
2ob2o$19b7o6bobobo3bobobo8b3o10b3o2bobobo8bobo2bob2o8bo4bob2o7bo2b7o2b
o43bo2bo2bobo2bo2bo10b3o13b3o10bob3ob3o10bobobo2bo23b2o221bobo2bo4b3o
4b3o5bobobo32b2o11bo2bo258bo7bo166bo7b2o6bobo50bo4bo$33bo2bobobo2bo6b
2ob3ob2o6bo3b2o2bobo8bo3b2ob2o8bo3b2ob2o8b11o44bob2ob2o2bo4bob2o7bo2bo
11bo2bo9bo5bo2bo10bob2o3b2o14b5o227bo3bo5b2o4b2o7bobobo40bo5b2o418bobo
4b3obo4b3o4bo7b2o49bo3bo2bo$19b7o10bobobo10bob3obo6bobo2b2o3bo6b2obo2b
obo8b2obob2obo8b3o11b3o40b2obobobo6b2ob2o8b2o13b2o10b4o2bobo10b2o3b2ob
o15b2ob2o231bo6bo4bo9bo4bo38b2o5bo419bo4bob2o8bo57bo7bobob2o$19bo2bo2b
o11bobo14bo9bobobo2b3o7b2obo4bo8b2obo4bo8bo2bo9bo2bo41bo2b3o8bo19bo24b
ob2o10bo2bobobo15b5o228b3o23bo3bo39bo5b2o423b2obo13bobo48b2o8bo4bo$38b
o15bo10bo2bo16b4o13b4o10b2o11b2o42bo11bobo19bo16b4ob3o14bobo3bo11b2o
254bobo49b2o5bo421bob3o15bo45b2o4bo3bo2bo4b3o$54bo13bob2o50b3o49b3o8b
2o20bo16bo2b2o18b5o11bobo257bo5b2o41bo2bo11b2o492bo4bo$69bo2bo14b2o15b
2o17bo52bo53b2o31bo243b2ob2o7bo2bo49bob2o10b3o43b2obo10b2obo12b2o43bo
295bo61bo3bo11bobob2o$70b2o15b2o15b2o17bo103b3obo17bo12b2o9b2o29b2o10b
2o4b2o11bo5bo14b2o22bo2bo25b2o17b2o75b3obob3o4bobobo41bo10bo9bobo2bo2b
2o37bob2o10bob2o13bo42bobo35b2o3b3o3b2o308bo4bo8bo3bo2bo$227bo20bobo
22bo31bo11bo5bo10bobo3bobo12bo2bob2o18b6o20bobobo17bo75bo4bo4bo3bo2bo
37b3ob2o2b2o16b2o2b2o2b2o41b2o6b2o17bobo39bobo2bo32bobo9bobo309bobobo
9bo4bo$249bo24b3o27bo11bo5bo13b2ob2o14bob2obobo23bo17b3obo20b3o4b2o65b
obob2o2b2obo4b2o38b4o4b2o10b2o8b2o45bo7bo19b2o3b3o31b3o2b2obo31bo13bo
310bobobo6bobo5b2ob2o$276bo27b2o10b2o4b2o11b2o3b2o12b2o4bobo15b5obobo
2bo13bo3bobo21bo4bo66bobo3b2o2bo49b2o13b4o55bo7bo22bo3bo23bo5bo3b2o3bo
2b2o24b2ob2o2b2o3b2o2b2ob2o308bo4bo4b2o4b2ob2obo$318bob2o14b2ob2o12bo
2bobobobob2o12bo3bo4b3o12bo2bobobo3b2o12b3obob2obo65b2obob2o2b2o61bob
2ob2obo53b2o6b2o22bo3bo23b3o4b3o2b3o3b2o24b2obo13bob2o309bo3bo11bo$
304b2o12b2obo31b2obob3obo2bo13bo4b3o15bob2o2bob2o2bo11bobobobobo2b2o
61bo2bobo4bo62bo2b2o54b2obo10b2obo18bo3bo26bo5bobo35bob4o3b4obo326bobo
$305bo16b2o32bo6b2o11b3o3bo4bo13b2o2bo3bo2b2o12bo3bobo2bobo62b2o2b2ob
4o61b3o2b2o2b2o49bob2o10bob2o19b3o26b2o6bobo34bobo3b3o3bobo313b2o11b2o
$304bo18bo32bobob2obo12bo2b9o16b2o4b2o13b2obob2o2b2obo68bo65b3o2bob4o
53b2o6b2o4b2o55bo7bo23b2o3bo11bo3b2o$78bo225b2o16bo34b2obo2bo15bo21b2o
2bo6b2o13bobo7b2o67bobo64bo2bo3bo2bo52bo7bo5bo38b2ob2o21b3o20bo2bo8bo
8bo2bo$322b2o37b2o17b6o14bo2b2ob5obo14bo3b6o2bo67b2o65b4obo2b3o52bo7bo
5bo14b3o21bobo8bo11b2o3bo18bobobo17bobobo32b2o4b2o6b2obo12b2o15b2o14b
2o10b2o21b2o$23b2o47b2obo5bob2o13b2o25b2o177b2o76bo2bo14b2o3bobobo2bo
15b3o5bob2o134b2o2b2o2b3o51b2o6b2o4b2o13bo3bo20bo2bo6b3o9bobob2obo17bo
bob2o5bo3bo5b2obobo33bo5bo6bob2o12bobo13bobo13bo2bo8bo2bo19bobo11b3o$
23b2o24b3o20bo5bo5bo12bobo25bobo46bo49b2o29bo49bo99bo5bo20bobobobo140b
2o2bo48b2obo10b2obo15bo3bo17b2obo8b2ob2o9bobobobo15b2obobo2bo4bo3bo4bo
2bobob2o30bo5bo5b2o4b2o12bo13bo15b3o10b3o19bo12bo$44b2ob7ob2o16b2ob2ob
2ob2o13bobob2o19b2obobo46b3o47b2o28bobo47bo17b2o82bob3o17b5obobobo135b
ob2ob2obo49bob2o10bob2o15bo3bo18bobobobo3b3ob3o12bob2o14bo2bo3b3o3bo3b
o3b3o3bo2bo30b2o4b2o4bo5bo13b2o2bo5bo2b2o18b10o17bob2ob2o4b2o5bo3bo$
23b4o17bo3bobobo3bo41bobobo19bobobo50bo77bo48b2o16b2o80bobobo19bo5bob
2o137b4o87b3o3b2o14bob2obobo3b2ob2o10bo2bo14b2obo2bobo2bo5b3o5bo2bobo
2bob2o29bob2o7bo5bo15bobo3bobo20bo2b6o2bo16b2obo2bo3bobo5bo2bobo$22bo
4bo17b4o3b4o19b2o3b2o18bo23bo51b2o9b2o215b2o25b3obo140b2o94bobo14bo3b
2o4b3o13bobo14bo2b2o4b2o15b2o4b2o2bo29b2obo6b2o4b2o12b5o5b5o17b2o2b4o
2b2o21bo4b2o8bobo2bo$21bobob2obob2o15bo5bo15b2o15b2o12b2o21b2o62bo65b
5o173bo3bo238bo15b3o6b2o13b2ob2o14b2o4bobo17bobo4b2o34b2o6b2obo14bo6bo
6bo52b2obo10bo3bo$21bob3o2bob2o15bo5bo15bo2bo3bobobo3bo2bo12b3o19b3o
54bo5bobo26b2o36bo4bo177b2o237b2o16bo6b3o33bobobobo17bobobobo37bo6bob
2o16b12o32bo17bo2bo3b2o12bo3b2o$18b2obo2b3obo12b2o3b2o5b2o3b2o10b3ob9o
b3o13b3o19b3o53b3o4b2o26b4o34bo2bo444bobo6b2o25bo4bo3bo11bo3bo4bo36bo
5b2o4b2o13b2o10bobo16bo12b2o17bo2b3o2bo9b3o4b2o$18b2obob2obobo12bo2b5o
bob5o2bo13bo4bo4bo16b3o19b3o52b5o30bob2ob2obo27bo2bob2o445bobo5bo27b4o
3bobo9bobo3b4o37b2o4bo5bo18b6o3b2o16b2o4b3o25b2o4bo3bo12b2o$22bo4bo14b
3o4b3o4b3o13b2o9b2o15b3o19b3o51b2o3b2o34b2o2bo25bobobo5bo434b2o3b3o2b
3o4b3o31bobo2b5o2bobo51bo5bo16bo6bo26b3o2b3o2bobo13bo2b3o2bo2b2o13bo$
23b4o45bo11bo15b2o21b2o52b5o30b2o2b2o2b3o25bo2bo4b2o3b2o429b2o2bo3b2o
3bo5bo26b4obo2bob5obo2bob4o45b2o4b2o17b3obobo16bobo2b3o3bo5bob4o13bo2b
o3b2o3bo12bobo$44b2o9b2o16bo9bo16bo23bo47b2o4b3o31b4obo2b3o28b2o2b3o4b
o2bo430bob2o2b3o33bo2bobo4b5o4bobo2bo39b2o6b2obo21bobobob2o13b4obo15b
2o16b2obo13b3obobo$25b2o17bo11bo15b2o9b2o13bobobo3b2o9b2o3bobobo44bobo
5bo31bo2bo3bo2bo40bobobo243b2o16b2o167bo2bobo40bo13bo44b2o6bob2o23bobo
2bo13b2o35bo4b2o12b4obo$25b2o18bo9bo41bobob2o3b2o9b2o3b2obobo43bo38b3o
2bob4o39bobo2bo243bobo16bobo168bobo41bobo4bo4bobo78b2ob2o47b2obo2bo3bo
bo15bo$44b2o9b2o40bobo25bobo42b2o9b2o27b3o2b2o2b2o38b2obo83bo7bo154bo
20bo169bo43b2o4bo4b2o131bob2ob2o4b2o47b2o10b2o12b2obo36b2o4b2o52b2o4b
2o$98b2o25b2o54bo29bo2b2o40bo4bo78bo5b3o3b2o153b2ob4o12b4ob2o217bo115b
2o25bo55bo11bo12bob2o36bobo2bobo52bobo2bobo$182b3o27bob2ob2obo35b5o78b
obo7bo4b2o150bobobo2bo12bo2bobobo331bo2bo24bobo12bo3bo35bo11bo11b2o4b
2o36bo2bo56bo2bo$184bo31b4o119bobo6b2o3bo6b2o144bob2o4b2o8b2o4b2obo
332b2o26b2o9bo2bo5bo33b2o10b2o10bo5bo36bo4bo54bo4bo$217b2o39bo78b3ob2o
17bo142b2obobob4o2bo6bo2b4obobob2o368bo2bo5bo58bo5bo35bo4bo54bo4bo$
257bobo76bo21bobo143bobob2obo2b2obo4bob2o2bob2obobo330b2o42b3o35b2o10b
2o10b2o4b2o35bo4bo4bo2bo46bo4bo4bo2bo$258bo78b3ob2o7b3o5b2o144bo2bo4bo
4bo4bo4bo4bo2bo329bo2bo80bo11bo10bo5bo38b2o5bob2obo47b2o5bob2obo$339bo
b2o6bob2o150b2o3b3o3b3o6b3o3b3o3b2o329b2o44b3o33bo11bo12bo5bo45bo2bo
56bo2bo$349bo3bo156bobobo10bobobo380bo5bo2bo28b2o10b2o10b2o4b2o45bo2bo
56bo2bo$350b3o148b6o4b3o12b3o4b6o371bo5bo2bo9b2o41bo5bo45bob2obo54bob
2obo$350b3o147bo6bo24bo6bo316b2o54bo3bo12bobo16b2o10b2o11bo5bo45bo2bo
49b3o4bo2bo$25b4o21b2o20b3o20b4o20b3o378b2o3b2o26b2o3b2o316b4obo15b2o
52bo17bo11bo10b2o4b2o19bo2bo15b3o$24b6o19b4o18b5o18b6o17b7o219b3o158bo
30bo144b2o174bobo2b3o3bo5bob4o45b2o4b2ob2obo11bo11bo13b2obo20bob2obo
13bo3bo54bo5bo$23bobo2bobo18b4o18b5o18b6o16bo7bo218b3o334b2o13b2o169b
3o2b3o2bobo29bo15bobo3bo2bob2o11b2o10b2o12bob2o21bo2bo14bo3bo54bo5bo$
21b3o6b3o14b2o4b2o14b2o5b2o14b2o6b2o240bo3bo151bo4b3o28b3o4bo138b2o13b
2o163b2o4b3o38bob4o12b2o4bo67bo2bo14bo3bo54bo5bo$18bobo5b2o5bobo11bo6b
o14bo7bo14bo8bo241b2obo6b2obo141b3o2b3o12bo2bo12b3o2b3o138bo179bo12b2o
31bobob3o13bob2o68bob2obo14b3o$18b2obo3b4o3bob2o9b2o8b2o10b2o9b2o10b2o
10b2o9b2ob3o3b3ob2o208b2o5b3o7b2ob3o142bob3o6b2o3bo4bo3b2o6b3obo140bob
o192bo30bobo12bo3b2o3bo2bo66bo2bo75b3o$21bob2ob2ob2obo14bo6bo14bo7bo
14bo8bo11bob2obo3bob2obo207bobo21bo140bo2b3o5bo2bo2bo4bo2bo2bo5b3o2bo
140bobob3o8b3o4b2o202bo13b2o2bo2b3o2bo73bo$18b2obob8obob2o74b2obo2bobo
3bobo2bob2o204bo17b2ob3o141b2ob3o6b2o3bo4bo3b2o6b3ob2o141bob4o3b2o2bob
2o4bobo155b2o2b4o2b2o34b2o12bo3bo4b2o75bo$18b2obo10bob2o8bo2bo6bo2bo6b
2o3bo7bo3b2o6bo2bo8bo2bo5bo2bo4bo3bo4bo2bo23b2obo14b2o4b2o8b2ob2o11b2o
b2o31b2o12b2o5b2o16b2o53b2o6bo3b2o6bobo146b3o12bo2bo12b3o145bo7b2o2b2o
9bo154bo2b6o2bo34b2o4b3o9bo2b3o2bo60b2o11bo$21bob8obo12b3o6b3o7bo2bob
2o5b2obo2bo7b3o3b2o3b3o7bo2b3o7b3o2bo24bob2o15bo2bo2bo7bobobo13bobobob
2o12b2o14bo12bo7bo16bo60b2o4bo7bobo146b3o28b3o137b2o18b2o7b2obob2o151b
10o35b2o3bo12b2o3bo2bo60bo2b3o52bo$21bobobo2bobobo12b2o8b2o8bob2o9b2ob
o7b2o4b4o4b2o7b2o13b2o23b2o4b2o11bo4b2o9bo3bo12bo4bobo3b2o8bobob2o2b2o
6bobo8bobo7bobo4b4o4bobo62b2o3b3o5bo317bobo23b2obo3b2obo148b3o10b3o37b
o3bo10bob2o64b2o6b3o3b3o40bo26bo20b2o$20b2obob4obob2o10bo3bo4bo3bo6b2o
bo11bob2o9b2obo2bob2o11bob5ob5obo24bo5bo12b2o12bobob2ob2o11b5o3bo2bo5b
2obobobobo2bo7b2o3b2o3b2o9b2o3b6o3b2o62bo7bo154bo30bo137bobob2o5bo12b
3o2b2obo152bo2bo8bo2bo37bo2bobo8b2o4bo67bo17b2ob2o4b2o10b3o10bo11bo12b
2ob2o6bo7b3o2bo$20bo2bo6bo2bo10b2o3bo2bo3b2o5bo2bo3b2o3b2o3bo2bo8b2ob
4ob2o11bobo9bobo25bo5bo13bo2b2o7b2obo3bobo13bo3b3o7b2obobobob3o12b4o
17b8o225b2o3b2o26b2o3b2o134bobobo4b3o11b2o3b2o2b3o150b2o10b2o40bobo2bo
5bobo3bo2bob2o62bo6bo14bo3bo2bo32b2ob2o12bo8bo10b2o$22bo3b2o3bo9bo7bo
2bo7bo3bobobo2b2ob2o2bobobo10bobo2bobo10b2o2bobo5bobo2b2o22b2o4b2o11b
2ob2obo10bobobobo10b3o3bo13bo3bo15b2o2b2o15b2o6b2o224bo6bo24bo6bo136bo
5b5o7bo2bo10bo205bo3bo5b2o4b2ob2obo57b2o10bo11bo2bo3bobo8bo5bo4b3o3b3o
7bo23bo6bo$21b2obob2obob2o8b9o2b9o4bob2o2b2ob2o2b2obo8b2obob4obob2o8bo
bo2bob3obo2bobo25b2obo12bobobobo11bob2ob2ob2o5bo2bo3b5o10bobob3o14b4o
17b8o226b6o4b3o12b3o4b6o124b2o9bo2bo9bo9bo6b4o210bo12bo61bo2b3o7bo7b3o
b2o5bobo8bo5bo51bo$21bo2b2o2b2o2bo15bo4bo13bo3bo3bo3bo10b2ob2o4b2ob2o
7bo2b2o9b2o2bo24bob2o12bo3b2o13bo5bobo5b2o3bobo4bo10bobo3bo9b2o3b2o3b
2o9b2o3b6o3b2o231bobobo10bobobo132bo2bo2b2o7bo6bo2b2o4bo3bo5bobo2b3o
204b3o11bobo61b2o23bobo5b2ob3o4bo5bo8bo31b3o3b3o6b2o$22bo2bo2bo2bo11b
2ob2o6b2ob2o8b2o4bo4b2o11bo4b2o4bo9b2o2bo7bo2b2o29b2o11b3o16b5o12b2obo
bobo13bo2b2o8bobo8bobo7bobo4b4o4bobo223b2o3b3o3b3o6b3o3b3o3b2o125b3o4b
o3bo3bo5bobob3o7bo5b2o2bo2bo218b2o87bobo3bo2bo23bo43b3o2bo$23b2o4b2o
13bobo8bobo10bob7obo14b3o2b3o13b2o2b5o2b2o31bo14bo18bo18b2ob2o12b2o11b
o12bo7bo16bo224bo2bo4bo4bo4bo4bo4bo2bo129b3o9bo6bo2b2o5bo2bo10b2o307bo
2bo3bo13b3o10bo35bo11b2o$44bobo8bobo8bobobo5bobobo11bo2bo2bo2bo12bo3b
5o3bo32bo80b2o12b2o5b2o16b2o223bobob2obo2b2obo4bob2o2bob2obobo128bo5bo
6bo9bo8bo321b2o4b2ob2o58bo$45bo10bo7b3ob2ob2ob2ob2ob3o9b2o2b2o2b2o9b2o
bo2bo5bo2bob2o28b2o343b2obobob4o2bo6bo2b4obobob2o127b3o3bo3bobo5b5o7bo
bobo388bo$63bo5bo2bobo2bo5bo7bo10bo8bobob2ob2ob2ob2obobo24b2obo348bob
2o4b2o8b2o4b2obo134bo5bo7b4o8b2obobo373b3o15bo2bo$64bob2obobo3bobob2ob
o9b2ob4ob2o11bo2bobo3bobo2bo26bob2o348bobobo2bo12bo2bobobo129bob2o3b4o
10bo12bobo390bob2obo$65b2obobo5bobob2o12b2o2b2o13b4obo3bob4o379b2ob4o
12b4ob2o130b2obob5o4b2o18b2o317bo54bo5bo13bo2bo$69bo7bo14b2o2b2o2b2o
14bob2ob2obo311bo72bo20bo136bo9b2o2b2o333bo54bo5bo13bo2bo$92bo2bo2bo2b
o10bob2obo5bob2obo307bo72bobo16bobo137bobo4b2obo2b2o10b2o301bo2bo16bo
54bo5bo12bob2obo$94b2o2b2o12b2obobo5bobob2o232b2o6b2o64b3o72b2o16b2o
139b2o4b3o11b2obo302bob2obo90bo2bo$116bo7bo45b2o20b2o10b2o46bo3b2o14b
2ob2o27b2o12bob2o17bo2bo4bo2bo9bo2bo4bo2bo20b2o19b2o274b2o2bo2bo299bo
2bo12b3o3b3o52b3o$171bo20bo12bo27b2o16bobo2bo16bobobo27bo12b2obo15b3o
2b6o2b3o6b6o2b6o18bob3o17bo2bo277bobo299bo2bo$171bobo16bobo12bobo4b4o
17bo17bo2bobo14bo3bobo26bo11b2o21bo2bo4bo2bo9bo2bo4bo2bo17b3o4bo17b5o
16b3o238b2o17bo299bob2obo15bo$172b2o3b2o6b2o3b2o14b2o3b6o6b4o4bobo14b
2ob2obob2o11b5obob2o25b2o11bo43b2o6b2o17bo4b2o2bo21bo16bo239b2o318bo2b
o16bo$176b4o4b4o22b8o4b6o3b2o15bobo17bo8bo38bo71bob2obob2obo13b8o2bo
13bo257b2o320bo$175b2o2b2o2b2o2b2o20b2o6b2o2b8o16b2obo3b2ob3o11b4ob2ob
o26b2o10b2o68b2obobobo2bobo12bo8b3o13bo257b2o304bo39bobo19b3o$176b4o4b
4o22b8o2b2o6b2o16bobob2o2bo2bo14bobobo28bo12bob2o63bobobobobobo2b2o9bo
2b4o3bo16bo361bob2o8b2obo26bo53b2o94b2o9bo13bo23bo3bo$172b2o3b2o6b2o3b
2o14b2o3b6o4b8o16bo6b5o12b2obobo2b3o24bo13b2obo63bobobo3bobobo11b2obo
7bo14b3o360b2obo8bob2o24b3o52bo2bo93bo2b3o6bo11b3o10bo21bo10bo5bo$171b
obo16bobo12bobo4b4o6b6o3b2o13b2ob3o17bo2b5o2bo24b2o16b2o60b2obobobobob
obo14bob7o375b2o16b2o10b2o9bo54bobobo94b2o8b3o9bobobo9bo8b2o5b4ob2obo
8bo5bo29b2o$171bo20bo12bo17b4o4bobo13bobo2b3o16bo5bo45bo63bobo3bobob2o
13b2o383bo16bo12bo9b2o53bo2bo100bo4b2o9b3ob3o8bo7bo3bo7bo4bo7bo5bo7b3o
15b3o2bo$170b2o20b2o10b2o27bo13bo2bo3bo17b5o27b2o16bo64bob2o3bo20bo2bo
16b3o358bo18bo11bobo61bo104bo16bobobo17bo4bo7bo3bo30b3o9b2o$233b2o13b
2o24bo30bo16b2o64bo3b2o18b2ob4o17bo359b2o16b2o12b2o54b2o6bobo96b2o21b
3o6b3o3b3o4bob2ob4o5b2o10b3o7bo18bo$304bo13bob2o67b3o20bobo21bo361bob
2o8b2obo69b3o104bo2b3o19bo22bo33bo4b3obo5bo3bo$304b2o12b2obo69bo24bo
381b2obo8bob2o20bo2bo44bob2o104b2o35bo16bo3bo23bo5bob3o4bo7b2o$2bob2o
32b2o31bobo11b2o5bo31bo290b2o53b2obo8bob2o22b2o3b2o64bo5b2o3b2o9b2o
199b2o4b2o27bo43bobo5b2o3b2ob2o128bo17bobo39bo4b3o2bo$2b2obo14b4o8bo2b
ob4obo2bo7b4o12b3ob3o9bo2b2obobo12b4o13bob2o343bob2o8b2obo21bo2bobo2bo
61b3o5bobobobo6b2o2bo200bo4bo24b2obo44bo2bo4b2o3b2ob2o128bo46b3o19b2o$
2o17b6o7b5o4b5o6bob2obo8bobo7bobo7b2ob2obobo10b3obo10bo2bo350b2o4b2o
21b2o3b2o3b2o3b2o56bo10bobo7b2ob2o200bo6bo25bo46b2o199b3o$bo17bo4bo27b
2o2b2o8b2obo5bob2o11bo2bo10bob2obob2o6bobobobo2bo345bo6bo21bo15bo47b2o
7b2o8b2ob2o6b2o203b2o4b2o29b2o48b2o120bo59bo$o19bo2bo8b5o4b5o6b2o2b2o
11bo5bo10b4ob2o9b3o4bo2bo7bo2bo2bobo346bo4bo19b2obo15bob2o45bo28b2o92b
2ob2o2bo4b2ob2o90bob2o8b2obo25bobo49bo119bo59bo16bo2bo$2o16bobo2bobo6b
o2bob4obo2bo6bob2obo11bob3obo10bo3bob2o7bo3bo2bobo12bo5bo52b2o12b2o17b
2o19b2o14bo2bo18b2o198b2o4b2o16bo2bob2o13b2obo2bo43bobo26b2ob2o90bobo
2bobobo2bobo91b2obo8bob2o16b2o9bo47b2o6b2o112bo59bo15bob2obo$2bob2o12b
2o4b2o12b2o13b4o13bo3bo12bo2bo2bo8bob2o3bo14b5o44b2obob2obo2bo11bobo
16b2o19bo15b4o18bo195b2obo8bob2o12b2obo19bob2o44b2o27b2o2bo89bo3b2obob
2o3bo124bo9b2o54b2o189bo2bo$2b2obo65bobo14bobobo8b2obo68bob2obo3b2o10b
2o3bo38bo11b2o24bo193bob2o8b2obo15bo19bo34bo7bo11b3o2b3o9b3o5b2o87b2ob
3o2bobo2b3ob2o119b3o73b2o101b3o3b3o51b3o3b3o12bo2bo$6b2o62b2ob2o14b2ob
obo11bo19bo50bo2b2o11bo2b2obo15b4o12b2ob4obo9bo3b3o13b2ob4obo190b2o16b
2o13b2o17b2o20b2o2bo8bobo5bobo10bobo2bobo9bobo95bobob2obobob2obobo120b
o60b2ob2o3b2o4bo2bo180bob2obo$7bo85b2o10b2o18bobo46b4o3bo12bo3bob2o12b
o4bo9bo2bobo4bo10b2o4bo11bobobo4bo63b2o4b2o56bo6b2o2b2o9b2o2b2o6bo28bo
18bo19b3o3b3o26bo2bobo8bo7bo11b3o2b3o9b3o5b2o88bobo3bo3bo3bobo181b2ob
2o3b2o3bobobo104bo59bo16bo2bo$6bo119bo43b2obo4bo2bob2o8b2obo3bo11bo2b
3obo9b2obo3bobo12bobobo12bobo3b3o3bo60bobo2bobo56b3o5bo2b2o9b2o2bo5b3o
29bo16bo20bobo3bobo27bobobo50b2o2bo85b2obo4bo5bo4bob2o190b3obo96bo2bo
5bo50bo2bo5bo$6b2o163bobo2b6o2bo9bobo3bo11b3o4bob2o7bobobo4b3o7bobo4b
3o8b2obob2o3b4o62bo2bo61bo3bo19bo3bo31b2o16b2o19b3o3b3o26b2obob2o48b2o
b2o86bo2b4o9b4o2bo190b3o97bob2obo4bo49bob2obo4bo$2bob2o164bo2bo8bo11bo
2b4ob2o11bob2o2bo8bo5b3o3bo6b2obobobo2bo8bo5b3o65b2o2b2o27bo2b2o4b2o2b
o18bo2bo2b7o5b7o2bo2bo32b2obo8bob2o55bo3b2o2bo47b2o90b2o4b2o5b2o4b2o
177bo114bo2bo56bo2bo$2b2obo164b2o2b8o9b2ob3o4bobo6b4ob2o4bo9bob3o3bob
2o9bobobobobo7bob4o4b2obo59b3o2b3o25bo3b3o2b3o3bo17bo3b2o2bo4bo3bo4bo
2b2o3bo32bob2o8b2obo17b2o3b2o3b2o3b2o20bo2b2o3b3o2b3o9b3o2b3o11bo7bo4b
2o81bo11b2o11b2o11bo167bob2o112bo2bo56bo2bo$191bobo3b4o9bo2b2o3b3o8bob
obo2bob2obo10bob5obo8bo4b5ob2o61bo2bo28bo2b2o4b2o2bo19b2o4bo3bobo3bobo
3bo4b2o66bo4b2o3b2o4bo20bobob2o2b3o2bobo9bobo2bobo10bobo5bobo3b2ob2o
75bobobo5b4o2b2o9b2o2b4o5bobobo168bo110bob2obo5b2o47bob2obo5b2o$176b4o
13bobo2bo17b2o11b2o3b2o3bo2bo10bo5bo10b3obobo73bo2b2o17bo39b3o3b2o5b2o
3b3o71bo3b2o3b2o3bo22bob2o3b3o2b3o9b3o2b3o11bo7bo5b2o2bo72b3ob2o5bo3b
5o9b5o3bo5b2ob3o162bo2bobo110bo2bo4bo4bo46bo2bo4bo4bo$176bo2bo12b2ob2o
16b3o2bo17b3o2b2o11b5o13bo2bo58b2o2b2o10b2o2bo16bobo38b2ob2o11b2ob2o
72bo11bo27b2o2bo28b2o21b2o71bo3bo6bob2o2bo2b2o7b2o2bo2b2obo6bo3bo163bo
2bo118bo4bo54bo4bo$213bo3b2o17bo19bo16b2o59bo2bo2bo8b5o62bo11bo74bob5o
3b5obo19b5obob2o29bobo89bo2bob2o2b4o2bobob3o3bo7bo3b3obobo2b4o2b2obo2b
o160b2o119bo4bo54bo4bo$335bobobo2bobo75bo3bo77bobo4bo3bo4bobo18bo2bo2b
obo32bo83b2obo2b4o3b2o4bobobo2b2o15b2o2bobobo4b2o3b4o2bob2o276bo2bo56b
o2bo$25b2o17bo16bo14bo10b2o24b2o5b2o214bo7bo26b3o7bo36bobo3bobo75bobo
2bo7bo2bobo23bo2bo10b2ob2o8b2o7b2o82bob4o5bo3bo2b2obo4bo3bo9bo3bo4bob
2o2bo3bo5b4obo274bobo2bobo52bobo2bobo$24bo2bo14b5o13bobo12bob2o9bo24bo
7bo215b2o5bo4b5o17b3o6bobo34bo9bo75bo3b2o5b2o3bo25b2o12bobo10bo97bo2b
2o2b4obob2o5b2o13b2o5b2obob4o2b2o2bo280b2o4b2o52b2o4b2o$23bo2bo14bo5bo
12bobo9bo2bo12bob2o19bobo7bob2o213bo3bo7b2o2bo17bo6bobo36bobo3bobo130b
obobobo5b3o93b2o2bo2bobobo4b2o8bo15bo8b2o4bobobo2bo2b2o$22bob2ob3o11bo
b4obo10b2ob2o7bobobobo2bo8bo5b2o11bob3o9bo5b2o206bo4bo8bo2b2o23bobo39b
o3bo132b2o3b2o5bo95bo3bob2obob4o2bo2bo5bo3b3o3b3o3bo5bo2bo2b4obob2obo
3bo$19bo2bo4bo2bobo6b3o6b3o6bo7bo6bo2bo2bobo12bo2bo11b3o15bo2bo206b2o
41bo36bo11bo238bo9b3o2b3obobo2bo6bobo6bo2bobob3o2b3o9bo$18bobobo3b2obo
b2o5bo4bo2bo4bo5b4ob4o9bo5bo9bo2b2o11bobo17b2o214bo2bo25bo39b2ob2o11b
2ob2o233b2o3bo4bo3bobo3bo2b2o7bobo7b2o2bo3bobo3bo4bo3b2o$19bo2bo4bobo
9b3o6b3o25b5o12bo13bobo14b2o54b2o17b2o11b2o19bo14b2o21bo69b3o2b3o22b3o
38b3o3b2o5b2o3b3o233bo2bo6b3o2bo12bo3bobo3bo12bo2b3o6bo2bo$22bob4obo
11bob4obo8b9o28b2o10b3o13bo3b3o47b2o2bo14b2o2bo13bo18bobo14bo20bobo69b
2o2b2o23b3o34b2o4bo3bobo3bobo3bo4b2o225b2o3b2o7bobo3bobo10b3o3b3o10bob
o3bobo7b2o3b2o$23bo4bo13bo5bo8bo7bo12bo16bo8b3obo13b4o2bo47bobobo14bob
obo12bo19bobo13bo21bob3o68bo2bo60bo3b2o2bo4bo3bo4bo2b2o3bo224bo2bobo6b
obob2o8bo21bo8b2obobo6bobo2bo$24b3o16b5o12b4o13bobo14bo8bobo19bo51b2ob
ob2o12b2obob2o8bob3o15b2ob2o11bob3o17b2o4bo65bobo2bobo58bo2bo2b7o5b7o
2bo2bo226b2o2bo5b2o2bo9bo21bo9bo2b2o5bo2b2o$26b2o17bo14bo2b2o13bo15b2o
7bo20bo53bobob2o13bobob2o8bobo2bo13bo2bo2bo10bobo2bo11b2o2bo3b2obo65b
2o4b2o22bobo34bo3bo19bo3bo230b2o9bobo6b3o19b3o6bobo9b2o$102b2o20b2o54b
o18bo8b2obo3bobo12b2o2b2o2bo5b2obo3bobo10bo3b4obob2ob2o92bo32b3o5bo2b
2o9b2o2bo5b3o70b2o167b2o37b2o$171b2o5bobo9b2o5bobo9bobo3bobo10b2o3bobo
b2o6bobo3bobo11b3o3bobo2bobobo124bo6b2o2b2o9b2o2b2o6bo70bo$171bobo4b2o
10bobo4b2o10bob3obob2o8bo2b4obobo7bob3obob2o8bobo2bobo2bobo4bo221b2o3b
2obo$172b3ob2o13b3ob2o13bo2b3o2bo7bobobo3b2obo8bo2b3o2bo6b3obobobobobo
bob3o222bo4bobo176b5o17b5o85bob2o8bob2o20bo25bo$177bo18bo14b2o3bo9bobo
3b2o2bo10b2o3bo7bo4bobo2bobo2bobo225b3obo177bob3obo5b2ob2o5bob3obo84b
2obo8b2obo19bobo23bobo$170b7o12b7o17b3o9b2obob2o17b3o8bobobo2bobo3b3o
229bob2o176bobobobo6bobo6bobobobo82b2o10b2o24bo25bo$170bo18bo19b3o12bo
7b7o6b3o13b2ob2obob4o3bo407b2obobob2o3bobobobo3b2obobob2o82bo11bo29bo
15bo$173b2o17b2o15bo2b2o11b3ob3o6bo6bo2b2o15bob2o3bo2b2o221b2ob2o17b2o
161bo2b2ob2o2bo2b2o3b2o2bo2b2ob2o2bo80bo11bo23b5o2b3o11b3o2b5o$173b2o
17b2o18bobo12bobo2b4o12bobo14bo4b2o226bo17b3o2bo161b2o7b2o11b2o7b2o80b
2o10b2o21bo4bo5bo9bo5bo4bo84b2o12b2obo6b2o4b2o36b2o$29b2o5b2o19b2o6b2o
14bo15b2o17b2o95bo18bo2bo13bo16b3obo65b2o3bo56bo9bo90b2o2bo5bo9b2o277b
ob2o8bob2o16bo2bo7b2o9b2o7bo2bo84bo12bob2o7bo5bo36b2o$29bo6bobo17bobo
6bobo12bobo15bo5b2o10bobo149bobo65bobobobo55b3o5b3o91b3o5bobo4bo282b2o
bo8b2obo13bo2bob2o27b2obo2bo80bo17b2o4bo5bo$26b2obo7b3o16bo4b2o4bo12b
2o15bo3bo2bo12b3o149bo68bobobo42b2o14bo3bo14b2o78b3o5bo2b2o2bo286b2o
10b2o10bobobo5bo21bo5bobobo79b2o16bo5b2o4b2o28b2o$24bo3bo10bo13b2obobo
6bobob2o7b2o16bob4o3bo13bo217b2obob2o35b2o5bo13b2o3b2o13bo5b2o71b2o2bo
6b3o6b2o282bo11bo11bo2bo4bobo19bobo4bo2bo99bo6bob2o31bo11bo$23bo15b3o
11b2obobo6bobob2o6bo3b3o9bo2bo5b3obo12b3o214bo3b2o2bo35bo3bo37bo3bo71b
o17b3o2bo280bo11bo15b2o2bo2bo19bo2bo2b2o83b2o16b2o6b2obo31bobo9bobo$
23bo17bo14bobob4obobo8bo2b2o3bobo5bobobo2b2o5bo2bo11bo213bo2b2o3b3o34b
ob4o6b2o9bo9b2o6b4obo71b2ob2o17b2o280b2o10b2o19b2o21b2o89bo12b2obo12b
2o30b2o8bobo$25bo15b3o12bobob4obobo9b2o4bob2o6bo2bo5b2o2bobobo10b3o
211bobob2o2b3o32b2obo5bo4b2o9bo9b2o4bo5bob2o369bob2o8bob2o31bo3bo98bo
13bob2o13bo42bo$25bo17bo9b2obobo6bobob2o8bobobo12bob3o5bo2bo13bo212bob
2o3b3o33bo3bo4b2o5bo6bo8bo5b2o4bo3bo370b2obo8b2obo30bobobobo97b2o10b2o
16bo51b2o$20bo3bo18b3o7b2obobo6bobob2o8bo3bo13bo3b4obo16b3o214b2o2bo3b
5o26bob3obob2ob6o7b2o6b6ob2obob3obo77bo169b2o8b2o52bo103b2obobob2o8b2o
98bo17b2o50bobo$19bob2o22b2o9bo4b2o4bo12b3o15bo2bo3bo19b2o207b5obob2o
5b3o24b2obobo15b2o3bo2bo2b2o15bobob2o73bo4bobo162bobo8bobo50bobo94b2o
6bo2bobo2bo6bo2bo86b2o11bo70bo$19bo25bobo8bobo6bobo14bobo12b2o5bo20bob
o52b2o20bob2o4b2obo13b2o16b2o10b2o16b2o57bo2bo2bobo7bo25bo2bob3obob2ob
6o7b2o6b6ob2obob3obo2bo73bo3bobo163b2o10b2o49bobobo88b2o2bo2bo6b2o3b2o
7b3o88bo10b2o63b2o4b2ob2obo$18b2o26b2o9b2o6b2o16b2o19b2o20b2o45b2o5b2o
20b2o2bo2bo2b2o14bo16bo12bo16bo63bo2bo2bo2bo28bobo3bo4b2o5bo15bo5b2o4b
o3bobo71b2obob3o169b3o56bobobo85bo2bo4bobo25b2o83bo13b2obo12b2o16b2o
27bobo5b2ob2o$173bobo24b2o3bo4bo3b2o12bobo12bobo12bobo12bobo64b2o36b2o
bo5bo4b2o19b2o4bo5bob2o72bobobo3bo3bo163bo3bo50b2obobo3bobob2o79bobobo
5bo21b2obo2bo83b2o12bob2o12b2o15bobo29bo4bo$176bo3b4o2b2o11bo3b2ob4ob
2o3bo12b2o12b2o14b2o12b2o69bo4bo30bob4o6b2o19b2o6b4obo78bob2o2b2obo
162bo3bo50bob2obobobob2obo80bo2bob2o10b2o3b2o8bob2o132bo29bo3bo2bo$
174b2obobo4bo2bo12b3obobo2bobob3o17b2o4b2o22b2o4b2o69b5ob2ob3o28bo3bo
37bo3bo77bobo7bo162bo3bo55bo3bo88bo2bo10b2o3b2o8bo130bob2ob2o4b2o24bob
ob2o$173bobobobob4obo15bobob4obobo19b3o2b3o22b3o2b3o68bo5bo2bo3bo26b2o
5bo13b5o15bo5b2o76bobo7b2o162b3o52b3ob2ob2ob3o85bo4bo3b2o11b2o3b2o130b
2obo2bo3bobo6bo5b2o10bo4bo$173bobobob2o4bo18bo2b2o2bo21b2o4b2o22b2o4b
2o69b6o2b4o33b2o12bo4b2o14b2o83bo227bo4bobo4bo86b5o4bo11bo141bo4b2o6b
3o3bobo6bo2bo4b3o$170b2obobob2o2b4o20b2o2b2o18b2o12b2o14b2o12b2o122b3o
4bobo259b2o26b2o38b3o5b3o94bobobo10b3o140b2obo12bo2bo10bo4bo$170b2obo
2bo4bo46bobo12bobo12bobo12bobo66b2obo2bob2o44bo9b3o256bobo9b3o14bobo
137bo3bobob2o12bo137bo2bo3b2o6b2o2bobo11bobob2o$174b3o5b3o43bo16bo12bo
16bo66bo8bo44b2ob2obob2o3bo255b2o9bo3bo2b3o9b2o35b3o3bobo3b3o86bobo2bo
bo153bo2b3o2bo11bo10bo3bo2bo$22b2o6b2o14bo35b2o15b2o19b2o55bo4bo2bob2o
14b2o6b2o14b2o6bo2bo6b2o10b2o16b2o66b3o2b3o46bobo7bobo266bo3bobo3bo3b
3o38bo2bo3bobo3bo2bo86bo4b2o155b2o4bo24bo4bo$21bobo6bobo12bobo14b3o16b
o2bo13bo2bo17bo2bo51b4o2b2obobob2o14bobo4bobo22b4o30b4o72bo2bo48bo2bob
ob5o267bo3bobo3bo2bo3bo37b2o5bobo5b2o246bo2b3o2bo22bobo5b2ob2o$21bo4b
2o4bo13bo14b5o12bo2b2obo13bo2bo71bo4b2obobobo18b2o4b2o23b4o28b2ob3o68b
4ob2ob4o45b2o4bo272b3o2bo3bo2bo3bo41b3o3b3o250bo2bo3b2o6bob2o12b2o4b2o
b2obo$18b2obobo6bobob2o24bob3obo9b6o2b2o86bob4obobobobo21b2o18b2o6bo2b
o6b2o12b2o16b2o62bo2bo4bo2bo46bob2o2b4o260b3o11b3o3bo3bo32b2o23b2o244b
2obo9b2o20bo$18b2obobo6bobob2o8b5o9b3o5b3o6bo8bo16bo2b2o15b2o2b2o44bo
2bo4bobob2o17b5o2b5o14bo16bo14bo7b2o7bo121bo2bobo2bobo258bo3bo3b3o11b
3o32bo2bo21bo2bo241bo4b2o28bobo$21bobob4obobo10bo2bo2bo7bo3bo3bo3bo5bo
bo2bobobo10b2obob2o3bo10b2obob2o3bo44b2o2b4o3bo18bo12bo13bobo12bobo14b
obo3bo4bo3bobo67bo2bo51bo3b2o3bo258bo3bo2bo3bo2b3o39bobobo21bobobo235b
2obo2bo3bobo27b2o$21bobob4obobo9bob2ob2obo6bob3obob4o7b3o5b3o6bo2bob2o
5bob2o5bo2bob5o2bob2o53bobo16b3o6b3o15b2o12b2o16b2o2bo6bo2b2o124b3o2b
3o259bo3bo2bo3bobo3bo38bobob2o19b2obobo235bob2ob2o4b2o$18b2obobo6bobob
2o6bobo3bobo7bo3b3o13bobobo2bobo5b2obo5b2obo2bo5b2obo2b5obo2bo47b2o5b
2o19bo4bo22b2o4b2o23bo8bo129bo2bo262b3o3bo3bobo3bo36b2obo4bo17bo4bob2o
238bo$18b2obobo6bobob2o5b2obo3bob2o8bobobob2obo8bo8bo8bo3b2obob2o10bo
3b2obob2o49b2o23b3ob4ob3o19b3o2b3o23bo8bo391b2o9b3o2bo3bo9b2o25bo2bobo
b2o4b3o3b3o4b2obobo2bo238bobo$21bo4b2o4bo8bo2bobobo2bo7b2o2bo2bob2o7b
2o2b6o9b2o2bo16b2o2b2o78bo2bo6bo2bo18b2o4b2o23bo8bo391bobo14b3o9bobo
22b2obo2b2o3bo3bo3bobo3bo3bo3b2o2bob2o236b2o$21bobo6bobo10bo5bo10bobo
2bo12bob2o2bo116b2o10b2o14b2o12b2o16b2o2bo6bo2b2o389b2o26b2o23bo2b2obo
2b2o4bo3bobo3bo4b2o2bob2o2bo245bo$22b2o6b2o12b5o11bo2b2o13bo2bo18bo2bo
101bo4bo17bobo12bobo14bobo3bo4bo3bobo192b2obo8b2obo44b2o188b2o2bobobo
5bo3bobo3bo5bobobo2b2o246bobo8b2o$46bo12b2o18b2o19bo2bo17bo2bo82b2o19b
o16bo14bo7b2o7bo192bob2o8bob2o43bobo149b3o38b5obo6b3o3b3o6bob5o247bobo
9bobo$101b2o19b2o103b2o16b2o12b2o16b2o195b2o4b2o42b2o2bo151bo3bo37bo4b
o23bo4bo249bo11bo$474bo5bo43bo2bob2o149bo3bo38b4o25b4o262b2o$475bo5bo
44b2obobo148bo3bo$474b2o4b2o48bo150b3o39b4o25b4o42bob2o8b2obo32bo10bo
152b2o$470b2obo8b2obo188b2o10b2o34bo4bo23bo4bo41b2obo8bob2o30bo2bo8bo
2bo150b2o$470bob2o8bob2o38b2o148bobo8bobo34b5obo6b3o3b3o6bob5o39b2o10b
2o38bo6bo$468b2o10b2o4b2o35bobo149b2o8b2o33b2o2bobobo5bo3bobo3bo5bobob
o2b2o38bo10bo30b2o2bo4bo6bo4bo2b2o$468bo11bo5bo35b2o195bo2b2obo2b2o4bo
3bobo3bo4b2o2bob2o2bo36bo12bo29b2o2bo2b4o4b4o2bo2b2o$170b2o16b2o28b2o
38b2o209bo11bo5bo34b2o4bobo188b2obo2b2o3bo3bo3bobo3bo3bo3b2o2bob2o36b
2o10b2o33bo5bo4bo5bo$28bo16b2o22bo17b2o18b2o8b2o52bo16bo28bobo37bobo
44b2o12b2obo12b2o9b2o15b2o28b2o6b2o19b2o12b2o31b2o10b2o4b2o38b3obo191b
o2bobob2o4b3o3b3o4b2obobo2bo41bob2o8b2obo30b5o6b5o$27bobo14b4o20bobo
17bo18bo2bo6b2o52bobo12bobo28bo39bo47bo12bob2o12bobo7bobo11b2o2b2o2b2o
23bo2bo4bo2bo14b2o2b2o2b2o4b2o2b2o2b2o29b2obo8b2obo37bob2o195b2obo4bo
17bo4bob2o41b2obo8bob2o$28bo14bob2obo20bo15b3o20b3o10bo50b2o12b2o27b2o
b4o33b2ob4o42bo11b2o18bo7bo13b2o2bo2bobo23bobo2b2o2bobo14b2o2bo2bobo4b
obo2bo2b2o29bob2o8bob2o39bo7b2o189bobob2o19b2obobo47b2o4b2o4b2o28b5o6b
5o$41b3o4b3o34bo4bo2bo2bo2bo2bo2bo9b7o54b2o4b2o30bobobo2bo32bobobo2bo
42b2o10bo19b2o5b2o19b3o5bobo14b2ob2ob4ob2ob2o18b3o6b3o79bo7b2o9bobo
188bobobo21bobobo48bo4bo5bo28bo5bo4bo5bo$26b5o9bo3bo2bo3bo15b5o11bobob
26o2bo60b3o2b3o30bobo37bobo60bo21b3o22b2o5bo16bo2bo4b2o4bo2bo17b2o8b2o
77b3o6b2o12bo189bo2bo21bo2bo48bo6bo5bo23b2o2bo2b4o4b4o2bo2b2o$25bo5bo
9b4o2b4o15bo5bo9bobob2o25bobo2b6o52b2o4b2o28b2o2bo35b2o2bo47b2o10b2o
18b5ob3o27bo2bo12bob2o10b2obo105bo8bobo4bobo5b2o189b2o23b2o49b2o4b2o4b
2o23b2o2bo4bo6bo4bo2b2o$25b2o2b2obo12b2o22b3obo8bobo3b3o2b3o2b3o2b3o2b
3obo2b2ob3o3bob2o44b2o12b2o23bo39bo53bo12b2obo13bo9bo26bobobo12bo14bo
21b3o82b2o15b2o205b3o3b3o54bob2o8b2obo34bo6bo$23b2ob3obobo8b2ob4ob2o
13bo3b2obobo7b2ob2o2bo3b2o3b2o3b2o3b2o4bo2bo7bobo44bobo12bobo22b4o5bo
30b4o5bo43bo13bob2o13b2ob2ob2ob2o21b3o3bo2bo14bo10bo23b3o2bo96bo202b2o
5bobo5b2o50b2obo8bob2o13b2o15bo2bo8bo2bo15b2o$22bob2o5bo9bo3b2o3bo12bo
4bo3bo9bobo3b3o2b3o2b3o2b3o2b3ob2obo3b2o3bo2bo43bo16bo20b2o9bo28b2o9bo
43b2o10b2o4b2o15bobo26b2o4b2o14b3o4b2o2b3o22bo2b3o66b2o2bo228bo2bo3bob
o3bo2bo79bobo16bo10bo16bobo$19bo2bo2bo16b3o2b3o10bo2bo2b2o14bobob2o24b
obo3b6o2b2o42b2o6bo2bo6b2o18bo2b2o9bo25bo2b2o9bo53bo5bo16bobo24bo2bo
20b3o3bobo2b3o25b3o66bo2bobo4b2o222b3o3bobo3b3o82b3o40b3o$18bobobo2bo
18bo2bo11bobobob2o16bobob25o3b4o59b4o26b2obo3bo2bobobo2b2o21b2obo3bo2b
obobo2b2o37b2o11bo5bo16bo26b2o22bo4b2o4bo96bob2o11b2o312bo3bo38bo3bo$
19bo2bobo15b4o4b4o8bo2bobo19bo4bo2bo2bo2bo2bo2bo2bo2bobobo4bob2o54b4o
29bo14bo24bo14bo38bo10b2o4b2o65bo14bo18b2o8b2o65bo7b2o5b2o17bo199b3o5b
3o83b5o3bo6bo16bo6bo3b5o$22bob2o14bo2bob2obo2bo11bob2o18b3o24bobo2b4ob
o47b2o6bo2bo6b2o21b2o2bobobo2bo3bob2o21b2o2bobobo2bo3bob2o34bo13b2obo
66bob2o10b2obo17b3o6b3o66b2o6bo4bo20bo197bo4bobo4bo85b2o3b3o3bobo14bob
o3b3o3b2o$23bo2bo17b4o16bo2bo20bo25bob2o5bo47bo16bo26bo9b2o2bo25bo9b2o
2bo34b2o12bob2o66bo2bo4b2o4bo2bo11b2o2bo2bobo4bobo2bo2b2o61bo6b2o23b3o
3b2o191b3ob2ob2ob3o82b5o3bo4bo4b2o8b2o4bo4bo3b5o72b2o10b2obo10b2obo38b
2o$24b2o19b2o18b2o20b2o25bo5b3o48bobo12bobo28bo9b2o28bo9b2o120b2ob2ob
4ob2ob2o12b2o2b2o2b2o4b2o2b2o2b2o59bo4b2o3b2o24bobob3o194bo3bo86bo3bo
9bobob2o8b2obobo9bo3bo73bo10bob2o10bob2o37bo2bo$113b2o5bo51b2o12b2o29b
o5b4o30bo5b4o124bobo2b2o2bobo18b2o12b2o63b2o3bo37bo3b2o183bob2obobobob
2obo82b3o11b3o2bo6bo2b3o11b3o73bo15b2o12b2o38bo$176b2o4b2o42bo39bo124b
o2bo4bo2bo103b3obobo24b2o3b2o4bo183b2obobo3bobob2o79b3o16b3o8b3o16b3o
70b2o14bo13bo20bo18bo$176b3o2b3o37bo2b2o35bo2b2o126b2o6b2o105b2o3b3o
23b2o6bo190bobobo84bo2bo15b2o10b2o15bo2bo87bo13bo19bo12bo3bobo$176b2o
4b2o37bobo37bobo249bo20bo4bo6b2o189bobobo85b3o15b2o10b2o15b3o71b2o14b
2o12b2o19bo11bo3bobo$172b2o12b2o28bo2bobobo32bo2bobobo250bo17b2o5b2o7b
o189bobo104b3o8b3o90bo10b2obo10b2obo13b2o6b2o10bo4bo$171bobo12bobo27b
4ob2o33b4ob2o270b2o11b2obo189bo89b3o11b3o2bo6bo2b3o11b3o73bo11bob2o10b
ob2o12bobo9bo9b4o$171bo16bo31bo39bo278b2o4bobo2bo277bo3bo9bobob2o8b2ob
obo9bo3bo72b2o14b2o6b2o16bobob2o2bo4bo$170b2o16b2o28bobo37bobo285bo2b
2o277b5o3bo4bo4b2o8b2o4bo4bo3b5o88bo7bo18bobobo7bo$218b2o38b2o260bo
310b2o3b3o3bobo14bobo3b3o3b2o75b2o15bo7bo19bo5b3o8bo$23bo18b2o3b2o22b
2o23b2o421b2o15b2o290b5o3bo6bo16bo6bo3b5o73bo14b2o6b2o18b2o15b3o9bo$
22bobo17bobobobo20bo2bo22bo2bo20b3o216bo7bo55b2o108b2o5bobo4bobo8bo
290bo3bo38bo3bo72bo11b2obo10b2obo13b3o14b2o2bo8bo$22bobo18bo3bo21b3o
23b3o239bobo4b3o54bo2bo108bo12b2o6b3o292b3o40b3o73b2o10bob2o10bob2o13b
3o16b3o8bo$18b2ob2ob2ob2o13b2o3b2o66bo2bobobo2bo212bo4bo56bobobo108bob
o9b2o7bo292bobo16bo10bo16bobo114b3o3bo2bo19b2o$18bo4bo4bo13b2o3b2o18b
7o19b7o15b5ob5o212bo4b2o55bo2bo110b2o7bo303b2o15bo2bo8bo2bo15b2o114b3o
4b2ob2o15bo$19b3o3b3o9b2ob2obo3bob2ob2o12bo7bo17bo7bo234bo3bo59bo18b2o
102b2obo322bo6bo136b2o6bo16bo4bo$21bobobo11bob4o5b4obo11bo2b5o2bo15bob
3ob3obo12bob2o5b2obo212b2o59bobo14bobo98bob3o316b2o2bo4bo6bo4bo2b2o
128bo23bo9b2o$22b3o13bo13bo8b2o2bobobobobobo12bo2bobo5bobo11bob2o2bobo
2b2obo206bo6bo73b3o100bobo4b2o312b2o2bo2b4o4b4o2bo2b2o126bobobo23b3o5b
obo$23b3o35bobobob2o3b2obob2o8bobobobo5bobob2o8bo4bo3bo4bo206b2o2bob2o
2b2o68bo3bo106b2o316bo5bo4bo5bo129bobob2o28b2obobo$22bobobo11bo13bo10b
obobo5bobobo9bobobo9bobobo8b3ob2ob2ob3o274bo8b5o2b2o104bobo318b5o6b5o
130bobo5b3o23bobobo$20b3o3b3o8bob4o5b4obo8b2obob2o3b2obobobo8b2obobo5b
obobobo9bobo5bobo211bo2b6o53b2o8b3ob2o108b2o466b2o9bo15bo7bo$19bo4bo4b
o7b2ob2obo3bob2ob2o11bobobobobobo2b2o11bobo5bobo2bo8bo3b2o3b2o3bo211bo
b3o56b5o5b5o2b2o425b5o6b5o137bo4bo13bobo6b2o$19b2ob2ob2ob2o12b2o3b2o
16bo2b5o2bo15bob3ob3obo11b4o7b4o216b3obo52bo2bo9bo3bo99bo324bo5bo4bo5b
o140bo14bo2bo4b3o$23bobo16b2o3b2o17bo7bo17bo7bo15bobobobobo217b6o2bo
51bobo10b3o99bobob2o316b2o2bo2b4o4b4o2bo2b2o133b2o16bobo5b3o$23bobo17b
o3bo19b7o19b7o13b2obobobobobob2o12b2o12b2obo17b2ob2o16b2o5b2o13b2o8b2o
16bo23b2o116b2o13bo13bobo98b2obo2bo107b2o4b2o6b2obo189b2o2bo4bo6bo4bo
2b2o133bo19bo5b3o$24bo17bobobobo64b2ob3obob3ob2o13bo12bob2o16bobob2o
16bo2b3o2bo13bobo6bobo15bobo21bo2bo69b2o2b2obo2b2o34bobo13bo13b2o100bo
2b2o108bo5bo6bob2o198bo6bo142bo25b3o$42b2o3b2o20b3o23b3o21bobo18bo11b
2o4b2o12b3obo20b7o16bo6bo16bobobob2o16bo2bo74bo6bo36b3o10bobo111bobo
112bo5bo5b2o4b2o12b2o20b2o63b2o91bo2bo8bo2bo138bo26b2o$68bo2bo22bo2bo
22bo19b2o10bo5bo12bo4b4o14bo5bo5bo12b2obo2bob2o15bo3bobobo14bob2ob3o
72b2o40bo3bo9bo2bo110b2o113b2o4b2o4bo5bo13b2o20b2o62bo2bo92bo10bo160b
3o5bo$68b2o25b2o23bo32bo5bo10bo2b2obo2bo14b5o3b5o10bo2bob4obo2bo10b2ob
obobo3bo14bo2bobo2bobo70bo3bo36b2o2b5o5b5o226bob2o7bo5bo12b2o84bobobo
261bo7bobobo$140b2o10b2o4b2o11b2obo3bo3b2o14bo3bo14b2o2bo5b4o11bobobob
obob2o14b3obobob2o65b2o4bo43b2ob3o8b2o225b2obo6b2o4b2o12bo86bo2bo261bo
4bo2b2obobo$141bo10bo5bo13bo3bobobo2bo12b2o5b2o17b4obo14bobo4bobo2bo
10b3o4bobo69bo4bo39b2o2b5o8bo231b2o4bo5bo12bobo19bob2o38b2o2bo23bo248b
4o9bo9bobo$140bo12bo5bo12bobobobob2o14bo7bo12b6o3b5o12bobobobobobo11bo
2b2ob2obo66b3o4bobo38bo3bo245bo5bo5bo11bob2o18bobo35b2o2b2o3bo19bobo
248bo4bo10b2o6b2o$140b2o10b2o4b2o13b2ob2o19bo5bo13bo5b2o5bo14bobo2bobo
15bobo2bo67bo7bo40b3o245bo5b2o4b2o34bo36b2o7bo269bobo3bo11bo$152bo5bo
37b2o5b2o14b4o2b4o16bo2bobo18b4o115bobo14bobo230b2o4bo5bo35b2o40b4o
269bobo3bo12bo$140b2o11bo5bo58b2o2bo2bo2b2o16b2o2bo137b2o18bo236bo5bo
12b2o13bo6b2o63bo5b2o242bo18bo$141bo10b2o4b2o90b2o19b2o131bo2bo236b2o
4b2o12b2o3b2o8b2o5b2o22b2o24bo12b2ob2o247bo$140bo13b2obo113b2o130bobob
o101b2o3b3ob3o3b2o112b2o6b2obo28bob2o52b2ob2o12bo3bo3bo241bo2bo$140b2o
12bob2o245bo2bo102bo15bo112b2o6bob2o28bobo27bo3bo23bo18bo4bo241b2o$25b
4o375b2o100b2obo15bob2o149b2o28bo4bo43bobobo$23b8o473bo2bob2o13b2obo2b
o179bobobo43bobobo$26b2o476b2obo19bob2o139bo10bo29bobobo43bo4bo$19bo2b
obo4bobo475bo19bo141bobo8bobo29bo4bo18bo23bo3bo$19b4ob2o2b2ob3o473b2o
5bo5bo5b2o142bo10bo31bo3bo3bo12b2ob2o$25bo2bo5bo479bo5bo13bo139b4o41b
2ob2o12bo24b2o35bob2o8b2obo14b2obo13bob2o$21b3obo2bob3obo468bo9bobo3bo
bo10b3o138b6o35b2o5bo76b2obo8bob2o14bob2o13b2obo$21bo10bob2o466bobo9bo
5bo10bo141bo4bo62b4o51b2o10b2o4b2o$22b2o2bo3b2o4bo136bo23bo3b2o22bo20b
o20b2o229b2o3bo10bo5bo10b2o141bo2bo62bo7b2o47bo10bo5bo14b3o13b3o$19b3o
4b2obobob3o137b3o20bobo2bobo17bob5o17bobo18bobo229b2o172bobo2bobo38bob
o19bo3b2o2b2o46bo12bo5bo12bo2bo13bo2bo$19bo2b3o2b2obo2bo137b2o3bo19bob
o4bo17b2o5bo17bo19bo247b2o3b2o151b2o4b2o37bo23bo2b2o50b2o10b2o4b2o12b
2o17b2o$20bobo2bo2bobobo137bo3b2obo15b2obob2o3bob2o17b3o2bo33b2obo241b
o5b2o3b2o5bo191bo2bo76bob2o8b2obo$21bo3bo2bobob2o137b3obobo16bobo4bobo
bo15b3o3b2o11b2o2b5o2b2o10b2obob2o230bo5b2ob2ob2o7b2ob2ob2o5b2o182bobo
bo75b2obo8bob2o14b4o13b4o$28bobo147b2o12bo2bob5obobo14bo4bobo12bo2bo5b
o2bo13bo233bo7bo3b2o7b2o3bo7b2o183bo2bo79b2o4b2o4b2o12bo2bo13bo2bo$25b
2obobo140b4o5bo11b2obobobo2bo2b2o12bob5obo13bobob3obobo11b2obobo231bo
219b2o81bo4bo5bo14bo17bo$25bo3bo141bo2bo3b2obo13bobo2b2o3bo13bobobo2bo
13b2obo5bob2o10bobo2bo3bo31b2o11bob2o18bo47bo27bo11bo374bo6bo5bo10b3o
19b3o$24b2o146b2ob2o2bobo13bobo3bobobo10b2obobo2b2o13bo3b3ob3o3bo12b2o
b2obo2b2o28bo11b2obo17bobo37bo7bobo26b3o7b3o72bo37b2o262b2o4b2o4b2o10b
o23bo$23bobo148bobobo2b2o13b2obobob2o11b2obobo3bobo11b4o7b4o14bo7bo27b
o16b2o15bobo3b2o31bobo6bobo29bo5bo75bo7bo3b2o7b2o3bo11b2o5b2o251bob2o
8b2obo134b2o10b2obo10b2obo$22bob2o148bobobobo17bobo19b2obo2bobo14b2obo
b2o18bob6o28b2o16bo12b2obob2o3bo31bobo4b3o2b2o26b2o5b2o74bo5b2ob2ob2o
7b2ob2ob2o16bo252b2obo8bob2o20b3o3b3o106bo10bob2o10bob2o$19bo2b2obobo
3b2o142b2obobo17bo23bob2o2bo12bo2bobobo2bo17bo51bo14bobo4bobob2o25b2ob
ob2o2b2o2bobo28b2o88bo5b2o3b2o5bo16bobo289bo5bo106bo15b2o6b2o4b2o$19b
3o3bob3o2bo146bo17b2o23bo5b2o11b2o2bobo2b2o18bob2o30b2o15b2o11bo2bob5o
bo2bo26bobo4bobob2o2bo28b2o93b2o3b2o22b2o281bo23bo97b2o14bo7bo5bo$22b
3o4b3o189b2o23bo22b2ob2o31bo13b2o13b2obobo4bobo26bo2bob5obo3bobo27bo2b
o3bo72b2o49b2o275b3o19b3o114bo7bo5bo$21bo2b4o276bo15bo16bobo3bo2b2o25b
2obobo4bo2b2obo28bobo3bobo71b2o3bo10bo5bo28bo279bo2b2o9b2o2bo100b2o14b
2o6b2o4b2o$21b3o4b2o274b2o13bo17bobobobobo30bobo3bo4bo31bo3bo2bo75bobo
9bo5bo12bo5bo11bo276bobob4o5b4obobo100bo10b2obo10b2obo30bo$19b2o3b2obo
2bo288b2o17b2obobobo30bobobobobo2bo36b2o77bo9bobo3bobo11bo5bo7b5o134bo
141b2o5b2o3b2o5b2o99bo11bob2o10bob2o28b2o$20bobo4bobo274b2o11b2o21bobo
bo32b2obobob3o38b2o87bo5bo11bobo3bobo6bo286bo7bo105b2o14b2o6b2o4b2o$
18bo2bob2o2bob2o274bo12bo21bobo36bobo37b2o5b2o86bo5bo12bo5bo10b4o115bo
14b3obo139b2o17b2o115bo7bo5bo26bo$18b2obobob3o2bo273bo12bo23b2o36bo2b
3o35bo5bo106bo5bo10bo2bo129bob2o141bo2bo13bo2bo99b2o15bo7bo5bo26bo3bo$
21bo3bo2b2o274b2o11b2o59b2o4bo32b3o7b3o237bob3o11b2obo142b3o13b3o101bo
14b2o6b2o4b2o27b2obo$21b4ob2o389bo11bo79b2o22b2o3b2o129b2obo8bob3o262b
o11b2obo10b2obo22b2o7bo$24bo2bo480bobo16bo5b2o3b2o5bo8bo114bob2o155bob
2o13b2obo99b2o10bob2o10bob2o24bo$21b6o148b2o57b2o3b2o267bo16b2ob2ob2o
7b2ob2ob2o5bobo114b3obo8bo10b2o132b2obo13bob2o147bo4bo$21bo153bobo4bo
51b2o3b2o266b2o5b2o11bo3b2o7b2o3bo7bobo139bo301bo3bo11bo$22b3o153bo2bo
bo330b2o38bo117bo17b3o2b2o300bo2bo11bo2bo$24bo151b2obo2bobo503b3obo3bo
302bo11bo3bo$175bobob2obo2bo48bo5bo313bo133bo4bob2o314bo4bo$170b2o2bo
7b3o44b2o3bo5bo3b2o272b2o7bo3b2o7b2o3bo7bobo122bo13bobo315bo$170bo2bo
4b3o48b2o2bobo3bobo2b2o272b2o5b2ob2ob2o7b2ob2ob2o5bobo107b6ob2o5b3o10b
2obo4bo304bo7b2o$171bob2o3bo2b2o51bo5bo286bo5b2o3b2o5bo8bo108b6ob2o4b
5o9bo3bob3o303bob2o$172bo3b2ob2o2bo50bo5bo292b2o3b2o130b2o3b2o3b2o8b2o
2b3o305bo3bo$173b2obobo3b2o479b2o5b2o4b5o10bo315bo$174bobobo342b2o10bo
5bo10bo2bo109b2o5b2o5b3o11b2o$172bo4bo56bo5bo281bo10bo5bo10b4o109b2o5b
2o6bo326b2o$171bob3obobo54bo5bo63b2o12b2obo23b2ob2o50bob2o4b2obo107b3o
10bobo3bobo6bo115b2o339bo$172bo2bo2b2o49b2o2bobo3bobo2b2o59bo12bob2o
23bo3bo50b2o2bo2bo2b2o107bo13bo5bo7b5o111b2ob6o$173bobo53b2o3bo5bo3b2o
58bo11b2o4b2o22b3o49b2o3bo4bo3b2o112b2o5bo5bo5b2o4bo111b2ob6o$174bo59b
o5bo63b2o10bo5bo74bo3b2ob4ob2o3bo111bo19bo2b2o126bo$317bo5bo20b7o47b3o
bobo2bobob3o109b2obo19bobo127b3o8b2o109b2obo8b2obo22b2o3b2o$2b2obo14b
2o16b2ob2o11b2o14bo5b2o17b2o14bo192b2o10b2o4b2o20bo2bo2bo49bobo6bobo
111bo2bob2o13b2obobo126bob3o3b2obo2bob2o105bob2o8bob2o21bo7bo$2bob2o
13bobo15bobob2o10bo2bo12bobo4bo2b2o11bo2bobo13b3ob2o2b2o113b2o3b2o64bo
12b2obo16b2o15b2o47b4o117b2obo15bob2o126bo3bo4b2o2bo4bo103b2o10b2o4b2o
22bobo$2o16b3o48bobo5bobo11bobobobo16b2obo2bo113b2o3b2o63bo13bob2o12b
2obob4o3b3o3b4obob2o40b2o6b2o117bo15bo128bo3bo10bo107bo11bo5bo21b2o3b
2o$o17b2o17b3ob2o8b3o2b3o9b2ob2o3b2obo12bo2bob3o8bo2b2o4bobo184b2o10b
2o4b2o10b2obo2b2obobo3bobob2o2bob2o167b2o3b2o3b2o3b2o127b3obo12bobo
105bo11bo5bo$bo17bobo15bo4bo7bobo4bobo9bo2bo3bo2bob2o13bo3bo7b4ob4obob
3o193bo5bo14bo4bo2bo3bo2bo4bo47b2o125bo2bobo2bo132b3o120b2o10b2o4b2o$
2o18bobo2b2o13bo9bobo4bobo7bo2b3o4b3o2bo7b4o3b4o15bobo4bo180b2o11bo5bo
13b2o6bo3bo6b2o43b2o6b2o122b2o3b2o134bo123b2obo6bo5bo$2b2obo15bo2bobo
8b2o3bo10b3o2b3o8b2obo2bo3bo2bo9bo3bo15b5o3bob2obo181bo10b2o4b2o22b3o
52bo2bo2bo2bo387bob2o7bo5bo10b3o$2bob2o16b4o8bo3bo31bob2o3b2ob2o9b3obo
2bo11bo5bo4bobob2o177bo13b2obo19b2o9b2o48b8o386b2o4b2o4b2o4b2o11b3o$2o
4b2o15b2o9b2o17bo2bo13bobo5bobo12bobobobo11b4ob6obobo178b2o12bob2o19b
2o9b2o442bo5bo5bo5bo21bo$o5bo47b2o13b2o2bo4bobo12bobo2bo16bo6bo2bo215b
2o9b2o46b5o2b5o385bo5bo5bo5bo20bo10b3o$bo5bo64b2o5bo14b2o17bobo2b2o2bo
bo217bo9bo46bo12bo383b2o4b2o4b2o4b2o19bobo8b3o$2o4b2o105b2o3b2o3bo217b
obo7bobo46b4o4b4o386b2obo8b2obo13b3o3bo$2b2obo197bo132b3obobo9bobob3o
44b6o389bob2o8bob2o12b3o4bobo$2bob2o196bobo131b4obo11bob4o41b3o6b3o
421bo$201bobobo134bo13bo44bo2bo6bo2bobo420bobo8b3o$201bobobo193b2o10b
2ob3o419bo10b3o$200b2obob2o210bo418bo$198bo4bo4bo202b2ob3o$198b2obobob
ob2o202b2obo$60bo142bo629b2o3b2o108b2o10b2o4b2o4b2o4b2o11b2o24b2o35bo$
23b2o15b2o17b4o16b2o3b2o15b2ob2o17b2o71b6obob6o259b2obo7bob2o17b2o331b
obo111bo11bo5bo5bo5bo11b2o24b2o35bo5bo$23bo15bo3b2o14b2ob2o14bobo3bobo
14b2ob2o15bo2bo70bo7bo7bo195b2o61bob2o7b2obo18bo14b2o312bo7bo107bo11bo
5bo5bo5bo75bo5b3o$24bo13b2obob3o15bo2bo14bo5bo35b2o71bobo2bobobobobo2b
obo193bo2bo64b2o9b2o16bobo12bobob2o309b2o3b2o108b2o10b2o4b2o4b2o4b2o
17b2o47b2o6b2o7bo$21b3obo12b2obo4bo9b2o6b2o33b9o15b4o67bobo3bobobobo3b
obo192bo2bo65bo11bo17b2o3b2o9bobo439bob2o8bob2o18bo2bo45bobo9bo4b2o$
18bobo2bobo17b2obo8b3o5bobo13b2o3b2o12bo9bo12b2o2bobo65b2o2bob2obobob
2obo2b2o192bobo66bo9bo22bo2bo7b2obo109b2o4b2o6b2obo44b2o3b2o247b2o12b
2obo8b2obo18bo3bo8b2o34bobob2o2bo4bo$18b2ob3obob2o8bob2o15bobo5b3o11b
2obobob2o12b3obob3o12bo2b2o2bo66bo6bobobo6bo198b2obo59b2o9b2o21bo13bob
2o107bo5bo6bob2o43b3o3b3o247bo16b2o10b2o17b3o8b2obo34bobobo7bo$21bo2b
2o2bo8bo4bob2o10b2o6b2o11bobobobobobo13b5o10b2obobo3bobob2o63bob4obobo
bob4obo198b2ob3o53b2obo9b2o14b2o4bo2bob2o7b4o2bo106bo5bo11b2o18b2o6bo
15b2o3b2o15bo6b2o223bo18bo11bo21b2o8b2o35bo5b3o8bo$21bo4bo11b3obob2o
11bo2bo14b3obobobobob3o26b2obobo3bobob2o64b2ob2obobobob2ob2o205bo52bob
2o10bo14bobo3bob3o9bo3b2o107b2o4b2o10bo19bo6bobo3bobo23bobo3bobo6bo
223b2o16bo11bo22bo9bo35b2o15b3o9bo$22b4o13b2o3bo13b2ob2o11bo4b2o3b2o4b
o28bo2b2o2bo70b3obobobob3o189b2o10b2ob3o51b2o13bo17bo4bo13b3o111bob2o
13bo10b2o3b2obo7bo3bo29bo3bo7bob2o3b2o233b2o10b2o66b3o14b2o2bo8bo$42b
2o15b4o12b4o7b4o10b2o3b2o12bobo2b2o75bobobo193bo2bo6bo2bobo53bo14b2o
16b3o13bo4bo111b2obo12b2o10bo4bobo14bo2bo19bo2bo14bobo4bo215b2o48bo9bo
37b3o16b3o8bo$24b2o35bo16bo7bo14bo3bo14b4o76b2obob2o193b3o6b3o57bo11b
2o16b2o3bo9b3obo3bobo113b2o6b2obo13b3obo13bo4b3o17b3o4bo13bob3o217bo
47b2o8b2o37b3o3bo2bo19b2o$24b2o51bo9bo10b3o5b3o15b2o69b2o4bobobo4b2o
191b6o59b2o12bo15bo2b4o7b2obo2bo4b2o114bo6bob2o15bob2o5bo5bob3ob2o19b
2ob3obo5bo5b2obo218bo17b2o10b2o18bob2o8b3o33b3o4b2ob2o15bo$77b2o7b2o
10bo9bo13bo2bo68bob4o3bo3b4obo187b4o4b4o58b2obo7bo16b2obo13bo122bo5b2o
27bobob3obo31bob3obobo226b2o16b2o10b2o19b2o8bo3bo33b2o6bo16bo4bo$122b
2o70bobo5bobo5bobo186bo12bo57bob2o7b2o18bob2o7bo2bo122b2o4bo28bo6bo33b
o6bo288bo2bo34bo23bo9b2o$192b2o2bo2bo2bobo2bo2bo2b2o185b5o2b5o89bobo9b
2o3b2o125bo29bo6bo29bo6bo291b2o33bobobo23b3o5bobo$193bobo2bo2b2ob2o2bo
2bobo286b2obobo12bobo123b2o28bob3obobo29bobob3obo324bobob2o28b2obobo$
181b2o10bob5o2b3o2b5obo10b2o176b8o94b2o14bo117b2o6b2obo18b2ob3obo5bo5b
2obo13bob2o5bo5bob3ob2o264b2o24b2o26bobo5b3o23bobobo$181bo12bo4bo2bobo
2bo4bo12bo175bo2bo2bo2bo109b2o116b2o6bob2o17b3o4bo13bob3o9b3obo13bo4b
3o263b2o24b2o27b2o9bo23bo$170b2o11bo12bob4obob4obo12bo11b2o164b2o6b2o
257bo2bo14bobo4bo7bo4bobo14bo2bo71b2obo6b2o4b2o15b2o37b2o180bo4bo16bo
6b2o$170bobo9b2o2bo2bo5b2obo9bob2o5bo2bo2b2o9bobo168b2o266bo3bo7bob2o
3b2o7b2o3b2obo7bo3bo76bob2o7bo5bo15b2o37b2o184bo15b2ob2o4b3o$172bo2b2o
2bo4b6o4bo3b3o5b3o3bo4b6o4bo2b2o2bo435bobo3bobo6bo23bo6bobo3bobo71b2o
10bo5bo238b2o19bo2bo3b3o$172b2o3b7o11b3o3b5o3b3o11b7o3b2o166b2o6b2o
266bo6b2o23b2o6bo78bo11b2o4b2o237bo27b3o$25b2o16b2o3b2o12b2o6bo19bo6bo
18bo6b2o52b3o4b8o5bobo7bobo5b8o4b3o174b4o389bo12bob2o239bo27b3o$25b2o
15bo7bo12bo4b3o18bobo4bobo16bobo5bo48b2obo2bo2b3o7bo6b2o7b2o6bo7b3o2bo
2bob2o165bobo6bobo384b2o12b2obo31b2o9b2o195bo27b2o$45bobo14bo4bo21b2o
6b2o16bobo3bobo47bob5o3b2o2b2o2bo10bo5bo10bo2b2o2b2o3b5obo162b3obobo2b
obob3o384b2obo12b2o29b2o9b2o215b3o5bo$23b6o14b2o3b2o12b2o3b2o18b2o2bob
2obo2b2o11b2obob2o2b2o4bo42bo7bo5bo4b2o25b2o4bo5bo7bo160bo3b2ob4ob2o3b
o383bob2o13bo255bo7bobobo$22bo5bo57bobo2b6o2bobo10bob2o3bo5b3o43b7o6b
2o4bo9bo5bo9bo4b2o6b7o162b2o3bo4bo3b2o382b2o4b2o10bo19b3o29b3o202bo4bo
2b2obobo$22bob2o36b5o7b2o11bob2ob4ob2obo15bob2o4bo48bo2bo6bobo3bo27bo
3bobo6bo2bo166b2o2bo2bo2b2o384bo5bo11b2o18b3o4b3o15b3o4b3o197b2o4bo9bo
bo$20b2obobo19b3o14bo4bo6bo15b2o4b2o18bo2bo4b2o52bo2bobo2bob2o2b2o6bo
5bo6b2o2b2obo2bobo2bo171bob2o4b2obo58b2obo8b2obo19b2o290bo5bo27bo3bobo
3bo19bo3bobo3bo194bo7b2o6b2o$21bo3bo19b3o15bo3bo4bobo14b3ob2ob3o18b3o
57b2o2bo4b2obo4bob2ob3o3b3ob2obo4bob2o4bo2b2o240bob2o8bob2o12b2o5b2o8b
2o279b2o4b2o25b3o4b3o25b3o4b3o193b3o5bo$21bob2o2b2o16b3o12b3o5b2o2b2o
15b3ob2ob3o21b4o58b4o2bobo3bo5bo5bo5bo3bobo2b4o249b2o4b2o4b2o11bo15b3o
280b2obo12b2o20b3o25b3o202bo5bo$18b2obo5bobo15b3o12bo9bo19b2o4b2o19b2o
bobobo61bo3bo3bo17bo3bo3bo253bo5bo5bo12bobo13b2obo279bob2o12b2o259bo$
18b2ob2o6bo40bo16bob2ob4ob2obo16b2obo3b3o55b4o2bobo3bo5bo5bo5bo3bobo2b
4o250bo5bo5bo12b2o15bobo306b2o47b2o$21bo7b2o39bo15bobo2b6o2bobo19b2o4b
o49b2o2bo4b2obo4bo17bo4bob2o4bo2b2o244b2o4b2o4b2o28bo2bo306b2o47b2o$
21bobo19b2o3b2o18bobobob2o11b2o2bob2obo2b2o22b4o51bo2bobo2bob2o2b2o6bo
5bo6b2o2b2obo2bobo2bo241b2obo8b2obo31b2o$22b2o21bobo19bob2ob2obo13b2o
6b2o24bo49bo2bo6bobo3bo8b2o7b2o8bo3bobo6bo2bo236bob2o8bob2o$42bo7bo16b
o21bobo4bobo25bo46b7o6b2o4bo6bobo7bobo6bo4b2o6b7o232b2o10b2o4b2o16b3o
3b3o$43b2o3b2o16b2o22bo6bo25b2o45bo7bo5bo4b2o4b3o3b5o3b3o4b2o4bo5bo7bo
231bo11bo5bo17b3o3b3o327b2o6bo5bo6b2o$171bob5o3b2o2b2o2bo4bo3b3o5b3o3b
o4bo2b2o2b2o3b5obo233bo11bo5bo12bo4bo5bo4bo323b2o5b3o3b3o5b2o$172b2obo
2bo2b3o7bo3b2obo9bob2o3bo7b3o2bo2bob2o233b2o10b2o4b2o11bobo13bobo328bo
bobobobobo$177b3o4b8o4bob4obob4obo4b8o4b3o240b2obo8b2obo14bo15bo160bo
6bo50b2o7b2o92b4o3b3ob2ob2ob3o3b4o$172b2o3b7o10bo4bo2bobo2bo4bo10b7o3b
2o235bob2o8bob2o181b2o4b2obobo4bobob2o4b2o39bo2bo5bo2bo91bo3bo2b2obobo
bobob2o2bo3bo$172bo2b2o2bo4b6o3bob5o2b3o2b5obo3b6o4bo2b2o2bo270b3ob3o
155bobo3bob2obo4bob2obo3bobo38bob2obo3bob2obo93bo2b2ob3o3b3ob2o2bo$
170bobo9b2o2bo2bo3bobo2bo2b2ob2o2bo2bobo3bo2bo2b2o9bobo69b2obo8b2obo
16b2o4bo4b2o26b2o9b2o32b2o77b2o11b2o148b2obob3obo4b2o2b2o4bob3obob2o
30bo5bo2bobobobo2bo5bo88b4o3bo5bo3b4o$170b2o11bo8b2o2bo2bo2bobo2bo2bo
2b2o8bo11b2o69bob2o8bob2o15bo2bobo3bobo2bo24bo2bo7bo2bo16b2o11b3obo76b
2o11b2o148bo2bo4bob4o6b4obo4bo2bo29bobo5bo3bobo3bo5bobo$181bo12bobo5bo
bo5bobo12bo84b2o4b2o4b2o13b3o9b3o24b3o9b3o16bobo9bo4bo237b2o2bob3obobo
2bob5o5bob3obo2b2o27bo2bob3o3b2ob2o3b3obo2bo87b2o17b2o$22bo10bo35b2o
110b2o11bob4o3bo3b4obo11b2o84bo5bo5bo12b2o3b2o5b2o30b9o21bo2b2o2bo3bo
3b2o2bo234bob2obobo5b2obo6bo2bo3bob2obo26b2obobobo15bobobob2o85bo2bo
13bo2bo$21bobo8bobo34bo6b2o117b2o4bobobo4b2o99bo5bo5bo10bobo2bo2b5o2bo
4b2o22bo2b5o2bo20b2o3b6obo5bobo233bobo2b2o3bo2b2o2bo5b3o7bobo25bobobob
2o17b2obobobo85b3o13b3o$21bobo8bobo31b2obo6bo2bo29b3o88b2obob2o103b2o
4b2o4b2o10bobobobo7b2o3bo2bo12b2o7b2o2b3o2b2o25b3o4b7obo232b2o2b2o4b2o
6bo4bo5bobobo2b2o24bo3bobo19bobo3bo$19b3ob2o6b2ob3o29bobob2ob2obob2o2b
o27bo90bobobo100b2obo6bo5bo12bobobo13bobo2bo2bo7bobo26b2o9b2obo2bo2b3o
7bo235bobo15b2o11bobo25b2obo2bo6b3o3b3o6bo2bob2o83bob2o13b2obo86b2o12b
ob2o8b2obo$18bo13bo4bo21bo8bo2bobo2bo2bobobo113b3obobobob3o96bob2o7bo
5bo13bo14b2obob5o9b3o23bobo8bob5o3b2o2b2o2bo237bobo28bobo26bobob2o6b3o
3b3o6b2obobo84b2obo13bob2o87bo12b2obo8bob2o$19b3ob2o6bo2b3o22bobo4bo2b
2o2bobobo3bo2bo23b2ob2o82b2ob2obobobob2ob2o92b2o10b2o4b2o12bo2bo11bo3b
o14bo3bo9bo10b3o9bo7bo5bo4b2o237bo12b2o16bo25bo2bo11bo5bo11bo2bo189bo
11b2o10b2o4b2o$21bob2o6bo2bo24bobobo2bo2b2o2bobobo2bob2o21b2o7b2o78bob
4obobobob4obo91bo11bo5bo13bo9bo4bo4bob2o10b2o2b5o3b2ob2o7bo3bo9b7o6b2o
4bo13b2o234bo2bo41b2obob2o23b2obob2o189b2o11bo10bo5bo29b3o$26bo38b3ob
2obo3b2ob2o24bo9bo78bo6bobobo6bo92bo11bo5bo12bo3bo3b2ob2o2bo3b2o3bo13b
2ob3o4bo5bo3b5o11bo2bo6bobo3bo14bobo228b2o3b3o8b2o35bobo25bobo204bo12b
o5bo27bo3bo8b3o$26b4o30bo3bo2bo8bob2o26b9o78b2o2bob2obobob2obo2b2o90b
2o10b2o4b2o12bo9bo4bo4bobobo9b2o2b5o9b3o3b2o19bo2bobo2bob2o2b2o11b2o
228b2o3bobo8b2o35bobo25bobo192b2o10b2o10b2o4b2o26bo5bo6bo3bo$29bo32bo
3b2obobobob2ob3ob2o110bobo3bobobobo3bobo93b2obo8b2obo14bo2bo11bo3bo3bo
10bo3bo15bo3b5o15b2o2bo4b2obo4bo245b2o47bo27bo194bo12bob2o6bo5bo39bo5b
o$21bo2bo6b2obo23b2o2bo7b2o3bo4bobo23b9o79bobo2bobobobobo2bobo93bob2o
8bob2o15bo14b2obob2o12b3o20bo3bo20b4o2bobo3bo6bo31b2obo8b2obo18bo7bo
435bo13b2obo7bo5bo25bo7bo$19b3o2bo6b2ob3o23bo9b6o4bobo22bo9bo79bo7bo7b
o123bobobo13bobobo11bobo23b3o25bo3bo3bo4b2ob2o29bob2o8bob2o17bobo5bobo
218b2o13b2o199b2o16b2o4b2o4b2o25bo7bo3bo7bo$18bo4bo13bo28bob2o4bo2bo3b
o23b2o7b2o80b6obob6o123bobobobo7b2o3bobo2bo10b2o26bobo19b4o2bobo3bo6bo
35b2o4b2o4b2o16bo7bo170b2o47b2o13b2o218bo4bo5bo38bo7bo$19b3ob2o6b2ob3o
29b2o6bo2bo30b2ob2o90bo130bobo2bo2b5o2bo4bo2b2o21b2o7b2o7b2o14b2o2bo4b
2obo4bo42bo5bo5bo185b2o8bobo3b2o258b2o16bo6bo5bo26bo5bo$21bobo8bobo34b
4ob3o121b2obobobob2o126b2o3b2o5b2o31bo9bo24bo2bobo2bob2o2b2o44bo5bo5bo
184b2o8b3o3b2o36bo27bo194bo16b2o4b2o4b2o27bo3bo6bo5bo$21bobo8bobo31b3o
4bo36bo87bo4bo4bo128b3o9b3o29b9o20bo2bo6bobo3bo13b2o32b2o4b2o4b2o193bo
2bo40bobo25bobo192bo13bob2o8b2obo30b3o8bo3bo$22bo10bo32bo2bo2bo2b2o32b
3o88b2obob2o130bo2bobo3bobo2bo26b3o2b5o2b3o15b7o6b2o4bo12bo29b2obo8b2o
bo17bo9bo151bo16b2o12bo28bobo25bobo192b2o12b2obo8bob2o42b3o$68b2o3b2ob
o124bobobo132b2o4bo4b2o27bo2bo2b3o2bo2bo14bo7bo5bo4b2o13b3o26bob2o8bob
2o15b2o11b2o148bobo28bobo24b2obob2o23b2obob2o$201bobobo173b2o9b2o16bob
5o3b2o2b2o2bo16bo24b2o16b2o17bo5bo6b2o144bobo11b2o15bobo24bo2bo11bo5bo
11bo2bo$202bobo204b2obo2bo2b3o7bo39bo17bo18bo5bo7bo142b2o2bobobo5bo4bo
6b2o4b2o2b2o24bobob2o6b3o3b3o6b2obobo$203bo210b3o4b7obo39bo17bo16b3o3b
3o6bob2o140bobo7b3o5bo2b2o2bo3b2o2bobo24b2obo2bo6b3o3b3o6bo2bob2o39bob
2o9b2obo22b2o47b2o$409b2o3b6obo5bobo38b2o16b2o30b2o2bo140bob2obo3bo2bo
6bob2o5bobob2obo25bo3bobo19bobo3bo40b2obo9bob2o21b2obo45bobo12bo$409bo
2b2o2bo3bo3b2o2bo41b2obo8b2obo14b2o13bo4b2o140b2o2bob3obo5b5obo2bobob
3obo2b2o24bobobob2o17b2obobobo44b2o11b2o19bo2bo45bo13bobo112bo$407bobo
9bo4bo45bob2o8bob2o13bobo13b5o144bo2bo4bob4o6b4obo4bo2bo27b2obobobo15b
obobob2o46bo11bo19bo2bo41bob2ob2o4b2o5bo3bo91bo2bob2obo2bo9bo$407b2o
11b3obo74bo13b2o4bo144b2obob3obo4b2o2b2o4bob3obob2o29bo2bob3o3b2ob2o3b
3obo2bo47bo13bo17b2ob2o41b2ob2o5bobo6bo3bo90b4ob2ob4o7b3o11bo2bob2obo
2bo$422b2o74b2o5b2o7bo2b2o148bobo3bob2obo4bob2obo3bobo32bobo5bo3bobo3b
o5bobo47b2o11b2o31b2o35bo4bo9bo3bo89bo2bob2obo2bo21b4ob2ob4o$505b2o7bo
bo150b2o4b2obobo4bobob2o4b2o33bo5bo2bobobobo2bo5bo46b2o9b2obo19b2o12b
2o35bo2bo3bo8bo3bo121bo2bob2obo2bo$21b2o100b2o384bo2bobobo160bo6bo48bo
b2obo3bob2obo52bo9bob2o70b2obobo11bobo$20bobo100b2o384b4ob2o218bo2bo5b
o2bo52bo8b2o74bo4bo12bo$19b3o491bo221b2o7b2o53b2o7bo23b2o49b3o4bo4bo$
19b2o490bobo283b2o10bo22b3o15b2o32bo4bo3bobo112b2o12b2o$20bobo100b3o
385b2o285bo9b2o16b2o2bo2bobo10b2o2b2o2b2o28b2obobo5bo112b2o12b2o$21bob
o2b2o90b2o2bob2o671bo12b2obo12b2o2b2o2b2o10b2o2bo2bobo28bo2bo3bo$22bo
2bobo90b2o2b2o215b2o21b2o41b2o9b2o379b2o11bob2o16b2o20b3o29bo4bo8b2o$
23b4o95b2o214bo2bo19bo2bo41bo9bo435b2o25b2ob2o5bobo$24b2o312b2obo19bob
2o39bo13bo460bob2ob2o4b2o134bo2bob2obo2bo$29b4o4b4o4b4o3bob2obo2bob2ob
o2bob2obo3b4o4b4o3bob2obo2bob2obo2bob2obo2bobo220bob2o17b2obo40b2o5bo
5b2o465bo16b3o89bo2bob2obo2bo21b4ob2ob4o$28b6o2b6o2b6o2b6o2b6o2b6o2b6o
2b6o2b4ob4ob2ob4ob2ob4obo21b2o10b2o18b2ob2o27b2o28b2o29b2o67bo2bobo3bo
15bo3bobo2bo38b2obobob2o468bobo13bo3bo88b4ob2ob4o7b3o11bo2bob2obo2bo$
29b4o4b4o4b4o4b4o4b4o4b4o4b4o4b4o4b3obo2bob2obo2bob2obo2bobo22bo11bo
19bobobo25bo2bob2o25bo29b2o67b4o3b3o15b3o3b4o33b5obobobobob5o464b2o8b
2o3bo3bo10b2o76bo2bob2obo2bo9bo$140bo11bo20bo4bo24bo2bobo20b2ob3o25bo
4b2o4bo67b2o2b2o13b2o2b2o37bo4bobobobobobo4bo472bo2bo2bo3bo10bobo95bo$
23b4o95b2o16b2o10b2o16b2obo5bo20b2ob4obo19bobobo26bobo8bobo63b3o4b2o
13b2o4b3o35b3ob2ob2ob2ob2ob3o475bo4b3o13bo$22bo4bo90b2obo48b2obo2bo3bo
20bo6bob2o16bobobo25bobob3o2b3obobo62bo2bo3b3o2bo5bo2b3o3bo2bo37bobo9b
obo491b2o4b2ob2obo$21bobo3bo90b2o2bo2bo14b2o10b2o19bobobo3bo19bob4obob
o14b2obobob2o23bobo2b3o2b3o2bobo62b2o6bo3bo3bo3bo6b2o39bo11bo492bobo5b
2ob2o$20bobo3bo96bobo15bo11bo19bo2bo3b2o17b2obobobobobo14bobo5bo6b2o
16bo4b2o2b2o4bo70bo4bo3bo4bo142bo20bo389bo4bo$20bo103bo15bo11bo21bo23b
obobo3bo2bo17bob2obo6bobo17b2o10b2o72b4o5b4o142bobo18bobo386bo3bo2bo$
20bo119b2o10b2o21b7o16b2o2b3ob3o18bo2bobo2b2o2bo19b3o8b3o78bo552bo7bob
ob2o102b3o$20bo2bo99b2o56bo13b2obobo4bo22bobo2b2ob4o19b3o8b3o78bo116b
2obo10b2obo66b2o33b2o313b2o8bo4bo90b3o8bo3bo$21b2o100b2o15b2o10b2o23b
2o17bobob5o2b4o18b2o24b3o16b3o73bobo54bo5bo54bob2o10bob2o14b3o4bo8bo4b
3o28bobo32bobo42b2o4b2o4b2obo41b2o207b2o4bo3bo2bo4b3o88bo3bo6bo5bo$
141bo11bo23b2o17bo2bo4bob2o2bo20b4ob4o15b3o16b3o74bo53b2ob2ob2ob2o56b
2o6b2o4b2o12b3o3b2o8b2o3b3o30bo34bo2b2o39bo5bo4bob2o41bobo220bo4bo88bo
5bo$140bo11bo44bobob2obo26bo2bo4bo19b3o8b3o72b2o4bo4b2o49bo5bo58bo7bo
5bo14bo5bobo4bobo5bo27b4ob2o31b2obobo38bo5bo9b2o41bo4b2o198bo3bo11bobo
b2o99bo7bo$140b2o10b2o44b2obo2bo27bo3b3o20b3o8b3o72b2o9b2o115bo7bo5bo
19bobo4bobo33bo2bo3bo30bo2bo40b2o4b2o8bo38b4ob2o2bo2bo196bo4bo8bo3bo2b
o87bo7bo3bo7bo$202b2o29b3o23b2o10b2o199b2o6b2o4b2o19bobo4bobo36bobobo
31b3o8b2o32bob2o11bo37bo4bobobob2o198bobobo9bo4bo87bo7bo$236bo21bo4b2o
2b2o4bo194b2obo8bo5bo14bo5b3o4b3o5bo31b3ob2o25b3o4b2o5bo2bo31b2obo10b
2o40bo3bobo202bobobo6bobo5b2ob2o95bo5bo$235b2o20bobo2b3o2b3o2bobo70bo
5bo5bo110bob2o9bo5bo12b3o18b3o15b2o16bo2bo23bob5obobo4bobobo34b2o4b2ob
o42bo5bo203bo4bo4b2o4b2ob2obo83bo5bo6bo3bo$258bobob3o2b3obobo70bobob7o
bobo46bo11bo54b2o6b2o4b2o12b3o18b3o11b2obo18b2obo22b2obo2b2o2b2o3b2obo
bo35bo4bob2o46b2o205bo3bo11bo89bo3bo8b3o$259bobo8bobo71bob11obo45bobo
9bobo53bo7bo5bo48b2o2bo2bo14bo3b2o13b3o4bo14bo3bob2o32bo9b2o40bobo222b
obo90b3o$260bo4b2o4bo69b2obobo9bobob2o40b3ob2ob2ob2ob2ob3o52bo7bo5bo
52bobo15b3o2bo14bo4bo2bo12b2obo2bo32b2o8bo32b2o7bo211b2o11b2o$21bo31bo
42b4o165b2o74b2ob2o11b2ob2o39bo4bobobobobobo4bo50b2o6b2o4b2o12bobo18bo
bo17bo4b2o12bob2o10bo8bo14bo2bobobob2o40bo32bo7b2o2bo$20bobo29bobo40bo
4bo164b2o77bo13bo43b5obobobobob5o47b2obo10b2obo15bo20bo23b2o3b2o7bo13b
o4b2o2b2obo2b2o2b2o3b2obobobo2bo39b2o32bobo$20bobo28b2o41bobo3bo243bob
o4bo4bobo48b2obobob2o52bob2o10bob2o54b2o3b2obob3o6b2o13bo9bob5obobo4bo
6b2o30b2o4b2obo35b2o7bo3bo$22bo29bo40bobo3bo245b2o4bo4b2o46b2o5bo5b2o
121b2o5b2o3bo2b2o28b3o4b2o5bob5o32b2o4bob2o44bo4bo$20bob2o27bobo39bo
257bo52bo13bo128b2o40b3o8bo4bo89b3o$20bo29bo42bo312bo9bo132b3o25bo10bo
2bo9b4o$54bo38bo2bo308b2o9b2o157bo3bo8b2obobo9bo$21b3o25bo3b3o38b2o
457b2o34bo2b2o11bo$21b2o27b3ob3o33bo462bo20bo5bo6bobo14b2o80bo$89bob2o
461b3o15b3ob3ob3o4b2o97b2o5b2o22bo$18b3o2b3o25bo2bo33bo2b2o463bo14bo3b
2ob2o3bo101bobo5bo21b3o$92b2o86b2o58b2o330b4obob3obo110b3o17bo$21b2o
26b3ob3o27b2o8b3o83bobo57bobo340bo113bo17b2o$20b3o27b3o3bo26b2o2b2o5b
2o15b2o66bo59bo331bob2obobobo125bo$51bo29b2obo2b2o6b2o13bo2bo63b2ob4o
53b2ob4o327b2obob3ob2o125b2o$23bo31bo25b3o12b3o14bo62bobobo2bo52bobobo
2bo331bo2bobo125b2o14b2o74b2obo8b2obo50bo17bo$20b2obo28bobo42b2o14bo
62bobo57bob2o336b2o2bo142bo74bob2o8bob2o48b3o17b3o$21bo31bo44b2o7bo3bo
bo60b2o2bo55b2obo342b2o83b2o56bob2o69b2o4b2o4b2o4b2o45bo23bo$21bobo29b
2o27b2o15b3o4bo3bobo60bo59bo2bo429bo49b3ob2obo2bo69bo5bo5bo5bo46bo2b3o
13b3o2bo$21bobo27bobo28b2o16b2o4bo4bo61b4o5bo5b2o43b3o12b2o414bo10b2o
39bo7b2o71bo5bo5bo5bo16b2o7b2o11b2o4b2obo2bo13bo2bob2o4b2o11b2o7b2o33b
2o12bob2o8b2obo21bo$22bo29bo48b2o4b4o60b2o15bo42b2o2bo12bo415b5o5bobo
6b2o28b2o3bo3b2o72b2o4b2o4b2o4b2o17bo5bo2b3o6b2o2bo7b2o17b2o7bo2b2o6b
3o2bo5bo35bo12b2obo8bob2o21bo5bo$102b3o65bo2b2o7bo3bobo41bo2b2o11bobo
57b2obo6b2o24b2o6bo52b2o264bo6bo6bo22b2o15bo74b2obo8b2obo18bo4b4o4bo6b
obo5b2o23b2o5bobo6bo4b4o4bo33bo11b2o10b2o25bo5b3o$103b2o65b2obo4bo3bo
3b2o42b2obo7b2o3b2o58bob2o7bo24bo6bobo52bo8b3o250b2obo2bo8bobo21bobo8b
o2bob2o75bob2o8bob2o15bo2b2o2bo4b2o2bo6bob2o3bobob4o3bo5bo3b4obobo3b2o
bo6bo2b2o4bo2b2o2bo30b2o11bo10bo18b2o6b2o7bo$105bo67bo7bo10bo40bo6bo2b
o8bo57b2o4bo17b2o3b2obo7bo52bo10b2o249bo15b2o22bo6bo6bo76b2o4b2o4b2o4b
2o11b5o3bob3o3bobob2ob2obo5bobobo2bo3bo5bo3bo2bobobo5bob2ob2obobo3b3ob
o3b5o40bo12bo16bobo9bo4b2o$104bo65b3o7bobo7b3o37b3o7bobo7b3o57bo5b2o
16bo4bobo61b4o6b2o250b2o3bo3b2o28b2o6bobo5b5o71bo5bo5bo5bo11bo4b5obo2b
obo2bo2bobo2b2o2b2o5bo17bo5b2o2b2o2bobo2bo2bobo2bob5o4bo27b2o10b2o10b
2o16bobob2o2bo4bo$99b2o2bo66bo10bo7bo40bo8bo2bo6bo61bo23b3obo16b2o43b
2o4bo6bo105b2o141b2o7bo39b2o10bo72bo5bo5bo5bo11b3o4bo5bob2obo2bo3bobob
obobob2o19b2obobobobobo3bo2bob2obo5bo4b3o29bo12bob2o8b2obo13bobobo7bo$
99b2o74b2o3bo3bo4bob2o42b2o3b2o7bob2o57b2o4b2o19bob2o13b2o2bo38b2obo3b
3o3b2o108b2o140bo2bob2ob3o49bo73b2o4b2o4b2o4b2o13bo2b2o2bobo2bo2b2ob5o
4bobo3bo21bo3bobo4b5ob2o2bo2bobo2b2o2bo30bo13b2obo8bob2o15bo5b3o$174bo
bo3bo7b2o2bo41bobo11b2o2bo53b2obo7bo36b2ob2o38b2obobobo6bob2o247b2obo
56b2o74b2obo8b2obo18bob2o3bobo2b2o2b2obo4b4ob2o21b2ob4o4bob2o2b2o2bobo
3b2obo33b2o16b2o4b2o4b2o13b2o26bo$174bo15b2o42bo12bo2b2o54bob2o6bo26bo
10b2ob2o41b4o9bo251bo132bob2o8bob2o16bobo5b4o2bo5bobo2bo2bo2b2obob2o
11b2obob2o2bo2bo2bobo5bo2b4o5bobo50bo4bo5bo14b3o25bo$99b3o71b2o5bo5b4o
43b2o12b3o54b2o10b2o23b2ob2o10bo40b3o13bo106b3o142b2o14b2o146bobo3b2o
7bobo6bo3bo12bo5bo12bo3bo6bobo7b2o3bobo30b2o16bo6bo5bo13b3o5bo8b2o9bo$
94b2o2bob2o87bo56bo2bo54bo36b2ob2o50bo2bo23bo91b2o2bob2o157b2o147bo2b
4o3b5ob2o2b2ob3o2b5o8bo5bo8b5o2b3ob2o2b2ob5o3b4o2bo31bo16b2o4b2o4b2o
13b3o5bobo4b2obo8b2o$94b2o2b2o84bo2b2o56bob2o56bo10b2o23bo2b2o13b2obo
33bob2o22bobo90b2o2b2o161bo145b2o3bo2bobo4bobo3b2o2bob2o3bobobo4b3o3b
3o4bobobo3b2obo2b2o3bobo4bobo2bo3b2o29bo13bob2o8b2obo15b3o4bo2bo4b2o8b
o$98b2o84bobo56b2obo57b2o11bo24b2o16bob3o27bob2o3bo4b2o8b2o6bobo76b2o
2bo13b2o152b2o17bo136bobo4bobo2bo6b2o7bo4bo21bo4bo7b2o6bo2bobo4bobo30b
2o12b2obo8bob2o15b2o6bobo4b2obo5bo4bo$179bo2bobobo52bo2bobobo59b2obo6b
o41bobo4bo26b2obob2o4b3o8b3o4b2obob2o73bo2bobo19b2o146bo17b3o133bo2b2o
2b2obob2o2bobo3b2o5bob2obo21bob2obo5b2o3bobo2b2obob2o2b2o2bo74bo7bo9bo
5bo9b2o$179b4ob2o53b4ob2o60bob2o6b2o31bo7bob2o3b2o29bobo6b2o8b2o4bo3b
2obo74bobobo19bo144b3o21bo5bobo124b2o5bo2bobobobobo4bo2bobobo3b2o19b2o
3bobobo2bo4bobobobobo2bo5b2o72bobobo12bo2bo7b3o5bobo$183bo59bo104bobo
6bo37bobo22b2obo77b2obob2o16bobo144bo22b2o5b2o133b2o3b3o7bobo2b2ob3o2b
o17bo2b3ob2o2bobo7b3o3b2o79bobob2o28b2obobo$181bobo57bobo105bo6b2o38bo
23bo2bo76bo3b2o2bo15b2o176bo149b2obo5bobo2bo13bo2bobo5bob2o95bobo5b3o
7b2o14bobobo$181b2o58b2o163bo13b3o76bo2b2o3b3o6b3o322b2obo9bob3obo2b4o
13b4o2bob3obo9bob2o85b2o9bo23bo$406bo9b4o79bobob2o2b3o4b6o321bob2o9bo
3bobobo21bobobo3bo9b2obo91bo4bo16bo6b2o$405b2obo6bobobob2o77bob2o3b3o
4b3o2b2o332b2o6bob2o17b2obo6b2o107bo15b2ob2o4b3o$408b2o3b3o3bob2o81b2o
2bo4bobo175b3o169bo2bo13bo2bo114b2o19bo2bo3b3o$405bo6bo4b2o79b5obob2o
4b2o177bo4bo164bo2b3o13b3o2bo112bo27b3o$405b2o6b4o81bo2bo2bobo9bo8b2o
165bo3bo7b2o155b3o19b3o112bo27b3o$404b2o10bo86bo2bo6bo3bo6bo2bo176bobo
157bo17bo115bo27b2o$404b3o8bo88b2o8bo9bobo2bo2bo161bo2b2o7bo156b2o17b
2o134b3o5bo$415b2o100b2o4b2obob5o165bo7b2o308bo7bobobo$515bobo4bo2b2o
169bobo317bo4bo2b2obobo$510b2o2b3o4b3o3b2obo162b2o316b2o4bo9bobo$511b
6o4b3o2b2obobo160bo5bo312bo7b2o6b2o$512b3o6b3o3b2o2bo160bobo3bo313b3o
5bo$505b2o15bo2b2o3bo158b2obobobo4bo312bo5bo$504bobo16b2obob2o159bo2bo
2b2ob4o318bo$504bo19bobobo162b2o4bo$503b2o19bobo2bo167bobo$510b2o13bo
2b2o168b2o$510b2o2b2o$508b2obo2b2o$508b3o3$509b2o$509b2o!
-- which is definitely very promising, but also not entirely a step forward from the DRH-oscillators.rle pattern. Dean Hickerson's stamp collection has really good comments where you can look up names, discoverer, date, and so on -- even if they aren't as convenient as LifeViewer labels might be.

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 14th, 2020, 5:50 pm

We need to create a text file that includes all the oscillators we want as separate RLEs. This will:

1. Add any number of oscillators we want, just by changing the text file.
2. Speed up the process; it's currently taking some time to get the oscillators from the existing files, as it has to check every cell and then figure out its bounding box when it finds a live cell. Having the RLEs being directly read will make it almost instant.
3. Remove the duplicates (such as the multiple figure eights), simply by including only one of each in the text file. The reason there are duplicates now is because it can't always tell that a disconnected part is part of the same oscillator. The program currently does remove duplicates, but only if they're identical, including in the same orientation and phase.

Unfortunately, I don't think text files above the character limit can be shared via this forum (and if there is no character limit, it would take a long time for the page to load and should be avoided anyway). Does Google Drive support plaintext files?

I'm actually not using Golly's python, so I can't import golly (trying gives me an import error). I'm not sure what functions it has.

It shouldn't be too hard to create an information file like the one DRH-oscillators currently has while assigning the row and column numbers dynamically, although referring to other oscillators by row and column number could be a bit trickier. I'm imagining that this info would be in the comments at the beginning of each RLE in the text file.

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 14th, 2020, 6:37 pm

hotdogPi wrote:
December 14th, 2020, 5:50 pm
We need to create a text file that includes all the oscillators we want as separate RLEs.
This certainly seems like the way to go.
hotdogPi wrote:
December 14th, 2020, 5:50 pm
Unfortunately, I don't think text files above the character limit can be shared via this forum (and if there is no character limit, it would take a long time for the page to load and should be avoided anyway). Does Google Drive support plaintext files?
It does, but last I checked it doesn't have a very good native editor for them. So you have to use a non-Google app like Anyfile Notepad, Text Editor for Google Drive, Text Editor (used to be Drive Notepad), etc. I tried out several of these when I was looking for collaborators on the Life Lexicon update project, but every one of them had significant problems or limitations.

I'd recommend a GitHub repository. In fact here's an experimental repo that I just set up -- try it out and see if you like it (once you tell me your GitHub login name). The "oscillators.txt" is my suggested format for the patterns you've included in your code so far... except for figuring out conventions for comments, for data transferred over from the DRH-oscillators.rle annotations.
hotdogPi wrote:
December 14th, 2020, 5:50 pm
I'm actually not using Golly's python, so I can't import golly (trying gives me an import error). I'm not sure what functions it has.
It seems like you'll have to reinvent a lot of wheels if you keep this as a standalone Python script -- just the glife maketext() function will save you a good bit of fiddling around.

Converting your script into a Golly-compatible one shouldn't be a big deal. The main thing is to add import golly as g at the top, as I mentioned. To make that work, you just run the script with File > Run Script in Golly, instead of from IDLE or a command line.

I can definitely help with that in more detail if you want to go that route. Let me know!

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 14th, 2020, 6:42 pm

My GitHub username is the same as it is here. However, I haven't actually created anything on GitHub yet, so I'm not that familiar with the website layout — I only signed up so that I could report a bug in someone else's program (completely unrelated to Conway's Game of Life).

Does the Golly Python package enable running patterns? 150 generations of Golly is much faster than 150 generations of the code I'm using, especially with bounding boxes above 15×15.

hkoenig
Posts: 159
Joined: June 20th, 2009, 11:40 am

Re: Golly suggestions

Post by hkoenig » December 14th, 2020, 7:01 pm

We need to create a text file that includes all the oscillators we want as separate RLEs.
It's called a database, and it's not hard to create one. I use SQLite which is a part of the MacOS. I've set up and use database that is single common file which has several tables. The primary table is for objects, but I've also got other things like my collision collection organized there, too. The version which excludes stable objects of more than 24 bits comes to about 2GB. Also setup smaller ad hoc for things like 3-Glider collisions.

From there it's easy to do searches based on whatever SQL statement you can come up with. For applications, I've created a library of C routines I use for simple queries, or to support custom collation routines, or for formatting. With that it's possible to write applications (with a UI, or utilities without UI) which can selectively extract, use and display information in a "user friendly format", including annotations and comments and such.

You could just use a text file, one line per object. I use a modified RLE which doesn't include any whitespace characters in the header, puts a single space before the content, and doesn't break the line into 80 char length segments.

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 14th, 2020, 9:35 pm

hotdogPi wrote:
December 14th, 2020, 6:42 pm
Does the Golly Python package enable running patterns? 150 generations of Golly is much faster than 150 generations of the code I'm using, especially with bounding boxes above 15×15.
Definitely! And you can borrow code from lots of other scripts for finding periods (oscar.py, or canonise() from biggiemac's script / apgsearch) and other common tasks.

A representative collection of Python scripts is packaged with Golly, but there are a lot more resources available if you look around and/or ask.

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 15th, 2020, 9:47 am

I just accepted the GitHub request. However, it's finals week for me, and it's all projects, not exams. My last project is Thursday night.

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 15th, 2020, 11:59 am

hotdogPi wrote:
December 15th, 2020, 9:47 am
I just accepted the GitHub request. However, it's finals week for me, and it's all projects, not exams. My last project is Thursday night.
No hurry at this end! Sounds like maybe I have a few days to write up some sample code for a Golly version of the script -- just the basics of how the progress display would work in Golly's status bar, and how the final pattern would be created in the Golly universe.

I'll leave the decision up to you about whether to take hkoenig's suggestion about switching to a SQLite database, or to a text file with one pattern per line. (I do like that text-file idea a little better, though, since I'm not using a Mac and SQLite isn't built into Windows in quite the same way, though it's easy enough to get something working.)

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 15th, 2020, 12:28 pm

I would rather use a text file.

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 15th, 2020, 1:18 pm

hotdogPi wrote:
December 15th, 2020, 12:28 pm
I would rather use a text file.
Want to keep the same format we already have as a sample, or switch to the one-line-per-pattern idea (just by dropping the header line, removing newlines from the RLE body, and putting any comments after the !?

There are advantages both ways. The current 70-character maximum width list of standard looking RLEs has the advantage of better readability and editability, especially for the comments. But one line per pattern is maybe a little easier to parse, and could still be manually copied out and pasted into Golly with no problem.

hotdogPi
Posts: 43
Joined: August 12th, 2020, 8:22 pm

Re: Golly suggestions

Post by hotdogPi » December 15th, 2020, 1:26 pm

I was thinking that the file would include comments, and those would go into the information file that you get by pressing "i" (as well as making it obvious which patterns are already in the file to avoid putting in two of the same pattern).

User avatar
dvgrn
Moderator
Posts: 7592
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Golly suggestions

Post by dvgrn » December 16th, 2020, 9:07 am

hotdogPi wrote:
December 15th, 2020, 1:26 pm
I was thinking that the file would include comments, and those would go into the information file that you get by pressing "i" (as well as making it obvious which patterns are already in the file to avoid putting in two of the same pattern).
So, comments in the usual multiline format, like

Code: Select all

#N pattern-name
#O discoverer, date
#C any other description, which might be ignored when building minimal comments
?

Could also support this kind of thing in single-line format, like

Code: Select all

3o$o$bo! #N glider #O Richard K. Guy, 1969 #C found while simulating the evolution of an R-pentomino
A big goal for me is to make these comments also available for building automatic LifeViewer labels for the objects in the stamp collection, as well as the standard text comments available through the 'i' Info button in Golly.

Post Reply