| <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> |
| <!-- Generated by graphviz version 2.44.1 (20201121.0304) |
| --> |
| <!-- Pages: 1 --> |
| <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1533pt" height="1204pt" viewBox="0.00 0.00 1532.79 1204.00"><script> |
| (function() { |
| var enablePanZoom = false; |
| var enablePanZoomControls = false; |
| var panZoomScriptUrl = "https://graphviz.corp.google.com/svg-pan-zoom.js"; |
| |
| var isEmbedded = true; |
| try { |
| // This condition is true when the SVG is being displayed in a |
| // top-level browser window. If the parent location's href is |
| // different, or we can't access it (due to security constraints |
| // on accessing javascript properties on a different domain), |
| // then the document is embedded. |
| if (window.location.href == window.parent.location.href) { |
| isEmbedded = false; |
| } |
| } catch (e) {} |
| |
| if (!isEmbedded) enablePanZoom = true; |
| |
| if (enablePanZoom && typeof svgPanZoom === 'undefined') { |
| var panZoomScript = |
| document.createElementNS('http://www.w3.org/2000/svg', 'script'); |
| panZoomScript.setAttributeNS( |
| 'http://www.w3.org/1999/xlink', 'xlink:href', panZoomScriptUrl); |
| document.currentScript.parentElement.appendChild(panZoomScript); |
| } |
| |
| window.onload = function() { |
| var svg = document.getElementsByTagName("svg")[0]; |
| |
| if (!isEmbedded) { |
| svg.removeAttribute("width"); |
| svg.removeAttribute("height"); |
| } |
| |
| if (enablePanZoom) { |
| svgPanZoom(svg, { |
| minZoom: 0.2, |
| maxZoom: 100, |
| controlIconsEnabled: enablePanZoomControls |
| }); |
| } |
| |
| var links = document.getElementsByTagName("a"); |
| for (var i = 0; i < links.length; i++) { |
| if (!links[i].getAttribute("target")) { |
| links[i].setAttribute("target", "_top"); |
| } |
| } |
| }; |
| })(); |
| </script> |
| <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1200)"> |
| <polygon fill="white" stroke="transparent" points="-4,4 -4,-1200 1528.79,-1200 1528.79,4 -4,4"/> |
| <text text-anchor="middle" x="762.4" y="-1180.8" font-family="Times,serif" font-size="14.00">TWO-FINGER TAP RECOGNIZER</text> |
| <g id="clust1" class="cluster"> |
| <title>cluster_initial_contender</title> |
| <polygon fill="none" stroke="black" points="296.79,-961 296.79,-1165 1021.79,-1165 1021.79,-961 296.79,-961"/> |
| <text text-anchor="middle" x="659.29" y="-1149.8" font-family="Times,serif" font-size="14.00">InitialContender</text> |
| <text text-anchor="middle" x="659.29" y="-1134.8" font-family="Times,serif" font-size="14.00">`impl Contender`</text> |
| </g> |
| <g id="clust4" class="cluster"> |
| <title>cluster_matched_contender</title> |
| <polygon fill="none" stroke="black" points="142.79,-8 142.79,-209 1219.79,-209 1219.79,-8 142.79,-8"/> |
| <text text-anchor="middle" x="681.29" y="-193.8" font-family="Times,serif" font-size="14.00">MatchedContender</text> |
| </g> |
| <g id="clust3" class="cluster"> |
| <title>cluster_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="286.79,-217 286.79,-570 1467.29,-570 1467.29,-217 286.79,-217"/> |
| <text text-anchor="middle" x="877.04" y="-554.8" font-family="Times,serif" font-size="14.00">TwoFingersDownContender</text> |
| <text text-anchor="middle" x="877.04" y="-539.8" font-family="Times,serif" font-size="14.00">`impl Contender`</text> |
| </g> |
| <g id="clust2" class="cluster"> |
| <title>cluster_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="286.79,-578 286.79,-953 1516.79,-953 1516.79,-578 286.79,-578"/> |
| <text text-anchor="middle" x="901.79" y="-937.8" font-family="Times,serif" font-size="14.00">OneFingerDownContender</text> |
| <text text-anchor="middle" x="901.79" y="-922.8" font-family="Times,serif" font-size="14.00">`impl Contender`</text> |
| </g> |
| <!-- arena --> |
| <g id="node1" class="node"> |
| <title>arena</title> |
| <ellipse fill="none" stroke="black" cx="33.9" cy="-466" rx="29.81" ry="29.81"/> |
| <ellipse fill="none" stroke="black" cx="33.9" cy="-466" rx="33.8" ry="33.8"/> |
| <text text-anchor="middle" x="33.9" y="-462.3" font-family="Times,serif" font-size="14.00">arena</text> |
| </g> |
| <!-- examine_at_initial_contender --> |
| <g id="node2" class="node"> |
| <title>examine_at_initial_contender</title> |
| <polygon fill="none" stroke="black" points="367.79,-1064 304.79,-1026 367.79,-988 430.79,-1026 367.79,-1064"/> |
| <text text-anchor="middle" x="367.79" y="-1029.8" font-family="Times,serif" font-size="14.00">button</text> |
| <text text-anchor="middle" x="367.79" y="-1014.8" font-family="Times,serif" font-size="14.00">pressed?</text> |
| </g> |
| <!-- arena->examine_at_initial_contender --> |
| <g id="edge1" class="edge"> |
| <title>arena->examine_at_initial_contender</title> |
| <path fill="none" stroke="black" d="M37.95,-499.9C47.57,-599.63 80.43,-889.26 142.79,-957 182.38,-999.99 248.04,-1016.46 298.07,-1022.64"/> |
| <polygon fill="black" stroke="black" points="297.84,-1026.13 308.17,-1023.77 298.62,-1019.18 297.84,-1026.13"/> |
| <text text-anchor="middle" x="109.29" y="-956.8" font-family="Times,serif" font-size="14.00">examine</text> |
| <text text-anchor="middle" x="109.29" y="-941.8" font-family="Times,serif" font-size="14.00">event()</text> |
| </g> |
| <!-- examine_at_one_finger_down_contender --> |
| <g id="node7" class="node"> |
| <title>examine_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="367.79,-877 294.79,-824 367.79,-771 440.79,-824 367.79,-877"/> |
| <text text-anchor="middle" x="367.79" y="-835.3" font-family="Times,serif" font-size="14.00">elapsed</text> |
| <text text-anchor="middle" x="367.79" y="-820.3" font-family="Times,serif" font-size="14.00"><</text> |
| <text text-anchor="middle" x="367.79" y="-805.3" font-family="Times,serif" font-size="14.00">threshold?</text> |
| </g> |
| <!-- arena->examine_at_one_finger_down_contender --> |
| <g id="edge7" class="edge"> |
| <title>arena->examine_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M57.71,-490.61C114.37,-551.73 261.9,-710.85 330.6,-784.96"/> |
| <polygon fill="black" stroke="black" points="328.43,-787.76 337.79,-792.72 333.56,-783 328.43,-787.76"/> |
| <text text-anchor="middle" x="109.29" y="-580.8" font-family="Times,serif" font-size="14.00">examine</text> |
| <text text-anchor="middle" x="109.29" y="-565.8" font-family="Times,serif" font-size="14.00">event()</text> |
| </g> |
| <!-- examine_at_two_fingers_down_contender --> |
| <g id="node15" class="node"> |
| <title>examine_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="367.79,-519 294.79,-466 367.79,-413 440.79,-466 367.79,-519"/> |
| <text text-anchor="middle" x="367.79" y="-477.3" font-family="Times,serif" font-size="14.00">elapsed</text> |
| <text text-anchor="middle" x="367.79" y="-462.3" font-family="Times,serif" font-size="14.00"><</text> |
| <text text-anchor="middle" x="367.79" y="-447.3" font-family="Times,serif" font-size="14.00">threshold?</text> |
| </g> |
| <!-- arena->examine_at_two_fingers_down_contender --> |
| <g id="edge19" class="edge"> |
| <title>arena->examine_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M67.93,-466C118.02,-466 214.73,-466 284.59,-466"/> |
| <polygon fill="black" stroke="black" points="284.7,-469.5 294.7,-466 284.7,-462.5 284.7,-469.5"/> |
| <text text-anchor="middle" x="109.29" y="-484.8" font-family="Times,serif" font-size="14.00">examine</text> |
| <text text-anchor="middle" x="109.29" y="-469.8" font-family="Times,serif" font-size="14.00">event()</text> |
| </g> |
| <!-- verify_at_matched_contender --> |
| <g id="node22" class="node"> |
| <title>verify_at_matched_contender</title> |
| <polygon fill="none" stroke="black" points="367.79,-178 294.79,-125 367.79,-72 440.79,-125 367.79,-178"/> |
| <text text-anchor="middle" x="367.79" y="-136.3" font-family="Times,serif" font-size="14.00">elapsed</text> |
| <text text-anchor="middle" x="367.79" y="-121.3" font-family="Times,serif" font-size="14.00"><</text> |
| <text text-anchor="middle" x="367.79" y="-106.3" font-family="Times,serif" font-size="14.00">threshold?</text> |
| </g> |
| <!-- arena->verify_at_matched_contender --> |
| <g id="edge29" class="edge"> |
| <title>arena->verify_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M47.82,-434.82C75.54,-368.1 138.53,-217.14 142.79,-213 185.27,-171.73 249.37,-149.19 298.14,-137.28"/> |
| <polygon fill="black" stroke="black" points="299.05,-140.66 307.99,-134.97 297.45,-133.85 299.05,-140.66"/> |
| <text text-anchor="middle" x="109.29" y="-359.8" font-family="Times,serif" font-size="14.00">verify</text> |
| <text text-anchor="middle" x="109.29" y="-344.8" font-family="Times,serif" font-size="14.00">event()</text> |
| </g> |
| <!-- send_click_matched_contender --> |
| <g id="node27" class="node"> |
| <title>send_click_matched_contender</title> |
| <polygon fill="none" stroke="black" points="584.79,-54 150.79,-54 150.79,-16 584.79,-16 584.79,-54"/> |
| <text text-anchor="middle" x="367.79" y="-38.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="367.79" y="-23.8" font-family="Times,serif" font-size="14.00">vec![Secondary Button Down, Secondary Button Up], None, TwoFingerTap</text> |
| </g> |
| <!-- arena->send_click_matched_contender --> |
| <g id="edge36" class="edge"> |
| <title>arena->send_click_matched_contender</title> |
| <path fill="none" stroke="black" d="M38.6,-432.23C49.1,-343.45 82.32,-107.29 142.79,-63 144.45,-61.78 146.14,-60.61 147.85,-59.47"/> |
| <polygon fill="black" stroke="black" points="149.93,-62.3 156.6,-54.07 146.25,-56.34 149.93,-62.3"/> |
| <text text-anchor="middle" x="109.29" y="-207.8" font-family="Times,serif" font-size="14.00">process</text> |
| <text text-anchor="middle" x="109.29" y="-192.8" font-family="Times,serif" font-size="14.00">buffered</text> |
| <text text-anchor="middle" x="109.29" y="-177.8" font-family="Times,serif" font-size="14.00">events()</text> |
| </g> |
| <!-- examine2_at_initial_contender --> |
| <g id="node3" class="node"> |
| <title>examine2_at_initial_contender</title> |
| <polygon fill="none" stroke="black" points="702.79,-1064 642.79,-1026 702.79,-988 762.79,-1026 702.79,-1064"/> |
| <text text-anchor="middle" x="702.79" y="-1029.8" font-family="Times,serif" font-size="14.00">num</text> |
| <text text-anchor="middle" x="702.79" y="-1014.8" font-family="Times,serif" font-size="14.00">fingers?</text> |
| </g> |
| <!-- examine_at_initial_contender->examine2_at_initial_contender --> |
| <g id="edge2" class="edge"> |
| <title>examine_at_initial_contender->examine2_at_initial_contender</title> |
| <path fill="none" stroke="black" d="M431.04,-1026C488.34,-1026 573.21,-1026 632.61,-1026"/> |
| <polygon fill="black" stroke="black" points="632.65,-1029.5 642.65,-1026 632.65,-1022.5 632.65,-1029.5"/> |
| <text text-anchor="middle" x="612.29" y="-1029.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- return_mismatch_at_initial_contender --> |
| <g id="node4" class="node"> |
| <title>return_mismatch_at_initial_contender</title> |
| <polygon fill="none" stroke="black" points="964.29,-1119 892.29,-1119 892.29,-1081 964.29,-1081 964.29,-1119"/> |
| <text text-anchor="middle" x="928.29" y="-1103.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="928.29" y="-1088.8" font-family="Times,serif" font-size="14.00">Mismatch</text> |
| </g> |
| <!-- examine_at_initial_contender->return_mismatch_at_initial_contender --> |
| <g id="edge3" class="edge"> |
| <title>examine_at_initial_contender->return_mismatch_at_initial_contender</title> |
| <path fill="none" stroke="black" d="M415.62,-1035.27C469.51,-1045.66 560.75,-1062.45 639.79,-1073 725.17,-1084.39 825.44,-1092.66 882.16,-1096.86"/> |
| <polygon fill="black" stroke="black" points="882,-1100.35 892.23,-1097.59 882.51,-1093.37 882,-1100.35"/> |
| <text text-anchor="middle" x="702.79" y="-1089.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- examine2_at_initial_contender->return_mismatch_at_initial_contender --> |
| <g id="edge4" class="edge"> |
| <title>examine2_at_initial_contender->return_mismatch_at_initial_contender</title> |
| <path fill="none" stroke="black" d="M742.43,-1039.12C755.55,-1043.55 770.3,-1048.51 783.79,-1053 816.84,-1063.99 854.23,-1076.23 882.56,-1085.46"/> |
| <polygon fill="black" stroke="black" points="881.58,-1088.83 892.18,-1088.6 883.75,-1082.17 881.58,-1088.83"/> |
| <text text-anchor="middle" x="804.29" y="-1069.8" font-family="Times,serif" font-size="14.00">0 or >2</text> |
| </g> |
| <!-- return_one_finger_down_contender_at_initial_contender --> |
| <g id="node5" class="node"> |
| <title>return_one_finger_down_contender_at_initial_contender</title> |
| <polygon fill="none" stroke="black" points="1010.29,-1007 846.29,-1007 846.29,-969 1010.29,-969 1010.29,-1007"/> |
| <text text-anchor="middle" x="928.29" y="-991.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="928.29" y="-976.8" font-family="Times,serif" font-size="14.00">OneFingerDownContender</text> |
| </g> |
| <!-- examine2_at_initial_contender->return_one_finger_down_contender_at_initial_contender --> |
| <g id="edge5" class="edge"> |
| <title>examine2_at_initial_contender->return_one_finger_down_contender_at_initial_contender</title> |
| <path fill="none" stroke="black" d="M750.38,-1018.08C775.2,-1013.86 806.63,-1008.52 836.08,-1003.51"/> |
| <polygon fill="black" stroke="black" points="836.71,-1006.95 845.98,-1001.83 835.53,-1000.05 836.71,-1006.95"/> |
| <text text-anchor="middle" x="804.29" y="-1014.8" font-family="Times,serif" font-size="14.00">1</text> |
| </g> |
| <!-- return_two_fingers_down_contender_at_initial_contender --> |
| <g id="node6" class="node"> |
| <title>return_two_fingers_down_contender_at_initial_contender</title> |
| <polygon fill="none" stroke="black" points="1013.79,-1063 842.79,-1063 842.79,-1025 1013.79,-1025 1013.79,-1063"/> |
| <text text-anchor="middle" x="928.29" y="-1047.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="928.29" y="-1032.8" font-family="Times,serif" font-size="14.00">TwoFingersDownContender</text> |
| </g> |
| <!-- examine2_at_initial_contender->return_two_fingers_down_contender_at_initial_contender --> |
| <g id="edge6" class="edge"> |
| <title>examine2_at_initial_contender->return_two_fingers_down_contender_at_initial_contender</title> |
| <path fill="none" stroke="black" d="M756.2,-1030.22C778.86,-1032.05 806.12,-1034.24 832.15,-1036.34"/> |
| <polygon fill="black" stroke="black" points="832.18,-1039.85 842.43,-1037.17 832.74,-1032.87 832.18,-1039.85"/> |
| <text text-anchor="middle" x="804.29" y="-1038.8" font-family="Times,serif" font-size="14.00">2</text> |
| </g> |
| <!-- examine2_at_one_finger_down_contender --> |
| <g id="node8" class="node"> |
| <title>examine2_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="702.79,-862 639.79,-824 702.79,-786 765.79,-824 702.79,-862"/> |
| <text text-anchor="middle" x="702.79" y="-827.8" font-family="Times,serif" font-size="14.00">button</text> |
| <text text-anchor="middle" x="702.79" y="-812.8" font-family="Times,serif" font-size="14.00">pressed?</text> |
| </g> |
| <!-- examine_at_one_finger_down_contender->examine2_at_one_finger_down_contender --> |
| <g id="edge8" class="edge"> |
| <title>examine_at_one_finger_down_contender->examine2_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M441.05,-824C496.87,-824 573.77,-824 629.59,-824"/> |
| <polygon fill="black" stroke="black" points="629.75,-827.5 639.75,-824 629.75,-820.5 629.75,-827.5"/> |
| <text text-anchor="middle" x="612.29" y="-827.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- return_mismatch_at_one_finger_down_contender --> |
| <g id="node9" class="node"> |
| <title>return_mismatch_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="1459.29,-871 1387.29,-871 1387.29,-833 1459.29,-833 1459.29,-871"/> |
| <text text-anchor="middle" x="1423.29" y="-855.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1423.29" y="-840.8" font-family="Times,serif" font-size="14.00">Mismatch</text> |
| </g> |
| <!-- examine_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender --> |
| <g id="edge9" class="edge"> |
| <title>examine_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M424.27,-836.03C478.82,-847.29 564.61,-863.46 639.79,-871 924.15,-899.5 997.6,-889.32 1282.79,-871 1299.26,-869.94 1303.41,-869.94 1319.79,-868 1338.72,-865.76 1359.51,-862.64 1377.4,-859.74"/> |
| <polygon fill="black" stroke="black" points="1377.98,-863.2 1387.28,-858.12 1376.84,-856.29 1377.98,-863.2"/> |
| <text text-anchor="middle" x="928.29" y="-891.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- examine2_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender --> |
| <g id="edge10" class="edge"> |
| <title>examine2_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M753.83,-831.42C824.02,-841.41 955.79,-858.67 1068.79,-865 1163.76,-870.32 1187.79,-869.42 1282.79,-865 1314.36,-863.53 1349.81,-860.21 1377.07,-857.29"/> |
| <polygon fill="black" stroke="black" points="1377.54,-860.76 1387.1,-856.19 1376.78,-853.8 1377.54,-860.76"/> |
| <text text-anchor="middle" x="1041.29" y="-866.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- examine3_at_one_finger_down_contender --> |
| <g id="node10" class="node"> |
| <title>examine3_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="928.29,-809 846.68,-791 928.29,-773 1009.91,-791 928.29,-809"/> |
| <text text-anchor="middle" x="928.29" y="-787.3" font-family="Times,serif" font-size="14.00">num fingers?</text> |
| </g> |
| <!-- examine2_at_one_finger_down_contender->examine3_at_one_finger_down_contender --> |
| <g id="edge11" class="edge"> |
| <title>examine2_at_one_finger_down_contender->examine3_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M753.67,-816.64C787.63,-811.62 832.72,-804.96 868.44,-799.69"/> |
| <polygon fill="black" stroke="black" points="869.34,-803.1 878.72,-798.17 868.32,-796.17 869.34,-803.1"/> |
| <text text-anchor="middle" x="804.29" y="-814.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- examine3_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender --> |
| <g id="edge12" class="edge"> |
| <title>examine3_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M964.23,-801.19C992.26,-808.96 1032.73,-819.27 1068.79,-825 1178.43,-842.43 1309.03,-848.7 1376.65,-850.89"/> |
| <polygon fill="black" stroke="black" points="1376.85,-854.39 1386.95,-851.2 1377.06,-847.4 1376.85,-854.39"/> |
| <text text-anchor="middle" x="1175.79" y="-849.8" font-family="Times,serif" font-size="14.00">0 or > 2</text> |
| </g> |
| <!-- examine4_at_one_finger_down_contender --> |
| <g id="node11" class="node"> |
| <title>examine4_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="1175.79,-692 1086.79,-639 1175.79,-586 1264.79,-639 1175.79,-692"/> |
| <text text-anchor="middle" x="1175.79" y="-650.3" font-family="Times,serif" font-size="14.00">displacement</text> |
| <text text-anchor="middle" x="1175.79" y="-635.3" font-family="Times,serif" font-size="14.00"><</text> |
| <text text-anchor="middle" x="1175.79" y="-620.3" font-family="Times,serif" font-size="14.00">threshold?</text> |
| </g> |
| <!-- examine3_at_one_finger_down_contender->examine4_at_one_finger_down_contender --> |
| <g id="edge13" class="edge"> |
| <title>examine3_at_one_finger_down_contender->examine4_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M949.45,-777.6C976.41,-759.77 1025.82,-727.41 1068.79,-701 1085.5,-690.73 1103.88,-679.84 1120.58,-670.1"/> |
| <polygon fill="black" stroke="black" points="1122.78,-672.87 1129.66,-664.82 1119.26,-666.82 1122.78,-672.87"/> |
| <text text-anchor="middle" x="1041.29" y="-725.8" font-family="Times,serif" font-size="14.00">1</text> |
| </g> |
| <!-- examine5_at_one_finger_down_contender --> |
| <g id="node12" class="node"> |
| <title>examine5_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="1175.79,-816 1086.79,-763 1175.79,-710 1264.79,-763 1175.79,-816"/> |
| <text text-anchor="middle" x="1175.79" y="-774.3" font-family="Times,serif" font-size="14.00">displacement</text> |
| <text text-anchor="middle" x="1175.79" y="-759.3" font-family="Times,serif" font-size="14.00"><</text> |
| <text text-anchor="middle" x="1175.79" y="-744.3" font-family="Times,serif" font-size="14.00">threshold?</text> |
| </g> |
| <!-- examine3_at_one_finger_down_contender->examine5_at_one_finger_down_contender --> |
| <g id="edge14" class="edge"> |
| <title>examine3_at_one_finger_down_contender->examine5_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M982.56,-784.92C1014.15,-781.32 1054.88,-776.68 1090.71,-772.59"/> |
| <polygon fill="black" stroke="black" points="1091.14,-776.06 1100.68,-771.45 1090.34,-769.11 1091.14,-776.06"/> |
| <text text-anchor="middle" x="1041.29" y="-781.8" font-family="Times,serif" font-size="14.00">2</text> |
| </g> |
| <!-- examine4_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender --> |
| <g id="edge15" class="edge"> |
| <title>examine4_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M1225.18,-662.87C1244.08,-673.29 1265.35,-686.46 1282.79,-701 1302.16,-717.14 1306.87,-722.35 1319.79,-744 1331.26,-763.21 1324.16,-773.27 1337.79,-791 1348.77,-805.27 1363.97,-817.66 1378.46,-827.47"/> |
| <polygon fill="black" stroke="black" points="1376.58,-830.43 1386.87,-832.95 1380.4,-824.56 1376.58,-830.43"/> |
| <text text-anchor="middle" x="1310.29" y="-747.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- return_self_at_one_finger_down_contender --> |
| <g id="node13" class="node"> |
| <title>return_self_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="1450.29,-658 1396.29,-658 1396.29,-620 1450.29,-620 1450.29,-658"/> |
| <text text-anchor="middle" x="1423.29" y="-642.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1423.29" y="-627.8" font-family="Times,serif" font-size="14.00">`self`</text> |
| </g> |
| <!-- examine4_at_one_finger_down_contender->return_self_at_one_finger_down_contender --> |
| <g id="edge16" class="edge"> |
| <title>examine4_at_one_finger_down_contender->return_self_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M1265.08,-639C1306.82,-639 1354.35,-639 1386.12,-639"/> |
| <polygon fill="black" stroke="black" points="1386.26,-642.5 1396.26,-639 1386.26,-635.5 1386.26,-642.5"/> |
| <text text-anchor="middle" x="1310.29" y="-642.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- examine5_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender --> |
| <g id="edge17" class="edge"> |
| <title>examine5_at_one_finger_down_contender->return_mismatch_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M1231.58,-782.86C1275.54,-798.8 1336.48,-820.89 1377.54,-835.78"/> |
| <polygon fill="black" stroke="black" points="1376.42,-839.09 1387.01,-839.21 1378.81,-832.51 1376.42,-839.09"/> |
| <text text-anchor="middle" x="1310.29" y="-815.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- return_two_fingers_down_contender_at_one_finger_down_contender --> |
| <g id="node14" class="node"> |
| <title>return_two_fingers_down_contender_at_one_finger_down_contender</title> |
| <polygon fill="none" stroke="black" points="1508.79,-782 1337.79,-782 1337.79,-744 1508.79,-744 1508.79,-782"/> |
| <text text-anchor="middle" x="1423.29" y="-766.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1423.29" y="-751.8" font-family="Times,serif" font-size="14.00">TwoFingersDownContender</text> |
| </g> |
| <!-- examine5_at_one_finger_down_contender->return_two_fingers_down_contender_at_one_finger_down_contender --> |
| <g id="edge18" class="edge"> |
| <title>examine5_at_one_finger_down_contender->return_two_fingers_down_contender_at_one_finger_down_contender</title> |
| <path fill="none" stroke="black" d="M1265.08,-763C1285.4,-763 1307.09,-763 1327.66,-763"/> |
| <polygon fill="black" stroke="black" points="1327.67,-766.5 1337.67,-763 1327.67,-759.5 1327.67,-766.5"/> |
| <text text-anchor="middle" x="1310.29" y="-766.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- examine2_at_two_fingers_down_contender --> |
| <g id="node16" class="node"> |
| <title>examine2_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="702.79,-490 639.79,-452 702.79,-414 765.79,-452 702.79,-490"/> |
| <text text-anchor="middle" x="702.79" y="-455.8" font-family="Times,serif" font-size="14.00">button</text> |
| <text text-anchor="middle" x="702.79" y="-440.8" font-family="Times,serif" font-size="14.00">pressed?</text> |
| </g> |
| <!-- examine_at_two_fingers_down_contender->examine2_at_two_fingers_down_contender --> |
| <g id="edge20" class="edge"> |
| <title>examine_at_two_fingers_down_contender->examine2_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M436.99,-463.13C494.43,-460.72 576.19,-457.28 633.62,-454.87"/> |
| <polygon fill="black" stroke="black" points="633.85,-458.36 643.7,-454.44 633.56,-451.37 633.85,-458.36"/> |
| <text text-anchor="middle" x="612.29" y="-459.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- return_mismatch_at_two_fingers_down_contender --> |
| <g id="node17" class="node"> |
| <title>return_mismatch_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="1459.29,-505 1387.29,-505 1387.29,-467 1459.29,-467 1459.29,-505"/> |
| <text text-anchor="middle" x="1423.29" y="-489.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1423.29" y="-474.8" font-family="Times,serif" font-size="14.00">Mismatch</text> |
| </g> |
| <!-- examine_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender --> |
| <g id="edge21" class="edge"> |
| <title>examine_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M428.36,-475.09C483.16,-483.02 566.74,-494.01 639.79,-499 919.41,-518.11 1256.46,-497.98 1376.84,-489.44"/> |
| <polygon fill="black" stroke="black" points="1377.42,-492.91 1387.14,-488.7 1376.92,-485.93 1377.42,-492.91"/> |
| <text text-anchor="middle" x="928.29" y="-509.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- examine2_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender --> |
| <g id="edge22" class="edge"> |
| <title>examine2_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M755.06,-458.66C825.57,-467.46 956.54,-482.48 1068.79,-488 1163.79,-492.67 1187.69,-488.68 1282.79,-488 1314.26,-487.77 1349.71,-487.26 1377,-486.81"/> |
| <polygon fill="black" stroke="black" points="1377.1,-490.31 1387.04,-486.65 1376.98,-483.31 1377.1,-490.31"/> |
| <text text-anchor="middle" x="1041.29" y="-489.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- examine3_at_two_fingers_down_contender --> |
| <g id="node18" class="node"> |
| <title>examine3_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="928.29,-439 846.68,-421 928.29,-403 1009.91,-421 928.29,-439"/> |
| <text text-anchor="middle" x="928.29" y="-417.3" font-family="Times,serif" font-size="14.00">num fingers?</text> |
| </g> |
| <!-- examine2_at_two_fingers_down_contender->examine3_at_two_fingers_down_contender --> |
| <g id="edge23" class="edge"> |
| <title>examine2_at_two_fingers_down_contender->examine3_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M754.23,-445C787.74,-440.36 831.91,-434.23 867.24,-429.33"/> |
| <polygon fill="black" stroke="black" points="868,-432.76 877.43,-427.92 867.04,-425.82 868,-432.76"/> |
| <text text-anchor="middle" x="804.29" y="-443.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- examine3_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender --> |
| <g id="edge24" class="edge"> |
| <title>examine3_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M976.39,-428.4C1003.41,-432.56 1037.98,-437.76 1068.79,-442 1179.29,-457.19 1309.55,-472.82 1376.88,-480.72"/> |
| <polygon fill="black" stroke="black" points="1376.79,-484.24 1387.13,-481.93 1377.61,-477.29 1376.79,-484.24"/> |
| <text text-anchor="middle" x="1175.79" y="-472.8" font-family="Times,serif" font-size="14.00">1 or > 2</text> |
| </g> |
| <!-- examine4_at_two_fingers_down_contender --> |
| <g id="node19" class="node"> |
| <title>examine4_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="1175.79,-361 1068.79,-293 1175.79,-225 1282.79,-293 1175.79,-361"/> |
| <text text-anchor="middle" x="1175.79" y="-311.8" font-family="Times,serif" font-size="14.00">displacement</text> |
| <text text-anchor="middle" x="1175.79" y="-296.8" font-family="Times,serif" font-size="14.00"><</text> |
| <text text-anchor="middle" x="1175.79" y="-281.8" font-family="Times,serif" font-size="14.00">threshold</text> |
| <text text-anchor="middle" x="1175.79" y="-266.8" font-family="Times,serif" font-size="14.00">for both fingers?</text> |
| </g> |
| <!-- examine3_at_two_fingers_down_contender->examine4_at_two_fingers_down_contender --> |
| <g id="edge25" class="edge"> |
| <title>examine3_at_two_fingers_down_contender->examine4_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M953.28,-408.49C988.68,-390.04 1056.24,-354.81 1107.49,-328.09"/> |
| <polygon fill="black" stroke="black" points="1109.28,-331.1 1116.53,-323.38 1106.05,-324.9 1109.28,-331.1"/> |
| <text text-anchor="middle" x="1041.29" y="-367.8" font-family="Times,serif" font-size="14.00">2</text> |
| </g> |
| <!-- return_matched_contender_at_two_fingers_down_contender --> |
| <g id="node20" class="node"> |
| <title>return_matched_contender_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="1212.29,-432.5 1139.29,-432.5 1139.29,-379.5 1212.29,-379.5 1212.29,-432.5"/> |
| <text text-anchor="middle" x="1175.79" y="-417.3" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1175.79" y="-402.3" font-family="Times,serif" font-size="14.00">Matched</text> |
| <text text-anchor="middle" x="1175.79" y="-387.3" font-family="Times,serif" font-size="14.00">Contender</text> |
| </g> |
| <!-- examine3_at_two_fingers_down_contender->return_matched_contender_at_two_fingers_down_contender --> |
| <g id="edge26" class="edge"> |
| <title>examine3_at_two_fingers_down_contender->return_matched_contender_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M992.52,-417.14C1035.11,-414.53 1090.32,-411.16 1128.77,-408.81"/> |
| <polygon fill="black" stroke="black" points="1129.38,-412.28 1139.15,-408.18 1128.95,-405.29 1129.38,-412.28"/> |
| <text text-anchor="middle" x="1041.29" y="-417.8" font-family="Times,serif" font-size="14.00">0</text> |
| </g> |
| <!-- examine4_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender --> |
| <g id="edge27" class="edge"> |
| <title>examine4_at_two_fingers_down_contender->return_mismatch_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M1226.56,-328.75C1244.45,-341.83 1264.68,-356.89 1282.79,-371 1321.1,-400.85 1364.06,-436.63 1392.06,-460.26"/> |
| <polygon fill="black" stroke="black" points="1390,-463.1 1399.89,-466.89 1394.52,-457.76 1390,-463.1"/> |
| <text text-anchor="middle" x="1310.29" y="-401.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- return_self_at_two_fingers_down_contender --> |
| <g id="node21" class="node"> |
| <title>return_self_at_two_fingers_down_contender</title> |
| <polygon fill="none" stroke="black" points="1450.29,-312 1396.29,-312 1396.29,-274 1450.29,-274 1450.29,-312"/> |
| <text text-anchor="middle" x="1423.29" y="-296.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1423.29" y="-281.8" font-family="Times,serif" font-size="14.00">`self`</text> |
| </g> |
| <!-- examine4_at_two_fingers_down_contender->return_self_at_two_fingers_down_contender --> |
| <g id="edge28" class="edge"> |
| <title>examine4_at_two_fingers_down_contender->return_self_at_two_fingers_down_contender</title> |
| <path fill="none" stroke="black" d="M1283.05,-293C1319.88,-293 1358.74,-293 1386.02,-293"/> |
| <polygon fill="black" stroke="black" points="1386.24,-296.5 1396.24,-293 1386.24,-289.5 1386.24,-296.5"/> |
| <text text-anchor="middle" x="1310.29" y="-296.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- return_mismatch_at_matched_contender --> |
| <g id="node23" class="node"> |
| <title>return_mismatch_at_matched_contender</title> |
| <polygon fill="none" stroke="black" points="1211.79,-88 1139.79,-88 1139.79,-50 1211.79,-50 1211.79,-88"/> |
| <text text-anchor="middle" x="1175.79" y="-72.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1175.79" y="-57.8" font-family="Times,serif" font-size="14.00">Mismatch</text> |
| </g> |
| <!-- verify_at_matched_contender->return_mismatch_at_matched_contender --> |
| <g id="edge30" class="edge"> |
| <title>verify_at_matched_contender->return_mismatch_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M420.19,-109.92C474.28,-94.83 562.19,-72.54 639.79,-63 821.11,-40.71 868.27,-51.65 1050.79,-59 1076.92,-60.05 1106.08,-62.35 1129.55,-64.47"/> |
| <polygon fill="black" stroke="black" points="1129.28,-67.96 1139.56,-65.4 1129.93,-60.99 1129.28,-67.96"/> |
| <text text-anchor="middle" x="804.29" y="-53.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- verify2_at_matched_contender --> |
| <g id="node24" class="node"> |
| <title>verify2_at_matched_contender</title> |
| <polygon fill="none" stroke="black" points="702.79,-178 642.79,-125 702.79,-72 762.79,-125 702.79,-178"/> |
| <text text-anchor="middle" x="702.79" y="-136.3" font-family="Times,serif" font-size="14.00">exactly</text> |
| <text text-anchor="middle" x="702.79" y="-121.3" font-family="Times,serif" font-size="14.00">zero</text> |
| <text text-anchor="middle" x="702.79" y="-106.3" font-family="Times,serif" font-size="14.00">fingers?</text> |
| </g> |
| <!-- verify_at_matched_contender->verify2_at_matched_contender --> |
| <g id="edge31" class="edge"> |
| <title>verify_at_matched_contender->verify2_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M441.05,-125C497.87,-125 576.51,-125 632.54,-125"/> |
| <polygon fill="black" stroke="black" points="632.72,-128.5 642.72,-125 632.72,-121.5 632.72,-128.5"/> |
| <text text-anchor="middle" x="612.29" y="-128.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- verify2_at_matched_contender->return_mismatch_at_matched_contender --> |
| <g id="edge32" class="edge"> |
| <title>verify2_at_matched_contender->return_mismatch_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M743.71,-107.95C771.05,-97.16 808.44,-84.13 842.79,-78 943.88,-59.96 1064.99,-62.66 1129.35,-65.98"/> |
| <polygon fill="black" stroke="black" points="1129.38,-69.49 1139.55,-66.54 1129.76,-62.5 1129.38,-69.49"/> |
| <text text-anchor="middle" x="928.29" y="-81.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| <!-- verify3_at_matched_contender --> |
| <g id="node25" class="node"> |
| <title>verify3_at_matched_contender</title> |
| <polygon fill="none" stroke="black" points="928.29,-178 865.29,-140 928.29,-102 991.29,-140 928.29,-178"/> |
| <text text-anchor="middle" x="928.29" y="-143.8" font-family="Times,serif" font-size="14.00">button</text> |
| <text text-anchor="middle" x="928.29" y="-128.8" font-family="Times,serif" font-size="14.00">pressed?</text> |
| </g> |
| <!-- verify2_at_matched_contender->verify3_at_matched_contender --> |
| <g id="edge33" class="edge"> |
| <title>verify2_at_matched_contender->verify3_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M758.76,-128.69C789.66,-130.76 828.46,-133.37 861.04,-135.55"/> |
| <polygon fill="black" stroke="black" points="861.17,-139.07 871.38,-136.25 861.64,-132.09 861.17,-139.07"/> |
| <text text-anchor="middle" x="804.29" y="-135.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- verify3_at_matched_contender->return_mismatch_at_matched_contender --> |
| <g id="edge34" class="edge"> |
| <title>verify3_at_matched_contender->return_mismatch_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M971.22,-127.88C1015.27,-115.14 1084.33,-95.16 1129.58,-82.08"/> |
| <polygon fill="black" stroke="black" points="1130.78,-85.37 1139.42,-79.23 1128.84,-78.65 1130.78,-85.37"/> |
| <text text-anchor="middle" x="1041.29" y="-111.8" font-family="Times,serif" font-size="14.00">yes</text> |
| </g> |
| <!-- return_self_at_matched_contender --> |
| <g id="node26" class="node"> |
| <title>return_self_at_matched_contender</title> |
| <polygon fill="none" stroke="black" points="1202.79,-159 1148.79,-159 1148.79,-121 1202.79,-121 1202.79,-159"/> |
| <text text-anchor="middle" x="1175.79" y="-143.8" font-family="Times,serif" font-size="14.00">return</text> |
| <text text-anchor="middle" x="1175.79" y="-128.8" font-family="Times,serif" font-size="14.00">`self`</text> |
| </g> |
| <!-- verify3_at_matched_contender->return_self_at_matched_contender --> |
| <g id="edge35" class="edge"> |
| <title>verify3_at_matched_contender->return_self_at_matched_contender</title> |
| <path fill="none" stroke="black" d="M991.56,-140C1037.92,-140 1099.61,-140 1138.27,-140"/> |
| <polygon fill="black" stroke="black" points="1138.53,-143.5 1148.53,-140 1138.53,-136.5 1138.53,-143.5"/> |
| <text text-anchor="middle" x="1041.29" y="-143.8" font-family="Times,serif" font-size="14.00">no</text> |
| </g> |
| </g> |
| </svg> |