Character data represents textual content.

The data type character is intended to represent textual data such as actual texts, names of objects, and other contnet that is intended to help both you and the audience you are trying to reach better understand your data.

name <- "Dyer"
sport <- "Frolf"

The two variables above have a sequence of characters enclosed by a double quote. You can use a single quote instead, however the enclosing quoting characters must be the same (e.g., you cannot start with a single quote and end with a double).

Lengths

The length of a string is a measure of how many varibles there are, not the number of characters within it. For example, the length of dyer is

length(name)
[1] 1

because it only has one character but the number of characters within it is:

nchar(name)
[1] 4

Length is defined specifically on the number of elements in a vector, and technically the variable dyer is a vector of length one. If we concatinate them into a vector (go see the vector content)

phrase <- c( name, sport )

we find that it has a length of 2

length(phrase)
[1] 2

And if we ask the vector how many characters are in the elements it contains, it gives us a vector of numeric types representing the number of letters in each of the elements.

nchar(phrase)
[1] 4 5

Putting Character Objects Together

The binary + operator has not been defined for objects of class character, which is understandable once we consider all the different ways we may want to put the values contained in the variables together. If you try it, R will complain.

name + sport
Error in name + sport: non-numeric argument to binary operator

The paste() function is designed to take a collection of character variables and smush them togethers. By default, it inserts a space between each of the variables and/or values passed to it.

paste( name, "plays", sport )
[1] "Dyer plays Frolf"
Dyer plays Frolf

Although, you can have any kind of separator you like:

paste(name, sport, sep=" is no good at ")
[1] "Dyer is no good at Frolf"
Dyer is no good at Frolf

The elements you pass to paste() do not need to be held in variables, you can put quoted character values in there as well.

paste( name, " the ", sport, "er", sep="") 
[1] "Dyer the Frolfer"
Dyer the Frolfer

If you have a vector of character types, by default, it considers the pasting operation to be applied to every element of the vector.

paste( phrase , "!")
[1] "Dyer !"  "Frolf !"
Dyer !

Frolf !

However if you intention is to take the elements of the vector and paste them together, then you need to specify that using the collapse optional argument. By default, it is set to NULL, and that state tells the function to apply the paste()-ing to each element. However, if you set collapse to something other than NULL, it will use that to take all the elements and put them into a single response.

paste( phrase, collapse = " is not good at ") 
[1] "Dyer is not good at Frolf"
Dyer is not good at Frolf

String Operations

Many times, we need to extract components from within a longer character element. Here is a longer bit of text as an example.

corpus <- "An environmental impact statement (EIS), under United States environmental law, is a document required by the 1969 National Environmental Policy Act (NEPA) for certain actions 'significantly affecting the quality of the human environment'.[1] An EIS is a tool for decision making. It describes the positive and negative environmental effects of a proposed action, and it usually also lists one or more alternative actions that may be chosen instead of the action described in the EIS. Several U.S. state governments require that a document similar to an EIS be submitted to the state for certain actions. For example, in California, an Environmental Impact Report (EIR) must be submitted to the state for certain actions, as described in the California Environmental Quality Act (CEQA). One of the primary authors of the act is Lynton K. Caldwell."

Splits

We can split the original string into several components by specifying which particular character or set of characters we wish to use to break it apart. Here is an example using the space character to pull it apart into words.

str_split( corpus, pattern=" ", simplify=TRUE)
     [,1] [,2]            [,3]     [,4]        [,5]     [,6]    [,7]    
[1,] "An" "environmental" "impact" "statement" "(EIS)," "under" "United"
     [,8]     [,9]            [,10]  [,11] [,12] [,13]      [,14]      [,15]
[1,] "States" "environmental" "law," "is"  "a"   "document" "required" "by" 
     [,16] [,17]  [,18]      [,19]           [,20]    [,21] [,22]    [,23]
[1,] "the" "1969" "National" "Environmental" "Policy" "Act" "(NEPA)" "for"
     [,24]     [,25]     [,26]            [,27]       [,28] [,29]     [,30]
[1,] "certain" "actions" "'significantly" "affecting" "the" "quality" "of" 
     [,31] [,32]   [,33]              [,34] [,35] [,36] [,37] [,38]  [,39]
