Conversion experiment 1: Difference between revisions

From XPUB & Lens-Based wiki
(Created page with "Image to text conversion experiment. <br /> <source lang="python"> import os, sys import binascii from PIL import Image import string letters = set(string.letters) im = Imag...")
 
No edit summary
Line 1: Line 1:
Image to text conversion experiment. <br />
Image to text conversion experiment. <br />


The Script converts RGB values of each pixel of the image to its binary representation and maps each digit combination with the letter. All non-alphabetic signs, numbers and white spaces are deleted from the final output.
<source lang="python">
<source lang="python">
import os, sys
import os, sys
Line 8: Line 10:
letters = set(string.letters)
letters = set(string.letters)


im = Image.open("RotterdamHype.png").convert("RGB")
im = Image.open("molevich.png").convert("RGB")
print(im.format, im.size, im.mode)
print(im.format, im.size, im.mode)
pix=im.load()
pix=im.load()
Line 34: Line 36:
print free_text
print free_text
</source>
</source>
Result
zzzVVVMMMccchhhrrrvvvlllppprrrwwwrrrwwwuuucccWWWZZZxxxSSSWWWSSSVVVaaaaaaSSSOOOMMMOOONNNJJJMMMJJJIIIHHHGGGSSSddddddoooVVVAAAiiiPPPAAAAAAHHHVVVtttFFFxxxZZZxxxaaafffzzzGGGwwwZZZkkkxxxiiiBBBdddooodddiiifffZZZVVVOOOGGGJJJqqqxxxiiiUUUNNNJJJMMMMMMIIIHHHHHHFFFDDDDDDXXXfffeeeiiicccBBBBBBMMMOOOPPPaaacccOOOxxxwwwxxxrrrzzzpppzzzoooMMMQQQpppnnnfffvvvWWWFFFwwwfffPPPZZZNNNOOOAAAGGGXXXcccfffuuufffMMMqqqDDDIIIIIIJJJNNNJJJFFFFFFBBBFFFDDDAAAfffiiiHHHtttFFFAAAAAAnnnHHHXXXvvvGGGdddrrrlllpppzzzxxxiiipppuuuqqqzzzttthhhfffhhhSSSfffllltttvvvfffaaaGGGooohhhAAAJJJVVVdddSSSHHHaaaHHHNNNMMMIIIFFFBBBBBBhhhllllllWWWPPPIIIcccDDDqqqdddxxxdddZZZpppooooooZZZrrrtttjjjuuukkkdddIIIfffllltttuuuaaaIIIPPPWWWoooqqqZZZjjjDDDUUUMMMooohhhQQQJJJFFFAAAjjjkkkWWWlllJJJoooGGGnnnXXXppppppvvvpppaaaMMMJJJeeefffpppccchhhWWWAAAWWWkkkHHHeeeoooFFFwwwfffcccIIIzzzvvvPPPOOOFFFiiidddhhhSSSDDDWWWDDDqqqNNNJJJHHHzzzzzzoooPPPeeewwwllleeefffhhhoooPPPdddvvveeefffooozzzpppeeekkkcccOOOJJJGGGiiiDDDrrrqqqQQQHHHAAAiiieeeWWWuuuAAAxxxJJJAAArrrfffrrrrrrZZZXXXfffuuuxxxkkklllSSSfffppprrroooooocccvvvhhhrrrcccJJJIIIcccNNNxxxNNNGGGQQQFFFQQQVVVkkklllaaadddhhhjjjhhhVVVFFFzzziiiaaaXXXaaaWWWooouuunnneeefffeeeaaaVVVMMMtttuuunnnQQQSSScccvvvvvvdddIIIGGGtttPPPAAApppzzzvvvllleeefffiiinnnllliiiFFFdddBBBlllcccGGGaaaxxxjjjeeekkkppphhhWWWMMMJJJxxxaaaXXXlllnnnjjjBBBkkknnnXXXHHHuuuzzzAAAUUUiiifffwwwzzzVVVnnnhhhjjjjjjnnnjjjeeeHHHQQQiiiAAAOOOzzzxxxzzzaaaXXXhhhqqqhhhaaaccckkkoooOOOBBBSSSvvvwwwpppwwwpppXXXhhhqqqaaavvvNNNWWWdddrrrSSSoooiiijjjnnnooohhhPPPVVVhhhBBBpppDDDuuuxxxoooWWWzzzxxxqqqeeekkkaaaXXXiiitttxxxXXXxxxnnnrrrtttzzzooojjjGGGtttzzzvvvwwwQQQkkkiiilllooorrrjjjSSSQQQAAAWWWeeewwwWWWMMMzzzvvvvvvpppjjjnnnzzzzzzjjjppprrrvvvuuukkkMMMiiiQQQGGGtttfffWWWOOOkkkiiijjjlllqqqrrrUUUMMMIIIJJJZZZcccQQQdddxxxcccjjjwwwnnnfffqqqhhhuuuwwwooozzzuuuiiikkkzzzUUUVVVvvvqqqpppNNNuuuIIIhhhzzzhhhNNNFFFNNNkkkiiilllooopppwwwfffGGGPPPSSSeeeAAAQQQuuuvvvxxxqqqOOOIIIzzzkkkuuurrrkkktttzzzaaappppppjjjBBBpppcccVVVwwwMMMIIIkkkhhhkkkppprrrwwwvvvUUUOOOWWWhhhAAAeeeqqqHHHcccwwwkkkHHHBBBVVVqqqpppqqquuurrrqqqtttzzzzzznnnrrrwwwwwwhhhfffSSSDDDZZZaaaccclllvvvoooZZZFFFkkkcccOOOFFFllljjjkkkooorrrxxxvvvOOOQQQhhhGGGAAApppaaaSSSPPPaaatttqqqzzzvvvZZZzzzjjjzzzxxxuuujjjdddFFFccceeeaaaqqqJJJGGGMMMIIIJJJGGGFFFIIIIIIGGGwwwBBBSSSpppUUUNNNQQQBBBlllkkknnnoootttvvvnnnrrrfffPPPiiiFFFFFFnnnGGGqqqvvvpppvvvxxxwwwlllZZZAAAeeetttooopppzzzxxxppprrrxxxppptttnnnNNNiiipppzzzxxxwwwrrrwwwzzztttxxxuuuhhhdddSSShhhWWWcccZZZAAAllliiijjjpppuuunnnjjjpppfffzzzAAAjjjiiiiiiUUUOOOxxxrrrzzzwwwkkkwwwxxxfffwwwnnnppppppnnnooozzzccchhhfffvvvVVVuuupppOOOSSSzzzkkkzzzllleeezzzhhhwwwlllPPPqqquuutttfffaaakkkhhhlllrrrqqqcccqqqjjjwwwDDDllltttooooootttuuuqqqqqqooonnnaaadddwwwlllnnnxxxuuuvvvwwwZZZSSSdddkkkzzzfffcccxxxoooXXXNNNnnnpppwwweeeqqqooouuuhhhXXXVVVMMMNNNttthhhvvvhhhAAAllliiikkkrrrnnnkkkzzzzzzIIIpppkkkaaalllzzzvvvnnnpppaaarrrxxxxxxwwwMMMooodddhhhSSSHHHvvvwwwfffPPPNNNpppnnnkkkkkkooozzzzzzzzzvvvAAAlllnnnnnnxxxvvveeeQQQzzzeeeuuuJJJkkkkkkvvvpppiiiUUUZZZOOOXXXAAAuuunnnkkkiiivvvAAAAAAtttooopppVVVvvvxxxaaaxxxwwwuuunnnZZZpppllltttccciiiwwwuuuWWWOOOpppaaannnDDDiiieeeOOOJJJiiiMMMJJJxxxzzznnnnnnkkkvvveeehhhFFFJJJtttoooSSSXXXeeelllrrruuuzzzuuufffqqqpppcccxxxuuuhhhnnnjjjcccSSSqqqrrraaaBBBxxxhhhHHHnnnffflllGGGQQQUUUzzzrrrrrrrrrvvvjjjhhhhhhcccVVVccczzzvvvjjjuuupppuuucccvvvkkktttNNNaaafffwwwfffAAAkkkHHHfffzzzvvvhhhhhhzzzXXXUUUjjjooorrrtttqqqqqqhhhllldddHHHNNNeeeuuurrrkkkpppSSSQQQqqqzzzGGGNNNeeeIIIdddnnnfffpppeeezzzMMMZZZSSSvvvlllttttttpppooowwwooohhhuuukkkhhhzzznnnZZZhhhcccAAAIIIkkktttpppOOOkkkxxxtttpppcccMMMIIIlllOOOeeedddVVVooorrrMMMzzzBBBkkkaaazzzlllrrrqqqqqqnnnkkkzzzzzzfffVVVfffpppzzzvvvPPPwwwHHHaaaccccccZZZAAAiiiJJJhhhWWWjjjNNNBBBBBBGGGNNNIIIqqqlllqqqooopppoookkkjjjfffhhhlllxxxwwwccczzzccchhhoooAAAeeehhhfffOOOkkkAAAWWWkkkOOOpppnnnkkkooonnnnnnlllkkkkkkfffzzzkkkzzzHHHeeetttpppzzztttXXXzzztttxxxQQQQQQoookkkDDDSSSUUUrrrFFFuuujjjoooooolllnnnlllkkkfffdddjjjxxxkkkzzzoooXXXhhhzzzOOOxxxrrrwwwzzzQQQMMMHHHIIIOOOSSShhhllllllnnnuuuQQQlllfffkkklllooollljjjkkkhhhaaavvvxxxjjjxxxFFFMMMtttrrruuuVVVSSSnnnkkktttvvvrrrvvvzzzdddpppfffiiiiiijjjiiifffddduuuiiiddduuucccaaavvvMMMVVVZZZxxxwwwqqqSSSUUUqqqQQQuuuAAAiiiZZZjjjNNNXXXiiixxxnnnhhhvvvMMMhhhrrrpppcccfffcccaaaXXXZZZWWWzzzzzzrrrlllOOOUUUSSSzzzaaakkkJJJttttttzzznnnhhhiiinnnrrrwwwzzziiinnnuuutttfffaaauuueeeSSSMMMvvvhhhVVVuuucccWWWSSSVVVSSSSSSPPPOOOOOOooovvvjjjwwwlllWWWaaawwwaaaeeeSSSkkkuuuaaaFFFffflllrrrxxxjjjVVVZZZeeewwwJJJzzzvvvuuuwwwcccpppXXXwwwooovvvllloooVVVZZZhhhvvvvvvcccfffaaaPPPFFFSSSQQQnnnwwwoooOOOzzzlllHHHtttzzztttnnnjjjvvvnnnuuuvvvqqqwwwiiijjjwwwpppxxxfffzzzooottteeerrrzzzzzzXXXtttoooeeeBBBoootttqqqQQQNNNqqqccczzzGGGxxxtttrrrtttOOOJJJttttttqqqqqqiiieeevvvNNNdddtttrrruuunnnkkkXXXnnntttIIIhhhhhhdddiiixxxqqqaaaaaaqqqIIIGGGeeejjjuuujjjhhhxxxwwwJJJGGGWWWnnnGGGJJJOOOOOOSSSOOOAAADDDOOOcccPPPdddjjjMMMIIIvvvkkkoooWWWZZZfffqqqeeennnzzzrrrkkkiiiUUUzzzcccnnnpppiiiwwwqqqNNNdddpppFFFfffFFFUUUvvveeeiiihhheeerrrzzzlllrrrttthhhfffiiiJJJzzziiirrrPPPaaazzzrrruuuzzzBBBrrrxxxhhhHHHDDDDDDBBBBBBAAAFFFGGGIIIaaaZZZrrrVVVcccOOOqqqXXXqqqiiinnnooojjjhhhdddddddddcccdddccceeehhhkkkkkkppprrruuuxxxkkkUUUuuupppeeevvvVVVPPPzzzxxxlllqqqBBBWWWdddqqqeeezzzoooSSSaaaSSSXXXdddhhhvvvhhhiiihhhlllMMMzzzZZZpppqqqrrreeejjjhhhqqqhhhlllppplllllljjjiiijjjjjjkkkjjjiiihhhhhhhhhjjjkkkjjjllloooqqquuuzzzdddXXXSSSooohhhFFFDDDeeexxxooouuufffXXXGGGnnnUUUuuuAAAAAAtttxxxNNNdddvvvzzzppprrrlllnnnnnnnnnkkklllkkkkkklllkkkkkkkkknnnkkknnnnnnnnnoooqqqvvvvvvzzzzzzZZZWWWPPPlllpppoooXXXpppUUUPPPkkkhhhPPPjjjqqqqqqtttpppllllllnnnooollllllllllllkkklllnnnllllllooooooppprrruuuxxxzzzpppdddvvvzzzzzzvvvvvvccchhhlllfffiiizzzuuudddzzzAAAUUUppptttvvvtttrrrqqqoooooolllllllllnnnnnnlllnnnooonnnlllnnnppprrrttttttvvvzzzwwwWWWUUUrrrzzztttfffjjjhhhQQQGGGGGGFFFZZZwwwxxxZZZiiiuuuuuuzzzwwwttttttqqqrrrnnnlllnnnkkkkkknnnlllnnnnnnlllnnnpppppptttuuuwwwxxxfffqqqzzznnnkkkvvvqqqcccJJJFFFGGGHHHFFFHHHOOOWWWUUUxxxvvvuuuxxxzzzzzzxxxvvvtttqqqpppoooooonnnnnnllllllnnnnnnllloooooopppqqqrrrvvvzzzrrrwwwvvvqqqwwwVVVNNNDDDGGGccczzzXXXxxxPPPzzzzzzzzzxxxttttttrrrpppppppppnnnooonnnjjjkkklllnnnppppppttttttuuuxxxqqqxxxqqqzzzvvvqqqeeetttlllfffkkkSSSMMMIIIvvvvvvfffaaazzzvvvttttttrrrqqqoooooolllnnnlllllloooqqqooopppqqqrrrrrrwwwzzzqqqtttuuupppuuuxxxxxxIIIhhhGGGzzzvvvzzzZZZUUUiiiQQQHHHvvvtttzzzpppuuuwwwuuurrrqqqpppoookkkkkkooopppoooooooooqqqrrrtttrrruuuwwwzzzhhhqqquuutttjjjqqqpppqqqwwwqqqnnnxxxtttpppOOOxxxzzztttZZZeeeXXXJJJooovvvFFFJJJzzzzzzxxxwwwuuuqqqooopppllllllnnnpppoooppppppqqqqqqtttvvvvvvxxxSSSZZZwwwwwwtttuuuzzzdddSSSWWWtttzzzuuuxxxzzzooouuutttkkkZZZFFFjjjIIIUUUNNNdddzzzQQQeeezzzzzzwwwwwwrrrnnnooopppqqqpppooooooqqqqqqrrrtttvvvzzzxxxfffhhhrrrjjjkkkrrreeeSSSrrrvvvooofffNNNXXXtttuuuwwwSSSAAAJJJPPPSSSQQQPPPSSSUUUZZZDDDQQQkkkooodddtttvvvxxxzzzxxxxxxzzzxxxvvvpppoooppppppqqqqqqqqqqqqqqqrrrtttrrrvvvzzzuuuzzzuuuXXXeeezzzvvvhhhzzzjjjHHHDDDwwwfffPPPkkkAAAQQQoooxxxpppUUUfffiiinnnpppccczzzvvvqqqqqqqqqqqqqqqrrrpppppppppppptttrrrvvvxxxzzzxxxpppMMMSSSUUUeeennnuuuwwwWWWJJJGGGzzzllloooUUUMMMVVVaaajjjrrrzzzzzzwwwvvvzzzkkkPPPdddfffkkkMMMfffwwwvvvtttuuurrrrrrrrrqqqrrrrrrqqqqqquuutttxxxxxxrrrvvvtttvvvfffpppwwwdddzzzlllwwwuuuNNNPPPFFFSSSXXXaaakkkrrruuuuuurrrtttrrrrrrwwwrrrQQQUUUeeeHHHkkkjjjzzzvvvwwwzzzzzzvvvqqqppprrrrrrrrrtttuuuuuuvvvvvvwwwzzzeeezzzSSSdddtttQQQAAAFFFOOOPPPcccoooqqqoooqqqttttttvvvwwwWWWOOOZZZaaaQQQzzznnnzzzvvvuuuqqqpppttttttqqqqqqttttttuuuwwwzzzzzztttvvviiixxxxxxvvvvvvpppUUUdddhhhVVVeeeSSSAAABBBFFFppprrroooppprrrtttwwwMMMWWWXXXZZZtttooovvvlllJJJzzzvvvuuuuuurrrtttpppppptttrrrrrrvvvzzzcccHHHXXXtttGGGhhhfffBBBooonnnnnnpppqqqvvvaaaIIIVVVZZZZZZnnnllliiieeeaaazzzxxxwwwwwwttttttpppppprrrrrruuuwwwzzzzzzzzzHHHlllPPPoooiiifffkkkaaaFFFAAANNNOOOOOOMMMVVVllllllooopppttthhhJJJQQQZZZXXXaaacccuuuiiidddtttzzzzzzwwwvvvvvvuuuqqqrrrttttttvvvvvvzzzzzzzzzzzzzzzzzzWWWiiiSSSxxxzzztttSSSAAAkkkeeeXXXUUUWWWBBBNNNSSSUUUQQQhhhlllnnnqqqlllQQQSSSdddZZZwwwpppiiiAAAwwwtttttttttttttttttttttuuuwwwzzzxxxzzzrrrzzzuuuwwwoooJJJrrrnnnWWWiii

