text:
package com.intellij.util.ui;

import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.ui.Gray;
import com.intellij.ui.JBColor;
import com.intellij.ui.LightColors;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.util.Alarm;
import com.intellij.util.NotNullProducer;
import com.intellij.util.ReflectionUtil;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.plaf.ScrollBarUI;
import javax.swing.plaf.basic.BasicScrollBarUI;
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.Method;

/**
 * @author max
 * @author Konstantin Bulenkov
 */
public class ButtonlessScrollBarUI extends BasicScrollBarUI {
  private static final Logger LOG = Logger.getInstance("#" + ButtonlessScrollBarUI.class.getName());

  protected JBColor getGradientLightColor() {
    return jbColor(Gray._251, Gray._95);
  }

  protected JBColor getGradientDarkColor() {
    return jbColor(Gray._215, Gray._80);
  }

  private JBColor getGradientThumbBorderColor() {
    return jbColor(Gray._201, Gray._85);
  }

  public static JBColor getTrackBackgroundDefault() {
    return new JBColor(LightColors.SLIGHTLY_GRAY, UIUtil.getListBackground());
  }

  public static JBColor getTrackBorderColorDefault() {
    return new JBColor(Gray._230, UIUtil.getListBackground());
  }

  private JBColor getTrackBackground() {
    return jbColor(LightColors.SLIGHTLY_GRAY, UIUtil.getListBackground());
  }

  private JBColor getTrackBorderColor() {
    return jbColor(Gray._230, UIUtil.getListBackground());
  }

  private static final BasicStroke BORDER_STROKE = new BasicStroke();

  private JBColor jbColor(final Color regular, final Color dark) {
    return new JBColor(new NotNullProducer<Color>() {
      @NotNull
      @Override
      public Color produce() {
        return isDark() ? dark : regular;
      }
    });
  }

  private int getAnimationColorShift() {
    return isDark() ? 20 : 40;
  }

  private final AdjustmentListener myAdjustmentListener;
  private final MouseMotionAdapter myMouseMotionListener;
  private final MouseAdapter myMouseListener;
  private final HierarchyListener myHierarchyListener;
  private final AWTEventListener myAWTMouseListener;
  private final NSScrollerHelper.ScrollbarStyleListener myNSScrollerListener;
  private boolean myGlobalListenersAdded;

  public static final int DELAY_FRAMES = 4;
  public static final int FRAMES_COUNT = 10 + DELAY_FRAMES;

  private Animator myThumbFadeAnimator;
  private int myThumbFadeColorShift = 0;

  private boolean myMouseIsOverThumb = false;
  private boolean myMouseOverScrollbar;
  private double myMouseOverScrollbarExpandLevel = 0;

  private NSScrollerHelper.Style myMacScrollerStyle;
  private Animator myMouseOverScrollbarExpandAnimator;
  private Alarm myMacScrollbarFadeTimer;
  private Animator myMacScrollbarFadeAnimator;
  private double myMacScrollbarFadeLevel = 0;
  private boolean myMacScrollbarHidden;

  private ScrollbarRepaintCallback myRepaintCallback;

  protected ButtonlessScrollBarUI() {
    myAdjustmentListener = new AdjustmentListener() {
      Point oldViewportPosition = null;
      Dimension oldViewportDimension = null;

      @Override
      public void adjustmentValueChanged(AdjustmentEvent e) {
        JScrollPane scrollpane = (JScrollPane)SwingUtilities.getAncestorOfClass(JScrollPane.class, scrollbar);
        JViewport viewport = scrollpane == null ? null : scrollpane.getViewport();

        if (viewport == null) {
          oldViewportPosition = null;
          return;
        }

        boolean vertical = isVertical();
        Point position = viewport.getViewPosition();
        // we don't take viewport's size here since it often changes on scrollbar appearance.
        // instead, we want to only react on visible area resizes
        Dimension dimension = scrollpane.getSize();

        boolean scrolled = false;
        if (oldViewportPosition != null) {
          int scrollH = position.x - oldViewportPosition.x;
          int scrollV = position.y - oldViewportPosition.y;
          scrolled = vertical && scrollH == 0 && scrollV != 0 ||
                     !vertical && scrollV == 0 && scrollH != 0;
        }
        oldViewportPosition = position;

        boolean resized = false;
        if (oldViewportDimension != null) {
          int resizedH = dimension.width - oldViewportDimension.width;
          int resizedV = dimension.height - oldViewportDimension.height;
          resized = vertical && resizedV != 0 || !vertical && resizedH != 0;
        }
        oldViewportDimension = dimension;

        if (scrolled) {
          // hide the opposite scrollbar when user scrolls
          JScrollBar other = vertical ? scrollpane.getHorizontalScrollBar()
                                      : scrollpane.getVerticalScrollBar();
          ScrollBarUI otherUI = other == null ? null : other.getUI();
          if (otherUI instanceof ButtonlessScrollBarUI) {
            ((ButtonlessScrollBarUI)otherUI).startMacScrollbarFadeout(true);
          }

          restart();
        }
        else if (resized) {
          startMacScrollbarFadeout();
        }
      }
    };

    myMouseMotionListener = new MouseMotionAdapter() {
      @Override
      public void mouseMoved(MouseEvent e) {
        boolean inside = isOverThumb(e.getPoint());
        if (inside != myMouseIsOverThumb) {
          myMouseIsOverThumb = inside;
          startRegularThumbAnimator();
        }
      }
    };

    myMouseListener = new MouseAdapter() {
      @Override
      public void mouseEntered(MouseEvent e) {
        // only restart animations when fading hasn't started yet
        if (myMacScrollbarFadeLevel == 0) {
          myMouseOverScrollbar = true;
          startMacScrollbarExpandAnimator();
          startMacScrollbarFadeout();
        }
      }

      @Override
      public void mouseExited(MouseEvent e) {
        if (myMouseIsOverThumb) {
          myMouseIsOverThumb = false;
          startRegularThumbAnimator();
        }

        if (myMouseOverScrollbar) {
          myMouseOverScrollbar = false;
          startMacScrollbarExpandAnimator();
          startMacScrollbarFadeout();
        }
      }
    };

    myHierarchyListener = new HierarchyListener() {
      @Override
      public void hierarchyChanged(HierarchyEvent e) {
        if (e.getChanged() == scrollbar) {
          // scrollbar is added to the screen resources
          if ((HierarchyEvent.DISPLAYABILITY_CHANGED & e.getChangeFlags()) != 0) {
            updateGlobalListeners(false);
          }
        }

        if (e.getChanged() == scrollbar.getParent()) {
          // when scrollpane is shown first time, we 'blink' the scrollbars
          if ((HierarchyEvent.SHOWING_CHANGED & e.getChangeFlags()) != 0) {
            restart();
          }
        }
      }
    };
    myAWTMouseListener = new AWTEventListener() {
      public void eventDispatched(AWTEvent event) {
        if (event.getID() == MouseEvent.MOUSE_MOVED) {

            // user is moving inside the scrollpane of the scrollbar and fade-out hasn't started yet
          Container scrollpane = SwingUtilities.getAncestorOfClass(JScrollPane.class, scrollbar);
          if (scrollpane != null) {
            Point loc = ((MouseEvent)event).getLocationOnScreen();
            SwingUtilities.convertPointFromScreen(loc, scrollpane);
            if (scrollpane.contains(loc) && !myMacScrollbarHidden && myMacScrollbarFadeLevel == 0) {
              startMacScrollbarFadeout();
            }
          }
        }
      }
    };
    myNSScrollerListener = new NSScrollerHelper.ScrollbarStyleListener() {
      @Override
      public void styleChanged() {
        updateMacScrollbarStyle();
      }
    };
  }

  @Override
  protected ArrowButtonListener createArrowButtonListener() {
    return new ArrowButtonListener() {
      @Override
      public void mousePressed(MouseEvent event) {
      }

      @Override
      public void mouseReleased(MouseEvent event) {
      }
    };
  }

  protected boolean isMacOverlayScrollbar() {
    return myMacScrollerStyle == NSScrollerHelper.Style.Overlay && isMacOverlayScrollbarSupported();
  }

  public static boolean isMacOverlayScrollbarSupported() {
    return SystemInfo.isMac && !Registry.is("ide.mac.disableMacScrollbars");
  }

  private void updateMacScrollbarStyle() {
    NSScrollerHelper.Style style = NSScrollerHelper.getScrollerStyle();

    if (style != myMacScrollerStyle && scrollbar != null) {
      myMacScrollerStyle = style;

      updateStyleDefaults();
      restart();

      JScrollPane pane = JBScrollPane.findScrollPane(scrollbar);
      if (pane != null) pane.revalidate();
    }
  }

  public boolean alwaysShowTrack() {
    return !isMacOverlayScrollbar();
  }

  @Override
  public void layoutContainer(Container scrollbarContainer) {
    try {
      super.layoutContainer(scrollbarContainer);
    }
    catch (NullPointerException ignore) {
      //installUI is not performed yet or uninstallUI has set almost every field to null. Just ignore it //IDEA-89674
    }
  }

  /**
   * This is overridden only to increase the invalid area.
   * This ensures that whole track will be repainted in case of installed callback
   */
  @Override
  protected void setThumbBounds(int x, int y, int width, int height) {
    if (width > 0 && height > 0 && UIManager.getBoolean("ScrollBar.alwaysShowThumb") && !alwaysShowTrack()) {
      int w = trackRect.width, h = trackRect.height;
      if (w > h && w == width || w < h && h == height) {
        x = y = width = height = 0;
      }
    }

    if (myRepaintCallback != null) {
      // We want to repaint whole scrollbar even if thumb wasn't moved (on small scroll of a big panel)
      // Even if scrollbar wasn't changed itself, myRepaintCallback could need repaint
      scrollbar.repaint(trackRect);
    }

    super.setThumbBounds(x, y, width, height);
  }

  @Override
  protected ModelListener createModelListener() {
    return new ModelListener() {
      @Override
      public void stateChanged(ChangeEvent e) {
        if (scrollbar != null) {
          super.stateChanged(e);
        }
      }
    };
  }

  public int getDecrementButtonHeight() {
    return Math.max(0, decrButton.getHeight());
  }
  public int getIncrementButtonHeight() {
    return Math.max(0, incrButton.getHeight());
  }

  private void startRegularThumbAnimator() {
    if (isMacOverlayScrollbar()) return;

    myThumbFadeAnimator.reset();
    if (scrollbar != null && scrollbar.getValueIsAdjusting() || myMouseIsOverThumb || Registry.is("ui.no.bangs.and.whistles")) {
      myThumbFadeAnimator.suspend();
      myThumbFadeColorShift = getAnimationColorShift();
    }
    else {
      myThumbFadeAnimator.resume();
    }
  }

  private void startMacScrollbarExpandAnimator() {
    if (!isMacOverlayScrollbar()) return;

    if (myMouseOverScrollbarExpandLevel == 0) {
      myMouseOverScrollbarExpandAnimator.reset();
      myMouseOverScrollbarExpandAnimator.suspend();
      if (myMouseOverScrollbar) {
        myMouseOverScrollbarExpandAnimator.resume();
      }
    }
  }

  private void startMacScrollbarFadeout() {
    startMacScrollbarFadeout(false);
  }

