pwn 0.5.618 → 0.5.621
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/README.md +14 -6
- data/bin/pwn_gqrx_scanner +25 -5
- data/documentation/Agent-Tool-Registry.md +4 -4
- data/documentation/Cron.md +13 -0
- data/documentation/Diagrams.md +6 -2
- data/documentation/Extrospection.md +96 -11
- data/documentation/Home.md +5 -4
- data/documentation/How-PWN-Works.md +7 -4
- data/documentation/Mistakes.md +97 -0
- data/documentation/Persistence.md +4 -1
- data/documentation/SDR.md +23 -5
- data/documentation/Skills-Memory-Learning.md +16 -5
- data/documentation/Transparent-Browser.md +18 -1
- data/documentation/diagrams/agent-tool-registry.svg +103 -100
- data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
- data/documentation/diagrams/aws-cloud-security.svg +25 -25
- data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
- data/documentation/diagrams/code-scanning-sast.svg +25 -25
- data/documentation/diagrams/cron-scheduling.svg +23 -23
- data/documentation/diagrams/dot/agent-tool-registry.dot +3 -3
- data/documentation/diagrams/dot/extrospection-world-awareness.dot +33 -10
- data/documentation/diagrams/dot/memory-skills-detailed.dot +16 -5
- data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
- data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
- data/documentation/diagrams/dot/persistence-filesystem.dot +4 -2
- data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +25 -7
- data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
- data/documentation/diagrams/driver-framework.svg +13 -13
- data/documentation/diagrams/extrospection-world-awareness.svg +241 -93
- data/documentation/diagrams/fuzzing-workflow.svg +24 -24
- data/documentation/diagrams/hardware-hacking.svg +18 -18
- data/documentation/diagrams/history-to-drivers.svg +18 -18
- data/documentation/diagrams/memory-skills-detailed.svg +169 -97
- data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
- data/documentation/diagrams/network-infra-testing.svg +27 -27
- data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
- data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
- data/documentation/diagrams/persistence-filesystem.svg +111 -87
- data/documentation/diagrams/plugin-ecosystem.svg +35 -35
- data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +263 -149
- data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
- data/documentation/diagrams/reporting-pipeline.svg +18 -18
- data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
- data/documentation/diagrams/sdr-radio-flow.svg +76 -56
- data/documentation/diagrams/sessions-cron-automation.svg +18 -18
- data/documentation/diagrams/swarm-multi-agent.svg +39 -39
- data/documentation/diagrams/web-application-testing.svg +26 -26
- data/documentation/diagrams/zero-day-research-flow.svg +25 -25
- data/documentation/pwn-ai-Agent.md +28 -15
- data/lib/pwn/ai/agent/extrospection.rb +494 -6
- data/lib/pwn/ai/agent/learning.rb +67 -7
- data/lib/pwn/ai/agent/loop.rb +72 -6
- data/lib/pwn/ai/agent/mistakes.rb +369 -0
- data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
- data/lib/pwn/ai/agent/tools/extrospection.rb +88 -3
- data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
- data/lib/pwn/ai/agent.rb +1 -0
- data/lib/pwn/plugins/jira_data_center.rb +2 -2
- data/lib/pwn/sdr/decoder/adsb.rb +82 -0
- data/lib/pwn/sdr/decoder/apt.rb +136 -0
- data/lib/pwn/sdr/decoder/base.rb +258 -171
- data/lib/pwn/sdr/decoder/bluetooth.rb +71 -0
- data/lib/pwn/sdr/decoder/dect.rb +70 -0
- data/lib/pwn/sdr/decoder/dsp.rb +396 -0
- data/lib/pwn/sdr/decoder/flex.rb +177 -210
- data/lib/pwn/sdr/decoder/gps.rb +74 -0
- data/lib/pwn/sdr/decoder/gsm.rb +31 -62
- data/lib/pwn/sdr/decoder/iridium.rb +66 -0
- data/lib/pwn/sdr/decoder/lora.rb +80 -0
- data/lib/pwn/sdr/decoder/lte.rb +67 -0
- data/lib/pwn/sdr/decoder/morse.rb +138 -0
- data/lib/pwn/sdr/decoder/p25.rb +74 -0
- data/lib/pwn/sdr/decoder/pager.rb +61 -0
- data/lib/pwn/sdr/decoder/pocsag.rb +176 -54
- data/lib/pwn/sdr/decoder/rfid.rb +79 -0
- data/lib/pwn/sdr/decoder/rtl433.rb +86 -0
- data/lib/pwn/sdr/decoder/rtty.rb +139 -0
- data/lib/pwn/sdr/decoder/wifi.rb +77 -0
- data/lib/pwn/sdr/decoder/zigbee.rb +74 -0
- data/lib/pwn/sdr/decoder.rb +75 -7
- data/lib/pwn/sdr/frequency_allocation.rb +82 -41
- data/lib/pwn/sdr/gqrx.rb +186 -95
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
- data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
- data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
- data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
- data/third_party/pwn_rdoc.jsonl +115 -5
- metadata +46 -6
- data/README.md.bak +0 -200
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
digraph "PWN_SDR" {
|
|
2
2
|
graph [
|
|
3
|
-
label=<<B>PWN::SDR — Software-Defined Radio & RF Hacking</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">GQRX · FlipperZero · RFIDler · SonMicro · FrequencyAllocation</FONT>>,
|
|
3
|
+
label=<<B>PWN::SDR — Software-Defined Radio & RF Hacking</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">GQRX · FlipperZero · RFIDler · SonMicro · FrequencyAllocation · Decoder::* (20 protocols)</FONT>>,
|
|
4
4
|
labelloc=t, fontsize=20, fontname="Helvetica",
|
|
5
5
|
rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.2,
|
|
6
6
|
bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
|
|
@@ -15,22 +15,23 @@ digraph "PWN_SDR" {
|
|
|
15
15
|
subgraph cluster_hw {
|
|
16
16
|
label="Hardware"; fontcolor="#a7f3d0"; style=rounded;
|
|
17
17
|
color="#047857"; bgcolor="#022c22";
|
|
18
|
-
SDRhw [label="RTL-SDR / HackRF\n(via GQRX)",
|
|
19
|
-
Flipper [label="SDR::FlipperZero",
|
|
20
|
-
RFID [label="SDR::RFIDler\nSonMicroRFID",
|
|
18
|
+
SDRhw [label="RTL-SDR / HackRF\n(via GQRX / SoapySDR)", fillcolor="#6ee7b7"];
|
|
19
|
+
Flipper [label="SDR::FlipperZero", fillcolor="#6ee7b7"];
|
|
20
|
+
RFID [label="SDR::RFIDler\nSonMicroRFID", fillcolor="#6ee7b7"];
|
|
21
21
|
}
|
|
22
22
|
subgraph cluster_ctrl {
|
|
23
|
-
label="Control"; fontcolor="#fde68a"; style=rounded;
|
|
23
|
+
label="Control · Scan"; fontcolor="#fde68a"; style=rounded;
|
|
24
24
|
color="#a16207"; bgcolor="#422006";
|
|
25
|
-
GQRX [label="SDR::GQRX\nremote control ·
|
|
26
|
-
Freq [label="SDR::FrequencyAllocation\nband lookup",
|
|
27
|
-
Scan [label="bin/pwn_gqrx_scanner\
|
|
25
|
+
GQRX [label="SDR::GQRX\nremote control\nspectrum snapshot\n(median floor · DC null)", fillcolor="#fcd34d"];
|
|
26
|
+
Freq [label="SDR::FrequencyAllocation\nband lookup", fillcolor="#fcd34d"];
|
|
27
|
+
Scan [label="bin/pwn_gqrx_scanner\n--fft-scan · iterative\n--min-snr-db · --avg", fillcolor="#fcd34d"];
|
|
28
28
|
}
|
|
29
29
|
subgraph cluster_dec {
|
|
30
|
-
label="Decode"; fontcolor="#ddd6fe"; style=rounded;
|
|
30
|
+
label="Decode · Record"; fontcolor="#ddd6fe"; style=rounded;
|
|
31
31
|
color="#6d28d9"; bgcolor="#2e1065";
|
|
32
|
-
Dec [label="SDR::Decoder::*\
|
|
33
|
-
Obs [label="extro_observe\nrecord signal intel", fillcolor="#c4b5fd"];
|
|
32
|
+
Dec [label="SDR::Decoder::*\nADSB · APT · BT · DECT · GPS\nGSM · Iridium · LoRa · LTE\nMorse · P25 · POCSAG/FLEX\nRDS · RFID · rtl_433 · RTTY\nWiFi · ZigBee", fillcolor="#c4b5fd"];
|
|
33
|
+
Obs [label="extro_observe\ncategory: :rf\nrecord signal intel", fillcolor="#c4b5fd"];
|
|
34
|
+
Xrf [label="extro_snapshot :rf\nprobe_rf → hw inventory", fillcolor="#c4b5fd"];
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
RF -> SDRhw [color="#fb7185"];
|
|
@@ -42,4 +43,5 @@ digraph "PWN_SDR" {
|
|
|
42
43
|
GQRX -> Dec [color="#a78bfa"];
|
|
43
44
|
Freq -> Dec [color="#a78bfa"];
|
|
44
45
|
Scan -> Obs [color="#a78bfa"];
|
|
46
|
+
SDRhw -> Xrf [style=dashed, color="#fbbf24", constraint=false];
|
|
45
47
|
}
|
|
@@ -9,31 +9,31 @@
|
|
|
9
9
|
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 397.2)">
|
|
10
10
|
<title>PWN_Driver</title>
|
|
11
11
|
<polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-397.2 684.45,-397.2 684.45,43.2 -43.2,43.2"/>
|
|
12
|
-
<text xml:space="preserve" text-anchor="start" x="184.88" y="-332" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Driver Anatomy — bin/pwn_*</text>
|
|
13
|
-
<text xml:space="preserve" text-anchor="start" x="206.25" y="-320.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">52 shipped drivers · thin CLI over PWN::Plugins</text>
|
|
12
|
+
<text xml:space="preserve" text-anchor="start" x="184.88" y="-332" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Driver Anatomy — bin/pwn_*</text>
|
|
13
|
+
<text xml:space="preserve" text-anchor="start" x="206.25" y="-320.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#94a3b8">52 shipped drivers · thin CLI over PWN::Plugins</text>
|
|
14
14
|
<g id="clust1" class="cluster">
|
|
15
15
|
<title>cluster_d</title>
|
|
16
16
|
<path fill="#022c22" stroke="#047857" d="M276,-8C276,-8 419,-8 419,-8 425,-8 431,-14 431,-20 431,-20 431,-223 431,-223 431,-229 425,-235 419,-235 419,-235 276,-235 276,-235 270,-235 264,-229 264,-223 264,-223 264,-20 264,-20 264,-14 270,-8 276,-8"/>
|
|
17
|
-
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-212" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Driver Body</text>
|
|
17
|
+
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-212" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#a7f3d0">Driver Body</text>
|
|
18
18
|
</g>
|
|
19
19
|
<g id="clust3" class="cluster">
|
|
20
20
|
<title>cluster_o</title>
|
|
21
21
|
<path fill="#2e1065" stroke="#6d28d9" d="M521,-80C521,-80 621.25,-80 621.25,-80 627.25,-80 633.25,-86 633.25,-92 633.25,-92 633.25,-295 633.25,-295 633.25,-301 627.25,-307 621.25,-307 621.25,-307 521,-307 521,-307 515,-307 509,-301 509,-295 509,-295 509,-92 509,-92 509,-86 515,-80 521,-80"/>
|
|
22
|
-
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-284" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
|
|
22
|
+
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-284" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
|
|
23
23
|
</g>
|
|
24
24
|
<!-- Sh -->
|
|
25
25
|
<g id="node1" class="node">
|
|
26
26
|
<title>Sh</title>
|
|
27
27
|
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M166,-88C166,-88 12,-88 12,-88 6,-88 0,-82 0,-76 0,-76 0,-64 0,-64 0,-58 6,-52 12,-52 12,-52 166,-52 166,-52 172,-52 178,-58 178,-64 178,-64 178,-76 178,-76 178,-82 172,-88 166,-88"/>
|
|
28
|
-
<text xml:space="preserve" text-anchor="middle" x="89" y="-72.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">$ pwn_burp_suite_pro_active_scan \ </text>
|
|
29
|
-
<text xml:space="preserve" text-anchor="middle" x="89" y="-60.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">    -t https://target -o out/</text>
|
|
28
|
+
<text xml:space="preserve" text-anchor="middle" x="89" y="-72.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">$ pwn_burp_suite_pro_active_scan \ </text>
|
|
29
|
+
<text xml:space="preserve" text-anchor="middle" x="89" y="-60.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">    -t https://target -o out/</text>
|
|
30
30
|
</g>
|
|
31
31
|
<!-- Opt -->
|
|
32
32
|
<g id="node2" class="node">
|
|
33
33
|
<title>Opt</title>
|
|
34
34
|
<path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M378,-52C378,-52 317,-52 317,-52 311,-52 305,-46 305,-40 305,-40 305,-28 305,-28 305,-22 311,-16 317,-16 317,-16 378,-16 378,-16 384,-16 390,-22 390,-28 390,-28 390,-40 390,-40 390,-46 384,-52 378,-52"/>
|
|
35
|
-
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OptionParser</text>
|
|
36
|
-
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ARGV → opts{}</text>
|
|
35
|
+
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-36.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">OptionParser</text>
|
|
36
|
+
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-24.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">ARGV → opts{}</text>
|
|
37
37
|
</g>
|
|
38
38
|
<!-- Sh->Opt -->
|
|
39
39
|
<g id="edge1" class="edge">
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<g id="node3" class="node">
|
|
46
46
|
<title>Req</title>
|
|
47
47
|
<path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M370.88,-124C370.88,-124 324.12,-124 324.12,-124 318.12,-124 312.12,-118 312.12,-112 312.12,-112 312.12,-100 312.12,-100 312.12,-94 318.12,-88 324.12,-88 324.12,-88 370.88,-88 370.88,-88 376.88,-88 382.88,-94 382.88,-100 382.88,-100 382.88,-112 382.88,-112 382.88,-118 376.88,-124 370.88,-124"/>
|
|
48
|
-
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">require 'pwn'</text>
|
|
48
|
+
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-102.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">require 'pwn'</text>
|
|
49
49
|
</g>
|
|
50
50
|
<!-- Sh->Req -->
|
|
51
51
|
<g id="edge2" class="edge">
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
<g id="node4" class="node">
|
|
58
58
|
<title>Call</title>
|
|
59
59
|
<path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M411,-196C411,-196 284,-196 284,-196 278,-196 272,-190 272,-184 272,-184 272,-172 272,-172 272,-166 278,-160 284,-160 284,-160 411,-160 411,-160 417,-160 423,-166 423,-172 423,-172 423,-184 423,-184 423,-190 417,-196 411,-196"/>
|
|
60
|
-
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-174.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Plugins::X.method(opts)</text>
|
|
60
|
+
<text xml:space="preserve" text-anchor="middle" x="347.5" y="-174.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">PWN::Plugins::X.method(opts)</text>
|
|
61
61
|
</g>
|
|
62
62
|
<!-- Opt->Call -->
|
|
63
63
|
<g id="edge3" class="edge">
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
<g id="node5" class="node">
|
|
76
76
|
<title>Std</title>
|
|
77
77
|
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M613.25,-124C613.25,-124 529,-124 529,-124 523,-124 517,-118 517,-112 517,-112 517,-100 517,-100 517,-94 523,-88 529,-88 529,-88 613.25,-88 613.25,-88 619.25,-88 625.25,-94 625.25,-100 625.25,-100 625.25,-112 625.25,-112 625.25,-118 619.25,-124 613.25,-124"/>
|
|
78
|
-
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">STDOUT / STDERR</text>
|
|
78
|
+
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-102.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">STDOUT / STDERR</text>
|
|
79
79
|
</g>
|
|
80
80
|
<!-- Call->Std -->
|
|
81
81
|
<g id="edge5" class="edge">
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
<g id="node6" class="node">
|
|
88
88
|
<title>Rep</title>
|
|
89
89
|
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M599.38,-196C599.38,-196 542.88,-196 542.88,-196 536.88,-196 530.88,-190 530.88,-184 530.88,-184 530.88,-172 530.88,-172 530.88,-166 536.88,-160 542.88,-160 542.88,-160 599.38,-160 599.38,-160 605.38,-160 611.38,-166 611.38,-172 611.38,-172 611.38,-184 611.38,-184 611.38,-190 605.38,-196 599.38,-196"/>
|
|
90
|
-
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-174.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Reports</text>
|
|
90
|
+
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-174.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">PWN::Reports</text>
|
|
91
91
|
</g>
|
|
92
92
|
<!-- Call->Rep -->
|
|
93
93
|
<g id="edge6" class="edge">
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
<g id="node7" class="node">
|
|
100
100
|
<title>Ex</title>
|
|
101
101
|
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M587,-268C587,-268 555.25,-268 555.25,-268 549.25,-268 543.25,-262 543.25,-256 543.25,-256 543.25,-244 543.25,-244 543.25,-238 549.25,-232 555.25,-232 555.25,-232 587,-232 587,-232 593,-232 599,-238 599,-244 599,-244 599,-256 599,-256 599,-262 593,-268 587,-268"/>
|
|
102
|
-
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-246.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">exit code</text>
|
|
102
|
+
<text xml:space="preserve" text-anchor="middle" x="571.12" y="-246.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">exit code</text>
|
|
103
103
|
</g>
|
|
104
104
|
<!-- Call->Ex -->
|
|
105
105
|
<g id="edge7" class="edge">
|