'n'n'' 'g'n''''''''''''''''''''''''''''''''''''r'a'i'l'i'm'a'f' 'y'l'b'a'k'r'a'm'e'r' 's'i' 't'l'u's''''''''''l's'u'e'r' 'e'h't' ','''i'''t'i'd'e' 'e'h't' 't'u'o'h'g'u'o'r'h't'''''''''''t'u'o'h'u'g'o'r'h't' 'd'e'n'e'p'p'a'h' '''c'a'e''r'e'h'w' ''w' 'f'I''''''''''r'a'l'u'c'i't'r'a'p' 'n'i' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''':'n!'''''''''''''''''''''''''''''''''''' 't'n'e'm'u'c'o'd' 't'u'o'h'g'u'o'r'h't' 'n'o'i't'i's'o'p' '''''''n'i't'i'd'E'[reference crdts implementation zoomed in]''''''s'o'p's'n'i'(ref_perf3.svg)''d'e'i'l'p'p'a' 'g'n'i'h't'o'o'm's' 'd'n'a' 'g'n'i't'e'k'c'u'b''''''''''' 'g'n'i'g'a'r'e'v'a' 'e'm'a's' 'e'h't' 'h't'i'w' ',''''.'e'k'o'r't's''''t'y'e'k' 'y'''''''''''''''e'g'n'a'h'c' 'y'r'e'v'e' 'r'o'f' 'n'o'i't'i's'o'p' 't'i'd'e''''s'n'i''''e' 'e'h't' 'f'o' 'h'p'a'r'g'''''''''''''''' 'e'h't' 's'''e'r'e'H' '?'e'p'a'h's' 's'i'h't' 'e'v'a'h' 'h'p'a'r'g' 'e'h't' 's'e'o'd' 'y'h'W''n'n'n'a'w' ''''''''''n'a'w''''''u'o'y' 'f'I' '.'''''''''''''''''''''''''''''''''''''''''''''o't' 'd'n'o'p's'e'r'r'o'c' 't'a'h't' 's'e'o'd'''''''h't' 'x'e'd'n'i' 't'a'h'w''''''''''''''''''e's'a'c' 'g'n'i't'i'd'e' 't'n'e'r''I'r'u'c'n'o'c'-'n'o'n' 'r'o'f' 'n'o'i'''' '''''''''''''''''s'u''''''''' 'y'l'r'a'e'n'i'l''o'i'r'a'v' 'o'd'''''''''''''''''''''''''''''''''''''0'0'4'='t'h'g'i'e'h' '''' ''''''''''''''''https://invisiblecollege.s3-us-west-1.amaz'Y'''onaws.co'''0'0'3'm/braid-meeting-10.''''''0'''''''''''''''4'p'm'/'o'e'd'i'v'='e'p'y't' ''>''''n ''''''''>'o'e'd'i'v''''''''''v'i'd'/'<' ''7'2'=''''-'t'#'mp'''4'='c'r's' 'e'c'r'u'o's'<' 'n'>'s'l'o'r't'n'o'c' 'o'e'd'i'v'<'n'n''''''''''''''.'g'n'i'p'e'e'k'k'o'o'b' 'd'e't'r'o's's'a''''s' 'd'n'A' '/'/' '''''''''' '/'/'n'''n 'n doc.version[id[0]] = id[1]' '''''''n'o'''''''n'i't'a'z'i'm'i'''t'p'O' '/'/' '''''const int''''''''''D''''d''''''''''''''''s'e'p'y't' 'd'n'o'm'a'i'D'[''''D' ''''''''d'n'o'm'a'i'D'd'e'l'l'a'c' ''' ''''''a' ' 'https://github.com/josephg/diamond-types' '' 'n ' if (newItem'n let oparent = findItem(doc, o.originLeft)'''.seq > o.seq) breakn' 'egrate''AutomergeSmol =
(doc: Doc, newItem: Item)''''''''''W'O'L'S' '/'''''''''' '*'*'/' ' => {n const {id}'''''t's'n'o'c''''''t'e'l''' = n''' ','i'ewItemn'''n ' ' // Scan to find the insert locationn'' '''''''i' 't'e'l' ' doc.'[''''''''''''https://en.wikipedia.org/wiki/Range_tre')'e'(']'''e'e'r't' 'e'g'n'a'r'version[id[0]] = id[1]nn'' let p''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'd'e'i''''''u' 't'u'B'''''f'i'd'o'm' 'y'l't'h'g'i'l's''''''''''''''u''' 't'u'B' '.'e'e'r't'-'b' 'a' 't's'u'j' 'y'l'l'a'u't'c'a''''''''''j' 'y'l'l'a'u''''''''''''''''l'l'a't'u'c'a' 's'i''''''' 's' 'e'e'r't' 'e'g'n'a'r' 'y'm' ','d'o'o'h' 'e'h't' 'r'e'd'n'U'''''''''''''''''''''''''y'l'l'a'e'r' 's'i' 'e'e'r't' 'e'g'n'a'r' 'e'h'T''''''''''''''''''''''''''''''''''''' 'a' 's'e's'u' 'y'l'l'a''''l'n'r'e't'n'i' 'e'e'r't' 'e'g'n'a'r' 'e'h'T''''''r'e't'n'I' ''''''''''''' 'm'''I''''''' 'd'n'A'''''''''e'g'n'a'r' 'y'M''''''' 'A'' '''' 'arent = findItem(doc, newIte''>''''''''''''''''''''''''''''''''e'[''h'T' '?'t'h'g'i'r' ','e'e'r'''''https://en.wiki'3'''pedia.org/wiki/Range_tre')'e'(']''''''''''''''''d'n'o'm'a'i'D''k'a'e'w''''d'a'b''''''''''''''''''''3'''''''''''''''''''''''''''''''''''''''''''''.'e'r'e'h' 'g'n'i'o'd' 'm'''I' 't'a'h'w' 'f'o' 'n'o'i't'p'i'r'c's'e'd''''''''''t'a'm' 'r'o'o'p' 'y't't'e'r'p' 'a' 's'i' 's'e'e'r't' 'e'g'n'a'r' 'n'o'''''''''''y't't'e'r'p' 's't'i''t' 'e'g'n'a'r' 'a' 's'i' 's''3'''i'h'T'''''''''''''''''''''''' 'e'l'c'i't''''i'r'a' 'a'i'd'e'p'i'k''4'''i'w' 't'a'h'T''''''''''k' 'I''''''''''''''''''t'''n'd'i'd' 'I' 'e'r'u's' 'm'''4''''I''' Does this have a name? I've been calling it a 'range tree', but I think that name is [taken by another data structure](https://en.wikipedia.org/wiki/Range_tree)n'n'''m''.originLeft)nn let inn // Scan to find the insert locationn for (i ='''''4''''''''''''''''''''''.''''''''''''''' 'r'a'e'n'i'l'Black magic'''''y'r'e''''''''''''''''''''''''''''''''.'a'e'd'i' 'o'n' 'e'v'a'h' 'I''''''''f'o' 'h'c'n'u'''''''''''l'l'e'w' 'd'e'k'r'o'w''b'''' '''''''''''''''''''I have no ide''''''''''''''''''''''''''''''''''''.'t'[''s'e'b' 'e'h't' 'e'b' 'o't' 't'''https://github.com/josephg/diamond-j')'s'(']''u'o' 'd'e'k'r'o'w' '''''''''''t's'e'b' 'e'h't' 's't'a'h't' 'y'h'w' '''a''. ' ' '''''''''''''''''.'t's'e't's'a'f' 'e'h't' 'n'a'r'''''''''''''''' 'e'b' 'o't' 'd'e'n'e'p'p'a'h'''''''''' 'd'e'm'e'e's'''''' 't's'u'''j'n'e'h'w''''' 'r'o'f' 't'c'e'p''Y'''x'e' 'e'w' 't'a'h'w' ''o't''''s'''''''''''''''''''''''''''''''''''''''''''' '.'k'c'e''''''''''''t'p'i'r''''d'''c's'a'v'a''''''''''''''''''t'''s'u'r' 'n'i' 'y'l't'c'e'r'i'd''j'''''''''''''''''''''e'h't' '''n'u'r' 'd'n'a' 't'a'h't'https://github.com/j''''e'w' ','oseph'''l'l'a''''e'h't'g/diamond-types/blob/42a8bc8fb4d44671147ccaf341eee18d77b2d532/benches/yjs.rs'' 'l'l'a' '''n'e'l't't'o'b' 'a' 'w'o'n' 's'i' 'M'S'A'W' 'd'n'a' 't'p'i'r'c's'a'v'a'J''I'''''Rust gives us total control over the memory layout, so we can pack everything in tightly. Unlike in the diagram, each leaf node in my b-tree stores a block of 32 entries, packed in a fixed size array in memory. Inserting with a structure like this results in a little bit of memcpy-ing, but a little bit of memcpy is fine. Memcpy is always faster than I think it will be - CPUs'''''''''''''''''''''''''''' '''''' ' ' ' ' ')'s'j'e'd'o'n''''''''''''''''')'e'''''''v'i't'a'n'(' 'd'n'o'm'a'i'D' 'a'i'v' 'm's'''''''m's'a'w'(' 'd'n'o'm'a'i'D' can copy several bytes per clock cycle. Its not the epic hunt of a main memory lookup'''''('n'n'''.''6'5''''''''n'''i' ''c'r'u''''''''''' 'h'c'i'h'w' '-' ''o's' 'p'e'e'D' ':'g'''''''''''''''''''''''''''e'r''''t's'a'f''u't'''''''''''''''e'r'a'w'd'r'a'h''''''''''.'r'e't'u'p'm'o'c' 'y'm' 'n'o' '''''''''''''''''''''''''''''''''' 's't'a'h't' 'y'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' '''c'u')''r'''''''''''''''''''' 'w'o'n'k' 't'''n'o'd' 'I' ''t's' 'a't'a'd' 'e'h't' 'g'''''''''''' 'n'i' 's't'l'u's'e'r'n'i'g'''''4'9'3'1'n'a'h'C''''x'i'F''''F'''''''' 'r'e't''''''''''''''''''.'I''''y''''''''''''' 'y'l't'n'e't's'i's'n'o'c''t'i'p' 'a' ''('t'a'h'w'')' ''''''''''''''''''''''''''''''''''''''''''''''''''':'''':'''''''''''''''''s't'e'L' '.'*'x'x'''x'x''''nWell, a nearly'''''''''''''''''''''''''''n'a'h't''''''''''n'o'i't'u'c'e'x'e' '''''' 'r'e'w'o'l's' 'x'4''','r'e'b'm'e'm'e'r''' ''''''''''''''*'''''t''''''''''''''''''''''''''*''''''''''' 'd'n'A' flat'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''m'o'r'f''''''a'''i'v''' 'd'e't'a''''''''h'g'u'o'''r'h't'''''''a'e'r'e'n'e'g''''j' ''''''''''''''''M'S'A'W' 's'i' 'y'''''''''''''''t'i' 'n''y'l''u'r' 'I' 'n'e'h'w' 'h'W'n'n'''s''''''''' 'r'''''''''''''''''''''''''''''''''''e'v'i't'a'n' 'n'a'h't' 'r'e'w'o'l's' 'h'c'u'm' 'o's' 's'i' 'm's'a'w''''''''''''''''''g'i'b' 'o's' 's'i' 'p'a'g' 'e'h't' ''''''''''''''t'a'h't' 'y'l'l'a'e'r' 'e'd'n'o'w' 'I''i''''''''''''' 'o't' '''w'o'h' 'w'o'n'k' 't'r'a'h'c' 's'i'h''''''''''''s'''M'S'A'W' 's'e'o'd''''''''''''''''l'l'a'e'r''''''''''''''''''''''''?'h'c'u'm' 't'a'h't' 'n'w'o'd' 't'i' 'w'o'l's' '' ''T'''''''''''''''''''''''r'a'h'c' 's'i'h't' 's's'e'n'r'i'a'f' 'r'o'F''''''''''''''''''''''' 'n'u'r' 's'i' 'k'r'a'm'h'c'n'e'b' ''''''''''s'e'd'u'l'c'n'i'''s'i' 's'i'h'T'''''''''''''' '.'n'o'i's'r'e'v' 'w'o'l's' 'e'h't' ''''''''''''' 't'p'i'r'c'''''''''''''''''''''''a'i'v''' 't's'u'r' 'o't'n'i' 'g'n'i'l'l'a'c'''''''d'e'l'l'a'c' ',''s'a'v'a'j''s'w'o'h's''' '''t'r'a'h'c' line. I wonder'''''''''''''''''''''''''''''''''?''T''''''''''''''' ''''''''' ''''''s'i' 's'i'h't',' 'r'e'b'm'e'''m'e'r' 'd'n''''''s'j'''e'd'o'n''A'.'.''''?'t''''o'S' 'u'o'b'a' 's'i' 's'*''s'*''e'n'y'r''f'I''e't't'i'j''''k' 't'a'h't' 't's'''''''r'e'h't'o'n'a'''a'h'w' if the jitteryness is deletes are marginally faster than ''inserts'(' or somet')'hing?'n'''''''''''''''''h'c'u'm' 't'a'h't' '''''''''''''y'r'o'm'e'm' '''' 'a'''''''''''''''''''''''' 'I' ','h'E'''''''''''''''''''''''e'h't''''''''''''''''''''''g'''''n'''''i'''''w'''''o'''''h's' 's'i''''''s'w'o'''''''''''''''''?'g'n'i'h't'e'''m'o'''s' '''r'o''' ':''''''h'''s' '''''s'''s'e'''n' '''f'i''' 'r'e'd'n'o'w' 'I'''''''''''''''''''''''''''''''''''''''''t'i'b'''''''''''''''''''''''''''''''''''''''''''' 'y'l'''''l'a'n'i'g'''r'a'''''m'''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''a't'''a'd' 'g'n'i'''m'i't''' 'e'h't''' 'f'o''' 't'u'''o' 'p'o'''p' ''''.'''''''''''''''''a'''g'''a' 'o'''i'''t'a'r''' 'e't'''e'l'e'd' '/''' 't'''r'e's'n'i' '''e'h'''t' 'g'n'i'e'e'''s''' 'e'r'''e'w' '''''o'''s' ',''''y'l't'''''''h'g'i'l's''''''''''''''''''''''''''''''4'''''~'''''''''''''n'i'a'''g'''a''''''''''.'g'n'i'''h'''t'e'm'o's' '''r'o' '''s'''t'r'e's'n'i''''' 'n'a'h't''' 'r'e't's'a'f''''' 'e'r'a''' 's'e't'e'l''''''''''''''''''''' 'e'r'u't'c'''u'''r't'''s' ''''''''''' ''' ' ''' ' ' ' ' ' ' '''''''''''e'g'''a'r'o't's' 'a't'a'D''''e'd' '''e'b'y'a'M''''''''''' ' ' ' '''''''''''''''''|' 'e'g'a'u'g'''n'a'L'''''''''''''g'n'a'L' ''''''''''''''b'a'b'o'r'p' 's'''t'I' '.'''''''''''''''|' '-'-'-'-'-'-'-'-' '''''''''''''s' 'e'h't' 'h'g'u'o'h't' '-' ''''.''' '''''a'''''''''''''|' ' ' ' ' ' ' 'S'J' '' ''+''' ''v''ia JS''''''m's'a'w'+''s't'i' 'y'h'w''''''''''''''''''''''''''''' 's'i' 's's'e' JS |''n'y'r'e't't'i'j' 'e'h't' 't'a'h'w' 'a'e'd'i' 'o'n' 'e'v'a'h' 'I' '.'e'n'i'l' ' JS |''t'a'l'f' 'y'l'r'a'e'n' ','l'l'e'W'n'n'''''''''''''''''''''''''':'e'n'i'l' 't'' JS |'a'l'f' 't'a'h't' 'n'i' 'k's'a'b' 'd'n'a''''''e'''''e'l'f'*''''(' 's'j'y' 'o't''''''''''' 'a'i'v''''''''''a'v'i' ''''''' '+''''''S'J'+''''''''''''''''''M'S'A'W'''''''''''''m's'a'w'/'t's'u'R' JS ''' JS ''''''''''s'e'k'o'r't's'y'e'k' '' |'|' 't'x'''''''#''t's'u'R'e'n' 't'i' 'e'e's' 'y'l'e'r'a'b' 'n'' 'a'c' 'u'o'y' 't'''''''''t's'u'R's'' JS |'a'f' 'o's' 's't'i' ','h'O'''''''''''''''''''''' ''' ''' ''''''''''''t's'u'R'''''')'''e' 'v'''i' JS |''''t'''a' 'n'''(''' '''d')'n'''o'''m'''a's'i''''''j'''''''e'''d'''D''o'''n''' '''a'''i'' JS |'''v''' '''m'''s' 't'''s'u'''j'm'''s'''''''d'n'o'm'a'i'' doc'''D''''a'' 'a'''w'd'(''' 'n'd'''n'a'o'''m' 'a'''i'e'r'e'h't' 't'i'b' 'a' 'n'i' 'm'D''o'o'z' 's't'e'l' ','m'H'n''n's''''''''''''''''''''''e'k'i'''''''''s'e'o'g'''''''''''''''''''i''' 'r'''e'''''''''''.'''''''''''''''''''''d'n'o'm'a'i'd'''''''['''''''d''''''''''t's'u'r' 'o't'e't'r'd'''n'o'o'''m'''a'''i''s't'e''r''d'e''g''''''p' 'k'r'a''r'e''m'h'c'n'e'b' 'e'm'a's'there'''''''''''''''''''''' 'k'''r'''''6'9''''''0'.'0'''a'''''m'h'c'n'e'b' 'e'h'T'''''''''''' 'd'n'a' 't'p'''e'h't''i'r'c's'a'v'a'''''''''''''t's'u'r' 'h'g'u'o'r'h't' ''j't's'a'f' 'n'e'v'e' 's't'e'g' 't'I''I''''''''''''''''''''''''''''s'i'h'''''''''''''''''''y'l'e'v'i't'a'n' 'g'n'i'n'n'u'R'''''''''t' 'e'k'i'L' '.'''t' '['''''''''''''''''y'l'''h't'''' ''n'u'r' 'd'n'a' ''''''''''''''''''''''''''''' 'd'n'a' 'm's'a'w' 'p'i'k's' 'e'w' 'f'i' 'r'e't's'a'f' 'n'e'v'e' 's't'e'g' 't'I''l' ''s'e''''''''''''''''f'o' 't'i'b' 'e'l't't'i'l' 'a'r'u't'c'u'r't's' 'a' ''https://github.com/josephg/diamond-types/blob/yjs-style/benches/yjs.rs'h't'i'w' like t''T'f' ''''''''''''y'a'r'r'a' 'n'a' 'n'i' ''''''''''''''''''''''''''s'e'r'u't'c'u'r't's' 'a't'''a'd' 'g'n'i'g'n'a'h'C''''F'''n'n'i'n'''r'a''''''w''' 'd'n'A'W' parent + 1; i < doc.content.length; i++) {n ' || (oparent === parentn ''''''''''' 'y'l'b'a'n'o's'a'e'r''' && (newItem.seq === o.seq)'' || '6'('5'opa''rent'' === parent && (newItem.seq === o.seq)n && id[0] < o.id[0])'' || (oparent === parent && (newItem.seq === o.seq) && id[0] < o.id[0])'' '''1'.'1''' '' ''|| (oparent === parent && (newItem.seq === o.seq)'' || (oparent === parentn && (newItem.seq === o.seq)'' || (oparent === parent && (newItem.seq === o.seq)n && id[0] < o.id[0])'' || (oparent === parent && (newItem.seq === o.seq) && id[0]'' < o.id[0])'' || (oparent === parent && (newItem.seq === o.seq)''''''n'-'-'-'n' ''let '''3'9'1'''o = d'''''' 'r'e'd'n'u'oc.content[i]n let oparent '''''''''''''''''''''''''!'')'g'n'i'm'o'c'n'i' 'c'i'g'a'm' 'k'c'a'l'B''''''''''''''''' 's' 'i's'i'h'T'(' '= findItem(doc, o.originLeft)nn // Should we insert here?n if (oparent < parentn || (oparent === parentn && (newItem.seq === o.seq)n && id[0] < o.id[0])n ) breakn }nn // We've found the position. Insert at position *i*.n doc.content.splice(i, 0, new''Item)n doc.max''6'5'Seq = Math.max(doc'''''r''''0'0'0'5''''1''e'v'':'''o' '.maxSeq, newItem.seq)n}''''''''`''''''''''''''''''''''''''''''''''''''''''''''''''''''''T''' '.'0'0'0','''''''0' '0'0'2' 'd''''''''''''''''''r'e'h't'o' 'h'c'a'e' 'r'o'r'r'i'm'n'u'o'r'a' 's'''''e'''''.''''n'i'l''''''''''''''''e'r'e'h't' 'n'o' 'g'n'i'o'g' 's'' 'o'w't' 'm'o't't'o'b' 'e'h't' 't'a' 'k'o'o'l'''' '''''''''n'''nnThat, my friends, is how you make the computer do a lot le'n'ss wo''''#'#'rk.''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''!''''''''''?'!' 's'i' ''''''' 's't'a'h't' 't'a'h'w' 'r'e'd'n'o'w' 'I' '.'a's'r'e'v' 'e'c'i'v' 'd'n'A' '.'r'e't's'a'f' 's't'e'g' 'm's'a'w'-'t's'u'r' ','w'o'l's' 's'i' 's'j'y' 'n'e'h'w' 's'd'o'i'r'e'P' '''''''''''.'p'u' 'e'n'i'l' 'f'o' 'd'n'i'k' 'm's'a'w'-'t's'u'r' 'd'n'a' 's'j'y' 'f'o' 's's'e'n'y'''''''y'n'r'e't't'i'j' 'e'h't' '-' 'h'u'H'''''''''l'o'o'c' 's't'I' '>''''I'n''n'`'''''l''' 't'u'B''`'n'n'n'6''''5''''t'p'i'r'c's'a'O''v'a'j'`'`'`'n'''''''''a't'a'd' 'e'h't' '''n'n''''''''''''''''''':'s'i'h't' 'e'k'i'l' 's'k'o'o'l' 'e'g'r'e'm'o't'u'a' ','d'e't'c'a'p'm'o'C'''''p'm'o'C''''''m'o't'u'A'''''''''' 's'k'o'o'l' 't'I'''''''''' 'e'r'''o'y' 'f'I' ''' 'y'n'a' 'e'k'a'm' 't'''n's'e'o'd' 'd'n'e'k'c'a'b' 's'r'-'e'g'r'e'm'o't'u'a'''''''''''''''''''''''''' 'd'e'w'''a'l'f' ','l'u'f'i't'u'a''''''s''''s'k'o'o'm' ''e'b'''k'c'a'b' 't's'u'r' 'e'h't'''''' 's'i'h't' 'o't' 'g'n'i'h'c't'''''''t'c'i'w'S''''W''O''y'd'a'e'r'''''''''''''''''''''''''''''Plain string e''9''''0''''2'1'''d''its in JS'''''''' ' ' ' ' ' ' ' ''''''''''''''s'a' 'e'm'a's' 'e'h't' 't'''''''''''''''''''''''''')'g'v's'.'s'r'm'a'_'s'v'_'m'a'('''1'.'1'''''']'''['!''''@'''''''#'n'n':'''s'o'm'l'a'''''''''''e'h't' 'y'l'r'a'e'n' 's'm'r'o'f'r'e'p'''' 's'i' 'e'd'o'c' 'e'h't'' 's't'i' 'e'r'o'f'e'b' '''''''''''''s't'e'g' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''n'.'e'm'i't' 'r'e'v'o' 'e's'r'o'w' 'y'l'l'a'u''''u'd'a'r'g' 'g'n'i't't'e'g'''''''''''''''''''''o'w' 'g'n'i't't'e'g' 'y'l'l'a'u'd'a'r'g'''''''' 'y'l'w''''''''''s's'e'u'g' 'I''''''''''''#'#'''''''''f'o' 't'u'o' 's'e'm'o'c' ' ''o'l'n''s' 's'i' 'e'c'n'a'm'r'o'f'r'e'p' 'y'l'r'a''7'''e'l'C' '.'''''''' 't'u'b' '-' 't'i'b' 'a' 't'u'o' 'g'n'i'h't'y'r'e'v'e'''''''''''''''' 't'u'o' 'n'g'i'h't'y'r'e'v'e'''' '''' ' 'e''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'n'o' 's't'n'e'm'm'o'C''''''''''''' 'f'o' 's't'o'L''F''Read'''s'i' ' f''F'''''''''''''''''n'o' 'k'c'a'b'd'e'e'f' 'd'a'e'R'''''''''' 's't'o'l' 'd'n'A''''S''''''