  private void startMacScrollbarFadeout(boolean now) {
    if (!isMacOverlayScrollbar()) return;

    myMacScrollbarFadeTimer.cancelAllRequests();

    if (now) {
      if (!myMacScrollbarHidden && !myMacScrollbarFadeAnimator.isRunning()) {
        myMacScrollbarFadeAnimator.resume();
      }
      return;
    }

    myMacScrollbarFadeAnimator.suspend();
    myMacScrollbarFadeAnimator.reset();
    myMacScrollbarHidden = false;
    myMacScrollbarFadeLevel = 0;

    JScrollBar sb = scrollbar; // concurrency in background editors initialization
    if (sb != null) {
      sb.repaint();

      Application application = ApplicationManager.getApplication();
      if (!myMouseOverScrollbar && !sb.getValueIsAdjusting() && (application == null || !application.isUnitTestMode())) {
        myMacScrollbarFadeTimer.addRequest(new Runnable() {
          @Override
          public void run() {
            myMacScrollbarFadeAnimator.resume();
          }
        }, 700, null);
      }
    }
  }

  public static BasicScrollBarUI createNormal() {
    return new ButtonlessScrollBarUI();
  }

  public static BasicScrollBarUI createTransparent() {
    return new ButtonlessScrollBarUI() {
      @Override
      public boolean alwaysShowTrack() {
        return false;
      }
    };
  }

  @Override
  protected void installDefaults() {
    final int incGap = UIManager.getInt("ScrollBar.incrementButtonGap");
    final int decGap = UIManager.getInt("ScrollBar.decrementButtonGap");
    try {
      UIManager.put("ScrollBar.incrementButtonGap", 0);
      UIManager.put("ScrollBar.decrementButtonGap", 0);
      super.installDefaults();
    }
    finally {
      UIManager.put("ScrollBar.incrementButtonGap", incGap);
      UIManager.put("ScrollBar.decrementButtonGap", decGap);
    }

    myMacScrollerStyle = NSScrollerHelper.getScrollerStyle();
    scrollbar.setFocusable(false);
    updateStyleDefaults();
  }

  private void updateStyleDefaults() {
    scrollbar.setOpaque(alwaysShowTrack());
  }

  @Override
  protected void installListeners() {
    initRegularThumbAnimator();
    initMacScrollbarAnimators();

    super.installListeners();
    scrollbar.addAdjustmentListener(myAdjustmentListener);
    scrollbar.addMouseListener(myMouseListener);
    scrollbar.addMouseMotionListener(myMouseMotionListener);

    scrollbar.addHierarchyListener(myHierarchyListener);
    updateGlobalListeners(false);

    restart();
  }

  private void restart() {
    startRegularThumbAnimator();
    startMacScrollbarFadeout();
  }

  private static final Method setValueFrom = ReflectionUtil.getDeclaredMethod(TrackListener.class, "setValueFrom", MouseEvent.class);
  static {
    LOG.assertTrue(setValueFrom != null, "Cannot get TrackListener.setValueFrom method");
  }

  @Override
  protected TrackListener createTrackListener() {
    return new TrackListener() {
      @Override
      public void mousePressed(MouseEvent e) {
        if (scrollbar.isEnabled()
            && SwingUtilities.isLeftMouseButton(e)
            && !getThumbBounds().contains(e.getPoint())
            && NSScrollerHelper.getClickBehavior() == NSScrollerHelper.ClickBehavior.JumpToSpot
            && setValueFrom != null) {

          switch (scrollbar.getOrientation()) {
            case Adjustable.VERTICAL:
              offset = getThumbBounds().height / 2;
              break;
            case Adjustable.HORIZONTAL:
              offset = getThumbBounds().width / 2;
              break;
          }
          isDragging = true;
          try {
            setValueFrom.invoke(this, e);
          }
          catch (Exception ex) {
            LOG.error(ex);
          }

          return;
        }

        super.mousePressed(e);
      }
    };
  }

  private void updateGlobalListeners(boolean forceRemove) {
    boolean shouldAdd = scrollbar.isDisplayable();

    if (myGlobalListenersAdded && (!shouldAdd || forceRemove)) {
      Toolkit.getDefaultToolkit().removeAWTEventListener(myAWTMouseListener);
      NSScrollerHelper.removeScrollbarStyleListener(myNSScrollerListener);
      myGlobalListenersAdded = false;
    }

    if (!myGlobalListenersAdded && shouldAdd && !forceRemove) {
      Toolkit.getDefaultToolkit().addAWTEventListener(myAWTMouseListener, AWTEvent.MOUSE_MOTION_EVENT_MASK);
      NSScrollerHelper.addScrollbarStyleListener(myNSScrollerListener);
      myGlobalListenersAdded = true;
    }
  }

  private void initRegularThumbAnimator() {
    myThumbFadeAnimator = new Animator("Regular scrollbar thumb animator", FRAMES_COUNT, FRAMES_COUNT * 50, false) {
      @Override
      public void paintNow(int frame, int totalFrames, int cycle) {
        myThumbFadeColorShift = getAnimationColorShift();
        if (frame > DELAY_FRAMES) {
          myThumbFadeColorShift *= 1 - (double)(frame - DELAY_FRAMES) / (double)(totalFrames - DELAY_FRAMES);
        }

        if (scrollbar != null) {
          scrollbar.repaint(((ButtonlessScrollBarUI)scrollbar.getUI()).getThumbBounds());
        }
      }
    };
  }

  private void initMacScrollbarAnimators() {
    myMouseOverScrollbarExpandAnimator = new Animator("Mac scrollbar mouse over animator", 10, 200, false) {
      @Override
      protected void paintCycleEnd() {
        myMouseOverScrollbarExpandLevel = 1;
        if (scrollbar != null) scrollbar.repaint();
      }

      @Override
      public void paintNow(int frame, int totalFrames, int cycle) {
        int delay = totalFrames / 2;
        int frameAfterDelay = frame - delay;

        if (frameAfterDelay > 0) {
          myMouseOverScrollbarExpandLevel = frameAfterDelay / (float)(totalFrames - delay);
          if (scrollbar != null) scrollbar.repaint();
        }
      }
    };

    myMacScrollbarFadeTimer = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
    myMacScrollbarFadeAnimator = new Animator("Mac scrollbar fade animator", 30, 300, false) {
      @Override
      protected void paintCycleEnd() {
        myMacScrollbarHidden = true;
        myMouseOverScrollbar = false;
        myMouseOverScrollbarExpandLevel = 0;

        if (scrollbar != null) scrollbar.repaint();
      }

      @Override
      public void paintNow(int frame, int totalFrames, int cycle) {
        myMacScrollbarFadeLevel = frame / (float)totalFrames;
        if (scrollbar != null) scrollbar.repaint();
      }
    };
  }

  private boolean isOverThumb(Point p) {
    final Rectangle bounds = getThumbBounds();
    return bounds != null && bounds.contains(p);
  }

  @Override
  public Rectangle getThumbBounds() {
    return super.getThumbBounds();
  }

  @Override
  protected void uninstallListeners() {
    if (scrollTimer != null) {
      // it is already called otherwise
      super.uninstallListeners();
    }

    scrollbar.removeAdjustmentListener(myAdjustmentListener);
    scrollbar.removeMouseListener(myMouseListener);
    scrollbar.removeMouseMotionListener(myMouseMotionListener);

    scrollbar.removeHierarchyListener(myHierarchyListener);
    updateGlobalListeners(true);

    Disposer.dispose(myThumbFadeAnimator);
    Disposer.dispose(myMouseOverScrollbarExpandAnimator);
    Disposer.dispose(myMacScrollbarFadeTimer);
    Disposer.dispose(myMacScrollbarFadeAnimator);
  }

  @Override
  protected Dimension getMinimumThumbSize() {
    final int thickness = getThickness();
    return isVertical() ? new Dimension(thickness, thickness * 2) : new Dimension(thickness * 2, thickness);
  }

  protected int getThickness() {
    return isMacOverlayScrollbar() ? JBUI.scale(15) : JBUI.scale(13);
  }

  @Override
  public Dimension getMaximumSize(JComponent c) {
    int thickness = getThickness();
    return new Dimension(thickness, thickness);
  }

  @Override
  public Dimension getMinimumSize(JComponent c) {
    return getMaximumSize(c);
  }

  @Override
  public Dimension getPreferredSize(JComponent c) {
    return getMaximumSize(c);
  }

  @Override
  public boolean contains(JComponent c, int x, int y) {
    if (isMacOverlayScrollbar() && !alwaysShowTrack() && !alwaysPaintThumb() && myMacScrollbarHidden) return false;
    return super.contains(c, x, y);
  }

