text:
/*jslint bitwise: true, browser: true, evil:true, devel: true, debug: true, nomen: true, plusplus: true, sloppy: true, vars: true, white: true, indent: 2 */
/*globals $, L, Layers, google, Crs, TIM, TimeRange, utc, H */

var MAPS = (function () {

  var self, isSplitScreen = false,

      dfLocation = "/explorer/8//3-N90-E0/",

      wikiMarkers = [null, null],

      mapR = {map: null, div: null, list: {}, overs: {}, ctrls: {}, timeRange: new TimeRange()},
      mapL = {map: null, div: null, list: {}, overs: {}, ctrls: {}, timeRange: new TimeRange()},

      layout = {paddingTop: 52, borderCenter: 4},
      divMsgOverlay,
      geocoder = new google.maps.Geocoder(),
      debTitle = true,

      status = {
        lay1:     [],
        lay2:     [],
        day1:     null,
        day2:     null,
        lat:      null,
        lng:      null,
        zoom:     null
      },
      ignore = {events: false};

      function getMapTL(map){return map._layers[H.firstAttr(map._layers)];}

  return {
    deb: function(){

        var rTL = getMapTL(mapR.map),
            lTL = getMapTL(mapL.map),
            rZo = rTL.options.minZoom + "/" + rTL.options.maxZoom,
            lZo = lTL.options.minZoom + "/" + lTL.options.maxZoom,
            rZi = mapR.map.options.crs.options.zoomInfo.min + "/" + mapR.map.options.crs.options.zoomInfo.max + "/" + mapR.map.options.crs.options.zoomInfo.off,
            lZi = mapL.map.options.crs.options.zoomInfo.min + "/" + mapL.map.options.crs.options.zoomInfo.max + "/" + mapL.map.options.crs.options.zoomInfo.off,
            rLY = Layers.byIndex(status.lay1[0]),
            lLY = Layers.byIndex(status.lay2[0]),
            rYz = rLY.zoom.min + "/" + rLY.zoom.max,
            lYz = lLY.zoom.min + "/" + lLY.zoom.max;

      console.table([
        ["side",  "mZoom",             "cZoom", "lKey",   "tlZoom", "lyZoom"],
        ["right",  mapR.map.getZoom(), rZi,     rTL.key,  rZo,      rYz],
        ["left",   mapL.map.getZoom(), lZi,     lTL.key,  lZo,      lYz]
      ]);
    },
    oversource: "",
    left:  mapL,
    right: mapR,
    status: status,
    ignore: ignore,
    layout: layout,
    markers: wikiMarkers,
    transpic: "/images/explorer/trans.512.png",
    notavail: "/images/explorer/notavail.512.png",
    isSplitScreen : function(){return isSplitScreen;},
    boot : function(){
      self = this;
      window.onload   = this.onload;
      window.onresize = this.updateSize;
      window.onhashchange = this.onhashchange;
      return this;
    },
    onhashchange : function(){console.log("Hash", location.hash);},
    onload :   function(){

      var path = location.pathname || dfLocation;

      TIM.step("LOADING", "Hash: " + path);

      mapR.div = $("#mapR");
      mapL.div = $("#mapL");

      self.parseLocation(path);
      self.updateSize();
      self.prepBaseList("right");
      self.prepBaseList("left");
      self.createMap("right");
      self.createMap("left");
      self.updateControls("right");
      self.updateControls("left");
      self.activateMap("right");
      self.activateMap("left");
      self.initOverlays();
      self.initMarker();
      self.updateAttribution();
      self.updateSplitScreen(isSplitScreen);
      self.updateTime();
      self.updatePerma();

      // hide at start

      // css tricks
      // $(mapR.ctrls.coords._container).css({visibility: "hidden"});
      // $(mapL.ctrls.coords._container).css({visibility: "hidden"});
      $(mapR.ctrls.loader._container).css({'box-shadow': "0 0", 'background': 'transparent'});
      $(mapL.ctrls.loader._container).css({'box-shadow': "0 0", 'background': 'transparent'});

      $(".leaflet-control-loading").parent().css({background:"#666"});
      $("form.leaflet-control-layers-list").css({margin:"4px 6px"});
      $("#mapContainer").css({background:"#740F0F"}); // splitscreen trenner
      $("#msgs-overlay").css({display:"none"});

      // $(".permaWait").css({
      $("#navPerma img").css({
        'background': 'transparent',
        'background-image': 'url()',
        'padding-left': '2px'
      });

      TIM.step("LOADED", "Maps");

    },
    updateSize : function(){

      var navHeight = $(".navbar").height(),
          trnHeight = $("#sec-maphead").height(),
          w = $(window).width(),
          // t = navHeight + trnHeight, // layout.paddingTop,
          t = fullScreenApi.isFullScreen() ? trnHeight : navHeight + trnHeight,
          h = $(window).height() - t,
          b = layout.borderCenter/2;

      if (isSplitScreen){
        mapR.div.css({top: t + "px", height: h + "px", width: w/2 - b + "px", left: w/2 + b + "px"});
        mapL.div.css({top: t + "px", height: h + "px", width: w/2 - b + "px", left: 0});
      } else {
        mapR.div.css({top: t + "px", height: h + "px", width: w + "px", left: 0});
        mapL.div.css({top: t + "px", height: h + "px", width: 0, left: 0});
      }
      if (mapL.map){
        mapL.map.invalidateSize();
        mapR.map.invalidateSize();
      }

      // $("#msgs-overlay").css({top: t + "px", height: h + "px", width: w + "px", left: 0, zIndex: 10000000});

    },
    geocode: function(){

      var loc, cmpnts, types,
          center = mapR.map.getCenter(),
          latlng = new google.maps.LatLng(center.lat, center.lng);

      mapR.map.fire("dataloading");
      mapL.map.fire("dataloading");

      geocoder.geocode({latLng: latlng}, function(res, stats){

        var locs = [];

        mapR.map.fire("dataload");
        mapL.map.fire("dataload");

        if (stats === google.maps.GeocoderStatus.OK) {

          // console.log("res", res);

          res.reverse().forEach(function(r, idx){
            cmpnts = r.address_components.map(function(c){
              return c.short_name;
            });
            types = r.types.reduce(function(a, b){
              return a + ", " + b;
            }, "");
            // console.log(idx, r.formatted_address, cmpnts, types);
          });

          if  (res.length === 0){
            locs.push("uninhabited");

          } else {

            // remove postal code, routes
            // make sure to have country code (mexico) country, political
            // which is not always in [0]
            // remove stuff in brackets Colombia

            if (res[0].types[0] === "country"){
              locs.push(res[0].address_components[0].short_name);
              locs.push(res[0].address_components[0].long_name);
            }

            if (res.length === 2){
              locs.push(res[1].address_components[0].long_name);}

            else if (res.length === 3){
              locs.push(res[2].address_components[0].long_name);}

            else if (res.length > 3){
              // locs.push(res[2].address_components[0].long_name);
              locs.push(res[3].address_components[0].long_name);}
          }

          // console.log("locs", locs);

          $("#navLocation").text(locs.join(" "));

        } else if (stats === google.maps.GeocoderStatus.ZERO_RESULTS){
          // DEBUG && console.log("GEOCODE", google.maps.GeocoderStatus.ZERO_RESULTS);
          $("#navLocation").text("uninhabited");

        } else {
          // DEBUG && console.log("GEOCODE", google.maps.GeocoderStatus.ZERO_RESULTS);
          $("#navLocation").text("unidentified");
        }

        $("#navLocation").href = $("permaLink").href;

      });

    },
    parseLocation: function(pathname){

      var path = (pathname || location.pathname).split("/");

      function ged (i, value){
        return  (i >= path.length) ? value :
                (path[i] === "" )  ? value : path[i];
      }

      function layerRange(layers){
        var tr = new TimeRange();
        if (Layers.byIndex(layers[0]).timeRange && Layers.byIndex(layers[0]).type === "base") {
          return Layers.byIndex(layers[0]).timeRange;
        } else {
          layers.forEach(function(idx){
            var l = Layers.byIndex(idx);
            if(!!l.timeRange){
              tr.push(l.timeRange);
            }
          });
          return tr;
        }
      }

      var dfDate = utc().delta("days", -1).toIso(),
          dfLay  = dfLocation.split("/")[2],
          dfCrds = dfLocation.split("/")[4],
          code   = ged(2, dfLay).split("-"),
          date   = ged(3, "").split(";"),
          coords = ged(4, "").split("-"),
          place  = decodeURIComponent(ged(5, "")),
          lat, lng, baseR, baseL, timeR, timeL;

      status.place = place || "";
      status.lay1  = Layers.code2layers(code[0]);

      if (code.length === 2){
        status.lay2 = Layers.code2layers(code[1]); // only base here // Why
        isSplitScreen = true;
      } else {
        status.lay2 = [status.lay1[0]];
      }

      baseR = Layers.byIndex(status.lay1[0]);
      baseL = Layers.byIndex(status.lay2[0]);

      if (!baseR || !baseL) {
        console.log("parseLocation: unknown indezes", status.lay1[0], status.lay2[0]);
      }

      timeR = layerRange(status.lay1);
      timeL = layerRange(status.lay2);

      if ((date.length === 0) || (date.length === 1 && date[0] === "")) {
        status.day1 = (timeR.length()) ? timeR.latest() : dfDate;
        status.day2 = (timeL.length()) ? timeL.latest() : dfDate;
      } else if (date.length === 1) {
        status.day1 = date[0];
        status.day2 = date[0];
      } if (date.length === 2) {
        status.day1 = date[0];
        status.day2 = date[1];
      }

      if (coords.length !== 3) {
        coords = baseR.latlngzoom;
        coords = [coords[2], coords[0], coords[1]]
      }

      //assuming no zoom cheats here
      status.zoom = ~~coords[0]; // - base.zoom.diff;
      status.zoom = H.bounds(status.zoom, baseR.zoom.min, baseR.zoom.max);
      if (isSplitScreen){
        status.zoom = H.bounds(status.zoom, baseL.zoom.min, baseL.zoom.max);
      }

      lat = coords[1]; lng = coords[2];
      status.lat = (lat[0] === "N") ?  parseFloat(lat.substr(1)) :
                   (lat[0] === "S") ? -parseFloat(lat.substr(1)) : lat;

      status.lng = (lng[0] === "E") ?  parseFloat(lng.substr(1)) :
                   (lng[0] === "W") ? -parseFloat(lng.substr(1)) : lng;

      TIM.step("STATUS", JSON.stringify(status).split('"').join(''));

    },

    updatePerma: function(){

      var perma = $("#navPerma a"),
          link = "/" + dfLocation.split("/")[1] + "/",
          title = "Permalink: " + location.host + link,
          text = "//arctic.io/" + dfLocation.split("/")[1] + "/",
          code, codeL, codeR, datum = "", zoom, lat, lng, fragment,
          abs = Math.abs,
          rightCanDate, leftCanDate;

      rightCanDate = mapR.timeRange.ranges.length > 0;
      leftCanDate  = mapL.timeRange.ranges.length > 0;

      codeR = Layers.layers2code(status.lay1);
      codeL = Layers.layers2code(status.lay2);
      code  = codeR + (isSplitScreen ? "-" + codeL : "");

      datum = ( rightCanDate && !isSplitScreen)                ? status.day1 :
              ( rightCanDate &&  leftCanDate && isSplitScreen) ? status.day1 + ";" + status.day2 :
              (!rightCanDate &&  leftCanDate && isSplitScreen) ? ";" + status.day2 :
              ( rightCanDate && !leftCanDate && isSplitScreen) ? status.day1 : undefined;

      zoom  = status.zoom ;
      lat   = status.lat.toFixed(5);
      lng   = status.lng.toFixed(5);
      lat   = (lat < 0) ? "S" + abs(lat) : "N" + abs(lat);
      lng   = (lng < 0) ? "W" + abs(lng) : "E" + abs(lng);
      fragment = [code, datum, [zoom, lat, lng].join("-")].join("/");

      perma.text(text + fragment);
      perma.attr("href", link + fragment);
      perma.attr("title", title + fragment);

    },
    setMarker : function(map, lat, lng, feat){

      var mapX = (map === mapR.map) ? mapR : mapL,
          idx  = (map === mapR.map) ? 0 : 1;

      // console.log("setM", wikiMarkers, idx, lat, lng, feat);

      if (wikiMarkers[idx]) {
        mapX.map.removeLayer(wikiMarkers[idx]);
        wikiMarkers[idx] = null;
      }

      if (feat) {

        wikiMarkers[idx] = L.marker([lat, lng], {
            icon: new L.Label({className: 'aio-label-marker-wiki', html: feat || "name me"}),
            clickable: true
          }).addTo(mapX.map);

        wikiMarkers[idx].on("click", function(){
            // console.log(wikiMarkers[idx]);
            // mapX.ctrls.coords.expand(wikiMarkers[idx]);
          });

        if (idx === 0){status.place = feat;}

        return wikiMarkers[idx];

      }

    },
    getCenter: function(map){

      var prj = map.options.crs.projection,
          sw  = map.getBounds()._southWest,
          ne  = map.getBounds()._northEast,
          psw = prj.project(sw),
          pne = prj.project(ne),
          x   = psw.x + (pne.x - psw.x)/2,
          y   = psw.y + (pne.y - psw.y)/2;

      return prj.unproject({x:x, y:y});

    },
    initMarker : function(){
      if (status.place) {
        self.setMarker(mapR.map, status.lat, status.lng, status.place);
        self.setMarker(mapL.map, status.lat, status.lng, status.place);
      }

    },
    updateAttribution : function(){

      // var rightAttr = "", leftAttr = "";

      // rightAttr = Layers.byIndex(status.lay1[0]).attribution;
      // leftAttr = Layers.byIndex(status.lay2[0]).attribution;

      // mapR.attribution._attributions = [];
      // mapL.attribution._attributions = [];
      // mapR.attribution.addAttribution(rightAttr);
      // mapL.attribution.addAttribution(leftAttr);

    },
    changeTime : function(cal, stamp){

      var mapX  = (cal.side === "right") ? mapR : mapL,
          dayX  = (cal.side === "right") ? "day1" : "day2",
          res   = mapX.timeRange.resolution(),
          base  = (cal.side === "right") ?
            Layers.byIndex(status.lay1[0]) :
            Layers.byIndex(status.lay2[0]),
          token = (cal.side === "right") ? base.key : base.name;

      status[dayX] = stamp.toIso(res);
      if (!!base.timeRange){mapX.list[token].redraw();}
      H.each(mapX.overs, function(a, o){
        o.updateTime(stamp);
      });

      self.updateTime();
      self.updatePerma();

    },
    updateTime : function(){

      var rightCanDate, leftCanDate, res, iso;

      mapR.timeRange = new TimeRange();
      mapL.timeRange = new TimeRange();

      status.lay1.forEach(function(idx){
        var l = Layers.byIndex(idx);
        if(!!l.timeRange){
          rightCanDate = true;
          mapR.timeRange.push(l.timeRange);
        }
      });

      status.lay2.forEach(function(idx){
        var l = Layers.byIndex(idx);
        if(!!l.timeRange){
          leftCanDate = true;
          mapL.timeRange.push(l.timeRange);
        }
      });

      if (rightCanDate) {
        status.day1 = status.day1 || utc().toIso();
        res = mapR.timeRange.resolution();
        iso = (res < 4) ?  utc(status.day1).toIso(res) : utc(status.day1).format("%Y-%m-%d %Hh");
        mapR.ctrls.calendar.updateDisplay(iso);
        mapR.ctrls.calendar.updateRange(mapR.timeRange, utc(status.day1));
      }
      mapR.ctrls.calendar._container.style.visibility = rightCanDate ? "visible" : "hidden";

      if (leftCanDate) {
        status.day2 = status.day2 || utc().toIso();
        res = mapL.timeRange.resolution();
        iso = (res < 4) ?  utc(status.day2).toIso(res) : utc(status.day2).format("%Y-%m-%d %Hh");
        mapL.ctrls.calendar.updateDisplay(iso);
        mapL.ctrls.calendar.updateRange(mapL.timeRange, utc(status.day2));
      }
      mapL.ctrls.calendar._container.style.visibility = leftCanDate  ? "visible" : "hidden";

      mapR.timeRange.log();

      // console.log ("updateTime.out", status.lay1.map(function(idx){ return Layers.byIndex(idx).key;}));

    },
    initOverlays: function(){ // only onload

      status.lay1.slice(1).forEach(function(idx){
        self.changeOverlay(mapR.map, Layers.byIndex(idx).key, true, true);
      });

      status.lay2.slice(1).forEach(function(idx){
        self.changeOverlay(mapL.map, Layers.byIndex(idx).key, true, true);
      });

    },
    toggleOverlay: function (layers, key){
      var idx = Layers.byKey(key).index, pos = layers.indexOf(idx);
      if (pos === -1) {layers.push(idx);}
      else {layers.splice(pos, 1);}
    },
    changeOverlay : function(map, key, onoff, silent){

      // console.log("toggleOverlay", key, ">", onoff);

      var layer   = Layers.byKey(key),
          layers  = (map === mapR.map) ? status.lay1  : status.lay2,
          day     = (map === mapR.map) ? status.day1  : status.day2,
          overs   = (map === mapR.map) ? mapR.overs  : mapL.overs,
          ctrlLayers = (map === mapR.map) ? mapR.ctrls.layers : mapL.ctrls.layers;

      if (onoff) {
        switch (layer.type) {
          case "map-overlay"    :
          case "wms-overlay"    : overs[key] = layer.getTL(layer.key, layer.zoom).addTo(map);   break;
          case 'image-overlay'  : overs[key] = new L.TimeOverlay(layer, utc(day)).addTo(map);   break;
          case 'sim-overlay'    : overs[key] = new L.SimOverlay(layer, utc(day)).addTo(map);    break;
          case "marker-overlay" : overs[key] = new L.MarkerOverlay(layer).addTo(map);           break;
          default:                throw new Error("Unknown Layer Type: " + key);
        }
      } else {
        map.removeLayer(overs[key]);
        delete overs[key];
      }

      if (map === mapR.map) {
        mapR.ctrls.layers._overlays[key] = onoff;
      }

      if (!silent){
        self.toggleOverlay(layers, key);
        self.updateTime();
        self.updateAttribution();
        self.updatePerma();
      }

      ctrlLayers.update();

    },
    changeBase : function(map, newKey, forceSilent){

      // TODO:  check allowed overlays if short switch
      //        make sure date is appropiate if short switch

      forceSilent = (typeof forceSilent === "undefined") ? false : true;

      var newCrsTL, othCrsTL, crsZoomMin, crsZoomMax, curZoom, othZoom,
          side      = (map === mapR.map) ? "right"     : "left",
          curMap    = (map === mapR.map) ? mapR.map    : mapL.map,
          othMap    = (map === mapR.map) ? mapL.map    : mapR.map,
          curList   = (map === mapR.map) ? mapR.list   : mapL.list,
          othList   = (map === mapR.map) ? mapL.list   : mapR.list,
          curLayers = (map === mapR.map) ? status.lay1 : status.lay2,
          othLayers = (map === mapR.map) ? status.lay2 : status.lay1,

          othLay    = Layers.byIndex(othLayers[0]),
          curLay    = Layers.byIndex(curLayers[0]),
          newLay    = Layers.byKey(newKey),

          newCrs    = Crs[newLay.epsg](newLay.zoom),
          curCrs    = Crs[curLay.epsg](curLay.zoom),

          curToken  = (map === mapR.map) ? curLay.key  : curLay.name,
          othToken  = (map === mapR.map) ? othLay.name : othLay.key,
          newToken  = (map === mapR.map) ? newLay.key  : newLay.name,

          llzoom    = newLay.latlngzoom,

          prevFade  = curMap.options.fadeAnimation,
          prevZoom  = curMap.options.zoomAnimation,

          fnDate = (map === mapR.map) ?
              function(){return MAPS.status.day1;} :
              function(){return MAPS.status.day2;};

      function getMaskCrsTLForMap(key, map){

        var layMask = Layers.byKey("arc-data"),
            zoom   = (key === "arc-data") ? layMask.zoom : layMask.zoomAlt,
            fnDate = (map === mapR.map) ?
              function(){return MAPS.status.day1;} :
              function(){return MAPS.status.day2;};

        return [Crs["3413"](zoom), layMask.getTL("arc-data", zoom, fnDate)];
      }

      // DEBUG && console.log("");
      DEBUG && console.log("Stat0", curLay.key, ">", newKey, curLay.epsg, ">", newLay.epsg);

      if (curLay.key === newKey && !forceSilent) {

        // console.log("Stat0a", forceSilent, curLay.key, "=", newKey, curLay.epsg, ">", newLay.epsg);
        return;

      } else if (newLay.epsg === curLay.epsg || forceSilent){

        // console.log("--Stat0b.in", forceSilent, curLay.key, "=", newKey, curLay.epsg, ">", newLay.epsg);
        // self.deb();

        newCrsTL = (newKey === "arc-data") ?
          getMaskCrsTLForMap(othLay.key, othMap) :
          [Crs[newLay.epsg](newLay.zoom), newLay.getTL(newKey, newLay.zoom, fnDate)];

        othCrsTL = (othLay.key === "arc-data") ?
          getMaskCrsTLForMap(newKey, curMap) : [] ;

        mapR.map.sync();
        mapL.map.sync();

        // console.log("--Stat0b.before", side, status.lay1, status.lay2);
        // replace base map in status
        // curLayers.splice(0, 1);
        // curLayers.unshift(newLay.index);
        curLayers[0] = newLay.index;

        // if (map === mapR.map) {mapR.ctrls.layers.updateActiveLayer(newKey);}

        // remove unsupported overlays
        curLayers.slice(1).forEach(function(idx){

          var key = Layers.byIndex(idx).key;

          if (H.contains(newLay.overlays, key)) {
            self.changeOverlay(curMap, key, false, true);
            self.toggleOverlay(curLayers, key);

          } else {
            mapR.ctrls.layers._overlays[key] = true;

          }

          // if (newLay.overlays.indexOf(key) === -1){
          // } else {
          // }
        });

        if (isSplitScreen){
          crsZoomMin = Math.max(curMap.options.crs.options.zoomInfo.min, othMap.options.crs.options.zoomInfo.min);
          crsZoomMax = Math.min(curMap.options.crs.options.zoomInfo.max, othMap.options.crs.options.zoomInfo.max);
        } else {
          crsZoomMin = curMap.options.crs.options.zoomInfo.min;
          crsZoomMax = curMap.options.crs.options.zoomInfo.max;
        }
        status.zoom = H.bounds(status.zoom + curMap.options.crs.options.zoomInfo.min, crsZoomMin, crsZoomMax) - curMap.options.crs.options.zoomInfo.min;

        ignore.events = true;
        // remove old, add new
        curMap.removeLayer(curList[curToken]);
        curMap.options.crs = newCrsTL[0];
        curMap.addLayer(newCrsTL[1]);
        curList[newToken] = newCrsTL[1];

        // console.log("--after", side, status.lay1, status.lay2);

        // self.deb();

        if (othCrsTL.length) { // choose arc-data with better zoom support if applicable
          othMap.removeLayer(othList[othToken]);
          othMap.options.crs = othCrsTL[0];
          othMap.addLayer(othCrsTL[1]);
          othList[othToken] = othCrsTL[1];
          // self.deb();
        }
        ignore.events = false;

        othZoom = status.zoom //- othMap.options.crs.options.zoomInfo.min;
        curZoom = status.zoom //- curMap.options.crs.options.zoomInfo.min;
        othMap.setView([status.lat, status.lng], othZoom, {reset: true, animate: false, zoom: false});
        curMap.setView([status.lat, status.lng], curZoom, {reset: true, animate: false, zoom: false});

        if (map === mapR.map) {mapR.ctrls.layers.updateActiveLayer(newKey);}

        // console.log("--Stat0b.done", "r", H.countAttrs(mapR.map._layers), "l", H.countAttrs(mapR.map._layers));

        if (forceSilent){return;}

      } else { // happens only on right map, different EPSG

        // console.log("Stat0c.in ", forceSilent, curLay.key, "=", newKey, curLay.epsg, ">", newLay.epsg);

        // remove unsupported overlays
        curLayers.slice(1).forEach(function(idx){
          var key = Layers.byIndex(idx).key;
          if (newLay.overlays.indexOf(key) === -1){
            self.changeOverlay(curMap, key, false, true);
            self.toggleOverlay(curLayers, key);
          } else {
            mapR.ctrls.layers._overlays[key] = true;
          }
        });

        // // remove all overlays on right
        // status.lay1.slice(1).forEach(function(idx){
        //   var key = Layers.byIndex(idx).key;
        //   self.changeOverlay(mapR.map, key, false, true);
        // });

        // // strip overlays, check date and set default coords from layer
        // status.lay1 = status.lay1.slice(0, 1);
        // status.lay2 = status.lay2.slice(0, 1);

        if (newLay.timeRange){
          status.day2 = status.day1 = newLay.timeRange.latest();  // search last date
        } else {
          status.day1 = "";
          status.day2 = "";
        }

        if (newCrs.options.domain !== curCrs.options.domain) {
          status.lat  = llzoom[0];
          status.lng  = llzoom[1];
          status.zoom = llzoom[2];
        }

        // console.log("Stat0c.did.zoom", status.zoom, status.lat, status.lng, status.day1, status.day2);

        self.changeBase(mapR.map, newKey, true);
        self.changeBase(mapL.map, newKey, true);

        self.prepBaseList("left");
        self.updateControls("left");
        mapR.ctrls.layers.update();

        // console.log("Stat0c.done");
      }

      self.updateSplitScreen(isSplitScreen);
      self.updateTime();
      self.updateAttribution();
      self.updatePerma();

    },
    prepBaseList: function(side){

      var base   = (side === "right") ?
            Layers.byIndex(status.lay1[0]) :
            Layers.byIndex(status.lay2[0]),
          mapX   = (side === "right") ? mapR   : mapL,
          dayX   = (side === "right") ? "day1" : "day2",
          filter = (side === "right") ?
            function(l){return l.type === "base";} :
            function(l){return l.type === "base" && l.epsg === base.epsg;},
          layers = Layers.filter(filter),
          token;

      mapX.list = {};

      layers.forEach(function(l){
        token = (side === "right") ? l.key :  Layers.byKey(l.key).name;
        mapX.list[token] = l.getTL(l.key, l.zoom, function(){return MAPS.status[dayX];});
        mapX.list[token].options.side = side;
        mapX.list[token].options.timeRange = base.timeRange;
        mapX.list[token].options.key  = l.key;
      });

    },
    updateControls : function(side){

      var
        mapX  = (side === "right") ? mapR : mapL,
        indx  = (side === "right") ? status.lay1[0] : status.lay2[0],
        base  = Layers.byIndex(indx)
      ;

      mapX.ctrls.loader   = mapX.ctrls.loader   || new L.Control.Loading().addTo(mapX.map);
      mapX.ctrls.slider   = mapX.ctrls.slider   || new L.Control.Zoom().addTo(mapX.map);
      mapX.ctrls.recticle = mapX.ctrls.recticle || new L.Control.Recticle().addTo(mapX.map);
      mapX.ctrls.full     = mapX.ctrls.full     || new L.Control.FullScreen().addTo(mapX.map);
      mapX.ctrls.split    = mapX.ctrls.split    || new L.Control.SplitScreen().addTo(mapX.map);
      mapX.ctrls.coords   = mapX.ctrls.coords   || new L.control.coordinates().addTo(mapX.map);
      mapX.ctrls.calendar = mapX.ctrls.calendar || new L.Control.Calendar(utc(status.day1), {timeRange: base.timeRange}).addTo(mapX.map);
      mapX.ctrls.attribution = mapX.ctrls.attribution || new L.Control.Attribution({prefix: false}).addTo(mapX.map);

      if (mapX === mapR){
        mapR.ctrls.layers   = mapR.ctrls.layers || new L.Control.PrettyLayers(base.key).addTo(mapR.map).update();
      }

      if (mapX === mapL){
        mapL.ctrls.layers = mapL.ctrls.layers || new L.Control.SimpleLayers(mapL.list, null, {position: "topright"}).addTo(mapL.map);
        mapL.ctrls.layers.update = L.Util.falseFn;
        mapL.ctrls.cursor   = mapL.ctrls.cursor || new L.Control.SplitCursor().addTo(mapL.map);
      }

    },
    createMap : function(side){

      var
        mapX = (side === "right") ? mapR : mapL,
        base = (side === "right") ?
          Layers.byIndex(status.lay1[0]) :
          Layers.byIndex(status.lay2[0]),
        center = new L.LatLng(status.lat, status.lng),
        layers, name, key, zoom,
        $controlContainer
      ;

      zoom = H.clone(base.zoom); //zoomR.diff = layR.zoom.min;

      mapX.timeRange = base.timeRange || new TimeRange();

      // create actual map
      if (side === "right") {

        mapR.map = new L.Map('mapR', {
          side: "Right",
          tms: true,
          layers: [mapR.list[base.key]],
          crs: Crs[base.epsg](zoom, "mp-" + base.key),
          center: center,
          zoom: status.zoom - zoom.min,
          fullscreenControl: false,
          zoomControl: false,
          zoomsliderControl: false,
          calendarControl: false,
          trackResize: false,
          attributionControl: false
        });

        if ($(mapR.map._controlContainer).children().length < 5){
          $controlContainer = $(mapR.map._controlContainer);
          $controlContainer.append('<div class="leaflet-top leaflet-center"></div>');
          mapR.map._controlCorners.topcenter = $controlContainer.children('.leaflet-top.leaflet-center').first()[0];
        }

      } else {

        mapL.map = new L.Map('mapL', {
          side: "Left",
          layers: [mapL.list[base.name]],
          tms: true,
          crs: Crs[base.epsg](zoom, base.key),
          center: center,
          zoom: status.zoom - zoom.min,
          fullscreenControl: false,
          zoomControl: false,
          zoomsliderControl: false,
          calendarControl: false,
          trackResize: false,
          attributionControl: false
        });

        if ($(mapL.map._controlContainer).children().length < 5){
          $controlContainer = $(mapL.map._controlContainer);
          $controlContainer.append('<div class="leaflet-top leaflet-center"></div>');
          mapL.map._controlCorners.topcenter = $controlContainer.children('.leaflet-top.leaflet-center').first()[0];
        }

      }

    },

    changeSplitScreen : function(){
      isSplitScreen = !isSplitScreen;
      self.updateSize();
      self.updateSplitScreen(isSplitScreen);
      // self.updateCalendar();
    },

    updateSplitScreen : function(){

      var latlng = new L.LatLng(status.lat, status.lng),
          zoomR  = status.zoom - mapR.map.options.crs.options.zoomInfo.min,
          zoomL  = status.zoom - mapL.map.options.crs.options.zoomInfo.min,
          isTouch = L.Browser.touch;

      // console.log("SS.in", "zoomL", zoomL, "zoomR", zoomR);

      mapR.map.sync();
      mapL.map.sync();

      mapL.ctrls.recticle._container.style.visibility = isSplitScreen ? "visible" : "hidden";
      mapL.ctrls.slider._container.style.visibility   = isSplitScreen ? "visible" : "hidden";
      mapL.ctrls.full._container.style.visibility     = isSplitScreen ? "visible" : "hidden";
      mapL.ctrls.split._container.style.visibility    = isSplitScreen ? "visible" : "hidden";

      // mapL.ctrls.coords._container.style.visibility   = isTouch ? "hidden" : isSplitScreen ? "hidden"  : "visible";
      mapL.ctrls.cursor._container.style.visibility   = isTouch ? "hidden" : isSplitScreen ? "visible" : "hidden";

      mapR.ctrls.recticle._container.style.visibility = isSplitScreen ? "hidden"  : "visible";
      mapR.ctrls.slider._container.style.visibility   = isSplitScreen ? "hidden"  : "visible";
      mapR.ctrls.full._container.style.visibility     = isSplitScreen ? "hidden"  : "visible";
      mapR.ctrls.split._container.style.visibility    = isSplitScreen ? "hidden"  : "visible";

      // mapR.ctrls.coords._container.style.visibility   = isTouch ? "hidden" : isSplitScreen ? "visible" : "hidden";

      if (!isSplitScreen){
        mapL.ctrls.cursor.deactivate();

      } else {
        mapL.map.setView([ 0, 0] , 0, {reset: true, animate: false, zoom: false});
        mapR.map.sync(mapL.map);
        mapL.map.sync(mapR.map);
        mapL.map.setView(latlng , zoomL, {reset: true, animate: false, zoom: false});
        mapR.map.setView(latlng , zoomR, {reset: true, animate: false, zoom: false});

      }

      // console.log("SS.out", "LZ", zoomL, "RR", zoomR);

    },
    activateMap : function(side, activate){

      var map = (side === "right") ? mapR.map : mapL.map,
          ignoreMap = null;

      activate = (typeof activate === "undefined") ? true : false;

      function getMapX(e){
        return $(e.target._container).attr("id") === "mapR" ? mapR : mapL;
      }

      function otherMap(map){
        return (map === mapR.map) ? mapL.map : mapR.map;
      }

      function coords(map){
        var c = map.getCenter();
        return c.lng + ", " + c.lat + ", " + map.getZoom();
      }

      function onMapMouseMove(e, map, side) {
          console.log("EVENT." + side + ".move: " + e.latlng);
      }

      function onMapZoomStart(e, map, side) {

        // console.log(side, mapL.map._animateToCenter, mapR.map._animateToCenter);
        // console.log("Start", e);
      }

      function onMapZoomEnd(e) {

        var
          mapX = getMapX(e),
          lay  = Layers.byIndex((mapX === mapR) ? status.lay1[0] : status.lay2[0]),
          zoom = lay.zoom,
          key  = lay.key
        ;

        if (!ignore.events){
          status.zoom = mapX.map.getZoom() //+ mapX.map.options.crs.options.zoomInfo.min;
          self.updatePerma();
        }

        // console.log("EVENT.zoom.end", mapX.map.options.side, key, "st", status.zoom, "map", mapX.map.getZoom(), JSON.stringify(zoom));

      }
      function onMapMoveEnd(e) {

        var mapX = getMapX(e), c = mapX.map.getCenter();

        if (!ignore.events){
          status.lng = c.lng;
          status.lat = c.lat;
          self.geocode();
          self.updatePerma();
        }

      }
      function onMapDragEnd(e, map, side) {
          // console.log("EVENT." + side + ".drag z:" + map.getZoom(), "ll", coords(map));
      }
      function onMapResize(e, map, side) {
          // console.log("EVENT." + side + ".resize w/h:", e.newSize.x, e.newSize.y);
      }

      // function onLayerAdd(e, map, side) {
      //     // console.log("EVENT." + side + ".addLayer :", e.layer);
      //     // if (side === "right"){mapR.layer = e.layer}
      //     if (side === "left") {
      //       // var layRight = Layers.byIndex(status.layers[0]),
      //       //     layLeft  = Layers.byKey(e.layer.options.key),
      //       //     realZoom = status.zoom - layRight.zoomDiff;
      //       //     newZoom = realZoom + layLeft.zoomDiff;
      //       // if (map.getZoom() !== newZoom) {
      //       //   map.setZoom(newZoom);
      //       //   console.log("Left Zoom:", newZoom);
      //       // }
      //     }
      // }

      // function onLayerRemove(e, map, side) {
      //     // console.log("EVENT." + side + ".layerremove :", e.layer);
      //     // if (side === "left") {mapL.layer = e.layer}
      //     // if (side === "right"){mapR.layer = e.layer}
      // }

      function onMouseOver(e) {
          var mapX = getMapX(e);
          // mapX.ctrls.coords._container.style.visibility = "visible";
          // mapX.ctrls.scale._container.style.visibility = "visible";
          // console.log("EVENT." + side + ".over:");
      }
      function onMouseOut(e) {
          var mapX = getMapX(e);
          // mapX.ctrls.coords._container.style.visibility = "hidden";
          // mapX.ctrls.scale._container.style.visibility = "hidden";
          // console.log("EVENT." + side + ".out:");
      }

      function onLayerRemove(e){
        var mapX = getMapX(e);
        // console.log("onLayerRemove", mapX.map.options.side, e.layer.key);
      }

      function onLayerAdd(e){
        var mapX = getMapX(e);
        // console.log("onLayerAdd", mapX.map.options.side, e.layer.key);
      }

      if (activate) {
        map.on('zoomend',       onMapZoomEnd);
        map.on('moveend',       onMapMoveEnd);
        map.on('dragend',       onMapDragEnd);
        map.on('resize',        onMapResize);
        map.on('layeradd',      onLayerAdd);
        map.on('mouseover',     onMouseOver);
        map.on('mouseout',      onMouseOut);
        map.on('layerremove',   onLayerRemove);
        map.on('layeradd',      onLayerAdd);
      } else {
        map.off('zoomend',        onMapZoomEnd);
        map.off('moveend',        onMapMoveEnd);
        map.off('dragend',        onMapDragEnd);
        map.off('resize',         onMapResize);
        map.off('layeradd',       onLayerAdd);
        map.off('mouseover',      onMouseOver);
        map.off('mouseout',       onMouseOut);
        map.off('layerremove',    onLayerRemove);
        map.off('layeradd',       onLayerAdd);
      }

    }
    // addLabel : function(lng, lat, html, map){
    //   // http://leafletjs.com/reference.html#divicon
    //   L.marker([lng, lat], {
    //     icon: new L.Label({className: 'aio-label-marker-red', html: html}),
    //     clickable: false
    //   }).addTo(map || mapR.map);

    //   if (isSplitScreen){
    //     L.marker([lng, lat], {
    //       icon: new L.Label({className: 'aio-label-marker-red', html: html}),
    //       clickable: false
    //     }).addTo(map || mapL.map);
    //   }
    // },

    // addAMSR : function(){

    //   var imageUrl = '/overlays/amsr2/Arc_20131004_res3.125.crop.png',
    //       imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]],
    //                    // left           up         right         down
    //       imageBounds = [[168.35, 34.36], [102.34, 31.00]];

    //   return L.imageOverlay(imageUrl, imageBounds).addTo(mapR.map);

    // /*
    //   noiv
    //   L.ImageOverlay is HACKT in SRC !!!!!!!!!!!!!!!!!!!!!!!!!
    //   i = L.imageOverlay('/overlays/amsr2/Arc_20131004_res3.125.crop.png', [[31.00, 168.35], [34.36, -9.98]], {opacity:0.5}).addTo(MAPS.right.map);
    //   MAPS.right.map.removeLayer(i)
    // */

    // }

  };

}()).boot();

