text:
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';

var _history = require('history');

var history = (0, _history.useQueries)(_history.createHistory)();

document.addEventListener('DOMContentLoaded', function () {
  var searchPath = ~"cca41b90-8143-4f48-899d-1e911c0a6431-bluemix.cloudant.com".indexOf('cloudant') ? "styleguides" + '/_design/' + "styleguides" + '/_search/' + "styleguides" : '_fti/local/' + "styleguides" + '/_design/' + "styleguides" + '/' + "styleguides";
  var url = "https:" + '//' + "cca41b90-8143-4f48-899d-1e911c0a6431-bluemix.cloudant.com" + ':' + "443" + '/' + searchPath;

  var active = undefined;

  var unlisten = history.listen(function (location) {
    if (location.query.q) {
      if (active) {
        active.abort();
      }
      var xhr = new XMLHttpRequest();
      xhr.onload = function (e) {
        active = undefined;
        if (e.target.status >= 400) {
          return console.error(JSON.parse(e.target.responseText));
        }

        var data = JSON.parse(e.target.responseText);
        var $ul = document.getElementById('results');
        var $p = document.getElementById('next');

        if (data.rows && data.rows.length) {
          $ul.innerHTML = data.rows.map(function (row) {
            return '
\n
' + row.fields.title + '
\n                ' + row.fields.publisher + ' - score: ' + (row.score || row.order[0]) + '\n
' + (row.fields.about || '') + '
\n
';
          }).join('');

          if (data.bookmark != null && data.bookmark !== location.query.bookmark || data.skip != null && data.skip + data.limit < data.total_rows) {
            var skip = undefined;
            if (data.bookmark != null) {
              skip = 'bookmark=' + data.bookmark;
            } else {
              skip = 'skip=' + (data.skip + data.limit);
            }
            $p.innerHTML = 'next';
          } else {
            $p.innerHTML = '';
          }
        } else {
          $ul.innerHTML = '
no results found
';
          $p.innerHTML = '';
        }
      };
      xhr.onabort = function (e) {
        console.error('xhr aborted');
      };
      xhr.onerror = function (e) {
        console.error('xhr error');
      };
      var qs = '?q=' + location.query.q + '&limit=' + location.query.limit;
      if (location.query.skip) {
        qs += '&skip=' + location.query.skip;
      }
      if (location.query.bookmark) {
        qs += '&bookmark=' + location.query.bookmark;
      }
      xhr.open('GET', url + qs);
      xhr.send();
      active = xhr;
    }
  });

  var $form = document.querySelector('form');
  $form.addEventListener('submit', function (e) {
    e.preventDefault();

    var $input = $form.querySelector('input');
    if ($input.value) {
      history.push({
        query: { q: $input.value.trim(), limit: 25 }
      });
    }
  });
});

},{"history":17}],2:[function(require,module,exports){
/**
 * Indicates that navigation was caused by a call to history.push.
 */
'use strict';

exports.__esModule = true;
var PUSH = 'PUSH';

exports.PUSH = PUSH;
/**
 * Indicates that navigation was caused by a call to history.replace.
 */
var REPLACE = 'REPLACE';

exports.REPLACE = REPLACE;
/**
 * Indicates that navigation was caused by some other action such
 * as using a browser's back/forward buttons and/or manually manipulating
 * the URL in a browser's location bar. This is the default.
 *
 * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate
 * for more information.
 */
var POP = 'POP';

exports.POP = POP;
exports['default'] = {
  PUSH: PUSH,
  REPLACE: REPLACE,
  POP: POP
};
},{}],3:[function(require,module,exports){
"use strict";

exports.__esModule = true;
exports.loopAsync = loopAsync;

function loopAsync(turns, work, callback) {
  var currentTurn = 0;
  var isDone = false;

  function done() {
    isDone = true;
    callback.apply(this, arguments);
  }

  function next() {
    if (isDone) return;

    if (currentTurn < turns) {
      work.call(this, currentTurn++, next, done);
    } else {
      done.apply(this, arguments);
    }
  }

  next();
}
},{}],4:[function(require,module,exports){
/*eslint-disable no-empty */
'use strict';

exports.__esModule = true;
exports.saveState = saveState;
exports.readState = readState;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

var KeyPrefix = '@@History/';
var QuotaExceededError = 'QuotaExceededError';
var SecurityError = 'SecurityError';

function createKey(key) {
  return KeyPrefix + key;
}

function saveState(key, state) {
  try {
    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));
  } catch (error) {
    if (error.name === SecurityError) {
      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
      // attempt to access window.sessionStorage.
      "development" !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;

      return;
    }

    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {
      // Safari "private mode" throws QuotaExceededError.
      "development" !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;

      return;
    }

    throw error;
  }
}

function readState(key) {
  var json = undefined;
  try {
    json = window.sessionStorage.getItem(createKey(key));
  } catch (error) {
    if (error.name === SecurityError) {
      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
      // attempt to access window.sessionStorage.
      "development" !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;

      return null;
    }
  }

  if (json) {
    try {
      return JSON.parse(json);
    } catch (error) {
      // Ignore invalid JSON.
    }
  }

  return null;
}
},{"warning":29}],5:[function(require,module,exports){
'use strict';

exports.__esModule = true;
exports.addEventListener = addEventListener;
exports.removeEventListener = removeEventListener;
exports.getHashPath = getHashPath;
exports.replaceHashPath = replaceHashPath;
exports.getWindowPath = getWindowPath;
exports.go = go;
exports.getUserConfirmation = getUserConfirmation;
exports.supportsHistory = supportsHistory;
exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;

function addEventListener(node, event, listener) {
  if (node.addEventListener) {
    node.addEventListener(event, listener, false);
  } else {
    node.attachEvent('on' + event, listener);
  }
}

function removeEventListener(node, event, listener) {
  if (node.removeEventListener) {
    node.removeEventListener(event, listener, false);
  } else {
    node.detachEvent('on' + event, listener);
  }
}

function getHashPath() {
  // We can't use window.location.hash here because it's not
  // consistent across browsers - Firefox will pre-decode it!
  return window.location.href.split('#')[1] || '';
}

function replaceHashPath(path) {
  window.location.replace(window.location.pathname + window.location.search + '#' + path);
}

function getWindowPath() {
  return window.location.pathname + window.location.search + window.location.hash;
}

function go(n) {
  if (n) window.history.go(n);
}

function getUserConfirmation(message, callback) {
  callback(window.confirm(message));
}

/**
 * Returns true if the HTML5 history API is supported. Taken from Modernizr.
 *
 * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
 * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
 * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586
 */

function supportsHistory() {
  var ua = navigator.userAgent;
  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {
    return false;
  }
  // FIXME: Work around our browser history not working correctly on Chrome
  // iOS: https://github.com/rackt/react-router/issues/2565
  if (ua.indexOf('CriOS') !== -1) {
    return false;
  }
  return window.history && 'pushState' in window.history;
}

/**
 * Returns false if using go(n) with hash history causes a full page reload.
 */

function supportsGoWithoutReloadUsingHash() {
  var ua = navigator.userAgent;
  return ua.indexOf('Firefox') === -1;
}
},{}],6:[function(require,module,exports){
'use strict';

exports.__esModule = true;
var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
exports.canUseDOM = canUseDOM;
},{}],7:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _invariant = require('invariant');

var _invariant2 = _interopRequireDefault(_invariant);

var _Actions = require('./Actions');

var _ExecutionEnvironment = require('./ExecutionEnvironment');

var _DOMUtils = require('./DOMUtils');

var _DOMStateStorage = require('./DOMStateStorage');

var _createDOMHistory = require('./createDOMHistory');

var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

/**
 * Creates and returns a history object that uses HTML5's history API
 * (pushState, replaceState, and the popstate event) to manage history.
 * This is the recommended method of managing history in browsers because
 * it provides the cleanest URLs.
 *
 * Note: In browsers that do not support the HTML5 history API full
 * page reloads will be used to preserve URLs.
 */
function createBrowserHistory() {
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

  !_ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;

  var forceRefresh = options.forceRefresh;

  var isSupported = _DOMUtils.supportsHistory();
  var useRefresh = !isSupported || forceRefresh;

  function getCurrentLocation(historyState) {
    historyState = historyState || window.history.state || {};

    var path = _DOMUtils.getWindowPath();
    var _historyState = historyState;
    var key = _historyState.key;

    var state = undefined;
    if (key) {
      state = _DOMStateStorage.readState(key);
    } else {
      state = null;
      key = history.createKey();

      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);
    }

    var location = _parsePath2['default'](path);

    return history.createLocation(_extends({}, location, { state: state }), undefined, key);
  }

  function startPopStateListener(_ref) {
    var transitionTo = _ref.transitionTo;

    function popStateListener(event) {
      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.

      transitionTo(getCurrentLocation(event.state));
    }

    _DOMUtils.addEventListener(window, 'popstate', popStateListener);

    return function () {
      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);
    };
  }

  function finishTransition(location) {
    var basename = location.basename;
    var pathname = location.pathname;
    var search = location.search;
    var hash = location.hash;
    var state = location.state;
    var action = location.action;
    var key = location.key;

    if (action === _Actions.POP) return; // Nothing to do.

    _DOMStateStorage.saveState(key, state);

    var path = (basename || '') + pathname + search + hash;
    var historyState = {
      key: key
    };

    if (action === _Actions.PUSH) {
      if (useRefresh) {
        window.location.href = path;
        return false; // Prevent location update.
      } else {
          window.history.pushState(historyState, null, path);
        }
    } else {
      // REPLACE
      if (useRefresh) {
        window.location.replace(path);
        return false; // Prevent location update.
      } else {
          window.history.replaceState(historyState, null, path);
        }
    }
  }

  var history = _createDOMHistory2['default'](_extends({}, options, {
    getCurrentLocation: getCurrentLocation,
    finishTransition: finishTransition,
    saveState: _DOMStateStorage.saveState
  }));

  var listenerCount = 0,
      stopPopStateListener = undefined;

  function listenBefore(listener) {
    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);

    var unlisten = history.listenBefore(listener);

    return function () {
      unlisten();

      if (--listenerCount === 0) stopPopStateListener();
    };
  }

  function listen(listener) {
    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);

    var unlisten = history.listen(listener);

    return function () {
      unlisten();

      if (--listenerCount === 0) stopPopStateListener();
    };
  }

  // deprecated
  function registerTransitionHook(hook) {
    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);

    history.registerTransitionHook(hook);
  }

  // deprecated
  function unregisterTransitionHook(hook) {
    history.unregisterTransitionHook(hook);

    if (--listenerCount === 0) stopPopStateListener();
  }

  return _extends({}, history, {
    listenBefore: listenBefore,
    listen: listen,
    registerTransitionHook: registerTransitionHook,
    unregisterTransitionHook: unregisterTransitionHook
  });
}