  @Override
  protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
    if (alwaysShowTrack() || myMouseOverScrollbarExpandLevel > 0) {
      doPaintTrack(g, c, trackBounds);
    }
  }

  protected void doPaintTrack(Graphics g, JComponent c, Rectangle bounds) {
    if (isMacOverlayScrollbar() && !alwaysShowTrack()) {
      bounds = getMacScrollBarBounds(bounds, false);
      boolean vertical = isVertical();

      final Paint paint;
      final Color start = adjustColor(UIUtil.getSlightlyDarkerColor(getTrackBackground()));
      final Color end = adjustColor(getTrackBackground().brighter());

      if (vertical) {
        paint = UIUtil.getGradientPaint(bounds.x + 1, bounds.y, start, bounds.width + 1, bounds.y, end);
      }
      else {
        paint = UIUtil.getGradientPaint(bounds.x, bounds.y + 1, start, bounds.x, bounds.height + 1, end);
      }

      Graphics2D g2d = (Graphics2D)g;
      g2d.setPaint(paint);
      g2d.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);

      g.setColor(adjustColor(start.darker()));
    }
    else {
      g.setColor(getTrackBackground());
      g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);

      g.setColor(getTrackBorderColor());
    }

    if (isVertical()) {
      g.drawLine(bounds.x, bounds.y, bounds.x, bounds.y + bounds.height);
    }
    else {
      g.drawLine(bounds.x, bounds.y, bounds.x + bounds.width, bounds.y);
    }

    if (myRepaintCallback != null) {
      myRepaintCallback.call(g);
    }
  }

  @Override
  protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
    doPaintThumb(g, thumbBounds);
  }

  private void doPaintThumb(Graphics g, Rectangle thumbBounds) {
    if (thumbBounds.isEmpty() || !scrollbar.isEnabled()) {
      return;
    }

    if (isMacOverlayScrollbar()) {
      paintMacThumb(g, thumbBounds);
    }
    else {
      g.translate(thumbBounds.x, thumbBounds.y);
      paintMaxiThumb((Graphics2D)g, thumbBounds);
      g.translate(-thumbBounds.x, -thumbBounds.y);
    }
  }

  private void paintMacThumb(Graphics g, Rectangle thumbBounds) {
    if (isMacScrollbarHiddenAndXcodeLikeScrollbar()) return;

    thumbBounds = getMacScrollBarBounds(thumbBounds, true);
    Graphics2D g2d = (Graphics2D)g;
    RenderingHints oldHints = g2d.getRenderingHints();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    JBColor baseColor = new JBColor(new NotNullProducer<Color>() {
      @NotNull
      @Override
      public Color produce() {
        return !isDark() ? Gray._0 : Gray._128;
      }
    });

    int arc = Math.min(thumbBounds.width, thumbBounds.height);

    if (alwaysPaintThumb()) {
      //noinspection UseJBColor
      g2d.setColor(new Color(baseColor.getRed(), baseColor.getGreen(), baseColor.getBlue(), isDark() ? 100 : 40));
      g2d.fillRoundRect(thumbBounds.x, thumbBounds.y, thumbBounds.width, thumbBounds.height, arc, arc);
      //g2d.drawRoundRect(thumbBounds.x, thumbBounds.y, thumbBounds.width, thumbBounds.height, arc, arc);
    }

    if (!myMacScrollbarHidden) {
      g2d.setColor(adjustColor(baseColor));
      g2d.fillRoundRect(thumbBounds.x, thumbBounds.y, thumbBounds.width, thumbBounds.height, arc, arc);
    }
    g2d.setRenderingHints(oldHints);
  }

  protected boolean isDark() {
    return UIUtil.isUnderDarcula();
  }

  protected boolean alwaysPaintThumb() {
    return alwaysShowTrack();
  }

  protected Rectangle getMacScrollBarBounds(Rectangle baseBounds, boolean thumb) {
    boolean vertical = isVertical();

    int borderSize = 2;
    int baseSize = vertical ? baseBounds.width : baseBounds.height;

    int maxSize = baseSize - (thumb ? borderSize * 2 : 0);
    int minSize = Math.min(baseSize / 2, 7) + (thumb ? 0 : borderSize * 2);

    int currentSize = minSize + (int)(myMouseOverScrollbarExpandLevel * (maxSize - minSize));

    int currentBolderSize = thumb ? borderSize : 0;

    int x = baseBounds.x;
    int y = baseBounds.y;
    int width;
    int height;

    if (vertical) {
      x += baseBounds.width - currentSize - currentBolderSize;
      y += currentBolderSize;
      width = currentSize;
      height = baseBounds.height - currentBolderSize * 2;
    }
    else {
      x += currentBolderSize;
      y += baseBounds.height - currentSize - currentBolderSize;
      width = baseBounds.width - currentBolderSize * 2;
      height = currentSize;
    }

    width = Math.max(width, currentSize);
    height = Math.max(height, currentSize);

    return new Rectangle(x, y, width, height);
  }

  protected void paintMaxiThumb(Graphics2D g, Rectangle thumbBounds) {
    final boolean vertical = isVertical();
    int hGap = vertical ? 2 : 1;
    int vGap = vertical ? 1 : 2;

    int w = thumbBounds.width - hGap * 2;
    int h = thumbBounds.height - vGap * 2;

    // leave one pixel between thumb and right or bottom edge
    if (vertical) {
      h -= 1;
    }
    else {
      w -= 1;
    }

    final Paint paint;
    final Color start = adjustColor(getGradientLightColor());
    final Color end = adjustColor(getGradientDarkColor());

    if (vertical) {
      paint = UIUtil.getGradientPaint(1, 0, start, w + 1, 0, end);
    }
    else {
      paint = UIUtil.getGradientPaint(0, 1, start, 0, h + 1, end);
    }

    g.setPaint(paint);
    g.fillRect(hGap + 1, vGap + 1, w - 1, h - 1);

    final Stroke stroke = g.getStroke();
    g.setStroke(BORDER_STROKE);
    g.setColor(getGradientThumbBorderColor());
    final int R = JBUI.scale(3);
    g.drawRoundRect(hGap, vGap, w, h, R, R);
    g.setStroke(stroke);
  }

  @Override
  public boolean getSupportsAbsolutePositioning() {
    return true;
  }

  protected Color adjustColor(Color c) {
    if (isMacOverlayScrollbar()) {
      int alpha = (int)((120 + myMouseOverScrollbarExpandLevel * 20) * (1 - myMacScrollbarFadeLevel));
      //noinspection UseJBColor
      return new Color(c.getRed(), c.getGreen(), c.getBlue(), alpha);
    }
    else {
      if (myThumbFadeColorShift == 0) return c;
      final int sign = isDark() ? -1 : 1;
      return Gray.get(Math.max(0, Math.min(255, c.getRed() - sign * myThumbFadeColorShift)));
    }
  }

  private boolean isVertical() {
    return scrollbar.getOrientation() == Adjustable.VERTICAL;
  }

  @Override
  protected JButton createIncreaseButton(int orientation) {
    return new EmptyButton();
  }

  @Override
  protected JButton createDecreaseButton(int orientation) {
    return new EmptyButton();
  }

  protected boolean isMacScrollbarHiddenAndXcodeLikeScrollbar() {
    return myMacScrollbarHidden && isMacOverlayScrollbarSupported() && xcodeLikeScrollbar();
  }

  protected static boolean xcodeLikeScrollbar() {
    return Registry.is("editor.xcode.like.scrollbar");
  }

  public void registerRepaintCallback(ScrollbarRepaintCallback callback) {
    myRepaintCallback = callback;
  }

  private static class EmptyButton extends JButton {
    private EmptyButton() {
      setFocusable(false);
      setRequestFocusEnabled(false);
    }

    @Override
    public Dimension getMaximumSize() {
      return JBUI.emptySize();
    }

    @Override
    public Dimension getPreferredSize() {
      return getMaximumSize();
    }

    @Override
    public Dimension getMinimumSize() {
      return getMaximumSize();
    }
  }

  public interface ScrollbarRepaintCallback {
    void call(Graphics g);
  }
}

redpajama_set_name: RedPajamaGithub


text:
Alburnus belvica. the Prespa bleak, is a species of ray-finned fish in the family Cyprinidae, that can be found in Lake Prespa and the nearby Small Prespa Lake in the Balkans. In North Macedonia it is known as  (). It is threatened by habitat loss. This species makes up the bulk of the diet of the Dalmatian pelican (Pelecanus crispus) population breeding at the Small Prespa Lake.

Alburnus belvica is a short-lived species which is found in freshwater lakes and slow-flowing water courses on low-lying plains. The adults' diet consists of invertebrates and plantas well as plankton. They form large schools when foraging.  and they spawn in the tributaries and along shores of lakes on pebbles and gravel in surf zone. If they are spawning in tributaries they move up to the spawning sites during the night. Spawning occurs in May and June and the adults are pelagic except when spawning.

Alburnus belvica is distinctive from its congeners in its possession of a higher number of gill rakers, 29-32 compared to a maximum of 26 in most Alburnus species and also By the larger number of scales in the lateral line, 52-57 compared to 54. In Lake Prespa this species can attain a total length of .

The populations of A. belvica are increasing in both Lake Prespa and Small Lake Prespa despite the threats of water pollution, overfishing, and water extraction. It is also potentially threatened by competition from invasive species of fishes such as Lepomis gibbosus and Pseudorasbora parva. This increase may be due to eutrophication of the lakes' water causing an increase on the amount of plankton, on which these fish feed, combined with the short generation time of this species.

References

Fauna Europaea: Alburnus belvica Karaman 1924. Retrieved 24 June 2012

belvica
Fish described in 1924
Taxa named by Stanko Karaman
Taxonomy articles created by Polbot

redpajama_set_name: RedPajamaWikipedia


There is good reason for collectors to favor gilt Rolex in some circumstances. There is also no need to explain the appeal of the Datejust design. When you combine these two descriptors and apply them to a 6605 that has clearly seen some life, the result is simply incredible.
This piece comes from Dutch seller Bulang & Sons. The dial is simply incredible in its marbled tropical appearance. The fonts, markers, and hands, all appear perfect. The small amount of wear on the bezel and crystal are enough to indicate that they are likely original. The case may have been polished here, it's hard to tell from the pictures. The movement shows no signs of inappropriate wear. Shown on a Jubilee bracelet, this example measures up to every bit of the ionic 6605 reputation.


Welcome to Chain.io's blog, where we share tips and tricks on logistics, supply chain, and systems integration. Subscribe below to keep up to date.
Mercado, a SaaS supply chain platform helping importers to connect with their global trading partners, has announced the selection of Chain.io as their preferred integration partner. The addition of Chain.io's leading integration technology to the platform will enable customers to extract data from their existing systems, manage their supply chain orchestration, and exchange data between all parties through the Mercado web portal.


Lene Mayer-Skumanz with illustrations by Italian artist Salvatore Sciascia (Bolzano / Italy) is a present to children, young people and adults all over the world.
To this date we offer translations in 45 languages.
City Library of Lienz and a community of men and women from different countries, who mostly live in Eastern Tyrol, called "Weltbüro Lienz".
It was a literary project during the first presidiancy of the European Union by Austria.
In this 20 years, many of the translations were a gift from former refugees, who stayed in our town Lienz. Our hope is, that the story provides an impulse for bridging the differences between cultures and religions.
We would be overjoyed to hear about your experiences with the story. Please help us share it.


text:
Our music club offers pupils the opportunity to express themselves in different ways, from beating a rhythm on the drum kit, to increasing their skills on the keyboard. We also have microphones available for our budding 'Pop stars' to use. Each term the pupils showcase what they have learnt during one of the schools assemblies.
"I liked the drums and singing with the microphones". Chisom
"I liked learning Feliz Navidad and playing different instruments". Cole
"I liked playing the drums and keyboard". Toure

redpajama_set_name: RedPajamaCommonCrawl