[1,] "the" "human" "environment'.[1]" "An"  "EIS" "is"  "a"   "tool" "for"
     [,40]      [,41]     [,42] [,43]       [,44] [,45]      [,46] [,47]     
[1,] "decision" "making." "It"  "describes" "the" "positive" "and" "negative"
     [,48]           [,49]     [,50] [,51] [,52]      [,53]     [,54] [,55]
[1,] "environmental" "effects" "of"  "a"   "proposed" "action," "and" "it" 
     [,56]     [,57]  [,58]   [,59] [,60] [,61]  [,62]         [,63]     [,64] 
[1,] "usually" "also" "lists" "one" "or"  "more" "alternative" "actions" "that"
     [,65] [,66] [,67]    [,68]     [,69] [,70] [,71]    [,72]       [,73]
[1,] "may" "be"  "chosen" "instead" "of"  "the" "action" "described" "in" 
     [,74] [,75]  [,76]     [,77]  [,78]   [,79]         [,80]     [,81]  [,82]
[1,] "the" "EIS." "Several" "U.S." "state" "governments" "require" "that" "a"  
     [,83]      [,84]     [,85] [,86] [,87] [,88] [,89]       [,90] [,91]
[1,] "document" "similar" "to"  "an"  "EIS" "be"  "submitted" "to"  "the"
     [,92]   [,93] [,94]     [,95]      [,96] [,97]      [,98] [,99]        
[1,] "state" "for" "certain" "actions." "For" "example," "in"  "California,"
     [,100] [,101]          [,102]   [,103]   [,104]  [,105] [,106] [,107]     
[1,] "an"   "Environmental" "Impact" "Report" "(EIR)" "must" "be"   "submitted"
     [,108] [,109] [,110]  [,111] [,112]    [,113]     [,114] [,115]     
[1,] "to"   "the"  "state" "for"  "certain" "actions," "as"   "described"
     [,116] [,117] [,118]       [,119]          [,120]    [,121] [,122]   
[1,] "in"   "the"  "California" "Environmental" "Quality" "Act"  "(CEQA)."
     [,123] [,124] [,125] [,126]    [,127]    [,128] [,129] [,130] [,131]
[1,] "One"  "of"   "the"  "primary" "authors" "of"   "the"  "act"  "is"  
     [,132]   [,133] [,134]     
[1,] "Lynton" "K."   "Caldwell."
An

environmental

impact

statement

(EIS),

under

United

States

environmental

law,

is

a

document

required

by

the

1969

National

Environmental

Policy

Act

(NEPA)

for

certain

actions

'significantly

affecting

the

quality

of

the

human

environment'.[1]

An

EIS

is

a

tool

for

decision

making.

It

describes

the

positive

and

negative

environmental

effects

of

a

proposed

action,

and

it

usually

also

lists

one

or

more

alternative

actions

that

may

be

chosen

instead

of

the

action

described

in

the

EIS.

Several

U.S.

state

governments

require

that

a

document

similar

to

an

EIS

be

submitted

to

the

state

for

certain

actions.

For

example,

in

California,

an

Environmental

Impact

Report

(EIR)

must

be

submitted

to

the

state

for

certain

actions,

as

described

in

the

California

Environmental

Quality

Act

(CEQA).

One

of

the

primary

authors

of

the

act

is

Lynton

K.

Caldwell.

which shows 134 words in the text.

I need to point out that I added the simplify=TRUE option to str_split. Had I not done that, it would have returned a list object that contained the individual vector of words. There are various reasons that it returns a list, none of which I can frankly understand, that is just the way the authors of the function made it.

Substrings

There are two different things you may want to do with substrings; find them and replace them. Here are some ways to figure out where they are.

str_detect(corpus, "Environment")
[1] TRUE
str_count( corpus, "Environment")
[1] 3
str_locate_all( corpus, "Environment")
[[1]]
     start end
[1,]   125 135
[2,]   637 647
[3,]   754 764

We can also replace instances of one substring with another.