exports['default'] = createBrowserHistory;
module.exports = exports['default'];
},{"./Actions":2,"./DOMStateStorage":4,"./DOMUtils":5,"./ExecutionEnvironment":6,"./createDOMHistory":8,"./parsePath":18,"invariant":26}],8:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _invariant = require('invariant');

var _invariant2 = _interopRequireDefault(_invariant);

var _ExecutionEnvironment = require('./ExecutionEnvironment');

var _DOMUtils = require('./DOMUtils');

var _createHistory = require('./createHistory');

var _createHistory2 = _interopRequireDefault(_createHistory);

function createDOMHistory(options) {
  var history = _createHistory2['default'](_extends({
    getUserConfirmation: _DOMUtils.getUserConfirmation
  }, options, {
    go: _DOMUtils.go
  }));

  function listen(listener) {
    !_ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;

    return history.listen(listener);
  }

  return _extends({}, history, {
    listen: listen
  });
}

exports['default'] = createDOMHistory;
module.exports = exports['default'];
},{"./DOMUtils":5,"./ExecutionEnvironment":6,"./createHistory":10,"invariant":26}],9:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

var _invariant = require('invariant');

var _invariant2 = _interopRequireDefault(_invariant);

var _Actions = require('./Actions');

var _ExecutionEnvironment = require('./ExecutionEnvironment');

var _DOMUtils = require('./DOMUtils');

var _DOMStateStorage = require('./DOMStateStorage');

var _createDOMHistory = require('./createDOMHistory');

var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

function isAbsolutePath(path) {
  return typeof path === 'string' && path.charAt(0) === '/';
}

function ensureSlash() {
  var path = _DOMUtils.getHashPath();

  if (isAbsolutePath(path)) return true;

  _DOMUtils.replaceHashPath('/' + path);

  return false;
}

function addQueryStringValueToPath(path, key, value) {
  return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value);
}

function stripQueryStringValueFromPath(path, key) {
  return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), '');
}

function getQueryStringValueFromPath(path, key) {
  var match = path.match(new RegExp('\\?.*?\\b' + key + '=(.+?)\\b'));
  return match && match[1];
}

var DefaultQueryKey = '_k';

function createHashHistory() {
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

  !_ExecutionEnvironment.canUseDOM ? "development" !== 'production' ? _invariant2['default'](false, 'Hash history needs a DOM') : _invariant2['default'](false) : undefined;

  var queryKey = options.queryKey;

  if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey;

  function getCurrentLocation() {
    var path = _DOMUtils.getHashPath();

    var key = undefined,
        state = undefined;
    if (queryKey) {
      key = getQueryStringValueFromPath(path, queryKey);
      path = stripQueryStringValueFromPath(path, queryKey);

      if (key) {
        state = _DOMStateStorage.readState(key);
      } else {
        state = null;
        key = history.createKey();
        _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key));
      }
    } else {
      key = state = null;
    }

    var location = _parsePath2['default'](path);

    return history.createLocation(_extends({}, location, { state: state }), undefined, key);
  }

  function startHashChangeListener(_ref) {
    var transitionTo = _ref.transitionTo;

    function hashChangeListener() {
      if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /.

      transitionTo(getCurrentLocation());
    }

    ensureSlash();
    _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener);

    return function () {
      _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener);
    };
  }

  function finishTransition(location) {
    var basename = location.basename;
    var pathname = location.pathname;
    var search = location.search;
    var state = location.state;
    var action = location.action;
    var key = location.key;

    if (action === _Actions.POP) return; // Nothing to do.

    var path = (basename || '') + pathname + search;

    if (queryKey) {
      path = addQueryStringValueToPath(path, queryKey, key);
      _DOMStateStorage.saveState(key, state);
    } else {
      // Drop key and state.
      location.key = location.state = null;
    }

    var currentHash = _DOMUtils.getHashPath();

    if (action === _Actions.PUSH) {
      if (currentHash !== path) {
        window.location.hash = path;
      } else {
        "development" !== 'production' ? _warning2['default'](false, 'You cannot PUSH the same path using hash history') : undefined;
      }
    } else if (currentHash !== path) {
      // REPLACE
      _DOMUtils.replaceHashPath(path);
    }
  }

  var history = _createDOMHistory2['default'](_extends({}, options, {
    getCurrentLocation: getCurrentLocation,
    finishTransition: finishTransition,
    saveState: _DOMStateStorage.saveState
  }));

  var listenerCount = 0,
      stopHashChangeListener = undefined;

  function listenBefore(listener) {
    if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);

    var unlisten = history.listenBefore(listener);

    return function () {
      unlisten();

      if (--listenerCount === 0) stopHashChangeListener();
    };
  }

  function listen(listener) {
    if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);

    var unlisten = history.listen(listener);

    return function () {
      unlisten();

      if (--listenerCount === 0) stopHashChangeListener();
    };
  }

  function push(location) {
    "development" !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;

    history.push(location);
  }

  function replace(location) {
    "development" !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;

    history.replace(location);
  }

  var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash();

  function go(n) {
    "development" !== 'production' ? _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined;

    history.go(n);
  }

  function createHref(path) {
    return '#' + history.createHref(path);
  }

  // deprecated
  function registerTransitionHook(hook) {
    if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history);

    history.registerTransitionHook(hook);
  }

  // deprecated
  function unregisterTransitionHook(hook) {
    history.unregisterTransitionHook(hook);

    if (--listenerCount === 0) stopHashChangeListener();
  }

  // deprecated
  function pushState(state, path) {
    "development" !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;

    history.pushState(state, path);
  }

  // deprecated
  function replaceState(state, path) {
    "development" !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined;

    history.replaceState(state, path);
  }

  return _extends({}, history, {
    listenBefore: listenBefore,
    listen: listen,
    push: push,
    replace: replace,
    go: go,
    createHref: createHref,

    registerTransitionHook: registerTransitionHook, // deprecated - warning is in createHistory
    unregisterTransitionHook: unregisterTransitionHook, // deprecated - warning is in createHistory
    pushState: pushState, // deprecated - warning is in createHistory
    replaceState: replaceState // deprecated - warning is in createHistory
  });
}