text:
Home » The Best of Technology » How To Waste $973.18 in Japan…
How To Waste $973.18 in Japan…
May 17, 2018 AustinEvans The Best of Technology 0
– Hey guys, this is Austin, and welcome to a very special edition of Mystery Tech This time, entirely focused on items that Ken wasted our money on straight from Japan
Kirby headphones Okay, I immediately appreciate the old school pixel art style Wait, it's 5000 yen? How much is 5000 yen? – [Assistant] 5000 Japanese yen equals 45 United States dollars and 62 cents – Okay, that's not so bad So if you guys didn't know, Ken goes to Japan every once in a while, and by every once in a while, I mean like every weekend
Wow, oh, it's actually like hard plastic They're oddly hollow I feel like I hear like, you know like when you put your ear up to like a seashell or something That's kinda what it sounds like to be wearing these headphones, not great Okay look, they're cool
For 45 bucks, I don't know, but if you're really into Kirby, just don't use them as headphones Oh, more headphones The Xperia Ear Duo, wireless open ear stereo headsets Music and communication while listening to the surrounding sound, enjoy closed, the ears your own tube design Man, nothing says weird tech from Japan like Sony
So I guess the idea here is that these are supposed to be kinda like AirPods, so it looks like they're actually going to be completely independent and wireless How much is 30,000 yen? – [Assistant] 30,000 Japanese yen equals 273 United States dollars and 26 cents – Sometimes I regret giving Ken a company credit card Generally speaking, when it comes to tech, it's not actually that weird when you go to different countries Generally, pretty much everyone has the same kind of stuff, but I feel like Japan is always the exception
There's always this sort of extra weird stuff there That's a, wow, hold on a second That's a really bizarre setup So this is the actual headphone, but I guess that's the sort of the opening for your ear Oh so this actually isn't out in the US yet
Oh, interesting, so this is an exclusive, some would say, straight from Japan Wait here, I should figure out how to get them paired first Oh, you need an app So searching for devices, make sure it's turned on How do you turn it on though? Oh, it's magnetic
Okay, that actually makes it kinda cool One of the things I didn't like about the Pixel Buds was that it was really kinda fiddly to be able to rewind the cable around Oh, oh yeah, okay It's a little weird to get used to on how you're actually supposed to do that, but that feels pretty decent to me So I'm listening to music right now, and it sounds decent
It's not really particularly loud or rich sound, but what's interesting is that it's really not blocking any of my hearing so I can still hear everything just fine Ken, say something Yeah, I can hear you completely fine So it's almost like kinda having some background music It's not like listening to proper headphones
Sound quality is not going to be amazing They sound okay But it's not really for listening I can still hear everything around me right now This is a really interesting idea, but I think it's not really correct to call them headphones
It's not really necessarily something like an AirPods competitor What this really is is a way of getting an assistant without actually being able to block out the rest of the world Niche Phone, whoa Whoa, that's actually really cool So it looks like it charges with some Pogo pins on the back, but it does accept a nano SIM, as well as it has 3G tethering
So if you want to use this in addition to, say, an actual smartphone, you can Whoa, that's it? That's the whole phone, are you serious? Okay, so, I saw the picture, and I thought it was going to be bigger than this That's the whole phone right there Okay How much was this? So 10,000 yen? – [Assistant] 10,000 Japanese yen equals 91 United States dollars and four cents
– Much more reasonable Okay, we're up You have contacts, messages, calls, music, voice memos, Bluetooth, alarm, and settings Let's do settings So I can see the tiny little text here
I can also scroll down to type the message Alright, what's your number? I mean, I know that there's weird tech out there, but the idea of having a phone that's this small, it's cool, and I think for some people, if you want a backup phone, it does do hotspot In theory, you can do stuff with Bluetooth, I guess, if you load music in via this micro USB adapter, but man, this is, I'm actually impressed I still don't understand how it runs Android though That makes zero sense to me
Why are you handing me a Switch? – [Ken] I got some Switch accessories – Really? Japanese, okay, Japanese Switch accessories, got it A felt pouch for the Switch? It's mildly Japanese and weird, but besides that, actually it feels kinda nice So I drop the Switch inside and close it No one can tell I'm carrying a Switch
Where are you going with this? Oh no, oh no (chuckles) Oh no I'm getting flashbacks to the Connect-a-Desk, or the Portadesk, or whatever that thing was It's just a bendy thing (laughs) I mean, you know, everyone's like, the Switch is so heavy, it's so giant, it's so difficult to use in your hands because it is unwieldy and ridiculous
So this is the obviously the way to play And you know, I actually have to say, it's not crazy I feel like this is just kind of, oh god, what am I doing? What is this? A traditional Japanese fan? But why does it say USB, what? (laughs) This is it? This is the fan? This is all there is to it? Alright, so after a slightly long time of building this stupid fan, let's actually plug it in, see what it does Okay Okay, I put the goopy thing on the bottom
(laughs) It's like slime, are you serious? Well, I mean, when you're vigorously fanning yourself, maybe you need a little bit of extra sticky action I'm gonna put this down and move on because this is getting really weird Yo, yo, you did not You did not, this is not Is this a? Dude, dude
Dude, look at that That is so legit It's still in the original packaging Even the foam doesn't look that old So if you guys are not familiar, this is an original Nintendo Famicom
And oh, look at the games you got Mother, Excitebike, Donkey Kong, Rockman, not Megaman, Ice Climber, and Super Mario Bros Dude, that is, uh, uh, alright I'm excited now That is not what I expected to get today I can't believe you got one in the box
This looks like pristine packaging I almost don't want to open it It's too nice So if you guys are not familiar, this is essentially the Japanese version of the NES, so they actually did it, it's slightly different looking But as far as the actual system itself, it shouldn't be any different at all
Actually, well, I take that back There were some slight differences as far as the controller, right? Because didn't the controller have a microphone on it? So image quality, not the best, due to our terrible adapter situation but whatever Oh, oh, oh no you don't, no you don't Oh, this is bad There we go, alright
Mario, a game that I really should know how to play better than I actually do Oh, come on, come on, come on, come on No, no you don't, no you don't Get over here, get over here, get over here Come on, come on, come on, come on
Oh yeah That was dangerous Oh wow, that was a terrible jump But the Famicom is real Now yes, is it basically the same thing as an NES? Pretty much
Is it way cooler though? Absolutely And if you thought this was weird, definitely be sure to go check out the last episode of Mystery Tech, where we checked out some of the most bizarre cheap stuff we could find on Amazon Anyway guys, thank you so much for watching, and I will catch you in the next one
Japan...
Can You Game on a Mac? (2018)
5 Reasons Why The Wii U Failed


text:
Q: Permissions for Amazon S3 I am fairly new to Amazon S3.
I am trying to give permission to the files in a folder and subfolder that I have uploaded to S3 from my local system.
Here is the code:
static string sourcepath = @"D:\SVN\Tis_REL_4_4_1003_2\Media\Includes";
        static string destinationpath = @"Media\Includes".ToLower();
        public static void Main(string[] args)
        {
            using (client = GetS3Client())
            {
                //var sInfo = new DirectoryInfo(sourcepath);
                //var filenew = Directory.GetFiles(sourcepath);
                foreach(var file in Directory.GetFiles(sourcepath))
                {
                    File.Move(file, file.ToLowerInvariant());
                }
                var fInfo = new S3DirectoryInfo(client, awsBucketName, destinationpath);
                fInfo.CopyFromLocal(sourcepath);
            }
        }

Now when I call any of the files inside these folder I get access denied.
Is there a way to give permissions without using S3 browser since I am getting an error when I try to change the permissions.
Also I am not using putobjectrequest to put the objects in the bucket so CannedACL may also not be an answer.

redpajama_set_name: RedPajamaStackExchange


The contributions to this volume were written by historians, legal historians and art historians, each using his or her own methods and sources, but all concentrating on topics from the broad subject of historical legal iconography. How have the concepts of law and justice been represented in (public) art from the Late Middle Ages onwards? Justices and rulers had their courtrooms, but also churches, decorated with inspiring images. At first, the religious influence was enormous, but starting with the Early Modern Era, new symbols and allegories began appearing. Throughout history, art has been used to legitimise the act of judging, but artists have also satirised the law and the lawyers; architects and artisans have engaged in juridical and judicial projects and, in some criminal cases, convicts have even been sentenced to produce works of art. The book illustrates and contextualises the various interactions between law and justice on the one hand, and their artistic representations in paintings, statues, drawings, tapestries, prints and books on the other.
Changes in Late-Medieval Artistic Representations of Hell in the Last Judgment in North-Central Italy, ca. 1300–1400: A Visual Trick?


text:
What Is The Song In Nissan's Super Bowl 2022 Commercial?
Nissan/YouTube
By Kathryn Olvera/Feb. 12, 2022 10:34 am EST
The Super Bowl is not to be taken lightly. Every year, millions of fans attend events and viewing parties to find out which team is the best of the season. No doubt about it — this is the biggest game of the year and many people's favorite part of February. But it isn't just the game that will keep people chatting online and in person for days to come. No, there's so much more to this glamorous sporting event — the ads.
Super Bowl advertisements are almost in a league of their own when it comes to judging the best of the best. Creative teams pull out every trick that's been hiding up their sleeves to create the boldest and most memorable advertisement possible to keep audiences engaged and entertained during commercial breaks. This year, one of those commercials is a star-studded, action-packed thrill ride starring Eugene Levy, and the soundtrack to the ad might surprise you.
Rick James provides the background music to Eugene Levy's thrill ride
In Nissan's 2022 Super Bowl commercial, Eugene Levy takes the ride of his life when he gets in the driver's seat of the 2023 Nissan Z. Levy encounters other Hollywood stars on his joyride, zipping past Brie Larson, Catherine O'Hara, Danai Gurira, and Dave Bautista. All the while, the smooth sound of Rick James' "Give It to Me Baby" plays in the background.
"Give It to Me Baby" was featured on Rick James' fifth album, "Street Songs," released in 1981 (via Spotify). The song spent a total of 14 weeks on the Billboard Hot 100, peaking at No. 40. Over the years, "Give It to Me Baby" has been featured in several movies, including "She's All That" in 1999 and "Bride Wars" in 2009. There is even a choreographed dance scene to the song on the Netflix series "Living with Yourself." "Give It to Me Baby" and the star-studded commercial it's featured in will be heard by millions this Super Bowl Sunday.