str_replace_all(corpus, "California", "Virginia")
[1] "An environmental impact statement (EIS), under United States environmental law, is a document required by the 1969 National Environmental Policy Act (NEPA) for certain actions 'significantly affecting the quality of the human environment'.[1] An EIS is a tool for decision making. It describes the positive and negative environmental effects of a proposed action, and it usually also lists one or more alternative actions that may be chosen instead of the action described in the EIS. Several U.S. state governments require that a document similar to an EIS be submitted to the state for certain actions. For example, in Virginia, an Environmental Impact Report (EIR) must be submitted to the state for certain actions, as described in the Virginia Environmental Quality Act (CEQA). One of the primary authors of the act is Lynton K. Caldwell."
An environmental impact statement (EIS), under United States environmental law, is a document required by the 1969 National Environmental Policy Act (NEPA) for certain actions 'significantly affecting the quality of the human environment'.[1] An EIS is a tool for decision making. It describes the positive and negative environmental effects of a proposed action, and it usually also lists one or more alternative actions that may be chosen instead of the action described in the EIS. Several U.S. state governments require that a document similar to an EIS be submitted to the state for certain actions. For example, in Virginia, an Environmental Impact Report (EIR) must be submitted to the state for certain actions, as described in the Virginia Environmental Quality Act (CEQA). One of the primary authors of the act is Lynton K. Caldwell.

There is a lot more fun stuff to do with string based data.