redpajama_set_name: RedPajamaGithub


Venezuela state-owned oil company PDVSA has started production from a new well in the onshore Javilla field.
PDVSA began output from well JAV-0001 on 9 February, with flows at 500,000 cubic feet per day of natural gas.
The well start-up comes against the backdrop of continued output decline in the Opec member nation, with one analysis company suggesting production could fall below 700,000 barrels per day of oil next year.
A new report from Norwegian consultancy Rystad Energy estimates that if political turmoil continues and Venezuela is unable to offset the effects of US sanctions and secure new financing, the country could see production falling to about 800,000 bpd this year before sliding to 680,000 bpd in 2020.
Venezuela's oil production stood at 1.34 million bpd at the end of 2018, down from 2.4 million bpd in 2015, and the free fall is poised to carry over into this year, according to Rystad.
In the event of a change in regime where the US would lift economic sanctions if the leader of the opposition-controlled National Assembly Juan Guaido takes power in an interim basis, Rystad estimates the country would be able to slow the downward trend, with production dropping to 1.11 million bpd this year and on to 1.06 million bpd the following year.
In a press conference last Friday at the Miraflores presidential palace in Caracas, Venezuelan President Nicolas Maduro said the country has plans to face the blockade imposed by the US on PDVSA, but declined to give details.
"Our struggle is for the fate of humanity in this century. No matter how much oil costs, it is ours and no one is going to take it from us," he said.
Venezuela is home to the world's largest proven oil reserves of about 300 billion barrels.


