[Libreoffice-commits] core.git: 5 commits - ios/iosremote

siqi me at siqi.fr
Sun Jul 7 16:13:29 PDT 2013


 ios/iosremote/iosremote.xcodeproj/project.pbxproj                                                                |   72 +-
 ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate |binary
 ios/iosremote/iosremote/Communication/CommandInterpreter.m                                                       |   15 
 ios/iosremote/iosremote/Communication/CommunicationManager.m                                                     |    3 
 ios/iosremote/iosremote/Communication/SlideShow.h                                                                |    3 
 ios/iosremote/iosremote/Communication/SlideShow.m                                                                |   94 +-
 ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard                                                |  333 +++++++---
 ios/iosremote/iosremote/libO_toolBar_bg.png                                                                      |binary
 ios/iosremote/iosremote/newServer_vc.m                                                                           |    1 
 ios/iosremote/iosremote/pointer.png                                                                              |binary
 ios/iosremote/iosremote/pointer_pushed.png                                                                       |binary
 ios/iosremote/iosremote/pushed_next_button.png                                                                   |binary
 ios/iosremote/iosremote/pushed_previous_button.png                                                               |binary
 ios/iosremote/iosremote/released_next_button.png                                                                 |binary
 ios/iosremote/iosremote/released_previous_button.png                                                             |binary
 ios/iosremote/iosremote/serverList_vc.m                                                                          |    8 
 ios/iosremote/iosremote/slideShowPreviewTable_vc.m                                                               |   20 
 ios/iosremote/iosremote/slideShow_vc                                                                             |  146 ++++
 ios/iosremote/iosremote/slideShow_vc.h                                                                           |    4 
 ios/iosremote/iosremote/slideShow_vc.m                                                                           |   57 +
 ios/iosremote/iosremote/slide_finished.png                                                                       |binary
 21 files changed, 606 insertions(+), 150 deletions(-)

New commits:
commit a2fc3ecb15c7def2016d0495e797239fb7ef132b
Author: siqi <me at siqi.fr>
Date:   Mon Jul 8 01:12:39 2013 +0200

    loads slides & notes async, queue multiple slides and reload when received
    
    Change-Id: Iace2f120b70df02ddb004b9f67cb8b548b9277d8

diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
index ebbd706..962ddd5 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.pbxproj
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -18,6 +18,7 @@
 		57AEEDAD1789543D007F4F97 /* libO_toolBar_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDAC1789543D007F4F97 /* libO_toolBar_bg.png */; };
 		57AEEDAF17895B67007F4F97 /* pointer.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDAE17895B67007F4F97 /* pointer.png */; };
 		57AEEDB117895BF5007F4F97 /* pointer_pushed.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDB017895BF5007F4F97 /* pointer_pushed.png */; };
+		57AEEDB517899BB4007F4F97 /* slide_finished.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDB417899BB4007F4F97 /* slide_finished.png */; };
 		57B152991764703500EECC67 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B152981764703500EECC67 /* Base64.m */; };
 		57B1529F176486C300EECC67 /* CommandTransmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B1529E176486C300EECC67 /* CommandTransmitter.m */; };
 		57B7625D17621E42007703F6 /* SlideShow.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B7625C17621E42007703F6 /* SlideShow.m */; };
@@ -57,6 +58,7 @@
 		57AEEDAC1789543D007F4F97 /* libO_toolBar_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = libO_toolBar_bg.png; path = iosremote/libO_toolBar_bg.png; sourceTree = "<group>"; };
 		57AEEDAE17895B67007F4F97 /* pointer.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pointer.png; path = iosremote/pointer.png; sourceTree = "<group>"; };
 		57AEEDB017895BF5007F4F97 /* pointer_pushed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pointer_pushed.png; path = iosremote/pointer_pushed.png; sourceTree = "<group>"; };
+		57AEEDB417899BB4007F4F97 /* slide_finished.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slide_finished.png; path = iosremote/slide_finished.png; sourceTree = "<group>"; };
 		57B152971764703500EECC67 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
 		57B152981764703500EECC67 /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Base64.m; sourceTree = "<group>"; };
 		57B1529D176486C300EECC67 /* CommandTransmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandTransmitter.h; sourceTree = "<group>"; };
@@ -114,6 +116,7 @@
 		57AEEDAA1788D7B2007F4F97 /* Assets */ = {
 			isa = PBXGroup;
 			children = (
+				57AEEDB417899BB4007F4F97 /* slide_finished.png */,
 				57AEEDB017895BF5007F4F97 /* pointer_pushed.png */,
 				57AEEDAE17895B67007F4F97 /* pointer.png */,
 				57AEEDAC1789543D007F4F97 /* libO_toolBar_bg.png */,
@@ -290,6 +293,7 @@
 				57AEEDAD1789543D007F4F97 /* libO_toolBar_bg.png in Resources */,
 				57AEEDAF17895B67007F4F97 /* pointer.png in Resources */,
 				57AEEDB117895BF5007F4F97 /* pointer_pushed.png in Resources */,
+				57AEEDB517899BB4007F4F97 /* slide_finished.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index f0a68c8..bdc9bb5 100644
Binary files a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote/Communication/SlideShow.h b/ios/iosremote/iosremote/Communication/SlideShow.h
index e49ba3f..52d699a 100644
--- a/ios/iosremote/iosremote/Communication/SlideShow.h
+++ b/ios/iosremote/iosremote/Communication/SlideShow.h
@@ -20,7 +20,6 @@
 - (void) putImage: (NSString *)img AtIndex: (uint) index;
 - (void) putNotes: (NSString *)notes AtIndex: (uint) index;
 
-- (UIImage *) getImageAtIndex: (uint) index;
-- (NSString *) getNotesAtIndex: (uint) index;
+- (void) getContentAtIndex: (uint) index forView: (UIView*) view;
 
 @end
diff --git a/ios/iosremote/iosremote/Communication/SlideShow.m b/ios/iosremote/iosremote/Communication/SlideShow.m
index b2d6016..43b80be 100644
--- a/ios/iosremote/iosremote/Communication/SlideShow.m
+++ b/ios/iosremote/iosremote/Communication/SlideShow.m
@@ -17,7 +17,7 @@
 @property (nonatomic, strong) NSMutableDictionary* imagesDictionary;
 @property (nonatomic, strong) NSMutableDictionary* notesDictionary;
 
- at property int lastRequestedImage, lastRequestedNote;
+ at property (nonatomic, strong) NSMutableDictionary* loadBuffer;
 @property (nonatomic, strong) id slideShowImageReadyObserver;
 @property (nonatomic, strong) id slideShowNoteReadyObserver;
 
@@ -35,84 +35,92 @@ dispatch_queue_t backgroundQueue;
     self = [super init];
     self.imagesDictionary = [[NSMutableDictionary alloc] init];
     self.notesDictionary = [[NSMutableDictionary alloc] init];
+    self.loadBuffer = [[NSMutableDictionary alloc] init];
     _size = 0;
     _currentSlide = 0;
-    self.lastRequestedImage = -1;
-    self.lastRequestedNote = -1;
     
     backgroundQueue = dispatch_queue_create("org.libreoffice.iosremote.bgqueue", NULL);
     NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
     
+    /**
+     This observer waits for storage updates like new image added or notes received. 
+     It then checks in the loadBuffer to see if there is a view waiting for this update in loadBuffer, if yes, it loads it up and remove the waiting entry.
+     loadBuffer stores key-value pair with viewTag as a key and slideIndex as value. 
+     For the same view, we only keep the last requested slide index on the waiting list.
+     It is thus indispensable to identify each view with an unique tag in its view controller. Here we use 0-10 to indentify central vc views and 11-N for swipe-in tableViewController which allows direct slide number change. 
+     We handle lecturer's notes at the same time as an entry in the load buffer via an instrospection.
+     */
     self.slideShowImageReadyObserver =[[NSNotificationCenter defaultCenter]
-                                              addObserverForName:@"storage_update_image_ready"
+                                              addObserverForName:@"storage_update_ready"
                                                           object:nil
                                                            queue:mainQueue
                                                       usingBlock:^(NSNotification *note) {
-                                                          if ([[[note userInfo] objectForKey:@"index"] intValue] == self.lastRequestedImage) {
-                                                              NSLog(@"Load last requsted image: %u", self.lastRequestedImage);
-                                                              [[self.delegate slideView] setImage:[self getImageAtIndex:self.lastRequestedImage]];
-                                                              self.lastRequestedImage = -1;
+                                                          if ([[self.loadBuffer allKeysForObject:[NSNumber numberWithInt:[[[note userInfo] objectForKey:@"index"] intValue]]] count]) {
+                                                              NSArray * tagArray = [self.loadBuffer allKeysForObject:[NSNumber numberWithInt:[[[note userInfo] objectForKey:@"index"] intValue]]];
+                                                              for (NSNumber *tag in tagArray) {
+                                                                  UIView * view = [[self.delegate view] viewWithTag:[tag integerValue]];
+                                                                  if ([view isKindOfClass:[UIImageView class]]){
+                                                                      UIImage *image = [self.imagesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
+                                                                      if (image) {
+                                                                          [(UIImageView *)view setImage:image];
+                                                                          [self.loadBuffer removeObjectForKey:tag];
+                                                                      }
+                                                                  }
+                                                                  else if ([view isKindOfClass:[UIWebView class]]){
+                                                                      NSLog(@"Async notes");
+                                                                      NSString *note = [self.notesDictionary objectForKey:[self.loadBuffer objectForKey:tag]];
+                                                                      if (note) {
+                                                                          [(UIWebView *)view loadHTMLString:note baseURL:nil];
+                                                                          [self.loadBuffer removeObjectForKey:tag];
+                                                                      }
+                                                                  }
+                                                              
+                                                              }
                                                           }
                                                       }];
-    
-    self.slideShowNoteReadyObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"storage_update_note_ready"
-                                                          object:nil
-                                                           queue:mainQueue
-                                                      usingBlock:^(NSNotification *note) {
-//                                                           NSLog(@"Load last requsted note");
-                                                          if ([[[note userInfo] objectForKey:@"index"] intValue] == self.lastRequestedNote) {
-                                                              [[self.delegate lecturer_notes] loadHTMLString:[self getNotesAtIndex:self.lastRequestedNote] baseURL:nil];
-                                                              self.lastRequestedNote = -1;
-                                                          }
-                                                      }];
-    
     return self;
 }
 
 - (void) putImage: (NSString *)img AtIndex: (uint) index{
 //    NSLog(@"Put Image into %u", index);
-    dispatch_async(backgroundQueue, ^(void) {
         NSData* data = [NSData dataWithBase64String:img];
         UIImage* image = [UIImage imageWithData:data];
+        NSLog(@"%@", image);
         [self.imagesDictionary setObject:image forKey:[NSNumber numberWithUnsignedInt:index]];
-        [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_image_ready"
+        [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_ready"
                                                             object:nil
                                                           userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"index"]];
-    });
+
 }
 
 - (void) putNotes: (NSString *)notes AtIndex: (uint) index{
 //    NSLog(@"Put note into %u", index);
     [self.notesDictionary setObject:notes forKey:[NSNumber numberWithUnsignedInt:index]];
-    [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_note_ready"
+    [[NSNotificationCenter defaultCenter] postNotificationName:@"storage_update_ready"
                                                         object:nil
                                                       userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"index"]];
 }
 
-- (UIImage *) getImageAtIndex: (uint) index
+- (void) getContentAtIndex: (uint) index forView: (UIView*) view
 {
-    if (![self.imagesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]]) {
-        self.lastRequestedImage = index;
-        return nil;
+    if (index >= self.size)
+    {
+        if ([view isKindOfClass:[UIImageView class]])
+            [(UIImageView* )view setImage:[UIImage imageNamed:@"slide_finished.png"]];
+        else if ([view isKindOfClass:[UIWebView class]])
+            [(UIWebView* )view loadHTMLString: @"SlideShow finished" baseURL:nil];
+        return;
     }
-    else{
-        self.lastRequestedImage = -1;
-        return [self.imagesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]];
-    }
-}
-
-- (NSString *) getNotesAtIndex: (uint) index
-{
-    if (![self.notesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]]) {
-        self.lastRequestedNote = index;
-        return nil;
+    if (![self.imagesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]])
+    {
+        [self.loadBuffer setObject:[NSNumber numberWithInt:index ] forKey:[NSNumber numberWithInt:[view tag]]];
     }
-    else {
-        self.lastRequestedNote = -1;
-        return [self.notesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]];
+    else{
+        if ([view isKindOfClass:[UIImageView class]])
+            [(UIImageView* )view setImage:[self.imagesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]]];
+        else if ([view isKindOfClass:[UIWebView class]])
+            [(UIWebView* )view loadHTMLString: [self.notesDictionary objectForKey:[NSNumber numberWithUnsignedInt:index]] baseURL:nil];
     }
 }
 