text:
DEFENCE INDIGENISATION: CORRECTING ANOMALIES
by Vijay Singh March 29, 2016
written by Vijay Singh March 29, 2016
We probably had a false sense of illusion that the Public Sector Enterprises will be the sole repository of India's growth story post independence till we got a rude jolt in 1990's and opened up to privatisation in a big way. While the private players since then have become global leaders, the public sector continues to remain a poor cousin by a considerable margin. If we analyse certain specific sectors such as IT, manufacturing, aviation, telecommunication and banking – just imagine where the country would stand in the absence of private players and how their presence in the market has benefitted the end consumers and the Indian economy as a whole.
By the same yardstick, to have left out the defence sector from the ambit of privatisation in 'real terms' is not only perplexing but defies logic. 'Real terms' does not apply to cosmetic changes made to the defence sector post January 2002, wherein 100 percent private sector participation was allowed, but with a retrograde ruling that the first preference to pick and choose went to the public sector. Every single policy that was framed, be it FDI, Offsets, "Buy", "Buy & Make", Taxes, incentives for R&D, and other policy frame works that flowed out from the successive versions of the 'Defence Procurement Procedure', were heavily biased towards the public sector. The private sector always saw the carrot dangling, but as its hands were tied, it made negligible investments.
Taking a cue from Leroy Hood, "If you just focus on the smallest details, you never get the big picture right", let's analyse some of the top arms exporters in the world to see what drives their defence markets. Barring Russia and China, where all markets are state controlled, the Indian corollary follows the well defined defence markets in America, Germany, France, Italy, UK and therein the top defence manufacturers such as Lockheed Martin, Boeing, BAE, General Dynamics, Raytheon, Finmeccanica, Thales, Airbus, Rolls Royce etc. If you study the history of these private firms, it is glaringly clear that they have been built through the sheer dint of political, diplomatic and financial backing provided by their respective countries. In 2014, the global sale of arms by Boeing and Lockheed Martin exceeded USD 65 billion which surpasses India's defence budget allocation in any financial year till date. So, will we continue to remain the world's largest importer of arms in the coming decades? No! The situation is fortunately changing
2015 has indeed been India's watershed year in defence indigenisation – and the private sector juggernaut is finally set to roll. The present government deserves credit for not just understanding the dynamics of this game, but resolutely implementing changes that were so desperately needed. Rather than merely focusing on the nittygritty of improving the plethora of ordnance factories, the DPSUs and our R&D establishments, it has unleashed the humongous potential of the private sector, which will undoubtedly transform the landscape of defence indigenisation and ensure that the public sector either performs or becomes a laggard at it's own peril. Those who understand the nuances of defence production and defence procurement will appreciate this as a masterstroke in transforming the defence sector, as finally, the intent of the government has transformed into concrete policies towards the private sector. The concerns of the private sector have been addressed with overwhelming urgency and a clear level playing field with the public sector has now been established. DPP 2016 is likely to bring in some major changes which will benefit the private players as under:
A new category called the 'IDDM' or 'Indigenously Designed, Developed and Manufactured' platforms is likely being introduced which will get top priority and will be first to be chosen for tenders. With a level playing field for both DPSUs and the private industry, it is now no longer feasible to simply import components from abroad, assemble in India and term it as 'Made in India'. Neither is it possible for the public sector to take captive orders with impunity and as an organisational right. Also, under the new DPP, systemic changes have been proposed to the 'Make' category so as to kick start this stalled process. "Only firms with majority stake and controlled by resident Indians will come under 'Make' categories.
The 'Make' procedure is proposed to be divided in three sub- categories — Make I — which will involve 90 per cent funding of development cost by the government, Make II — in which case, the government will refund 100 per cent of development cost in case Request for Proposal (RFP) is not issued within two years from the time of development of prototype and Make III — which will be reserved for small and medium scale enterprises for projects worth less than Rs 3 crore. These are crucial changes as financial support provided by the government, coupled with accountability of the suppliers to deliver, will undoubtedly lead to concrete progress on the ground by the private sector
The L1 policy of selecting lowest bidder is being modified. 10 percent extra weightage will be given if a system displays better qualities than required. This, along with another new proposed change that 'bids can be accepted even if there is only one supplier' will help the defence establishment to focus on quality vendors, collaborate with serious partners and deter suppliers indulging in retrograde practices to remain afloat.
Strategic Projects have major ramifications on defence preparedness and have a direct correlation with both time and money. With private players joining the defence bandwagon in a big way, it will be more feasible to select vendors on their intrinsic worth rather than their face value. The new DPP is likely to carry a clause wherein "Projects with development costs equal to or exceeding Rs 5,000 crore, to have a minimum 'net worth' of 5 per cent of the development cost, subject to maximum of Rs 1,000 crore" and "Companies require to be registered for five years, three years in case of MSMEs and have a minimum credit rating of B++, from a recognised rating agency".
In a major boost to R&D by private players, DPP 2016 is likely to allow government to fund up to 90 per cent of development costs to private companies of which 20 per cent will be given in advance and in 24 months the entity will be given a tender. If the tender is not given, the private company will get a refund of its expenses. Another addition is the funding of Rs 10 crore for R&D to medium-scale industry which will boost component level and small scale innovations.
In continuation to the government's effort to reduce timelines, enhance accountability and address concerns of the private players, certain duplicate clauses which resulted in time overruns in defence procurements have been eliminated. Also, the DPP sets up an empowered committee to solve disputes or unforeseen issues. Till now, disputes went to DAC. The validity of Acceptance of Necessity (AoN) has also been brought down to six months from earlier one year.
The Race Begins
To quantify this statement, huge investments from local giants such as Reliance, Tata, L&T, Bharat Forge and Mahindra have already been committed as there is a business opportunity worth INR 250 billion in the coming 5-7 years. Joint ventures with Boeing for aero structures of Apache attack helicopters and components of Chinook heavy lift helicopters, BAE systems offer to make ultra light guns in India in collaboration with an Indian private firm, L&T outgunning global rivals to bag 5000 crore contract for mobile howitzers, Bharat Forge has already invested more than Rs 100 crore to develop indigenous self propelled howitzers, Tata,General Electric and Bharat Forge have entered into an alliance to bag an USD 11 billion deal pertaining to the Indian Army's Future Infantry Combat Vehicle and many other such proposals are already in the pipeline by the Indian private sector.
Let the Best Horse Win
Keeping our National Interest in mind, a level playing field has been created between the public and private sector in defence production. Our arm imports are a staggering 40 times the size of its exports. As per a written reply in Lok Sabha in November 2014, our import bill for capital acquisitions in last 5 years was USD 16.72 billion, which in Rupee terms is more than 1 lakh crore. In the previous three years, our exports were a mere Rs 1,644 crores. We can not afford to import upto 70 percent of our defence requirements, be the largest importer of arms in the last few decades and yet be a formidable military power. Revival of the private sector in defence production is a quantum step in the right direction. The government has made its intentions aptly clear- 'Tax payers money is not meant for laggards surviving under protectionist policies. Equal Opportunities – Equal Competition- May the Best Horse Win'.
The author is a Senior Fellow at CLAWS. Views expressed are personal.
ATTACK HELICOPTERS: WHY THE ARMY NEEDS THEM
DPP 2016: Implications for Defence Offsets


Discerning drivers will appreciate the 2014 Chevrolet Equinox. Under the hood you'll find a 4 cylinder engine with more than 170 horsepower, and for added security, dynamic Stability Control supplements the drivetrain. All of the premium features expected of a Chevrolet are offered, including: 1-touch window functionality, a tachometer, front bucket seats, air conditioning, power door mirrors, power windows, and remote keyless entry. Audio features include a CD player with MP3 capability, steering wheel mounted audio controls, and 6 speakers, enhancing the audio experience throughout the interior. Chevrolet also prioritized safety and security with features such as: head curtain airbags, front side impact airbags, traction control, brake assist, a security system, onStar, and 4 wheel disc brakes with ABS. Sophisticated all wheel drive assures superb handling in any weather condition. A Carfax history report provides you peace of mind by detailing information related to past owners and service records. Our aim is to provide our customers with the best prices and service at all times. Please don't hesitate to give us a call.


