hardsploit_gui 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/Hardsploit_gui.rb +4 -5
- data/lib/class/Chip_clone.rb +70 -0
- data/lib/class/Chip_editor.rb +1 -0
- data/lib/class/Chip_management.rb +73 -52
- data/lib/class/ErrorMsg.rb +1 -0
- data/lib/class/Firmware.rb +1 -1
- data/lib/class/Progress_bar.rb +1 -1
- data/lib/class/Wire_helper.rb +6 -3
- data/lib/class/{I2C → i2c}/I2c_command.rb +0 -0
- data/lib/class/{I2C/I2c_export.rb → i2c/I2c_read.rb} +15 -15
- data/lib/class/{I2C → i2c}/I2c_scanner.rb +2 -1
- data/lib/class/{I2C → i2c}/I2c_settings.rb +1 -0
- data/lib/class/{I2C/I2c_import.rb → i2c/I2c_write.rb} +13 -12
- data/lib/class/{PARALLEL/Parallel_export.rb → parallel/Parallel_read.rb} +17 -18
- data/lib/class/{PARALLEL → parallel}/Parallel_settings.rb +0 -0
- data/lib/class/{PARALLEL/Parallel_import.rb → parallel/Parallel_write.rb} +11 -10
- data/lib/class/{SPI/Spi_export.rb → spi/Spi_read.rb} +15 -15
- data/lib/class/{SPI → spi}/Spi_settings.rb +0 -0
- data/lib/class/{SPI → spi}/Spi_sniffer.rb +2 -1
- data/lib/class/{SPI/Spi_import.rb → spi/Spi_write.rb} +13 -12
- data/lib/class/swd/Swd.rb +10 -10
- data/lib/class/swd/Swd_scanner.rb +2 -1
- data/lib/class/uart/Uart_baudrate.rb +1 -1
- data/lib/class/uart/Uart_console.rb +1 -1
- data/lib/class/uart/Uart_settings.rb +1 -0
- data/lib/db/development.sqlite3 +0 -0
- data/lib/gui/gui_chip_clone.rb +87 -0
- data/lib/gui/gui_chip_editor.rb +349 -349
- data/lib/gui/gui_chip_management.rb +378 -377
- data/lib/gui/gui_command_editor.rb +219 -219
- data/lib/gui/gui_export.rb +132 -132
- data/lib/gui/gui_export_manager.rb +93 -93
- data/lib/gui/gui_generic_commands.rb +202 -202
- data/lib/gui/gui_generic_read.rb +185 -0
- data/lib/gui/gui_generic_write.rb +142 -0
- data/lib/gui/gui_i2c_command.rb +116 -116
- data/lib/gui/gui_i2c_settings.rb +242 -230
- data/lib/gui/gui_import.rb +131 -131
- data/lib/gui/gui_parallel_settings.rb +195 -195
- data/lib/gui/gui_progress_bar.rb +85 -85
- data/lib/gui/gui_signal_mapper.rb +121 -121
- data/lib/gui/gui_signal_scanner.rb +146 -146
- data/lib/gui/gui_spi_settings.rb +313 -313
- data/lib/gui/gui_spi_sniffer.rb +112 -112
- data/lib/gui/gui_swd_settings.rb +166 -166
- data/lib/gui/gui_uart_baudrate.rb +114 -114
- data/lib/gui/gui_uart_console.rb +164 -164
- data/lib/gui/gui_uart_settings.rb +243 -243
- data/lib/gui/gui_wire_helper.rb +99 -99
- data/lib/gui_designer/compile_to_ruby.sh +14 -0
- data/lib/gui_designer/gui_chip_clone.ui +96 -0
- data/lib/gui_designer/gui_chip_management.ui +25 -22
- data/lib/gui_designer/{gui_generic_export.ui → gui_generic_read.ui} +152 -72
- data/lib/gui_designer/{gui_generic_import.ui → gui_generic_write.ui} +47 -47
- data/lib/gui_designer/gui_i2c_settings.ui +68 -60
- data/lib/hardsploit-api/Examples/swdProgrammer.rb +76 -0
- data/lib/hardsploit-api/Examples/testI2C.rb +183 -0
- data/lib/hardsploit-api/Examples/testNRF24L01.rb +122 -0
- data/lib/hardsploit-api/Examples/testParralel.rb +84 -0
- data/lib/hardsploit-api/Examples/testSPI.rb +113 -0
- data/lib/hardsploit-api/Examples/testSPISniffer.rb +91 -0
- data/lib/hardsploit-api/Examples/testSWD.rb +224 -0
- data/lib/hardsploit-api/Examples/testUARTBufferOverflow.rb +113 -0
- data/lib/hardsploit-api/Examples/testUARTConsole.rb +74 -0
- data/lib/hardsploit-api/Examples/testUARTFuzzer.rb +109 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/SPI/SPI_SNIFFER/HARDSPLOIT_FIRMWARE_FPGA_SPI_SNIFFER.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/VersionFPGA.rb +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
- data/lib/{Firmwares → hardsploit-api/Firmwares}/UC/VersionUC.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_CONSTANT.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_ERROR.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_FIRMWARE.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_PROGRESS.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_USB_COMMUNICATION.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/I2C/HardsploitAPI_I2C.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SPI/HardsploitAPI_SPI.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD_STM32.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/TEST/HardsploitAPI_TEST_INTERACT.rb +0 -0
- data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/UART/HardsploitAPI_UART.rb +0 -0
- data/lib/hardsploit-api/LICENSE.txt +674 -0
- data/lib/hardsploit-api/README.md +22 -0
- data/lib/hardsploit-api/TRADEMARK +3 -0
- data/lib/logs/error.log +80 -0
- metadata +65 -49
- data/lib/gui/gui_generic_export.rb +0 -164
- data/lib/gui/gui_generic_import.rb +0 -142
- data/lib/gui/gui_spi_import.rb +0 -126
@@ -1,142 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
** Form generated from reading ui file 'gui_generic_import.ui'
|
3
|
-
**
|
4
|
-
** Created: mar. juil. 19 13:51:01 2016
|
5
|
-
** by: Qt User Interface Compiler version 4.8.6
|
6
|
-
**
|
7
|
-
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
8
|
-
=end
|
9
|
-
|
10
|
-
class Ui_Generic_import
|
11
|
-
attr_reader :gridLayout
|
12
|
-
attr_reader :vl
|
13
|
-
attr_reader :hl2
|
14
|
-
attr_reader :lbl_chip
|
15
|
-
attr_reader :lbl_export
|
16
|
-
attr_reader :hs
|
17
|
-
attr_reader :fl
|
18
|
-
attr_reader :lbl_start
|
19
|
-
attr_reader :lie_start
|
20
|
-
attr_reader :btn_file
|
21
|
-
attr_reader :lbl_file
|
22
|
-
attr_reader :lbl_selected
|
23
|
-
attr_reader :lbl_selected_file
|
24
|
-
attr_reader :hl
|
25
|
-
attr_reader :btn_import
|
26
|
-
|
27
|
-
def setupUi(generic_import)
|
28
|
-
if generic_import.objectName.nil?
|
29
|
-
generic_import.objectName = "generic_import"
|
30
|
-
end
|
31
|
-
generic_import.windowModality = Qt::ApplicationModal
|
32
|
-
generic_import.resize(317, 155)
|
33
|
-
@gridLayout = Qt::GridLayout.new(generic_import)
|
34
|
-
@gridLayout.objectName = "gridLayout"
|
35
|
-
@vl = Qt::VBoxLayout.new()
|
36
|
-
@vl.objectName = "vl"
|
37
|
-
@hl2 = Qt::HBoxLayout.new()
|
38
|
-
@hl2.objectName = "hl2"
|
39
|
-
@lbl_chip = Qt::Label.new(generic_import)
|
40
|
-
@lbl_chip.objectName = "lbl_chip"
|
41
|
-
|
42
|
-
@hl2.addWidget(@lbl_chip)
|
43
|
-
|
44
|
-
@lbl_export = Qt::Label.new(generic_import)
|
45
|
-
@lbl_export.objectName = "lbl_export"
|
46
|
-
|
47
|
-
@hl2.addWidget(@lbl_export)
|
48
|
-
|
49
|
-
@hs = Qt::SpacerItem.new(40, 20, Qt::SizePolicy::Expanding, Qt::SizePolicy::Minimum)
|
50
|
-
|
51
|
-
@hl2.addItem(@hs)
|
52
|
-
|
53
|
-
|
54
|
-
@vl.addLayout(@hl2)
|
55
|
-
|
56
|
-
@fl = Qt::FormLayout.new()
|
57
|
-
@fl.objectName = "fl"
|
58
|
-
@lbl_start = Qt::Label.new(generic_import)
|
59
|
-
@lbl_start.objectName = "lbl_start"
|
60
|
-
|
61
|
-
@fl.setWidget(1, Qt::FormLayout::LabelRole, @lbl_start)
|
62
|
-
|
63
|
-
@lie_start = Qt::LineEdit.new(generic_import)
|
64
|
-
@lie_start.objectName = "lie_start"
|
65
|
-
@lie_start.maxLength = 20
|
66
|
-
|
67
|
-
@fl.setWidget(1, Qt::FormLayout::FieldRole, @lie_start)
|
68
|
-
|
69
|
-
@btn_file = Qt::PushButton.new(generic_import)
|
70
|
-
@btn_file.objectName = "btn_file"
|
71
|
-
|
72
|
-
@fl.setWidget(2, Qt::FormLayout::FieldRole, @btn_file)
|
73
|
-
|
74
|
-
@lbl_file = Qt::Label.new(generic_import)
|
75
|
-
@lbl_file.objectName = "lbl_file"
|
76
|
-
|
77
|
-
@fl.setWidget(2, Qt::FormLayout::LabelRole, @lbl_file)
|
78
|
-
|
79
|
-
@lbl_selected = Qt::Label.new(generic_import)
|
80
|
-
@lbl_selected.objectName = "lbl_selected"
|
81
|
-
|
82
|
-
@fl.setWidget(3, Qt::FormLayout::LabelRole, @lbl_selected)
|
83
|
-
|
84
|
-
@lbl_selected_file = Qt::Label.new(generic_import)
|
85
|
-
@lbl_selected_file.objectName = "lbl_selected_file"
|
86
|
-
@lbl_selected_file.maximumSize = Qt::Size.new(250, 16777215)
|
87
|
-
|
88
|
-
@fl.setWidget(3, Qt::FormLayout::FieldRole, @lbl_selected_file)
|
89
|
-
|
90
|
-
|
91
|
-
@vl.addLayout(@fl)
|
92
|
-
|
93
|
-
@hl = Qt::HBoxLayout.new()
|
94
|
-
@hl.objectName = "hl"
|
95
|
-
@btn_import = Qt::PushButton.new(generic_import)
|
96
|
-
@btn_import.objectName = "btn_import"
|
97
|
-
@btn_import.enabled = false
|
98
|
-
|
99
|
-
@hl.addWidget(@btn_import)
|
100
|
-
|
101
|
-
|
102
|
-
@vl.addLayout(@hl)
|
103
|
-
|
104
|
-
|
105
|
-
@gridLayout.addLayout(@vl, 0, 0, 1, 1)
|
106
|
-
|
107
|
-
|
108
|
-
retranslateUi(generic_import)
|
109
|
-
Qt::Object.connect(@btn_import, SIGNAL('clicked()'), generic_import, SLOT('import()'))
|
110
|
-
Qt::Object.connect(@btn_file, SIGNAL('clicked()'), generic_import, SLOT('select_import_file()'))
|
111
|
-
|
112
|
-
Qt::MetaObject.connectSlotsByName(generic_import)
|
113
|
-
end # setupUi
|
114
|
-
|
115
|
-
def setup_ui(generic_import)
|
116
|
-
setupUi(generic_import)
|
117
|
-
end
|
118
|
-
|
119
|
-
def retranslateUi(generic_import)
|
120
|
-
generic_import.windowTitle = Qt::Application.translate("Generic_import", "Hardsploit - Import", nil, Qt::Application::UnicodeUTF8)
|
121
|
-
@lbl_chip.text = Qt::Application.translate("Generic_import", "[CHIP]", nil, Qt::Application::UnicodeUTF8)
|
122
|
-
@lbl_export.text = Qt::Application.translate("Generic_import", "Import", nil, Qt::Application::UnicodeUTF8)
|
123
|
-
@lbl_start.text = Qt::Application.translate("Generic_import", "Start address:", nil, Qt::Application::UnicodeUTF8)
|
124
|
-
@lie_start.text = Qt::Application.translate("Generic_import", "0", nil, Qt::Application::UnicodeUTF8)
|
125
|
-
@btn_file.text = Qt::Application.translate("Generic_import", "File...", nil, Qt::Application::UnicodeUTF8)
|
126
|
-
@lbl_file.text = Qt::Application.translate("Generic_import", "File:", nil, Qt::Application::UnicodeUTF8)
|
127
|
-
@lbl_selected.text = Qt::Application.translate("Generic_import", "Selected file:", nil, Qt::Application::UnicodeUTF8)
|
128
|
-
@lbl_selected_file.text = Qt::Application.translate("Generic_import", "None", nil, Qt::Application::UnicodeUTF8)
|
129
|
-
@btn_import.text = Qt::Application.translate("Generic_import", "Import", nil, Qt::Application::UnicodeUTF8)
|
130
|
-
end # retranslateUi
|
131
|
-
|
132
|
-
def retranslate_ui(generic_import)
|
133
|
-
retranslateUi(generic_import)
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
137
|
-
|
138
|
-
module Ui
|
139
|
-
class Generic_import < Ui_Generic_import
|
140
|
-
end
|
141
|
-
end # module Ui
|
142
|
-
|
data/lib/gui/gui_spi_import.rb
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
=begin
|
2
|
-
** Form generated from reading ui file 'gui_spi_import.ui'
|
3
|
-
**
|
4
|
-
** Created: jeu. déc. 3 15:41:11 2015
|
5
|
-
** by: Qt User Interface Compiler version 4.8.6
|
6
|
-
**
|
7
|
-
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
8
|
-
=end
|
9
|
-
|
10
|
-
class Ui_Spi_import
|
11
|
-
attr_reader :gridLayout
|
12
|
-
attr_reader :vl
|
13
|
-
attr_reader :hl2
|
14
|
-
attr_reader :lbl_chip
|
15
|
-
attr_reader :lbl_export
|
16
|
-
attr_reader :hs
|
17
|
-
attr_reader :fl
|
18
|
-
attr_reader :lbl_start
|
19
|
-
attr_reader :lie_start
|
20
|
-
attr_reader :btn_file
|
21
|
-
attr_reader :lbl_file
|
22
|
-
attr_reader :hl
|
23
|
-
attr_reader :btn_import
|
24
|
-
|
25
|
-
def setupUi(spi_import)
|
26
|
-
if spi_import.objectName.nil?
|
27
|
-
spi_import.objectName = "spi_import"
|
28
|
-
end
|
29
|
-
spi_import.resize(265, 137)
|
30
|
-
@gridLayout = Qt::GridLayout.new(spi_import)
|
31
|
-
@gridLayout.objectName = "gridLayout"
|
32
|
-
@vl = Qt::VBoxLayout.new()
|
33
|
-
@vl.objectName = "vl"
|
34
|
-
@hl2 = Qt::HBoxLayout.new()
|
35
|
-
@hl2.objectName = "hl2"
|
36
|
-
@lbl_chip = Qt::Label.new(spi_import)
|
37
|
-
@lbl_chip.objectName = "lbl_chip"
|
38
|
-
|
39
|
-
@hl2.addWidget(@lbl_chip)
|
40
|
-
|
41
|
-
@lbl_export = Qt::Label.new(spi_import)
|
42
|
-
@lbl_export.objectName = "lbl_export"
|
43
|
-
|
44
|
-
@hl2.addWidget(@lbl_export)
|
45
|
-
|
46
|
-
@hs = Qt::SpacerItem.new(40, 20, Qt::SizePolicy::Expanding, Qt::SizePolicy::Minimum)
|
47
|
-
|
48
|
-
@hl2.addItem(@hs)
|
49
|
-
|
50
|
-
|
51
|
-
@vl.addLayout(@hl2)
|
52
|
-
|
53
|
-
@fl = Qt::FormLayout.new()
|
54
|
-
@fl.objectName = "fl"
|
55
|
-
@lbl_start = Qt::Label.new(spi_import)
|
56
|
-
@lbl_start.objectName = "lbl_start"
|
57
|
-
|
58
|
-
@fl.setWidget(1, Qt::FormLayout::LabelRole, @lbl_start)
|
59
|
-
|
60
|
-
@lie_start = Qt::LineEdit.new(spi_import)
|
61
|
-
@lie_start.objectName = "lie_start"
|
62
|
-
@lie_start.maxLength = 20
|
63
|
-
|
64
|
-
@fl.setWidget(1, Qt::FormLayout::FieldRole, @lie_start)
|
65
|
-
|
66
|
-
@btn_file = Qt::PushButton.new(spi_import)
|
67
|
-
@btn_file.objectName = "btn_file"
|
68
|
-
|
69
|
-
@fl.setWidget(2, Qt::FormLayout::FieldRole, @btn_file)
|
70
|
-
|
71
|
-
@lbl_file = Qt::Label.new(spi_import)
|
72
|
-
@lbl_file.objectName = "lbl_file"
|
73
|
-
|
74
|
-
@fl.setWidget(2, Qt::FormLayout::LabelRole, @lbl_file)
|
75
|
-
|
76
|
-
|
77
|
-
@vl.addLayout(@fl)
|
78
|
-
|
79
|
-
@hl = Qt::HBoxLayout.new()
|
80
|
-
@hl.objectName = "hl"
|
81
|
-
@btn_import = Qt::PushButton.new(spi_import)
|
82
|
-
@btn_import.objectName = "btn_import"
|
83
|
-
@btn_import.enabled = false
|
84
|
-
|
85
|
-
@hl.addWidget(@btn_import)
|
86
|
-
|
87
|
-
|
88
|
-
@vl.addLayout(@hl)
|
89
|
-
|
90
|
-
|
91
|
-
@gridLayout.addLayout(@vl, 0, 0, 1, 1)
|
92
|
-
|
93
|
-
|
94
|
-
retranslateUi(spi_import)
|
95
|
-
Qt::Object.connect(@btn_import, SIGNAL('clicked()'), spi_import, SLOT('import()'))
|
96
|
-
Qt::Object.connect(@btn_file, SIGNAL('clicked()'), spi_import, SLOT('select_import_file()'))
|
97
|
-
|
98
|
-
Qt::MetaObject.connectSlotsByName(spi_import)
|
99
|
-
end # setupUi
|
100
|
-
|
101
|
-
def setup_ui(spi_import)
|
102
|
-
setupUi(spi_import)
|
103
|
-
end
|
104
|
-
|
105
|
-
def retranslateUi(spi_import)
|
106
|
-
spi_import.windowTitle = Qt::Application.translate("Spi_import", "Hardsploit - Import", nil, Qt::Application::UnicodeUTF8)
|
107
|
-
@lbl_chip.text = Qt::Application.translate("Spi_import", "[CHIP]", nil, Qt::Application::UnicodeUTF8)
|
108
|
-
@lbl_export.text = Qt::Application.translate("Spi_import", "Import", nil, Qt::Application::UnicodeUTF8)
|
109
|
-
@lbl_start.text = Qt::Application.translate("Spi_import", "Start address:", nil, Qt::Application::UnicodeUTF8)
|
110
|
-
@lie_start.text = Qt::Application.translate("Spi_import", "0", nil, Qt::Application::UnicodeUTF8)
|
111
|
-
@btn_file.text = Qt::Application.translate("Spi_import", "File...", nil, Qt::Application::UnicodeUTF8)
|
112
|
-
@lbl_file.text = Qt::Application.translate("Spi_import", "File:", nil, Qt::Application::UnicodeUTF8)
|
113
|
-
@btn_import.text = Qt::Application.translate("Spi_import", "Import", nil, Qt::Application::UnicodeUTF8)
|
114
|
-
end # retranslateUi
|
115
|
-
|
116
|
-
def retranslate_ui(spi_import)
|
117
|
-
retranslateUi(spi_import)
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
module Ui
|
123
|
-
class Spi_import < Ui_Spi_import
|
124
|
-
end
|
125
|
-
end # module Ui
|
126
|
-
|