exports['default'] = createHashHistory;
module.exports = exports['default'];
},{"./Actions":2,"./DOMStateStorage":4,"./DOMUtils":5,"./ExecutionEnvironment":6,"./createDOMHistory":8,"./parsePath":18,"invariant":26,"warning":29}],10:[function(require,module,exports){
//import warning from 'warning'
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _deepEqual = require('deep-equal');

var _deepEqual2 = _interopRequireDefault(_deepEqual);

var _AsyncUtils = require('./AsyncUtils');

var _Actions = require('./Actions');

var _createLocation2 = require('./createLocation');

var _createLocation3 = _interopRequireDefault(_createLocation2);

var _runTransitionHook = require('./runTransitionHook');

var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

function createRandomKey(length) {
  return Math.random().toString(36).substr(2, length);
}

function locationsAreEqual(a, b) {
  return a.pathname === b.pathname && a.search === b.search &&
  //a.action === b.action && // Different action !== location change.
  a.key === b.key && _deepEqual2['default'](a.state, b.state);
}

var DefaultKeyLength = 6;

function createHistory() {
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
  var getCurrentLocation = options.getCurrentLocation;
  var finishTransition = options.finishTransition;
  var saveState = options.saveState;
  var go = options.go;
  var keyLength = options.keyLength;
  var getUserConfirmation = options.getUserConfirmation;

  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;

  var transitionHooks = [];

  function listenBefore(hook) {
    transitionHooks.push(hook);

    return function () {
      transitionHooks = transitionHooks.filter(function (item) {
        return item !== hook;
      });
    };
  }

  var allKeys = [];
  var changeListeners = [];
  var location = undefined;

  function getCurrent() {
    if (pendingLocation && pendingLocation.action === _Actions.POP) {
      return allKeys.indexOf(pendingLocation.key);
    } else if (location) {
      return allKeys.indexOf(location.key);
    } else {
      return -1;
    }
  }

  function updateLocation(newLocation) {
    var current = getCurrent();

    location = newLocation;

    if (location.action === _Actions.PUSH) {
      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);
    } else if (location.action === _Actions.REPLACE) {
      allKeys[current] = location.key;
    }

    changeListeners.forEach(function (listener) {
      listener(location);
    });
  }

  function listen(listener) {
    changeListeners.push(listener);

    if (location) {
      listener(location);
    } else {
      var _location = getCurrentLocation();
      allKeys = [_location.key];
      updateLocation(_location);
    }

    return function () {
      changeListeners = changeListeners.filter(function (item) {
        return item !== listener;
      });
    };
  }

  function confirmTransitionTo(location, callback) {
    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {
      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {
        if (result != null) {
          done(result);
        } else {
          next();
        }
      });
    }, function (message) {
      if (getUserConfirmation && typeof message === 'string') {
        getUserConfirmation(message, function (ok) {
          callback(ok !== false);
        });
      } else {
        callback(message !== false);
      }
    });
  }

  var pendingLocation = undefined;

  function transitionTo(nextLocation) {
    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.

    pendingLocation = nextLocation;

    confirmTransitionTo(nextLocation, function (ok) {
      if (pendingLocation !== nextLocation) return; // Transition was interrupted.

      if (ok) {
        // treat PUSH to current path like REPLACE to be consistent with browsers
        if (nextLocation.action === _Actions.PUSH) {
          var prevPath = createPath(location);
          var nextPath = createPath(nextLocation);

          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;
        }

        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);
      } else if (location && nextLocation.action === _Actions.POP) {
        var prevIndex = allKeys.indexOf(location.key);
        var nextIndex = allKeys.indexOf(nextLocation.key);

        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.
      }
    });
  }

  function push(location) {
    transitionTo(createLocation(location, _Actions.PUSH, createKey()));
  }

  function replace(location) {
    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));
  }

  function goBack() {
    go(-1);
  }

  function goForward() {
    go(1);
  }

  function createKey() {
    return createRandomKey(keyLength);
  }

  function createPath(location) {
    if (location == null || typeof location === 'string') return location;

    var pathname = location.pathname;
    var search = location.search;
    var hash = location.hash;

    var result = pathname;

    if (search) result += search;

    if (hash) result += hash;

    return result;
  }

  function createHref(location) {
    return createPath(location);
  }

  function createLocation(location, action) {
    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];

    if (typeof action === 'object') {
      //warning(
      //  false,
      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +
      //  'location descriptor instead'
      //)

      if (typeof location === 'string') location = _parsePath2['default'](location);

      location = _extends({}, location, { state: action });

      action = key;
      key = arguments[3] || createKey();
    }

    return _createLocation3['default'](location, action, key);
  }

  // deprecated
  function setState(state) {
    if (location) {
      updateLocationState(location, state);
      updateLocation(location);
    } else {
      updateLocationState(getCurrentLocation(), state);
    }
  }

  function updateLocationState(location, state) {
    location.state = _extends({}, location.state, state);
    saveState(location.key, location.state);
  }

  // deprecated
  function registerTransitionHook(hook) {
    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);
  }

  // deprecated
  function unregisterTransitionHook(hook) {
    transitionHooks = transitionHooks.filter(function (item) {
      return item !== hook;
    });
  }

  // deprecated
  function pushState(state, path) {
    if (typeof path === 'string') path = _parsePath2['default'](path);

    push(_extends({ state: state }, path));
  }

  // deprecated
  function replaceState(state, path) {
    if (typeof path === 'string') path = _parsePath2['default'](path);

    replace(_extends({ state: state }, path));
  }

  return {
    listenBefore: listenBefore,
    listen: listen,
    transitionTo: transitionTo,
    push: push,
    replace: replace,
    go: go,
    goBack: goBack,
    goForward: goForward,
    createKey: createKey,
    createPath: createPath,
    createHref: createHref,
    createLocation: createLocation,

    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),
    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),
    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),
    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),
    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')
  };
}

exports['default'] = createHistory;
module.exports = exports['default'];
},{"./Actions":2,"./AsyncUtils":3,"./createLocation":11,"./deprecate":13,"./parsePath":18,"./runTransitionHook":19,"deep-equal":23}],11:[function(require,module,exports){
//import warning from 'warning'
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _Actions = require('./Actions');

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

function createLocation() {
  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];
  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];
  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];

  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];

  if (typeof location === 'string') location = _parsePath2['default'](location);

  if (typeof action === 'object') {
    //warning(
    //  false,
    //  'The state (2nd) argument to createLocation is deprecated; use a ' +
    //  'location descriptor instead'
    //)

    location = _extends({}, location, { state: action });

    action = key || _Actions.POP;
    key = _fourthArg;
  }

  var pathname = location.pathname || '/';
  var search = location.search || '';
  var hash = location.hash || '';
  var state = location.state || null;

  return {
    pathname: pathname,
    search: search,
    hash: hash,
    state: state,
    action: action,
    key: key
  };
}

exports['default'] = createLocation;
module.exports = exports['default'];
},{"./Actions":2,"./parsePath":18}],12:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

var _invariant = require('invariant');

var _invariant2 = _interopRequireDefault(_invariant);

var _Actions = require('./Actions');

var _createHistory = require('./createHistory');

var _createHistory2 = _interopRequireDefault(_createHistory);

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

function createStateStorage(entries) {
  return entries.filter(function (entry) {
    return entry.state;
  }).reduce(function (memo, entry) {
    memo[entry.key] = entry.state;
    return memo;
  }, {});
}

function createMemoryHistory() {
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];

  if (Array.isArray(options)) {
    options = { entries: options };
  } else if (typeof options === 'string') {
    options = { entries: [options] };
  }

  var history = _createHistory2['default'](_extends({}, options, {
    getCurrentLocation: getCurrentLocation,
    finishTransition: finishTransition,
    saveState: saveState,
    go: go
  }));

  var _options = options;
  var entries = _options.entries;
  var current = _options.current;

  if (typeof entries === 'string') {
    entries = [entries];
  } else if (!Array.isArray(entries)) {
    entries = ['/'];
  }

  entries = entries.map(function (entry) {
    var key = history.createKey();

    if (typeof entry === 'string') return { pathname: entry, key: key };

    if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key });

    !false ? "development" !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined;
  });

  if (current == null) {
    current = entries.length - 1;
  } else {
    !(current >= 0 && current < entries.length) ? "development" !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined;
  }

  var storage = createStateStorage(entries);

  function saveState(key, state) {
    storage[key] = state;
  }

  function readState(key) {
    return storage[key];
  }

  function getCurrentLocation() {
    var entry = entries[current];
    var key = entry.key;
    var basename = entry.basename;
    var pathname = entry.pathname;
    var search = entry.search;

    var path = (basename || '') + pathname + (search || '');

    var state = undefined;
    if (key) {
      state = readState(key);
    } else {
      state = null;
      key = history.createKey();
      entry.key = key;
    }

    var location = _parsePath2['default'](path);

    return history.createLocation(_extends({}, location, { state: state }), undefined, key);
  }

  function canGo(n) {
    var index = current + n;
    return index >= 0 && index < entries.length;
  }

  function go(n) {
    if (n) {
      if (!canGo(n)) {
        "development" !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined;
        return;
      }

      current += n;

      var currentLocation = getCurrentLocation();

      // change action to POP
      history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP }));
    }
  }

  function finishTransition(location) {
    switch (location.action) {
      case _Actions.PUSH:
        current += 1;

        // if we are not on the top of stack
        // remove rest and push new
        if (current < entries.length) entries.splice(current);

        entries.push(location);
        saveState(location.key, location.state);
        break;
      case _Actions.REPLACE:
        entries[current] = location;
        saveState(location.key, location.state);
        break;
    }
  }

  return history;
}

exports['default'] = createMemoryHistory;
module.exports = exports['default'];
},{"./Actions":2,"./createHistory":10,"./parsePath":18,"invariant":26,"warning":29}],13:[function(require,module,exports){
//import warning from 'warning'

"use strict";

exports.__esModule = true;
function deprecate(fn) {
  return fn;
  //return function () {
  //  warning(false, '[history] ' + message)
  //  return fn.apply(this, arguments)
  //}
}

exports["default"] = deprecate;
module.exports = exports["default"];
},{}],14:[function(require,module,exports){
'use strict';

exports.__esModule = true;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

var _useBeforeUnload = require('./useBeforeUnload');

var _useBeforeUnload2 = _interopRequireDefault(_useBeforeUnload);

exports['default'] = _deprecate2['default'](_useBeforeUnload2['default'], 'enableBeforeUnload is deprecated, use useBeforeUnload instead');
module.exports = exports['default'];
},{"./deprecate":13,"./useBeforeUnload":21}],15:[function(require,module,exports){
'use strict';

exports.__esModule = true;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

var _useQueries = require('./useQueries');

var _useQueries2 = _interopRequireDefault(_useQueries);

exports['default'] = _deprecate2['default'](_useQueries2['default'], 'enableQueries is deprecated, use useQueries instead');
module.exports = exports['default'];
},{"./deprecate":13,"./useQueries":22}],16:[function(require,module,exports){
"use strict";

exports.__esModule = true;
function extractPath(string) {
  var match = string.match(/^https?:\/\/[^\/]*/);

  if (match == null) return string;

  return string.substring(match[0].length);
}

exports["default"] = extractPath;
module.exports = exports["default"];
},{}],17:[function(require,module,exports){
'use strict';

exports.__esModule = true;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

var _createLocation2 = require('./createLocation');

var _createLocation3 = _interopRequireDefault(_createLocation2);

var _createBrowserHistory = require('./createBrowserHistory');

var _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);

exports.createHistory = _createBrowserHistory2['default'];

var _createHashHistory2 = require('./createHashHistory');

var _createHashHistory3 = _interopRequireDefault(_createHashHistory2);

exports.createHashHistory = _createHashHistory3['default'];

var _createMemoryHistory2 = require('./createMemoryHistory');

var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2);