text:
Antilopa gnu sau gnuul este o antilopă din genul Connochaetes al familiei bovidelor. Acest gen include două specii, amândouă viețuind în câmpiile Africii Subsahariene: gnu negru (Connochaetes gnou) și gnu albastru (Connochaetes taurinus). Arealul gnuului negru se află la sud de cel al gnuului albastru. Numele acestei specii provine conform unora dintre surse din limba poporului african khoikhoi.

Ambele specii sunt niște paricopitate cenușii-brune, cu coarne, asemătoare cu vitele. Masculii sunt mai mari decât femelele și ambele sexe au partea anterioară mai masivă decât cea posterioară. Gnuul albastru este mai mare decât cel negru. Masculii acestei specii ajung la înălțimea la greabăn de 150 cm și cântăresc în jur de 250 kg, pe când masculii gnuului negru au înălțimea de 110 - 120 cm și greutatea de 180 kg. Gnuul poate trăi până la 40 de ani, deși durata medie de viață este în jur de 20 de ani.

Cercetarea fosilelor sugerează că aceste două specii s-au diferențiat cu un milion de ani în urmă, când gnuul albastru a rămas în arealul originar și s-a schimbat foarte puțin față de specia inițială, pe când gnuul negru s-a schimbat mai mult, adaptându-se la landșafturile ierboase deschise din sud. Deosebirile cele mai evidente dintre cele două specii se referă la colorația lor și orientarea coarnelor.

