# http://w...content-available-to-author-only...t.com/r/dailyprogrammer/comments/1s061q/120313_challenge_143_easy_braille
# Braille is a writing system based on a series of raised / lowered
# bumps on a material, for the purpose of being read through touch
# rather than sight. It's an incredibly powerful reading & writing
# system for those who are blind / visually impaired. Though the
# letter system has up to 64 unique glyph, 26 are used in English
# Braille for letters. The rest are used for numbers, words, accents,
# ligatures, etc.
#
# Your goal is to read in a string of Braille characters (using standard
# English Braille defined here) and print off the word in standard English
# letters. You only have to support the 26 English letters.
#
# Formal Inputs & Outputs
#
# Input Description
# Input will consistent of an array of 2x6 space-delimited Braille characters.
# This array is always on the same line, so regardless of how long the text is,
# it will always be on 3-rows of text. A lowered bump is a dot character '.',
#
#
# Output Description
# Print the transcribed Braille.
#
# Sample Inputs & Outputs
# Sample Input
# O. O. O. O. O. .O O. O. O. OO
# OO .O O. O. .O OO .O OO O. .O
# .. .. O. O. O. .O O. O. O. ..
#
# Sample Output:
# helloworld
import sys
import re
raw_data = [ x.strip ( ) .split ( " " ) for x in sys .stdin ]
alphabet = "abcdefghijklmnopqrstuvwxyz "
space = " "
braille_data = \
[ "O....." , "O.O..." , "OO...." , "OO.O.." , "O..O.." ,
"OOO..." , "OOOO.." , "O.OO.." , ".OO..." , ".OOO.." ,
"O...O." , "O.O.O." , "OO..O." , "OO.OO." , "O..OO." ,
"OOO.O." , "OOOOO." , "O.OOO." , ".OO.O." , ".OOOO." ,
"O...OO" , "O.O.OO" , ".OOO.O" , "OO..OO" , "OO.OOO" ,
"O..OOO" , space]
letter_lookup = { k:v for ( k, v) in zip ( braille_data, alphabet) }
togethered = "" .join ( [ letter_lookup[ "" .join ( x) ] for x in list ( zip ( *raw_data) ) ] )
print ( togethered, end= "\n \n " )
#--------------------------------------
# Now we implement the reverse function
#
# This is me just messing around with something
# and iterating over it to make it better. I'm
# really experimenting with args and kwargs and
# whatnot and what have you
#--------------------------------------
# Add a couple other lists to build a dictionary/lookup with
# TODO: Generate lists based on a char for raised and a char
# for lowered.
poundlabel= "'#' for raised, '.' for lowered"
braille_pound = \
[ "#....." , "#.#..." , "##...." , "##.#.." , "#..#.." ,
"###..." , "####.." , "#.##.." , ".##..." , ".###.." ,
"#...#." , "#.#.#." , "##..#." , "##.##." , "#..##." ,
"###.#." , "#####." , "#.###." , ".##.#." , ".####." ,
"#...##" , "#.#.##" , ".###.#" , "##..##" , "##.###" ,
"#..###" , space]
binlabel= "'1' for raised and '0' for lowered"
braille_binary = \
[ "100000" , "101000" , "110000" , "110100" , "100100" ,
"111000" , "111100" , "101100" , "011000" , "011100" ,
"100010" , "101010" , "110010" , "110110" , "100110" ,
"111010" , "111110" , "101110" , "011010" , "011110" ,
"100011" , "101011" , "011101" , "110011" , "110111" ,
"100111" , space]
lookup = { k:v for ( k, v) in zip ( alphabet, braille_data) }
lookup_p = { k:v for ( k, v) in zip ( alphabet, braille_pound) }
lookup_b = { k:v for ( k, v) in zip ( alphabet, braille_binary) }
def pad( string , length= 2 , delim= ' ' ) :
""" Take a string and add a specified character every nth index """
return delim+delim.join ( string [ i:i+length] for i in range ( 0 , len ( string ) , length) ) +delim
def create_dict( raised, lowered) :
alpha = "abcdefghijklmnopqrstuvwxyz "
sp = " "
base = \
[ "O....." , "O.O..." , "OO...." , "OO.O.." , "O..O.." ,
"OOO..." , "OOOO.." , "O.OO.." , ".OO..." , ".OOO.." ,
"O...O." , "O.O.O." , "OO..O." , "OO.OO." , "O..OO." ,
"OOO.O." , "OOOOO." , "O.OOO." , ".OO.O." , ".OOOO." ,
"O...OO" , "O.O.OO" , ".OOO.O" , "OO..OO" , "OO.OOO" ,
"O..OOO" , sp]
newlist = [ x.replace ( "O" , raised) .replace ( "." , lowered) for x in base]
return { k:v for ( k, v) in zip ( alpha, newlist) }
def get_braille( sentence, *args, bmap= lookup,
delimchar= ' ' , lname= "'O' for raised and '.' for lowered" , ljust= True ) :
# """This takes a string and returns the English Braille
# representation in three lines of text. It supports
# [aA-zZ] and spaces. It assumes the lookups passed
# or built already."""
r1, r2, r3, r4 = [ ] , [ ] , [ ] , [ ]
for c in sentence.lower ( ) :
if ljust:
r1+= c+" "
else :
r1+= " " +c
translated = re .findall ( '..' , bmap[ c] )
r2+= translated[ 0 ]
r3+= translated[ 1 ]
r4+= translated[ 2 ]
print ( "Translating '" , sentence.upper ( ) , "' to braille, with " , lname, sep= '' )
if args:
for line in [ "" .join ( x) for x in args] : print ( line)
print ( "{0:3}" .format ( pad( "" .join ( r1) , delim= delimchar) ) ,
"{0:3}" .format ( pad( "" .join ( r2) , delim= delimchar) ) ,
"{0:3}" .format ( pad( "" .join ( r3) , delim= delimchar) ) ,
"{0:3}" .format ( pad( "" .join ( r4) , delim= delimchar) ) ,
sep= "\n " , end= "\n \n " )
# Demonstrate the different usages
get_braille( "Hello World" )
get_braille( "Hello World" , bmap= lookup_p, lname= poundlabel)
get_braille( "Hello World" , bmap= lookup_b, lname= binlabel)
get_braille( "Rob Wett" )
get_braille( "Rob Wett" , bmap= lookup_p, lname= poundlabel)
get_braille( "Rob Wett" , "Using '|' as a delimiting character: " ,
"Lets add another line, just args stuff an all" ,
bmap= lookup_p, lname= poundlabel, delimchar= '|' )
get_braille( "Rob Wett" , "Using '+' as a delimiting character: " ,
bmap= lookup_b, lname= binlabel, delimchar= '+' )
get_braille( "Rob Wett" , "Using '-' as a delimiting character: " ,
bmap= lookup_b, lname= binlabel, delimchar= '-' )
get_braille( "Rob Wett" , "Using '-' as a delimiting character: " ,
bmap= lookup_b, lname= binlabel, delimchar= '-' , ljust= False )
get_braille( "braille" )
# messin
messin_args= "library\n cards\n r\n 4\n tards"
get_braille( "braille" , messin_args, bmap= lookup_p, lname= poundlabel)
get_braille( "braille" , bmap= lookup_b, lname= binlabel)
get_braille( "j is nonsense" , messin_args)
get_braille( "j is nonsense" , bmap= lookup_p, lname= poundlabel, ljust= False )
get_braille( "j is nonsense" , bmap= lookup_b, lname= binlabel)
get_braille( "jis nonsense" , bmap= create_dict( "X" , "o" ) )
IyBodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vci9kYWlseXByb2dyYW1tZXIvY29tbWVudHMvMXMwNjFxLzEyMDMxM19jaGFsbGVuZ2VfMTQzX2Vhc3lfYnJhaWxsZQogCiMgQnJhaWxsZSBpcyBhIHdyaXRpbmcgc3lzdGVtIGJhc2VkIG9uIGEgc2VyaWVzIG9mIHJhaXNlZCAvIGxvd2VyZWQgCiMgYnVtcHMgb24gYSBtYXRlcmlhbCwgZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIHJlYWQgdGhyb3VnaCB0b3VjaCAKIyByYXRoZXIgdGhhbiBzaWdodC4gSXQncyBhbiBpbmNyZWRpYmx5IHBvd2VyZnVsIHJlYWRpbmcgJiB3cml0aW5nIAojIHN5c3RlbSBmb3IgdGhvc2Ugd2hvIGFyZSBibGluZCAvIHZpc3VhbGx5IGltcGFpcmVkLiBUaG91Z2ggdGhlIAojIGxldHRlciBzeXN0ZW0gaGFzIHVwIHRvIDY0IHVuaXF1ZSBnbHlwaCwgMjYgYXJlIHVzZWQgaW4gRW5nbGlzaCAKIyBCcmFpbGxlIGZvciBsZXR0ZXJzLiBUaGUgcmVzdCBhcmUgdXNlZCBmb3IgbnVtYmVycywgd29yZHMsIGFjY2VudHMsIAojIGxpZ2F0dXJlcywgZXRjLgojIAojIFlvdXIgZ29hbCBpcyB0byByZWFkIGluIGEgc3RyaW5nIG9mIEJyYWlsbGUgY2hhcmFjdGVycyAodXNpbmcgc3RhbmRhcmQgCiMgRW5nbGlzaCBCcmFpbGxlIGRlZmluZWQgaGVyZSkgYW5kIHByaW50IG9mZiB0aGUgd29yZCBpbiBzdGFuZGFyZCBFbmdsaXNoIAojIGxldHRlcnMuIFlvdSBvbmx5IGhhdmUgdG8gc3VwcG9ydCB0aGUgMjYgRW5nbGlzaCBsZXR0ZXJzLgojIAojIEZvcm1hbCBJbnB1dHMgJiBPdXRwdXRzCiMgCiMgSW5wdXQgRGVzY3JpcHRpb24KIyBJbnB1dCB3aWxsIGNvbnNpc3RlbnQgb2YgYW4gYXJyYXkgb2YgMng2IHNwYWNlLWRlbGltaXRlZCBCcmFpbGxlIGNoYXJhY3RlcnMuIAojIFRoaXMgYXJyYXkgaXMgYWx3YXlzIG9uIHRoZSBzYW1lIGxpbmUsIHNvIHJlZ2FyZGxlc3Mgb2YgaG93IGxvbmcgdGhlIHRleHQgaXMsIAojIGl0IHdpbGwgYWx3YXlzIGJlIG9uIDMtcm93cyBvZiB0ZXh0LiBBIGxvd2VyZWQgYnVtcCBpcyBhIGRvdCBjaGFyYWN0ZXIgJy4nLCAKIyAKIyAKIyBPdXRwdXQgRGVzY3JpcHRpb24KIyBQcmludCB0aGUgdHJhbnNjcmliZWQgQnJhaWxsZS4KIyAKIyBTYW1wbGUgSW5wdXRzICYgT3V0cHV0cwojIFNhbXBsZSBJbnB1dAojIE8uIE8uIE8uIE8uIE8uIC5PIE8uIE8uIE8uIE9PIAojIE9PIC5PIE8uIE8uIC5PIE9PIC5PIE9PIE8uIC5PCiMgLi4gLi4gTy4gTy4gTy4gLk8gTy4gTy4gTy4gLi4KIyAKIyBTYW1wbGUgT3V0cHV0OgojIGhlbGxvd29ybGQKIAppbXBvcnQgc3lzCmltcG9ydCByZQogCnJhd19kYXRhID0gW3guc3RyaXAoKS5zcGxpdCgiICIpIGZvciB4IGluIHN5cy5zdGRpbl0KIAphbHBoYWJldCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAiCnNwYWNlID0gIiAgICAgICIKIApicmFpbGxlX2RhdGEgPSBcClsiTy4uLi4uIiwgIk8uTy4uLiIsICJPTy4uLi4iLCAiT08uTy4uIiwgIk8uLk8uLiIsIAoiT09PLi4uIiwgIk9PT08uLiIsICJPLk9PLi4iLCAiLk9PLi4uIiwgIi5PT08uLiIsCiJPLi4uTy4iLCAiTy5PLk8uIiwgIk9PLi5PLiIsICJPTy5PTy4iLCAiTy4uT08uIiwKIk9PTy5PLiIsICJPT09PTy4iLCAiTy5PT08uIiwgIi5PTy5PLiIsICIuT09PTy4iLAoiTy4uLk9PIiwgIk8uTy5PTyIsICIuT09PLk8iLCAiT08uLk9PIiwgIk9PLk9PTyIsCiJPLi5PT08iLCBzcGFjZV0KIApsZXR0ZXJfbG9va3VwID0ge2s6diBmb3IgKGssIHYpIGluIHppcChicmFpbGxlX2RhdGEsIGFscGhhYmV0KX0KdG9nZXRoZXJlZCA9ICIiLmpvaW4oW2xldHRlcl9sb29rdXBbIiIuam9pbih4KV0gZm9yIHggaW4gbGlzdCh6aXAoKnJhd19kYXRhKSldKQpwcmludCh0b2dldGhlcmVkLCBlbmQ9IlxuXG4iKQogCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE5vdyB3ZSBpbXBsZW1lbnQgdGhlIHJldmVyc2UgZnVuY3Rpb24KIwojIFRoaXMgaXMgbWUganVzdCBtZXNzaW5nIGFyb3VuZCB3aXRoIHNvbWV0aGluZwojIGFuZCBpdGVyYXRpbmcgb3ZlciBpdCB0byBtYWtlIGl0IGJldHRlci4gSSdtIAojIHJlYWxseSBleHBlcmltZW50aW5nIHdpdGggYXJncyBhbmQga3dhcmdzIGFuZCAKIyB3aGF0bm90IGFuZCB3aGF0IGhhdmUgeW91CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiMgQWRkIGEgY291cGxlIG90aGVyIGxpc3RzIHRvIGJ1aWxkIGEgZGljdGlvbmFyeS9sb29rdXAgd2l0aAojIFRPRE86IEdlbmVyYXRlIGxpc3RzIGJhc2VkIG9uIGEgY2hhciBmb3IgcmFpc2VkIGFuZCBhIGNoYXIKIyAgICAgICBmb3IgbG93ZXJlZC4KcG91bmRsYWJlbD0iJyMnIGZvciByYWlzZWQsICcuJyBmb3IgbG93ZXJlZCIKYnJhaWxsZV9wb3VuZCA9IFwKWyIjLi4uLi4iLCAiIy4jLi4uIiwgIiMjLi4uLiIsICIjIy4jLi4iLCAiIy4uIy4uIiwgCiIjIyMuLi4iLCAiIyMjIy4uIiwgIiMuIyMuLiIsICIuIyMuLi4iLCAiLiMjIy4uIiwKIiMuLi4jLiIsICIjLiMuIy4iLCAiIyMuLiMuIiwgIiMjLiMjLiIsICIjLi4jIy4iLAoiIyMjLiMuIiwgIiMjIyMjLiIsICIjLiMjIy4iLCAiLiMjLiMuIiwgIi4jIyMjLiIsCiIjLi4uIyMiLCAiIy4jLiMjIiwgIi4jIyMuIyIsICIjIy4uIyMiLCAiIyMuIyMjIiwKIiMuLiMjIyIsIHNwYWNlXQogCmJpbmxhYmVsPSInMScgZm9yIHJhaXNlZCBhbmQgJzAnIGZvciBsb3dlcmVkIgpicmFpbGxlX2JpbmFyeSA9IFwKWyIxMDAwMDAiLCAiMTAxMDAwIiwgIjExMDAwMCIsICIxMTAxMDAiLCAiMTAwMTAwIiwgCiIxMTEwMDAiLCAiMTExMTAwIiwgIjEwMTEwMCIsICIwMTEwMDAiLCAiMDExMTAwIiwKIjEwMDAxMCIsICIxMDEwMTAiLCAiMTEwMDEwIiwgIjExMDExMCIsICIxMDAxMTAiLAoiMTExMDEwIiwgIjExMTExMCIsICIxMDExMTAiLCAiMDExMDEwIiwgIjAxMTExMCIsCiIxMDAwMTEiLCAiMTAxMDExIiwgIjAxMTEwMSIsICIxMTAwMTEiLCAiMTEwMTExIiwKIjEwMDExMSIsIHNwYWNlXQogCmxvb2t1cCAgID0ge2s6diBmb3IgKGssIHYpIGluIHppcChhbHBoYWJldCwgYnJhaWxsZV9kYXRhKX0KbG9va3VwX3AgPSB7azp2IGZvciAoaywgdikgaW4gemlwKGFscGhhYmV0LCBicmFpbGxlX3BvdW5kKX0KbG9va3VwX2IgPSB7azp2IGZvciAoaywgdikgaW4gemlwKGFscGhhYmV0LCBicmFpbGxlX2JpbmFyeSl9CiAKZGVmIHBhZChzdHJpbmcsIGxlbmd0aD0yLCBkZWxpbT0nICcpOgogICAgIiIiIFRha2UgYSBzdHJpbmcgYW5kIGFkZCBhIHNwZWNpZmllZCBjaGFyYWN0ZXIgZXZlcnkgbnRoIGluZGV4ICIiIgogICAgcmV0dXJuIGRlbGltK2RlbGltLmpvaW4oc3RyaW5nW2k6aStsZW5ndGhdIGZvciBpIGluIHJhbmdlKDAsbGVuKHN0cmluZyksbGVuZ3RoKSkrZGVsaW0KIApkZWYgY3JlYXRlX2RpY3QocmFpc2VkLCBsb3dlcmVkKToKICAgIGFscGhhID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICIKICAgIHNwID0gIiAgICAgICIKICAgIGJhc2UgPSBcCiAgICBbIk8uLi4uLiIsICJPLk8uLi4iLCAiT08uLi4uIiwgIk9PLk8uLiIsICJPLi5PLi4iLCAKICAgICJPT08uLi4iLCAiT09PTy4uIiwgIk8uT08uLiIsICIuT08uLi4iLCAiLk9PTy4uIiwKICAgICJPLi4uTy4iLCAiTy5PLk8uIiwgIk9PLi5PLiIsICJPTy5PTy4iLCAiTy4uT08uIiwKICAgICJPT08uTy4iLCAiT09PT08uIiwgIk8uT09PLiIsICIuT08uTy4iLCAiLk9PT08uIiwKICAgICJPLi4uT08iLCAiTy5PLk9PIiwgIi5PT08uTyIsICJPTy4uT08iLCAiT08uT09PIiwKICAgICJPLi5PT08iLCBzcF0KICAgIG5ld2xpc3QgPSBbeC5yZXBsYWNlKCJPIiwgcmFpc2VkKS5yZXBsYWNlKCIuIiwgbG93ZXJlZCkgZm9yIHggaW4gYmFzZV0KICAgIHJldHVybiB7azp2IGZvciAoaywgdikgaW4gemlwKGFscGhhLCBuZXdsaXN0KX0KIAogCmRlZiBnZXRfYnJhaWxsZShzZW50ZW5jZSwgKmFyZ3MsIGJtYXA9bG9va3VwLCAKICAgICAgICAgICAgICAgIGRlbGltY2hhcj0nICcsIGxuYW1lPSInTycgZm9yIHJhaXNlZCBhbmQgJy4nIGZvciBsb3dlcmVkIiwgbGp1c3Q9VHJ1ZSk6CiMgICAgIiIiVGhpcyB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgRW5nbGlzaCBCcmFpbGxlCiMgICAgICAgcmVwcmVzZW50YXRpb24gaW4gdGhyZWUgbGluZXMgb2YgdGV4dC4gSXQgc3VwcG9ydHMKIyAgICAgICBbYUEtelpdIGFuZCBzcGFjZXMuIEl0IGFzc3VtZXMgdGhlIGxvb2t1cHMgcGFzc2VkCiMgICAgICAgb3IgYnVpbHQgYWxyZWFkeS4iIiIKIAogICAgcjEsIHIyLCByMywgcjQgPSBbXSwgW10sIFtdLCBbXQogICAgZm9yIGMgaW4gc2VudGVuY2UubG93ZXIoKToKICAgICAgIGlmIGxqdXN0OgogICAgICAgICAgIHIxKz1jKyIgIgogICAgICAgZWxzZToKICAgICAgICAgICByMSs9IiAiK2MKICAgICAgIHRyYW5zbGF0ZWQgPSByZS5maW5kYWxsKCcuLicsIGJtYXBbY10pCiAgICAgICByMis9dHJhbnNsYXRlZFswXQogICAgICAgcjMrPXRyYW5zbGF0ZWRbMV0KICAgICAgIHI0Kz10cmFuc2xhdGVkWzJdCiAgICBwcmludCgiVHJhbnNsYXRpbmcgJyIsIHNlbnRlbmNlLnVwcGVyKCksICInIHRvIGJyYWlsbGUsIHdpdGggIiwgbG5hbWUsIHNlcD0nJykKICAgIGlmIGFyZ3M6CiAgICAgICAgZm9yIGxpbmUgaW4gWyIiLmpvaW4oeCkgZm9yIHggaW4gYXJnc106IHByaW50KGxpbmUpCiAgICBwcmludCgiezA6M30iLmZvcm1hdChwYWQoIiIuam9pbihyMSksIGRlbGltPWRlbGltY2hhcikpLCAKICAgICAgICAgICJ7MDozfSIuZm9ybWF0KHBhZCgiIi5qb2luKHIyKSwgZGVsaW09ZGVsaW1jaGFyKSksIAogICAgICAgICAgInswOjN9Ii5mb3JtYXQocGFkKCIiLmpvaW4ocjMpLCBkZWxpbT1kZWxpbWNoYXIpKSwgCiAgICAgICAgICAiezA6M30iLmZvcm1hdChwYWQoIiIuam9pbihyNCksIGRlbGltPWRlbGltY2hhcikpLCAKICAgICAgICAgIHNlcD0iXG4iLCBlbmQ9IlxuXG4iKQogCiMgRGVtb25zdHJhdGUgdGhlIGRpZmZlcmVudCB1c2FnZXMKZ2V0X2JyYWlsbGUoIkhlbGxvIFdvcmxkIikKZ2V0X2JyYWlsbGUoIkhlbGxvIFdvcmxkIiwgYm1hcD1sb29rdXBfcCwgbG5hbWU9cG91bmRsYWJlbCkKZ2V0X2JyYWlsbGUoIkhlbGxvIFdvcmxkIiwgYm1hcD1sb29rdXBfYiwgbG5hbWU9YmlubGFiZWwpCmdldF9icmFpbGxlKCJSb2IgV2V0dCIpCmdldF9icmFpbGxlKCJSb2IgV2V0dCIsIGJtYXA9bG9va3VwX3AsIGxuYW1lPXBvdW5kbGFiZWwpCmdldF9icmFpbGxlKCJSb2IgV2V0dCIsICJVc2luZyAnfCcgYXMgYSBkZWxpbWl0aW5nIGNoYXJhY3RlcjogIiwKICAgICAgICAgICAiTGV0cyBhZGQgYW5vdGhlciBsaW5lLCBqdXN0IGFyZ3Mgc3R1ZmYgYW4gYWxsIiwgCiAgICAgICAgICAgYm1hcD1sb29rdXBfcCwgbG5hbWU9cG91bmRsYWJlbCwgZGVsaW1jaGFyPSd8JykKZ2V0X2JyYWlsbGUoIlJvYiBXZXR0IiwgIlVzaW5nICcrJyBhcyBhIGRlbGltaXRpbmcgY2hhcmFjdGVyOiAiLCAKICAgICAgICAgICAgYm1hcD1sb29rdXBfYiwgbG5hbWU9YmlubGFiZWwsIGRlbGltY2hhcj0nKycpCmdldF9icmFpbGxlKCJSb2IgV2V0dCIsICJVc2luZyAnLScgYXMgYSBkZWxpbWl0aW5nIGNoYXJhY3RlcjogIiwgCiAgICAgICAgICAgIGJtYXA9bG9va3VwX2IsIGxuYW1lPWJpbmxhYmVsLCBkZWxpbWNoYXI9Jy0nKQpnZXRfYnJhaWxsZSgiUm9iIFdldHQiLCAiVXNpbmcgJy0nIGFzIGEgZGVsaW1pdGluZyBjaGFyYWN0ZXI6ICIsIAogICAgICAgICAgICBibWFwPWxvb2t1cF9iLCBsbmFtZT1iaW5sYWJlbCwgZGVsaW1jaGFyPSctJywgbGp1c3Q9RmFsc2UpCmdldF9icmFpbGxlKCJicmFpbGxlIikKIyBtZXNzaW4KbWVzc2luX2FyZ3M9ImxpYnJhcnlcbmNhcmRzXG5yXG40XG50YXJkcyIKZ2V0X2JyYWlsbGUoImJyYWlsbGUiLCBtZXNzaW5fYXJncywgYm1hcD1sb29rdXBfcCwgbG5hbWU9cG91bmRsYWJlbCkKZ2V0X2JyYWlsbGUoImJyYWlsbGUiLCBibWFwPWxvb2t1cF9iLCBsbmFtZT1iaW5sYWJlbCkKZ2V0X2JyYWlsbGUoImogaXMgbm9uc2Vuc2UiLCBtZXNzaW5fYXJncykKZ2V0X2JyYWlsbGUoImogaXMgbm9uc2Vuc2UiLCBibWFwPWxvb2t1cF9wLCBsbmFtZT1wb3VuZGxhYmVsLCBsanVzdD1GYWxzZSkKZ2V0X2JyYWlsbGUoImogaXMgbm9uc2Vuc2UiLCBibWFwPWxvb2t1cF9iLCBsbmFtZT1iaW5sYWJlbCkKCmdldF9icmFpbGxlKCJqaXMgbm9uc2Vuc2UiLCBibWFwPWNyZWF0ZV9kaWN0KCJYIiwgIm8iKSk=