<snapdata remixID="14207861"><project name="Tubbi" app="Snap! 10.4.6, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Tubbi"><notes></notes><palette><category name="MQTT" color="143,0,100,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="$cloudOutline MQTT connect to %&apos;broker&apos; %&apos;options&apos;" type="command" category="MQTT"><comment x="0" y="0" w="455" collapsed="false">Connect to a broker&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1. username (some brokers need this)&#xD;2. password (some brokers need this)&#xD;3. keepalive (default time is 60 seconds but some brokers need a shorter time)&#xD;4. connection callback (ringed set of scripts to be run when connection is made or remade)&#xD;&#xD;ADVANCED: The brokers offered in the menu are accessed using default ports and  basepaths (if needed).  If accessing other brokers, the complete urls should be formed like this:&#xD;&#xD;siteURL:port/basepath &#xD;e.g mqtt.eclipseprojects.io:443/mqtt&#xD;&#xD;It is possible to have more than one connection to the same broker, for instance, using two different user/pass accounts simultaneously. To do this, add a connection id at the end of the broker:&#xD;&#xD;e.g mqtt.eclipseprojects.io:443/mqtt|1&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%mult%s" expand="username&#xD;password&#xD;keepalive&#xD;connection callback" max="4">​&#xD;​&#xD;60</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><l/></custom-block></block><block s="doDeclareVariables"><list><l>connection status</l><l>callback</l></list></block><block s="doSetVar"><l>connection status</l><l>connecting</l></block><block s="doSetVar"><l>callback</l><l></l></block><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>4</l><block var="options"/></block><l><option>command</option></l></block><script><block s="doSetVar"><l>callback</l><block s="reportListItem"><l>4</l><block var="options"/></block></block></script><list></list></block><block s="doSetVar"><l>options</l><block s="reportListAttribute"><l><option>json</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>username</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>password</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>keepalive</l><block s="reportListItem"><l>3</l><block var="options"/></block></list></block></list></block></block></block><block s="doApplyExtension"><l>mqt_connect(broker,callback,options)</l><list><block var="broker"/><block var="callback"/><block var="options"/></list></block><block s="doWaitUntil"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="connection status"/><l>connecting</l></list></block></block></block><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="connection status"/><l>connected</l></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="connection status"/></list></block></script><list></list></block></script></block-definition><block-definition s="$cloudOutline MQTT subscribe to %&apos;broker&apos; topic %&apos;topic&apos; $nl on each message run %&apos;callback&apos; %&apos;options&apos;" type="command" category="MQTT"><comment x="0" y="0" w="306.99999999999943" collapsed="false">Subscribe to a topic on a broker&#xD;&#xD;Make sure you have already run an MQTT connect block before using this one&#xD;&#xD;You should add a script to be run inside he grey ring.&#xD;&#xD;It will be run each time a message is received&#xD;&#xD;If you click on the arrow on the grey ring twice, you can use #1 and #2 inside your script.&#xD;&#xD;#1 will contain the received payload&#xD;&#xD;#2 will contain the received topic name&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1. Subscribed QoS (0,1 or 2)  Note this will be downgraded if it exceeds the QoS of the stored message held on the broker &#xD;&#xD;2. Binary mode (boolean) Default (false) - payload is returned as text&#xD;&#xD;If true, payload returned as single column list of values in the range of 0 to 255..  </comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%cmdRing"></input><input type="%mult%s" expand="QoS&#xD;binary mode" max="2">0&#xD;false</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>options</l><block s="reportListAttribute"><l><option>json</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>qos</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>mode</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></block></list></block></block></block><block s="doApplyExtension"><l>mqt_sub(broker,topic,callback,options)</l><list><block var="broker"/><block var="topic"/><block var="callback"/><block var="options"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT publish to %&apos;broker&apos; topic %&apos;topic&apos; payload %&apos;payload&apos; %&apos;options&apos;" type="command" category="MQTT"><comment x="0" y="0" w="455" collapsed="false">Publish a message to an MQTT broker&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1. QoS (quality of service 0,1 or 2 - see  https://www.emqx.com/en/blog/introduction-to-mqtt-qos)&#xD;&#xD;2. Retain flag (boolean)&#xD;&#xD;3. Binary mode (boolean).    Default (false) - the payload is published as text&#xD;&#xD;If set to true then payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text.&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%mlt">hello</input><input type="%mult%s" expand="QoS&#xD;retain flag&#xD;binary mode" max="3">0&#xD;false&#xD;false</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><l></l><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>options</l><block s="reportListAttribute"><l><option>json</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>qos</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>retain</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>mode</l><block s="reportListItem"><l>3</l><block var="options"/></block></list></block></list></block></block></block><block s="doIf"><block s="reportNot"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>3</l><block s="reportTextSplit"><block var="options"/><l><option>json</option></l></block></block></block></block><script><block s="doIf"><block s="reportIsA"><block var="payload"/><l><option>list</option></l></block><script><block s="doSetVar"><l>payload</l><block s="reportListAttribute"><l><option>json</option></l><block var="payload"/></block></block></script><list></list></block><block s="doIf"><block s="reportIsA"><block var="payload"/><l><option>number</option></l></block><script><block s="doSetVar"><l>payload</l><block s="reportJoinWords"><list><block var="payload"/></list></block></block></script><list></list></block></script><list></list></block><block s="doApplyExtension"><l>mqt_pub(broker,topic,payload,options)</l><list><block var="broker"/><block var="topic"/><block var="payload"/><block var="options"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT unsubscribe from %&apos;broker&apos; topic %&apos;topic&apos;" type="command" category="MQTT"><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doApplyExtension"><l>mqt_unsub(broker,topic)</l><list><block var="broker"/><block var="topic"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT disconnect from %&apos;broker&apos;" type="command" category="MQTT"><header></header><code></code><translations></translations><inputs><input type="%s">all<options>all&#xD;broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doApplyExtension"><l>mqt_disconnect(broker)</l><list><block var="broker"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT response %&apos;broker&apos; topic %&apos;topic&apos; $nl reply %&apos;reply&apos; %&apos;options&apos;" type="command" category="MQTT"><comment x="0" y="0" w="292.22207031250036" collapsed="false">Options:&#xD;&#xD;1. Sub binary mode (boolean) Default (false) - received payload is returned as text. &#xD;&#xD;If true then subscribed, received payload is returned as single column list of values in the range of 0 to 255..  Default (false) - it is returned as text&#xD;&#xD;2.  Pub binary mode (boolean).  Default (false) - the payload is published as text.&#xD;&#xD;If set to true then published payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name/#</input><input type="%repRing"></input><input type="%mult%s" expand="sub binary mode&#xD;pub binary mode" max="2">false&#xD;false</input></inputs><script><block s="doDeclareVariables"><list><l>resp</l><l>callbackTopic</l><l>error</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><block var="broker"/><block var="topic"/><block s="reifyScript"><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><l>/@</l><block var="received topic"/></list></block><l>0</l></list></block><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>resp</l><block s="evaluate"><block var="reply"/><list><block var="received payload"/><block var="received topic"/></list></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>resp</l><block s="evaluate"><block var="reply"/><list></list></block></block></script><list></list></block><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doSetVar"><l>callbackTopic</l><block s="reportListItem"><l><option>last</option></l><block s="reportTextSplit"><block var="received topic"/><l>@</l></block></block></block><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><block var="broker"/><block var="callbackTopic"/><block var="resp"/><list><l></l><l></l><block s="reportListItem"><l>2</l><block var="options"/></block></list></custom-block></script><list></list></block></script><list><l>received payload</l><l>received topic</l></list></block><list><l>0</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></custom-block></script></block-definition><block-definition s="$cloudOutline MQTT request %&apos;broker&apos; topic %&apos;topic&apos; $nl response topic %&apos;rtopic&apos; payload %&apos;payload&apos; $nl on response run %&apos;callback&apos; %&apos;options&apos;" type="command" category="MQTT"><comment x="0" y="0" w="242.99999999999997" collapsed="false">The options are not required but can be filled if needed.&#xD;&#xD;1. Append response topic (boolean): If true, the response topic is added at the end of the call topic after @ sign. The default condition (true) response topic is added.&#xD;&#xD;2. Sub binary mode (boolean) Default (false) - received payload is returned as text. &#xD;&#xD;If true,then the subscribed, received payload is returned as a single column list of values in the range of 0 to 255..  &#xD;&#xD;3.  Pub binary mode (boolean).  Default (false) - the payload is published as text.&#xD;&#xD;If set to true then published payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%s">name2</input><input type="%mlt">hello</input><input type="%cmdRing"></input><input type="%mult%s" expand="append response topic&#xD;sub binary mode&#xD;pub binary mode&#xD;" max="3">true&#xD;false&#xD;false</input></inputs><script><block s="doDeclareVariables"><list><l>error</l><l>informTopic</l><l>topicCall</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>informTopic</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="options"/></block><l><option>Boolean</option></l></block><block s="reportListItem"><l>1</l><block var="options"/></block><block s="reportBoolean"><l><bool>true</bool></l></block></block></block><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><block var="broker"/><block s="reportJoinWords"><list><block var="rtopic"/></list></block><block s="reifyScript"><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="callback"/><list><block var="received payload"/><block var="received topic"/></list></block></script><list></list></block><block s="reifyScript"><script><block s="doRun"><block var="callback"/><list></list></block></script><list></list></block><block var="error"/></list></block></script><list><l>received payload</l><l>received topic</l></list></block><list><l>0</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></custom-block><block s="doIfElse"><block var="informTopic"/><script><block s="doSetVar"><l>topicCall</l><block s="reportJoinWords"><list><block var="topic"/><l>/</l><block s="reportJoinWords"><list><l>@</l><block var="rtopic"/></list></block></list></block></block></script><script><block s="doSetVar"><l>topicCall</l><block var="topic"/></block></script></block><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><block var="broker"/><block var="topicCall"/><block var="payload"/><list><l></l><l></l><block s="reportListItem"><l>3</l><block var="options"/></block></list></custom-block></script></block-definition><block-definition s="$cloudOutline MQTT example response reporter payload %&apos;payload&apos; topic %&apos;topic&apos;" type="reporter" category="MQTT"><comment x="0" y="0" w="90" collapsed="false">This is a simple echo example.&#xD;Topic can be used to filter the response.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt">hello</input><input type="%txt">name</input></inputs><script><block s="doReport"><block var="payload"/></block></script></block-definition><block-definition s="$cloudOutline MQTT request %&apos;broker&apos; topic %&apos;topic&apos; $nl response topic %&apos;rtopic&apos; payload %&apos;payload&apos; %&apos;options&apos;" type="reporter" category="MQTT"><comment x="0" y="0" w="343" collapsed="false">The response topic should be a unique value for each call e.g. use timer&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1.  Timeout value - default is 3 seconds&#xD;&#xD;2.  Append response topic (boolean): If true, the response topic is added at the end of the call topic after @ sign. The default condition (true) response topic is added.&#xD;&#xD;3. Sub binary mode (boolean) Default (false) - received payload is returned as text. &#xD;&#xD;If true, subscribed, received payload returned as single column list of values in the range of 0 to 255..  Default (false) - it is returned as text&#xD;&#xD;4.  Pub binary mode (boolean).  Default (false) - the payload is published as text.&#xD;&#xD;If set to true then published payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%s">name2</input><input type="%mlt">hello</input><input type="%mult%s" expand="timeout&#xD;append response topic&#xD;sub binary mode&#xD;pub binary mode&#xD;" max="4">3&#xD;true&#xD;false&#xD;false</input></inputs><script><block s="doDeclareVariables"><list><l>resp</l><l>semaphore</l><l>timer0</l><l>timeout</l><l>informTopic</l><l>topicCall</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><l></l><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>semaphore</l><l>0</l></block><block s="doSetVar"><l>timeout</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="options"/></block><l><option>number</option></l></block><block s="reportListItem"><l>1</l><block var="options"/></block><l>3</l></block></block><block s="doSetVar"><l>informTopic</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="options"/></block><l><option>Boolean</option></l></block><block s="reportListItem"><l>2</l><block var="options"/></block><block s="reportBoolean"><l><bool>true</bool></l></block></block></block><block s="doSetVar"><l>resp</l><l>timeout</l></block><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><block var="broker"/><block s="reportJoinWords"><list><block var="rtopic"/></list></block><block s="reifyScript"><script><block s="doSetVar"><l>resp</l><block var="received payload"/></block><block s="doSetVar"><l>semaphore</l><l>1</l></block></script><list><l>received payload</l><l>received topic</l></list></block><list><l>0</l><block s="reportListItem"><l>3</l><block var="options"/></block></list></custom-block><block s="doIfElse"><block var="informTopic"/><script><block s="doSetVar"><l>topicCall</l><block s="reportJoinWords"><list><block var="topic"/><l>/</l><block s="reportJoinWords"><list><l>@</l><block var="rtopic"/></list></block></list></block></block></script><script><block s="doSetVar"><l>topicCall</l><block var="topic"/></block></script></block><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><block var="broker"/><block var="topicCall"/><block var="payload"/><list><l>0</l><l>false</l><block s="reportListItem"><l>4</l><block var="options"/></block></list></custom-block><block s="doSetVar"><l>timer0</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doWaitUntil"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="semaphore"/><l>1</l></list></block><block s="reportVariadicGreaterThan"><list><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="timer0"/></block><block s="reportVariadicProduct"><list><block var="timeout"/><l>1000</l></list></block></list></block></list></block></block><custom-block s="$cloudOutline MQTT unsubscribe from %s topic %s"><block var="broker"/><block s="reportJoinWords"><list><block var="rtopic"/></list></block></custom-block><block s="doReport"><block var="resp"/></block></script></block-definition><block-definition s="MQTT Extension Examples" type="command" category="MQTT"><comment x="0" y="0" w="385.9999999999999" collapsed="false">Open (edit) this block to look at examples how to use the MQTT Extension blocks&#xD;&#xD;Background documentation:&#xD;https://github.com/pixavier/mqtt4snap&#xD;&#xD;Last source code version (mqtt.xml and mqttExtension.js):&#xD;https://gitlab.com/cymplecy/Snap/-/tree/master/libraries</comment><header></header><code></code><translations></translations><inputs></inputs><scripts><comment x="489.99999999999955" y="215.19999999999987" w="222.99999999999997" collapsed="false">Step 0: Connect to the broker</comment><comment x="31.33333333333337" y="152.20000000000016" w="239.99999999999997" collapsed="false">PubSub Hello World!</comment><comment x="489.99999999999955" y="271.19999999999953" w="222" collapsed="false">Step 1: Subscribe to a topic</comment><script x="25.33333333333337" y="272.1999999999993"><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name</l><block s="reifyScript"><script><block s="doSayFor"><block var="payload"/><l>2</l></block></script><list><l>payload</l><l>received topic</l></list></block><list></list></custom-block></script><script x="29.33333333333337" y="366.86666666666605"><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name</l><l>hello</l><list></list></custom-block></script><comment x="492.99999999999955" y="357.1999999999993" w="222" collapsed="false">Step 2: Publish a message</comment><script x="33.99999999999966" y="484.19999999999976"><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name1</l><block s="reifyScript"><script><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name2</l><block var="payload"/><list></list></custom-block></script><list><l>payload</l><l>topic</l></list></block><list></list></custom-block></script><comment x="499" y="481.69999999999817" w="220" collapsed="false">Step 1: Activate the responder as a simple subscription</comment><script x="32.999999999999886" y="602.0333333333335"><block s="doSayFor"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name1</l><l>name2</l><l>hello</l><list><l>3</l><l>false</l></list></custom-block><l>2</l></block></script><comment x="500" y="606.6999999999989" w="220" collapsed="false">Step 2: Send a request and wait the answer.</comment><comment x="504.99999999999955" y="131.19999999999993" w="191" collapsed="false">To execute the examples, single click on blocks, following the corresponding steps.</comment><comment x="499.66666666666697" y="756.3666666666654" w="224.00000000000003" collapsed="false">Step 2 bis: Send a request and do not wait for the answer</comment><comment x="24.33333333333337" y="871.1999999999987" w="356.99999999999994" collapsed="false">Synchronous client-server Hello World! with dynamic response topic (timer)</comment><comment x="510.99999999999955" y="930.700000000001" w="220" collapsed="false">Step 1: Activate the responder</comment><script x="34.33333333333337" y="1048.1999999999982"><block s="doSayFor"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name</l><block s="getTimer"></block><l>hello</l><list></list></custom-block><l>2</l></block></script><comment x="510.99999999999955" y="1050.6999999999987" w="219.0000000000002" collapsed="false">Step 2: Send a request (timer acts as idCall) and wait for the answer</comment><comment x="31.999999999999886" y="1138.6999999999982" w="352.0000000000003" collapsed="false">Asynchronous client-server Hello World! with dynamic response topic (timer)</comment><script x="31.999999999999886" y="1207.0333333333313"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %br on response run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name</l><block s="getTimer"></block><l>hello</l><block s="reifyScript"><script><block s="doSayFor"><block var="payload"/><l>2</l></block></script><list><l>payload</l><l>topic</l></list></block><list></list></custom-block></script><comment x="514.9999999999995" y="1204.6999999999991" w="224.00000000000003" collapsed="false">Step 2 bis: Send a request (timer acts as idCall) and do not wait for the answer</comment><script x="28.99999999999966" y="225.2000000000001"><custom-block s="$cloudOutline MQTT connect to %s %mult%s"><l>broker.emqx.io</l><list></list></custom-block></script><script x="25.33333333333337" y="932.2000000000014"><custom-block s="$cloudOutline MQTT response %s topic %s %br reply %repRing %mult%s"><l>broker.emqx.io</l><l>name/#</l><block s="reifyReporter"><autolambda><custom-block s="$cloudOutline MQTT example response reporter payload %mlt topic %txt"><block var="payload"/><block var="topic"/></custom-block></autolambda><list><l>payload</l><l>topic</l></list></block><list></list></custom-block></script><comment x="26.999999999999886" y="685.6999999999982" w="372.0000000000004" collapsed="false">Asynchronous client-server Hello World! with static response topic (name2)</comment><script x="27.999999999999886" y="751.0333333333324"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %br on response run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name1</l><l>name2</l><l>hello</l><block s="reifyScript"><script><block s="doSayFor"><block var="payload"/><l>2</l></block></script><list><l>payload</l><l>topic</l></list></block><list><l>false</l></list></custom-block></script><comment x="28.999999999999886" y="412.36666666666696" w="361.99999999999994" collapsed="false">Synchronous client-server Hello World! with static response topic (name2)</comment></scripts></block-definition><block-definition s="sanitise options %&apos;data&apos; mask %&apos;mask&apos;" type="reporter" category="MQTT" helper="true"><comment x="0" y="0" w="226" collapsed="false">Modify V10 variadic defaults to be able to work for blank and psuedo (false/true) boolean entries&#xD;&#xD;Blank defaults are set as zero width spaces which are removed when block is executed&#xD;&#xD;This is needed for the connect block&#xD;&#xD;The options are then checked to see if they should be boolean and if they are not aready a boolean value, then they are replaced with boolean true if default is text &quot;true&quot;, otherwise boolean false.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>zero width space</l></list></block><block s="doSetVar"><l>zero width space</l><block s="reportUnicodeAsLetter"><l>8203</l></block></block><block s="doSetVar"><l>data</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block var="value"/><l><option>text</option></l></block><block s="reportCombine"><block s="reportTextSplit"><block var="value"/><block var="zero width space"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l><l></l></list></block></autolambda><list></list></block></block><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="data"/></block></block><block s="doReport"><block s="reportListAttribute"><l><option>flatten</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicAnd"><list><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="value"/></block><l><option>Boolean</option></l></block><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="value"/></block><l><option>Boolean</option></l></block></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="value"/></block><l>true</l></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="reportListItem"><l>1</l><block var="value"/></block></block></autolambda><list><l>value</l><l>index</l></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block var="value"/><block s="reportListItem"><block var="index"/><block var="mask"/></block></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="data"/></block></block></block></block></script></block-definition></blocks><primitives></primitives><stage name="socok" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="1005"><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="1006"></list></costumes><sounds><list struct="atomic" id="1007"></list></sounds><variables></variables><blocks></blocks><scripts><script x="10" y="27.66666666666663"><block s="receiveGo"></block><block s="doSetVar"><l>chart</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>live points</l><l>0</l></block><block s="doSetVar"><l>active</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="$cloudOutline MQTT connect to %s %mult%s"><l>mqtt.eclipseprojects.io</l><list></list></custom-block><block s="doSetVar"><l>active</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doUntil"><block s="reportNot"><block var="active"/></block><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="points"/><l>0</l></list></block><script><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><l>mqtt.eclipseprojects.io</l><l>Tubby Custard</l><block s="reifyScript"><script><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><l>mqtt.eclipseprojects.io</l><l>score</l><block var="points"/><list></list></custom-block></script><list></list></block><list></list></custom-block><block s="doSetVar"><l>live points</l><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %mult%s"><l>mqtt.eclipseprojects.io</l><l>Tubby Custard</l><l>score</l><block var="points"/><list></list></custom-block></block></script><list></list></block><block s="doWait"><l>10</l></block></script></block></script><script x="302" y="10.499999999999943"><block s="receiveMessage"><l>your fun</l><list></list></block><block s="doSetVar"><l>chart</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>1</l><block s="reportRandom"><l>1</l><l>6</l></block></block><block s="doSetVar"><l>2</l><block s="reportRandom"><l>1</l><l>6</l></block></block><block s="doSetVar"><l>3</l><block s="reportRandom"><l>1</l><l>6</l></block></block><block s="doSetVar"><l>4</l><block s="reportRandom"><l>1</l><l>6</l></block></block><block s="doSetVar"><l>5</l><block s="reportRandom"><l>1</l><l>6</l></block></block><block s="doInsertInList"><block var="1"/><l><option>last</option></l><block var="chart"/></block><block s="doInsertInList"><block var="2"/><l><option>last</option></l><block var="chart"/></block><block s="doInsertInList"><block var="3"/><l><option>last</option></l><block var="chart"/></block><block s="doInsertInList"><block var="4"/><l><option>last</option></l><block var="chart"/></block><block s="doInsertInList"><block var="5"/><l><option>last</option></l><block var="chart"/></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><l></l><l>1</l></list></block><block s="reportVariadicEquals"><list><l></l><l>2</l></list></block><block s="reportVariadicEquals"><list><l></l><l>3</l></list></block><block s="reportVariadicEquals"><list><l></l><l>4</l></list></block><block s="reportVariadicEquals"><list><l></l><l>5</l></list></block><block s="reportVariadicEquals"><list><l></l><l>6</l></list></block></list></block></autolambda><list></list></block><block var="chart"/></block></block><l>1</l></list></block><script><block s="doSetVar"><l>points</l><l>10</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><l></l><l>1</l></list></block><block s="reportVariadicEquals"><list><l></l><l>2</l></list></block><block s="reportVariadicEquals"><list><l></l><l>3</l></list></block><block s="reportVariadicEquals"><list><l></l><l>4</l></list></block><block s="reportVariadicEquals"><list><l></l><l>5</l></list></block><block s="reportVariadicEquals"><list><l></l><l>6</l></list></block></list></block></autolambda><list></list></block><block var="chart"/></block></block><l>2</l></list></block><script><block s="doSetVar"><l>points</l><l>20</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><l></l><l>1</l></list></block><block s="reportVariadicEquals"><list><l></l><l>2</l></list></block><block s="reportVariadicEquals"><list><l></l><l>3</l></list></block><block s="reportVariadicEquals"><list><l></l><l>4</l></list></block><block s="reportVariadicEquals"><list><l></l><l>5</l></list></block><block s="reportVariadicEquals"><list><l></l><l>6</l></list></block></list></block></autolambda><list></list></block><block var="chart"/></block></block><l>3</l></list></block><script><block s="doSetVar"><l>points</l><l>30</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><l></l><l>1</l></list></block><block s="reportVariadicEquals"><list><l></l><l>2</l></list></block><block s="reportVariadicEquals"><list><l></l><l>3</l></list></block><block s="reportVariadicEquals"><list><l></l><l>4</l></list></block><block s="reportVariadicEquals"><list><l></l><l>5</l></list></block><block s="reportVariadicEquals"><list><l></l><l>6</l></list></block></list></block></autolambda><list></list></block><block var="chart"/></block></block><l>4</l></list></block><script><block s="doSetVar"><l>points</l><l>40</l></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><l></l><l>1</l></list></block><block s="reportVariadicEquals"><list><l></l><l>2</l></list></block><block s="reportVariadicEquals"><list><l></l><l>3</l></list></block><block s="reportVariadicEquals"><list><l></l><l>4</l></list></block><block s="reportVariadicEquals"><list><l></l><l>5</l></list></block><block s="reportVariadicEquals"><list><l></l><l>6</l></list></block></list></block></autolambda><list></list></block><block var="chart"/></block></block><l>5</l></list></block><script><block s="doSetVar"><l>points</l><l>50</l></block></script><list></list></block></script></scripts><sprites select="0"><watcher var="1" style="large" x="10" y="10" color="243,118,29"/><watcher var="2" style="large" x="10" y="31.000001999999995" color="243,118,29"/><watcher var="3" style="large" x="10" y="52.00000399999999" color="243,118,29"/><watcher var="4" style="large" x="10" y="73.00000599999998" color="243,118,29"/><watcher var="5" style="large" x="10" y="94.00000799999998" color="243,118,29"/><watcher var="points" style="large" x="56" y="9.00000799999998" color="243,118,29"/><watcher var="live points" style="large" x="102" y="9.00000799999998" color="243,118,29"/><sprite name="socok menities" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="1" color="80,80,80,1" pen="tip" id="1469"><costumes><list id="1470"><item><ref mediaID="socok menities_cst_costume"></ref></item></list></costumes><sounds><list struct="atomic" id="1471"></list></sounds><blocks></blocks><variables></variables><scripts><script x="33" y="23.333333333333343"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doBroadcast"><l>your fun</l><list></list></block></script></scripts></sprite><watcher var="active" style="normal" x="10" y="116.00000799999998" color="243,118,29" hidden="true"/><watcher var="chart" style="normal" x="10" y="137.00000999999997" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="1"><l>0</l></variable><variable name="2"><l>0</l></variable><variable name="3"><l>0</l></variable><variable name="4"><l>0</l></variable><variable name="5"><l>0</l></variable><variable name="points"><l>0</l></variable><variable name="live points"><l>0</l></variable><variable name="active"><bool>true</bool></variable><variable name="chart"><list struct="atomic" id="1484"></list></variable></variables></scene></scenes></project><media name="Tubbi" app="Snap! 10.4.6, https://snap.berkeley.edu" version="2"><costume name="costume" center-x="56.5" center-y="58.5" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAAB1CAYAAAB57w7GAAAAAXNSR0IArs4c6QAAEQRJREFUeF7tXQl0FGUS/moSLu8LUVS8UEBmAog+xXMVFd8KHigeC4KEzCQgCIi64i0qrgpyKYGZISjKuornrhcq+kRd8UAwPYgH6uIBahBRVM5MrZWeTnfCJHP18U+k3uPxYLqr6q+v/+7/r+snNAHiUPdmwKZ2iPvaguJ7AdgdwI4AWgBUAHA1gE0AfgPwE9i3Br74KqDFVxRevCXfTUD5NgAuLuqAAj4KRN3AHAC4A0AHZj8OXgnQJyDSwLwE1fQ+VVR+kj0/9+9UHkQe7D8APl8v+OI9AToJQFsXzLQK4IWI+xYgHp9Ps2NfuyAzaxFKgsihI9oBvn5g33kAH5/16Gy7kd4CxZ9CdfXjNGv5StvY2sRIKRA5FOgHpoEA97ZpfA6woWdBPIfC2jwHmGfF0nMQeXSPVlj/23CAy0A4JKtReHET4wuAZmDnHe+jSW9v8EIFQ6ZnIHKo+w7gzVcBGA1gNy+NkKPsdQAmgZpPoPDi33PkldXtnoDIJUWjQPHrAZLtQBMhXgP23UHRysluD8hVEDno7w34bgO4q9sDdU8eLQXiN1Ik9qxbMl0BkYd03gM+3z0Ait0amAJyKhCPX02zlq11WhfHQeSSogtAPMWl/Z3T9sqU/yowjaRo5eOZ3pjJ9Y6CyKHAJDBGZaJQk7yWMJnCmizgHCFHQOShgUOwFRUATnZE6/xk+joKUUzl2hd2q287iBzynwGmhwDsbbeyTYDfDyC+lMKxl+wci60gcklgMKhmBm6nxizAKKaoNtsuI9kGIgcDVwKYaJdifwI+Yyii3WvHOG0BkUNF14P5djsU+lPxILqBwpV35DrmnEHcDmCOENgAZE4gcol/DIgm5DgMZ28/sxh4UfHPNPNVFI1l/SnKGsS8WMT0uwo4fSDwzP3AczOdfVhy5Z7DYicrEBPbiPm56u3o/X1HAmcOMUU8Fwaeuc9RkTkzJ+6VzfYjYxA55D8UTG8DaJ2z0k4xOHsY0LvM5P7W08CDNzklzU6+VSDuQeHY55kwzRzEksDrIEiui5r01yBw7ghTt3eeA2aNVVPXZFoxFlJUy8jTlRGIHPRPBmikshbpdRlwvmxXE7T4JWCmxJ3zjXgKRWJp+5zTBpGD/gsBelRZc/TsD1z0d1O9pa8B09V93lLbkS+iSOyx1NcBaYHIg7u1RuHWmLL+0JMvBPrfYI439iYwdVg641f5mh+wtdBPs5dUpVIyPRCD/gcByUJTkE7oCwy8xVTs43eAyWV/BNcl6TvfiedQJDYo1ShSgshB/3kAPZmKkSe/H9sHKLZ4rT77AJhSBmze6Ik6zgjlvhSJPdUY7zRADHwEoJMzCubA9egzgeDdJoMvKoGpQ4Hf1+fAVMlbl1NEOyJrEDkUuBaMO5Ub2pGnAWWWAMBXy4EpQ4H1jqezeGMKwlgKa/9oSHiDM5FD3fcCb5aU9R280bwBqUUnA8OnmT9+u0KfgT99r5SaNivzO6j5gRRevCYZ34ZBDAbuAnCNzcrkxu6I44CR0wHy6Xy+X6kDWPVNbnzz4+67KaJZ9lCm0klB5Ms674NC3ypQelsQV2zQ4WjgiulAsxa6uB9X6a/Q7750RbznQhiMrfG29MCy7+rrkhzEEv/tILrec8UNBQ7tqs/Aljvp/7OuSp+B33yqjIquKMJ8B0Vjlg2xLnUbEHlE+xbY2Eo+MLu6olgqIQd2BkaWAzslyjV+XafPwJXLUt3ZFH//GS03tKFpK6TquZa2BTFUNBTM05WwwP6HA1eUA7slAiYbfwWmDAM+X6qEep4oQTSMwpXlKUAMvAfGUZ4oaBW6z8H6DNwzURi8ZZPuSvvkPc9V81QBwvsU1o5uEEQO+o8D6C1PlRThrfcHRs4A9m6nq8Jx/RX6kYQxt5NUT1Mk9l/DEnVep1xSNAXEV3hqpt3b6AC2PdRUY9pwQFvoqVpKCWeaStHK2hBNXRCDAVm+tvFM4V321L+B7TqaKpSPBpYs8EwlRQV/TxFtn21mIpcUnQpi76y1wy76N/DggGm3yDXAey8qakeP1WLqSdHKV0WL2pnIJUUTQDzGE9VatNJn4GFHmuIrrgcW/cdedS4ZC/y4GnjpAXv5esGNaSJFK2vSFkwQgx5FKwoK9RnY8RjTFHNuAd60Mfols3zIeCCQSA2a/wDwhC0Z9F7AZ8isjW7UgMglRQeD2PaSq7RGKK40/wnmpXNvB15PKyshLfY139chdwL7WhZKcqfkoUo+aj4T0yEUrfxSBzEY6A/gYdfHM2wK0PUUU+yjdwEL5tqnhoSsiscDzVsm5/n0VOD5qH3y3Oc0gCLaXB3EUOA+MC53VYfSCUD3M0yR8nqT15xddPogoJ/lEx+PAxVjga6nAkf1MqU8dg/wipRT5iER7qewNjzxOg18AEI314Yhr7djzjLFPT0NeD5in3hZwJxyicmv6ms991Si/0KXTwO6WFI77X6F2zeSxjkxllBUO5ISDm/3klIGjQOOP9dU7tkZwL9tctXWX8CIlOWLgFnXAb9Y4qlEukPhiB6mHpIhLpni+UYtN7QkLu16GOLV7sR0BtwEnHSBaaYXosBTU+0xW7IFzBtPAA/dmpy/fCdHzQTaW15A+bgv9RUcTlxa1BNxfsUeSzbCpe8oQMrMDHr5QWBe1tVcdQUlW8DIwyEPSWO0467AqBmAhLsMmj4KWFqzh84P8tFpxEF/MUCzXNF4zCxAIvT/iwHj/2aPyIYWMO++kB7/3fbWX637tTevl7THZbX+5fT4eHYVDyEOFd0C5psd18GoFTQE2bEqPP48YJDldfnDV0DFdeYCJt1BtT5An5Hyt5CEvSRq8un76XLw7jqiW4lDgQowBruiReieust7OxYT51wOnFWafAGTyaAkaiLfSJmZQpK/KjPySy0TLu5fS5hNHAyI0/tU16SLoayrQju+QZfe3PACJpOBybdxVDmwYyIVRFa0UhKgdi7PqwLiZ394aywfhExGncW1rXYCRoeBg/z6zbIJnxRUJ2Ivq1V50Awvz5pv9Rkp6ZFq0goBUZJumruqn6RcCJBG5P63dcDEIPCNIk3w5U0hTnkjv3X1FzqQa7fJFnTVbA0I2ywgsieaHNARuDJsvrpkUXJvEFi72hN1thFaP9O8plSgDFj/kxr6WbTwDkRRQrYboyOAL5HRLVuPe0OAZLWpQOLbFR+vQZJlJ6vWjXJGijrkLYhih249gaGTTItIMtTkUnUs1KMPMNhSPvfxu7p+CtU/eg+iwCW+VPGpGvT+fCB8tTpAiqtQXIYGSdKWJG8pQmqAKMaQpkHiEDBo4Tzg4dsUMZNswvoDF1vqWT54BZhhafLgoaYC4mYAzTzUwRR9znDgrJD5b2nn9aTrze0bNoX4fsUHbJAa7VW2CIgrANTLXfAQ0vqxQAFRpd5sfYYC8scgyQWSnCDv6HNxgL8KkCVHwjttaiXXDxo/PA5Y6Ggv9MwGXT8iI9lzj3uVeMWvyUyUDriXZTYKF64ecZ+ZnSbiZKEjCx5VaNwzgNSLiJN8gqcnRTwgIEoYQL3GZ1JMemUEkNpEg2Rp73U9hrjjSicCgRNNvR4ZD7z2L68er3HEJf4hIFIz5WvX1rpXx0g3FCeAOAPEKeAFSYSjbCJwSBd1Fl/MJQLi6SCytTu8rfYVAAVIAVRI3HLinhM3nZskQWOZgfIKNUiFRRfzGcTBLocDcUU8zw2gIpEFcZgb9friKBeHuTjO3SApLxAApeDHIMndkRwez8nXgfiyg1qi2c6env+Xlh0kBV8WOwZJsamEsCSU5SR1+YsOYKFlKz1zDLD4ZSelps97y/pWRga41E9bXvTp83D1ymN76xndBklCkwSVnaIeZwODLYcMSLRfvDTSP04N+pAiWlejFmM6iC07WDU0TKqFJAWLQ8Agp7oKnzYAuNDSxkd65cgMlJCUKsRUTtHKYYmZ6L8UoDmq6JZSD8mpkdwag16eA8yz8VCA+u2nV36kAyhRfqWIB1Ik9lCiFqOmr7e43/KH6mfP2dVx/+JrgVMt6ZSSQS4Aqtj4j7i99Au31ifKCvXw/EERevjKWhLwyJ3Aa49kP4T67j61209/ShGtgwzWBDFfzzocNlmvdDJI8k4XZXgSrGxdpGuj1Qsjvlrx2apKljMZLeXeim/6GzKmpHZIioekehiUSbcNaXQkAKrkhUnnwZFNfjRWs8+p1z3DX5WXJ25LyzDxs+5f83bRM7jFq5Oq85QkDAuAqnlhUoLIaygSqz2XpC6IXhSbplQ4zQsk/VG8OkYHqp+rdD/r6gbOCVHaC5NizIniUuOq+s2ITgRx/nb9kYRk8bMa3RglX1RmpABqJdW9MKmeW6aTKFr5RlIQ5T856F8CkCX+k4qjYr9L4q9kcBskr1QBUl6xQup7YVIYlJdSJFanqjtJl8XAcDAs/ZkVAykddaQmX4p3DDKy0+p7YWTzLm40lbwwqcZHGEFhrc7JZUlA7L4DeLP0O010iE3FVdHfT+oHDLjRVO7bz4D9DjP/LcAJgMp5YRq156+g5m0ovPh361XJOw8HA9L5PWm/aUUhS65W/ew04yqVvTCNG/guimjX1r+kgfbRRfuD+Ou8AqwhZY2kphUfAO2PBNT2wjRucqYDKFq5Tdf6xrrxS0G9GtmxuT5NkpgsTnKJfohrLj/pXopoSXvvNQyidORv5pOiPHfL3vLTwE5rvRlb4gcm68Qvghs9ZoiDAen8rlAuvdO2Upb/jRTRLNHpunqmcVaU/1OALMs6ZQfaRBXjzygSazS6lBrEUKAfGDa2PWyitnZqWIQLKazNa4x9ShDlZi4JzAXBpsYzTo22CfJl/JOimnTAbJTSA7G4W1sUbJVeIHukYrj9d9sssBbVhQGqWLIqFce0QKyZjV71RE01gqb7e00v03SGlzaIOpD++wHK+8N60zGMt9fwdIrE0u4/mxGIiRkpJ4wc6+0gm7T0RRTRLD08U481cxBDgY5gCJCJtkuphWy/Im0LrAOhB4W1j9O+I9VmvyFGHPT3Bsjm8w4yUbupXst9KBLLMMsrhcemMVNxSSAEgiX62lQN69K4GKUU1cLZSMv4dWoVouzB0dlYwst7Uhz8nEq1nEBMLHTUrDRONXJ1fh9HES2nfrM5g1gDZElgHAiWMLo6FlJaE8ZtFNVyLrW3BcTEHnIsQJa6M6XNp4ByfB1FYrYEN20DsQbIUKAUjBkKWEhtFQhlFNZsWxTaCmJiRsr2Q4582b6P3PZRWgfwpdlsIxp7Km0HUf9G+juBqGK7Z6eO6ReBuZiiMdurVB0B0VCdS/zTQZQfFchOvoCZyykac8zn7CiIiVk5AERT/qRhrLVgHknRmKMn4jkOor7g6bQvuFBSslMGOJ2cEC7zngvaejWFlzveD9sVEGtfr8Gi8wGWxKtOLhvUTXHLAbqRIpWuNblxFUTzWxm4FoTrAOzspnUdlrUejPEU1SR73lXyBMSaV+zQwO6opqsAHg1GK1dHbacwwgaAJqGAJ1C55kmrfs9ArJ2VAuZWXA5CGRj72WlfR3kRvq1xbBTifq/AM8bnOYhWQ3Owpp/OQACnOQpAbsxfAXiO9I/JjY19dysFYu3sLC7qgALuB0COPO1u33Cz5rQYwNOopnlUUalcM0MlQawzO+WkVa7uBUZPAHIQ8O5ZQ5H+jfJtex2EBaCC+TRzqZynpSwpD2J9y3Fp5y7ggqPB8W4AyRGkHQG0ycHCUlD7McDLQL4loOr3aOayD3Pg5/qteQdiMgvxiGN2wZYN7cDxfcHUGky7gXgnxNECYB9AcfiwCUy/gngdiKtAvtVo1uormvbOL65b3WaB/wdUJD7B1zWlxgAAAABJRU5ErkJggg==" mediaID="socok menities_cst_costume"/></media></snapdata>