În Africa de Est gnuul albastru este cea mai răspândită specie de vânat mare: unele populații efectuează migrații anuale spre pășuni noi, însă gnuul negru este pur și simplu nomad. Ambele specii se reproduc în cursul unei perioade scurte la sfârșitul sezonului ploios și puii devin în scurt timp activi și capabili să urmeze turma, ceea ce este necesar pentru supraviețuirea lor. Totuși unii cad pradă carnivorelor mari, mai ales hienei pătate.

Antilopele gnu deseori pasc împreună cu zebrele, ceea ce le sporește posibilitățile de a detecta prădătorii potențiali. De asemenea sunt atente la semnalele de avertizare emise de alte animale, precum babuinii. Aceste antilope sunt o atracție turistică, dar concurează pentru pășuni cu vitele domestice și sunt uneori învinuite de fermieri că ar transmite boli și paraziți vitelor cornute mari. Uneori devin victime ale braconajului, dar numărul lor este destul de stabil și unele populații trăiesc în parcuri naționale sau pe terenuri private. Uniunea Internațională pentru Conservarea Naturii consideră amândouă speciile ca prezentând risc scăzut.

Note

Legături externe

 Information and Research on wildebeest movements in Masai Mara
 Actual Live Wildebeest Migration
 Youtube: Wildebeest loses to hyena
 Information at ITIS

Mamifere din Africa
Bovidae
Mamifere erbivore

redpajama_set_name: RedPajamaWikipedia


text:
The Codex
Suggest an Addition
http://www.collective-evolution.com/
Collection Evolution is heavy on pseudoscience, conspiracy theories, faddish diet advice and astrology.
Some examples of topics that they cover thoroughly:
"False-Flag" Operations and Shadow Governments
http://www.collective-evolution.com/2016/09/27/false-flag-terrorism-a-history-of-lies-deception-explained-in-a-16-minute-video-911-isnt-the-only-example/
http://www.collective-evolution.com/2016/10/18/15-quotes-on-false-flag-terrorism-the-secret-government-that-will-make-you-rethink-your-patriotism/
Aliens on Earth
http://www.collective-evolution.com/2013/09/11/exploring-et-intervention-on-earth/
http://www.collective-evolution.com/2016/09/11/how-false-flag-terrorism-religion-are-being-used-as-a-means-for-control/
http://www.collective-evolution.com/2016/10/27/is-a-false-flag-alien-invasion-in-the-works-wernher-von-bruans-colleague-seems-to-think-so/
http://www.collective-evolution.com/2015/11/10/the-most-commonly-reported-extraterrestrials-by-contactees-abductees-experiencers/
Reptilian Overlords
http://www.collective-evolution.com/2013/10/17/david-ickes-theory-of-the-reptilian-human-hybrid-apocalypse/
http://www.collective-evolution.com/2010/04/16/david-icke-virtual-reality-and-how-reptilians-shut-down-humanity/
http://www.collective-evolution.com/2013/10/27/russell-brand-speaks-of-reptilian-overlords-spiritual-revolution-the-illuminati/
http://www.collective-evolution.com/2017/02/13/the-naga-reptilian-type-beings-featured-in-many-cultures-around-the-world/
http://www.collective-evolution.com/2013/09/05/insiders-speak-out-the-secret-workings-of-the-illuminati/
http://www.collective-evolution.com/2017/02/06/illuminati-super-bowl-commercial-attempts-to-mock-something-very-real/
More information on Collective Evolution:
Collective Evolution - RationalWiki (rationalwiki.org) Collective-Evolution (mediabiasfactcheck.com) What Does Collective Evolution's Joe Martino Want From Science? (inverse.com) "Collective Evolution" Gets Banned From Reddit | Debunking Denialism (debunkingdenialism.com)
Collective Evolution Recent Headlines: (fetched: January 16, 2022, 9:26 pm)
Your Life Is Not Limited To One Path A Simple Process You Can Use To Stay Calm & Present Throughout The Day Are You Tired Of Being Angry At The State Of The World? *Attention* Looking For Our News Articles: We've Moved Our Journalism To The Pulse To Those Who Feel Unheard & Misunderstood Test Your Ability to Discover Truth How The Media Is Creating A Sensemaking Crisis Mercury Retrograde In Libra: Relationship Changes How To Have Your Own Personal Zen Master Around Anytime You Descend Into Stress Gratitude Can Literally Change Your Heart & The Molecular Structure Of Your Brain
WHOIS Info: (fetched December 26, 2021, 4:28 am)
Domain Change Date 2021-06-13
Domain Creation Date 2009-06-17
Domain Registrar Namespro Solutions Inc.
A domain's WHOIS records theoretically reveal who owns the domain. In reality, virtually all of these sites have hidden or false ownership information. The "creation date" value can be helpful in determining the true age of a site.
+ Show Full WHOIS Record
Domain Name: COLLECTIVE-EVOLUTION.COM
Registrar WHOIS Server: whois.namespro.ca
Registrar URL: http://www.namespro.ca
Registrar: Namespro Solutions Inc.
Registrar Abuse Contact Phone: 16046818007
Name Server: JEAN.NS.CLOUDFLARE.COM
© 2022 The Fake News Codex. All Rights Reserved. Created by Chris Herbert.

