private async Task<object> CreateTrackingHandler(dynamic input)
        {
			Logger("Start Image Tracking");
            trackingHandlerCallback = (Func<object, Task<object>>)input.callback;
            if (trackingHandlerCallback == null)
            {
                throw new Exception("no callback function is provided");
            }
			
			IPcMoment moment = await PcLink.CaptureMomentAsync();
			
			// Extract the top-level picture and child images.
			var picture = await PcLink.ExtractPictureAsync(moment);

			// Extract the top-level outline and child outlines.
			var outline = await PcLink.ExtractOutlineAsync(moment);
			
			//var combolist = new List<TrackingHandlerDataObject>();
			List<PcTrainingImage> images = new List<PcTrainingImage>();
			Logger(picture.Children.Count().ToString());
			for (int i = 0; i < picture.Children.Count(); i++)
			{
				PcTrainingImage trainingImage = new PcTrainingImage("Object " + i, picture.Children.ElementAt(i).Image);
				images.Add(trainingImage);
			}

			// Create the object-tracking handler.
			trackingHandler = PcLink.CreateObjectTrackingHandler(images);
			
			// Subscribe to object-tracking events.
			trackingHandler.TrackUpdated += _imagesTrackHandler_TrackUpdated;
			Logger("Before start");
			// Start object tracking.
			trackingHandler.StartAsync().Wait();
            Logger("After start");
            
            return true;
        }
		private async Task<object> AddTrainingImages(dynamic input)
        {
			string name = (string)input.name;
			IPcPicture picture = await PcLink.ExtractPictureAsync(getMoment((string)input.momentId));
			for (int i = 0; i < picture.Children.Count(); i++)
			{
				PcTrainingImage trainingImage = new PcTrainingImage(name + i, picture.Children.ElementAt(i).Image);
				trainingImages.Add(trainingImage);
			}
			return true;
		}