LS0tCnRpdGxlOiAiQ2hhcmFjdGVyIERhdGEiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIGNzczogImVudnM1NDMtc3R5bGVzLmNzcyIKLS0tCgpgYGB7ciBzdGFydHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KCB0aWR5dmVyc2UgKQpgYGAKCgoKPiBDaGFyYWN0ZXIgZGF0YSByZXByZXNlbnRzIHRleHR1YWwgY29udGVudC4KClRoZSBkYXRhIHR5cGUgYGNoYXJhY3RlcmAgaXMgaW50ZW5kZWQgdG8gcmVwcmVzZW50IHRleHR1YWwgZGF0YSBzdWNoIGFzICphY3R1YWwgdGV4dHMqLCBuYW1lcyBvZiBvYmplY3RzLCBhbmQgb3RoZXIgY29udG5ldCB0aGF0IGlzIGludGVuZGVkIHRvIGhlbHAgYm90aCB5b3UgYW5kIHRoZSBhdWRpZW5jZSB5b3UgYXJlIHRyeWluZyB0byByZWFjaCBiZXR0ZXIgdW5kZXJzdGFuZCB5b3VyIGRhdGEuIAoKYGBge3J9Cm5hbWUgPC0gIkR5ZXIiCnNwb3J0IDwtICJGcm9sZiIKYGBgCgpUaGUgdHdvIHZhcmlhYmxlcyBhYm92ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBlbmNsb3NlZCBieSBhIGRvdWJsZSBxdW90ZS4gIFlvdSBjYW4gdXNlIGEgc2luZ2xlIHF1b3RlIGluc3RlYWQsICpob3dldmVyKiB0aGUgZW5jbG9zaW5nIHF1b3RpbmcgY2hhcmFjdGVycyBtdXN0IGJlIHRoZSBzYW1lIChlLmcuLCB5b3UgY2Fubm90IHN0YXJ0IHdpdGggYSBzaW5nbGUgcXVvdGUgYW5kIGVuZCB3aXRoIGEgZG91YmxlKS4KCiMjIExlbmd0aHMKClRoZSBsZW5ndGggb2YgYSBzdHJpbmcgaXMgYSBtZWFzdXJlIG9mIGhvdyBtYW55IHZhcmlibGVzIHRoZXJlIGFyZSwgbm90IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aXRoaW4gaXQuICBGb3IgZXhhbXBsZSwgdGhlIGxlbmd0aCBvZiBgZHllcmAgaXMKCmBgYHtyfQpsZW5ndGgobmFtZSkKYGBgCgpiZWNhdXNlIGl0IG9ubHkgaGFzIG9uZSBjaGFyYWN0ZXIgYnV0IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aXRoaW4gaXQgaXM6CgpgYGB7cn0KbmNoYXIobmFtZSkKYGBgCgpMZW5ndGggaXMgZGVmaW5lZCBzcGVjaWZpY2FsbHkgb24gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHZlY3RvciwgYW5kIHRlY2huaWNhbGx5IHRoZSB2YXJpYWJsZSBgZHllcmAgaXMgYSB2ZWN0b3Igb2YgbGVuZ3RoIG9uZS4gIElmIHdlIGNvbmNhdGluYXRlIHRoZW0gaW50byBhIHZlY3RvciAoZ28gc2VlIHRoZSB2ZWN0b3IgY29udGVudCkKCmBgYHtyfQpwaHJhc2UgPC0gYyggbmFtZSwgc3BvcnQgKQpgYGAKCndlIGZpbmQgdGhhdCBpdCBoYXMgYSBsZW5ndGggb2YgMgoKYGBge3J9Cmxlbmd0aChwaHJhc2UpCmBgYAoKQW5kIGlmIHdlIGFzayB0aGUgdmVjdG9yIGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIGluIHRoZSBlbGVtZW50cyBpdCBjb250YWlucywgaXQgZ2l2ZXMgdXMgYSB2ZWN0b3Igb2YgbnVtZXJpYyB0eXBlcyByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBsZXR0ZXJzIGluIGVhY2ggb2YgdGhlIGVsZW1lbnRzLgoKYGBge3J9Cm5jaGFyKHBocmFzZSkKYGBgCgoKCiMjIFB1dHRpbmcgQ2hhcmFjdGVyIE9iamVjdHMgVG9nZXRoZXIKClRoZSBiaW5hcnkgYCtgIG9wZXJhdG9yIGhhcyBub3QgYmVlbiBkZWZpbmVkIGZvciBvYmplY3RzIG9mIGNsYXNzIGBjaGFyYWN0ZXJgLCB3aGljaCBpcyB1bmRlcnN0YW5kYWJsZSBvbmNlIHdlIGNvbnNpZGVyIGFsbCB0aGUgZGlmZmVyZW50IHdheXMgd2UgbWF5IHdhbnQgdG8gcHV0IHRoZSB2YWx1ZXMgY29udGFpbmVkIGluIHRoZSB2YXJpYWJsZXMgdG9nZXRoZXIuICBJZiB5b3UgdHJ5IGl0LCBgUmAgd2lsbCBjb21wbGFpbi4KCmBgYHtyLCBlcnJvcj1UUlVFfQpuYW1lICsgc3BvcnQKYGBgCgpUaGUgYHBhc3RlKClgIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIHRha2UgYSBjb2xsZWN0aW9uIG9mIGBjaGFyYWN0ZXJgIHZhcmlhYmxlcyBhbmQgc211c2ggdGhlbSB0b2dldGhlcnMuICBCeSBkZWZhdWx0LCBpdCBpbnNlcnRzIGEgc3BhY2UgYmV0d2VlbiBlYWNoIG9mIHRoZSB2YXJpYWJsZXMgYW5kL29yIHZhbHVlcyBwYXNzZWQgdG8gaXQuCgoKYGBge3J9CnBhc3RlKCBuYW1lLCAicGxheXMiLCBzcG9ydCApCmBgYAoKQWx0aG91Z2gsIHlvdSBjYW4gaGF2ZSBhbnkga2luZCBvZiBzZXBhcmF0b3IgeW91IGxpa2U6CgpgYGB7cn0KcGFzdGUobmFtZSwgc3BvcnQsIHNlcD0iIGlzIG5vIGdvb2QgYXQgIikKYGBgCgpUaGUgZWxlbWVudHMgeW91IHBhc3MgdG8gYHBhc3RlKClgIGRvIG5vdCBuZWVkIHRvIGJlIGhlbGQgaW4gdmFyaWFibGVzLCB5b3UgY2FuIHB1dCBxdW90ZWQgYGNoYXJhY3RlcmAgdmFsdWVzIGluIHRoZXJlIGFzIHdlbGwuCgpgYGB7cn0KcGFzdGUoIG5hbWUsICIgdGhlICIsIHNwb3J0LCAiZXIiLCBzZXA9IiIpIApgYGAKCgpJZiB5b3UgaGF2ZSBhIHZlY3RvciBvZiBgY2hhcmFjdGVyYCB0eXBlcywgYnkgZGVmYXVsdCwgaXQgY29uc2lkZXJzIHRoZSBwYXN0aW5nIG9wZXJhdGlvbiB0byBiZSBhcHBsaWVkIHRvIGV2ZXJ5IGVsZW1lbnQgb2YgdGhlIHZlY3Rvci4KCmBgYHtyfQpwYXN0ZSggcGhyYXNlICwgIiEiKQpgYGAKCkhvd2V2ZXIgaWYgeW91IGludGVudGlvbiBpcyB0byB0YWtlIHRoZSBlbGVtZW50cyBvZiB0aGUgdmVjdG9yIGFuZCBwYXN0ZSB0aGVtIHRvZ2V0aGVyLCB0aGVuIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhhdCB1c2luZyB0aGUgYGNvbGxhcHNlYCBvcHRpb25hbCBhcmd1bWVudC4gIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBgTlVMTGAsIGFuZCB0aGF0IHN0YXRlIHRlbGxzIHRoZSBmdW5jdGlvbiB0byBhcHBseSB0aGUgcGFzdGUoKS1pbmcgdG8gZWFjaCBlbGVtZW50LiAgSG93ZXZlciwgaWYgeW91IHNldCBgY29sbGFwc2VgIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGBOVUxMYCwgaXQgd2lsbCB1c2UgdGhhdCB0byB0YWtlIGFsbCB0aGUgZWxlbWVudHMgYW5kIHB1dCB0aGVtIGludG8gYSBzaW5nbGUgcmVzcG9uc2UuCgpgYGB7cn0KcGFzdGUoIHBocmFzZSwgY29sbGFwc2UgPSAiIGlzIG5vdCBnb29kIGF0ICIpIApgYGAKCiMjIFN0cmluZyBPcGVyYXRpb25zCgpNYW55IHRpbWVzLCB3ZSBuZWVkIHRvIGV4dHJhY3QgY29tcG9uZW50cyBmcm9tIHdpdGhpbiBhIGxvbmdlciBgY2hhcmFjdGVyYCBlbGVtZW50LiAgSGVyZSBpcyBhIGxvbmdlciBiaXQgb2YgdGV4dCBhcyBhbiBleGFtcGxlLgoKYGBge3J9CmNvcnB1cyA8LSAiQW4gZW52aXJvbm1lbnRhbCBpbXBhY3Qgc3RhdGVtZW50IChFSVMpLCB1bmRlciBVbml0ZWQgU3RhdGVzIGVudmlyb25tZW50YWwgbGF3LCBpcyBhIGRvY3VtZW50IHJlcXVpcmVkIGJ5IHRoZSAxOTY5IE5hdGlvbmFsIEVudmlyb25tZW50YWwgUG9saWN5IEFjdCAoTkVQQSkgZm9yIGNlcnRhaW4gYWN0aW9ucyAnc2lnbmlmaWNhbnRseSBhZmZlY3RpbmcgdGhlIHF1YWxpdHkgb2YgdGhlIGh1bWFuIGVudmlyb25tZW50Jy5bMV0gQW4gRUlTIGlzIGEgdG9vbCBmb3IgZGVjaXNpb24gbWFraW5nLiBJdCBkZXNjcmliZXMgdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBlbnZpcm9ubWVudGFsIGVmZmVjdHMgb2YgYSBwcm9wb3NlZCBhY3Rpb24sIGFuZCBpdCB1c3VhbGx5IGFsc28gbGlzdHMgb25lIG9yIG1vcmUgYWx0ZXJuYXRpdmUgYWN0aW9ucyB0aGF0IG1heSBiZSBjaG9zZW4gaW5zdGVhZCBvZiB0aGUgYWN0aW9uIGRlc2NyaWJlZCBpbiB0aGUgRUlTLiBTZXZlcmFsIFUuUy4gc3RhdGUgZ292ZXJubWVudHMgcmVxdWlyZSB0aGF0IGEgZG9jdW1lbnQgc2ltaWxhciB0byBhbiBFSVMgYmUgc3VibWl0dGVkIHRvIHRoZSBzdGF0ZSBmb3IgY2VydGFpbiBhY3Rpb25zLiBGb3IgZXhhbXBsZSwgaW4gQ2FsaWZvcm5pYSwgYW4gRW52aXJvbm1lbnRhbCBJbXBhY3QgUmVwb3J0IChFSVIpIG11c3QgYmUgc3VibWl0dGVkIHRvIHRoZSBzdGF0ZSBmb3IgY2VydGFpbiBhY3Rpb25zLCBhcyBkZXNjcmliZWQgaW4gdGhlIENhbGlmb3JuaWEgRW52aXJvbm1lbnRhbCBRdWFsaXR5IEFjdCAoQ0VRQSkuIE9uZSBvZiB0aGUgcHJpbWFyeSBhdXRob3JzIG9mIHRoZSBhY3QgaXMgTHludG9uIEsuIENhbGR3ZWxsLiIKYGBgCgojIyMgU3BsaXRzCgpXZSBjYW4gc3BsaXQgdGhlIG9yaWdpbmFsIHN0cmluZyBpbnRvIHNldmVyYWwgY29tcG9uZW50cyBieSBzcGVjaWZ5aW5nIHdoaWNoIHBhcnRpY3VsYXIgY2hhcmFjdGVyIG9yIHNldCBvZiBjaGFyYWN0ZXJzIHdlIHdpc2ggdG8gdXNlIHRvIGJyZWFrIGl0IGFwYXJ0LiAgSGVyZSBpcyBhbiBleGFtcGxlIHVzaW5nIHRoZSBzcGFjZSBjaGFyYWN0ZXIgdG8gcHVsbCBpdCBhcGFydCBpbnRvIHdvcmRzLgoKYGBge3J9CnN0cl9zcGxpdCggY29ycHVzLCBwYXR0ZXJuPSIgIiwgc2ltcGxpZnk9VFJVRSkKYGBgCgp3aGljaCBzaG93cyBgciBsZW5ndGgoc3RyX3NwbGl0KCBjb3JwdXMsIHBhdHRlcm49IiAiLCBzaW1wbGlmeT1UUlVFKSlgIHdvcmRzIGluIHRoZSB0ZXh0LiAgCgo8ZGl2IGNsYXNzPSJib3gteWVsbG93Ij5JIG5lZWQgdG8gcG9pbnQgb3V0IHRoYXQgSSBhZGRlZCB0aGUgYHNpbXBsaWZ5PVRSVUVgIG9wdGlvbiB0byBgc3RyX3NwbGl0YC4gIEhhZCBJIG5vdCBkb25lIHRoYXQsIGl0IHdvdWxkIGhhdmUgcmV0dXJuZWQgYSBbbGlzdF0oLi4vbGlzdHMvbmFycmlhdGl2ZS5uYi5odG1sKSBvYmplY3QgdGhhdCBjb250YWluZWQgdGhlIGluZGl2aWR1YWwgdmVjdG9yIG9mIHdvcmRzLiBUaGVyZSBhcmUgdmFyaW91cyByZWFzb25zIHRoYXQgaXQgcmV0dXJucyBhIGxpc3QsIG5vbmUgb2Ygd2hpY2ggSSBjYW4gZnJhbmtseSB1bmRlcnN0YW5kLCB0aGF0IGlzIGp1c3QgdGhlIHdheSB0aGUgYXV0aG9ycyBvZiB0aGUgZnVuY3Rpb24gbWFkZSBpdC48L2Rpdj4KCiMjIFN1YnN0cmluZ3MKClRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHRoaW5ncyB5b3UgbWF5IHdhbnQgdG8gZG8gd2l0aCBzdWJzdHJpbmdzOyBmaW5kIHRoZW0gYW5kIHJlcGxhY2UgdGhlbS4gIEhlcmUgYXJlIHNvbWUgd2F5cyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXkgYXJlLgoKYGBge3J9CnN0cl9kZXRlY3QoY29ycHVzLCAiRW52aXJvbm1lbnQiKQpgYGAKCmBgYHtyfQpzdHJfY291bnQoIGNvcnB1cywgIkVudmlyb25tZW50IikKYGBgCgpgYGB7cn0Kc3RyX2xvY2F0ZV9hbGwoIGNvcnB1cywgIkVudmlyb25tZW50IikKYGBgCgpXZSBjYW4gYWxzbyByZXBsYWNlIGluc3RhbmNlcyBvZiBvbmUgc3Vic3RyaW5nIHdpdGggYW5vdGhlci4KCmBgYHtyfQpzdHJfcmVwbGFjZV9hbGwoY29ycHVzLCAiQ2FsaWZvcm5pYSIsICJWaXJnaW5pYSIpCmBgYAoKVGhlcmUgaXMgYSBsb3QgbW9yZSBmdW4gc3R1ZmYgdG8gZG8gd2l0aCBzdHJpbmcgYmFzZWQgZGF0YS4KCgoKCgotLSAKCgo=