-
-
 @end
diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc.m b/ios/iosremote/iosremote/slideShowPreviewTable_vc.m
index 1ab6b1a..df8f093 100644
--- a/ios/iosremote/iosremote/slideShowPreviewTable_vc.m
+++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc.m
@@ -55,7 +55,6 @@
                                                                                     object:nil
                                                                                      queue:mainQueue
                                                                                 usingBlock:^(NSNotification *note) {
-                                                                                    NSLog(@"Setting to true");
                                                                                     self.slidesRunning = YES;
                                                                                 }];
 
diff --git a/ios/iosremote/iosremote/slideShow_vc b/ios/iosremote/iosremote/slideShow_vc
new file mode 100644
index 0000000..3fc8616
--- /dev/null
+++ b/ios/iosremote/iosremote/slideShow_vc
@@ -0,0 +1,146 @@
+/
+//  slideShow_vc.m
+//  iosremote
+//
+//  Created by Liu Siqi on 7/5/13.
+//  Copyright (c) 2013 libreoffice. All rights reserved.
+//
+
+#import "slideShow_vc.h"
+#import "SlideShow.h"
+#import "CommunicationManager.h"
+#import "CommandInterpreter.h"
+#import "CommandTransmitter.h"
+#import <QuartzCore/QuartzCore.h>
+
+
+#define CURRENT_SLIDE_IMAGEVIEW 1
+#define NEXT_SLIDE_IMAGEVIEW 2
+#define CURRENT_SLIDE_NOTES 2
+
+ at interface slideShow_vc ()
+
+ at property (nonatomic, strong) CommunicationManager *comManager;
+ at property (nonatomic, strong) id slideShowImageNoteReadyObserver;
+ at property (nonatomic, strong) id slideShowFinishedObserver;
+ at property (nonatomic, strong) SlideShow* slideshow;
+
+ at end
+
+ at implementation slideShow_vc
+
+ at synthesize comManager = _comManager;
+ at synthesize slideShowImageNoteReadyObserver = _slideShowImageNoteReadyObserver;
+ at synthesize slideShowFinishedObserver = _slideShowFinishedObserver;
+ at synthesize slideshow = _slideshow;
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        // Custom initialization
+    }
+    return self;
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    self.comManager = [CommunicationManager sharedComManager];
+    self.slideshow = [self.comManager.interpreter slideShow];
+    self.slideshow.delegate = self;
+    
+    [self.slideView setImage:[self.slideshow getImageAtIndex:self.slideshow.currentSlide]];
+    [self.lecturer_notes loadHTMLString: [self.slideshow getNotesAtIndex:self.slideshow.currentSlide]baseURL:nil];
+    [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]];
+    
+    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"End"
+                                                                   style:UIBarButtonItemStyleBordered
+                                                                  target:self
+                                                                  action:@selector(handleBack:)];
+    self.navigationItem.leftBarButtonItem = backButton;
+}
+
+- (void) handleBack:(id)sender
+{
+    [self.comManager.transmitter stopPresentation];   
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+
+- (void) viewDidAppear:(BOOL)animated
+{
+    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
+    
+    self.slideShowImageNoteReadyObserver =[center addObserverForName:MSG_SLIDE_CHANGED
+                                                              object:nil
+                                                               queue:mainQueue
+                                                          usingBlock:^(NSNotification *note) {
+                                                              NSLog(@"Getting slide: %u image to display: %@", self.slideshow.currentSlide, [self.slideshow getImageAtIndex:self.slideshow.currentSlide]);
+                                                              
+                                                              [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideshow];
+                                                              [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes];
+                                           
+                                                              [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]];
+                                                              
+                                                          }];
+    
+    self.slideShowFinishedObserver = [center addObserverForName:STATUS_CONNECTED_NOSLIDESHOW
+                                                         object:nil
+                                                          queue:mainQueue
+                                                     usingBlock:^(NSNotification *note) {
+                                                         [self.navigationController popViewControllerAnimated:YES];
+                                                     }];
+    self.slideView.layer.shadowColor = [[UIColor blackColor] CGColor];
+    self.slideView.layer.shadowOpacity = 0.5;
+    self.slideView.layer.shadowRadius = 4.0;
+    self.slideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
+    self.slideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.slideView.bounds].CGPath;
+    self.slideView.clipsToBounds = NO;
+    
+    self.secondarySlideView.layer.shadowColor = [[UIColor blackColor] CGColor];
+    self.secondarySlideView.layer.shadowOpacity = 0.5;
+    self.secondarySlideView.layer.shadowRadius = 4.0;
+    self.secondarySlideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
+    self.secondarySlideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.secondarySlideView.bounds].CGPath;
+    self.secondarySlideView.clipsToBounds = NO;
+    
+    [super viewDidAppear:animated];
+}
+
+- (void) viewDidDisappear:(BOOL)animated
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self.slideShowFinishedObserver];
+    [[NSNotificationCenter defaultCenter] removeObserver:self.slideShowImageNoteReadyObserver];
+    [super viewDidDisappear:animated];
+}
+
+
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+- (void)viewDidUnload {
+    [self setLecturer_notes:nil];
+    [self setSlideView:nil];
+    [self setSlideNumber:nil];
+    [self setSecondarySlideView:nil];
+    [self setNotesView:nil];
+    [super viewDidUnload];
+}
+
+- (IBAction)nextSlideAction:(id)sender {
+    [[self.comManager transmitter] nextTransition];
+}
+
+- (IBAction)previousSlideAction:(id)sender {
+    [[self.comManager transmitter] previousTransition];
+}
+
+- (IBAction)pointerAction:(id)sender {
+}
+ at end
diff --git a/ios/iosremote/iosremote/slideShow_vc.m b/ios/iosremote/iosremote/slideShow_vc.m
index b488829..df5fb5e 100644
--- a/ios/iosremote/iosremote/slideShow_vc.m
+++ b/ios/iosremote/iosremote/slideShow_vc.m
@@ -13,6 +13,11 @@
 #import "CommandTransmitter.h"
 #import <QuartzCore/QuartzCore.h>
 
+
+#define CURRENT_SLIDE_IMAGEVIEW 1
+#define NEXT_SLIDE_IMAGEVIEW 2
+#define CURRENT_SLIDE_NOTES 3
+
 @interface slideShow_vc ()
 
 @property (nonatomic, strong) CommunicationManager *comManager;
@@ -41,14 +46,22 @@
 - (void)viewDidLoad
 {
     [super viewDidLoad];
+    
+    // Unique tag assignment. Don't use 0 as it's default. 0-10 for central VC
+    [self.slideView setTag:CURRENT_SLIDE_IMAGEVIEW];
+    [self.secondarySlideView setTag:NEXT_SLIDE_IMAGEVIEW];
+    [self.lecturer_notes setTag:CURRENT_SLIDE_NOTES];
+    
     self.comManager = [CommunicationManager sharedComManager];
     self.slideshow = [self.comManager.interpreter slideShow];
     self.slideshow.delegate = self;
     
-    [self.slideView setImage:[self.slideshow getImageAtIndex:self.slideshow.currentSlide]];
-    [self.lecturer_notes loadHTMLString: [self.slideshow getNotesAtIndex:self.slideshow.currentSlide]baseURL:nil];
+    [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView];
+    [self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView];
+    [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes];
     [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]];
     
+    
     UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"End"
                                                                    style:UIBarButtonItemStyleBordered
                                                                   target:self
@@ -72,11 +85,9 @@
                                                               object:nil
                                                                queue:mainQueue
                                                           usingBlock:^(NSNotification *note) {
-                                                              NSLog(@"Getting slide: %u image to display: %@", self.slideshow.currentSlide, [self.slideshow getImageAtIndex:self.slideshow.currentSlide]);
-                                                              
-                                                              [self.slideView setImage:[self.slideshow getImageAtIndex:self.slideshow.currentSlide]];
-                                                              [self.lecturer_notes loadHTMLString: [self.slideshow getNotesAtIndex:self.slideshow.currentSlide]baseURL:nil];
-                                           
+                                                              [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView];
+                                                              [self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView];
+                                                              [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes];
                                                               [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]];
                                                               
                                                           }];
diff --git a/ios/iosremote/iosremote/slide_finished.png b/ios/iosremote/iosremote/slide_finished.png
new file mode 100644
index 0000000..8f57eaa
Binary files /dev/null and b/ios/iosremote/iosremote/slide_finished.png differ
commit b7072fcea570f8ceed30a743d9d0d66a5e4bc549
Author: siqi <me at siqi.fr>
Date:   Sun Jul 7 12:38:03 2013 +0200

    adapt to various screen size
    
    Change-Id: Iada6a992adead516c92cef9162b883679ba016f8

diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index f3b070a..f0a68c8 100644
Binary files a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard b/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
index 95d5341..c280664 100644
--- a/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
@@ -187,13 +187,13 @@
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                         <constraints>
                             <constraint firstItem="rEU-8Z-ftD" firstAttribute="leading" secondItem="JzX-I7-Mwa" secondAttribute="leading" type="default" id="0Vl-yA-Dfw"/>
-                            <constraint firstAttribute="bottom" secondItem="rEU-8Z-ftD" secondAttribute="bottom" constant="307" id="1SK-7H-e7T"/>
+                            <constraint firstItem="gBf-8h-qAQ" firstAttribute="top" secondItem="rEU-8Z-ftD" secondAttribute="bottom" constant="-1" type="user" id="784-lg-Jwb"/>
+                            <constraint firstItem="rEU-8Z-ftD" firstAttribute="top" secondItem="JzX-I7-Mwa" secondAttribute="top" type="default" id="81x-HN-DdO"/>
                             <constraint firstItem="gBf-8h-qAQ" firstAttribute="bottom" secondItem="JzX-I7-Mwa" secondAttribute="bottom" type="default" id="XID-ri-gv9"/>
                             <constraint firstItem="gBf-8h-qAQ" firstAttribute="leading" secondItem="JzX-I7-Mwa" secondAttribute="leading" type="default" id="Y2u-Rl-WQd"/>