redpajama_set_name: RedPajamaCommonCrawl


So I learned this the hard way….On an Indian passport, don't do a double transit in Europe.
I booked the following routing on a cheapie $499 round trip to Turkey out of LAX.
LAX-FRA-IST and coming back IST-MUC-ZRH-LAX.
That's coming back via Munich and Zurich. Routing didn't ring any bells on anyone's end and it was sold as a valid ticket. In fact, it didn't even trigger any checks until I actually landed at Munich and am directed to clear immigration to access the flight to Zurich, which is considered a domestic hop.
Not having a visa to enter Europe, I had to purchase a new routing. Thankfully, there is a flight out of Munich to LAX, and amazingly enough a new ticket cost about $300 at the service desk. In the end, not a terribly expensive lesson but considering it was a $499 ticket to begin with, relatively expensive. That could have gone up by multiples had I not been traveling solo.
Thankfully it didn't ruin what was an amazing trip….a minor sting and a good lesson. I actually already managed to save a friend of mine who booked a similar routing and was still in his 24 hour window to cancel, which he promptly did and rebooked a different route. Here's hoping this post saves someone from any additional grief…..
Previous Post What happened to India being included in the Global Entry program??


This handmade moldavite and .925 sterling silver pendant features a beautifully delicate wire wrap design. The moldavite is a dark green glassy stone that is the result of a meteorite impact.
This handmade moldavite and .925 sterling silver pendant features a beautifully delicate wire wrap design. The moldavite is a dark green glassy stone that is the result of a meteorite impact. The moldavite in this pendant has been left in its raw formation that has a very unique porous texture. The moldavite is wrapped with .925 sterling silver wire that has wave and swirl designs. The bail of the pendant is large, allowing it to fit easily onto most chains or cords (not included).
This petite pendant measures approximately 1.28″ long including the bail. The pendant measures approximately 0.78″ wide. Please note that the dime is not included but is shown to help you gauge the size of the pendant.
This pendant would be a great gift for any moldavite collectors, as well as any science or astronomy students! This brand new pendant comes with our original store tags and gift box, great for giving or storage for years to come.


text:
Education department proposes looser oversight of accreditation for federal financial aid
Institutions could soon have a lower barrier of entry to draw from $120 billion in annual federal student aid, according to newly proposed recommendations from the U.S. Department of Education. The potential changes would loosen federal oversight of accrediting agencies, giving those agencies the ability to approve more institutions to receive federal financial aid.
Bloomberg Government reports that stakeholders from colleges, student loan servicers, and students will debate these changes during January. If the representatives cannot come to an agreement on the proposed terms, the department will move along with its own.
Bloomberg Government says that, under the proposal:
Institutions that plan on becoming accreditors would potentially no longer be required to wait two years before applying for recognition;
Colleges would no longer need to receive advance approval from an accreditor when making changes; and
Accrediting agencies could skip sending annual reports to the Department of Education.
The proposal has been met with some pushback, however. Critics say that while the proposed changes are intended to create room for innovative educational models, but they don't sufficiently prioritize student outcomes.
"They are saying, Let's let accreditors and institutions innovate but without a way to measure quality and outcomes," Julie Peller, executive director of the nonpartisan advocacy organization Higher Learning Advocates, told The Chronicle of Higher Education.
U.S. Department of Education, Bloomberg Government, The Chronicle of Higher Education
Financial aid, Higher education, Policy
CA gov. seeks to boost colleges' funding—provided they close equity gaps
Georgetown reinforces its support for DACA
Who tends to pay for state lottery-funded scholarships? Lower-income families.
KIPP school network expands microgrant program to boost college completion
Leaders at the Knowledge is Power Program hope the grants will help prevent financial hardships from derailing students' degree pursuits.


text:
Home » Blog » Outside » Skiing » Ben & Jerry's Ice Cream named after Tahoe Pro Snowboarder Hannah Teter
Ben & Jerry's Ice Cream named after Tahoe Pro Snowboarder Hannah Teter
Slide over Wheaties.
To commemorate her ongoing humanitarian efforts in Africa, Ben & Jerry's has honored fellow Vermont native and gold medalist snowboarder Hannah Teter with its newest flavor, Maple Blondie.
It is the first flavor created for an athlete by the company.
As part of Ben & Jerry's social mission, a portion of the ice cream sales will benefit Hannah's Gold, Teter's charity that funds various projects in Kenya.
Made of rich and creamy maple ice cream with blonde brownie chunks and a maple caramel swirl, Hannah's Maple Blondie can be found nationwide at B&J Scoop Shops and grocery stores for a limited time only.
Besides her Vermont roots, Hannah was chosen for being a positive young role model for giving back to others less fortunate through her enterprise, Hannah's Gold. In 2006 she created Hannah's Gold, a Vermont maple syrup company that donates 100% of its profits to funding infrastructure and humanitarian needs in the African village of Kirindon in Kenya. To bolster the syrup profits, she also sells cotton/organic "Goodness" sweatbands and has donated all of her contest winnings to fund the ongoing projects in Kenya.
"We couldn't think of a better athlete or humanitarian to honor with a flavor this year," said Walt Freese, Chief Euphoria Officer of Ben & Jerry's. "Hannah's not only a Vermont star, but making a big impact on countless people in Kirindon that desperately need humanitarian help. We'll be cheering her on as she competes this winter and as she continues her important work in Africa."
Hannah grew up snowboarding in Vermont, and currently rides for Sierra-at-Tahoe in South Lake Tahoe. A gifted athlete, Hannah has many accomplishments under her belt. She won the Gold Medal in 2006 for the Women's Halfpipe in Torino, Italy, won three times at the 2005 X Games, and was nominated for three ESPY awards.
"I'm so amped to have my very own Ben & Jerry's flavor," said Hannah. "It's great to have support from my home state, and a cool way to further support Hannah's Gold and all the work we're doing in Kirindon, Kenya." Teter
For the past three years Hannah has helped support Kirindon with numerous projects including paying for school fees, providing farming tools, purchasing home base care kits for HIV patients, purchasing bicycles and much more. Now, she's committed to bringing safe drinking water and a sanitation system to the children of Kirindon, and you can help.
To date, Hannah's Gold has raised more than $150,000. Her goal is $300,000 and we're pretty sure she'll reach it.
Find out more about Hannah Teter and Hannah's Gold at hannahsgold.com, and consider making a donation or purchasing some syrup or sweatbands. And, look for the Maple Blondie at your favorite grocery store soon.
Thanks for Keepin' it Real Hannah!
Andrew McLean Dec 8 at Sawtooth RidgeGary Murphy, Tahoe's Legendary Snow Forecaster


Brian was later at a cottage in High St. Strathalbyn where he died on 5/3/1983 aged 55 years. lnterred at Centennial Park Cemetery, Adelaide SA.
By coincidence. his eldest son Brenton, was born on the same day date as Brenton's great uncle Robert (Bob) Keough, his second cousin Marie (Mrs Keller) and his grandfather Stanley Keough.
Four children - Brenton born 1956, Debra 1958, Bronwyn 1960 and Sharyn 1962 - all born in Strathalbyn.


text:
For Phil Davis, Anderson Silva is His Brazilian Trifecta
Erik Fontanez
Calling out your next opponent is good for business when in the fight game. The practice gets you noticed as a fighter, and draws intrigue from fans, foes, and executives making decisions on your next fight.
Phil Davis went all in with his post-fight interview at UFC 179 on Saturday night, applying his take on the call-out with a bold move in naming Anderson Silva.
"There's only one reason why I want to come back to Brazil, that's Anderson Silva," Davis said on the FOX post-fight show. "He would complete my Brazilian trifecta. He's the triple crown.
"I love the guy. He's a great fighter. [But] this is the fight game. He's the best there is. That's why I want to fight him."
Tough spot to be in for Davis, who'll have to wait until Silva is done fighting Nick Diaz on Jan. 31. Then, and only then, will he know if Silva would be up for a fight with him. Still, even then, Davis getting a fight with the former UFC middleweight champion is a long shot because fight bookings involving "Spider" consist of one of two scenarios at this point in his career: super fights (like the one with Diaz) or title fights.
Unfortunately for Davis, he is neither a title holder or a big enough name to be the other half of a super fight. Not quite yet, Phil.
Although he'll want to cap off his trifecta with a Silva clash, Davis will likely have to settle for someone else. But if he's so motivated to fight Brazilians in Brazil, Shogun Rua is scheduled to fight in two weeks. Once Rua gets through — win or lose — Jimi Manuwa, the timing for a match-up with with Davis might be just the right fit for both fighters. Rua will get a fight in his home country, and the "Brazilian Killer" will get a marquee fight with a legend of the sport to cap off his trifecta.
And with how often Davis has been competing in the South American country, it's not surprising that he's beginning to gather a following of the Brazilian kind.
"Brazil's been good to me," Davis said at the post-fight press conference. "I think [this time] I had a lot more fans here in Brazil."
(Follow @Erik_Fontanez on Twitter)
Follow MMAWeekly.com on Facebook, Twitter and Instagram.


The Festival is home to some fantastic competitions and challenges. The triathlon is one of the best courses on the calender, with a short version for beginners. The Salomon Trail Race is a beautiful race around Catbells or for a short burst up Latrigg try out the Latrigg Fell Race. The Sportive will be taking in some of the passes in the Lake District and the mountain bike trailquest will spin round some great bridleways in the Keswick area.


The main component of these tablets is citalopram HBr. Also this medical preparation contains some inactive components that are the following: copolyvidone, corn starch, magnesium strearate, glycerin, crosscarmellose sodium, lactose monohydrate, titanium dioxide and microcrystalline cellulose. Furthermore, all pills include iron oxides as the coloring agents in beige and pink capsules.
Celexa (Generic) 10mg -> payment VISA, MasterCard!
Celexa (Generic) 20mg -> payment VISA, MasterCard!
Celexa (Generic) 40mg -> payment VISA, MasterCard!
You may buy Celexa for the course of depression condition treatment. This medical agent may be also consumed for other purposes that aren't mentioned in the paragraph. If you want to be aware of other purposes you should call your healthcare expert and ask about it.
Fainting, fast heartbeats, headaches or severe dizziness.
This isn't the complete list of all undesirable reactions that can happen during the course of treatment.
You may get Celexa in drugstores for the reasonable price and of the high quality. Almost all online chemists have quick delivery and support services; that's why you shouldn't wait long before starting the course of treatment. Also, there are lots of pharmacies that sell this remedy totally without the prescription.
This medical agent is sold in the form of the tablets and other variants aren't available for the purchasing. As for the drug's dosage, the usual portion of Celexa can differ from 20 to 40mg that are used once a day. The medicament's dosage can be increased gradually and only if you consult with your medical expert about such a possibility.
Everyone looks for the answer to a question where to buy Celexa , but not each person finds it successfully. We are glad to offer you medicines of the best quality and good price with or without prescription. Delivery on all territory of USA, Canada and Europa.