Revision as of 18:31, 12 January 2016

Image to text conversion experiment.

The Script converts RGB values of each pixel of the image to its binary representation and maps each digit combination with the letter. All non-alphabetic signs, numbers and white spaces are deleted from the final output.

import os, sys
import binascii
from PIL import Image
import string
letters = set(string.letters)

im = Image.open("molevich.png").convert("RGB")
print(im.format, im.size, im.mode)
pix=im.load()
w=im.size[0]
h=im.size[1]

pict = []
pict_binary = []
for i in range(w):
	for j in range(h):
		a = pix[i,j]
		red = a[0]
		green = a[1]
		blue = a[2]
		pict.append(red)
		pict.append(green)
		pict.append(blue)

for p in pict:
	pict_binary.append('{0:08b}'.format(p))
data_string = ''.join(pict_binary)
n = int(data_string, 2)
m = binascii.unhexlify('%x' % n)
free_text = ''.join(x for x in m if x in letters)
print free_text

Result zzzVVVMMMccchhhrrrvvvlllppprrrwwwrrrwwwuuucccWWWZZZxxxSSSWWWSSSVVVaaaaaaSSSOOOMMMOOONNNJJJMMMJJJIIIHHHGGGSSSddddddoooVVVAAAiiiPPPAAAAAAHHHVVVtttFFFxxxZZZxxxaaafffzzzGGGwwwZZZkkkxxxiiiBBBdddooodddiiifffZZZVVVOOOGGGJJJqqqxxxiiiUUUNNNJJJMMMMMMIIIHHHHHHFFFDDDDDDXXXfffeeeiiicccBBBBBBMMMOOOPPPaaacccOOOxxxwwwxxxrrrzzzpppzzzoooMMMQQQpppnnnfffvvvWWWFFFwwwfffPPPZZZNNNOOOAAAGGGXXXcccfffuuufffMMMqqqDDDIIIIIIJJJNNNJJJFFFFFFBBBFFFDDDAAAfffiiiHHHtttFFFAAAAAAnnnHHHXXXvvvGGGdddrrrlllpppzzzxxxiiipppuuuqqqzzzttthhhfffhhhSSSfffllltttvvvfffaaaGGGooohhhAAAJJJVVVdddSSSHHHaaaHHHNNNMMMIIIFFFBBBBBBhhhllllllWWWPPPIIIcccDDDqqqdddxxxdddZZZpppooooooZZZrrrtttjjjuuukkkdddIIIfffllltttuuuaaaIIIPPPWWWoooqqqZZZjjjDDDUUUMMMooohhhQQQJJJFFFAAAjjjkkkWWWlllJJJoooGGGnnnXXXppppppvvvpppaaaMMMJJJeeefffpppccchhhWWWAAAWWWkkkHHHeeeoooFFFwwwfffcccIIIzzzvvvPPPOOOFFFiiidddhhhSSSDDDWWWDDDqqqNNNJJJHHHzzzzzzoooPPPeeewwwllleeefffhhhoooPPPdddvvveeefffooozzzpppeeekkkcccOOOJJJGGGiiiDDDrrrqqqQQQHHHAAAiiieeeWWWuuuAAAxxxJJJAAArrrfffrrrrrrZZZXXXfffuuuxxxkkklllSSSfffppprrroooooocccvvvhhhrrrcccJJJIIIcccNNNxxxNNNGGGQQQFFFQQQVVVkkklllaaadddhhhjjjhhhVVVFFFzzziiiaaaXXXaaaWWWooouuunnneeefffeeeaaaVVVMMMtttuuunnnQQQSSScccvvvvvvdddIIIGGGtttPPPAAApppzzzvvvllleeefffiiinnnllliiiFFFdddBBBlllcccGGGaaaxxxjjjeeekkkppphhhWWWMMMJJJxxxaaaXXXlllnnnjjjBBBkkknnnXXXHHHuuuzzzAAAUUUiiifffwwwzzzVVVnnnhhhjjjjjjnnnjjjeeeHHHQQQiiiAAAOOOzzzxxxzzzaaaXXXhhhqqqhhhaaaccckkkoooOOOBBBSSSvvvwwwpppwwwpppXXXhhhqqqaaavvvNNNWWWdddrrrSSSoooiiijjjnnnooohhhPPPVVVhhhBBBpppDDDuuuxxxoooWWWzzzxxxqqqeeekkkaaaXXXiiitttxxxXXXxxxnnnrrrtttzzzooojjjGGGtttzzzvvvwwwQQQkkkiiilllooorrrjjjSSSQQQAAAWWWeeewwwWWWMMMzzzvvvvvvpppjjjnnnzzzzzzjjjppprrrvvvuuukkkMMMiiiQQQGGGtttfffWWWOOOkkkiiijjjlllqqqrrrUUUMMMIIIJJJZZZcccQQQdddxxxcccjjjwwwnnnfffqqqhhhuuuwwwooozzzuuuiiikkkzzzUUUVVVvvvqqqpppNNNuuuIIIhhhzzzhhhNNNFFFNNNkkkiiilllooopppwwwfffGGGPPPSSSeeeAAAQQQuuuvvvxxxqqqOOOIIIzzzkkkuuurrrkkktttzzzaaappppppjjjBBBpppcccVVVwwwMMMIIIkkkhhhkkkppprrrwwwvvvUUUOOOWWWhhhAAAeeeqqqHHHcccwwwkkkHHHBBBVVVqqqpppqqquuurrrqqqtttzzzzzznnnrrrwwwwwwhhhfffSSSDDDZZZaaaccclllvvvoooZZZFFFkkkcccOOOFFFllljjjkkkooorrrxxxvvvOOOQQQhhhGGGAAApppaaaSSSPPPaaatttqqqzzzvvvZZZzzzjjjzzzxxxuuujjjdddFFFccceeeaaaqqqJJJGGGMMMIIIJJJGGGFFFIIIIIIGGGwwwBBBSSSpppUUUNNNQQQBBBlllkkknnnoootttvvvnnnrrrfffPPPiiiFFFFFFnnnGGGqqqvvvpppvvvxxxwwwlllZZZAAAeeetttooopppzzzxxxppprrrxxxppptttnnnNNNiiipppzzzxxxwwwrrrwwwzzztttxxxuuuhhhdddSSShhhWWWcccZZZAAAllliiijjjpppuuunnnjjjpppfffzzzAAAjjjiiiiiiUUUOOOxxxrrrzzzwwwkkkwwwxxxfffwwwnnnppppppnnnooozzzccchhhfffvvvVVVuuupppOOOSSSzzzkkkzzzllleeezzzhhhwwwlllPPPqqquuutttfffaaakkkhhhlllrrrqqqcccqqqjjjwwwDDDllltttooooootttuuuqqqqqqooonnnaaadddwwwlllnnnxxxuuuvvvwwwZZZSSSdddkkkzzzfffcccxxxoooXXXNNNnnnpppwwweeeqqqooouuuhhhXXXVVVMMMNNNttthhhvvvhhhAAAllliiikkkrrrnnnkkkzzzzzzIIIpppkkkaaalllzzzvvvnnnpppaaarrrxxxxxxwwwMMMooodddhhhSSSHHHvvvwwwfffPPPNNNpppnnnkkkkkkooozzzzzzzzzvvvAAAlllnnnnnnxxxvvveeeQQQzzzeeeuuuJJJkkkkkkvvvpppiiiUUUZZZOOOXXXAAAuuunnnkkkiiivvvAAAAAAtttooopppVVVvvvxxxaaaxxxwwwuuunnnZZZpppllltttccciiiwwwuuuWWWOOOpppaaannnDDDiiieeeOOOJJJiiiMMMJJJxxxzzznnnnnnkkkvvveeehhhFFFJJJtttoooSSSXXXeeelllrrruuuzzzuuufffqqqpppcccxxxuuuhhhnnnjjjcccSSSqqqrrraaaBBBxxxhhhHHHnnnffflllGGGQQQUUUzzzrrrrrrrrrvvvjjjhhhhhhcccVVVccczzzvvvjjjuuupppuuucccvvvkkktttNNNaaafffwwwfffAAAkkkHHHfffzzzvvvhhhhhhzzzXXXUUUjjjooorrrtttqqqqqqhhhllldddHHHNNNeeeuuurrrkkkpppSSSQQQqqqzzzGGGNNNeeeIIIdddnnnfffpppeeezzzMMMZZZSSSvvvlllttttttpppooowwwooohhhuuukkkhhhzzznnnZZZhhhcccAAAIIIkkktttpppOOOkkkxxxtttpppcccMMMIIIlllOOOeeedddVVVooorrrMMMzzzBBBkkkaaazzzlllrrrqqqqqqnnnkkkzzzzzzfffVVVfffpppzzzvvvPPPwwwHHHaaaccccccZZZAAAiiiJJJhhhWWWjjjNNNBBBBBBGGGNNNIIIqqqlllqqqooopppoookkkjjjfffhhhlllxxxwwwccczzzccchhhoooAAAeeehhhfffOOOkkkAAAWWWkkkOOOpppnnnkkkooonnnnnnlllkkkkkkfffzzzkkkzzzHHHeeetttpppzzztttXXXzzztttxxxQQQQQQoookkkDDDSSSUUUrrrFFFuuujjjoooooolllnnnlllkkkfffdddjjjxxxkkkzzzoooXXXhhhzzzOOOxxxrrrwwwzzzQQQMMMHHHIIIOOOSSShhhllllllnnnuuuQQQlllfffkkklllooollljjjkkkhhhaaavvvxxxjjjxxxFFFMMMtttrrruuuVVVSSSnnnkkktttvvvrrrvvvzzzdddpppfffiiiiiijjjiiifffddduuuiiiddduuucccaaavvvMMMVVVZZZxxxwwwqqqSSSUUUqqqQQQuuuAAAiiiZZZjjjNNNXXXiiixxxnnnhhhvvvMMMhhhrrrpppcccfffcccaaaXXXZZZWWWzzzzzzrrrlllOOOUUUSSSzzzaaakkkJJJttttttzzznnnhhhiiinnnrrrwwwzzziiinnnuuutttfffaaauuueeeSSSMMMvvvhhhVVVuuucccWWWSSSVVVSSSSSSPPPOOOOOOooovvvjjjwwwlllWWWaaawwwaaaeeeSSSkkkuuuaaaFFFffflllrrrxxxjjjVVVZZZeeewwwJJJzzzvvvuuuwwwcccpppXXXwwwooovvvllloooVVVZZZhhhvvvvvvcccfffaaaPPPFFFSSSQQQnnnwwwoooOOOzzzlllHHHtttzzztttnnnjjjvvvnnnuuuvvvqqqwwwiiijjjwwwpppxxxfffzzzooottteeerrrzzzzzzXXXtttoooeeeBBBoootttqqqQQQNNNqqqccczzzGGGxxxtttrrrtttOOOJJJttttttqqqqqqiiieeevvvNNNdddtttrrruuunnnkkkXXXnnntttIIIhhhhhhdddiiixxxqqqaaaaaaqqqIIIGGGeeejjjuuujjjhhhxxxwwwJJJGGGWWWnnnGGGJJJOOOOOOSSSOOOAAADDDOOOcccPPPdddjjjMMMIIIvvvkkkoooWWWZZZfffqqqeeennnzzzrrrkkkiiiUUUzzzcccnnnpppiiiwwwqqqNNNdddpppFFFfffFFFUUUvvveeeiiihhheeerrrzzzlllrrrttthhhfffiiiJJJzzziiirrrPPPaaazzzrrruuuzzzBBBrrrxxxhhhHHHDDDDDDBBBBBBAAAFFFGGGIIIaaaZZZrrrVVVcccOOOqqqXXXqqqiiinnnooojjjhhhdddddddddcccdddccceeehhhkkkkkkppprrruuuxxxkkkUUUuuupppeeevvvVVVPPPzzzxxxlllqqqBBBWWWdddqqqeeezzzoooSSSaaaSSSXXXdddhhhvvvhhhiiihhhlllMMMzzzZZZpppqqqrrreeejjjhhhqqqhhhlllppplllllljjjiiijjjjjjkkkjjjiiihhhhhhhhhjjjkkkjjjllloooqqquuuzzzdddXXXSSSooohhhFFFDDDeeexxxooouuufffXXXGGGnnnUUUuuuAAAAAAtttxxxNNNdddvvvzzzppprrrlllnnnnnnnnnkkklllkkkkkklllkkkkkkkkknnnkkknnnnnnnnnoooqqqvvvvvvzzzzzzZZZWWWPPPlllpppoooXXXpppUUUPPPkkkhhhPPPjjjqqqqqqtttpppllllllnnnooollllllllllllkkklllnnnllllllooooooppprrruuuxxxzzzpppdddvvvzzzzzzvvvvvvccchhhlllfffiiizzzuuudddzzzAAAUUUppptttvvvtttrrrqqqoooooolllllllllnnnnnnlllnnnooonnnlllnnnppprrrttttttvvvzzzwwwWWWUUUrrrzzztttfffjjjhhhQQQGGGGGGFFFZZZwwwxxxZZZiiiuuuuuuzzzwwwttttttqqqrrrnnnlllnnnkkkkkknnnlllnnnnnnlllnnnpppppptttuuuwwwxxxfffqqqzzznnnkkkvvvqqqcccJJJFFFGGGHHHFFFHHHOOOWWWUUUxxxvvvuuuxxxzzzzzzxxxvvvtttqqqpppoooooonnnnnnllllllnnnnnnllloooooopppqqqrrrvvvzzzrrrwwwvvvqqqwwwVVVNNNDDDGGGccczzzXXXxxxPPPzzzzzzzzzxxxttttttrrrpppppppppnnnooonnnjjjkkklllnnnppppppttttttuuuxxxqqqxxxqqqzzzvvvqqqeeetttlllfffkkkSSSMMMIIIvvvvvvfffaaazzzvvvttttttrrrqqqoooooolllnnnlllllloooqqqooopppqqqrrrrrrwwwzzzqqqtttuuupppuuuxxxxxxIIIhhhGGGzzzvvvzzzZZZUUUiiiQQQHHHvvvtttzzzpppuuuwwwuuurrrqqqpppoookkkkkkooopppoooooooooqqqrrrtttrrruuuwwwzzzhhhqqquuutttjjjqqqpppqqqwwwqqqnnnxxxtttpppOOOxxxzzztttZZZeeeXXXJJJooovvvFFFJJJzzzzzzxxxwwwuuuqqqooopppllllllnnnpppoooppppppqqqqqqtttvvvvvvxxxSSSZZZwwwwwwtttuuuzzzdddSSSWWWtttzzzuuuxxxzzzooouuutttkkkZZZFFFjjjIIIUUUNNNdddzzzQQQeeezzzzzzwwwwwwrrrnnnooopppqqqpppooooooqqqqqqrrrtttvvvzzzxxxfffhhhrrrjjjkkkrrreeeSSSrrrvvvooofffNNNXXXtttuuuwwwSSSAAAJJJPPPSSSQQQPPPSSSUUUZZZDDDQQQkkkooodddtttvvvxxxzzzxxxxxxzzzxxxvvvpppoooppppppqqqqqqqqqqqqqqqrrrtttrrrvvvzzzuuuzzzuuuXXXeeezzzvvvhhhzzzjjjHHHDDDwwwfffPPPkkkAAAQQQoooxxxpppUUUfffiiinnnpppccczzzvvvqqqqqqqqqqqqqqqrrrpppppppppppptttrrrvvvxxxzzzxxxpppMMMSSSUUUeeennnuuuwwwWWWJJJGGGzzzllloooUUUMMMVVVaaajjjrrrzzzzzzwwwvvvzzzkkkPPPdddfffkkkMMMfffwwwvvvtttuuurrrrrrrrrqqqrrrrrrqqqqqquuutttxxxxxxrrrvvvtttvvvfffpppwwwdddzzzlllwwwuuuNNNPPPFFFSSSXXXaaakkkrrruuuuuurrrtttrrrrrrwwwrrrQQQUUUeeeHHHkkkjjjzzzvvvwwwzzzzzzvvvqqqppprrrrrrrrrtttuuuuuuvvvvvvwwwzzzeeezzzSSSdddtttQQQAAAFFFOOOPPPcccoooqqqoooqqqttttttvvvwwwWWWOOOZZZaaaQQQzzznnnzzzvvvuuuqqqpppttttttqqqqqqttttttuuuwwwzzzzzztttvvviiixxxxxxvvvvvvpppUUUdddhhhVVVeeeSSSAAABBBFFFppprrroooppprrrtttwwwMMMWWWXXXZZZtttooovvvlllJJJzzzvvvuuuuuurrrtttpppppptttrrrrrrvvvzzzcccHHHXXXtttGGGhhhfffBBBooonnnnnnpppqqqvvvaaaIIIVVVZZZZZZnnnllliiieeeaaazzzxxxwwwwwwttttttpppppprrrrrruuuwwwzzzzzzzzzHHHlllPPPoooiiifffkkkaaaFFFAAANNNOOOOOOMMMVVVllllllooopppttthhhJJJQQQZZZXXXaaacccuuuiiidddtttzzzzzzwwwvvvvvvuuuqqqrrrttttttvvvvvvzzzzzzzzzzzzzzzzzzWWWiiiSSSxxxzzztttSSSAAAkkkeeeXXXUUUWWWBBBNNNSSSUUUQQQhhhlllnnnqqqlllQQQSSSdddZZZwwwpppiiiAAAwwwtttttttttttttttttttttuuuwwwzzzxxxzzzrrrzzzuuuwwwoooJJJrrrnnnWWWiii