-                            <constraint firstItem="rEU-8Z-ftD" firstAttribute="top" secondItem="JzX-I7-Mwa" secondAttribute="top" type="default" id="apD-qQ-s8o"/>
                             <constraint firstItem="rEU-8Z-ftD" firstAttribute="trailing" secondItem="JzX-I7-Mwa" secondAttribute="trailing" type="default" id="is8-0P-1Xz"/>
+                            <constraint firstItem="gBf-8h-qAQ" firstAttribute="top" secondItem="JzX-I7-Mwa" secondAttribute="top" constant="196" id="tNw-Oe-Fh6"/>
                             <constraint firstItem="gBf-8h-qAQ" firstAttribute="trailing" secondItem="JzX-I7-Mwa" secondAttribute="trailing" type="default" id="wTa-0Q-njp"/>
-                            <constraint firstItem="gBf-8h-qAQ" firstAttribute="top" secondItem="JzX-I7-Mwa" secondAttribute="top" constant="196" id="whN-RS-sbe"/>
                         </constraints>
                     </view>
                     <navigationItem key="navigationItem" id="rqp-6S-yX6"/>
@@ -213,12 +213,6 @@
                         <rect key="frame" x="0.0" y="64" width="320" height="504"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                         <subviews>
-                            <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xGi-A7-hat" userLabel="Notes">
-                                <constraints>
-                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="152" type="user" id="FGj-7v-Ul8"/>
-                                    <constraint firstAttribute="height" constant="152" type="user" id="ai8-lq-4e2"/>
-                                </constraints>
-                            </webView>
                             <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
                                 <subviews>
                                     <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
@@ -287,6 +281,9 @@
                                 <subviews>
                                     <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="bZq-z2-OKU">
                                         <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="167" id="ZXT-ja-tFo"/>
+                                        </constraints>
                                     </imageView>
                                     <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y1f-iI-63a">
                                         <subviews>
@@ -298,10 +295,10 @@
                                                 </constraints>
                                             </imageView>
                                         </subviews>
-                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                         <constraints>
                                             <constraint firstItem="B2g-rO-b9G" firstAttribute="leading" secondItem="Y1f-iI-63a" secondAttribute="leading" type="user" id="cV9-fY-2qk"/>
-                                            <constraint firstAttribute="bottom" secondItem="B2g-rO-b9G" secondAttribute="bottom" constant="2" id="ot9-YW-96V"/>
+                                            <constraint firstItem="B2g-rO-b9G" firstAttribute="bottom" secondItem="Y1f-iI-63a" secondAttribute="bottom" type="default" id="hpc-GY-1E7"/>
                                             <constraint firstItem="B2g-rO-b9G" firstAttribute="centerX" secondItem="Y1f-iI-63a" secondAttribute="centerX" type="user" id="pHp-uH-VH9"/>
                                         </constraints>
                                     </view>
@@ -316,38 +313,67 @@
                                         <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                                     </label>
                                 </subviews>
-                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                                 <constraints>
-                                    <constraint firstAttribute="bottom" secondItem="3BV-KX-Qla" secondAttribute="bottom" constant="3" id="01c-sE-45c"/>
                                     <constraint firstItem="bZq-z2-OKU" firstAttribute="leading" secondItem="Y1f-iI-63a" secondAttribute="trailing" constant="8" symbolic="YES" type="user" id="0lZ-9Y-n6x"/>
                                     <constraint firstItem="3BV-KX-Qla" firstAttribute="bottom" secondItem="bZq-z2-OKU" secondAttribute="bottom" type="default" id="9bb-JU-PCC"/>
                                     <constraint firstItem="Y1f-iI-63a" firstAttribute="leading" secondItem="YvB-Gp-Fvr" secondAttribute="leading" constant="3" type="user" id="B8T-YR-xfb"/>
                                     <constraint firstItem="Y1f-iI-63a" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="top" constant="3" type="user" id="CbL-CC-yq1"/>
                                     <constraint firstAttribute="height" constant="178" type="user" id="Lri-eG-Hfh"/>
-                                    <constraint firstItem="bZq-z2-OKU" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="top" constant="3" type="user" id="iC6-uD-d9d"/>
                                     <constraint firstAttribute="trailing" secondItem="bZq-z2-OKU" secondAttribute="trailing" constant="3" type="user" id="t7r-7X-1Sm"/>
+                                    <constraint firstItem="Y1f-iI-63a" firstAttribute="centerY" secondItem="YvB-Gp-Fvr" secondAttribute="centerY" type="default" id="v4d-rL-bRf"/>
                                     <constraint firstItem="3BV-KX-Qla" firstAttribute="trailing" secondItem="bZq-z2-OKU" secondAttribute="trailing" type="default" id="yD1-hY-fuD"/>
                                     <constraint firstItem="3BV-KX-Qla" firstAttribute="bottom" secondItem="Y1f-iI-63a" secondAttribute="bottom" type="default" id="zbM-X7-LxP"/>
                                 </constraints>
                             </view>
+                            <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="evg-Ah-Kcw" userLabel="NotesView">
+                                <subviews>
+                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Lecturer's Notes   " textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Y23-iV-GJx">
+                                        <color key="backgroundColor" red="1" green="0.66274509803921566" blue="0.074509803921568626" alpha="1" colorSpace="calibratedRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="21" type="user" id="H3E-M6-7uR"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" name="Helvetica-Bold" family="Helvetica" pointSize="13"/>
+                                        <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xGi-A7-hat" userLabel="Notes">
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="89" id="6C2-Dc-3ml"/>
+                                            <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="89" type="user" id="pq5-wY-sCH"/>
+                                        </constraints>
+                                    </webView>
+                                </subviews>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                <constraints>
+                                    <constraint firstItem="Y23-iV-GJx" firstAttribute="top" secondItem="evg-Ah-Kcw" secondAttribute="top" constant="9" type="user" id="Fz6-GO-dSV"/>
+                                    <constraint firstAttribute="trailing" secondItem="xGi-A7-hat" secondAttribute="trailing" constant="20" type="user" id="TqQ-Aw-nmd"/>
+                                    <constraint firstItem="xGi-A7-hat" firstAttribute="leading" secondItem="evg-Ah-Kcw" secondAttribute="leading" constant="20" type="user" id="sws-kC-lUY"/>
+                                    <constraint firstItem="Y23-iV-GJx" firstAttribute="leading" secondItem="evg-Ah-Kcw" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="t8M-o1-eXv"/>
+                                    <constraint firstItem="Y23-iV-GJx" firstAttribute="width" secondItem="xGi-A7-hat" secondAttribute="width" type="user" id="uLC-ir-IGd"/>
+                                    <constraint firstItem="xGi-A7-hat" firstAttribute="top" secondItem="evg-Ah-Kcw" secondAttribute="top" constant="30" id="wQo-Ug-fV3"/>
+                                </constraints>
+                            </view>
                         </subviews>
                         <color key="backgroundColor" red="0.90196079015731812" green="0.90196079015731812" blue="0.90196079015731812" alpha="1" colorSpace="calibratedRGB"/>
                         <constraints>
-                            <constraint firstItem="3od-5c-yzI" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="3ic-am-ey4"/>
+                            <constraint firstItem="evg-Ah-Kcw" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="181" id="3bJ-aC-aPd"/>
+                            <constraint firstItem="evg-Ah-Kcw" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="-13" id="5Ku-go-4Y7"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="5et-XH-ZVD"/>
                             <constraint firstItem="3od-5c-yzI" firstAttribute="bottom" secondItem="Xty-aF-WDv" secondAttribute="bottom" type="user" id="9UY-Go-jVU"/>
-                            <constraint firstItem="YvB-Gp-Fvr" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="D3u-HS-34e"/>
+                            <constraint firstItem="evg-Ah-Kcw" firstAttribute="centerX" secondItem="3od-5c-yzI" secondAttribute="centerX" type="default" id="Blx-4R-lt1"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="5" type="user" id="DoA-5l-NFS"/>
+                            <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="evg-Ah-Kcw" secondAttribute="bottom" constant="20" symbolic="YES" type="user" id="FWl-QP-VvL"/>
+                            <constraint firstItem="YvB-Gp-Fvr" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="FXg-Ij-nfl"/>
                             <constraint firstItem="YvB-Gp-Fvr" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="I4g-8o-Kbt"/>
-                            <constraint firstItem="3od-5c-yzI" firstAttribute="top" relation="lessThanOrEqual" secondItem="xGi-A7-hat" secondAttribute="bottom" constant="73" type="user" id="T2f-pV-SOF"/>
-                            <constraint firstItem="xGi-A7-hat" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="YVU-mS-NKr"/>
-                            <constraint firstItem="xGi-A7-hat" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="e7f-k8-b5G"/>
-                            <constraint firstItem="xGi-A7-hat" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="bottom" constant="8" symbolic="YES" type="user" id="k9t-qa-0V8"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="top" secondItem="evg-Ah-Kcw" secondAttribute="bottom" constant="43" type="user" id="cTg-UU-nIh"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="eJ5-5R-zZM"/>
                         </constraints>
                     </view>
                     <navigationItem key="navigationItem" title="Presentation" id="T79-lT-61m"/>
                     <connections>
                         <outlet property="lecturer_notes" destination="xGi-A7-hat" id="Cng-HM-0wW"/>
+                        <outlet property="notesView" destination="evg-Ah-Kcw" id="mlQ-Ez-ekQ"/>
                         <outlet property="secondarySlideView" destination="B2g-rO-b9G" id="98R-qU-Psa"/>
                         <outlet property="slideNumber" destination="3BV-KX-Qla" id="681-YP-k0T"/>
                         <outlet property="slideView" destination="bZq-z2-OKU" id="yu0-P8-F3v"/>
@@ -437,14 +463,11 @@
                         <rect key="frame" x="0.0" y="0.0" width="320" height="197"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
-                            <view alpha="0.50000000000000011" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Brj-I9-VTP">
-                                <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
-                            </view>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2Zo-K8-3NM">
                                 <subviews>
                                     <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Title of the presentation" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="5" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="178" translatesAutoresizingMaskIntoConstraints="NO" id="nJf-ed-YfY">
                                         <constraints>
-                                            <constraint firstAttribute="height" constant="56" id="VUf-zJ-vPG"/>
+                                            <constraint firstAttribute="height" constant="56" type="user" id="VUf-zJ-vPG"/>
                                             <constraint firstAttribute="width" constant="178" id="wto-RF-nap"/>
                                         </constraints>
                                         <fontDescription key="fontDescription" type="boldSystem" pointSize="25"/>
@@ -453,7 +476,7 @@
                                     </label>
                                     <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Author:  author name" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g5m-gQ-o0u">
                                         <constraints>
-                                            <constraint firstAttribute="height" constant="12" id="6dy-Ki-jHp"/>
+                                            <constraint firstAttribute="height" constant="12" type="user" id="6dy-Ki-jHp"/>
                                             <constraint firstAttribute="width" constant="160" id="uDT-Sz-6yp"/>
                                         </constraints>
                                         <fontDescription key="fontDescription" type="system" pointSize="14"/>
