Merge branch 'master' of ssh://git.cloud.com/var/lib/git/cloudstack-oss
|
|
@ -111,6 +111,7 @@
|
|||
<arg value="systemvm.iso"/>
|
||||
<arg value="systemvm.zip"/>
|
||||
<arg value="patches/xenserver/patch.tgz"/>
|
||||
<arg value="patches/xenserver/authorized_keys"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
|
|
|
|||
|
|
@ -299,6 +299,21 @@ public class StorageManagerImpl implements StorageManager {
|
|||
return vols;
|
||||
}
|
||||
|
||||
//if we have a system vm
|
||||
//get the storage pool
|
||||
//if pool is in maintenance
|
||||
//add to recreate vols, and continue
|
||||
if(vm.getType().equals(VirtualMachine.Type.ConsoleProxy) || vm.getType().equals(VirtualMachine.Type.DomainRouter) || vm.getType().equals(VirtualMachine.Type.SecondaryStorageVm))
|
||||
{
|
||||
StoragePoolVO sp = _storagePoolDao.findById(vol.getPoolId());
|
||||
|
||||
if(sp.getStatus().equals(Status.PrepareForMaintenance))
|
||||
{
|
||||
recreateVols.add(vol);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
StoragePoolHostVO ph = _storagePoolHostDao.findByPoolHost(vol.getPoolId(), host.getId());
|
||||
if (ph == null) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
|
|
@ -1954,8 +1969,8 @@ public class StorageManagerImpl implements StorageManager {
|
|||
@DB
|
||||
public boolean preparePrimaryStorageForMaintenance(long primaryStorageId, long userId)
|
||||
{
|
||||
boolean destroyVolumes = false;
|
||||
long count = 1;
|
||||
boolean restart = true;
|
||||
try
|
||||
{
|
||||
//1. Get the primary storage record
|
||||
|
|
@ -1968,17 +1983,15 @@ public class StorageManagerImpl implements StorageManager {
|
|||
}
|
||||
|
||||
//check to see if other ps exist
|
||||
//if they do, then we can migrate over the system vms to them, destroy volumes for sys vms
|
||||
//if they dont, then do NOT destroy the volumes on this one
|
||||
//if they do, then we can migrate over the system vms to them
|
||||
//if they dont, then just stop all vms on this one
|
||||
count = _storagePoolDao.countBy(primaryStorage.getId(), Status.Up);
|
||||
if(count>1)
|
||||
{
|
||||
destroyVolumes = true;
|
||||
}
|
||||
|
||||
if(count == 1)
|
||||
restart = false;
|
||||
|
||||
//2. Get a list of all the volumes within this storage pool
|
||||
List<VolumeVO> allVolumes = _volsDao.findByPoolId(primaryStorageId);
|
||||
List<VolumeVO> markedVolumes = new ArrayList<VolumeVO>();
|
||||
|
||||
//3. Each volume has an instance associated with it, stop the instance if running
|
||||
for(VolumeVO volume : allVolumes)
|
||||
|
|
@ -1991,11 +2004,7 @@ public class StorageManagerImpl implements StorageManager {
|
|||
|
||||
//if the instance is of type consoleproxy, call the console proxy
|
||||
if(vmInstance.getType().equals(VirtualMachine.Type.ConsoleProxy))
|
||||
{
|
||||
//add this volume to be removed if flag=true
|
||||
if(destroyVolumes)
|
||||
markedVolumes.add(volume);
|
||||
|
||||
{
|
||||
//make sure it is not restarted again, update config to set flag to false
|
||||
_configMgr.updateConfiguration(userId, "consoleproxy.restart", "false");
|
||||
|
||||
|
|
@ -2010,25 +2019,21 @@ public class StorageManagerImpl implements StorageManager {
|
|||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
else if(restart)
|
||||
{
|
||||
if(destroyVolumes)
|
||||
{
|
||||
//create a dummy event
|
||||
long eventId1 = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_PROXY_START, "starting console proxy with Id: "+vmInstance.getId());
|
||||
|
||||
//Restore config val for consoleproxy.restart to true
|
||||
_configMgr.updateConfiguration(userId, "consoleproxy.restart", "true");
|
||||
|
||||
if(_consoleProxyMgr.startProxy(vmInstance.getId(), eventId1)==null)
|
||||
{
|
||||
s_logger.warn("There was an error starting the console proxy id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance");
|
||||
primaryStorage.setStatus(Status.ErrorInMaintenance);
|
||||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
//create a dummy event
|
||||
long eventId1 = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_PROXY_START, "starting console proxy with Id: "+vmInstance.getId());
|
||||
|
||||
//Restore config val for consoleproxy.restart to true
|
||||
_configMgr.updateConfiguration(userId, "consoleproxy.restart", "true");
|
||||
|
||||
if(_consoleProxyMgr.startProxy(vmInstance.getId(), eventId1)==null)
|
||||
{
|
||||
s_logger.warn("There was an error starting the console proxy id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance");
|
||||
primaryStorage.setStatus(Status.ErrorInMaintenance);
|
||||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2048,10 +2053,6 @@ public class StorageManagerImpl implements StorageManager {
|
|||
//if the instance is of type secondary storage vm, call the secondary storage vm manager
|
||||
if(vmInstance.getType().equals(VirtualMachine.Type.SecondaryStorageVm))
|
||||
{
|
||||
//add this volume to be removed if flag=true
|
||||
if(destroyVolumes)
|
||||
markedVolumes.add(volume);
|
||||
|
||||
//create a dummy event
|
||||
long eventId1 = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_STOP, "stopping ssvm with Id: "+vmInstance.getId());
|
||||
|
||||
|
|
@ -2062,31 +2063,23 @@ public class StorageManagerImpl implements StorageManager {
|
|||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
else if(restart)
|
||||
{
|
||||
if(destroyVolumes)
|
||||
{
|
||||
//create a dummy event and restart the ssvm immediately
|
||||
long eventId = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_START, "starting ssvm with Id: "+vmInstance.getId());
|
||||
if(_secStorageMgr.startSecStorageVm(vmInstance.getId(), eventId)==null)
|
||||
{
|
||||
s_logger.warn("There was an error starting the ssvm id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance");
|
||||
primaryStorage.setStatus(Status.ErrorInMaintenance);
|
||||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//create a dummy event and restart the ssvm immediately
|
||||
long eventId = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_SSVM_START, "starting ssvm with Id: "+vmInstance.getId());
|
||||
if(_secStorageMgr.startSecStorageVm(vmInstance.getId(), eventId)==null)
|
||||
{
|
||||
s_logger.warn("There was an error starting the ssvm id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance");
|
||||
primaryStorage.setStatus(Status.ErrorInMaintenance);
|
||||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//if the instance is of type domain router vm, call the network manager
|
||||
if(vmInstance.getType().equals(VirtualMachine.Type.DomainRouter))
|
||||
{
|
||||
//add this volume to be removed if flag=true
|
||||
if(destroyVolumes)
|
||||
markedVolumes.add(volume);
|
||||
|
||||
//create a dummy event
|
||||
long eventId2 = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_ROUTER_STOP, "stopping domain router with Id: "+vmInstance.getId());
|
||||
|
||||
|
|
@ -2097,17 +2090,22 @@ public class StorageManagerImpl implements StorageManager {
|
|||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
else if(restart)
|
||||
{
|
||||
//create a dummy event and restart the domr immediately
|
||||
long eventId = saveScheduledEvent(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, EventTypes.EVENT_PROXY_START, "starting domr with Id: "+vmInstance.getId());
|
||||
if(_networkMgr.startRouter(vmInstance.getId(), eventId)==null)
|
||||
{
|
||||
s_logger.warn("There was an error starting the omr id: "+vmInstance.getId()+" on another storage pool, cannot enable primary storage maintenance");
|
||||
primaryStorage.setStatus(Status.ErrorInMaintenance);
|
||||
_storagePoolDao.persist(primaryStorage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//4. Mark the volumes as removed
|
||||
for(VolumeVO vol : markedVolumes)
|
||||
{
|
||||
_volsDao.remove(vol.getId());
|
||||
}
|
||||
|
||||
//5. Update the status
|
||||
primaryStorage.setStatus(Status.Maintenance);
|
||||
_storagePoolDao.persist(primaryStorage);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
global
|
||||
log 127.0.0.1:3914 local0 info
|
||||
chroot /var/lib/haproxy
|
||||
user haproxy
|
||||
group haproxy
|
||||
daemon
|
||||
|
||||
defaults
|
||||
log global
|
||||
mode tcp
|
||||
option dontlognull
|
||||
retries 3
|
||||
option redispatch
|
||||
option forwardfor
|
||||
stats enable
|
||||
stats uri /admin?stats
|
||||
stats realm Haproxy\ Statistics
|
||||
stats auth admin1:AdMiN123
|
||||
option forceclose
|
||||
timeout connect 5000
|
||||
timeout client 50000
|
||||
timeout server 50000
|
||||
|
||||
|
||||
listen 0.0.0.0:9
|
||||
option transparent
|
||||
|
|
@ -28,10 +28,12 @@ patch() {
|
|||
local PATCH_MOUNT=/media/cdrom
|
||||
local patchfile=$PATCH_MOUNT/cloud-scripts.tgz
|
||||
local md5file=/var/cache/cloud/cloud-scripts-signature
|
||||
local privkey=$PATCH_MOUNT/authorized_keys
|
||||
local shouldpatch=false
|
||||
mkdir -p $PATCH_MOUNT
|
||||
if [ -e /dev/xvdd ]; then
|
||||
mount -o ro /dev/xvdd $PATCH_MOUNT
|
||||
[ -f $privkey ] && cp -f $privkey /root/.ssh/ && chmod go-rwx /root/.ssh/authorized_keys
|
||||
local oldmd5=
|
||||
[ -f ${md5file} ] && oldmd5=$(cat ${md5file})
|
||||
local newmd5=
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@
|
|||
# $3 : the hostname
|
||||
|
||||
wait_for_dnsmasq () {
|
||||
local _pid=$(/sbin/pidof dnsmasq)
|
||||
local _pid=$(pidof dnsmasq)
|
||||
for i in 0 1 2 3 4 5 6 7 8 9 10
|
||||
do
|
||||
sleep 1
|
||||
_pid=$(/sbin/pidof dnsmasq)
|
||||
_pid=$(pidof dnsmasq)
|
||||
[ "$_pid" != "" ] && break;
|
||||
done
|
||||
[ "$_pid" != "" ] && return 0;
|
||||
|
|
@ -17,6 +17,9 @@ wait_for_dnsmasq () {
|
|||
return 1
|
||||
}
|
||||
|
||||
[ ! -f /etc/dhcphosts.txt ] && touch /etc/dhcphosts.txt
|
||||
[ ! -f /var/lib/misc/dnsmasq.leases ] && touch /var/lib/misc/dnsmasq.leases
|
||||
|
||||
#delete any previous entries from the dhcp hosts file
|
||||
sed -i /$1/d /etc/dhcphosts.txt
|
||||
sed -i /$2,/d /etc/dhcphosts.txt
|
||||
|
|
@ -39,7 +42,7 @@ sed -i /"$3"/d /etc/hosts
|
|||
echo "$2 $3" >> /etc/hosts
|
||||
|
||||
# make dnsmasq re-read files
|
||||
pid=$(/sbin/pidof dnsmasq)
|
||||
pid=$(pidof dnsmasq)
|
||||
if [ "$pid" != "" ]
|
||||
then
|
||||
service dnsmasq restart
|
||||
|
|
|
|||
|
|
@ -988,6 +988,90 @@ a:visited {
|
|||
color:#FFF;
|
||||
}
|
||||
|
||||
.revwiz_loadingbox {
|
||||
width:180px;
|
||||
height:50px;
|
||||
position:absolute;
|
||||
background:#FFF repeat top left;
|
||||
border:1px solid #999;
|
||||
z-index:1100;
|
||||
top:47%;
|
||||
left:45%;
|
||||
}
|
||||
|
||||
.revwiz_loadingbox p{
|
||||
width:auto;
|
||||
height:auto;
|
||||
float:left;
|
||||
text-align:left;
|
||||
color:#666;
|
||||
font-weight:normal;
|
||||
font-size:25px;
|
||||
margin:10px 0 0 20px;
|
||||
display:inline;
|
||||
}
|
||||
|
||||
|
||||
.revwiz_message_container {
|
||||
width:300px;
|
||||
height:auto;
|
||||
position:absolute;
|
||||
background:url(../images/loading_messagebg.gif) #d3d3d3 repeat-x top left;
|
||||
border:1px solid #CCC;
|
||||
z-index:1100;
|
||||
top:47%;
|
||||
left:45%;
|
||||
display:inline;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
|
||||
.revwiz_message_top {
|
||||
width:99%;
|
||||
height:auto;
|
||||
float:left;
|
||||
margin:0;
|
||||
padding:2px 5px 0 5px;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
.revwiz_message_top p {
|
||||
width:auto;
|
||||
height:25px;
|
||||
margin:0;
|
||||
padding:0;
|
||||
color:#333;
|
||||
text-align:left;
|
||||
font-weight:normal;
|
||||
font-size:11px;
|
||||
display:inline;
|
||||
}
|
||||
|
||||
.revwiz_message_bottom {
|
||||
width:100%;
|
||||
height:20px;
|
||||
float:left;
|
||||
margin:0;
|
||||
padding:0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.revwizcontinue_button {
|
||||
width:60px;
|
||||
height:17px;
|
||||
float:right;
|
||||
margin-right:5px;
|
||||
padding:0;
|
||||
background:url(../images/vm_continuebutton.gif) no-repeat top left;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.revwizcontinue_button:hover {
|
||||
background:url(../images/vm_continuebutton_hover.gif) no-repeat top left;
|
||||
}
|
||||
|
||||
.revwiz_formcontent_title {
|
||||
width:800px;
|
||||
height:auto;
|
||||
|
|
@ -2021,10 +2105,10 @@ a:visited {
|
|||
}
|
||||
|
||||
.grid_actionbox {
|
||||
width:33px;
|
||||
height:15px;
|
||||
width:35px;
|
||||
height:17px;
|
||||
float:right;
|
||||
background:url(../images/gird_actions.gif) no-repeat top left;
|
||||
background:url(../images/gird_actions.png) no-repeat top left;
|
||||
margin:2px 10px 0 0;
|
||||
padding:0;
|
||||
cursor:pointer;
|
||||
|
|
@ -2032,5 +2116,5 @@ a:visited {
|
|||
}
|
||||
|
||||
.grid_actionbox:hover {
|
||||
background:url(../images/gird_actions_hover.gif) no-repeat top left;
|
||||
background:url(../images/gird_actions_hover.png) no-repeat top left;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 866 B After Width: | Height: | Size: 866 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 161 B After Width: | Height: | Size: 161 B |
|
Before Width: | Height: | Size: 230 B After Width: | Height: | Size: 230 B |
|
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 169 B |
|
Before Width: | Height: | Size: 201 B After Width: | Height: | Size: 201 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 545 B After Width: | Height: | Size: 545 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 258 B After Width: | Height: | Size: 258 B |
|
Before Width: | Height: | Size: 551 B After Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 505 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 594 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 764 B After Width: | Height: | Size: 764 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 223 B After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 634 B After Width: | Height: | Size: 634 B |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 722 B After Width: | Height: | Size: 722 B |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 605 B After Width: | Height: | Size: 605 B |
|
Before Width: | Height: | Size: 605 B After Width: | Height: | Size: 605 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 698 B After Width: | Height: | Size: 698 B |
|
Before Width: | Height: | Size: 999 B After Width: | Height: | Size: 999 B |
|
Before Width: | Height: | Size: 79 B After Width: | Height: | Size: 79 B |
|
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 257 B |
|
Before Width: | Height: | Size: 57 B After Width: | Height: | Size: 57 B |
|
Before Width: | Height: | Size: 121 B After Width: | Height: | Size: 121 B |
|
Before Width: | Height: | Size: 80 B After Width: | Height: | Size: 80 B |
|
Before Width: | Height: | Size: 207 B After Width: | Height: | Size: 207 B |
|
After Width: | Height: | Size: 225 B |
|
Before Width: | Height: | Size: 777 B After Width: | Height: | Size: 777 B |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 969 B After Width: | Height: | Size: 969 B |
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 746 B |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 462 B |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 548 B After Width: | Height: | Size: 548 B |
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 57 B After Width: | Height: | Size: 57 B |
|
Before Width: | Height: | Size: 191 B After Width: | Height: | Size: 191 B |
|
Before Width: | Height: | Size: 204 B After Width: | Height: | Size: 204 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
|
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 328 B |
|
Before Width: | Height: | Size: 111 B After Width: | Height: | Size: 111 B |
|
Before Width: | Height: | Size: 230 B After Width: | Height: | Size: 230 B |
|
Before Width: | Height: | Size: 686 B After Width: | Height: | Size: 686 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 333 B After Width: | Height: | Size: 333 B |
|
Before Width: | Height: | Size: 325 B After Width: | Height: | Size: 325 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 741 B After Width: | Height: | Size: 741 B |
|
Before Width: | Height: | Size: 136 B After Width: | Height: | Size: 136 B |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 847 B After Width: | Height: | Size: 847 B |
|
Before Width: | Height: | Size: 739 B After Width: | Height: | Size: 739 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 271 B After Width: | Height: | Size: 271 B |
|
Before Width: | Height: | Size: 278 B After Width: | Height: | Size: 278 B |
|
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 253 B |