We have released Jobs Notifier on March 11th, 2013, as a Free Android application, to allow job seekers especially in Lebanon, the Middle East and Gulf regions to find their future job. Job seekers will be able to search by keyword for any job, and they will receive the result of their search directly. Then they can view the details of the job, and apply through the original site.
They also have the option to schedule future notifications to be automatically notified, onto their Android phone, of future vacancies matching their search keywords every 30 mins, 1, 2, 4 hours, or once a day.
The solution works by connecting to different jobs boards (of which currently it connects to HireLebanese.com, a well known job board in Lebanon) and grabs information from it, and allows job seekers to apply directly to the site. Following steps we will also incorporate other job boards and recruitment agencies to the application (if you know of any who are interested to be part, shoot us an email at info@lebhr.com) , in addition to many other enhancements to be added making the recruitment experience of job seekers an easier ride.
We hope this application brings to job seekers the intended help and assistance, and hence ease up the task of finding the dream job!
Feel free to download the application from this link Jobs Notifier if you have an android mobile phone, we would love to hear back from your end. Also feel free to share with job seekers, and let us hear from you!


text:
Documenting Houston's Townhousification, One Tweet at a Time
DOCUMENTING HOUSTON'S TOWNHOUSIFICATION, ONE TWEET AT A TIME While you're waiting for Kuukibot's polite but insistent stream of air toxics tweets to come back, another Houston-obsessed account has just hit the Twittersphere — this one documenting the city's infill development, as evidenced by daily before-and-after shots pulled from Google Streetview (like the 2-house-t0-7-townhome transition shown above, from near the intersection of Gibson and Snover streets in Brunner). The account's Philadelphia-based author (who's looking for submissions, by the way) points to the 1999 changes in minimum lot size requirements as the catalyst for the subsequent waves of tightly-packed townhouse do-overs in previously large-lot neighborhoods around town, as explained by Daniel Hertz earlier this summer: Hertz writes that the decision to allow lots as small as 1,400 sq.ft. within the Inner Loop (a decree later expanded city-wide in 2013) allowed the building of way more housing stock in the city's core without a switch to multifamily-style buildings. "An important research project in the coming years ," Hertz notes, "will be to see if Houston's willingness to allow more housing—and especially missing middle housing—in the center of a growing metropolitan area can reduce the growth of housing prices and keep neighborhoods more diverse and affordable than they would otherwise be." [City Observatory] Screenshot of Densifying Houston tweet: @densifyingHOU
Brunner, Demolition, Google Maps, Houston Heights, New Construction, Prevailing Lot Size, Tools, Townhomes
Appeals Court: TxDOT Can't Limit Ron Paul Sign, Any Other Advertising Billboards
New Hope Dashed to Bits at Goliad and Crockett
James McDonald August 31, 2016 at 4:19 pm
Snover is not in Rice Military
Christine Gerbode August 31, 2016 at 4:34 pm
Thanks, James! Good catch!
Corbin September 3, 2016 at 2:00 am
In case you're interested in that before/after Google street view—it's here:
https://www.google.com/maps/@29.7668739,-95.4040756,3a,75y,17.62h,94.8t/data=!3m7!1e1!3m5!1swvrLFowRiD1li8YoeOAkeA!2e0!5s20110401T000000!7i13312!8i6656!6m1!1e1
(click the box in the upper left coroner to switch between dates)
oops, meant upper left *corner*
…though "coroner" was oddly fitting!
Nabbing an Empty Parking Spot Across the Street from the Oaks on Caroline Condos
Fort Bend ISD Won't Build New School On Top of the Graveyard It Accidentally Dug Up Last Summer
11th St. Roadway Surface Could Soon Be Redecorated


We are currently recruiting for Postgraduate and Masters level students to fill 70 places across our UCD Smurfit Business school programmes. All-inclusive bursary paid with international work experience with some of the world's largest brand.
Bord Bia's Talent Programmes are key to providing education, development and a continual delivery of high-quality talent to the food and drink industry.


Worked on Linux day 1.
Don't these normally have im@ses on them? Namco betraying its own girls.
Wow Rin is so modern.
Nozomi goes the slowest because she's no zoomy.
even between the planes that clearly have one engine and the planes that clearly have two engines?


So, yeah, it's Day 2 of Bike to Work Week, but today was my first ride. Sorry – was not going to ride in the slush yesterday. You can call me a wimp, but only if you were out there cycling in western Nebraska yesterday.
My commute is 5.4 miles one way. On the way to work, it's typically uphill (230 feet of climb all told) and into the wind. Wind measurements said it was only about 9 mph this morning, but it sure felt like more than that headed towards Mitchell Pass (on the Oregon Trail, baby! – history geek bikers: eat your heart out).
It took me 35 minutes to get to work.
I did not clock the time, but it was not likely much better.
Sure, it was downhill, but I was bucking north-northwest winds of 16 mph gusting to 30.
I tried to beat a rain cloud home. Partly succeeded, but wound up with wobbly legs.
We'll see how tomorrow goes!
PS – If you are in the Wyobraksa area, and you are reading this during Bike to Work Week, have you signed up for the WNBC BTWW?
I was supposed to run 18 miles this weekend, decided to shoot for 13 because of muscle pain, but wound up being able to tolerate 15.5. Granted, it was a very slow 15.5, but distance is distance, no matter how slow!
It's still a mystery to me the variables that affect my running.
I suppose my pace was slowed a little because of the scenery. Sometimes you just have to stop and take a photo.
Me and Bugman, on a Scotts Bluff National Monument pathway. Sometimes I have to pinch myself to be sure I am not dreaming and that I truly live only 5 miles from scenery this beautiful.
We weren't the only ones tackling Mitchell Pass on the Oregon Trail that day. At the crest of the hill in this photo is a tiny dot that is actually another runner – behind him, a cyclist. This is part of the course for the Monument Marathon (and half), which will be held Sept. 28 this year. Registration deadline is Sept. 15!!
An ornate box turtle!! First one I've seen! Found this little guy on the canal road north of Scotts Bluff National Monument.
Homemade waffles made with locally-grown wheat flour that is coarse ground and kind of crunchy, topped with butter and stewed garden tomatoes (no additives, just cooked-down tomato goodness), topped with shredded Meadowlark goat cheddar from Victory Hill Farm, plus basil from the garden. A friend suggested this type of savory waffle, and, boy, was it scrumptious!
I am a member of a dedicated planning crew for the Monument Marathon in Gering-Scottsbluff, Nebraska.
Last year, the first year of the race, Bugman and I rode our commuter bikes on one of several rides necessary to certify the course through USA Track & Field. I took that opportunity to take pictures and write a blog post about the course: Monument Marathon and its Western Nebraska Scenery. I did a short writeup after the event, too: Inaugural Monument Marathon in the books.
Now that Bugman and I are riding a tandem long distances, I figured we ought to do a Monument Marathon ride. Since on my first cycle tour of the course I picked and chose the most interesting or illustrative views, I decided that this time I would document the course in a more objective fashion by taking a picture every half mile.
"That's going to be a lot of pictures," Bugman said.
Yep. At 26.2 miles, two pictures per mile = 52 pictures.
But my first post on the marathon course contained 62 images. It's pretty countryside! It needs to be documented and shared!
Bugman and I biked up to the Wildcat Hills Nature Center, cooled off for a little while, then headed out on the course. I turned on my GPS audio cues and took pictures every half-mile, give or take the distance crossed while I fumbled with my camera.
Mile 0: looking west/southwest. Wildcat Hills Nature Center parking lot. Paved surface.
Mile 0.5: looking north / downhill. Highway 71. Paved surface.
Oops! Missed mile 1.0 – the wind was whistling so loudly on the downhill I didn't hear my GPS.
Mile 1.5: looking east. Homes in the Wildcat Hills. Paved surface.
Mile 2: looking east. Paved surface.
Mile 2.5: looking east/southest. Paved surface.
Mile 3: looking west into Gering Valley. Paved surface.
Mile 3.5: looking west. Paved surface.
Mile 4: looking west. Paved surface.
Mile 4.5: looking west. Paved surface.
Mile 5: looking west. Paved surface.
Mile 5.5: looking east. Paved surface.
Mile 6: looking south. This is on Sandberg Road, after the turn off Highway 71. Paved surface.
Mile 6.5: looking east. Hard to see in the photo, but there is a tractor on the road up ahead. Luckily, he turned off the road before we caught up with him. Paved surface.
Mile 7: looking north. Paved surface.
Mile 7.5: looking south. Gering Valley (irrigation) Drain. Paved surface.
Mile 8: looking northwest. The turn from Sandberg Road to Lockwood Road. Paved surface.
Mile 8.5: looking west over a corn field to Scotts Bluff National Monument. Paved surface.
Mile 9: looking west. Paved surface.
Mile 9.5: looking east. This might have been the place where there was a junkyard on the west side. Editorial decision to face east for the photo. Paved surface.
Mile 10: looking northwest at the turn into Gering. Paved surface.
Mile 10.5: looking north. The race's entry into Gering is via an industrial area. Paved surface.
Mile 11: looking south. Paved surface.
Mile 11.5: looking northwest towards the Oregon Trail Park ballfields. Paved surface.
Mile 12: looking northwest at the turn from a residential neighborhood onto Five Rocks Road. Paved surface.
Mile 12.5: looking east, back over my shoulder at the 4-way-stop intersection of Five Rocks Road and M Street / Old Oregon Trail. The measurement point was at the intersection, but I was too busy paying attention to traffic to take a picture. There are some late-1800s pictures of this road early in Gering's development. Before it was a city street, it was a part of the Oregon Trail. Pony Express riders traveled this path, too. Paved surface.
Mile 13: looking south down the tree-lined drive to the Gering cemetery. Paved surface.
Bugman and I stopped for a break at Legacy of the Plains Museum, so our mile markers will likely be a little off from this point forward on account of the distance traveled in the museum parking lot.
Mile 13.5: looking northwest at some property belonging to the Legacy of the Plains Museum, with Scotts Bluff National Monument in the background. Paved surface.
Mile 14: looking northwest at Scotts Bluff National Monument. Paved surface.
Mile 14.5: looking north. Perfect timing to catch the pioneer wagon and "oxen" on the Oregon Trail at Scotts Bluff National Monument. Paved surface.
Mile 15: looking north. Paved surface.
Mile 15.5: looking northwest. Paved surface.
Mile 16: looking northeast. I *love* that some people around here still raise longhorn cattle. Paved surface.
Mile 16.5: looking east. Paved surface.
Mile 17: looking west. In that clump of trees is the charming Barn Anew B&B. Paved surface.
Mile 17.5: looking west. Paved surface.
Mile 18: looking south across a field of young sugar beet plants on Ridgeway Drive. Mitchell Pass is on the left of the frame (which was back at about mile 14.5). Gravel surface.
Mile 18.5: looking south? southwest? Gravel surface.
Mile 19: looking south from the irrigation canal road. The route from about mile 19 to about mile 22.5 is on a dirt-and-gravel private road on Scotts Bluff National Monument property that is primarily used for irrigation canal maintenance. It was pretty difficult to navigate a tandem on, since the surface varies from small gravel to large gravel to packed dirt to loose, sandy soil with the occasional tire ruts. Gravel/dirt surface.
Mile 19.5: looking south at a prairie dog colony across the irrigation canal. Gravel/dirt surface.
Mile 20: looking south. Gravel/dirt surface.
Mile 20.5: looking south. I think it was somewhere around this point that we hit a patch of loose soil and I wound up planting a hand on the ground. This surface is OK to run on – you just have to pay attention, but in places it's not OK for a 350-pound tandem-with-riders on two thin road tires. We walked the bike for a bit. Gravel/dirt surface.
Mile 21: looking south at the north face of Scotts Bluff National Monument. Gravel/dirt surface.
Mile 21.5: looking north towards the badlands as Bugman walks the tandem through another sandy patch. Gravel/dirt surface.
Mile 22: looking northeast across a pasture towards the edge of a neighborhood of mobile homes. Gravel/dirt surface.
Mile 22.5: looking southwest at the neighborhood around the Monument Shadows golf course. Paved surface.
Mile 23: looking west at Scotts Bluff National Monument from a bike path. Paved surface.
Mile 23.5: looking west from the bike path. Paved surface.
Mile 24: looking south from the U Street Pathway at the Gering bale facility (the processing center for the municipal landfill). Paved surface.
Mile 24.5: looking west from Five Rocks Road. Paved surface.
Mile 25: looking south on Meadowlark Boulevard – part of a zigzag through a neighborhood. Paved surface.
Mile 25.5: looking west from the tree-lined cemetery road across a bean field towards the south bluff of Scotts Bluff National Monument. Paved surface.
Mile 26: looking west – just before the cruel twist of landscape referred to among the race planners as "Devils' Dip" or "Chupacabra Canyon." Almost there! Gravel surface.
Through these gates and through the parking lot the finish line lies at Five Rocks Amphitheater. Gravel surface.
So there you have it: views of the Monument Marathon course from a tandem bicycle in approximately half-mile increments: a mix of nature preserve, pasture, farmland, Oregon Trail landmarks, industrial areas, and neighborhoods on asphalt, concrete, and dirt/gravel surfaces.
This is a high-quality rural race organized by volunteers to benefit the local community college foundation. It is one of only four marathons in Nebraska – the super-rural Sandhills Marathon is a small race with a registration limit, the others are urban biggies all the way on the other end of the state in Lincoln and Omaha. The culture here has more in common with Wyoming than with the rest of Nebraska (Husker football fan-dom excepted).
If this sounds like your type of adventure, register for the race through the main webpage. We'll be glad to see you!
For tips on what to do and see in the area, check out the Scotts Bluff County Tourism site or peruse some of the archived posts on my other blog, SCB Citizen.
Back to the biking for a moment, and a bit of reflection. A little over a year ago, biking 26.2 miles knocked me out. This year, we rode 47 miles to cover the race course plus the distance to and from our house, and I was only mildly fatigued afterwards. What a difference a year makes!