@@ -463,7 +486,7 @@
                                     <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Last modified:  3 Jul 2013" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Dds-oJ-Uhh">
                                         <constraints>
                                             <constraint firstAttribute="width" constant="194" id="ejq-Nh-ofA"/>
-                                            <constraint firstAttribute="height" constant="14" id="xvr-u8-mTb"/>
+                                            <constraint firstAttribute="height" constant="14" type="user" id="xvr-u8-mTb"/>
                                         </constraints>
                                         <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                         <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -471,7 +494,7 @@
                                     </label>
                                     <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Current slide:  5 of 22" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mrB-Wd-OcP">
                                         <constraints>
-                                            <constraint firstAttribute="height" constant="16" id="4n7-Yu-phk"/>
+                                            <constraint firstAttribute="height" constant="16" type="user" id="4n7-Yu-phk"/>
                                             <constraint firstAttribute="width" constant="169" id="ZdR-LV-4aK"/>
                                         </constraints>
                                         <fontDescription key="fontDescription" type="system" pointSize="14"/>
@@ -481,27 +504,33 @@
                                 </subviews>
                                 <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                                 <constraints>
-                                    <constraint firstItem="mrB-Wd-OcP" firstAttribute="leading" secondItem="Dds-oJ-Uhh" secondAttribute="leading" type="default" id="4dK-pH-sCn"/>
-                                    <constraint firstItem="g5m-gQ-o0u" firstAttribute="leading" secondItem="Dds-oJ-Uhh" secondAttribute="leading" type="default" id="9IO-Cs-oNg"/>
-                                    <constraint firstItem="mrB-Wd-OcP" firstAttribute="top" secondItem="Dds-oJ-Uhh" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="Jzi-ST-t3y"/>
-                                    <constraint firstItem="g5m-gQ-o0u" firstAttribute="leading" secondItem="2Zo-K8-3NM" secondAttribute="leading" constant="32" id="KQN-2D-WYg"/>
-                                    <constraint firstItem="Dds-oJ-Uhh" firstAttribute="top" secondItem="g5m-gQ-o0u" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="gtQ-av-tu7"/>
-                                    <constraint firstAttribute="bottom" secondItem="mrB-Wd-OcP" secondAttribute="bottom" constant="20" symbolic="YES" type="default" id="imp-d1-gQ3"/>
+                                    <constraint firstItem="mrB-Wd-OcP" firstAttribute="leading" secondItem="2Zo-K8-3NM" secondAttribute="leading" constant="32" type="user" id="2tP-aR-jNq"/>
+                                    <constraint firstItem="mrB-Wd-OcP" firstAttribute="leading" secondItem="Dds-oJ-Uhh" secondAttribute="leading" type="user" id="4dK-pH-sCn"/>
+                                    <constraint firstItem="mrB-Wd-OcP" firstAttribute="top" secondItem="Dds-oJ-Uhh" secondAttribute="bottom" constant="8" type="user" id="4xF-Ed-MnM"/>
+                                    <constraint firstItem="Dds-oJ-Uhh" firstAttribute="top" secondItem="g5m-gQ-o0u" secondAttribute="bottom" constant="8" type="user" id="6Hw-b9-1hx"/>
+                                    <constraint firstItem="g5m-gQ-o0u" firstAttribute="leading" secondItem="Dds-oJ-Uhh" secondAttribute="leading" type="user" id="9IO-Cs-oNg"/>
+                                    <constraint firstItem="Dds-oJ-Uhh" firstAttribute="leading" secondItem="g5m-gQ-o0u" secondAttribute="leading" type="user" id="AxU-4u-7y0"/>
+                                    <constraint firstItem="g5m-gQ-o0u" firstAttribute="top" secondItem="nJf-ed-YfY" secondAttribute="bottom" constant="15" type="user" id="I8g-AQ-6mK"/>
+                                    <constraint firstItem="mrB-Wd-OcP" firstAttribute="top" secondItem="Dds-oJ-Uhh" secondAttribute="bottom" constant="8" symbolic="YES" type="user" id="Jzi-ST-t3y"/>
+                                    <constraint firstItem="g5m-gQ-o0u" firstAttribute="leading" secondItem="2Zo-K8-3NM" secondAttribute="leading" constant="32" type="user" id="KQN-2D-WYg"/>
+                                    <constraint firstItem="Dds-oJ-Uhh" firstAttribute="leading" secondItem="2Zo-K8-3NM" secondAttribute="leading" constant="32" type="user" id="V6U-Sp-6hc"/>
+                                    <constraint firstItem="g5m-gQ-o0u" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="2Zo-K8-3NM" secondAttribute="leading" constant="32" type="user" id="VP2-HW-0K1"/>
+                                    <constraint firstItem="Dds-oJ-Uhh" firstAttribute="leading" secondItem="mrB-Wd-OcP" secondAttribute="leading" type="user" id="WW4-GU-mSH"/>
+                                    <constraint firstItem="Dds-oJ-Uhh" firstAttribute="top" secondItem="g5m-gQ-o0u" secondAttribute="bottom" constant="8" symbolic="YES" type="user" id="gtQ-av-tu7"/>
+                                    <constraint firstAttribute="bottom" secondItem="mrB-Wd-OcP" secondAttribute="bottom" constant="20" symbolic="YES" type="user" id="imp-d1-gQ3"/>
+                                    <constraint firstAttribute="height" constant="169" type="user" id="kbX-jk-qBX"/>
                                     <constraint firstItem="nJf-ed-YfY" firstAttribute="centerX" secondItem="2Zo-K8-3NM" secondAttribute="centerX" type="default" id="qYz-zW-Lfz"/>
-                                    <constraint firstItem="nJf-ed-YfY" firstAttribute="top" secondItem="2Zo-K8-3NM" secondAttribute="top" constant="20" symbolic="YES" type="default" id="qcW-Ip-dGx"/>
+                                    <constraint firstItem="nJf-ed-YfY" firstAttribute="top" secondItem="2Zo-K8-3NM" secondAttribute="top" constant="20" symbolic="YES" type="user" id="qcW-Ip-dGx"/>
                                 </constraints>
                             </view>
                         </subviews>
                         <color key="backgroundColor" cocoaTouchSystemColor="scrollViewTexturedBackgroundColor"/>
                         <constraints>
-                            <constraint firstItem="Brj-I9-VTP" firstAttribute="top" secondItem="Swz-wK-30Z" secondAttribute="top" constant="19" id="EUj-is-KHG"/>
                             <constraint firstItem="2Zo-K8-3NM" firstAttribute="leading" secondItem="Swz-wK-30Z" secondAttribute="leading" constant="13" id="GjY-1j-9c0"/>
-                            <constraint firstItem="2Zo-K8-3NM" firstAttribute="top" secondItem="Swz-wK-30Z" secondAttribute="top" constant="14" id="HGv-cC-ndg"/>
+                            <constraint firstItem="2Zo-K8-3NM" firstAttribute="top" secondItem="Swz-wK-30Z" secondAttribute="top" constant="14" type="user" id="HGv-cC-ndg"/>
                             <constraint firstItem="2Zo-K8-3NM" firstAttribute="centerX" secondItem="Swz-wK-30Z" secondAttribute="centerX" type="default" id="UWQ-MC-jdF"/>
-                            <constraint firstAttribute="bottom" secondItem="Brj-I9-VTP" secondAttribute="bottom" constant="10" id="gLh-pS-dXl"/>
-                            <constraint firstItem="Brj-I9-VTP" firstAttribute="leading" secondItem="Swz-wK-30Z" secondAttribute="leading" constant="17" id="k4f-FG-RE0"/>
-                            <constraint firstAttribute="trailing" secondItem="Brj-I9-VTP" secondAttribute="trailing" constant="8" id="uDL-TM-51l"/>
-                            <constraint firstItem="2Zo-K8-3NM" firstAttribute="centerY" secondItem="Swz-wK-30Z" secondAttribute="centerY" type="default" id="xWp-Jr-P3y"/>
+                            <constraint firstAttribute="bottom" secondItem="2Zo-K8-3NM" secondAttribute="bottom" constant="14" type="user" id="VKA-vw-4h9"/>
+                            <constraint firstItem="2Zo-K8-3NM" firstAttribute="centerY" secondItem="Swz-wK-30Z" secondAttribute="centerY" type="user" id="xWp-Jr-P3y"/>
                         </constraints>
                     </view>
                     <toolbarItems/>
@@ -558,6 +587,7 @@
                 <relationship kind="action" name="pointerAction:"/>
                 <relationship kind="action" name="previousSlideAction:"/>
                 <relationship kind="outlet" name="lecturer_notes" candidateClass="UIWebView"/>
+                <relationship kind="outlet" name="notesView" candidateClass="UIView"/>
                 <relationship kind="outlet" name="secondarySlideView" candidateClass="UIImageView"/>
                 <relationship kind="outlet" name="slideNumber" candidateClass="UILabel"/>
                 <relationship kind="outlet" name="slideView" candidateClass="UIImageView"/>
diff --git a/ios/iosremote/iosremote/slideShow_vc.h b/ios/iosremote/iosremote/slideShow_vc.h
index c4926f22e..eb6fb06 100644
--- a/ios/iosremote/iosremote/slideShow_vc.h
+++ b/ios/iosremote/iosremote/slideShow_vc.h
@@ -14,6 +14,7 @@
 - (IBAction)previousSlideAction:(id)sender;
 - (IBAction)pointerAction:(id)sender;
 
+ at property (weak, nonatomic) IBOutlet UIView *notesView;
 @property (weak, nonatomic) IBOutlet UIWebView *lecturer_notes;
 @property (weak, nonatomic) IBOutlet UIImageView *slideView;
 @property (weak, nonatomic) IBOutlet UIImageView *secondarySlideView;
diff --git a/ios/iosremote/iosremote/slideShow_vc.m b/ios/iosremote/iosremote/slideShow_vc.m
index 5664378..b488829 100644
--- a/ios/iosremote/iosremote/slideShow_vc.m
+++ b/ios/iosremote/iosremote/slideShow_vc.m
@@ -11,6 +11,7 @@
 #import "CommunicationManager.h"
 #import "CommandInterpreter.h"
 #import "CommandTransmitter.h"
+#import <QuartzCore/QuartzCore.h>
 
 @interface slideShow_vc ()
 
@@ -86,6 +87,20 @@
                                                      usingBlock:^(NSNotification *note) {
                                                          [self.navigationController popViewControllerAnimated:YES];
                                                      }];
+    self.slideView.layer.shadowColor = [[UIColor blackColor] CGColor];
+    self.slideView.layer.shadowOpacity = 0.5;
+    self.slideView.layer.shadowRadius = 4.0;
+    self.slideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
+    self.slideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.slideView.bounds].CGPath;
+    self.slideView.clipsToBounds = NO;
+    
+    self.secondarySlideView.layer.shadowColor = [[UIColor blackColor] CGColor];
+    self.secondarySlideView.layer.shadowOpacity = 0.5;
+    self.secondarySlideView.layer.shadowRadius = 4.0;
+    self.secondarySlideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f);
+    self.secondarySlideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.secondarySlideView.bounds].CGPath;
+    self.secondarySlideView.clipsToBounds = NO;
+    
     [super viewDidAppear:animated];
 }
 