text:
Category Archives: ORL
ORL Day Nine: Kleinkastell Meisel to Kastell Saalburg
Posted on June 24, 2015 by Mike Bishop
The weather forecast did not look too promising for our last day walking, the culmination of our trip as we aimed to reach our finishing point at Saalburg. We returned to Kleinkastell Meisel, finding it hiding within its copse, and continued our journey eastwards. The Limesweg, after a minor zigzag, heads up to Glashütten, where an explosion of information is contained within the modestly named Limespavilion.
On we go, along the valley that once housed a thriving glass-making industry in the 15th and 16th centuries, and then up, up, up to Rotes Kreuz, a pass through the Taunus for a medieval (and probably earlier) road through the Limes. Soon after we came across the remains of Kastell Feldberg, beautifully presented, were it not for the small tractor cutting (perhaps massacring would be a better word) the grass in the pouring rain. With sundry internal buildings, including an apsidal principia sacellum, and four single-portal gateways, as well as an external bath-house, it is well worth a visit. We carried on climbing gently, before descending to Sandplacken for lunch; a fine stretch of bank and ditch can be seen here, as can WT 3/54 perched precariously on the roadside verge. Remarkably, that busy old fool, the unruly sun, had begun to put in occasional appearances.
After lunch we headed off once more, taking in the remains of a rather hirsute Kleinkastell Altes Jagdhaus (which, unsurprisingly, had the remains of an old hunting lodge inside it) and a contrastingly manicured Kleinkastell Heidenstock before we began a long, 3km descent to Saalburg. The sun, thankfully, was out as we arrived at the end of our 105-mile odyssey.
Saalburg itself looked better than when I last saw it, freed of the renovators' scaffolding and decidedly spruced up. The only down side was that construction work in the fabrica (oh, the irony!) meant it was not accessible. The intermittent rain showed off the eavesdrips to advantage, whilst the principia cross-hall was, as ever, breathtaking. We ate in the taberna before taking our leave of Saalburg and the Obergermanische-Raetische Limes … for the time being.
Posted in ORL
ORL Day Eight: Kastell Zugmantel to Kleinkastell Meisel
The fort at Zugmantel, so important in Roman frontier studies in so many ways, is frankly a mess. Caged behind wire mesh, entering its compound is not exactly a path to enlightenment. The north and west ramparts can be made out, as can the location of the north gate, but the rest is so overgrown (it is, of course, in woodland) and riddled with unbackfilled excavation trenches that making sense of it is not on the cards.
It is easier to understand the amphitheatre, which is the only visible part of the substantial civil settlement, and which lies half way between the fort and the Limes, where the reconstructed tower and palisade may be seen.
After admiring Zugmantel, we set out along the line of the frontier (the bank survives up to 2m high along here), aiming for a lunchtime stop at Dasbach. We followed the frontier above the village of Eschenhahn, but whilst the Limes was free to plough straight on, we had to zigzag downhill, passing through Eschenhahn, before climbing up out of the valley of the Auroffer Bach, and then descending into the valley of the Worsbach, crossing under an Autobahn (the E35) and a railway and over another railway. We rejoined the line of the frontier just before yet another reconstructed tower (WT 3/26) just south of Dasbach.
Following lunch, we started climbing again, but this time we took advantage of a frontier BOGOF deal, because the Limes was split between an older (hinterer) and newer (vorderer) course, both of which are upstanding.
The two frontiers reunited before WT 3/29 and carried on in a straight line to near Kastell Alteburg, where an ancient open-market continues to be held. As the Limes strode directly over the Totenberg, we were forced to take a much less direct route until we at last rejoined it at the site of WT 3/36. Then we had a more-or-less straight run uphill to Kleinkastell Meisel.
ORL Day Seven: Kleinkastell Kemel to Kastell Zugmantel
Low cloud hid the giant wind turbines as we stepped out of Kemel, blades roaring softly through the water vapour. There is nothing to see of the fortlet, but a timber tower lurks behind the village fire station.
Striding across the fields, we weaved around the bases of the turbines, and skirted the edge of the recycling centre. We soon arrived at the Father Ted watchtower ('…this watchtower is small…') before descending past the Villa Lilly, a health resort and turning off towards Lindschied, and the first of the major changes to the Limesweg this year (I am only just beginning to appreciate how often this path changes course!). It now avoids going into the village almost completely, only briefly flirting with it before beginning the long descent into the valley of the Aar (which will see the start of Strecke 3 of the ORL). On the way down, we turned off to inspect the only inscribed quarry face in this part of the German Limes, commemorating a bored Ianuarius Justinus.
We retraced our steps, crossing under the railway and over the river and nodding a greeting to Kleinkastell Adolfseck, before climbing once more to get to our chosen lunch place near WT 3/8.
After lunch, we plodded on through more forest, now mindful of our looming meeting with Dirk Augustin for a spot of living history. Now the weather began to turn against us, showers becoming heavier until they explored the possibility of turning into downpours. By the time we made it to the watchtower at Zugmantel, we were moist to say the least. Dirk displayed and explained weaponry throughout the Roman period, before mixing (and inviting us to sample) some moretum.
ORL Day Six: Kleinkastell Pohl to Kastell Holzhausen
Our half-day's decursio begins outside the reconstructed Kleinkastell at Pohl and takes us up a country lane, across open fields, the frontier just a line on the map. On our way we see one of the more unusual Limesweg waymarkers: a sign painted on the road.
Passing through the village of Holzhausen (birthplace of Nicolaus August Otto, inventor of the Otto engine), we are unable to resist a coffee in the local bakery/coffee shop/general store. As we exit the village, I note that the Limesweg route has changed yet again here (third visit, third variant!), helped by the fact that there is now a pedestrian walkway/cycle track all the way to the nearby roundabout, cutting out the need for threading through the village and surrounding field.
Soon, however, we leave the road, follow the line of an old narrow-gauge railway for a short distance, then enter woodland again, guarded by a piece of chainsaw art in the shape of a legionary shield.
The Limes is in there waiting for us, bank and ditch in fine fettle amidst the trees and abundant leaf litter, and we follow it towards our destination, Kastell Holzhausen.
The fort is one of the most impressive sets of remains so far, with walls standing over a metre high, well preserved gateways, and an apsidal HQ building. Naturally, we are the only people there: we have yet to see another Limesweg walker who was not a local out for a stroll or somebody jogging or exercising their dog.
We take our leave of the site and go off in search of the coach and our packed lunch before making for Idstein. The showers were half-hearted, we were determined, and our morning was a rewarding one.
ORL Day Five: Bad Ems to Kleinkastell Pohl
We begin Strecke 2. The Kleinkastell 'Auf der Schanze' lay next to the main station in Bad Ems, just south of the River Lahn. Using the station underpass, we begin our treck up to WT 2/1, way above us on the hillside. The route begins on the streets but soon weaves its way onto woodland paths, finally delivering us next to the first reconstructed tower on the LImes, built in honour of Kaiser Wilhelm II. Short and squat (it, not him), it is the antithesis of modern reconstructions of Limes towers, but the view from its base is enchanting enough to make minor carping over details seem irrelevant.
We trot along a ridge for a while before some more climbing becomes necessary, ultimately leading us to a good stretch of bank and ditch, a short length of reconstructed palisade, and a sign (literally) that the Germans do have a wry sense of humour.
Soon, roadside watchtowers (WT 2/5, 2/6, 2/7, and 2/8) start appearing next to the track we are using, and then a fortlet (KK Becheln) before we reach The Grey Stone, a boundary marker on the Limes nicked in the early 20th century and only returned a century later.
By now, showers have begun and lunch is had under a tree next to the village of Schweighausen, before rejoining our journey and being treated to a crop mark indicating the line of the Limes ditch as it runs across a field of just-ripe barley. Much dodging in and out of woodland, the occasional flirtation with a village, and finally a mobile section of mini-Limes, bring us to just south of Dornholzhausen.
On, down a considerable straight length of frontier, past some chainsaw art (a German warrior on one side, a centurion on the other), before we cross (down one side, up the other) the valley of the Mühlbach and burst into the village of Berg, only to find it near-deserted.
Leaving it in the rain (again), we briefly inspect the Gemüse- und Obstlehrpfad (examples of Roman plants), before trogging on, past the site of its fort, to Hunzel. In the village, we pass a huge mural on the side of a building of Roman rural life, and then we leave the village and start across the fields again. Ultimately, we reach the edge of yet more woodland, where the frontier is once again tangible. We stalk it amongst the trees and finally emerge, blinking, on the far side, to be greeted by the welcome sight of the reconstructed Kleinkastell Pohl. We cannot walk directly to it, but must negotiate the outskirts of Pohl (including Ernst-Fabricius-Strasse) before we are finally welcomed inside by a Roman legionary, Thomas, who is to be our guide.
A thorough inspection of the contubernium, museum display (with handling of reconstructed items), hall, and adjacent watchtower, is followed by a Roman-style meal in their small cafe. We are not the only ones there, as local school children are performing a concert in the hall. KK Pohl has an important local, social role to play, as well as entertaining passing tourists like us. The big surprise was that some of the stones from the Mittelrheinisches Landesmuseum were on display in the hall, including one rather famous Roman soldier. All in all, a packed, tiring, but enjoyable day.
ORL Day Four: Hillscheid to Bad Ems
We arrive at Kleinkastell Hillscheid in intermittent rain, mist drifting lazily through the trees (the Germans say 'the fox is cooking'!). We set off, waterproofed and resolved, into the murky forest. Encouragingly, two of the narrower, less frequented (and consequently poorly maintained) lengths have been superseded by longer, but much more acceptable routes. It has to be understood that the Limesweg is made up of lengths of existing paths strung together to make a route that follows the frontier as closely as possible. Hence it is easy to modify routes without actually building a new path; to use a railway metaphor, they just change the points in a couple of places!
We follow the ditch and bank, then criss-cross it a few times, all the time being dripped and rained on with enough frequency for it to be annoying. Finally, however, in time for us to arrive at Arzbach for lunch, the BBC weather forecast for Koblenz came good, the rain stopped, and the clouds parted.
Arzbach was our second fort (as opposed to fortlet) site (there's nothing to see) on the line of the Limes after Niederbieber and it was situated next to the church. Its water supply was fed by a spring just up the hill (the Römerquelle), which we visit after lunch. That well-timed meal fortifies us for the climb up to the Stephansturm, a Wachturm (1/84) perched impossibly high on top of a hill with a truly stunning view across Arzbach and neighbouring Dornbach.
It also possesses permanent and very insistent wind. Trudging up the steep path, we make it to the top and are rewarded with stunning views and a sense of accomplishment. There is, however, a bonus: in a yellow field far below, the ditch of the Limes is clearly visible as a dark green crop mark running across it.
Back down we go, then on along the frontier, past another section of reconstructed palisade (group photo: say 'Limes'!), over the Kurfürstlicher Wildtierbanngrenze (it kept wild animals out of agricultural land around Trier) and on. Suddenly, the Limes sweeps round in a ninety-degree turn and makes for Bad Ems. We follow it and see the first signs of some 20th-century archaeology: craters from a jettisoned stick of bombs. A small path leads us past more of these, until we find the remains of WT 1/88 (narrowly missed by one bomb).
We continue, by now set on our goal of Bad Ems which will, inevitably, involve a loss of height at some point. When it happens, it is sudden and drastic, the frontier charging recklessly straight down a hillside which we are obliged to negotiate on paths which weave their careful way down.
Finally, passing one last section of reconstructed palisade, the lane (running in the ditch, with the bank to our left) leads to an impossibly steep road that takes us down into the heart of Bad Ems. Tomorrow, we will cross the Lahn, but for now, we are done.
ORL Day Three: Sayn to Kleinkastell Hillsheid
A pleasant wander through the Schmetterlingsgarten (butterfly garden) and on into the small town of Sayn found us gradually exiting it and climbing boldly up onto the Dusty Mountain (Der Pulverberg). As we went, we passed the exciting-looking Kletterwald (literally 'woodland scrambling') where all sorts of shocking, risk-assessment-withering activities could be undertaken within the tree canopy by those of a bold nature. Climb, climb, climb, and we gain height until I stop and am about to address the group on the hazards of Limesweg mountain-bikers … when two burst out of the undergrowth, emerging from the steep path we are about to take, making my point eloquently for me. This happened next to a patch of (for the Rhineland) unusual clear felling, the reason for which soon becomes apparent.
We continue our ascent and finally arrive at WT 1/54 ('Auf dem Pulverberg'), with a fine view across Sayn, now considerably aided by that clear felling of a strip of woodland (in imitation of what the Romans had almost certainly done). This is followed by a pleasant stroll through woodland, occasionally ambushed by lengths of the Limes. A descent leads us to where we take lunch, next to Kleinkastell Anzbach, which is next to a wastewater treatment works (as you do). The skies are blue, the sun shining, and the poo not at all intrusive.
We continue after lunch, past a house adorned with giant murals of Asterix, Obelix, and Getafix, then climbing gently up a valley, and past more lengths of frontier.
We head on, down past a mill, back up into open agricultural land (a quick flash as a buzzard spirals down on his prey) and we are climbing again towards Hillscheid. We finally arrive at the Limespavilion Hillscheid, where the custodian is summoned by phone and gives us a long and informative guide to absolutely everything, ever, for which he is much appreciated. A 1994-vintage reconstruction of the nearby WT 1/68, it has an adjacent Roman rural garden (although sadly its faun statue was recently vandalised).
The last part of a our march takes us onwards and upwards, in a quest to reach Kleinkastell Hillscheid, located in yet more woodland. A fortlet with an annexe, an adjacent WT (1/69), and a length of reconstructed bank, ditch, and palisade, it is worth the steady climb to get to it. Now, however, it is time to head back.
Per Lineam Valli feed
Per Lineam Valli tweets
Earlier Murophiliac Ramblings


number) because of the error "sec_error_invalid_key".
How can I force FF to connect?
Why do I have to allow Firefox (2.0.0.7) to connect with one or more sites before I can connect with my Earthlink dial-up connection.
Why does my FireFox 2.0.0.2 ask me to log in to //localhost?
Universal Pictures tried to protect Jurassic World from being pirated but instead showed its ignorance.


"The chord progression is pretty easy. Practicing this song is a good way to develop your ..."
When the night has come and the land is dark and the moon is the only light we see, oh I won't be afraid no I won't be afraid long as you stand, stand by me.
34 / 44 people found this review helpful.
Worked really well in the group Didnt have any problems with it.