text:
#pragma once
#include <aws/savingsplans/SavingsPlans_EXPORTS.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/savingsplans/model/SavingsPlanPaymentOption.h>
#include <aws/savingsplans/model/SavingsPlanType.h>
#include <aws/savingsplans/model/CurrencyCode.h>
#include <utility>

namespace Aws
{
namespace Utils
{
namespace Json
{
  class JsonValue;
  class JsonView;
} // namespace Json
} // namespace Utils
namespace SavingsPlans
{
namespace Model
{

  /**
   *
Information about a Savings Plan offering.

See Also:
   AWS
   * API Reference

   */
  class AWS_SAVINGSPLANS_API ParentSavingsPlanOffering
  {
  public:
    ParentSavingsPlanOffering();
    ParentSavingsPlanOffering(Aws::Utils::Json::JsonView jsonValue);
    ParentSavingsPlanOffering& operator=(Aws::Utils::Json::JsonView jsonValue);
    Aws::Utils::Json::JsonValue Jsonize() const;

    /**
     *
The ID of the offering.

     */
    inline const Aws::String& GetOfferingId() const{ return m_offeringId; }

    /**
     *
The ID of the offering.

     */
    inline bool OfferingIdHasBeenSet() const { return m_offeringIdHasBeenSet; }

    /**
     *
The ID of the offering.

     */
    inline void SetOfferingId(const Aws::String& value) { m_offeringIdHasBeenSet = true; m_offeringId = value; }

    /**
     *
The ID of the offering.

     */
    inline void SetOfferingId(Aws::String&& value) { m_offeringIdHasBeenSet = true; m_offeringId = std::move(value); }

    /**
     *
The ID of the offering.

     */
    inline void SetOfferingId(const char* value) { m_offeringIdHasBeenSet = true; m_offeringId.assign(value); }

    /**
     *
The ID of the offering.

     */
    inline ParentSavingsPlanOffering& WithOfferingId(const Aws::String& value) { SetOfferingId(value); return *this;}

    /**
     *
The ID of the offering.

     */
    inline ParentSavingsPlanOffering& WithOfferingId(Aws::String&& value) { SetOfferingId(std::move(value)); return *this;}

    /**
     *
The ID of the offering.

     */
    inline ParentSavingsPlanOffering& WithOfferingId(const char* value) { SetOfferingId(value); return *this;}

    /**
     *
The payment option.

     */
    inline const SavingsPlanPaymentOption& GetPaymentOption() const{ return m_paymentOption; }

    /**
     *
The payment option.

     */
    inline bool PaymentOptionHasBeenSet() const { return m_paymentOptionHasBeenSet; }

    /**
     *
The payment option.

     */
    inline void SetPaymentOption(const SavingsPlanPaymentOption& value) { m_paymentOptionHasBeenSet = true; m_paymentOption = value; }

    /**
     *
The payment option.

     */
    inline void SetPaymentOption(SavingsPlanPaymentOption&& value) { m_paymentOptionHasBeenSet = true; m_paymentOption = std::move(value); }

    /**
     *
The payment option.

     */
    inline ParentSavingsPlanOffering& WithPaymentOption(const SavingsPlanPaymentOption& value) { SetPaymentOption(value); return *this;}

    /**
     *
The payment option.

     */
    inline ParentSavingsPlanOffering& WithPaymentOption(SavingsPlanPaymentOption&& value) { SetPaymentOption(std::move(value)); return *this;}

    /**
     *
The plan type.

     */
    inline const SavingsPlanType& GetPlanType() const{ return m_planType; }

    /**
     *
The plan type.

     */
    inline bool PlanTypeHasBeenSet() const { return m_planTypeHasBeenSet; }

    /**
     *
The plan type.

     */
    inline void SetPlanType(const SavingsPlanType& value) { m_planTypeHasBeenSet = true; m_planType = value; }

    /**
     *
The plan type.

     */
    inline void SetPlanType(SavingsPlanType&& value) { m_planTypeHasBeenSet = true; m_planType = std::move(value); }

    /**
     *
The plan type.

     */
    inline ParentSavingsPlanOffering& WithPlanType(const SavingsPlanType& value) { SetPlanType(value); return *this;}

    /**
     *
The plan type.

     */
    inline ParentSavingsPlanOffering& WithPlanType(SavingsPlanType&& value) { SetPlanType(std::move(value)); return *this;}

    /**
     *
The duration, in seconds.

     */
    inline long long GetDurationSeconds() const{ return m_durationSeconds; }

    /**
     *
The duration, in seconds.

     */
    inline bool DurationSecondsHasBeenSet() const { return m_durationSecondsHasBeenSet; }

    /**
     *
The duration, in seconds.

     */
    inline void SetDurationSeconds(long long value) { m_durationSecondsHasBeenSet = true; m_durationSeconds = value; }

    /**
     *
The duration, in seconds.

     */
    inline ParentSavingsPlanOffering& WithDurationSeconds(long long value) { SetDurationSeconds(value); return *this;}

    /**
     *
The currency.

     */
    inline const CurrencyCode& GetCurrency() const{ return m_currency; }

    /**
     *
The currency.

     */
    inline bool CurrencyHasBeenSet() const { return m_currencyHasBeenSet; }

    /**
     *
The currency.

     */
    inline void SetCurrency(const CurrencyCode& value) { m_currencyHasBeenSet = true; m_currency = value; }

    /**
     *
The currency.

     */
    inline void SetCurrency(CurrencyCode&& value) { m_currencyHasBeenSet = true; m_currency = std::move(value); }

    /**
     *
The currency.

     */
    inline ParentSavingsPlanOffering& WithCurrency(const CurrencyCode& value) { SetCurrency(value); return *this;}

    /**
     *
The currency.

     */
    inline ParentSavingsPlanOffering& WithCurrency(CurrencyCode&& value) { SetCurrency(std::move(value)); return *this;}

    /**
     *
The description.

     */
    inline const Aws::String& GetPlanDescription() const{ return m_planDescription; }

    /**
     *
The description.

     */
    inline bool PlanDescriptionHasBeenSet() const { return m_planDescriptionHasBeenSet; }

    /**
     *
The description.

     */
    inline void SetPlanDescription(const Aws::String& value) { m_planDescriptionHasBeenSet = true; m_planDescription = value; }

    /**
     *
The description.

     */
    inline void SetPlanDescription(Aws::String&& value) { m_planDescriptionHasBeenSet = true; m_planDescription = std::move(value); }

    /**
     *
The description.

     */
    inline void SetPlanDescription(const char* value) { m_planDescriptionHasBeenSet = true; m_planDescription.assign(value); }

    /**
     *
The description.

     */
    inline ParentSavingsPlanOffering& WithPlanDescription(const Aws::String& value) { SetPlanDescription(value); return *this;}

    /**
     *
The description.

     */
    inline ParentSavingsPlanOffering& WithPlanDescription(Aws::String&& value) { SetPlanDescription(std::move(value)); return *this;}

    /**
     *
The description.

     */
    inline ParentSavingsPlanOffering& WithPlanDescription(const char* value) { SetPlanDescription(value); return *this;}

  private:

    Aws::String m_offeringId;
    bool m_offeringIdHasBeenSet = false;

    SavingsPlanPaymentOption m_paymentOption;
    bool m_paymentOptionHasBeenSet = false;

    SavingsPlanType m_planType;
    bool m_planTypeHasBeenSet = false;

    long long m_durationSeconds;
    bool m_durationSecondsHasBeenSet = false;

    CurrencyCode m_currency;
    bool m_currencyHasBeenSet = false;

    Aws::String m_planDescription;
    bool m_planDescriptionHasBeenSet = false;
  };

} // namespace Model
} // namespace SavingsPlans
} // namespace Aws