exports.createMemoryHistory = _createMemoryHistory3['default'];

var _useBasename2 = require('./useBasename');

var _useBasename3 = _interopRequireDefault(_useBasename2);

exports.useBasename = _useBasename3['default'];

var _useBeforeUnload2 = require('./useBeforeUnload');

var _useBeforeUnload3 = _interopRequireDefault(_useBeforeUnload2);

exports.useBeforeUnload = _useBeforeUnload3['default'];

var _useQueries2 = require('./useQueries');

var _useQueries3 = _interopRequireDefault(_useQueries2);

exports.useQueries = _useQueries3['default'];

var _Actions2 = require('./Actions');

var _Actions3 = _interopRequireDefault(_Actions2);

exports.Actions = _Actions3['default'];

// deprecated

var _enableBeforeUnload2 = require('./enableBeforeUnload');

var _enableBeforeUnload3 = _interopRequireDefault(_enableBeforeUnload2);

exports.enableBeforeUnload = _enableBeforeUnload3['default'];

var _enableQueries2 = require('./enableQueries');

var _enableQueries3 = _interopRequireDefault(_enableQueries2);

exports.enableQueries = _enableQueries3['default'];
var createLocation = _deprecate2['default'](_createLocation3['default'], 'Using createLocation without a history instance is deprecated; please use history.createLocation instead');
exports.createLocation = createLocation;
},{"./Actions":2,"./createBrowserHistory":7,"./createHashHistory":9,"./createLocation":11,"./createMemoryHistory":12,"./deprecate":13,"./enableBeforeUnload":14,"./enableQueries":15,"./useBasename":20,"./useBeforeUnload":21,"./useQueries":22}],18:[function(require,module,exports){
'use strict';

exports.__esModule = true;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

var _extractPath = require('./extractPath');

var _extractPath2 = _interopRequireDefault(_extractPath);

function parsePath(path) {
  var pathname = _extractPath2['default'](path);
  var search = '';
  var hash = '';

  "development" !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like "%s"', path) : undefined;

  var hashIndex = pathname.indexOf('#');
  if (hashIndex !== -1) {
    hash = pathname.substring(hashIndex);
    pathname = pathname.substring(0, hashIndex);
  }

  var searchIndex = pathname.indexOf('?');
  if (searchIndex !== -1) {
    search = pathname.substring(searchIndex);
    pathname = pathname.substring(0, searchIndex);
  }

  if (pathname === '') pathname = '/';

  return {
    pathname: pathname,
    search: search,
    hash: hash
  };
}

exports['default'] = parsePath;
module.exports = exports['default'];
},{"./extractPath":16,"warning":29}],19:[function(require,module,exports){
'use strict';

exports.__esModule = true;

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

function runTransitionHook(hook, location, callback) {
  var result = hook(location, callback);

  if (hook.length < 2) {
    // Assume the hook runs synchronously and automatically
    // call the callback with the return value.
    callback(result);
  } else {
    "development" !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined;
  }
}

exports['default'] = runTransitionHook;
module.exports = exports['default'];
},{"warning":29}],20:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

var _ExecutionEnvironment = require('./ExecutionEnvironment');

var _runTransitionHook = require('./runTransitionHook');

var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);

var _extractPath = require('./extractPath');

var _extractPath2 = _interopRequireDefault(_extractPath);

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

function useBasename(createHistory) {
  return function () {
    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
    var basename = options.basename;

    var historyOptions = _objectWithoutProperties(options, ['basename']);

    var history = createHistory(historyOptions);

    // Automatically use the value of <base href> in HTML
    // documents as basename if it's not explicitly given.
    if (basename == null && _ExecutionEnvironment.canUseDOM) {
      var base = document.getElementsByTagName('base')[0];

      if (base) basename = _extractPath2['default'](base.href);
    }

    function addBasename(location) {
      if (basename && location.basename == null) {
        if (location.pathname.indexOf(basename) === 0) {
          location.pathname = location.pathname.substring(basename.length);
          location.basename = basename;

          if (location.pathname === '') location.pathname = '/';
        } else {
          location.basename = '';
        }
      }

      return location;
    }

    function prependBasename(location) {
      if (!basename) return location;

      if (typeof location === 'string') location = _parsePath2['default'](location);

      var pname = location.pathname;
      var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/';
      var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname;
      var pathname = normalizedBasename + normalizedPathname;

      return _extends({}, location, {
        pathname: pathname
      });
    }

    // Override all read methods with basename-aware versions.
    function listenBefore(hook) {
      return history.listenBefore(function (location, callback) {
        _runTransitionHook2['default'](hook, addBasename(location), callback);
      });
    }

    function listen(listener) {
      return history.listen(function (location) {
        listener(addBasename(location));
      });
    }

    // Override all write methods with basename-aware versions.
    function push(location) {
      history.push(prependBasename(location));
    }

    function replace(location) {
      history.replace(prependBasename(location));
    }

    function createPath(location) {
      return history.createPath(prependBasename(location));
    }

    function createHref(location) {
      return history.createHref(prependBasename(location));
    }

    function createLocation() {
      return addBasename(history.createLocation.apply(history, arguments));
    }

    // deprecated
    function pushState(state, path) {
      if (typeof path === 'string') path = _parsePath2['default'](path);

      push(_extends({ state: state }, path));
    }

    // deprecated
    function replaceState(state, path) {
      if (typeof path === 'string') path = _parsePath2['default'](path);

      replace(_extends({ state: state }, path));
    }

    return _extends({}, history, {
      listenBefore: listenBefore,
      listen: listen,
      push: push,
      replace: replace,
      createPath: createPath,
      createHref: createHref,
      createLocation: createLocation,

      pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),
      replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')
    });
  };
}

exports['default'] = useBasename;
module.exports = exports['default'];
},{"./ExecutionEnvironment":6,"./deprecate":13,"./extractPath":16,"./parsePath":18,"./runTransitionHook":19}],21:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

var _ExecutionEnvironment = require('./ExecutionEnvironment');

var _DOMUtils = require('./DOMUtils');

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

function startBeforeUnloadListener(getBeforeUnloadPromptMessage) {
  function listener(event) {
    var message = getBeforeUnloadPromptMessage();

    if (typeof message === 'string') {
      (event || window.event).returnValue = message;
      return message;
    }
  }

  _DOMUtils.addEventListener(window, 'beforeunload', listener);

  return function () {
    _DOMUtils.removeEventListener(window, 'beforeunload', listener);
  };
}

/**
 * Returns a new createHistory function that can be used to create
 * history objects that know how to use the beforeunload event in web
 * browsers to cancel navigation.
 */
function useBeforeUnload(createHistory) {
  return function (options) {
    var history = createHistory(options);

    var stopBeforeUnloadListener = undefined;
    var beforeUnloadHooks = [];

    function getBeforeUnloadPromptMessage() {
      var message = undefined;

      for (var i = 0, len = beforeUnloadHooks.length; message == null && i < len; ++i) {
        message = beforeUnloadHooks[i].call();
      }return message;
    }

    function listenBeforeUnload(hook) {
      beforeUnloadHooks.push(hook);

      if (beforeUnloadHooks.length === 1) {
        if (_ExecutionEnvironment.canUseDOM) {
          stopBeforeUnloadListener = startBeforeUnloadListener(getBeforeUnloadPromptMessage);
        } else {
          "development" !== 'production' ? _warning2['default'](false, 'listenBeforeUnload only works in DOM environments') : undefined;
        }
      }

      return function () {
        beforeUnloadHooks = beforeUnloadHooks.filter(function (item) {
          return item !== hook;
        });

        if (beforeUnloadHooks.length === 0 && stopBeforeUnloadListener) {
          stopBeforeUnloadListener();
          stopBeforeUnloadListener = null;
        }
      };
    }

    // deprecated
    function registerBeforeUnloadHook(hook) {
      if (_ExecutionEnvironment.canUseDOM && beforeUnloadHooks.indexOf(hook) === -1) {
        beforeUnloadHooks.push(hook);

        if (beforeUnloadHooks.length === 1) stopBeforeUnloadListener = startBeforeUnloadListener(getBeforeUnloadPromptMessage);
      }
    }

    // deprecated
    function unregisterBeforeUnloadHook(hook) {
      if (beforeUnloadHooks.length > 0) {
        beforeUnloadHooks = beforeUnloadHooks.filter(function (item) {
          return item !== hook;
        });

        if (beforeUnloadHooks.length === 0) stopBeforeUnloadListener();
      }
    }

    return _extends({}, history, {
      listenBeforeUnload: listenBeforeUnload,

      registerBeforeUnloadHook: _deprecate2['default'](registerBeforeUnloadHook, 'registerBeforeUnloadHook is deprecated; use listenBeforeUnload instead'),
      unregisterBeforeUnloadHook: _deprecate2['default'](unregisterBeforeUnloadHook, 'unregisterBeforeUnloadHook is deprecated; use the callback returned from listenBeforeUnload instead')
    });
  };
}

