-
Notifications
You must be signed in to change notification settings - Fork 4
/
preseed-openstack-controlvm.cfg
194 lines (194 loc) · 15.8 KB
/
preseed-openstack-controlvm.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#### Contents of the preconfiguration file (for jessie)
#### Control-VM on OpenStack
### Localization
d-i debian-installer/language string en
d-i debian-installer/country string US
d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF-8
d-i keyboard-configuration/xkb-keymap select de
d-i netcfg/choose_interface select auto
d-i netcfg/link_wait_timeout string 10
d-i netcfg/dhcp_timeout string 60
d-i netcfg/dhcpv6_timeout string 60
d-i netcfg/get_hostname string Vagrant-VM
d-i netcfg/get_domain string localdomain
d-i hw-detect/load_firmware boolean true
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.de.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
d-i passwd/root-login boolean false
# Generierung von PW Hashes mit mkpasswd -m sha-512
#d-i passwd/root-password-crypted password
d-i passwd/root-password password vagrant
d-i passwd/root-password-again password vagrant
d-i passwd/user-fullname string Vagrant
d-i passwd/username string vagrant
d-i passwd/user-password password vagrant
d-i passwd/user-password-again password vagrant
#d-i passwd/user-password-crypted password [MD5 hash]
d-i passwd/user-default-groups string vagrant cdrom floppy audio dip video plugdev netdev sudo
d-i clock-setup/utc boolean true
d-i time/zone string Etc/UTC
d-i clock-setup/ntp boolean true
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
#d-i partman-auto/choose_recipe select home
d-i partman-auto/expert_recipe string \
boot-root :: \
1000 10000 1000000000000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
512 512 512 linux-swap \
method{ swap } format{ } \
.
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman/mount_style select uuid
d-i base-installer/kernel/image string linux-image-amd64
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/services-select multiselect security, updates
d-i apt-setup/security_host string security.debian.org
#d-i apt-setup/multiarch string i386
tasksel tasksel/first multiselect standard, ssh-server
d-i pkgsel/include string build-essential, ruby-highline, ruby-termios, sudo, ntp, linux-headers-amd64, dpkg, screen, htop, wget, curl, openjdk-7-jre, open-vm-tools, rsync, libpam-systemd, python2.7, fabric, resolvconf, cloud-init, cloud-utils, cloud-initramfs-growroot, adduser, locales, extlinux, linux-image-amd64, openssh-server, python-dateutil, python-jinja2, python-numpy, python-pandas, python-flask, python-redis, python-requests, python-six, python-tornado, python-werkzeug, python-markupsafe, python-greenlet, python-zmq, python-yaml, python-pip, wkhtmltopdf, python-magic, fabric, vagrant, zlib1g-dev, zlib1g, libxml2, libxml2-dev, libxslt1.1, libxslt1-dev, python-webcolors, python-pyvmomi, git, apache2, maven, openjdk-7-jre-headless, openjdk-7-jdk, euca2ools, file, kbd, dbus
d-i pkgsel/upgrade select full-upgrade
popularity-contest popularity-contest/participate boolean false
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i grub-installer/bootdev string /dev/sda
#d-i grub-installer/bootdev string default
#d-i debian-installer/add-kernel-opts string nousb
d-i finish-install/reboot_in_progress note
d-i cdrom-detect/eject boolean true
d-i debian-installer/exit/poweroff boolean true
d-i preseed/late_command string \
in-target sed -i 's/^%sudo.*$/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' /etc/sudoers; \
in-target /bin/sh -c "echo 'Defaults env_keep += \"SSH_AUTH_SOCK DEBIAN_FRONTEND\"' >> /etc/sudoers"; \
in-target /bin/sh -c "echo 'export DEBIAN_FRONTEND=noninteractive' >> /home/vagrant/.bashrc"; \
in-target /bin/sh -c "echo 'export DEBIAN_FRONTEND=noninteractive' >> /root/.bashrc"; \
in-target /bin/sh -c "echo 'blacklist ipv6' >> /etc/modprobe.d/blacklist.conf"; \
in-target /bin/sh -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.d/01-disable-ipv6.conf"; \
in-target mkdir -p /home/vagrant/.ssh; \
in-target /bin/sh -c "echo 'fs.file-max = 404358' >> /etc/sysctl.conf"; \
in-target /bin/sh -c "echo 'fs.file-max = 404358' >> /etc/sysctl.d/99-sysctl.conf"; \
in-target /bin/sh -c "echo '* - nofile 404358' >> /etc/security/limits.conf"; \
in-target /bin/sh -c "echo 'root - nofile 404358' >> /etc/security/limits.conf"; \
in-target /bin/sh -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key' >> /home/vagrant/.ssh/authorized_keys"; \
in-target /bin/sh -c "echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key' >> /home/vagrant/.ssh/id_rsa.pub"; \
in-target /bin/sh -c "echo 'Host *' >> /home/vagrant/.ssh/config"; \
in-target /bin/sh -c "echo ' StrictHostKeyChecking no' >> /home/vagrant/.ssh/config"; \
in-target /bin/sh -c "echo ' UserKnownHostsFile=/dev/null' >> /home/vagrant/.ssh/config"; \
in-target /bin/sh -c "echo '-----BEGIN RSA PRIVATE KEY-----' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo '4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo '3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo '3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo '6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo '+vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo 'NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=' >> /home/vagrant/.ssh/id_rsa"; \
in-target /bin/sh -c "echo '-----END RSA PRIVATE KEY-----' >> /home/vagrant/.ssh/id_rsa"; \
in-target chmod 640 /home/vagrant/.ssh/id_rsa.pub; \
in-target chmod 600 /home/vagrant/.ssh/id_rsa; \
in-target chown -R vagrant:vagrant /home/vagrant/; \
in-target chmod -R go-rwx /home/vagrant/.ssh/authorized_keys; \
in-target cp -r /home/vagrant/.ssh /root/; \
in-target chown -R root:root /root/.ssh/; \
in-target sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config; \
in-target rm /etc/udev/rules.d/70-persistent-net.rules; \
in-target /bin/sh -c "echo '#!/bin/bash' >> /home/vagrant/change_hostname.sh"; \
in-target /bin/sh -c "echo 'get_ip=\$(sudo ifconfig | grep -E -o \"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\" | head -n1)' >> /home/vagrant/change_hostname.sh"; \
in-target /bin/sh -c "echo 'sudo -s bash -c \"echo \\\"\$get_ip \$1\\\" >> /etc/hosts\"' >> /home/vagrant/change_hostname.sh"; \
in-target /bin/sh -c "echo 'sudo -s bash -c \"sudo hostname \$1;' >> /home/vagrant/change_hostname.sh"; \
in-target /bin/sh -c "echo 'sudo -s bash -c \"echo \\\"\$1\\\" > /etc/hostname\"' >> /home/vagrant/change_hostname.sh"; \
in-target /bin/sh -c "echo 'sudo -s bash -c \"sudo sed -i \"s/127.0.1.1.*$//g\" /etc/hosts' >> /home/vagrant/change_hostname.sh"; \
in-target /bin/sh -c "echo 'sudo hostnamectl set-hostname \$1' >> /home/vagrant/change_hostname.sh"; \
in-target cp /home/vagrant/change_hostname.sh /root/change_hostname.sh; \
in-target chmod 775 /home/vagrant/change_hostname.sh /root/change_hostname.sh; \
in-target chown vagrant:vagrant /home/vagrant/change_hostname.sh; \
in-target chown root:root /root/change_hostname.sh; \
in-target /bin/sh -c "pip install bokeh python-vagrant pdfkit"; \
/bin/sh -c "rm -f /target/etc/resolv.conf || true"; \
/bin/sh -c "cp /etc/resolv.conf /target/etc/resolv.conf || true"; \
/bin/sh -c "mkdir /home/vagrant/.vagrant.d; chown vagrant:vagrant /home/vagrant/.vagrant.d"; \
chroot /target /bin/sh -c "export VAGRANT_HOME=/home/vagrant/.vagrant.d; vagrant plugin install vagrant-vsphere"; \
chroot /target /bin/sh -c "export VAGRANT_HOME=/home/vagrant/.vagrant.d; vagrant plugin install vagrant-openstack-provider"; \
chroot /target /bin/sh -c "export VAGRANT_HOME=/home/vagrant/.vagrant.d; vagrant plugin install vagrant-digitalocean"; \
chroot /target /bin/sh -c "export VAGRANT_HOME=/home/vagrant/.vagrant.d; vagrant plugin install vagrant-aws"; \
in-target /bin/sh -c "dpkg-reconfigure locales"; \
chroot /target ssh-agent bash -c "cd /home/vagrant; git clone https://github.com/TSDBBench/TSDBBench.git"; \
chroot /target ssh-agent bash -c "cd /home/vagrant; git clone https://github.com/TSDBBench/YCSB-TS.git"; \
#chroot /target ssh-agent bash -c "cd /home/vagrant; git clone https://github.com/TSDBBench/TSDBCompare.git"; \
#chroot /target ssh-agent bash -c "cd /home/vagrant; chown -R vagrant:vagrant TSDBCompare"; \
chroot /target ssh-agent bash -c "cd /home/vagrant; chown -R vagrant:vagrant YCSB-TS"; \
chroot /target ssh-agent bash -c "cd /home/vagrant; chown -R vagrant:vagrant TSDBBench"; \
chroot /target /bin/sh -c "cd /home/vagrant/TSDBBench; export VAGRANT_HOME=/home/vagrant/.vagrant.d; vagrant box add TSDBBench/tsdbbench_dummy.box --provider openstack; vagrant box add TSDBBench/tsdbbench_dummy.box --provider vsphere; vagrant box add TSDBBench/tsdbbench_dummy.box --provider aws; vagrant box add TSDBBench/tsdbbench_dummy.box --provider digital_ocean"; \
in-target chown vagrant:vagrant -R /home/vagrant/.vagrant.d; \
in-target /bin/sh -c "echo 'RedirectMatch ^/$ /TSDBBench/' >> /var/www/html/.htaccess"; \
in-target /bin/sh -c "awk '/AllowOverride None/{count++;if(count==3){sub(\"AllowOverride None\",\"AllowOverride All\")}}1' /etc/apache2/apache2.conf >> /etc/apache2/apache2.confnew"; \
in-target /bin/sh -c "mv /etc/apache2/apache2.confnew /etc/apache2/apache2.conf"; \
chroot /target /bin/sh -c "mkdir /home/vagrant/html; chown vagrant:vagrant /home/vagrant/html; cd /var/www/html; ln -s /home/vagrant/html TSDBBench"; \
in-target /bin/sh -c "rm /var/www/html/index.html"; \
in-target sed -i 's/name: debian/name: vagrant/g' /etc/cloud/cloud.cfg; \
in-target sed -i 's/gecos: Debian/gecos: Vagrant/g' /etc/cloud/cloud.cfg; \
in-target sed -i 's/lock_passwd: True/lock_passwd: False/g' /etc/cloud/cloud.cfg; \
in-target sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200"/' /etc/default/grub; \
in-target /bin/sh -c "echo 'ForwardToConsole=yes' >> /etc/systemd/journald.conf"; \
in-target sed -i 's/^BLANK_TIME=.*/BLANK_TIME=0/' /etc/kbd/config; \
in-target sed -i 's/^POWERDOWN_TIME=.*/POWERDOWN_TIME=0/' /etc/kbd/config; \
in-target sed -i 's/^[ \t#]KEYBOARD_DELAY=.*/KEYBOARD_DELAY=1000/' /etc/kbd/config; \
in-target rm -f /etc/ssh/ssh_host_*; \
in-target rm -f /etc/udev/rules.d/70-persistent-net.rules; \
in-target rm -f /lib/udev/write_net_rules; \
in-target /bin/sh -c "echo '# This file describes the network interfaces available on your system' > /etc/network/interfaces"; \
in-target /bin/sh -c "echo '# and how to activate them. For more information, see interfaces(5).' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo '# The loopback network interface' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'auto lo' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'iface lo inet loopback' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo '# The normal eth0' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'auto eth0' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'iface eth0 inet dhcp' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo '# Maybe the VM has 2 NICs?' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'allow-hotplug eth1' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'iface eth1 inet dhcp' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo '# Maybe the VM has 3 NICs?' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'allow-hotplug eth2' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo 'iface eth2 inet dhcp' >> /etc/network/interfaces"; \
in-target /bin/sh -c "echo '# to update this file, run dpkg-reconfigure cloud-init' > /etc/cloud/cloud.cfg.d/90_dpkg.cfg"; \
in-target /bin/sh -c "echo 'datasource_list: [ConfigDrive, Openstack, Ec2]' >> /etc/cloud/cloud.cfg.d/90_dpkg.cfg"; \
in-target /bin/sh -c "echo \"mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']\" >> /etc/cloud/cloud.cfg"; \
in-target /bin/sh -c "echo 'manage_etc_hosts: true' >> /etc/cloud/cloud.cfg"; \
in-target /bin/sh -c 'update-initramfs -u'; \
in-target /bin/sh -c 'update-grub'; \
/bin/sh -c "rm -f /target/etc/resolv.conf || true"; \
in-target /bin/sh -c 'ln -s /etc/resolvconf/run/resolv.conf /etc/resolv.conf'; \
in-target /bin/sh -c "mkdir /home/vagrant/tmp; chown vagrant:vagrant /home/vagrant/tmp"; \
in-target apt-get clean;