<snapdata remixID="11134672"><project name="Racers.API" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAABRNJREFUeF7t3T9I3AcYh/Hv9R9eDkFKalWo2lojFIezsVFX29VSlQziUqpdXIpdgqBLR0lSK+IgtGuLdqjgIhTETUMRdShYB1syFNsKpUhLTL0r9wMlR5rcveGVl0ueLEnwvff1Pj540Qym8vl8XvxCIEggRYBB8pxNBAiQEEIF/jfAra0tra+vq/DqnEqlzt/Bi/57Y2OjBgYGim6G6nD8wgUeCnB1dVUtLS0uh6uqqvTVh++oIX2/5L7rX+7o97/+SeZOT0/V1tZW8jEMVL5AUYCbm5uqrq4+/8x39hnvSX9/5fJlpW91lqWU67+lu9VvJZ/9crmc2tvby3ocQ5UtUBTg1NSUBgcHk2e0vb2t5uZmpdNpdXd3a21tTZOTk0mcfX19mpiY0MbGRvK2sbExzc/PJ487m5ubm1N9XZ0yn19T5rMflbu7redey+red5N68ep1nf7yg1569xMd32hMHvfvBzf1c/rKuWY2m61sWd77sgSKApyZmVFPT0/ywN3dXTU1NSWBFf68uLio2dlZ9fb2amhoSB0dHTo6OlImk9Hy8rJqa2vV0NCgnZ0dTU9Pq/DvyPq6V1X9RY8uffq9UjX1yv/5q/6+/Z7SH3+dBJj740DPv9Gle9/e0P33p/XTC6+fv9NdXV1lPQGGKlugKMDDw0Pt7++7vQRfaX1Tl25fK0so9dE32vrtNHkJ3tvb08jISFmPY6iyBR76ImRhYcHti5ACzdW3s6qpebmk0uadOzo+PtbBwYFGR0dLzjPwdAg88vuAUf9B8uC3fZ4OYp7F4wT4RjR9hAoQYCg/xwmQBkIFCDCUn+MESAOhAgQYys9xAqSBUAECDOXnOAHSQKgAAYbyc5wAaSBUgABD+TlOgDQQKkCAofwcJ0AaCBUgwFB+jhMgDYQKEGAoP8cJkAZCBQgwlJ/jBEgDoQIEGMrPcQKkgVABAgzl5zgB0kCoAAGG8nOcAGkgVIAAQ/k5ToA0ECpAgKH8HCdAGggVIMBQfo4TIA2EChBgKD/HCZAGQgUIMJSf4wRIA6ECBBjKz3ECpIFQAQIM5ec4AdJAqAABhvJznABpIFSAAEP5OU6ANBAqQICh/BwnwEc00NnZqfHxcQ0PD1PJBQoQ4GNw+/v7z99a+EHaS0tLam1tvcAPx7O3mgBLfMwfjPBstPBDtU9OTrSysvLsFeP8jAmQAJ2Tsq0jQF6CbcU4TxMgX4Q4J2VbR4A2L6adBQjQGZR1NgECtHkx7SxAgM6grLMJEKDNi2lnAQJ0BmWdTYAAbV5MOwsQoDMo62wCBGjzYtpZgACdQVlnEyBAmxfTzgIE6AzKOpsAAdq8mHYWIEBnUNbZBAjQ5sW0swABOoOyziZAgDYvpp0FCNAZlHU2AQK0eTHtLECAzqCsswkQoM2LaWcBAnQGZZ1NgABtXkw7CxCgMyjrbAIEaPNi2lmAAJ1BWWcTIECbF9POAgToDMo6mwAB2ryYdhYgQGdQ1tkECNDmxbSzAAE6g7LOJkCANi+mnQUI0BmUdTYBArR5Me0sQIDOoKyzCRCgzYtpZwECdAZlnU2AAG1eTDsLEKAzKOtsAgRo82LaWYAAnUFZZxMgQJsX084CBOgMyjqbAAHavJh2FiBAZ1DW2QQI0ObFtLMAATqDss4mQIA2L6adBQjQGZR1NgECtHkx7SxAgM6grLMJEKDNi2lnAQJ0BmWdTYAAbV5MOwsQoDMo62wCBGjzYtpZ4D/yztq3eyi51gAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="Racers.API"><notes></notes><palette><category name="Racers.API" color="40,40,40,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="listify %&apos;jsonString&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:os dados JSON _ em formato de lista&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block s="reportTextSplit"><block var="jsonString"/><l><option>json</option></l></block></block></script></block-definition><block-definition s="value at key %&apos;key&apos; of %&apos;lst&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o valor com chave _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>each item</l><block var="lst"/><script><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="each item"/></block><block var="key"/></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="each item"/></block></block></script></block></script></block></script></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="%&apos;method&apos; url: %&apos;url&apos; send: %&apos;payload&apos; headers: %&apos;headers&apos;" type="reporter" category="sensing"><header></header><code></code><translations>pt:a resposta a _ de _ enviando _ e cabeçalhos _&#xD;</translations><inputs><input type="%s" readonly="true">GET<options>GET&#xD;POST&#xD;PUT&#xD;DELETE</options></input><input type="%s">https://snap.berkeley.edu</input><input type="%s"></input><input type="%mult%l" readonly="true"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>xhr_request(mth, url, dta, hdrs)</l><list><block var="method"/><block var="url"/><block var="payload"/><block var="headers"/></list></block></block></script></block-definition><block-definition s="key: %&apos;key&apos; value: %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:um par (chave: _ , valor: _ )&#xD;</translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="key"/><block var="value"/></list></block></block></script></block-definition><block-definition s="current location" type="reporter" category="sensing"><comment x="0" y="0" w="200" collapsed="false">Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements.  Works only if the user allows snap.berkeley.edu access to location data.  Some browsers also require an HTTPS connection to Snap!.</comment><header></header><code></code><translations>pt:a localização actual do dispositivo&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>callback</l></list></block><block s="doSetVar"><l>callback</l><block s="reportApplyExtension"><l>geo_location(acc?)</l><list><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></block><block s="doWaitUntil"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block s="evaluate"><block var="callback"/><list></list></block></block><l>3</l></block></block><block s="doReport"><block s="evaluate"><block var="callback"/><list></list></block></block></script></block-definition><block-definition s="start $nl username: %&apos;_username&apos;" type="reporter" category="Racers.API"><variables><list struct="atomic" id="95">r</list></variables><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doSetVar"><l>username</l><block var="_username"/></block><block s="doSetVar"><l>r</l><block s="reportURL"><block s="reportJoinWords"><list><l>https://racersapi.billybob456.repl.co/start/</l><block var="username"/><l>/</l></list></block></block></block><block s="doSetVar"><l>r</l><block s="reportTextSplit"><block var="r"/><l><option>json</option></l></block></block><block s="doSetVar"><l>auth</l><custom-block s="key: %s value: %s"><l>Authorization</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="r"/></block></block></custom-block></block><block s="doSetVar"><l>key</l><block s="reportListItem"><l>2</l><block var="auth"/></block></block><block s="doSetVar"><l>raceKey</l><l></l></block><block s="doSetVar"><l>tempRaceKey</l><l></l></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="r"/></block></block></block></script></block-definition><block-definition s="account" type="reporter" category="Racers.API"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>a</l><l>b</l></list></block><block s="doSetVar"><l>a</l><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l>"</l></list></block></autolambda><list></list></block><block s="reportTextSplit"><block s="reportURL"><block s="reportJoinWords"><list><l>https://racersapi.billybob456.repl.co/account/</l><block var="key"/><l>/</l></list></block></block><l>&apos;</l></block></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l></list></block></autolambda><list></list></block></block></block><block s="doSetVar"><l>b</l><block s="reportLetter"><l>1</l><block var="a"/></block></block><block s="doRepeat"><block s="reportDifference"><block s="reportStringSize"><block var="a"/></block><l>2</l></block><script><block s="doSetVar"><l>b</l><block s="reportJoinWords"><list><block var="b"/><block s="reportLetter"><block s="reportSum"><block s="reportStringSize"><block var="b"/></block><l>1</l></block><block var="a"/></block></list></block></block></script></block><block s="doReport"><block s="reportTextSplit"><block var="b"/><l><option>json</option></l></block></block></script></block-definition><block-definition s="multiline %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o texto multilinha _&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="substring of %&apos;string&apos; before %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="175.33333333333334" collapsed="false">Reports the part of the first string up to the first instance of the second string inside it.  If the second string isn&apos;t found, reports the entire first string.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="index"/><l>0</l></block><block var="string"/><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="string"/><l>1</l><block s="reportDifference"><block var="index"/><l>1</l></block></custom-block></block></block></script></block-definition><block-definition s="substring of %&apos;string&apos; after %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="203.33333333333334" collapsed="false">Reports the portion of the first input string starting after the first occurrence of the second string.  If the second string isn&apos;t found in the first string, reports an empty string.</comment><header></header><code></code><translations>pt:o texto de _ depois de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="index"/><l>0</l></block><l></l><custom-block s="substring of %txt from position %n to position %n inclusive"><block var="string"/><block s="reportSum"><block var="index"/><block s="reportStringSize"><block var="marker"/></block></block><l></l></custom-block></block></block></script></block-definition><block-definition s="position of %&apos;small&apos; in %&apos;large&apos;" type="reporter" category="operators"><comment x="0" y="0" w="294" collapsed="false">Reports the character position (starting from 1) of the beginning of the first input string inside the second input string.&#xD;If it&apos;s not found, reports 0.</comment><header></header><code></code><translations>pt:a posição de _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportIfElse"><custom-block s="use case-independent comparison"></custom-block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><custom-block s="to lower case %txt"><block var="small"/></custom-block><custom-block s="to lower case %txt"><block var="large"/></custom-block></list></block><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><block var="small"/><block var="large"/></list></block></block></block></script></block-definition><block-definition s="use case-independent comparisons %&apos;tf&apos;" type="command" category="operators"><comment x="0" y="0" w="225.33333333333334" collapsed="false">If input is TRUE, comparisons made by functions in the string library will be case-independent (so &quot;FOO&quot; = &quot;foo&quot;).  This is the default.&#xD;If input is FALSE, comparisons will be exact.</comment><header></header><code></code><translations>pt:altera comparações ignorando distinção minúsculas/maiúsculas para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doIfElse"><block s="reportNot"><block var="tf"/></block><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_case indepent</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_case indepent</l><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></script><script><block s="doApplyExtension"><l>var_delete(name)</l><list><l>_case indepent</l></list></block></script></block></script></block-definition><block-definition s="substring of %&apos;str&apos; from position %&apos;start&apos; to position %&apos;end&apos; inclusive" type="reporter" category="operators"><comment x="0" y="0" w="297.3333333333333" collapsed="false">Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1).  If the third input is empty, reports the portion from the first position to the end of the string.&#xD;If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.</comment><header></header><code></code><translations>pt:o texto de _ entre as posições _ e _ , inclusive&#xD;</translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportLetter"><block s="reportNumbers"><block var="start"/><block s="reportIfElse"><block s="reportEquals"><block var="end"/><l>0</l></block><block s="reportStringSize"><block var="str"/></block><block var="end"/></block></block><block var="str"/></block></block></block></script></block-definition><block-definition s="text %&apos;string&apos; contains %&apos;marker&apos;" type="predicate" category="operators"><comment x="0" y="0" w="218" collapsed="false">Reports True if the first input string contains the second input string, otherwise false.&#xD;&#xD;Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportGreaterThan"><custom-block s="position of %s in %txt"><block var="marker"/><block var="string"/></custom-block><l>0</l></block></block></script></block-definition><block-definition s="to lower case %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="275.3333333333333" collapsed="false">Reports the input text with lower case letters instead of capital letters in the input.  Uses the user&apos;s locale&apos;s rules for case conversion.</comment><header></header><code></code><translations>pt:em minúsculas _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>txt_lowercase(txt)</l><list><block var="text"/></list></block></block></script></block-definition><block-definition s="use case-independent comparison" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>result</l><block s="reportApplyExtension"><l>var_get(name)</l><list><l>_case indepent</l></list></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>result</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="status" type="reporter" category="Racers.API"><variables><list struct="atomic" id="432">a</list></variables><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>a</l><block s="reportURL"><l>https://racersapi.billybob456.repl.co/status/</l></block></block><block s="doIfElse"><block s="reportEquals"><l></l><block var="a"/></block><script><block s="doReport"><l>Racers API is unavailable to play!</l></block></script><script><block s="doReport"><block var="a"/></block></script></block></script><scripts><script x="343" y="42.36666666666679"><block s="reifyScript"><script></script><list></list></block></script><script x="247.21875" y="183.70000000000016"><custom-block s="%s"><l></l></custom-block></script><script x="335.21875" y="86.70000000000016"><block s="evaluate"><block s="reifyReporter"><script></script><list></list></block><list></list></block></script></scripts></block-definition><block-definition s="duration of run-time %&apos;script&apos;" type="reporter" category="sensing"><variables><list struct="atomic" id="467">a</list></variables><header></header><code></code><translations></translations><inputs><input type="%cs"></input></inputs><script><block s="doSetVar"><l>a</l><block s="getTimer"></block></block><block s="doRun"><block var="script"/><list></list></block><block s="doReport"><block s="reportDifference"><block s="getTimer"></block><block var="a"/></block></block></script></block-definition><block-definition s="%&apos;a&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="races available" type="reporter" category="Racers.API"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportTextSplit"><block s="reportURL"><block s="reportJoinWords"><list><l>https://racersapi.billybob456.repl.co/available-races/</l><block var="key"/><l>/</l></list></block></block><l><option>json</option></l></block></block></script></block-definition><block-definition s="%&apos;action&apos; race (num) %&apos;num&apos; from races %&apos;races&apos;" type="reporter" category="Racers.API"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>view&#xD;select</options></input><input type="%n"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="action"/><l>view</l></block><script><block s="doSetVar"><l>tempRaceKey</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>3</l><block s="reportListItem"><block var="num"/><block var="races"/></block></block></block></block><block s="doReport"><block s="reportListItem"><block var="num"/><block var="races"/></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="action"/><l>select</l></block><script><block s="doSetVar"><l>raceKey</l><block var="tempRaceKey"/></block><block s="doReport"><l>Selected!</l></block></script></block></script></block></script></block-definition><block-definition s="current car" type="reporter" category="Racers.API"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><custom-block s="account"></custom-block></block></block></block></script></block-definition><block-definition s="race" type="reporter" category="Racers.API"><variables><list struct="atomic" id="551">a</list></variables><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>a</l><block s="reportTextSplit"><block s="reportURL"><block s="reportJoinWords"><list><l>racersapi.billybob456.repl.co/race/</l><block var="key"/><l>/</l><block var="raceKey"/><l>/</l></list></block></block><l><option>json</option></l></block></block><block s="doSetVar"><l>key</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="a"/></block></block></block><block s="doSetVar"><l>raceKey</l><l></l></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="a"/></block></block></block></script></block-definition><block-definition s="Login $nl key: %&apos;key&apos;" type="command" category="Racers.API"><header></header><code></code><translations></translations><inputs><input type="%txt"></input></inputs><script><block s="doSetVar"><l>tempRaceKey</l><l>0</l></block><block s="doSetVar"><l>raceKey</l><l></l></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>auth</l><custom-block s="key: %s value: %s"><l>Authorization</l><block var="key"/></custom-block></block><block s="doSetVar"><l>key</l><block var="key"/></block><block s="doSetVar"><l>username</l><custom-block s="value at key %s of %l"><l>username</l><custom-block s="account"></custom-block></custom-block></block></script><l>error</l><script><block s="doSetVar"><l>auth</l><l></l></block><block s="doSetVar"><l>key</l><l></l></block><block s="doSetVar"><l>username</l><l></l></block><custom-block s="error %txt"><l>Your key is invalid!</l></custom-block></script></custom-block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block var="action"/><block var="handler"/><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="msg"/></list></block></script></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="%&apos;action&apos; car (num) %&apos;num&apos; from all cars" type="reporter" category="Racers.API"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>view&#xD;select</options></input><input type="%n"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="action"/><l>view</l></block><script><block s="doReport"><block s="reportListItem"><block var="num"/><block s="reportTextSplit"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportURL"><l>racersapi.billybob456.repl.co/available-cars/</l></block><l><option>json</option></l></block></block></block><l><option>json</option></l></block></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="action"/><l>select</l></block><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportListItem"><block var="num"/><block s="reportTextSplit"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportURL"><l>racersapi.billybob456.repl.co/available-cars/</l></block><l><option>json</option></l></block></block></block><l><option>json</option></l></block></block></block><block s="doSetVar"><l>carKey</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>4</l><block var="a"/></block></block></block><block s="doReport"><l>Selected!</l></block></script></block></script></block></script></block-definition><block-definition s="buy car" type="reporter" category="Racers.API"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListAttribute"><l><option>flatten</option></l><block s="reportTextSplit"><block s="reportURL"><block s="reportJoinWords"><list><l>racersapi.billybob456.repl.co/buy-car/</l><block var="key"/><l>/</l><block var="carKey"/><l>/</l></list></block></block><l><option>json</option></l></block></block></block></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="776"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="777"></list></costumes><sounds><list struct="atomic" id="778"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="783"><costumes><list struct="atomic" id="784"></list></costumes><sounds><list struct="atomic" id="785"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="20"><custom-block s="status"><variables><variable name="a"><l>Racers API is ready to play!</l></variable></variables></custom-block></script><script x="30" y="49.83333333333334"><custom-block s="Login %br key: %txt"><l></l></custom-block></script><script x="30" y="99.66666666666669"><custom-block s="start %br username: %txt"><l>hello</l><variables><variable name="r"><list id="794"><item><list struct="atomic" id="795">key,eyd1c2VybmFtZSc6ICdoZWxsbycsICdjYXInOiB7J25hbWUnOiAnSG9uZGEgQ2l2aWMnLCAndG9wIHNwZWVkJzogMTQ1LCAncHJpY2UnOiAxNDUwMDAsICdrZXknOiAnZXlkdVlXMWxKem9nSjBodmJtUmhJRU5wZG1sakp5d2dKM1J2Y0NCemNHVmxaQ2M2SURFME5Td2dKM0J5YVdObEp6b2dNVFExTURBd2ZRPT0nfSwgJ2NvaW5zJzogMTAwMDAwfQ==</list></item><item><list struct="atomic" id="796">message,Welcome to Racers.API! Have fun!</list></item></list></variable></variables></custom-block></script><script x="30" y="143.50000000000003"><custom-block s="account"></custom-block></script><script x="30" y="173.33333333333337"><custom-block s="current car"></custom-block></script><script x="30" y="203.16666666666674"><custom-block s="races available"></custom-block></script><script x="30" y="233.00000000000006"><custom-block s="%s race (num) %n from races %l"><l>view</l><l>1</l><custom-block s="races available"></custom-block></custom-block></script><script x="30" y="267.00000000000006"><custom-block s="%s race (num) %n from races %l"><l>select</l><l>1</l><custom-block s="races available"></custom-block></custom-block></script><script x="30" y="301.00000000000006"><custom-block s="race"><variables><variable name="a"><list id="811"><item><list struct="atomic" id="812">key,eyJ1c2VybmFtZSI6ICJoZWxsbyIsICJjYXIiOiB7Im5hbWUiOiAiSG9uZGEgQ2l2aWMiLCAidG9wIHNwZWVkIjogMTQ1fSwgImNvaW5zIjogMTE0OTk0fQ==</list></item><item><list struct="atomic" id="813">message,Well done! You won your race as well as $4998!</list></item></list></variable></variables></custom-block></script><script x="30" y="330.83333333333337"><custom-block s="%s car (num) %n from all cars"><l>view</l><l>1</l></custom-block></script><script x="30" y="364.83333333333337"><custom-block s="%s car (num) %n from all cars"><l>select</l><l>1</l></custom-block></script><script x="30" y="398.83333333333337"><custom-block s="buy car"></custom-block></script><script x="30" y="428.66666666666674"><block s="doSetVar"><l>auth</l><l></l><comment w="90" collapsed="false">To clear your keys and such.</comment></block><block s="doSetVar"><l>key</l><l></l></block><block s="doSetVar"><l>username</l><l></l></block><block s="doSetVar"><l>carKey</l><l></l></block><block s="doSetVar"><l>raceKey</l><l></l></block></script></scripts></sprite><watcher var="username" style="normal" x="10" y="10" color="243,118,29"/><watcher var="auth" style="normal" x="10" y="31.000001999999995" color="243,118,29" hidden="true"/><watcher var="key" style="normal" x="10" y="52.00000399999999" color="243,118,29" hidden="true"/><watcher var="carKey" style="normal" x="10" y="94.00000799999998" color="243,118,29" hidden="true"/><watcher var="tempRaceKey" style="normal" x="10" y="115.00000999999997" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="username"><l>hello</l></variable><variable name="auth"><list struct="atomic" id="842">Authorization,eyd1c2VybmFtZSc6ICdoZWxsbycsICdjYXInOiB7J25hbWUnOiAnSG9uZGEgQ2l2aWMnLCAndG9wIHNwZWVkJzogMTQ1LCAncHJpY2UnOiAxNDUwMDAsICdrZXknOiAnZXlkdVlXMWxKem9nSjBodmJtUmhJRU5wZG1sakp5d2dKM1J2Y0NCemNHVmxaQ2M2SURFME5Td2dKM0J5YVdObEp6b2dNVFExTURBd2ZRPT0nfSwgJ2NvaW5zJzogMTAwMDAwfQ==</list></variable><variable name="key"><l>eyd1c2VybmFtZSc6ICdoZWxsbycsICdjYXInOiB7J25hbWUnOiAnSG9uZGEgQ2l2aWMnLCAndG9wIHNwZWVkJzogMTQ1LCAncHJpY2UnOiAxNDUwMDAsICdrZXknOiAnZXlkdVlXMWxKem9nSjBodmJtUmhJRU5wZG1sakp5d2dKM1J2Y0NCemNHVmxaQ2M2SURFME5Td2dKM0J5YVdObEp6b2dNVFExTURBd2ZRPT0nfSwgJ2NvaW5zJzogMTAwMDAwfQ==</l></variable><variable name="carKey"><l></l></variable><variable name="raceKey"><l>0</l></variable><variable name="tempRaceKey"><l>0</l></variable></variables></scene></scenes></project><media name="Racers.API" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>