text: //     Underscore.js 1.9.1
  //     http://underscorejs.org
  //     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
  //     Underscore may be freely distributed under the MIT license.
  
  (function() {
  
    // Baseline setup
    // --------------
  
    // Establish the root object, `window` (`self`) in the browser, `global`
    // on the server, or `this` in some virtual machines. We use `self`
    // instead of `window` for `WebWorker` support.
  
    // self = window
    // global = server側で使う
    // this = some virtual machines
    // ブラウザだとselfが代入される
    var root = typeof self == 'object' && self.self === self && self ||
               typeof global == 'object' && global.global === global && global ||
               this ||
               {};
  
    // Save the previous value of the `_` variable.
    // noConflictで使うらしい
    var previousUnderscore = root._;
  
    // Save bytes in the minified (but not gzipped) version:
    var ArrayProto = Array.prototype, ObjProto = Object.prototype;
    var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
  
    // Create quick reference variables for speed access to core prototypes.
    // core機能にアクセスしたほうが早くなるらしいけども。。
    var push = ArrayProto.push,
        slice = ArrayProto.slice,
        toString = ObjProto.toString,
        hasOwnProperty = ObjProto.hasOwnProperty;
  
    // All **ECMAScript 5** native function implementations that we hope to use
    // are declared here.
    var nativeArray = Array.isArray,
        nativeKeys = Object.keys,
        nativeCreate = Object.create;
  
    // Naked function reference for surrogate-prototype-swapping.
    var Ctor = function(){};
  
    // Create a safe reference to the Underscore object for use below.
    var _ = function(obj) {
      if (obj instanceof _) {
        return obj;
      }
      if (!(this instanceof _)) {
        return new _(obj);
      }
      console.log(this)
      this._wrapped = obj;
    };
  
    // Export the Underscore object for **Node.js**, with
    // backwards-compatibility for their old module API. If we're in
    // the browser, add `_` as a global object.
    // (`nodeType` is checked to ensure that `module`
    // and `exports` are not HTML elements.)
    // globalオブジェクトに「_」を入れる
    if (typeof exports != 'undefined' && !exports.nodeType) {
      if(typeof module != 'undefined' && !module.nodeType && module.exports) {
        exports = module.exports = _;
      }
      exports._ = _;
    } else {
      root._ = _;
    }
  
    // Current version.
    _.VERSION = '1.9.1';
  
    // 渡されたコールバックの効率的な（現在のエンジンの）バージョンを返し、他のアンダースコア関数で繰り返し適用される内部関数。
    // コールバックの最適化
    var optimizeCb = function(func, context, argCount) {
      if (context === void 0) return func;
      switch (argCount == null ? 3 : argCount) {
        case 1: return function(value) {
          return func.call(context, value);
        };
        // The 2-argument case is omitted because we’re not using it.
  
        case 3: return function(value, index, collection) {
          return func.call(context, value, index, collection);
        };
  
        case 4: return function(accumulator, value, index, collection) {
          return func.call(context, accumulator, value, index, collection);
        };
      }
      return function() {
        return func.apply(context, arguments);
      }
    };
  
    var builtinIteratee;
  
  
  })();
  