1. 17 Apr, 2018 1 commit
    • lassoan's avatar
      ENH: Added new volume rendering quality option: Normal · e94653c8
      lassoan authored
      SetLockSampleDistanceToInputSpacing usually provides good quality rendering at acceptable speed, but on slow computers or in virtual reality views (where very high frame rate is needed), it is still necessary to allow choose between volume rendering speed and quality.
      Added a new option to clearly distinguish between quality settings:
      - adaptive: sampling computed from desired fps
      - normal: sampling computed from input volume
      - maximum quality: sampling computed from input volume, with 10x oversampling
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@27153 3bd1e089-480b-0410-8dfb-8563597acbee
  2. 16 Mar, 2018 1 commit
  3. 13 Mar, 2018 1 commit
    • pinter's avatar
      ENH: Added performance related options to GPU volume rendering · 4e01304f
      pinter authored
      - Added option to use the mapper's feature LockSampleDistanceToInputSpacing to calculate it internally instead of setting sampling distance manually. On by default. Only applies to GPU rendering in adaptive mode.
      - Added UseJittering option to GPU display node and the UI in advanced rendering properties (called Surface smoothing). If turned on, then uses random noise to remove the wood-grain artifact. Off by default.
      - Widened range of FPS slider for adaptive mode to accommodate for new virtual reality use cases (maximum used to be 20, now it is 100)
      - Removed empty "Misc" tab from Volume rendering module UI
      - Fixed ctkDoubleSlider related warning message
      - Modernized vtkMRMLVolumeRenderingDisplayNode to use node references and new property macros. This fixed several bugs as well (e.g. not reading/writing attributes). Removed the related test step from vtkMRMLVolumePropertyNodeTest1
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@27072 3bd1e089-480b-0410-8dfb-8563597acbee
  4. 10 Mar, 2018 1 commit
  5. 09 Mar, 2018 1 commit
  6. 08 Mar, 2018 1 commit
  7. 24 Feb, 2018 1 commit
    • pinter's avatar
      ENH: Separated volume rendering preset combobox from module widget · f4b50114
      pinter authored
      The Volume Rendering module widget handled everything, which made the class quite big, and also prevented reusing the preset combobox in other modules or slicelets.
      - Added reusable qSlicerVolumeRenderingPresetComboBox class that contains the combobox and the shift slider
      - Added EffectiveRange member to vtkMRMLVolumePropertyNode. It sets a custom extent to the transfer functions so that only the meaningful part of it is shown (and not the long tails). Thus the shift slider is much less sensitive and is more user friendly
      - Added effectiveRange attribute to presets.xml. For now the effective range is between the second and last second points for CTs, first and second last for MRs
      - Removed calculation of transfer function extent based on volume scalar range. The effective range is always valid, and contains a meaningful range (if not then encompasses the transfer function bounds), so this is not necessary anymore (and the combobox class is also cleaner)
      - Instead of only moving the middle points of the transfer function, all the points are moved. This fixes the bug of squashing the transfer function if it was shifted beyond its extreme points (bounds)
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26955 3bd1e089-480b-0410-8dfb-8563597acbee
  8. 30 Nov, 2017 1 commit
  9. 15 Nov, 2017 1 commit
    • jcfr's avatar
      ENH: Update to VTKv9 to include VTK OpenVR fix · d3652b67
      jcfr authored
      If building against Qt5, VTKv9 will now be selected.
      List of changes:
      $ git shortlog 71cf316..e3f97b0 --no-merges
      19001248 (1):
            fix memory leak in vtkSTLReader when vtkSTLReader failed to read STL file
      Allison Vacanti (7):
            Add log scaling to vtkPiecewiseFunction.
            Allow piecewise function tables to be computed in log space.
            Use axis properties to determine whether to log scale.
            Fix rendering of piecewise function handles in log space.
            Fix new test failure.
            Use VTK's visibilty settings in VTK-m.
            Fix uninitialized variable warning.
      Andrew Maclean (1):
            Fixing the html links.
      Ben Boeckel (3):
            vtkWrapPython: always generate the wrapper arguments file
            expat: update the readme name
            freerange: remove
      Dan Lipsa (3):
            Use PDAL instead of Pdal for vtkPDALReader
            Fix catch warning.
            Make CanReadFile return an int for consistency.
      David E. DeMarle (4):
            fixup some not marked override comp warnings
            increment version number of master branch
            Remove some incomplete test files
            Remove some incomplete test files
      Expat Upstream (1):
            expat 2017-11-06 (a71d7ff2)
      Forrest Li (2):
            Remove legacy classes from ParallelGeometry
            Remove vtkPUnstructuredGridGhostDataGenerator from docs
      Jean-Baptiste VIMORT (1):
            BUG: Fixing the outlier problem for the Implicite Plane Interaction in VR
      Joachim Pouderoux (2):
            Fix multi and single textured OBJ file reading.
            Declare SetShaderValues method as virtual.
      Julien Finet (2):
            Restore GL_BLEND and GL_DEPTH_TEST after vtkSSAAPass is rendered
            Fix crash in transforms when doing DeepCopy after Identity
      Julien Schueller (1):
            Use VTK_COMPILE_TOOLS_IMPORTED for EncodeString too
      Ken Martin (1):
            try speeding up test that can run long
      Mathieu Westphal (1):
            Fix an rarely used loop deleting array
      Max Smolens (1):
            COMP: WIP: Fix inconsistent-missing-override warning
      Robbie Li (1):
            use vtkNew to alloc the points and polys
      Robert Maynard (1):
            Bump vtk-m to the official vtk-m 1.1.0 tag.
      Steve Pieper (1):
            BUG: WIP: fix vtkPickingManager interaction with widgets
      Sujin Philip (1):
            Updates for vtk-m true virtuals changes
      Todd Martin (8):
            Eliminate compiler warnings about missing override
            Eliminate compiler warnings for static method CanReadFile()
            Eliminate compiler warnings about missing override
            Replace deprecated string copy
            Replace deprecated VTK_OVERRIDE with override
            Limit use of strncpy_s() to windows
            Make CanReadFile() virtual for EnSight readers
            Make safe string copy specific to MSVC compiler rather than Windows
      Utkarsh Ayachit (3):
            Don't warn for 0 cells.
            Avoid circular dependency when using kits.
            Avoid warnings when numcells is 0.
      Will Schroeder (4):
            New filter to segment connected point regions.
            New regression test image
            Another regression test image
            Fixed memory leak
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26634 3bd1e089-480b-0410-8dfb-8563597acbee
  10. 08 Nov, 2017 1 commit
    • lassoan's avatar
      BUG: Fix disappearing volume rendering · 42912153
      lassoan authored
      When volume rendering display node of a non-visible volume was modified then the currently displayed volume disappeared.
      How to reproduce the problem:
          # volumes 'a' and 'b' are in the scene
          ad = slicer.modules.volumerendering.logic().GetFirstVolumeRenderingDisplayNode(a)
          bd = slicer.modules.volumerendering.logic().GetFirstVolumeRenderingDisplayNode(b)
          ad.Modified() # ERROR: volume 'b' disappears (after this commit, it does not disappear)
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26555 3bd1e089-480b-0410-8dfb-8563597acbee
  11. 01 Nov, 2017 1 commit
    • jcfr's avatar
      BUG: Fix initialization of module displayable managers · 5458db1d
      jcfr authored
      This commit removes the auto-initialization of displayable managers when
      the displayable manager library was loaded. This approach was failing
      when Slicer was built without Python support. Indeed, in that case the
      displayable manager libraries were not loaded as a side effect of importing
      the wrapper libraries.
      Instead, this commit requires module to explicitly initialize its
      associated displayable managers (similarly to what is already done in
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26540 3bd1e089-480b-0410-8dfb-8563597acbee
  12. 30 Oct, 2017 1 commit
  13. 20 Oct, 2017 1 commit
  14. 14 Oct, 2017 1 commit
  15. 10 Oct, 2017 1 commit
  16. 05 Sep, 2017 1 commit
  17. 16 Aug, 2017 1 commit
  18. 13 Aug, 2017 4 commits
    • jcfr's avatar
      ENH: Set default QSurfaceFormat for QVTKOpenGLWidget · 9b394ba8
      jcfr authored
      Set default QSurfaceFormat for QVTKOpenGLWidget so that QVTKOpenGLWidget
      receives the proper OpenGL core profile context.
      From QOpenGLWidget documentation (http://doc.qt.io/qt-5/qopenglwidget.html):
          Note: Calling QSurfaceFormat::setDefaultFormat() before constructing
          the QApplication instance is mandatory on some platforms (for
          example, macOS) when an OpenGL core profile context is requested.
          This is to ensure that resource sharing between contexts stays
          functional as all internal contexts are created using the correct
          version and profile.
      Client code uses QVTKOpenGLWidget when SlICer_VTK_USE_QVTKOPENGLWIDGET
      is defined in vtkSlicerConfigure.h.
      Multisampling is disabled to support volume rendering and other VTK
      functionality that reads from the framebuffer. See
      From: Max Smolens <max.smolens@kitware.com>
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26260 3bd1e089-480b-0410-8dfb-8563597acbee
    • jcfr's avatar
      ENH: Add preliminary support for Qt5 · 12eff4a0
      jcfr authored
      Support configuration using either Qt4 or Qt5
      Based on preliminary work from Steve Pieper <pieper@bwh.harvard.edu>
      * vtkSlicerConfigure: Introduced Slicer_HAVE_QT5 and Slicer_HAVE_WEBKIT_SUPPORT.
        This was needed to workaround limitation of "moc" compiler preventing it
        from expanding macro like "QT_VERSION_CHECK.
      * Explicitly set QT_PLUGINS_DIR and QT_BINARY_DIR variables when using Qt5
      * Update extension build system to propagate Qt version
      Tested with Qt 5.7 and Qt 5.9 on Ubuntu
      Remaining tasks:
      * Port extension manager
      * Update install/packaging rules to support Qt5
      * SlicerStyle (based on CommonStyle) is disabled (see Main.cxx). Application crashes on Linux.
      * Fix runtime errors:
       * libpng warning: iCCP: known incorrect sRGB profile
       * QPixmap::grabWidget is deprecated, use QWidget::grab() instead
      Co-authored-by: default avatarHina Shah <hina.shah@kitware.com>
      Co-authored-by: Max Smolens's avatarMax Smolens <max.smolens@kitware.com>
      COMP adding qt5 variables for extension testing
      COMP Adding Qt5 build and plugin cmake variables
      From: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26251 3bd1e089-480b-0410-8dfb-8563597acbee
    • jcfr's avatar
      COMP: Update usage of method deprecated in VTK8.1 · 0b310472
      jcfr authored
      VTK8.1 deprecated vtkWindowToImageFilter::SetMagnification(). Replace
      calls to that method with vtkWindowToImageFilter::SetScale().
      From: Max Smolens <max.smolens@kitware.com>
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26249 3bd1e089-480b-0410-8dfb-8563597acbee
    • jcfr's avatar
      COMP: Fix inconsistent-missing-override warnings · b8dd4183
      jcfr authored
      This commit adds the VTK_OVERRIDE macros to fix the warnings.
      From: Hina Shah <hina.shah@kitware.com>
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26248 3bd1e089-480b-0410-8dfb-8563597acbee
  19. 30 May, 2017 1 commit
    • lassoan's avatar
      BUG: Removed all iteratorless traverse of shared collections · ff4a605e
      lassoan authored
      Collections have convenience functions for traversing it without the need for creating an iterator,
      using InitTraversal() and GetNextItemAsObject(). These functions use an internal iterator stored in the collection.
      When a collection is traversed using the internal iterator by multiple functions at the same time, the behavior will be incorrect.
      For collections that can be accessed by multiple objects, it is almost impossible to make sure that only one function will use
      the internal iterator at a time. Therefore, shared collections must be traversed using external iterators.
      For example, this error caused a bug in View Controllers module: it only showed the first slice view controller (while there were three). The problem was that View Controllers module iterated through the nodes using the internal iterator and internally a method was called that asked for a list of nodes by classname, which used the same internal iterator.
      - Replaced all instances of shared collection traversal with internal iterator.
      - Made vtkMRMLScene's InitTraversal, GetNextNode, and GetNextNodeByClass methods deprecated (they are still functional,
        but log a warning when they are called).
      - Added vtkMRMLScene::GetFirstNodeByClass convenience function and modified functions that used InitTraversal/GetNextNodeByClass
        or GetNthNodeByClass(0, ...) to use this function.
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@26059 3bd1e089-480b-0410-8dfb-8563597acbee
  20. 26 Apr, 2017 1 commit
  21. 25 Apr, 2017 1 commit
    • jcfr's avatar
      ENH: Remove unused VolumeRenderingReplacements fixed point raycaster override · 67c4ae61
      jcfr authored
      This specialized implementation was first introduced in r4673 (ENH: Integrated
      VTK ray cast classes, started with modifications for incremental update) by
      copying the VTK implementation of the FixedPoint volume caster and was
      most likely introduced to better support volume rendering compositing
      with polygonal data.
      Based on the discussion of the Developer meeting from April 25th [1] and
      considering that non of the classes found in VolumeRenderingReplacements
      are instantiated when using either the CPU or GPU volume mapper currently
      available in Slicer, this commit removes them.
      [1] https://www.slicer.org/wiki/Developer_Meetings/20170425
      They most likely became obsolete with one of these commits:
      * r23887 (ENH: Remove unused VTK OpenGL 3D Texture based volume rendering classes)
      * r23888 (ENH: Remove unused NCI volume rendering classes)
      * r23889 (ENH: Remove unused NCI GPU MultiVolume rendering classes).
      Also worth noting that since then, the VTK implementation has matured
      and fixes can now easily be contributed upstream.
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@25972 3bd1e089-480b-0410-8dfb-8563597acbee
  22. 13 Apr, 2017 2 commits
  23. 12 Apr, 2017 1 commit
    • pinter's avatar
      ENH: Added visibility context menu for subject hierarchy plugins · a9092f32
      pinter authored
      Context menu in subject hierarchy can be crowded, and visibility-related settings may be hard to find. As discussed before, a second context menu that is invoked by right-clicking the visibility (eye) icon was added to contain the visibility-related actions. Visibility actions added here:
      - Labelmaps: Labelmap outline toggle
      - Segments: Show only selected segment, show all segments
      - Volume rendering (new plugin): Show volume rendering (this shows up for all volumes, including labelmaps)
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@25921 3bd1e089-480b-0410-8dfb-8563597acbee
  24. 24 Mar, 2017 1 commit
    • pinter's avatar
      STYLE: Indentation related changes · 4e0a67e3
      pinter authored
      1. vtkMRMLNode::Indent member seemed unused in the core, except from the also unused ROI list node, so the member was removed
      2. In WriteXML functions, the increasing indentation was added between the XML attributes, which did not have major effect on the top level, but for example in the scene view section, where indentation was increased, it made the nodes look like this:
          id="vtkMRMLSelectionNodeSingleton"    name="Selection"    hideFromEditors="true"    selectable="true"    selected="false"    singletonTag="Singleton"
      As the purpose of indentation is to add space in front of the _lines_, adding that space between the XML attributes seems unnecessary. With these changes, the same entry now looks like this:
          id="vtkMRMLSelectionNodeSingleton" name="Selection" hideFromEditors="true" selectable="true" selected="false"
      In the first implementation of `WriteXML()`, the name of the node (e.g vtkMRMLModelNode.cxx) was explicitly serialized and indented in the function by explicitly using `nIndent`.
      See r40 (COMP: added vtkITK and MRML libs). Code like this was used:
          vtkIndent i1(nIndent);
          of << i1 << "<Model";
          of << " id='" << this->ID << "'";
          if (this->Name && strcmp(this->Name, ""))
            of << " name='" << this->Name << "'";
          if (this->Color && strcmp(this->Color, ""))
            of << " color='" << this->Color << "'";
      Then, this approach was reviewed in r133 (ENH: more transform functionality) by systematically calling the base class implementation of WriteXML() function.
      Code above was then updated like this:
         Superclass::WriteXML(of, nIndent);
         vtkIndent indent(nIndent);
         if (this->Color && strcmp(this->Color, ""))
           of << indent << " color='" << this->Color << "'";
      This commit simplifies the XML serialization and explicitly mark `indent` parameter as deprecated.
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@25870 3bd1e089-480b-0410-8dfb-8563597acbee
  25. 12 Feb, 2017 1 commit
  26. 23 Jan, 2017 1 commit
  27. 24 Oct, 2016 1 commit
  28. 20 Oct, 2016 1 commit
  29. 01 Sep, 2016 1 commit
  30. 31 Aug, 2016 1 commit
  31. 19 Jul, 2016 1 commit
    • msmolens's avatar
      BUG: Fix OpenGL errors/segfault when entering volume rendering module · 0368da05
      msmolens authored
      The following workflow triggered OpenGL errors (when using the VTK OpenGL
      backend) followed by a segfault (when using the VTK OpenGL2 backend):
      1. Set 3D-only layout, restart app
      2. Load volume
      3. Enter the volume rendering module
      For the OpenGL2 backend, the top of the stack trace is similar to the following:
       	vtkOpenGL-7.1.dll!vtkShaderProgram::IsUniformUsed(const char * cname) Line 847	C++
       	vtkOpenGL-7.1.dll!vtkOpenGLPolyDataMapper2D::SetMapperShaderParameters(vtkOpenGLHelper & cellBO, vtkViewport * viewport, vtkActor2D * actor) Line 409	C++
       	vtkOpenGL-7.1.dll!vtkOpenGLPolyDataMapper2D::UpdateShaders(vtkOpenGLHelper & cellBO, vtkViewport * viewport, vtkActor2D * actor) Line 325	C++
       	vtkOpenGL-7.1.dll!vtkOpenGLPolyDataMapper2D::RenderOverlay(vtkViewport * viewport, vtkActor2D * actor) Line 874	C++
       	vtkRendering-7.1.dll!vtkActor2D::RenderOverlay(vtkViewport * viewport) Line 125	C++
       	vtkRendering-7.1.dll!vtkRenderer::PickGeometry() Line 1810	C++
       	vtkOpenGL-7.1.dll!vtkOpenGLRenderer::DevicePickRender() Line 602	C++
       	vtkRendering-7.1.dll!vtkRenderer::PickRender(vtkPropCollection * props) Line 1735	C++
       	vtkRendering-7.1.dll!vtkRenderer::PickProp(double selectionX1, double selectionY1, double selectionX2, double selectionY2) Line 1559	C++
       	vtkRendering-7.1.dll!vtkRenderer::PickProp(double selectionX, double selectionY) Line 432	C++
       	vtkRendering-7.1.dll!vtkViewport::PickPropFrom(double selectionX, double selectionY, vtkPropCollection * pickfrom) Line 721	C++
       	vtkRendering-7.1.dll!vtkPropPicker::PickProp(double selectionX, double selectionY, vtkRenderer * renderer) Line 87	C++
       	vtkRendering-7.1.dll!vtkPropPicker::PickProp(double selectionX, double selectionY, vtkRenderer * renderer, vtkPropCollection * pickfrom) Line 63	C++
       	vtkRendering-7.1.dll!vtkPropPicker::Pick(double selectionX, double selectionY, double __formal, vtkRenderer * renderer) Line 49	C++
       	vtkSlicerAnnotationsModuleVTKWidgets.dll!vtkAnnotationROIRepresentation2D::ComputeInteractionState(int X, int Y, int __formal) Line 644	C++
       	vtkInteraction-7.1.dll!vtkAbstractWidget::SetEnabled(int enabling) Line 155	C++
       	vtkRendering-7.1.dll!vtkInteractorObserver::On() Line 73	C++
       	vtkSlicerAnnotationsModuleMRMLDisplayableManager.dll!vtkMRMLAnnotationROIDisplayableManager::CreateWidget(vtkMRMLAnnotationNode * node) Line 192	C++
       	vtkSlicerAnnotationsModuleMRMLDisplayableManager.dll!vtkMRMLAnnotationDisplayableManager::AddAnnotation(vtkMRMLAnnotationNode * annotationNode) Line 2166	C++
       	vtkSlicerAnnotationsModuleMRMLDisplayableManager.dll!vtkMRMLAnnotationDisplayableManager::OnMRMLSceneNodeAdded(vtkMRMLNode * node) Line 464	C++
       	MRMLLogic.dll!vtkMRMLAbstractLogic::ProcessMRMLSceneEvents(vtkObject * caller, unsigned long event, void * callData) Line 476	C++
       	MRMLLogic.dll!vtkMRMLAbstractLogic::MRMLSceneCallback(vtkObject * caller, unsigned long eid, void * clientData, void * callData) Line 173	C++
       	vtkCommon-7.1.dll!vtkCallbackCommand::Execute(vtkObject * caller, unsigned long event, void * callData) Line 43	C++
       	MRMLCore.dll!vtkEventBroker::InvokeObservation(vtkObservation * observation, unsigned long eid, void * callData) Line 842	C++
       	MRMLCore.dll!vtkEventBroker::ProcessEvent(vtkObservation * observation, vtkObject * caller, unsigned long eid, void * callData) Line 687	C++
       	MRMLCore.dll!vtkEventBroker::Callback(vtkObject * caller, unsigned long eid, void * clientData, void * callData) Line 914	C++
       	vtkCommon-7.1.dll!vtkCallbackCommand::Execute(vtkObject * caller, unsigned long event, void * callData) Line 43	C++
       	vtkCommon-7.1.dll!vtkSubjectHelper::InvokeEvent(unsigned long event, void * callData, vtkObject * self) Line 619	C++
       	vtkCommon-7.1.dll!vtkObject::InvokeEvent(unsigned long event, void * callData) Line 785	C++
       	MRMLCore.dll!vtkMRMLScene::AddNode(vtkMRMLNode * n) Line 1241	C++
       	vtkSlicerAnnotationsModuleMRML.dll!vtkMRMLAnnotationNode::Initialize(vtkMRMLScene * mrmlScene) Line 668	C++
       	vtkSlicerAnnotationsModuleMRML.dll!vtkMRMLAnnotationControlPointsNode::Initialize(vtkMRMLScene * mrmlScene) Line 702	C++
       	vtkSlicerAnnotationsModuleMRML.dll!vtkMRMLAnnotationLinesNode::Initialize(vtkMRMLScene * mrmlScene) Line 570	C++
       	vtkSlicerAnnotationsModuleMRML.dll!vtkMRMLAnnotationROINode::Initialize(vtkMRMLScene * mrmlScene) Line 47	C++
       	vtkSlicerVolumeRenderingModuleLogic.dll!vtkSlicerVolumeRenderingLogic::UpdateDisplayNodeFromVolumeNode(vtkMRMLVolumeRenderingDisplayNode * displayNode, vtkMRMLVolumeNode * volumeNode, vtkMRMLVolumePropertyNode * * propNode, vtkMRMLAnnotationROINode * * roiNode) Line 939	C++
       	qSlicerVolumeRenderingModuleWidgets.dll!qSlicerVolumeRenderingModuleWidgetPrivate::createVolumeRenderingDisplayNode(vtkMRMLVolumeNode * volumeNode) Line 249	C++
       	qSlicerVolumeRenderingModuleWidgets.dll!qSlicerVolumeRenderingModuleWidget::onCurrentMRMLVolumeNodeChanged(vtkMRMLNode * node) Line 346	C++
      The errors/segfault occur when hardware picking is performed before the render
      window has created an OpenGL context. Usually render windows create a context on
      their first render, but that doesn't happen in this case because the slice views
      aren't visible; see [1].
      This commit fixes the problem by forcing an initial render when creating a slice
      view. This ensures that the render window has a context, which in turn prevents
      the OpenGL errors/segfault in the above workflow, and possibly others.
      [1] https://github.com/commontk/CTK/blob/bacd360/Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp#L229-L233.
      git-svn-id: http://svn.slicer.org/Slicer4/trunk@25239 3bd1e089-480b-0410-8dfb-8563597acbee
  32. 08 Jul, 2016 2 commits
  33. 21 Jun, 2016 1 commit
  34. 13 Jun, 2016 1 commit
  35. 23 May, 2016 1 commit