text:
Cosmic Hit-and-Run Gives Galaxy Starry Tail
By Denise Chow 2010-06-23T11:43:00Z
NASA's Galaxy Evolution Explorer found a tail behind a galaxy called IC 3418. The star-studded tail can be seen as detected by the space telescope in ultraviolet light. The tail has escaped detection in visible light. Full Story.
(Image: © NASA/JPL-Caltech)
This story was updated at 9:18 a.m. ET
A cosmichit-and-run between two speeding galaxies has left one with a wispy tailspeckled with stars, according to a new snapshot from a NASA space observatory.
The newgalaxy tail photo reveals the aftermath of a collision between the galaxy IC3418 and a member of its neighboring Virgo galaxy cluster.
The galacticsmash-up occurred 54 million light-years from Earth and was spotted by NASA's GalaxyEvolution Explorer (GALEX) observatory. These new observations from GALEXwill help give astronomers a better understanding of how stars form,researchers said.
"Thegas in this galaxy is being blown back into a turbulent wake," said JaniceHester of the California Institute of Technology in Pasadena, Calif., leadauthor of a recent study that was published in the Astrophysical JournalLetters.
But starsstill manage to form despite rough conditions in the galaxy's tail, which stemsfrom a mix of stellar winds and interstellar gas, Hester added.
"Thegas is like sand caught up by a stiff wind," she explained. "However,the particular type of gas that is needed to make stars is heavier, like pebbles,and can't be blown out of the galaxy. The new Galaxy Evolution Explorerobservations are teaching us that this heavier, star-forming gas can form inthe wake, possibly in swirling eddies of gas."
Whengalaxies collide
Galaxycollisions are not uncommon in the universe. In fact, it is estimated thatour own Milky Way galaxy will eventually crash into the Andromeda galaxy in afew billion years.
Galaxies canbecome tangled together, kicking gas and dust into space around them. Thegalaxies that emerge from these tussles a little worse for wear are left withtails of material stripped off during their violent encounters.
Hester and ateam of astronomers closely examined the tail of IC 3418, which actually formedin a very different way. Instead of bumping up against one galaxy, IC 3418 ismingling with the entire Virgo cluster of galaxies.
This massivegalaxycluster ? which contains approximately 1,500 galaxies and is permeated byhot gas ? is pulling IC3418 in, causing it to plunge through the cluster's gasat a blistering rate of over 2 million mph (3.2 million kph).
At thisextraordinary speed, IC 3418's gas is being shoved back into the choppy tailthat is visible in the new image.
Ultravioletgalaxies
The researchers were able to track the galactic tail of IC 3418 using GALEX,which observes the universe in ultraviolet wavelengths in order to measure thehistory of star formation. The tail is studded with clusters of massive, youngstars that glow with ultraviolet light that is easily spotted by the GALEXspace telescope.
The tail's youngstars indicate that a crucial ingredient for star formation ? dense clouds ofgas called molecular hydrogen ? formed in the wake of IC 3418's galactic plunge.
This is thefirst time astronomers have found solid evidence that clouds of molecularhydrogen can form under the violent conditions present in a turbulent wake,researchers said.
"IC3418's tail of star-formation demonstrates that strong turbulence promotescloud formation," said Mark Seibert, a co-author of the paper and a memberof the Galaxy Evolution Explorer science team at the Carnegie Observatories in Pasadena.
Galaxy tailsprovide an ideal environment for isolating the factors that control starformation, said Hester.
"Thesetails are unique, exotic locations where we can probe the precise mechanismsbehind star formation," she said. "Understanding star formation ispivotal to understanding the lifecycles of galaxies and the dramatictransformations that some galaxies undergo. We can also study how the processaffects the development of planets like our own."
The GalaxyEvolution Explorer mission aims to better understand the formationof galaxies. Since its launch in 2003, GALEX has imaged over a half-billionobjects across two-thirds of the sky.
HubblePhotos: When Galaxies Collide
The Strangest Things inSpace
Top 10Star Mysteries
Alien life is out there. But our theories are steering us away from it.
On This Day in Space: Jan. 20, 1978: 1st Progress cargo delivery ship launched
Are the aliens us? UFOs may be piloted by time-traveling humans, book argues


Growing chamomile for tea is easier than you think. Once the plants are established, it is drought tolerant and trouble free.
There is something so comforting to taking a break during the busy day and enjoying a cup of chamomile tea. I like to add a drop of local honey to sweeten it just a bit. Then I take a deep lingering breath over the cup as the tea steeps and cools down enough to drink.
Chamomile is a member of the daisy family (Asteraceae) and is best known for its soothing and calming properties and its fruity, apple-like flavor. Chamomile is documented through Egyptian, Roman, and Greek history as one of the most ancient medicinal herbs. Chamomile's reputation as a remedy for relieving anxiety was confirmed in a 2009 study (Source).
Today, chamomile is commonly used for many ailments including hay fever, menstrual disorders, inflammation, insomnia, muscle spasms, gastrointestinal disorders, and rheumatic pain. It can be applied to the skin for inflammations and skin diseases.
Two most popular types of chamomile are German Chamomile (Matricaria recutita), an annual that can grow up to 2-feet high; and Roman Chamomile (Chamaemelum nobile), a perennial that grows 12-inches high. Both contain essential oils and anti-oxidants that are calming and relaxing. Once I learned how easy it is to grow chamomile from seed, I have been growing chamomile for tea ever since.
German chamomile grows best in a sunny location in the garden but can tolerate some shade. It can grow in containers but may become top heavy, so larger containers are recommended.
Once established, chamomile is pretty drought tolerant and trouble free. It isn't a heavy feeder so will not need additional fertilizer through the growing season unless your soil is poor.
Start German chamomile from seed indoors about 6 weeks before your last expected frost date. Sow seeds by scattering a small pinch of the tiny seeds on the soil surface, mist with water, and tamp lightly.
Chamomile seeds need light to germinate, so do not cover the seed with soil before misting with a spray bottle to water.
Germination usually occurs within two weeks. Once the seedlings reach 4-inches high, select the strongest and healthiest plants and thin by snipping the others at the soil surface.
Harden off your chamomile seedlings and transplant to the garden after danger of frost is past along with other heat loving plants. Space the plants about 8-10 inches apart and water frequently until they are established and produce new growth. Usually within several weeks after transplanting, the first stems will begin reaching for the sky and the flowers begin to form and bloom.
Flower heads are ready to gather when the petals are flat or begin to fall back from the center. Gather the flowers on a sunny day after the morning dew has dried. Harvest blossoms by snipping them off when they are fully open.
Air-dry chamomile by layering the blossoms on a plate, and allow to dry naturally in an upper cabinet away from dust and sunlight. You can also spread the chamomile out on a window screen or drying screen to dry. Depending on the humidity, this usually takes 1-2 weeks.
See how to make your own drying screen or check out these Stacking Herb Drying Racks.
Alternatively, you can use a food dehydrator to dry chamomile quickly. Lay the flower blossoms out on the drying screens and run at the lowest setting until dry.
You can tell when chamomile is dry, by crushing a blossom or two. It should crumble easily.
See How to Harvest and Dry Herbs for Storage for more information on drying herbs.
Once the chamomile is dry, store whole flower buds in a glass jar away from direct sunlight.
To make tea, use about a teaspoon of dried chamomile flowers per cup. Place the chamomile blossoms in a tea infuser, pour boiling water over the chamomile flowers, and then steep for 5 minutes. When it is hot outside, I add ice cubes after steeping for a fresh flavored iced tea. Freshly harvested chamomile can be used for tea as well, but you will need twice as much. Drying concentrates the oil and flavor.
I enjoy a cup of chamomile mid-afternoon especially when things are busily humming along. It gives me a moment to sip, gather my thoughts, and plan my next move.
Klenner, Amanda. "How to use Chamomile to Reduce Stress." Herbal Academy of New England.
Foster, Steven. "How to Grow, Use and Identify the Chamomile Herb." Mother Earth Living.
Singh, Ompal, Khanam, Zakia. et al. "Chamomile (Matricaria chamomilla L.): An overview." The National Center for Biotechnology Information.
Amsterdam, Jay, Li, Yimei, Soeller, Irene, et al. "A Randomized, Double-Blind, Placebo-Controlled Trial of Oral Matricaria Recutita (Chamomile) Extract Therapy of Generalized Anxiety Disorder." Journal of Clinical Psychopharmacology. Wolters Kluwer Health.
Disclosure: Any medical information is for informational purposes only. Always do your research and exercise caution when using any herbs or plants as medicine. Chamomile is not recommended for women who are breastfeeding or pregnant, and can cause allergic reactions in people with hay fever and some types of flower allergies.
This article was originally published on August 6, 2014. It has been updated with additional information, photos, and video.
Previous Post: « Purslane: Weed it or Eat it?
I bought some seeds years ago and every year they volunteer all over my garden in between my neat rows of vegetables. They always make me smile.
Have you tried the Roman Chamomile for teas? I prefer perennials when I have the option, but if the flavor/quality of the German Chamomile is markedly better then I would want to go with that! Love the photos! Such pretty little plants.
I started my chamomile indoors over a month ago. It germinated fine but has not grown any larger since a few days after germination. Do I need to thin it to only one little plant? What could I be doing wrong? I am starting it in seed pods in a tray.
Meagan, It's hard to know what is going on with your chamomile seedlings. I suspect the "seed pods" don't have any nutrients to feed your chamomile plants. Chamomile isn't a heavy feeder, but it does need some nutrients to grow. You could try watering with liquid fish emulsion to give your plants a boost.
Thank you so much, I'll try to move it to a different pot and see how it goes.
This is my 1st time growing chamomile and i plant it with NFT hydroponic system, outdoor. I live in Indonesia(tropics country), 43days, 8-10cm, but i notice they are growing to down side to earth not up to sky, looks like a carrot leaf. It's normal?
Sumitro, Yes, it is normal for the foliage to look thin and feathery. The chamomile flower stalks will grow in the middle of the foliage and the flower will open up towards the sky.
Lovely post on this beautiful plant! Thank you for the information. I wonder how this would do to grow as a house plant over the winter. Have you ever tried that?
Jane, No, I haven't tried growing chamomile as a houseplant. If you experiment with this, let me know how it does.
Somewhere in the past I must have bought some camomile seeds, but now they just pop up in some of the numerous containers I grow things in. I don't have to think much about it, they self seed so well.
My question is about harvesting the flowers…can I still use flowers that have dropped their pedals and where the seed pod has turned tan in color. Where are the oils concentrated in this flower?
John, The ideal time to harvest chamomile is when the petals are flat or begin to fall back from the center. Once the petals have dropped, the flavor begins to diminish and may even turn bitter. Best to allow these to go to seed to grow another crop.
That may explain why the chamomile tea I just made was so awful tasting. Probably half of the flower heads had browning leaves or no leaves.
I'm not sure what you mean by "begin to fall back from the center"…do you mean drooping at an angle more than the flat (horizontal) ones?
John, Yes, it sounds like your chamomile was too far gone. When flowers open, they do so from the center and stretch their petals back towards the stems. As long as the flowers are open with the petals intact, the flavor will be there. Once the petals fall, the chamomile is forming seeds and the flavor will be bitter.
I have not had any luck growing chamomile I've tried numerous times to no avail. Last year I started them early, inside under grow lights with new soil. They did well … I hardened them off and put them outside. They lasted about a week or two and just dried up even though I kept them watered.
I LOVE chamomile, I just wish I could grow it.
Georgia, Usually, chamomile isn't difficult to grow. I wonder if watering less would make a difference. Or you could try growing it in pot or container.
I've had that happen to me too. I was reading in Taylor's Guide to Herbs and it says that Roman chamomile can not tolerate heat, so perhaps you had Roman chamomile plants. Maybe German chamomile will do better.
Thank you for the post! I don't have a light system; so I started seeds outdoors around mid-October and they are about 1cm high and are looking fine, so far. Last frost is about mid to late-February in my area and I'm worried I may have started them too early. Should I be worried about flavor and fragrance being off, or will they bloom alright? Should I take any precautions to ensure they stay healthy?
Jenny, It sounds like you are off to a great start with your Chamomile plants. If you trim the blooms regularly, the plants will keep growing and blooming until frost.
I grew chamomile this summer in a pot on my porch and although the plant grew I only got maybe 6 flowers it stayed green. Did I do something wrong. I watered it and kept in a sunny location. I was really looking forward to making tea.
Hi Donna, It sounds like your pot may have been too small or maybe the soil didn't have enough fertilizer for the plant to thrive. German Chamomile can spread out a foot or two. Try a larger pot and fresh potting mix next year.
Great information! Thanks for sharing at Simple Lives Thursday.
Madamdreamweaver, German Chamomile is an annual that will self sow if the flowers are not harvested or deadheaded. It does grow very well in pots. I suggest one Chamomile plant in a 15-18-inch pot. As I mentioned above, the plant can grow up to 24-inches and get a little top heavy, so be sure to use a heavy or larger pot.
I've been considering growing German Camomile just because it's pretty. Does it spread itself? (is it prone to taking over a location?) Does it do well in a pot garden?
Chamomile does spread itself and will take over an area within the first 2 years after its first blooming.
Chamomile will self sow if the blossoms go to seed. I allow some volunteer plants to grow in the garden, but they have never taken over.
Great post! Chamomile is definitely on my list of future must haves. When it comes to store-bought tea, I generally stick to green tea. But if I could make myself a bit of tea from my own garden, that would be a treat.
Margaret, I drink a lot of iced green tea too throughout the day, but when I want to relax or calm down, Chamomile is just the thing.