@@ -108,8 +123,8 @@
     [self setLecturer_notes:nil];
     [self setSlideView:nil];
     [self setSlideNumber:nil];
-    [self setToolBar:nil];
     [self setSecondarySlideView:nil];
+    [self setNotesView:nil];
     [super viewDidUnload];
 }
 
commit 67fdf8bf9e43198f13140baa1628da852a803836
Author: siqi <me at siqi.fr>
Date:   Sun Jul 7 11:34:33 2013 +0200

    auto-layout for control pad
    
    Change-Id: I0eb15009fbc48977a58f06501ef519cc0198b26b

diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
index 60a42bc..ebbd706 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.pbxproj
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -15,6 +15,9 @@
 		57867A5B1787510700EBBE52 /* released_next_button.png in Resources */ = {isa = PBXBuildFile; fileRef = 57867A591787510700EBBE52 /* released_next_button.png */; };
 		57867A5E178752CD00EBBE52 /* pushed_previous_button.png in Resources */ = {isa = PBXBuildFile; fileRef = 57867A5C178752CD00EBBE52 /* pushed_previous_button.png */; };
 		57867A5F178752CD00EBBE52 /* released_previous_button.png in Resources */ = {isa = PBXBuildFile; fileRef = 57867A5D178752CD00EBBE52 /* released_previous_button.png */; };
+		57AEEDAD1789543D007F4F97 /* libO_toolBar_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDAC1789543D007F4F97 /* libO_toolBar_bg.png */; };
+		57AEEDAF17895B67007F4F97 /* pointer.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDAE17895B67007F4F97 /* pointer.png */; };
+		57AEEDB117895BF5007F4F97 /* pointer_pushed.png in Resources */ = {isa = PBXBuildFile; fileRef = 57AEEDB017895BF5007F4F97 /* pointer_pushed.png */; };
 		57B152991764703500EECC67 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B152981764703500EECC67 /* Base64.m */; };
 		57B1529F176486C300EECC67 /* CommandTransmitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B1529E176486C300EECC67 /* CommandTransmitter.m */; };
 		57B7625D17621E42007703F6 /* SlideShow.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B7625C17621E42007703F6 /* SlideShow.m */; };