exports['default'] = useBeforeUnload;
module.exports = exports['default'];
},{"./DOMUtils":5,"./ExecutionEnvironment":6,"./deprecate":13,"warning":29}],22:[function(require,module,exports){
'use strict';

exports.__esModule = true;

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

var _warning = require('warning');

var _warning2 = _interopRequireDefault(_warning);

var _queryString = require('query-string');

var _runTransitionHook = require('./runTransitionHook');

var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);

var _parsePath = require('./parsePath');

var _parsePath2 = _interopRequireDefault(_parsePath);

var _deprecate = require('./deprecate');

var _deprecate2 = _interopRequireDefault(_deprecate);

var SEARCH_BASE_KEY = '$searchBase';

function defaultStringifyQuery(query) {
  return _queryString.stringify(query).replace(/%20/g, '+');
}

var defaultParseQueryString = _queryString.parse;

function isNestedObject(object) {
  for (var p in object) {
    if (object.hasOwnProperty(p) && typeof object[p] === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true;
  }return false;
}

/**
 * Returns a new createHistory function that may be used to create
 * history objects that know how to handle URL queries.
 */
function useQueries(createHistory) {
  return function () {
    var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
    var stringifyQuery = options.stringifyQuery;
    var parseQueryString = options.parseQueryString;

    var historyOptions = _objectWithoutProperties(options, ['stringifyQuery', 'parseQueryString']);

    var history = createHistory(historyOptions);

    if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery;

    if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString;

    function addQuery(location) {
      if (location.query == null) {
        var search = location.search;

        location.query = parseQueryString(search.substring(1));
        location[SEARCH_BASE_KEY] = { search: search, searchBase: '' };
      }

      // TODO: Instead of all the book-keeping here, this should just strip the
      // stringified query from the search.

      return location;
    }

    function appendQuery(location, query) {
      var _extends2;

      var queryString = undefined;
      if (!query || (queryString = stringifyQuery(query)) === '') return location;

      "development" !== 'production' ? _warning2['default'](stringifyQuery !== defaultStringifyQuery || !isNestedObject(query), 'useQueries does not stringify nested query objects by default; ' + 'use a custom stringifyQuery function') : undefined;

      if (typeof location === 'string') location = _parsePath2['default'](location);

      var searchBaseSpec = location[SEARCH_BASE_KEY];
      var searchBase = undefined;
      if (searchBaseSpec && location.search === searchBaseSpec.search) {
        searchBase = searchBaseSpec.searchBase;
      } else {
        searchBase = location.search || '';
      }

      var search = searchBase + (searchBase ? '&' : '?') + queryString;

      return _extends({}, location, (_extends2 = {
        search: search
      }, _extends2[SEARCH_BASE_KEY] = { search: search, searchBase: searchBase }, _extends2));
    }

    // Override all read methods with query-aware versions.
    function listenBefore(hook) {
      return history.listenBefore(function (location, callback) {
        _runTransitionHook2['default'](hook, addQuery(location), callback);
      });
    }

    function listen(listener) {
      return history.listen(function (location) {
        listener(addQuery(location));
      });
    }

    // Override all write methods with query-aware versions.
    function push(location) {
      history.push(appendQuery(location, location.query));
    }

    function replace(location) {
      history.replace(appendQuery(location, location.query));
    }

    function createPath(location, query) {
      //warning(
      //  !query,
      //  'the query argument to createPath is deprecated; use a location descriptor instead'
      //)
      return history.createPath(appendQuery(location, query || location.query));
    }

    function createHref(location, query) {
      //warning(
      //  !query,
      //  'the query argument to createHref is deprecated; use a location descriptor instead'
      //)
      return history.createHref(appendQuery(location, query || location.query));
    }

    function createLocation() {
      return addQuery(history.createLocation.apply(history, arguments));
    }

    // deprecated
    function pushState(state, path, query) {
      if (typeof path === 'string') path = _parsePath2['default'](path);

      push(_extends({ state: state }, path, { query: query }));
    }

    // deprecated
    function replaceState(state, path, query) {
      if (typeof path === 'string') path = _parsePath2['default'](path);

      replace(_extends({ state: state }, path, { query: query }));
    }

    return _extends({}, history, {
      listenBefore: listenBefore,
      listen: listen,
      push: push,
      replace: replace,
      createPath: createPath,
      createHref: createHref,
      createLocation: createLocation,

      pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),
      replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')
    });
  };
}

exports['default'] = useQueries;
module.exports = exports['default'];
},{"./deprecate":13,"./parsePath":18,"./runTransitionHook":19,"query-string":27,"warning":29}],23:[function(require,module,exports){
var pSlice = Array.prototype.slice;
var objectKeys = require('./lib/keys.js');
var isArguments = require('./lib/is_arguments.js');

var deepEqual = module.exports = function (actual, expected, opts) {
  if (!opts) opts = {};
  // 7.1. All identical values are equivalent, as determined by ===.
  if (actual === expected) {
    return true;

  } else if (actual instanceof Date && expected instanceof Date) {
    return actual.getTime() === expected.getTime();

  // 7.3. Other pairs that do not both pass typeof value == 'object',
  // equivalence is determined by ==.
  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
    return opts.strict ? actual === expected : actual == expected;

  // 7.4. For all other Object pairs, including Array objects, equivalence is
  // determined by having the same number of owned properties (as verified
  // with Object.prototype.hasOwnProperty.call), the same set of keys
  // (although not necessarily the same order), equivalent values for every
  // corresponding key, and an identical 'prototype' property. Note: this
  // accounts for both named and indexed properties on Arrays.
  } else {
    return objEquiv(actual, expected, opts);
  }
}

function isUndefinedOrNull(value) {
  return value === null || value === undefined;
}

function isBuffer (x) {
  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
    return false;
  }
  if (x.length > 0 && typeof x[0] !== 'number') return false;
  return true;
}

function objEquiv(a, b, opts) {
  var i, key;
  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
    return false;
  // an identical 'prototype' property.
  if (a.prototype !== b.prototype) return false;
  //~~~I've managed to break Object.keys through screwy arguments passing.
  //   Converting to array solves the problem.
  if (isArguments(a)) {
    if (!isArguments(b)) {
      return false;
    }
    a = pSlice.call(a);
    b = pSlice.call(b);
    return deepEqual(a, b, opts);
  }
  if (isBuffer(a)) {
    if (!isBuffer(b)) {
      return false;
    }
    if (a.length !== b.length) return false;
    for (i = 0; i < a.length; i++) {
      if (a[i] !== b[i]) return false;
    }
    return true;
  }
  try {
    var ka = objectKeys(a),
        kb = objectKeys(b);
  } catch (e) {//happens when one is a string literal and the other isn't
    return false;
  }
  // having the same number of owned properties (keys incorporates
  // hasOwnProperty)
  if (ka.length != kb.length)
    return false;
  //the same set of keys (although not necessarily the same order),
  ka.sort();
  kb.sort();
  //~~~cheap key test
  for (i = ka.length - 1; i >= 0; i--) {
    if (ka[i] != kb[i])
      return false;
  }
  //equivalent values for every corresponding key, and
  //~~~possibly expensive deep test
  for (i = ka.length - 1; i >= 0; i--) {
    key = ka[i];
    if (!deepEqual(a[key], b[key], opts)) return false;
  }
  return typeof a === typeof b;
}

},{"./lib/is_arguments.js":24,"./lib/keys.js":25}],24:[function(require,module,exports){
var supportsArgumentsClass = (function(){
  return Object.prototype.toString.call(arguments)
})() == '[object Arguments]';

exports = module.exports = supportsArgumentsClass ? supported : unsupported;

exports.supported = supported;
function supported(object) {
  return Object.prototype.toString.call(object) == '[object Arguments]';
};

exports.unsupported = unsupported;
function unsupported(object){
  return object &&
    typeof object == 'object' &&
    typeof object.length == 'number' &&
    Object.prototype.hasOwnProperty.call(object, 'callee') &&
    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
    false;
};

},{}],25:[function(require,module,exports){
exports = module.exports = typeof Object.keys === 'function'
  ? Object.keys : shim;

exports.shim = shim;
function shim (obj) {
  var keys = [];
  for (var key in obj) keys.push(key);
  return keys;
}

},{}],26:[function(require,module,exports){
/**
 * Copyright 2013-2015, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

'use strict';

/**
 * Use invariant() to assert state which your program assumes to be true.
 *
 * Provide sprintf-style format (only %s is supported) and arguments
 * to provide information about what broke and what you were
 * expecting.
 *
 * The invariant message will be stripped in production, but the invariant
 * will remain to ensure logic does not differ in production.
 */

var invariant = function(condition, format, a, b, c, d, e, f) {
  if ("development" !== 'production') {
    if (format === undefined) {
      throw new Error('invariant requires an error message argument');
    }
  }

  if (!condition) {
    var error;
    if (format === undefined) {
      error = new Error(
        'Minified exception occurred; use the non-minified dev environment ' +
        'for the full error message and additional helpful warnings.'
      );
    } else {
      var args = [a, b, c, d, e, f];
      var argIndex = 0;
      error = new Error(
        format.replace(/%s/g, function() { return args[argIndex++]; })
      );
      error.name = 'Invariant Violation';
    }

    error.framesToPop = 1; // we don't care about invariant's own frame
    throw error;
  }
};

module.exports = invariant;

},{}],27:[function(require,module,exports){
'use strict';
var strictUriEncode = require('strict-uri-encode');

exports.extract = function (str) {
	return str.split('?')[1] || '';
};

exports.parse = function (str) {
	if (typeof str !== 'string') {
		return {};
	}

	str = str.trim().replace(/^(\?|#|&)/, '');

	if (!str) {
		return {};
	}

	return str.split('&').reduce(function (ret, param) {
		var parts = param.replace(/\+/g, ' ').split('=');
		// Firefox (pre 40) decodes `%3D` to `=`
		// https://github.com/sindresorhus/query-string/pull/37
		var key = parts.shift();
		var val = parts.length > 0 ? parts.join('=') : undefined;

		key = decodeURIComponent(key);

		// missing `=` should be `null`:
		// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
		val = val === undefined ? null : decodeURIComponent(val);

		if (!ret.hasOwnProperty(key)) {
			ret[key] = val;
		} else if (Array.isArray(ret[key])) {
			ret[key].push(val);
		} else {
			ret[key] = [ret[key], val];
		}

		return ret;
	}, {});
};

exports.stringify = function (obj) {
	return obj ? Object.keys(obj).sort().map(function (key) {
		var val = obj[key];

		if (val === undefined) {
			return '';
		}

		if (val === null) {
			return key;
		}

		if (Array.isArray(val)) {
			return val.sort().map(function (val2) {
				return strictUriEncode(key) + '=' + strictUriEncode(val2);
			}).join('&');
		}

		return strictUriEncode(key) + '=' + strictUriEncode(val);
	}).filter(function (x) {
		return x.length > 0;
	}).join('&') : '';
};

},{"strict-uri-encode":28}],28:[function(require,module,exports){
'use strict';
module.exports = function (str) {
	return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
		return '%' + c.charCodeAt(0).toString(16);
	});
};

},{}],29:[function(require,module,exports){
/**
 * Copyright 2014-2015, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

'use strict';

/**
 * Similar to invariant but only logs a warning if the condition is not met.
 * This can be used to log issues in development environments in critical
 * paths. Removing the logging code for production environments will keep the
 * same logic and follow the same code paths.
 */

var warning = function() {};

if ("development" !== 'production') {
  warning = function(condition, format, args) {
    var len = arguments.length;
    args = new Array(len > 2 ? len - 2 : 0);
    for (var key = 2; key < len; key++) {
      args[key - 2] = arguments[key];
    }
    if (format === undefined) {
      throw new Error(
        '`warning(condition, format, ...args)` requires a warning ' +
        'message argument'
      );
    }

    if (format.length < 10 || (/^[s\W]*$/).test(format)) {
      throw new Error(
        'The warning format should be able to uniquely identify this ' +
        'warning. Please, use a more descriptive format than: ' + format
      );
    }

    if (!condition) {
      var argIndex = 0;
      var message = 'Warning: ' +
        format.replace(/%s/g, function() {
          return args[argIndex++];
        });
      if (typeof console !== 'undefined') {
        console.error(message);
      }
      try {
        // This error was thrown as a convenience so that you can use this stack
        // to find the callsite that caused this warning to fire.
        throw new Error(message);
      } catch(x) {}
    }
  };
}

module.exports = warning;

},{}]},{},[1]);

