| 1 | /******************************************************************************* | |
| 2 | * Copyhacked (H) 2012-2025. | |
| 3 | * This program and the accompanying materials | |
| 4 | * are made available under no term at all, use it like | |
| 5 | * you want, but share and discuss it | |
| 6 | * every time possible with every body. | |
| 7 | * | |
| 8 | * Contributors: | |
| 9 | * ron190 at ymail dot com - initial implementation | |
| 10 | ******************************************************************************/ | |
| 11 | package com.jsql.view.swing; | |
| 12 | ||
| 13 | import com.jsql.model.InjectionModel; | |
| 14 | import com.jsql.util.*; | |
| 15 | import com.jsql.view.interaction.SubscriberInteraction; | |
| 16 | import com.jsql.view.swing.action.HotkeyUtil; | |
| 17 | import com.jsql.view.swing.menubar.AppMenubar; | |
| 18 | import com.jsql.view.swing.panel.PanelAddressBar; | |
| 19 | import com.jsql.view.swing.panel.split.SplitNS; | |
| 20 | import com.jsql.view.swing.terminal.AbstractExploit; | |
| 21 | import com.jsql.view.swing.tab.TabManagers; | |
| 22 | import com.jsql.view.swing.util.MediatorHelper; | |
| 23 | import com.jsql.view.swing.util.UiUtil; | |
| 24 | import org.apache.commons.lang3.SystemUtils; | |
| 25 | import org.apache.logging.log4j.LogManager; | |
| 26 | import org.apache.logging.log4j.Logger; | |
| 27 | ||
| 28 | import javax.swing.*; | |
| 29 | import java.awt.*; | |
| 30 | import java.awt.event.WindowAdapter; | |
| 31 | import java.awt.event.WindowEvent; | |
| 32 | import java.util.HashMap; | |
| 33 | import java.util.Map; | |
| 34 | import java.util.UUID; | |
| 35 | import java.util.prefs.Preferences; | |
| 36 | import java.util.stream.Stream; | |
| 37 | ||
| 38 | /** | |
| 39 | * View in the MVC pattern, defines all the components | |
| 40 | * and process actions sent by the model.<br> | |
| 41 | * Main groups of components:<br> | |
| 42 | * - at the top: textfield inputs,<br> | |
| 43 | * - at the center: tree on the left, table on the right,<br> | |
| 44 | * - at the bottom: information labels. | |
| 45 | */ | |
| 46 | public class JFrameView extends JFrame { | |
| 47 | ||
| 48 | private static final Logger LOGGER = LogManager.getRootLogger(); | |
| 49 | ||
| 50 | /** | |
| 51 | * Map of terminal by unique identifier. | |
| 52 | */ | |
| 53 | private final Map<UUID, AbstractExploit> mapUuidShell = new HashMap<>(); | |
| 54 | private final transient SubscriberInteraction subscriber = new SubscriberInteraction("com.jsql.view.swing.interaction"); | |
| 55 | private TabManagers tabManagers; | |
| 56 | private boolean isMaximized = false; | |
| 57 | private final InjectionModel injectionModel; | |
| 58 | private SplitNS splitNS; // main | |
| 59 | ||
| 60 | public JFrameView(InjectionModel injectionModel) { // Build the GUI: add app icon, tree icons, the 3 main panels | |
| 61 | super(StringUtil.APP_NAME); | |
| 62 | this.injectionModel = injectionModel; | |
| 63 |
1
1. <init> : removed call to com/jsql/view/swing/util/MediatorHelper::register → NO_COVERAGE |
MediatorHelper.register(this); |
| 64 |
1
1. <init> : removed call to com/jsql/view/swing/util/UiUtil::prepareGUI → NO_COVERAGE |
UiUtil.prepareGUI(); // Load UI before any component |
| 65 |
1
1. <init> : removed call to com/jsql/view/swing/JFrameView::initPaneComponents → NO_COVERAGE |
this.initPaneComponents(); |
| 66 |
1
1. <init> : removed call to com/jsql/view/swing/JFrameView::initWindow → NO_COVERAGE |
this.initWindow(); |
| 67 |
1
1. <init> : removed call to com/jsql/view/swing/JFrameView::initShortcuts → NO_COVERAGE |
this.initShortcuts(); |
| 68 |
1
1. <init> : removed call to com/jsql/view/swing/JFrameView::displayVersion → NO_COVERAGE |
this.displayVersion(); |
| 69 |
1
1. <init> : removed call to com/jsql/util/I18nUtil::checkCurrentLanguage → NO_COVERAGE |
I18nUtil.checkCurrentLanguage(); |
| 70 |
1
1. <init> : removed call to com/jsql/view/swing/JFrameView::check4K → NO_COVERAGE |
this.check4K(); |
| 71 | ||
| 72 |
1
1. <init> : removed call to javax/swing/SwingUtilities::invokeLater → NO_COVERAGE |
SwingUtilities.invokeLater(() -> { // paint native blu svg in theme color behind the scene |
| 73 |
1
1. lambda$new$0 : removed call to com/jsql/view/swing/menubar/AppMenubar::applyTheme → NO_COVERAGE |
AppMenubar.applyTheme(injectionModel.getMediatorUtils().getPreferencesUtil().getThemeFlatLafName()); // refresh missing components |
| 74 |
1
1. lambda$new$0 : negated conditional → NO_COVERAGE |
if (injectionModel.getMediatorUtils().getProxyUtil().isNotLive(GitUtil.ShowOnConsole.YES)) { // network access |
| 75 | return; | |
| 76 | } | |
| 77 |
1
1. lambda$new$0 : negated conditional → NO_COVERAGE |
if (injectionModel.getMediatorUtils().getPreferencesUtil().isCheckingUpdate()) { |
| 78 |
1
1. lambda$new$0 : removed call to com/jsql/util/GitUtil::checkUpdate → NO_COVERAGE |
injectionModel.getMediatorUtils().getGitUtil().checkUpdate(GitUtil.ShowOnConsole.NO); |
| 79 | } | |
| 80 |
1
1. lambda$new$0 : negated conditional → NO_COVERAGE |
if (injectionModel.getMediatorUtils().getPreferencesUtil().isShowNews()) { // disabled when UT only |
| 81 |
1
1. lambda$new$0 : removed call to com/jsql/util/GitUtil::showNews → NO_COVERAGE |
injectionModel.getMediatorUtils().getGitUtil().showNews(); |
| 82 | } | |
| 83 |
1
1. lambda$new$0 : removed call to com/jsql/view/swing/JFrameView::setVisible → NO_COVERAGE |
this.setVisible(true); |
| 84 | MediatorHelper.panelAddressBar().getTextFieldAddress().requestFocusInWindow(); // required here to get focus | |
| 85 | }); | |
| 86 | } | |
| 87 | ||
| 88 | private void initPaneComponents() { | |
| 89 | // Define the default panel: each component on a vertical line | |
| 90 |
1
1. initPaneComponents : removed call to java/awt/Container::setLayout → NO_COVERAGE |
this.getContentPane().setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS)); |
| 91 | ||
| 92 | this.tabManagers = new TabManagers(); // Tab manager linked to cards | |
| 93 | this.add(this.tabManagers); | |
| 94 | ||
| 95 | var menubar = new AppMenubar(); | |
| 96 |
1
1. initPaneComponents : removed call to com/jsql/view/swing/JFrameView::setJMenuBar → NO_COVERAGE |
this.setJMenuBar(menubar); |
| 97 |
1
1. initPaneComponents : removed call to com/jsql/view/swing/util/MediatorHelper::register → NO_COVERAGE |
MediatorHelper.register(menubar); |
| 98 | ||
| 99 | var panelAddressBar = new PanelAddressBar(); // Textfield at the top | |
| 100 |
1
1. initPaneComponents : removed call to com/jsql/view/swing/util/MediatorHelper::register → NO_COVERAGE |
MediatorHelper.register(panelAddressBar); |
| 101 | this.add(panelAddressBar); | |
| 102 | ||
| 103 | var mainPanel = new JPanel(new BorderLayout()); // Main panel for tree and tables in the middle | |
| 104 | this.splitNS = new SplitNS(); | |
| 105 | mainPanel.add(this.splitNS); | |
| 106 | this.add(mainPanel); | |
| 107 | ||
| 108 |
1
1. initPaneComponents : removed call to com/jsql/view/swing/menubar/MenuWindows::switchLocaleFromPreferences → NO_COVERAGE |
menubar.getMenuWindows().switchLocaleFromPreferences(); |
| 109 | } | |
| 110 | ||
| 111 | private void initWindow() { | |
| 112 |
1
1. initWindow : removed call to com/jsql/view/swing/JFrameView::setIconImages → NO_COVERAGE |
this.setIconImages(UiUtil.getIcons()); // define small and large app icons |
| 113 | var preferences = Preferences.userRoot().node(InjectionModel.class.getName()); | |
| 114 |
3
1. lambda$initWindow$1 : Replaced bitwise AND with OR → NO_COVERAGE 2. initWindow : removed call to com/jsql/view/swing/JFrameView::addWindowStateListener → NO_COVERAGE 3. lambda$initWindow$1 : negated conditional → NO_COVERAGE |
this.addWindowStateListener(e -> this.isMaximized = (e.getNewState() & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH); |
| 115 |
1
1. initWindow : removed call to com/jsql/view/swing/JFrameView::addWindowListener → NO_COVERAGE |
this.addWindowListener(new WindowAdapter() { |
| 116 | @Override | |
| 117 | public void windowOpened(WindowEvent event) { | |
| 118 | double nsProportion = preferences.getDouble(PreferencesUtil.NS_SPLIT, 0.75); | |
| 119 | double ewProportion = preferences.getDouble(PreferencesUtil.EW_SPLIT, 0.33); | |
| 120 |
1
1. windowOpened : negated conditional → NO_COVERAGE |
if (preferences.getBoolean(PreferencesUtil.IS_MAXIMIZED, false)) { |
| 121 |
1
1. windowOpened : removed call to com/jsql/view/swing/JFrameView::setExtendedState → NO_COVERAGE |
JFrameView.this.setExtendedState(Frame.MAXIMIZED_BOTH); |
| 122 | } | |
| 123 | // Proportion means different location relative to whether frame is maximized or not | |
| 124 | // Maximizing must wait AWT events to reflect the new divider location proportion | |
| 125 |
1
1. windowOpened : removed call to javax/swing/SwingUtilities::invokeLater → NO_COVERAGE |
SwingUtilities.invokeLater(() -> { |
| 126 |
1
1. lambda$windowOpened$0 : removed call to com/jsql/view/swing/panel/split/SplitNS::setDividerLocation → NO_COVERAGE |
JFrameView.this.splitNS.setDividerLocation( |
| 127 | Math.max(0.0, Math.min(1.0, nsProportion)) | |
| 128 | ); | |
| 129 |
1
1. lambda$windowOpened$0 : removed call to javax/swing/JSplitPane::setDividerLocation → NO_COVERAGE |
JFrameView.this.splitNS.getSplitEW().setDividerLocation( |
| 130 | Math.max(0.0, Math.min(1.0, ewProportion)) | |
| 131 | ); | |
| 132 |
1
1. lambda$windowOpened$0 : removed call to javax/swing/JSplitPane::setDividerLocation → NO_COVERAGE |
MediatorHelper.panelConsoles().getNetworkSplitPane().setDividerLocation( |
| 133 |
1
1. lambda$windowOpened$0 : negated conditional → NO_COVERAGE |
ComponentOrientation.getOrientation(I18nUtil.getCurrentLocale()).isLeftToRight() |
| 134 | ? 0.33 | |
| 135 | : 0.66 | |
| 136 | ); | |
| 137 | }); | |
| 138 | } | |
| 139 | ||
| 140 | @Override | |
| 141 | public void windowClosing(WindowEvent e) { | |
| 142 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.IS_MAXIMIZED, JFrameView.this.isMaximized); |
| 143 | ||
| 144 | int ewDividerLocation = JFrameView.this.splitNS.getSplitEW().getDividerLocation(); | |
| 145 | int ewHeight = JFrameView.this.splitNS.getSplitEW().getWidth(); | |
| 146 |
2
1. windowClosing : Replaced double multiplication with division → NO_COVERAGE 2. windowClosing : Replaced double division with multiplication → NO_COVERAGE |
double ewProportion = 100.0 * ewDividerLocation / ewHeight; |
| 147 |
1
1. windowClosing : Replaced double division with multiplication → NO_COVERAGE |
double ewLocationProportionCapped = Math.max(0.0, Math.min(1.0, |
| 148 | ewProportion / 100.0 | |
| 149 | )); | |
| 150 | ||
| 151 | int nsDividerLocation = JFrameView.this.splitNS.getDividerLocation(); | |
| 152 | int nsHeight = JFrameView.this.splitNS.getHeight(); | |
| 153 |
2
1. windowClosing : Replaced double multiplication with division → NO_COVERAGE 2. windowClosing : Replaced double division with multiplication → NO_COVERAGE |
double nsProportion = 100.0 * nsDividerLocation / nsHeight; |
| 154 |
1
1. windowClosing : Replaced double division with multiplication → NO_COVERAGE |
double nsLocationProportionCapped = Math.max(0.0, Math.min(1.0, |
| 155 | nsProportion / 100.0 | |
| 156 | )); | |
| 157 | ||
| 158 | // Divider location changes when window is maximized, instead stores location percentage between 0.0 and 1.0 | |
| 159 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putDouble → NO_COVERAGE |
preferences.putDouble(PreferencesUtil.NS_SPLIT, nsLocationProportionCapped); |
| 160 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putDouble → NO_COVERAGE |
preferences.putDouble(PreferencesUtil.EW_SPLIT, ewLocationProportionCapped); |
| 161 | ||
| 162 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.BINARY_VISIBLE, false); |
| 163 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.CHUNK_VISIBLE, false); |
| 164 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.NETWORK_VISIBLE, false); |
| 165 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.JAVA_VISIBLE, false); |
| 166 |
2
1. windowClosing : negated conditional → NO_COVERAGE 2. windowClosing : changed conditional boundary → NO_COVERAGE |
for (var i = 0 ; i < MediatorHelper.tabConsoles().getTabCount() ; i++) { |
| 167 |
1
1. windowClosing : negated conditional → NO_COVERAGE |
if ("CONSOLE_BINARY_LABEL".equals(MediatorHelper.tabConsoles().getTabComponentAt(i).getName())) { |
| 168 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.BINARY_VISIBLE, true); |
| 169 |
1
1. windowClosing : negated conditional → NO_COVERAGE |
} else if ("CONSOLE_CHUNK_LABEL".equals(MediatorHelper.tabConsoles().getTabComponentAt(i).getName())) { |
| 170 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.CHUNK_VISIBLE, true); |
| 171 |
1
1. windowClosing : negated conditional → NO_COVERAGE |
} else if ("CONSOLE_NETWORK_LABEL".equals(MediatorHelper.tabConsoles().getTabComponentAt(i).getName())) { |
| 172 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.NETWORK_VISIBLE, true); |
| 173 |
1
1. windowClosing : negated conditional → NO_COVERAGE |
} else if ("CONSOLE_JAVA_LABEL".equals(MediatorHelper.tabConsoles().getTabComponentAt(i).getName())) { |
| 174 |
1
1. windowClosing : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
preferences.putBoolean(PreferencesUtil.JAVA_VISIBLE, true); |
| 175 | } | |
| 176 | } | |
| 177 | } | |
| 178 | }); | |
| 179 | | |
| 180 |
1
1. initWindow : removed call to com/jsql/view/swing/JFrameView::setSize → NO_COVERAGE |
this.setSize(1024, 768); |
| 181 |
1
1. initWindow : removed call to com/jsql/view/swing/JFrameView::setLocationRelativeTo → NO_COVERAGE |
this.setLocationRelativeTo(null); // center the window |
| 182 |
1
1. initWindow : removed call to com/jsql/view/swing/JFrameView::setDefaultCloseOperation → NO_COVERAGE |
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
| 183 | } | |
| 184 | ||
| 185 | private void initShortcuts() { | |
| 186 |
1
1. initShortcuts : removed call to com/jsql/view/swing/action/HotkeyUtil::addShortcut → NO_COVERAGE |
HotkeyUtil.addShortcut(this.getRootPane(), MediatorHelper.tabResults()); |
| 187 |
1
1. initShortcuts : removed call to com/jsql/view/swing/action/HotkeyUtil::addTextFieldShortcutSelectAll → NO_COVERAGE |
HotkeyUtil.addTextFieldShortcutSelectAll(); |
| 188 | } | |
| 189 | ||
| 190 | public void resetInterface() { // Empty the interface | |
| 191 |
1
1. resetInterface : removed call to java/util/Map::clear → NO_COVERAGE |
this.mapUuidShell.clear(); |
| 192 |
1
1. resetInterface : removed call to com/jsql/view/swing/panel/address/PanelTrailingAddress::reset → NO_COVERAGE |
MediatorHelper.panelAddressBar().getPanelTrailingAddress().reset(); |
| 193 |
1
1. resetInterface : removed call to com/jsql/view/swing/panel/PanelConsoles::reset → NO_COVERAGE |
MediatorHelper.panelConsoles().reset(); |
| 194 |
1
1. resetInterface : removed call to com/jsql/view/swing/tree/TreeDatabase::reset → NO_COVERAGE |
MediatorHelper.treeDatabase().reset(); |
| 195 | | |
| 196 |
2
1. resetInterface : negated conditional → NO_COVERAGE 2. resetInterface : changed conditional boundary → NO_COVERAGE |
for (var i = 0 ; i < MediatorHelper.tabConsoles().getTabCount() ; i++) { |
| 197 | var tabComponent = MediatorHelper.tabConsoles().getTabComponentAt(i); | |
| 198 |
1
1. resetInterface : negated conditional → NO_COVERAGE |
if (tabComponent != null) { |
| 199 |
1
1. resetInterface : removed call to java/awt/Component::setFont → NO_COVERAGE |
tabComponent.setFont(tabComponent.getFont().deriveFont(Font.PLAIN)); |
| 200 | } | |
| 201 | } | |
| 202 | | |
| 203 |
1
1. resetInterface : removed call to java/util/stream/Stream::forEach → NO_COVERAGE |
Stream.of(MediatorHelper.managerFile(), MediatorHelper.managerExploit()).forEach(managerList -> { |
| 204 |
1
1. lambda$resetInterface$2 : removed call to com/jsql/view/swing/manager/AbstractManagerList::setButtonEnable → NO_COVERAGE |
managerList.setButtonEnable(false); |
| 205 |
1
1. lambda$resetInterface$2 : removed call to com/jsql/view/swing/manager/AbstractManagerList::changePrivilegeIcon → NO_COVERAGE |
managerList.changePrivilegeIcon(UiUtil.SQUARE.getIcon()); |
| 206 | }); | |
| 207 | } | |
| 208 | ||
| 209 | private void displayVersion() { | |
| 210 | LOGGER.log( | |
| 211 | LogLevelUtil.CONSOLE_DEFAULT, | |
| 212 | "{} v{} on Java {}-{}-{}", | |
| 213 |
1
1. lambda$displayVersion$3 : replaced return value with null for com/jsql/view/swing/JFrameView::lambda$displayVersion$3 → NO_COVERAGE |
() -> StringUtil.APP_NAME, |
| 214 |
1
1. lambda$displayVersion$4 : replaced return value with null for com/jsql/view/swing/JFrameView::lambda$displayVersion$4 → NO_COVERAGE |
() -> this.injectionModel.getPropertiesUtil().getVersionJsql(), |
| 215 |
1
1. lambda$displayVersion$5 : replaced return value with null for com/jsql/view/swing/JFrameView::lambda$displayVersion$5 → NO_COVERAGE |
() -> SystemUtils.JAVA_VERSION, |
| 216 |
1
1. lambda$displayVersion$6 : replaced return value with null for com/jsql/view/swing/JFrameView::lambda$displayVersion$6 → NO_COVERAGE |
() -> SystemUtils.OS_ARCH, |
| 217 |
1
1. lambda$displayVersion$7 : replaced return value with null for com/jsql/view/swing/JFrameView::lambda$displayVersion$7 → NO_COVERAGE |
() -> SystemUtils.USER_LANGUAGE |
| 218 | ); | |
| 219 | } | |
| 220 | ||
| 221 | private void check4K() { | |
| 222 | Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); | |
| 223 | int width = (int) screenSize.getWidth(); | |
| 224 |
3
1. check4K : changed conditional boundary → NO_COVERAGE 2. check4K : negated conditional → NO_COVERAGE 3. check4K : negated conditional → NO_COVERAGE |
if (width >= 3840 && !this.injectionModel.getMediatorUtils().getPreferencesUtil().is4K()) { |
| 225 | LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Screen compatible with resolution 4K, enable high-definition in Preferences"); | |
| 226 | } | |
| 227 | } | |
| 228 | ||
| 229 | ||
| 230 | // Getters and setters | |
| 231 | ||
| 232 | public final Map<UUID, AbstractExploit> getMapUuidShell() { | |
| 233 |
1
1. getMapUuidShell : replaced return value with Collections.emptyMap for com/jsql/view/swing/JFrameView::getMapUuidShell → NO_COVERAGE |
return this.mapUuidShell; |
| 234 | } | |
| 235 | ||
| 236 | public SubscriberInteraction getSubscriber() { | |
| 237 |
1
1. getSubscriber : replaced return value with null for com/jsql/view/swing/JFrameView::getSubscriber → NO_COVERAGE |
return this.subscriber; |
| 238 | } | |
| 239 | ||
| 240 | public SplitNS getSplitNS() { | |
| 241 |
1
1. getSplitNS : replaced return value with null for com/jsql/view/swing/JFrameView::getSplitNS → NO_COVERAGE |
return this.splitNS; |
| 242 | } | |
| 243 | ||
| 244 | public TabManagers getTabManagers() { | |
| 245 |
1
1. getTabManagers : replaced return value with null for com/jsql/view/swing/JFrameView::getTabManagers → NO_COVERAGE |
return this.tabManagers; |
| 246 | } | |
| 247 | } | |
Mutations | ||
| 63 |
1.1 |
|
| 64 |
1.1 |
|
| 65 |
1.1 |
|
| 66 |
1.1 |
|
| 67 |
1.1 |
|
| 68 |
1.1 |
|
| 69 |
1.1 |
|
| 70 |
1.1 |
|
| 72 |
1.1 |
|
| 73 |
1.1 |
|
| 74 |
1.1 |
|
| 77 |
1.1 |
|
| 78 |
1.1 |
|
| 80 |
1.1 |
|
| 81 |
1.1 |
|
| 83 |
1.1 |
|
| 90 |
1.1 |
|
| 96 |
1.1 |
|
| 97 |
1.1 |
|
| 100 |
1.1 |
|
| 108 |
1.1 |
|
| 112 |
1.1 |
|
| 114 |
1.1 2.2 3.3 |
|
| 115 |
1.1 |
|
| 120 |
1.1 |
|
| 121 |
1.1 |
|
| 125 |
1.1 |
|
| 126 |
1.1 |
|
| 129 |
1.1 |
|
| 132 |
1.1 |
|
| 133 |
1.1 |
|
| 142 |
1.1 |
|
| 146 |
1.1 2.2 |
|
| 147 |
1.1 |
|
| 153 |
1.1 2.2 |
|
| 154 |
1.1 |
|
| 159 |
1.1 |
|
| 160 |
1.1 |
|
| 162 |
1.1 |
|
| 163 |
1.1 |
|
| 164 |
1.1 |
|
| 165 |
1.1 |
|
| 166 |
1.1 2.2 |
|
| 167 |
1.1 |
|
| 168 |
1.1 |
|
| 169 |
1.1 |
|
| 170 |
1.1 |
|
| 171 |
1.1 |
|
| 172 |
1.1 |
|
| 173 |
1.1 |
|
| 174 |
1.1 |
|
| 180 |
1.1 |
|
| 181 |
1.1 |
|
| 182 |
1.1 |
|
| 186 |
1.1 |
|
| 187 |
1.1 |
|
| 191 |
1.1 |
|
| 192 |
1.1 |
|
| 193 |
1.1 |
|
| 194 |
1.1 |
|
| 196 |
1.1 2.2 |
|
| 198 |
1.1 |
|
| 199 |
1.1 |
|
| 203 |
1.1 |
|
| 204 |
1.1 |
|
| 205 |
1.1 |
|
| 213 |
1.1 |
|
| 214 |
1.1 |
|
| 215 |
1.1 |
|
| 216 |
1.1 |
|
| 217 |
1.1 |
|
| 224 |
1.1 2.2 3.3 |
|
| 233 |
1.1 |
|
| 237 |
1.1 |
|
| 241 |
1.1 |
|
| 245 |
1.1 |