@@ -51,8 +54,11 @@
 		57867A591787510700EBBE52 /* released_next_button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = released_next_button.png; path = iosremote/released_next_button.png; sourceTree = "<group>"; };
 		57867A5C178752CD00EBBE52 /* pushed_previous_button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pushed_previous_button.png; path = iosremote/pushed_previous_button.png; sourceTree = "<group>"; };
 		57867A5D178752CD00EBBE52 /* released_previous_button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = released_previous_button.png; path = iosremote/released_previous_button.png; sourceTree = "<group>"; };
-		57B152971764703500EECC67 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Base64.h; path = iosremote/Base64.h; sourceTree = "<group>"; };
-		57B152981764703500EECC67 /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Base64.m; path = iosremote/Base64.m; sourceTree = "<group>"; };
+		57AEEDAC1789543D007F4F97 /* libO_toolBar_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = libO_toolBar_bg.png; path = iosremote/libO_toolBar_bg.png; sourceTree = "<group>"; };
+		57AEEDAE17895B67007F4F97 /* pointer.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pointer.png; path = iosremote/pointer.png; sourceTree = "<group>"; };
+		57AEEDB017895BF5007F4F97 /* pointer_pushed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = pointer_pushed.png; path = iosremote/pointer_pushed.png; sourceTree = "<group>"; };
+		57B152971764703500EECC67 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = "<group>"; };
+		57B152981764703500EECC67 /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Base64.m; sourceTree = "<group>"; };
 		57B1529D176486C300EECC67 /* CommandTransmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandTransmitter.h; sourceTree = "<group>"; };
 		57B1529E176486C300EECC67 /* CommandTransmitter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommandTransmitter.m; sourceTree = "<group>"; };
 		57B7625B17621E42007703F6 /* SlideShow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlideShow.h; sourceTree = "<group>"; };
@@ -108,6 +114,9 @@
 		57AEEDAA1788D7B2007F4F97 /* Assets */ = {
 			isa = PBXGroup;
 			children = (
+				57AEEDB017895BF5007F4F97 /* pointer_pushed.png */,
+				57AEEDAE17895B67007F4F97 /* pointer.png */,
+				57AEEDAC1789543D007F4F97 /* libO_toolBar_bg.png */,
 				57867A581787510700EBBE52 /* pushed_next_button.png */,
 				57867A591787510700EBBE52 /* released_next_button.png */,
 				57867A5C178752CD00EBBE52 /* pushed_previous_button.png */,
@@ -117,13 +126,22 @@
 			name = Assets;
 			sourceTree = "<group>";
 		};
+		57AEEDAB1789443D007F4F97 /* slideShowPreview */ = {
+			isa = PBXGroup;
+			children = (
+				57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */,
+				57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */,
+				57FE71E717861A9000B50125 /* slideShowPreviewTable_vc.h */,
+				57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */,
+			);
+			name = slideShowPreview;
+			sourceTree = "<group>";
+		};
 		57C6E3E6175E06E800E8BC5F = {
 			isa = PBXGroup;
 			children = (
 				57AEEDAA1788D7B2007F4F97 /* Assets */,
 				BE9EBD061765BF0800283FD2 /* CoreImage.framework */,
-				57B152971764703500EECC67 /* Base64.h */,
-				57B152981764703500EECC67 /* Base64.m */,
 				57C6E425175E076900E8BC5F /* Communication */,
 				57C6E3F8175E06E800E8BC5F /* iosremote */,
 				57C6E3F1175E06E800E8BC5F /* Frameworks */,
@@ -156,8 +174,7 @@
 				57C6E40A175E06E800E8BC5F /* MainStoryboard_iPhone.storyboard */,
 				57FE71E11785C61300B50125 /* pinValidation_vc.h */,
 				57FE71E21785C61400B50125 /* pinValidation_vc.m */,
-				57FE71E41785D7FE00B50125 /* slideShowPreview_vc.h */,
-				57FE71E51785D7FE00B50125 /* slideShowPreview_vc.m */,
+				57AEEDAB1789443D007F4F97 /* slideShowPreview */,
 				57C6E401175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.h */,
 				57C6E402175E06E800E8BC5F /* libreoffice_sdremoteAppDelegate.m */,
 				57867A551787385800EBBE52 /* slideShow_vc.h */,
@@ -166,10 +183,6 @@
 				5753DD9817834D7100DB71BB /* newServer_vc.m */,
 				5753DD8E1781EA0300DB71BB /* serverList_vc.h */,
 				5753DD8F1781EA0300DB71BB /* serverList_vc.m */,
-				57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */,
-				57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */,
-				57FE71E717861A9000B50125 /* slideShowPreviewTable_vc.h */,
-				57FE71E817861A9000B50125 /* slideShowPreviewTable_vc.m */,
 			);
 			path = iosremote;
 			sourceTree = "<group>";
@@ -177,6 +190,10 @@
 		57C6E3F9175E06E800E8BC5F /* Supporting Files */ = {
 			isa = PBXGroup;
 			children = (
+				57B152971764703500EECC67 /* Base64.h */,
+				57B152981764703500EECC67 /* Base64.m */,
+				57CFED9717838FDC00E82E05 /* EditableTableViewCell.h */,
+				57CFED9817838FDC00E82E05 /* EditableTableViewCell.m */,
 				57C6E3FA175E06E800E8BC5F /* iosremote-Info.plist */,
 				57C6E3FB175E06E800E8BC5F /* InfoPlist.strings */,
 				57C6E3FE175E06E800E8BC5F /* main.m */,
@@ -270,6 +287,9 @@
 				57867A5B1787510700EBBE52 /* released_next_button.png in Resources */,
 				57867A5E178752CD00EBBE52 /* pushed_previous_button.png in Resources */,
 				57867A5F178752CD00EBBE52 /* released_previous_button.png in Resources */,
+				57AEEDAD1789543D007F4F97 /* libO_toolBar_bg.png in Resources */,
+				57AEEDAF17895B67007F4F97 /* pointer.png in Resources */,
+				57AEEDB117895BF5007F4F97 /* pointer_pushed.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
diff --git a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate
index cf19dc7..f3b070a 100644
Binary files a/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/iosremote/iosremote.xcodeproj/project.xcworkspace/xcuserdata/siqi.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard b/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
index 5186c53..95d5341 100644
--- a/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/MainStoryboard_iPhone.storyboard
@@ -213,95 +213,142 @@
                         <rect key="frame" x="0.0" y="64" width="320" height="504"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                         <subviews>
-                            <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" translatesAutoresizingMaskIntoConstraints="NO" id="bZq-z2-OKU">
+                            <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xGi-A7-hat" userLabel="Notes">
                                 <constraints>
-                                    <constraint firstAttribute="height" constant="197" id="YLg-Yg-h4x"/>
+                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="152" type="user" id="FGj-7v-Ul8"/>
+                                    <constraint firstAttribute="height" constant="152" type="user" id="ai8-lq-4e2"/>
                                 </constraints>
-                            </imageView>
-                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XDZ-bs-OUM">
-                                <constraints>
-                                    <constraint firstAttribute="width" constant="61" id="LOl-Pm-dy2"/>
-                                </constraints>
-                                <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
-                                <state key="normal" backgroundImage="released_next_button.png">
-                                    <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
-                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
-                                </state>
-                                <state key="highlighted" backgroundImage="pushed_next_button.png">
-                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                                </state>
-                                <connections>
-                                    <action selector="nextSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="qTl-Ib-3Z8"/>
-                                </connections>
-                            </button>
-                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
-                                <constraints>
-                                    <constraint firstAttribute="height" constant="61" id="Upo-03-Eaw"/>
-                                    <constraint firstAttribute="width" constant="61" id="iXa-2g-isP"/>
-                                </constraints>
-                                <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
-                                <state key="normal" backgroundImage="released_previous_button.png">
-                                    <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
-                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
-                                </state>
-                                <state key="highlighted" backgroundImage="pushed_previous_button.png">
-                                    <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                                </state>
-                                <connections>
-                                    <action selector="previousSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="DAf-Qp-7KW"/>
-                                </connections>
-                            </button>
-                            <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xGi-A7-hat">
-                                <color key="backgroundColor" patternImage="C3EAB918-B6EF-4237-BA62-38FB651AC6C0" colorSpace="pattern"/>
+                            </webView>
+                            <view contentMode="scaleToFill" restorationIdentifier="" translatesAutoresizingMaskIntoConstraints="NO" id="3od-5c-yzI" userLabel="Bottom">
+                                <subviews>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vh9-Zy-DPu">
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="61" id="dEG-lN-O7v"/>
+                                            <constraint firstAttribute="width" constant="93" id="tXD-cs-5jt"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" backgroundImage="released_previous_button.png">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted" backgroundImage="pushed_previous_button.png">
+                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <connections>
+                                            <action selector="previousSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="DAf-Qp-7KW"/>
+                                        </connections>
+                                    </button>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XDZ-bs-OUM">
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" backgroundImage="released_next_button.png">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted" backgroundImage="pushed_next_button.png">
+                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <connections>
+                                            <action selector="nextSlideAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="qTl-Ib-3Z8"/>
+                                        </connections>
+                                    </button>
+                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kMb-xm-ope">
+                                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="59" id="Kjm-ct-oJ3"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                                        <state key="normal" title="Button" image="pointer.png">
+                                            <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <state key="highlighted" image="pointer_pushed.png">
+                                            <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                        </state>
+                                        <connections>
+                                            <action selector="pointerAction:" destination="Ivv-3X-Nhr" eventType="touchUpInside" id="KYl-be-1wN"/>
+                                        </connections>
+                                    </button>
+                                </subviews>
+                                <color key="backgroundColor" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="deviceRGB"/>
                                 <constraints>
-                                    <constraint firstAttribute="width" constant="280" id="lCo-8S-Rvo"/>
-                                    <constraint firstAttribute="height" constant="151" id="ndz-J7-2XE"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="centerY" secondItem="3od-5c-yzI" secondAttribute="centerY" type="default" id="2gB-3Q-hYI"/>
+                                    <constraint firstAttribute="trailing" secondItem="XDZ-bs-OUM" secondAttribute="trailing" constant="20" symbolic="YES" type="default" id="Eqp-Q3-L92"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="XDZ-bs-OUM" secondAttribute="top" type="default" id="H9E-FR-J2C"/>
+                                    <constraint firstItem="vh9-Zy-DPu" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="20" symbolic="YES" type="default" id="SQd-eE-VN0"/>
+                                    <constraint firstAttribute="height" constant="88" type="user" id="dBc-X5-XIU"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="height" secondItem="vh9-Zy-DPu" secondAttribute="height" type="user" id="jh8-H0-Qmm"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="top" secondItem="vh9-Zy-DPu" secondAttribute="top" type="default" id="r6I-Jb-2lm"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="leading" secondItem="3od-5c-yzI" secondAttribute="leading" constant="132" id="tY1-mj-gK5"/>
+                                    <constraint firstItem="vh9-Zy-DPu" firstAttribute="width" secondItem="XDZ-bs-OUM" secondAttribute="width" type="user" id="x0P-o6-T4k"/>
+                                    <constraint firstItem="kMb-xm-ope" firstAttribute="height" secondItem="XDZ-bs-OUM" secondAttribute="height" type="user" id="zeV-2j-i1K"/>
                                 </constraints>
-                            </webView>
-                            <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="left" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3BV-KX-Qla">
-                                <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
-                                <rect key="contentStretch" x="1.3877787807814457e-17" y="0.0" width="1" height="1"/>
+                            </view>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YvB-Gp-Fvr" userLabel="Preview">
+                                <subviews>
+                                    <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="bZq-z2-OKU">
+                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                    </imageView>
+                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y1f-iI-63a">
+                                        <subviews>
+                                            <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="B2g-rO-b9G">
+                                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="86" type="user" id="KY9-Uc-127"/>
+                                                    <constraint firstAttribute="height" constant="68" id="oyr-9z-MOx"/>
+                                                </constraints>
+                                            </imageView>
+                                        </subviews>
+                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+                                        <constraints>
+                                            <constraint firstItem="B2g-rO-b9G" firstAttribute="leading" secondItem="Y1f-iI-63a" secondAttribute="leading" type="user" id="cV9-fY-2qk"/>
+                                            <constraint firstAttribute="bottom" secondItem="B2g-rO-b9G" secondAttribute="bottom" constant="2" id="ot9-YW-96V"/>
+                                            <constraint firstItem="B2g-rO-b9G" firstAttribute="centerX" secondItem="Y1f-iI-63a" secondAttribute="centerX" type="user" id="pHp-uH-VH9"/>
+                                        </constraints>
+                                    </view>
+                                    <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" alpha="0.80000000000000004" contentMode="left" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3BV-KX-Qla">
+                                        <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
+                                        <rect key="contentStretch" x="1.3877787807814457e-17" y="0.0" width="1" height="1"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="52" id="Qhb-gd-btj"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                        <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                                 <constraints>
-                                    <constraint firstAttribute="width" constant="52" id="Qhb-gd-btj"/>
+                                    <constraint firstAttribute="bottom" secondItem="3BV-KX-Qla" secondAttribute="bottom" constant="3" id="01c-sE-45c"/>
+                                    <constraint firstItem="bZq-z2-OKU" firstAttribute="leading" secondItem="Y1f-iI-63a" secondAttribute="trailing" constant="8" symbolic="YES" type="user" id="0lZ-9Y-n6x"/>
+                                    <constraint firstItem="3BV-KX-Qla" firstAttribute="bottom" secondItem="bZq-z2-OKU" secondAttribute="bottom" type="default" id="9bb-JU-PCC"/>
+                                    <constraint firstItem="Y1f-iI-63a" firstAttribute="leading" secondItem="YvB-Gp-Fvr" secondAttribute="leading" constant="3" type="user" id="B8T-YR-xfb"/>
+                                    <constraint firstItem="Y1f-iI-63a" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="top" constant="3" type="user" id="CbL-CC-yq1"/>
+                                    <constraint firstAttribute="height" constant="178" type="user" id="Lri-eG-Hfh"/>
+                                    <constraint firstItem="bZq-z2-OKU" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="top" constant="3" type="user" id="iC6-uD-d9d"/>
+                                    <constraint firstAttribute="trailing" secondItem="bZq-z2-OKU" secondAttribute="trailing" constant="3" type="user" id="t7r-7X-1Sm"/>
+                                    <constraint firstItem="3BV-KX-Qla" firstAttribute="trailing" secondItem="bZq-z2-OKU" secondAttribute="trailing" type="default" id="yD1-hY-fuD"/>
+                                    <constraint firstItem="3BV-KX-Qla" firstAttribute="bottom" secondItem="Y1f-iI-63a" secondAttribute="bottom" type="default" id="zbM-X7-LxP"/>
                                 </constraints>
-                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
-                                <color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
-                            </label>
-                            <toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GQv-EU-3bu">
-                                <items>
-                                    <barButtonItem title="<" width="80" id="buz-F8-kHg"/>
-                                    <barButtonItem style="plain" systemItem="flexibleSpace" id="Aw2-gV-FRx"/>
-                                    <barButtonItem title="O" width="80" id="mD4-uo-cXW"/>
-                                    <barButtonItem style="plain" systemItem="flexibleSpace" id="Bjb-U8-5of"/>
-                                    <barButtonItem title=">" width="80" id="ake-jX-ggk"/>
-                                </items>
-                            </toolbar>
+                            </view>
                         </subviews>
                         <color key="backgroundColor" red="0.90196079015731812" green="0.90196079015731812" blue="0.90196079015731812" alpha="1" colorSpace="calibratedRGB"/>
                         <constraints>
-                            <constraint firstItem="xGi-A7-hat" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="15" id="6lE-vb-eac"/>
-                            <constraint firstItem="bZq-z2-OKU" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="8c7-S3-6e7"/>
-                            <constraint firstItem="vh9-Zy-DPu" firstAttribute="top" secondItem="XDZ-bs-OUM" secondAttribute="top" type="default" id="9Ok-Tn-XPY"/>
-                            <constraint firstAttribute="trailing" secondItem="3BV-KX-Qla" secondAttribute="trailing" constant="6" id="CYg-Mi-8Fm"/>
-                            <constraint firstItem="vh9-Zy-DPu" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="227" id="Mc6-Iu-Llg"/>
-                            <constraint firstItem="vh9-Zy-DPu" firstAttribute="bottom" secondItem="XDZ-bs-OUM" secondAttribute="bottom" type="default" id="Osz-kd-tgN"/>
-                            <constraint firstItem="bZq-z2-OKU" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="Qsg-3g-46W"/>
-                            <constraint firstItem="3BV-KX-Qla" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="184" id="XgZ-IP-Wsa"/>
-                            <constraint firstItem="GQv-EU-3bu" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="cKk-ZT-xc9"/>
-                            <constraint firstItem="GQv-EU-3bu" firstAttribute="bottom" secondItem="Xty-aF-WDv" secondAttribute="bottom" type="default" id="dgM-wJ-YtM"/>
-                            <constraint firstItem="vh9-Zy-DPu" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" constant="25" id="g90-pp-FIm"/>
-                            <constraint firstAttribute="trailing" secondItem="XDZ-bs-OUM" secondAttribute="trailing" constant="32" id="gQB-7f-3oC"/>
-                            <constraint firstItem="GQv-EU-3bu" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="plb-vM-pxW"/>
-                            <constraint firstAttribute="bottom" secondItem="xGi-A7-hat" secondAttribute="bottom" constant="50" id="tCj-cK-tgF"/>
-                            <constraint firstItem="bZq-z2-OKU" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" type="default" id="uH1-AT-FKy"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="3ic-am-ey4"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="5et-XH-ZVD"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="bottom" secondItem="Xty-aF-WDv" secondAttribute="bottom" type="user" id="9UY-Go-jVU"/>
+                            <constraint firstItem="YvB-Gp-Fvr" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="D3u-HS-34e"/>
+                            <constraint firstItem="YvB-Gp-Fvr" firstAttribute="top" secondItem="Xty-aF-WDv" secondAttribute="top" constant="5" type="user" id="DoA-5l-NFS"/>
+                            <constraint firstItem="YvB-Gp-Fvr" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="I4g-8o-Kbt"/>
+                            <constraint firstItem="3od-5c-yzI" firstAttribute="top" relation="lessThanOrEqual" secondItem="xGi-A7-hat" secondAttribute="bottom" constant="73" type="user" id="T2f-pV-SOF"/>
+                            <constraint firstItem="xGi-A7-hat" firstAttribute="trailing" secondItem="Xty-aF-WDv" secondAttribute="trailing" type="default" id="YVU-mS-NKr"/>
+                            <constraint firstItem="xGi-A7-hat" firstAttribute="leading" secondItem="Xty-aF-WDv" secondAttribute="leading" type="default" id="e7f-k8-b5G"/>
+                            <constraint firstItem="xGi-A7-hat" firstAttribute="top" secondItem="YvB-Gp-Fvr" secondAttribute="bottom" constant="8" symbolic="YES" type="user" id="k9t-qa-0V8"/>
                         </constraints>
                     </view>
-                    <navigationItem key="navigationItem" title="Presentation" id="T79-lT-61m">
-                        <barButtonItem key="rightBarButtonItem" title="Slides" id="0Df-q1-4Ho"/>
-                    </navigationItem>
+                    <navigationItem key="navigationItem" title="Presentation" id="T79-lT-61m"/>
                     <connections>
                         <outlet property="lecturer_notes" destination="xGi-A7-hat" id="Cng-HM-0wW"/>
+                        <outlet property="secondarySlideView" destination="B2g-rO-b9G" id="98R-qU-Psa"/>
                         <outlet property="slideNumber" destination="3BV-KX-Qla" id="681-YP-k0T"/>
                         <outlet property="slideView" destination="bZq-z2-OKU" id="yu0-P8-F3v"/>
                     </connections>
@@ -465,4452 +512,12 @@
         </scene>
     </scenes>
     <resources>
-        <image name="C3EAB918-B6EF-4237-BA62-38FB651AC6C0" width="256" height="256">
-            <mutableData key="keyedArchiveRepresentation">
-YnBsaXN0MDDUAQIDBAUGPj9YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK4HCBMU
-GR4fIyQsLzI4O1UkbnVsbNUJCgsMDQ4PEBESVk5TU2l6ZVYkY2xhc3NcTlNJbWFnZUZsYWdzVk5TUmVw
-c1dOU0NvbG9ygAKADRIgwAAAgAOAC1p7MjU2LCAyNTZ90hUKFhhaTlMub2JqZWN0c6EXgASACtIVChod
-ohscgAWABoAJEADSIAohIl8QFE5TVElGRlJlcHJlc2VudGF0aW9ugAeACE8SAAQNHk1NACoABAAIdXiB
-/3Byef9wc33/b3F1/25wd/9wcnn/b3F1/2xudf9sbnX/bnB3/3Bzff9nanT/bnF7/3Byef9wc33/amxz
-/29xdf9zdXz/bG51/2ptd/9qbXf/bG51/2ptd/95e4H/dXd9/2xvef9sbnX/bG95/2xvef9nanT/am13
-/3N1fP9wc33/d3qD/2xudf9wc33/bG51/3V3ff9nanT/amxz/2xudf9qbHP/bG95/2ptd/9qbXf/bG95
-/2xudf91d33/e32D/2Jlbv9ucXv/bG95/3N2f/9qbHP/c3V8/3Bzff9nanH/amxz/2Jlbv9nanT/Z2px
-/2ptd/9sb3n/dXiB/2dqdP9ucXv/dXd9/2xudf9ucHf/dnh8/3V3ff9vcXX/bnB3/3h5ff9sbnX/bnB3
-/2xvef9wc33/bG95/25xe/95e4H/c3Z//3N2f/9zdn//dXiB/3N1fP9wcnn/Z2p0/25wd/9wcnn/dXd9
-/3R2fP9qbHP/bG51/2dqdP9zdXz/am13/3Fzev9qbHX/cHJ7/3Z3ff9ucXv/bnB3/25wd/9qbXf/dnh/
-/2tueP9xc3r/bG95/3Byef9ucHf/bnB3/3Bzff9ucHf/cHJ5/3Z4fP9sbnX/d3l//3V3ff9nanT/bnF7
-/3V3ff9zdn//c3V8/2dqcf9sbnX/bnF7/2ptd/9wc33/c3V8/3Bzff9qbHP/am13/2xudf9iZW7/am13
-/2hqdP9oanD/a251/3J1f/9vcnz/bnF7/25xe/9ucXv/c3Z//21wdf9sb3n/am12/2Zpcv9iZW7/ZGdx
-/2Zobv9kZ3H/ZGdx/2Zpc/9maXP/ZGdx/25wd/9iZW7/Z2p0/2Rncf9maG7/c3V8/2Rncf9sb3n/Zmlz
-/36Ahv9sb3n/bnF7/2xvef9ucHf/cHN9/29xdf95fIb/dXiB/3Bzff9zdXz/bG95/3d6g/9ucHf/c3Z/
-/3Byef9wc33/cHJ5/3Bzff9wc33/bnF7/3d5f/9qbXf/bnF7/3N2f/9zdn//cHJ5/25xe/9zdn//bnB3
-/3Byef9wc33/bG95/3Byef9ucXv/cHN9/25xe/9wcnn/c3V8/25wd/9ucXv/c3V8/3d5f/9zdn//bG95
-/25wd/9wc33/bG95/25xe/9ucHf/cHJ5/3Byef9wcnn/bG51/3N1fP9qbHP/c3V8/3Z4fP9wcnn/ZGdx
-/2ptd/9ucXv/bG95/25xe/9ucXv/c3Z//2dqdP9sbnX/eXuB/2dqdP9sb3n/bnF7/2xudf9qbHP/bnF7
-/3Byef9qbHP/am13/2dqcf9qbXf/amxz/3Bzff9qbXf/bG51/2xudf91d33/cHJ5/3N1fP9wcnn/cHN9
-/3d5f/9vcXX/c3V8/25wd/9qbXf/am13/2dqcf9maXP/ZGdx/2ptd/9sb3n/Z2px/3Byef9vcXX/cHJ5
-/2dqcf9sbnX/c3V8/29xdf9ucHf/bnB3/25wd/9ucHf/foCG/3h5ff9zdXz/cHJ5/3Byef9wcnn/amxz
-/2xudf92eHz/cHJ5/3V4gf9sbnX/bnF7/2xudf9wcnn/Z2px/2Rncf9maXP/Z2px/2dqcf9maG7/YmVu
-/2Zobv9maG7/am13/3N2f/9ZXGX/Zmlz/2dqdP9wcnn/ZGdx/2xvef9sb3n/amxz/2ptd/9maXP/am13
-/2xudf9sb3n/cHN9/3V3ff9nanT/bG95/3V3ff9nanT/bnB3/3N1fP91d33/am13/25xe/93eX//bnB3
-/2xudf9sbnX/cHN9/2xudf9sbnX/dXd9/25wd/9wcnn/cHJ5/3Byef9vcXX/bnB3/2dqdP9wcnn/cHN9
-/3l7gf93eX//bG95/25xe/9qbHP/c3V8/29xef9vcnr/amx1/25weP93eX//cHJ5/25wd/9sbnX/bnB3
-/3R2e/9ucHf/bnF5/21vdv9wcnn/bnB3/2xudf9zdXz/bnF7/3Bzff91d33/amxz/3Z4fP91d33/Z2px
-/25wd/91d33/bnB3/3Byef9maXP/am13/2xvef9sbnX/bG95/3V3ff92eHz/b3F1/25xe/9ucHf/Z2px
-/3N2f/9wc33/cHJ5/25wd/90dn3/bnF6/25xe/9wc33/bG95/3V3ff9ucXr/dHZ8/3V4gP91eID/cHJ5
-/3N2f/9wc33/bnF7/3Bzff9zdn//c3Z//2xvef93eoP/bG95/3N2f/9wc33/bnB3/3d5f/9nanH/am13
-/2dqdP93eoP/bG51/2ptd/9maXP/Z2p0/2ptd/9maG7/c3V8/25wd/9nanT/ZGdx/2RmbP9wcnn/YGNs
-/2dqcf9kZ3H/Zmhu/2BjbP9maG7/ZGdx/2Zobv9qbXf/YGNs/2Rncf9kZ3H/Z2p0/2Rncf9qbHP/Zmlz
-/2Rncf9maG7/Zmhu/2Jlbv9maXP/amxz/2ptd/9qbHP/bnF7/3Bzff9sbnX/Z2p0/25xe/91d33/cHJ5
-/25wd/9vcXX/c3V8/2xvef9wc33/bG95/3N2f/9zdn//dXiB/25xe/91eIH/bnF7/3V4gf95e4H/c3Z/
-/2ptd/9wcnn/c3Z//3Bzff9zdn//dXiB/3t+h/9wc33/cHN9/36Ahv91eIH/d3qD/3l7gf9zdn//bnF7
-/3V4gf91d33/b3F1/3N1fP9ucHf/dXd9/3N1fP93eX//cHN9/3Byef9ucHf/d3l//3N2f/9wc33/bnF7
-/3Bzff91d33/b3F1/3N1fP9ucHf/b3F1/25wd/9sb3n/Z2p0/2Zobv9qbXf/bG95/2Zpc/9wcnn/bW9z
-/25xe/9sbnX/bnB3/3V3ff9sb3n/bG95/2xvef9ucXv/bnF7/3t+h/95e4H/c3Z//3N2f/91eIH/d3qD
-/3N2f/9zdn//foGK/3l8hv+Bg4r/cHN9/3d6g/9zdXz/d3l//3Byef9wc33/cHN9/25xe/9ucXv/bnB3
-/29xdf9wcnn/bnF7/3l7gf9+gIb/Z2p0/3N2f/9wcnn/d3l//21vc/92eHz/dXd9/25wd/9ucXv/Z2p0
-/2xvef9ucHf/bnF7/3V4gf95fIb/bnB3/3N2f/91eIH/bnB3/3V4gf9zdn//dXd9/2ptd/9vcXX/dXd9
-/25wd/9sb3n/bnF7/3d6g/9ucXv/cHJ5/3N2f/9ucHf/bnB3/3Byef91d33/b3F1/3Byef9sbnX/b3F1
-/2xudf9wcnn/bnF4/2hrcv9tb3P/Z2p0/3Bzff9ucHf/b3J6/2ttdv9tcHr/dXd9/2ptd/9sbnX/Zmlz
-/2ptd/90dnv/bW92/25xev9sbnX/cHJ5/2ptd/9sbnX/bnF7/2xvef9ucXv/cHN9/2Rncf9wcnn/bnB3
-/2Jlbv9qbHP/cHN9/25xe/9qbXf/Zmhu/21vc/9ucHf/bG51/3N1fP93eX//dXd9/29xdf9ucXv/bnF7
-/2dqdP91d33/cHN9/25xe/9tb3b/c3Z8/3Byef9ucHj/c3V8/25xe/95e4H/cXN6/3d5gP93eX//c3V9
-/29xdf9zdXz/bG51/2xudf9ucHf/bG51/3Byef9qbHP/dnh8/2psc/9wc33/bnB3/21vc/94eX3/Z2px
-/2xudf9iZW7/dXiB/2psc/9maXP/YmVu/2Jlbv9nanT/Zmhu/3N2f/9zdXz/am13/2dqdP9nanT/dXiB
-/2Rncf9sbnX/Z2p0/2ptd/9qbXf/bnF7/25xe/9tb3P/dXiB/2Zpc/9ucHf/cHJ5/25wd/9ucHf/b3F1
-/3Byef9tb3P/bG51/2xvef9nanT/bG51/2xudf9sb3n/bG51/25xe/9ucXv/Z2p0/25xe/9wc33/dXd9
-/3Bzff9qbXf/amxz/25xe/9maXP/am13/2Jlbv9qbXf/amxz/2xvef9kZ3H/bnF7/2Rncf9ucXv/c3V8
-/2xvef9kZ3H/bW9z/2xvef9ucHf/dXd9/3V4gf97fYP/bnB3/3N1fP97fYP/bnF7/3V4gf93eX//cHJ5
-/25xe/9zdn//eXuB/3Bzff91eIH/bnF7/3d6g/91eIH/d3l//3N2f/9zdXz/c3V8/3d5f/9wc33/bnF7
-/25xe/9zdXz/c3V8/2xudf9sb3n/Z2px/2dqcf9nanT/amxz/2Jlbv9gY2z/bG51/2xudf9kZ3H/bG95
-/2xudf9qbXf/Zmlz/2dqcf9ucXv/amxz/2Zpc/9maXP/amxz/2dqdP91eIH/dXd9/3Bzff9ucHf/bG95
-/2ptd/9maXP/bG95/3V3ff9wc33/dXiB/21vc/9ucXv/bG51/3N1fP9tb3P/bG51/3Bzff9qbXf/am13
-/25xe/9qbXf/bG51/2xudf9wcnn/d3l//2Rncf9sb3n/bnF7/3V3ff9sbnX/dnh8/3V3ff9ucHf/bG51
-/2psc/9sb3n/b3F1/25wd/9wc33/d3qD/2xvef9wc33/c3Z//2xvef9zdn//cHN9/3V4gf9ucXv/c3V8
-/3t9g/9wc33/bnB3/25xe/91d33/b3F1/29xdf9zdXz/bW9z/2xudf9wcnn/c3V8/21vc/9wcnn/Z2px
-/2psc/9qbHP/bnB3/25wd/9qbHP/bG51/2psc/91d3z/bnB4/21vd/9qbHX/b3J6/3V3fP9ucHf/am13
-/2dqdP9ucXv/c3aA/21wev9ydHz/cHJ3/3N1fP9vcXX/bnB3/25xe/9wcnn/c3V8/3Bzff9qbXf/dXd9
-/3h5ff9qbHP/c3V8/3Z4fP9zdXz/bnF7/2Zobv9vcXX/bnB3/25wd/9ucHf/dnh8/3Byef9sbnX/cHJ5
-/2xvef9kZ3H/cHN9/25xe/9rbXT/Zmlz/25xef9pbHX/ZWhy/2ptd/9qbXf/c3V8/25vdv90d37/dXd9
-/25wd/9tb3P/c3V8/21vc/9wcnn/bnB3/25wd/9zdXz/Z2px/3d5f/9ucHf/e32D/3N2f/9wc33/e32D
-/25xe/9tb3P/Zmhu/3l7gf9qbXf/am13/2Rncf9maG7/Z2p0/2dqcf9zdn//cHJ5/2ptd/9qbXf/am13
-/3d6g/9kZ3H/am13/2dqdP9sb3n/am13/2dqdP9qbXf/Zmlz/3d5f/9kZ3H/am13/25wd/9qbXf/am13
-/2xudf9ucXv/bW9z/25wd/9ucHf/amxz/2xudf9sbnX/am13/2xudf9zdXz/c3V8/2xudf9zdXz/dXd9
-/3V3ff9ucXv/bG51/21vc/9wc33/Zmlz/2xudf9kZ3H/Z2p0/2dqcf9qbXf/Z2p0/25xe/9nanT/cHN9
-/3Byef9qbHP/XWBq/2xudf9qbXf/bG95/3N1fP9qbXf/dXiB/2xudf9qbXf/c3Z//2ptd/9ucXv/bG95
-/2dqdP9qbHP/Z2p0/2xvef9sbnX/bnF7/2psc/9sb3n/bG95/3Bzff9nanH/Zmlz/2Zpc/9ucXv/bG95
-/2ptd/9qbXf/Z2p0/3d5f/9ucXv/c3Z//25wd/9ucXv/cHN9/3Bzff9ucXv/am13/3Byef9wc33/bG95
-/3Bzff9ucHf/cHJ5/25wd/9vcXX/eHl9/3Bzff9ucHf/cHN9/25wd/9ucXv/e32D/3V4gf91d33/bG95
-/3N1fP9wcnn/bG51/3N1fP91d33/bnF7/3N1fP9qbHP/bnF7/2ptd/9zdXz/bG51/2xudf91d33/bnB3
-/3Byef9wcnn/bG95/25wd/9ucHf/dnh8/4CChv9ucHf/dXd9/3N1fP93eX//bnB3/3Z4fP92eHz/bnB3
-/2xudf9sbnX/bG51/2xudf9qbXf/bG95/3V4gf9maXP/bG95/2Zpc/9iZW7/am13/2dqdP9nanT/YmVu
-/2BjbP9sb3n/ZGdx/2BjbP9maXP/ZGdx/2Zobv9iZW7/am13/2Rncf9maXP/am13/25xe/9sbnX/bG95
-/2Zpc/9qbXf/bG51/2ptd/9tcHn/ZWhx/2ptd/9nanT/c3V8/21vdv9ucHj/a254/29xev9zdn7/bnF1
-/2xudf9nanH/bG95/29yfP9sbnf/bnF6/21vc/9ucXv/bnB3/25wd/9wcnn/bnB3/3V3ff9zdXz/bG51
-/3Byef91d33/ZGdx/2ptd/9zdXz/cHJ5/2xvef9iZW7/Z2p0/2ptd/9qbXf/am13/3d5f/9ucXv/am13
-/25xe/9qbXf/YmVu/2ptd/9qbXf/Z2py/2dpcv9vcXn/bnB3/2psc/9zdXz/cHJ5/3Bzff9wcnn/cnV+
-/3V3ff9vcXb/a254/3Byef9ucHf/cHN9/25wd/9ucHf/c3V8/2psc/93eX//cHJ5/3d5f/9vcXX/cHJ5
-/3l7gf9sb3n/b3F1/2dqcf97fYP/bG95/3Bzff9sb3n/bnB3/3Byef9ucXv/fn+D/3V3ff9wcnn/am13
-/2xudf9+f4P/amxz/3Byef9sb3n/dXd9/25wd/9ucXv/c3Z//2xvef95e4H/Zmhu/25wd/9sb3n/am13
-/2ptd/9qbHP/am13/2xudf9qbHP/bG51/2Zpc/9maXP/Z2px/2dqcf9kZ3H/am13/2Zpc/9iZW7/Z2p0
-/2xvef9sb3n/ZGdx/2Zobv9iZW7/Z2p0/2BjbP9kZ3H/XWBq/2Rncf9kZ3H/am13/2Rncf9sb3n/YmVu
-/2dqdP9qbXf/Zmhu/11gav9qbHP/Z2p0/2ptd/9zdXz/bnF7/3l8hv9qbXf/Z2p0/3V3ff9ucHf/c3V8
-/3Byef9wcnn/b3F1/25xe/9wc33/cHJ5/3l7gf9zdXz/dXiB/3V4gf95fIb/c3V8/3Byef9ucXv/eXuB
-/3d6g/9zdn//c3Z//3Bzff95e4H/c3V8/25xe/9ucHf/cHN9/3Bzff9zdn//bG95/2xvef9wcnn/cHN9
-/2xvef9ucXv/bnF7/3Byef9ucHf/bnB3/3l7gf9zdn//bnB3/2xvef9ucHf/cHN9/3d6g/93eX//dXd9
-/2xudf9wcnn/bG51/2psc/9zdXz/eHl9/3V3ff91eIH/bnB3/3Byef9wcnn/dnh8/2xvef9wc33/d3qD
-/3N2f/9zdn//c3V8/25wd/9ucHf/c3V8/3h5ff9/gYf/bnB3/3Z4fP9wcnn/d3l//25wd/93eoP/eXuB
-/25wd/9wcnn/bG51/25wd/9qbHP/am13/2ptd/95fIb/Zmlz/25xe/9qbHP/ZGdx/25xe/9sb3n/bnF7
-/2psc/9qbXf/dXd9/2xudf9qbHP/cHN9/3Bzff9sbnX/Zmlz/3Bzff9nanH/Z2p0/2psc/9nanT/bG51
-/2ptd/9maXP/bG95/2xudf9sb3n/bG54/2Vocv9nanT/Z2px/25xe/9rbXX/a252/2tudv9vcXj/dHZ8
-/2ptd/9qbXf/Z2px/3Byef9zdXz/bXB4/25xev9nanT/amxz/2Zobv9qbHP/Z2p0/2psc/9nanT/am13
-/2BjbP9nanT/dXd9/2Jlbv9sbnX/bG95/2ptd/9sbnX/YmVu/2ptd/9sb3n/bnF7/2xudf93eX//bnF7
-/2ptd/9wcnn/bnB3/2Rncf9ucXv/bG95/2ptd/9pbHT/cHJ7/29ye/9tb3f/c3V8/25wd/9wc33/a210
-/2tueP9ucXv/a211/21vc/9ucHf/bW9z/29xdf9sb3n/cHJ5/3N1fP9qbXf/d3l//25wd/91eIH/bnF7
-/3Byef93eoP/am13/2xudf9iZW7/dXiB/2ptd/9ucXv/Zmlz/2psc/9qbXf/am13/3t9g/9zdXz/am13
-/2xudf9qbHP/dXiB/2BjbP9maXP/ZGdx/2dqdP9maXP/Z2px/2xvef9kZ3H/c3V8/2BjbP9maXP/Z2p0
-/2psc/9maXP/amxz/2xvef9sbnX/amxz/2xudf9maXP/Z2p0/2psc/9qbXf/Zmlz/3Bzff9ucXv/Zmlz
-/2ptd/9wc33/dXd9/2xvef9sb3n/bW9z/3V3ff9ucHf/bnB3/2Zpc/9ucHf/bW9z/3N1fP9tb3P/dnh8
-/25wd/94eX3/eHl9/2xudf9nanH/bG95/25xe/9ucXv/c3V8/3Byef9+gIb/cHN9/3N1fP95e4H/c3V8
-/25xe/9ucXv/bG51/2xudf9zdXz/c3V8/29xdf9zdXz/bnB3/3N1fP9wcnn/dXd9/29xdf9sbnX/bG95
-/3Z4fP92eHz/c3V8/3Bzff9wc33/eHl9/29xdf9wc33/amxz/25wd/9sb3n/cHN9/2Rncf9nanT/Z2p0
-/2ptd/9qbXf/bnB3/3Byef9wcnn/bG51/2xudf91d33/dnh8/2psc/9ucXv/bnB3/3Bzff93eX//d3l/
-/3N1fP9tb3P/c3V8/21vc/9sbnX/c3Z//3d6g/91eIH/eXuB/25xe/9zdn//dXiB/3t9g/9wcnn/dXiB
-/3l7gf93eoP/d3qD/3d6g/9wc33/cHN9/25xe/91eIH/gYOK/2xvef91d33/cHN9/3l7gf9ucXv/e36H
-/3l7gf9zdXz/c3Z//2xvef91eIH/cHJ5/3d6g/91eIH/f4GH/3Byef93eoP/cHN9/2xvef91eIH/c3Z/
-/3V4gf9zdXz/c3V8/3l8hv91eIH/c3Z//3t9g/95e4H/c3Z//3N1fP93eoP/bnB3/25xe/9sb3n/cHN9
-/2xvef9ucXv/am13/3Byef9ucHf/cHJ5/3J0ev9tb3b/bG95/25wd/9wc33/bXB6/3Fze/9ucHf/b3F6
-/25wev9sbnX/bG51/2dqcf91d33/cnV+/29yfP9rbnj/a210/2ptd/9sbnX/bG51/2xudf9wcnn/c3V8
-/3Byef9kZmz/bnB3/3V3ff9kZ3H/am13/2xvef9nanT/bG51/2Jlbv9qbXf/am13/2xvef9sbnX/dXd9
-/2xvef9sbnX/c3V8/2xudf9maG7/cHJ5/3Byef9sb3n/a253/3N1fv9xdH7/bG95/3N1fP9zdXz/c3V8
-/25wdP9vcXj/dHZ8/21veP9wcnn/cHN9/29xdf9ucHf/bW9z/3Byef9wcnn/amxz/3V3ff9qbXf/dXd9
-/2psc/9sbnX/c3V8/2Jlbv9ucHf/Z2px/3l7gf9ucHf/bnB3/25wd/9ucHf/cHJ5/29xdf9+gIb/dXd9
-/25wd/9sbnX/bW9z/35/g/9qbHP/bG51/25wd/9ucXv/bG51/2psc/9ucXv/Z2p0/3d5f/9kZ3H/bG51

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list