redpajama_set_name: RedPajamaGithub


text:
Boy, 9, fighting leukaemia is helped by special best friend
Alex Prescott has suffered from three cancer relapses and is unable to leave hospital
Leigh McManus
05:00, 7 APR 2018
Lewis Taylor, eight and Alex Prescott, nine, from St Helens. The boys first met each other when Alex Prescott moved to the same school as Lewis
The parents of a nine-year-old boy fighting leukaemia told how a special friendship with his classmate is helping him pull through.
Alex Prescott, aged nine, from St Helens, suffered from three cancer relapses and is unable to leave Royal Children's Hospital in Manchester.
But the huge weight on his shoulders is lifted by his unique friendship with his eight-year-old mate Lewis Taylor.
The two lads live miles apart but FaceTime each other every night and play online games.
The boys first met each other when Alex moved to Allanson Street Primary School in St Helens.
Alex, who has Bell's palsy, had been ravaged by illness since the age of six and mum thought he would struggle to make friends because of the effects.
When Alex was diagnosed with leukemia in 2015, Lewis took his new best friend under his wing.
Alex Prescott from St Helens, who has been suffering from leukemia since 2015
Alex's mum Michelle said: "The school opened their arms to him. There is one boy I am especially thankful to and that is Alex's best friend, Lewis.
"As soon as Alex walked through the door to be introduced, Lewis had Alex sit next to him and from there they become best friends.
'Both my parents were diagnosed with cancer - but I won't let it win'
"Me and Alex's dad will always have a special place for Lewis in our hearts, he goes above and beyond for my boy and so does his family, who we have become good friends with."
The friendship between St Helens schoolboys Alex Prescott and his classmate Lewis Taylor has brought their two families together. Alex was diagnosed with leukaemia in 2015
Lewis told the ECHO: "I'm happy now because he is my best friend in the universe, but when I first saw him I was sad because he was poorly."
Alex, who won Pride of St Helens Child of Courage in 2017, is due to start a cell therapy trial and despite blow after blow, his friendship with Lewis and his family helps him stay positive.
Reds fan battling rare cancer preparing six-month-old daughter for life without him
Lewis's mum is both proud of her son and astounded by the courage of his best mate, she said: "He is like a little superhero in a child's body. No matter what, he's smiling. He's got so much courage."
Lewis Taylor with Alex Prescott
Alex Prescott and Lewis Taylor with their families. Alex has been suffering from leukemia since 2015 and Lewis's caring nature kicked in when he met his now best friend
She added: "Because Lewis was so caring with Alex at school Alex's parents sent a letter home saying how proud I should be of Lewis and the way he cared for Alex so far. They thanked him for being such a good
friend, welcoming him and inviting Lewis to his birthday. Their unique friendship started from there.
Dad fighting terminal cancer refuses to accept this will be his last Christmas
"Alex has found a place in my heart since I met him. I have grown so fond of him, he is such a sweet, lovely and clever little boy. He has been through so much and still manages to smile and get on with it and be happy."
Lewis's family will be running 5k to raise money to give Alex a treat to enjoy after treatment, you can donate here gofundme.com/alexs-family-breakfun-adventures.
Uplifting stories
Louise RedknappLouise Redknapp admits she still calls Jamie her husbandIn a moving interview she said: "I am the biggest train wreck there is"

redpajama_set_name: RedPajamaCommonCrawl


An extremely practical and popular folding seat. The framework is made from aluminium, so it is very strong as well as being light to carry. It has two handles, so can be carried and used for balance and support as if it were a walking stick. It opens out easily into a comfortable chair with a burgundy seat.


Find Touristic Places On "Google Maps"
Each season more and more tourists choose to spend their holidays in Turkey. If you have been charmed by the cultural and natural allure of Turkey, Istanbul is its largest and most populated city, and you too may choose to book yourself into a 5 star Istanbul hotel during your holidays to soak up all the sights and sounds. It is a consensus among visitors that the quintessential Istanbul travel experience would not be complete without a trip to Sultanahmet, the centre of Istanbul's downtown core. And what better way to immerse yourself in the entertainment and excitement of this area than by staying in the lap of luxury at Recital Hotel. Ranking among the best luxury hotels in Turkey, Recital Hotel provides 5 star quality service to its guests in its convenient location at the heart of town. Recital Hotel unique concept has distinguished this Bosphorus hotel from other luxury hotels in Istanbul. Recital Hotel offers a balanced stay for visitors looking for a lively atmosphere with a peaceful, bird's eye view of the Bosphorus – yet another reason why this hotel is distinguished from other Old City Hotels in Istanbul.


This dark grey color has been developped especially for this client in Toronto who had a very precise idea in her mind. The result is fabulous ! modern yet authentic. Zellige tiles has the power to make a place unique.


text:
Wikunia andyjska, wikunia, wigoń  (Vicugna vicugna) – gatunek południowoamerykańskiego, roślinożernego ssaka parzystokopytnego, najmniejszego przedstawiciela rodziny wielbłądowatych (Camelidae), protoplasta alpaki, blisko spokrewniony z gwanako andyjskim i lamą, zwierzętami określanymi w języku polskim wspólną nazwą lamy. Żyje w małych grupach rodzinnych, na stokach Andów.

Rysunek wikunii andyjskiej znajduje się na herbie Peru.

Taksonomia
Gatunek po raz pierwszy zgodnie z zasadami nazewnictwa binominalnego opisał w 1782 roku hiszpańsko-chilijski przyrodnik Juan Ignacio Molina nadając mu nazwę Camellus Vicugna. Holotyp pochodził z Chile. Okaz typowy nie został określony. Jedyny dziko żyjący przedstawiciel rodzaju wikunia (Vicugna). Podgatunek po raz pierwszy zgodnie z zasadami nazewnictwa binominalnego opisał w 1917 roku brytyjski zoolog Oldfield Thomas nadając mu nazwę Lama vicugna mensalis. Okaz typowy pochodził z Incapirra, na wysokości , w Junín, w Peru. Okazem typowym był samiec znajdujący się w Muzeum Historii Naturalnej w Londynie zebrany przez Jana Kalinowskiego.

Oddzielenie V. vicugna i Lama guanicoe nastąpiło 2–3 miliony lat temu, co sugeruje, że te dwa rodzaje mogą należeć do jednego taksonu, chociaż powszechnie rozpoznawane są jako odrębne. Podgatunki są rozróżniane na podstawie genetyki, siedliska i morfologii. Północny podgatunek mensalis jest blisko spokrewniony z udomowionym V. pacos. Autorzy Illustrated Checklist of the Mammals of the World rozpoznają dwa podgatunki.

Etymologia
 Vicugna: hiszpańska nazwa vicuña dla wikunii, od keczuańskiej nazwy wik'uña dla wikunii.