The Toad Stool by Alan Wolk: Ellen's Selfie: Whose Win Is It?
So Ellen's Twitter selfie (taken by Bradley Cooper) has broken all sorts of retweet records and the usual suspects are claiming a win for Samsung.
The brands that will garner a win from this are (in order) Twitter, the Oscars, Ellen, Bradley Cooper. Meryl Streep, Brad Pitt, Julia Roberts, Angelina Jolie, Jennifer Lawrence, and then, maybe, Samsung.
So step one for the brand would be to get their PR people in gear and make sure they're attached to the moment.
Is this a replicable moment that proves the overall viability of social TV? Not really. The confluence of a widely viewed live broadcast (e.g. no time zone issues) with celebrity presence and a Twitter-heavy audience makes it more of a one-trick pony that's a great example of the power of real time marketing and the speed at which something can go viral.
Which is not to say it's not a win for Samsung. It's a great idea and far more powerful and buzzworthy than any of the TV spots on the show. But without the direct brand tie-in (and competition from Twitter and celebrity brands, it's not the win 1 million plus retweets would make it seem it is.


text:
Wednesday signing times
Here are the uncommitted players of interest and the times they'll be signing on National Signing Day on Wednesday.
Christian Jones, LB, Winter Park Lake Howell — He is holding a news conference and signing his Letter of Intent at 10:30 a.m. on ESPN. It will be done at Disney's ESPN Zone. So, I guess he's not going to school? Jones is also considering Florida State, Alabama and Notre Dame.
Darrin Kitchens, LB, Homestead — Nice and early fax at 9 a.m. He's deciding between Florida, FSU and Texas Tech.
Chaz Green, OL, Tampa Catholic — He will join teammate Christian Green and announce at 3:30 p.m. Like Jones, he will also announce on ESPN. The other schools he's considering are USC and Tennessee.
Seantrel Henderson, OL, St. Paul, Minn., Cretin-Derham Hall — I haven't found a time for Henderson, but I believe it will be on TV. I don't think it will be on ESPN. He's down to Ohio State, Florida, USC, Notre Dame, Minnesota and Miami.
Adrian Coxson, WR, Baltimore, Md., City College High — His signing will take place at around 11 a.m. Georgia and Notre Dame are also on his list.
Ivan McCartney, WR, Miramar — His decision should be between 9 and 9:30 a.m. West Virginia and Miami are also in line for his services.
Here are some confirmed times for Gator commits:
Tyler Murphy, QB, Whethersfield, Conn. — He's sending his LOI at 8 a.m. and having a signing ceremony at his high school at 2:30 p.m.
Mack Brown, RB, Lithonia, Ga., Martin Luther King — He's set to sign at 10 a.m. Yes, Florida State sent in an LOI as well, but he said he's signing with Florida.
Chris Dunkley, WR, Pahokee — I was told that he's sending in his LOI very early in the morning. Should be around 7 or 8 a.m.
Quinton Dunbar, WR, Miami Booker T. Washington — He will sign and have his ceremony at 9 a.m.
Ronald Powell, DE, Moreno Valley, Calif., Rancho Verde — He should be faxing in at 12:30 p.m. EST
Lynden Trail, DE, Miami Booker T. Washington — He'll join Dunbar and sign at 9 a.m.
Dominique Easley, DL, Staten Island, N.Y., Curtis — He's not sure what time, but he said "mid-day" Wednesday.
Sharrif Floyd, DT, Philadelphia, George Washington — I believe his signing will take place at noon.
Michael Taylor, LB, Atlanta, Westlake — He's signing at 9 a.m.
Previous articleNational Signing Day Predictions
Next articleBackcourt bounceback?
Corey Collier, ranked No. 1 safety in '21 by Rivals, commits to Gators
5-star DB Jason Marshall Jr. commits to Florida over Alabama, Miami
Report: Kamar Wilcoxson reclassifying to 2020, plans to enroll at UF next month
TampaDave February 2, 2010 At 8:12 pm
Christian Jones to the Noles, Henderson to Ohio State. McCartney to WVU primarily because of grades. Chaz and D Kitch wearing the Orange & Blue and I'm really hoping Coxson does too. That would be a good close and put a big fat cherry on a fantastic class. Hopefully there will be no unforseen circumstances but it seems to be a Gator tradition to get a rude surprise on NSD. But it is also a Gator tradition to when championships on the field where it really counts. This class will help carry on THAT tradition…
Meant to say "win", not when! Long day…
Drew February 2, 2010 At 9:39 pm
Wouldn't it be a welcome surprise to wake up and find out they have to roll back a player because OLmen Henderson and Green signed along with Coxson and Kitchens?
Gatormac February 2, 2010 At 11:40 pm
Henderson went through dry run at CBS College studio in NY today, will announce at 5:30 p.m. tomorrow.
I'm pumped about our incoming class, especially the remarkable story of turn-around for our coach. I have a notion that we'll get at least one great, happy surprise tomorrow, too, only because there has been so little positive news for us in recruiting the last couple of weeks. I don't think our coaches have been sitting around twiddling their thumbs trying merely to hang on to the 25 we've got but surely have been working hard with their magic to land a few more top-rated guys.
joey harrell (BIG GATOR) February 4, 2010 At 11:10 pm
I live in ga. but born and raised in fla. I am really anxious to see them bulldog faces when I go to work and rub it in about that awsome 2010 recruiting class! Gonna be a good run for this class!
Drew February 5, 2010 At 3:04 am
Question for Edward: How long does the team have to decide to roll back players? I ask because OT Sentrel Henderson listed Florida in his final six schools (USC, Minn, OSU, UF..etc) and he is waiting until after USC goes up against the board about their violations before signing with them.
Can't Meyer continue to stay in Henderson's ear in case things go badly for USC and still attempt to recruit him? Henderson has until April 1st to sign his LOI doesn't he?
I may be deluted, but I still hold out hope that USC, or more so Kiffin, loses the #1 OT in the nation even is he doesn't sign with UF.


The following announces the cautions when using the services provided at YAMAHA Robot "Member Site".
When you agree with the contents, click the [Agree] button at the bottom of this page.
All of the data stated in the contents are provided based on the preconditions that you investigate to adopt YAMAHA's industrial robots.
The data stated in the contents is subject to change or delete without prior notice due to product improvement, etc.
YAMAHA shall not warrant that the CAD data stated in the contents does not always match to the actual products.
The copyrights of all data and images, such as product photos stated in the contents belong to YAMAHA. Except for in-house use, no part of the contents shall not be copied, or sold, transferred, or rented to a third person, or similar actions shall not be taken without written permission of YAMAHA.
YAMAHA shall not be held responsible for any trouble arising from use of the data stated in the contents by the customer.


Psychic and Mediumship certification by James Van Praagh.
Vivian feels very blessed to have been guided and taught by all the above gifted teachers. She also feels her clients and students have also been an integral part of her development in the practitioner/teacher that she is today.
With all her heart and soul, Vivian believes the greatest teacher of all is Spirit!!! Who she continually works with everyday. And is always in awe of the knowledge and experiences they share with her!!
If you have not already done so, please click on the tab 'Who Am I" for a more personal message from myself. Thank you!


Pershine protects your personal accessories – watches, mobiles, electronic devices, jewellery – from UV radiation, water damage and stains, giving an easy-clean effect.
>>> Family heirlooms are safe and preserved better. Go ahead and let your son wear Granddad's watch to his job interview. Or let your daughter wear great-grandma's cameo brooch for her prom.


Does your child have yet another cold or ear infection, a constant runny nose or an annoying cough? Having a sick child is certainly not fun and on top of that, it can impact on the health and wellbeing of the whole family. Whether it's due to sleepless nights, sickness spreading through the whole family, or needing time off school or work, it can take its toll. It is vital for children's health especially their immune systems to be in tip top shape to deal with whatever bugs are thrown their way, be it bacteria, viruses or allergens. So, if your kids are getting sick with regular colds and flus, or are susceptible to wheezing or sneezing, make it a priority to boost up their immunity.
The good news is that certain herbs and nutrients play an important role in building robust immunity in children. Be prepared, as prevention is better than cure. If your child does get sick, a strong immune system will also reduce the severity of their cold symptoms, help to speed their recovery and with less days home sick. Some of my favourite key natural medicines work by providing symptomatic relief, as well as addressing underlying immune imbalances.
Albizia: Has anti-allergy properties helpful for asthma and sinus congestion. It also strengthens the lungs and clears mucus.
Did you know that the digestive system is a close friend to the immune system? In fact, approximately 70% of the immune system lives in the digestive tract. This means that taking good care of your children's digestive health will also assist in promoting a strong, healthy immune system. During the first two years of life, the immature immune and digestive systems are still developing. During this time, the integrity of the digestive tract can be reduced (sometimes known as "leaky gut"), and may allow undigested foods and toxins to pass through this barrier and cause an immune reaction. In this way, "leaky gut" may contribute to the development of allergies and poor immune defence against colds and flus. By strengthening the gut barrier, the immune system is able to respond with greater effectiveness. Healthy detoxification can also build a happier digestive system.
Probiotics are beneficial bacteria that are important in keeping the digestive system in balance and supporting a healthy immune system. They help to optimise digestive function through encouraging the growth of healthy gut flora, whilst reducing the number of bad bacteria responsible for digestive upsets and ill health. Probiotics are particularly needed after a course of antibiotics, to replenish the beneficial gut flora wiped out by these medications and reduce the risk of digestive symptoms such as antibiotic-associated diarrhoea.
Reduce inflammatory foods such as sugar, white breads, dairy, cakes and soft drinks that may suppress immune function.
Encourage more 'green time' and less 'screen time'. Outside play can help strengthen the immune system, as well as support healthy physical development.
If you want the best for your children's health with less sickness and more fun and play, call Feeling Healthy today on 9687 5333. Find out what steps you can take to strengthen your child's immunity. These may include improving digestion, following a healthy diet and lifestyle and using specific immune enhancing herbs and nutrients.


The new Lamborghini Gallardo LP 560-4 combines the aggressive and muscular sportiness of the shape with the elegance and simplicity of its contours.
The car is equipped to accomodate only 2 people. This in itself provides a rather comfortable and luxurious seating experience to the passengers.
The Lamborghini Gallardo LP 560-4 is the latest version of car produced by the world's famous Italian luxury sports car manufacturer. This latest version is often called as the Lamborghini Gallardo. The number 560 in the code name represents the horsepower that the engine offers. The enlarged and redesigned cooling system coincides with the demands put forth by the engine. The key attention seeking structure which makes the profile of the car rather signatures are the redesigned spoilers and the aerodynamically designed body.
The Lamborghini Gallardo LP 560-4 is the latest version of car produced by the world's famous Italian luxury sports car manufacturer. This latest version is often called as the Lamborghini Gallardo. The number 560 in the code name represents the horsepower that the engine offers. The enlarged and redesigned cooling system coincides with the demands put forth by the engine. The key attention seeking structure which makes the profile of the car rather signatures are the redesigned spoilers and the aerodynamically designed body. A rather more redesigned version of the automatic e-gear transmission system is seen in the latest version of the Lamborghini Gallardo. The on-road price of this luxury car ranges from Rs. 1,55,00,000 to Rs. 2,20,00,000.
The new Lamborghini Gallardo LP 560-4 combines the aggressive and muscular sportiness of the shape with the elegance and simplicity of its contours. The redesigned front end is charactrised by triangular and trapezoidal forms-two shapes which are quite typical of the Lamborghini design language. The vehicle also gets larger air intakes in the front along with the new 19 inch "Apollo polished" alloy wheels, painted in matt black and spokes in polished silver which makes the side view of the car even more eye catching than the previous models.
The rear of the LP 570-4 gets even better with a design emphasizing on the horizontal orientation, which is quite evident from the triangular and trapezoidal shape of the rear lamps. Also the exhaust gets even a wider surface area, thereby improving the thermodynamic efficiency of the car. The turning base of this luxurious car is just 5.7 meters. The adjustable headlights and the fog lights ensure that maximum vision is promised to the driver while driving in adverse conditions. The power adjustable exterior rear view mirror which could be electronically folded adds in extra detail to the car. The overall dimension of the car includes a height of 1165mm, width of 1900mm and length of 4345mm.
The car is equipped to accomodate only 2 people. This in itself provides a rather comfortable and luxurious seating experience to the passengers. The power steering facility of the car ensures full control of the car in the driver's hand. The instrument cluster includes automatic climate control system, control to check the air quality, remote trunk opener, remote controlled fuel lid opener, low fuel warning light, accessory power outlet, trunk light and it also has a vanity mirror. The cup holders in the front make sure that safe and efficient space is provided to hold the cup without getting the substance spilled across. Other interior features which makes the car rather extraordinary is the presence of heater, adjustable steering column, tachometer to keep track of the engine's RPM, electronic multi-trip meter, a large glove compartment, digital display of clock and outside temperature as well as the presence of digital odometer.
The carbon –ceramic disc braking system utilizes eight piston Brembo calipers in the front, and the presence of four piston calipers at the rear side eventually increases the value of the car. The height adjustable seat belts ensure that the passengers are kept safe whenever the car is on the run. The heated seats on the front ensure that the passengers get the warmth they wanted while driving in adverse climates. The lumbar seat support makes sure that the driver has never experienced the tiredness while going for long distance driving. The multifunction steering wheel helps in focusing the driver's attention on the road rather than occupying themselves with other tasks. Other safety features include Anti- Lock Braking system with Brake Assist, central locking feature, power door and child safety door locks, anti-theft alarm system, front and side airbags for passengers, day and night rear view mirror, door ajar and seat belt warning, impact beams on the side and front, keyless entry, tyre pressure monitor and crash sensors.
The Lamborghini Gallardo LP 560-4 is powered by a 5.2L V-10 DOHC engine that delivers a total of 552 HP at 8,000 rpm and a maximum torque of 398 lb-ft at 6,500 rpm. The car gets both automatic as well as manual gear transmission with six speed gearbox. The maximum speed reachable in this car is 201 mph while reaching 0-60 mph in 3.7 seconds.
With a price tag of INR 1.5-2.2 crores, the Lamborghini Gallardo LP 560-4 is undoubtedly an extraordinary and safe sports car which delivers high class driving precision as well as effectiveness thanks to its 4WD concept. Also just like the other Gallardo models the 560-4 too consists of sport, luxury, functionality and ergonomic features which makes sure that the driver can fully focus on this driving while on the roads.


Prithvi Shaw became the youngest Indian, at 18 years and 329 days, to score a Test century on debut.
India's Prithvi Shaw marked his Test debut with a brilliant century as India ended Day 1 of the opening Test against the Windies on 364/4. Prithvi Shaw (134 off 154 balls) hogged all the limelight on the opening day of the first Test as he became the youngest Indian, at 18 years and 329 days, to score a Test century on debut. Winning the toss, India opted to bat but were dealt with a huge blow as opener KL Rahul departed for a duck in the very first over of the day. However, young Prithvi Shaw and Cheteshwar Pujara strung together a partnership of 206 runs to ensure that India do not lose any more wicket. Pujara, who was dismissed for 86, complemented the youngster well as the visitors kept the scoreboard ticking.
After Pujara and Prithvi were dismissed, Virat Kohli (72*) and Ajinkya Rahane strung together a 105-run partnership to pile on the pressure. While Kohli struck his 20th Test fifty and looked solid in the middle, his deputy Rahane departed for 41.
Kohli looked set for another hundred and was batting alongside Rishabh Pant (17 not out off 21) at the close of play. Eighty-nine overs were bowled on day one with India scoring at 4.08 runs per over. The West Indies handed a big setback even before toss with the last-minute withdrawal of captain Jason Holder, looked ordinary at best on the field. Barring pacer Shanon Gabriel (1/66), none of the bowlers troubled the Indian batsmen on a greenish surface which did not seem to do much.
The youngster punched the second ball he faced towards the cover boundary for a three, his first runs in international cricket, easing whatever nerves left inside.
Unfortunately, Shaw fell at the stroke of tea, in what was a soft dismissal as he chipped one straight into the hands of leggie Devendra Bishoo. He was not facing one of the best attacks but he gave ample evidence of his brilliance on way to a memorable hundred. Pujara too looked at ease at the other end until he was caught behind off debutant Sherman Lewis, missing out on a 16th Test ton.
Pacer Gabriel was clocking in the higher 140kph but that did not faze Shaw. Gabriel trapped his opening partner KL Rahul in front with a sharp incoming delivery to give the West Indies an early breakthrough. KL Rahul was better off not taking the DRS as the ball was clearly crashing into the stumps.
Shaw, however, continued batting with confidence and his first boundary came in the second over bowled by Keemo Paul, another backfoot punch towards the point boundary. He got more aggressive in Paul's following over, hitting him for three fours as the pacer was duly punished for bowling far too many looseners.
After Rahul's dismissal, Shaw and Pujara gave the innings a move on and did not look in any sort of trouble. While Shaw punched and drove effortlessly off pacers, he was equally comfortable against the spin duo of Bishoo and Chase.


text:
Q: Rank of an element of the exterior power Let $X$ be a finite-dimensional vector space and let $\Lambda^p(X)$ be the $p$th exterior power of $X$. My picture of an elementary element $x_1 \wedge \ldots \wedge x_p$ in the exterior power is something like: $x_1 \wedge \ldots \wedge x_p=0$, if the vectors are dependent, and otherwise $x_1 \wedge \ldots \wedge x_p$ is like a $p$-dimensional subspace of $X$ (the one spanned by the vectors) together with a volume form on that subspace. Of course, this picture does not really say how to think of higher rank elements in $\Lambda^p(X)$ which generally are linear combinations of elementary elements. Sometimes this isn't so bad. If you have an element of the form
$\alpha = \sum_{i=1}^k \alpha_i$ where each $\alpha_i$ is elementary and where the subspaces corresponding to each $\alpha_i$ are independent, then you can sort of think of having a "direct sum" of elementary elements.

Question: It seems plausible that every element of $\Lambda^p(X)$ can be expressed in this way. Is this actually true? That is can any element of $\Lambda^p(X)$ be written as
  $$(x_1 \wedge \ldots \wedge x_p) + (x_{p+1} \wedge \ldots \wedge x_{2p}) + \ldots + (x_{pk -p + 1} \wedge \ldots \wedge x_{pk})$$
  where $x_1,x_2,\ldots,x_{pk}$ are linearly independent? In this situation, is $k$ the rank of this element (in the sense that the element cannot be expressed as a sum of fewer than $k$ elementary elements).

Note that, if the answer to this question is "yes", then it follows that the rank $r$ of an element of $\Lambda^p(X)$ satsfies $pr \leq \dim(X)$.

A: I have managed to show that the answer to this question is "no". If $\dim(X) \geq 5$, then  not every element $\alpha \in \Lambda^3(X)$ can be written in the form I inquired about. You can see this by thinking about the kernel of the map
\begin{align*} T_\alpha : X \to \Lambda^4(X) && T_\alpha(x) = \alpha \wedge x. \end{align*}
Two observations:

*

*If $\alpha$ is "elementary", i.e. $\alpha = x \wedge y  \wedge z$ for linearly independent vectors $x,y,z \in X$, then the kernel of $T_\alpha$ can be shown to equal $\mathrm{span}\{x,y,z\}$, so the dimension of the kernel is 3.

*If $\alpha$ is a sum of $k \geq 2$ elementary elements which are "independent", i.e. $\alpha = (x_1 \wedge y_1 \wedge z_1) + (x_2 \wedge y_2 \wedge z_2) + \ldots + (x_k \wedge y_k \wedge z_k)$ for linearly independent vectors $x_1,y_1,z_1,\ldots,x_k,y_k,z_k \in X$, then the kernel of $T_\alpha$ can be shown to be trivial.
Now, let $x,y_1,y_2,z_1,z_2 \in X$ be linearly independent and consider
$$\alpha = (x \wedge y_1 \wedge z_1) + (x \wedge y_2 \wedge z_2) \in \Lambda^3(X).$$
One can check that, for this element, the kernel of $T_\alpha$ is $\mathrm{span}(x)$. Since the kernel of $T_\alpha$ is neither 3-dimensional, nor 0-dimensional, this $\alpha$ cannot be expressed as the sum of one or more "independent" elementary elements.


"This just seems like a tragedy beyond comprehension," Leinweber said.
Social media lit up with grief stricken posts commemorating Kabir.
Afsara Adiba, Kabir's cousin, said in a Facebook post that Kabir, who was born in Bangladesh, traveled to Dhaka earlier this week and planned to spend part of her summer vacation visiting friends and her mother's family.
She went to the café after Iftar, an evening meal Muslims eat during the holy month of Ramadan, to meet up with friends, Adiba said.
Survivors said the terrorists asked the hostages to recite portions of the Quran. Those who could prove they were Muslim were spared and given food to eat. Those who couldn't rattle off passages of the holy book were tortured and killed.
Kabir was executed despite her faith, Adiba said.
They returned the next morning to find rubble where the bakery once stood, Afiya wrote. "We had no idea where Abinta was," he said.
The family spread out to search every hospital for their loved one and tried frantically to get the list of the dead. That afternoon they finally heard news — one of the dead women had the same shoes and clothes Abinta was last seen in.
They retrieved her body at 8 p.m., almost 24 hours after she left to see her friends.
A close family friend shared a photo of the grinning young woman posing with a certificate from the Phi Eta Sigma national honor society.
"I called her Angel since the day I met her," Sinthia Arefin wrote. This is the second person she lost in the attack.
When reached by the Miami Herald, Arefin said Kabir's mother was "like a sister" to her and served as her artistic mentor. She described Kabir as "full of positive energy." She loved basketball and played for her school team, Arefin said.
Kabir attended four schools in Miami-Dade during her years in the district, said Miami-Dade public schools spokeswoman Daisy Gonzalez-Diego. She transferred out-of-county in 2011, when she was an eighth grader.
She did not go to high school at a Miami-Dade public school. Gonzalez-Diego couldn't confirm which schools Kabir attended due to state laws, but Local10 reports she was a student at Ada Merritt K-8 Center.
Florida Gov. Rick Scott declared the flags of the United States and the State of Florida to be flown at half-staff at all local and state buildings, installations, and grounds throughout the State of Florida from sunrise to sunset on Sunday.
Emory president James Wagner wrote in an email Saturday morning that he reached Kabir's mother, who was in "unspeakable pain" over her daughter's death.
"Please, as you are inclined, direct your kindest thoughts and sincerest prayers in her behalf and that of her family," Wagner wrote.
Wagner said the university plans to honor both Kabir and Hossain when classes resume in the fall.
Kabir and her parents lived in a beige two-story home in a Southwest Miami-Dade suburb. Neighbors said the family kept to themselves.
Records show the neatly kept home is the Florida base for a Bangladeshi clothing company called Cassiopea Apparels LTD. State records show the company is run by Kabir's mother, Ruba Ahmed; Tanveer Ahmed and Mohammed Kabir.
A man entering the home declined to speak with the Miami Herald. He shut the door quickly, ruffling the plant at the entryway — a peace lily.


text:
Caithness will take nothing for granted against bottom side Glenrothes
By Iain Grant
Published: 10:00, 26 November 2021
Evan Sutherland tries to force his way through during the Greens' recent 34-10 win against Aberdeen Wanderers at Millbank. Picture: James Gunn
The Greens head south on Saturday in their latest bid to notch up a first away victory in Caley League Division 1.
Their three missions so far have ended in disappointment, with narrow losses at the hands of Ellon, Orkney and Blairgowrie.
The Caithness faithful will be hoping they can break their duck when they face off against the league's bottom side Glenrothes.
The Fife outfit are still searching for their first win, having shipped 251 points in six defeats.
Head coach Ewen Boyd, however, is too seasoned a campaigner to allow any hint of complacency to creep into the preparations.
"The last time we travelled, we played Blairgowrie who were then sitting on no points and we got beaten," he recalled.
"We will certainly not be taking anything for granted. We have the factor of travelling down on the same day to contend with, as well as the usual problems of several guys being unavailable and a few injuries."
Boyd and his coaching team have noticed a lowering in the energy levels of the squad in away outings and are keen to find ways of addressing this.
Their away record is in contrast to their Millbank form where four barnstorming wins have seen them rise to joint second, a point behind leaders Orkney.
Among tomorrow's absentees will be prop/hooker Hamish Coghill, who has work commitments.
Scott Webster, who missed the 34-10 win over Aberdeen Wanderers, is fit to return to the squad, though a recurrent shoulder complaint again places a doubt over the involvement of his brother Douglas.
Lock Kevin Brims is also doubtful with a rib injury he sustained in the Wanderers match.
The return to fitness of prop Mark Nicolson is a big boost and he is set for his first start of the season.
The last time the sides met at Carleton Park, the Greens edged a 26-25 victory in their 2017/18 Caley 1 title winning season. But since then, both camps have seen wholesale changes.
Boyd said: "We have no real idea what we'll be coming up against but we're travelling with a decent squad.
"I'm looking for us to generate some momentum in the away matches in Glenrothes and Hillfoots to take into our home game against Orkney [on December 11]."
The club's resources will be stretched this weekend with Caithness Seconds also heading down the A9.
They take on Craig Dunain in Inverness as they bid for a third straight win in Caley North 4.
Do you want to respond to this article? If so, click here to submit your thoughts and they may be published in print.
Rugby Iain Grant