Zasięg występowania
Wikunia andyjska występuje w stanie naturalnym w Ameryce Południowej zamieszkując w zależności od podgatunku:
 V. vicugna vicugna – zachodnia Boliwia, północno-zachodnia Argentyna i północno-wschodnie Chile (18°–29° szerokości geograficznej południowej).
 V. vicugna mensalis – południowo-wschodni Peru, zachodnia Boliwia i północno-wschodnie Chile (9°–19° szerokości geograficznej południowej).

W Ekwadorze występuje niewielka populacja (około 3000 osobników) sprowadzoną z Peru, Chile i Boliwii w latach 80. XX wieku.

W zapisie kopalnym znane są od późnego plejstocenu.

Morfologia
Długość ciała (bez ogona) 125–190 cm, długość ogona 15–25 cm, wysokość w kłębie 85–90 cm; masa ciała 38–45 kg. Ciało smukłe, o delikatnej budowie. Nogi długie i cienkie. Głowa zaokrąglona, krótka część twarzowa. Sierść gęsta, puszysta i miękka, o zmiennym ubarwieniu – od żółtawego do czerwonobrązowego na grzbiecie i bokach, jasna na brzuchu. Włosy puchowe różnią się od pokrywowych tylko nieznacznie, dzięki czemu sierść robi wrażenie jednolitej. Jednym z przystosowań do przebywania na dużych wysokościach jest duże serce wikunii – jego masa jest o połowę większa od serca innych gatunków tej wielkości.

Ekologia

Środowisko
Żyje na stokach Andów, w suchym i zimnym klimacie, na dużych wysokościach (3 500–5 750 m n.p.m.), na stepowych płaskowyżach, powyżej granicy lasów, a poniżej strefy śniegu, głównie na obszarach suchych, pokrytych niską roślinnością. Ze względu na codzienne zapotrzebowanie na wodę przebywa blisko wodopoju, zwykle nie więcej niż 2 km.

Tryb życia

Wikunie andyjskie tworzą haremowe grupy rodzinne złożone z 6–19 osobników – samca, kilku do kilkunastu samic i młodych. Liczebność stad jest zależna od obfitości pokarmu, dostępu do wodopoju i legowisk. W skrajnych warunkach stada są mniejsze. Samce wykazują silnie rozwinięty terytorializm. Zajmują terytoria o powierzchni około 18 ha. Granice zajmowanych terenów znakowane są przez członków stada kałem i moczem. Wyschnięte łajno jest wykorzystywane przez miejscową ludność jako opał. Spotykane są również luźne grupy samców pozbawionych terytorium.

Są aktywne w ciągu dnia. Na noc przenoszą się do legowisk położonych na większych wysokościach. Żywią się roślinami trawiastymi.

Rozród
Okres godowy rozpoczyna się w marcu i kwietniu. Jak wszystkie wielbłądowate, wigonie kopulują w pozycji siedzącej. Kopulacja trwa 10–20 minut. Po ciąży trwającej od 330 do 350 dni, w lutym lub marcu następnego roku rodzi się jedno młode o masie urodzeniowej około 5 kg. Samica rodzi w pozycji stojącej. Po kwadransie od urodzenia młody wigoń jest zdolny do podążania za matką. Krótko po porodzie samica ponownie przystępuje do kopulacji. Młode samce przebywają blisko matki przez 4–9 miesięcy, młode samice około 10 miesięcy, następnie wszystkie młode są przeganiane ze stada przez dominującego samca, a w stadzie rodzą się kolejne młode. Samce wikunii osiągają dojrzałość płciową w drugim roku życia, a samice po ukończeniu 2 lat. Zdolność rozrodczą zachowują do 19. roku życia.

Zagrożenia i ochrona

Naturalnymi wrogami wigoni są pumy i dzikie psowate. Ich wpływ na stan populacji jest znikomy. Najpoważniejszym zagrożeniem dla tego gatunku jest człowiek. Od czasów konkwistadorów ludzie polowali na te zwierzęta masowo i bez ograniczeń. W niektórych latach w wyniku polowań padało ponad 80 tys. osobników.
Na skutek zmasowanych polowań zwierzę to całkowicie zniknęło z wielu obszarów. W 1925 rząd Peru wydał ustawę o ochronie wikunii, jednak z różnych powodów rzeczywista ochrona gatunku nie była skutecznie realizowana. Dopiero utworzenie parków narodowych na terenie Peru i Boliwii zahamowało spadek liczebności populacji, a dalsze działania władz i organizacji międzynarodowych przyczyniły się do jej powolnego wzrostu. W 1981 było ich 62 tys.} Według danych podanych w sierpniu 2008 na łamach miesięcznika National Geographic, populacja wigoni liczyła około 150 tys. osobników, a według szacunków IUCN w 2009 prawie 350 tys. osobników. Gatunek jest objęty konwencją CITES (załączniki I i II)

Wikunie andyjskie są chowane w wielu ogrodach zoologicznych świata, w tym w kilku polskich.

Przypisy

Bibliografia

Wielbłądowate
Ssaki Ameryki Południowej
Taksony opisane przez Juana Ignacio Molinę
Gatunki i podgatunki zwierząt nazwane w 1782 roku

redpajama_set_name: RedPajamaWikipedia


We experience growth in so many ways, but here's a shout out to the photographs for capturing our greatest moments.
I am such a "capture the moment" type of person. Everyone always tells me that I "do it for the Instagram" or they saw the phrase, "Let's take a photo!" just pouring out of my mouth. Why, yes. I do enjoy keeping my social media up to date. But the truth is, I find joy when I come across a photo from the past. It is pure nostalgia of making the most every moment. Memories are something I cherish and hold close to my heart. Every day you meet someone new, and to know that each person comes into your life with a different influence on you is inspiring and motivating. It inspires me to get out there and live life with those who bring out the best in me. It motivates me to be myself and be kind, to create connections with anyone and everyone you encounter. You never regret chances you take but to not take a chance comes with regret. To capture a moment provides a spark for reminiscing later on down the road.
I find beauty in the photographs. They hold happiness, growth, friendship, joy, laughter, smiles, fashion, and so much more. It's much better to read a book that has illustrations than to read one with just words, am I right?!
My recent favorite theme is growth. Growth can come in many forms. We are all aging with every second. Our smile changes depending on the day, our size changes, our hair changes, our style changes, and so on and so forth. Much change is proven in photographs. They're irresistible in that way.
Growth proves you overcame the hardest battle you fought. Because after those long months of tears and weariness, you were able to overcome and find the bliss provided for you in this life. How special and rewarding is that?
Growth proves you lost that weight you were fighting to see the results of. It may have taken months, but the comparison can be amazing, and once again, rewarding.
Growth since you were a child into the beautiful soul you are today. Despite the battles lost, we get to celebrate those we have won too. You've matured an extraordinary amount throughout the years.
Growth in friendships that have been formed through this journey of life you've been on. And some that you've lost, but so what? Life has a way of replacing the bad apples for the good ones.
Growth in your education. Our parents began with documenting our elementary school photos, but now we are all seeing college graduation photos. How neat is that?! We are all flowers blooming into who we are shaped to be.
Growth in your self esteem and confidence. Look past your insecurities because I guarantee someone is out there that loves them endlessly.
We experience growth in so many ways. But here's a shout out to the photographs for capturing our greatest moments. They hold pure gold. Live in the moment, but don't forget to capture it. Because to look back on the greatest times of your life is to look back at genuine happiness and maturation.
Keep saying "do it for the Insta," but know that much more will come out of it than just wanting likes. More will come with the memories you are creating with people whom you wouldn't trade for the world.


Amistee Air Duct Cleaning and Insulation in Michigan has won the high status of a "Super Service Provider" on Angie's List in Southeast Michigan. When you are looking for a quality duct cleaning contractor for your Michigan home, you should always hire a reputable company. Using a service like Angie's List helps homeowners connect with companies that have been reviewed by "real" previous customers. Amistee Air Duct Cleaning servicing Metro Detroit for air duct cleaning and insulation has close to 200 A+ reviews setting the duct cleaning experience on a higher level for Amistee customers. If you are looking for quality air duct cleaning in Southeast Michigan, contact Amistee located in Metro Detroit servicing Southeast Michigan for all of your indoor air quality needs at 248-349-8877.
When it comes to duct cleaning certifications the National Air Duct Cleaners Association is it. NADCA offers several certifications for companies to get including ASCS (Air Systems Cleaning Specialist) and CVI (Commercial Ventilation Inspector) and technician training certification. In the State of Michigan all duct cleaning companies need to hold a Mechanical Contractors license by law in order to properly clean air ducts. When looking for the best air duct cleaner in your area, check www.NADCA.com to see if your potential vent cleaning company is affiliated with NADCA and also check with the State of Michigan or ask your prospect company for the mechanical contractors number. These are both great first steps to ensure you get a company who is taking the proper steps in delivering quality duct cleaning.
Amistee Air Duct Cleaning has serviced the Downriver area of Michigan for duct cleaning since it opened its doors. Amistee has a fleet of vacuum trucks that will travel to your location in southeast Michigan to clean your air ducts. Many homes in the downriver area have never had their air duct cleaned before. In most cases, the homeowners are unaware that duct cleaning is even needed. Air duct cleaning will help reduce the amount of dust inside of your home and also help eliminate unwanted particulates that may be in your air.
Amistee Air Duct Cleaning MI will park one of its large vacuum trucks in your driveway and then go to work from there. All floors will be properly protected to eliminate any damage to your homes flooring. Each technician will cover their shoes with protective coverings. Once we have protected your home, it is time to start getting set up to clean your air ducts. We will assemble our suction home that leads from our vacuum truck to your furnace location. Once inside of your furnace room we will make the appropriate access into your ductwork and attach our equipment to that. When we turn our truck on it will be pulling a large amount of air out to our vacuum truck. The idea is to remove all of the debris that is on the inside of your ductwork and get it to our vacuum truck. We will go to each individual duct to clean them and spend roughly 75% of our time in your basement. In your basement we will be cleaning all of your main ductwork and individual duct runs and then focus on cleaning your furnace. Once complete it is time to clean your home up making it look as if we were not there.
To get treated with our exceptional service for cleaning your downriver Michigan home in Southeast Michigan call Amistee Air Duct Cleaning today at 248-349-8877.


text:
The Anti-epidemic measures are tightening again until 22. 1. 2021. Full-time teaching is prohibited.
Norms ČSN
Special Needs Students
Why Choose FA
Get to Know the FA
Studying at the FA
International Student Club
Architecture and Urbanism (Master's Degree)
Design (Master's Degree)
Landscape Architecture (Master's Degree)
Ph.D. Degrees
Architecture and Urbanism (Ph.D.)
Architecture and Urbanism
Research at the FA
Nearest events
Mo 1/2/2021
Annnoucement of studio project topics for WS 2020/21
Add to the Google calendar
Mo 1/2 - 23/2/2021 09:00
Registration of subjects in KOS (registration closes at 9 am)
Diploma Projects
ZAN projects
Life of FA
Erasmus 2020 Exhibition
ZS 2014
Trojmezí
Bc. Marek Fischer
Apartment houses Tre Cime
Druha Kuze Award 2018, 3dr place
Eliška Drahotová
Students from Studio Baum design hangar for airship in Spitsbergen
Please use the same login details as to KOS.
label_password
Study abroad. New website offers everything you need to know about international study stays
The rectorate of CTU in Prague recently launched a website studujvesvete.cvut.cz to inform about study opportunities abroad. The website not only offers a detailed overview of all available international study...
full message
A new amendment to the Rector's order is in effect from January 15. A maximum of 10 people are allowed in-person exams.
In-person exams, including acceptance exams (for Czech study), is only possible in the presence of a maximum of 10 people, in alert levels 3, 4 and 5 of the Czech Republic's anti-epidemic system. The new amendment also...
The Diplomky 2020 competition show brought awards to four students from the Faculty of Architecture
Graduates of the Faculty of Architecture from CTU Julie Kopecká, Vojtěch Rudorfer, Tomáš Pevný and Tomáš Rain were awarded in the competition show of diploma projects Diplomky 2020 announced by the Czech Chamber...
We have launched a new system for submitting studio projects in the gallery on the website
We have launched a new system for submitting studio projects in the gallery on the FA website, where an online exhibition of projects from the winter semester of the academic year 2020/2021 will appear from Monday 11...
Unbuilt architecture often gives a very eloquent statement about its time, says prof. Petr Vorlík about the new book
The book unbuilt / architecture of the 1980s is a joint work of a collective of authors from the Faculty of Architecture of CTU in Prague under the lead of editors Petr Vorlík and Klára Brůhová. It represents, as...
Lucie Koháková won the Graduation Projects 2020 international competition with her Bachelor's project. Jan Kulhánek won second place
The design of the Luna portable night light brought Lucie Koháková, a third-year bachelor's student of the Design program, winning the Graduation Projects 2020 international competition in the 3D Design category....
CEEPUS – call for applications to extend an existing network or establish a new one
The deadline for establishing a new network under CEEPUS or extending an existing one is approaching. CEEPUS (Central European Exchange Programme for University Studies) is an exchange programme for regional cooperation...
PES is at stage five. Free entry of students to the faculty is not possible. (UPDATED ON 6. 1.)
Until 22. 1. 2021, stricter government measures are in place according to 5th alert level. Full-time theoretical teaching for students of all years is forbidden - teaching goes into distance form. Full-time exams are...
Announcement of the new internal FA CTU competition under the CTU's institutional plan for 2021
The project New Internal Competition at the Faculty of Architecture of CTU is being implemented under the CTU's Institutional Plan for 2021. A new internal competition is being announced for the following themes: A....
Announcement of 9th annual competition show Druhá kůže 2020–2021
The Faculty of Architecture of the CTU announces the ninth year of the Druhá kůže competition show, which is for students of Bachelor programs enrolled in the winter semester of the academic year 2020/2021 or in the...
Did not you watch the Treat of the FA Management online? Check out the record footage
The coronavirus pandemic and anti-epidemic measures have significantly reduced faculty meetings, leaving many questions unanswered about study and school events. The pre-Christmas online faculty management meeting with...
The world is not disposable, says architect Petr Vorlík in a new book on defunct structures from 1948–1989
A new publication entitled Architecture on the red list / Normal is not to demolish is published, which will please not only experts but also laymen interested in architecture. Its authors are experts from the...
The success of our students of Landscape Architecture. Their projects will be presented at Europe's largest garden festival
Háta Enochová, Petr Stojaník, Marek Kratochvíl, Jan Trpkoš and Dominika G. Tesárková, students of the Landscape Architecture program will present their implementation at the prestigious International Garden...
From Monday 7. 12. it is again possible to teach in contact form
From Monday 7. 12. 2020, full-time teaching can take place for students of the 1st year of bachelor's and master's degrees and all years of doctoral study, with a maximum of 20 persons per teaching room, full-time...
Flip through Druhá kůže 2019–2020 competition show
This year's edition of the bachelor's studio projects for residential buildings (ATBS) competition shows the collection of Druhá kůže 2019–2020. It represents all participating student projects and provides...
For the content of this site is responsible: doc. Ing. arch. Jan Jakub Tesař, Ph.D.
Register and don't miss out on anything.


Samsung made a slew of announcements this week at Unpacked 2018, its biggest conference of the year, in Brooklyn, New York.
As expected, Samsung unveiled the Galaxy Note 9, the large-phone successor to last year's Galaxy Note 8. But the Korean company also had a few surprises up its sleeve.
More colours to choose from.
A better S Pen stylus.
Unsurprisingly, Galaxy Note 9 is also more expensive than the Galaxy Note 8. It has a starting price of $US999, the same as Apple's iPhone X.
Learn more about the Galaxy Note 9 and see how it stacks up to last year's Galaxy Note 8.
Samsung introduced a new smartwatch — its first without the "Gear" branding — called the Galaxy Watch.
The Galaxy Watch features "military-grade durability," an Amoled display, 39 exercises built in, and sleep tracking. It's also water-resistant and can be worn while swimming.
You can buy the Galaxy Watch in three colours – silver, black, or rose gold – and two sizes. The 42 mm version costs $US330, and the larger 46 mm Galaxy Watch will cost $US350.
Samsung will start selling the Galaxy Watch on August 24, though an LTE-enabled version won't be available until later this year.
Learn more about the Galaxy Watch.
The Samsung Galaxy Home looks like an Apple HomePod from the top but like a Google Home from the side – if a Google Home were standing on three metal stilts.
Like those other speakers, the Galaxy Home features 360-degree sound, a soft fabric exterior, and a built-in personal assistant that can answer voice commands. Samsung's Bixby AI will power the Galaxy Home, so you can use it to turn on your smart lights or lock your smart doors.
Samsung didn't give much more information about the Galaxy Home, like its price or release date, but Samsung says it will share more details at its developer conference in November.
Learn more about the Galaxy Home.
Like the newer versions of Google Assistant and Amazon Alexa, Bixby understands some context from previous conversations now, so if you ask it, for example, about concerts playing near you soon, you could ask a follow-up question – like "What about next month?" – and it will understand what you meant.
Bixby will also consider your past conversations and preferences when making recommendations. So if you ask Bixby for a restaurant recommendation, it can offer a suggestion based on your past reservations, as well as auto-fill important details, like the time and the number of people in your party.
The new version of Bixby will ship on the new Galaxy Note 9 and Galaxy Home devices. Though Bixby will certainly be better than it was, it sounds as if it won't be threatening the dominance of Google Assistant anytime soon.
Samsung also unveiled an all-new wireless-charging mat that can charge two devices at once.
Samsung's mat, called the Wireless Charger Duo, also offers something a bit different from what Apple proposed for AirPower: Instead of requiring that all your devices lie flat on the pad, Samsung's charger lets you stand up one so you can still view it while it's charging.
Samsung's Wireless Charger Duo costs $US120 and is available to buy here.


The General Arts & Science (Certificate) program offers a foundational year for students preparing for future study in a wide range of fields. For students in the Social Sciences stream, core courses in communications, computers, and personal development are enhanced by courses in Psychology, Sociology, Interpersonal Skills, Addictions, Stress Management, and Statistics. Graduates of the Social Sciences stream are prepared for future study in Community Services programs such as Social Service Worker, Behavioural Science Technology, and Child and Youth Care. Students wishing to pursue Behavioural Science Technology may require additional courses and should contact the General Arts & Science program coordinator.
For students moving on to other St. Lawrence College programs after completing this one-year program, some of the courses completed as part of this program may transfer. For more information, please consult the appropriate program coordinator of your targeted program.
Full-time General Arts and Science students who achieve a GPA of 3.00 or better for at least one semester will receive an additional 10 percent in their admission assessment when applying to any post-secondary diploma program at St. Lawrence College. This will be particularly beneficial for programs that are highly competitive and therefore ranked.
St. Lawrence College is known for being very hands-on in our learning. Between my second year and third year Marketing courses, I would say I worked with at least 10 different clients – real clients in the community. We had to go find them and do a project on them. It's a great learning experience.