text: var global = Function("return this;")();
  /*!
    * Ender: open module JavaScript framework (client-lib)
    * copyright Dustin Diaz & Jacob Thornton 2011 (@ded @fat)
    * http://ender.no.de
    * License MIT
    */
  !function (context) {
  
    // a global object for node.js module compatiblity
    // ============================================
  
    context['global'] = context
  
    // Implements simple module system
    // losely based on CommonJS Modules spec v1.1.1
    // ============================================
  
    var modules = {}
      , old = context.$
  
    function require (identifier) {
      // modules can be required from ender's build system, or found on the window
      var module = modules[identifier] || window[identifier]
      if (!module) throw new Error("Requested module '" + identifier + "' has not been defined.")
      return module
    }
  
    function provide (name, what) {
      return (modules[name] = what)
    }
  
    context['provide'] = provide
    context['require'] = require
  
    function aug(o, o2) {
      for (var k in o2) k != 'noConflict' && k != '_VERSION' && (o[k] = o2[k])
      return o
    }
  
    function boosh(s, r, els) {
      // string || node || nodelist || window
      if (typeof s == 'string' || s.nodeName || (s.length && 'item' in s) || s == window) {
        els = ender._select(s, r)
        els.selector = s
      } else els = isFinite(s.length) ? s : [s]
      return aug(els, boosh)
    }
  
    function ender(s, r) {
      return boosh(s, r)
    }
  
    aug(ender, {
        _VERSION: '0.3.6'
      , fn: boosh // for easy compat to jQuery plugins
      , ender: function (o, chain) {
          aug(chain ? boosh : ender, o)
        }
      , _select: function (s, r) {
          return (r || document).querySelectorAll(s)
        }
    })
  
    aug(boosh, {
      forEach: function (fn, scope, i) {
        // opt out of native forEach so we can intentionally call our own scope
        // defaulting to the current item and be able to return self
        for (i = 0, l = this.length; i < l; ++i) i in this && fn.call(scope || this[i], this[i], i, this)
        // return self for chaining
        return this
      },
      $: ender // handy reference to self
    })
  
    ender.noConflict = function () {
      context.$ = old
      return this
    }
  
    if (typeof module !== 'undefined' && module.exports) module.exports = ender
    // use subscript notation as extern for Closure compilation
    context['ender'] = context['$'] = context['ender'] || ender
  
  }(this);
  // pakmanager:is-stream
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    'use strict';
      
      var isStream = module.exports = function (stream) {
      	return stream !== null && typeof stream === 'object' && typeof stream.pipe === 'function';
      };
      
      isStream.writable = function (stream) {
      	return isStream(stream) && stream.writable !== false && typeof stream._write === 'function' && typeof stream._writableState === 'object';
      };
      
      isStream.readable = function (stream) {
      	return isStream(stream) && stream.readable !== false && typeof stream._read === 'function' && typeof stream._readableState === 'object';
      };
      
      isStream.duplex = function (stream) {
      	return isStream.writable(stream) && isStream.readable(stream);
      };
      
      isStream.transform = function (stream) {
      	return isStream.duplex(stream) && typeof stream._transform === 'function' && typeof stream._transformState === 'object';
      };
      
    provide("is-stream", module.exports);
  }(global));
  
  // pakmanager:node-fetch
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    
      /**
       * index.js
       *
       * a request API compatible with window.fetch
       */
      
      var parse_url = require('url').parse;
      var resolve_url = require('url').resolve;
      var http = require('http');
      var https = require('https');
      var zlib = require('zlib');
      var stream = require('stream');
      
      var Body = require('./lib/body');
      var Response = require('./lib/response');
      var Headers = require('./lib/headers');
      var Request = require('./lib/request');
      var FetchError = require('./lib/fetch-error');
      
      // commonjs
      module.exports = Fetch;
      // es6 default export compatibility
      module.exports.default = module.exports;
      
      /**
       * Fetch class
       *
       * @param   Mixed    url   Absolute url or Request instance
       * @param   Object   opts  Fetch options
       * @return  Promise
       */
      function Fetch(url, opts) {
      
      	// allow call as function
      	if (!(this instanceof Fetch))
      		return new Fetch(url, opts);
      
      	// allow custom promise
      	if (!Fetch.Promise) {
      		throw new Error('native promise missing, set Fetch.Promise to your favorite alternative');
      	}
      
      	Body.Promise = Fetch.Promise;
      
      	var self = this;
      
      	// wrap http.request into fetch
      	return new Fetch.Promise(function(resolve, reject) {
      		// build request object
      		var options = new Request(url, opts);
      
      		if (!options.protocol || !options.hostname) {
      			throw new Error('only absolute urls are supported');
      		}
      
      		if (options.protocol !== 'http:' && options.protocol !== 'https:') {
      			throw new Error('only http(s) protocols are supported');
      		}
      
      		var send;
      		if (options.protocol === 'https:') {
      			send = https.request;
      		} else {
      			send = http.request;
      		}
      
      		// normalize headers
      		var headers = new Headers(options.headers);
      
      		if (options.compress) {
      			headers.set('accept-encoding', 'gzip,deflate');
      		}
      
      		if (!headers.has('user-agent')) {
      			headers.set('user-agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
      		}
      
      		if (!headers.has('connection') && !options.agent) {
      			headers.set('connection', 'close');
      		}
      
      		if (!headers.has('accept')) {
      			headers.set('accept', '*/*');
      		}
      
      		// detect form data input from form-data module, this hack avoid the need to pass multipart header manually
      		if (!headers.has('content-type') && options.body && typeof options.body.getBoundary === 'function') {
      			headers.set('content-type', 'multipart/form-data; boundary=' + options.body.getBoundary());
      		}
      
      		// bring node-fetch closer to browser behavior by setting content-length automatically
      		if (!headers.has('content-length') && /post|put|patch|delete/i.test(options.method)) {
      			if (typeof options.body === 'string') {
      				headers.set('content-length', Buffer.byteLength(options.body));
      			// detect form data input from form-data module, this hack avoid the need to add content-length header manually
      			} else if (options.body && typeof options.body.getLengthSync === 'function') {
      				// for form-data 1.x
      				if (options.body._lengthRetrievers && options.body._lengthRetrievers.length == 0) {
      					headers.set('content-length', options.body.getLengthSync().toString());
      				// for form-data 2.x
      				} else if (options.body.hasKnownLength && options.body.hasKnownLength()) {
      					headers.set('content-length', options.body.getLengthSync().toString());
      				}
      			// this is only necessary for older nodejs releases (before iojs merge)
      			} else if (options.body === undefined || options.body === null) {
      				headers.set('content-length', '0');
      			}
      		}
      
      		options.headers = headers.raw();
      
      		// http.request only support string as host header, this hack make custom host header possible
      		if (options.headers.host) {
      			options.headers.host = options.headers.host[0];
      		}
      
      		// send request
      		var req = send(options);
      		var reqTimeout;
      
      		if (options.timeout) {
      			req.once('socket', function(socket) {
      				reqTimeout = setTimeout(function() {
      					req.abort();
      					reject(new FetchError('network timeout at: ' + options.url, 'request-timeout'));
      				}, options.timeout);
      			});
      		}
      
      		req.on('error', function(err) {
      			clearTimeout(reqTimeout);
      			reject(new FetchError('request to ' + options.url + ' failed, reason: ' + err.message, 'system', err));
      		});
      
      		req.on('response', function(res) {
      			clearTimeout(reqTimeout);
      
      			// handle redirect
      			if (self.isRedirect(res.statusCode) && options.redirect !== 'manual') {
      				if (options.redirect === 'error') {
      					reject(new FetchError('redirect mode is set to error: ' + options.url, 'no-redirect'));
      					return;
      				}
      
      				if (options.counter >= options.follow) {
      					reject(new FetchError('maximum redirect reached at: ' + options.url, 'max-redirect'));
      					return;
      				}
      
      				if (!res.headers.location) {
      					reject(new FetchError('redirect location header missing at: ' + options.url, 'invalid-redirect'));
      					return;
      				}
      
      				// per fetch spec, for POST request with 301/302 response, or any request with 303 response, use GET when following redirect
      				if (res.statusCode === 303
      					|| ((res.statusCode === 301 || res.statusCode === 302) && options.method === 'POST'))
      				{
      					options.method = 'GET';
      					delete options.body;
      					delete options.headers['content-length'];
      				}
      
      				options.counter++;
      
      				resolve(Fetch(resolve_url(options.url, res.headers.location), options));
      				return;
      			}
      
      			// normalize location header for manual redirect mode
      			var headers = new Headers(res.headers);
      			if (options.redirect === 'manual' && headers.has('location')) {
      				headers.set('location', resolve_url(options.url, headers.get('location')));
      			}
      
      			// prepare response
      			var body = res.pipe(new stream.PassThrough());
      			var response_options = {
      				url: options.url
      				, status: res.statusCode
      				, statusText: res.statusMessage
      				, headers: headers
      				, size: options.size
      				, timeout: options.timeout
      			};
      
      			// response object
      			var output;
      
      			// in following scenarios we ignore compression support
      			// 1. compression support is disabled
      			// 2. HEAD request
      			// 3. no content-encoding header
      			// 4. no content response (204)
      			// 5. content not modified response (304)
      			if (!options.compress || options.method === 'HEAD' || !headers.has('content-encoding') || res.statusCode === 204 || res.statusCode === 304) {
      				output = new Response(body, response_options);
      				resolve(output);
      				return;
      			}
      
      			// otherwise, check for gzip or deflate
      			var name = headers.get('content-encoding');
      
      			// for gzip
      			if (name == 'gzip' || name == 'x-gzip') {
      				body = body.pipe(zlib.createGunzip());
      				output = new Response(body, response_options);
      				resolve(output);
      				return;
      
      			// for deflate
      			} else if (name == 'deflate' || name == 'x-deflate') {
      				// handle the infamous raw deflate response from old servers
      				// a hack for old IIS and Apache servers
      				var raw = res.pipe(new stream.PassThrough());
      				raw.once('data', function(chunk) {
      					// see http://stackoverflow.com/questions/37519828
      					if ((chunk[0] & 0x0F) === 0x08) {
      						body = body.pipe(zlib.createInflate());
      					} else {
      						body = body.pipe(zlib.createInflateRaw());
      					}
      					output = new Response(body, response_options);
      					resolve(output);
      				});
      				return;
      			}
      
      			// otherwise, use response as-is
      			output = new Response(body, response_options);
      			resolve(output);
      			return;
      		});
      
      		// accept string, buffer or readable stream as body
      		// per spec we will call tostring on non-stream objects
      		if (typeof options.body === 'string') {
      			req.write(options.body);
      			req.end();
      		} else if (options.body instanceof Buffer) {
      			req.write(options.body);
      			req.end()
      		} else if (typeof options.body === 'object' && options.body.pipe) {
      			options.body.pipe(req);
      		} else if (typeof options.body === 'object') {
      			req.write(options.body.toString());
      			req.end();
      		} else {
      			req.end();
      		}
      	});
      
      };
      
      /**
       * Redirect code matching
       *
       * @param   Number   code  Status code
       * @return  Boolean
       */
      Fetch.prototype.isRedirect = function(code) {
      	return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
      }
      
      // expose Promise
      Fetch.Promise = global.Promise;
      Fetch.Response = Response;
      Fetch.Headers = Headers;
      Fetch.Request = Request;
      
    provide("node-fetch", module.exports);
  }(global));
  
  // pakmanager:whatwg-fetch
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    (function(self) {
        'use strict';
      
        if (self.fetch) {
          return
        }
      
        var support = {
          searchParams: 'URLSearchParams' in self,
          iterable: 'Symbol' in self && 'iterator' in Symbol,
          blob: 'FileReader' in self && 'Blob' in self && (function() {
            try {
              new Blob()
              return true
            } catch(e) {
              return false
            }
          })(),
          formData: 'FormData' in self,
          arrayBuffer: 'ArrayBuffer' in self
        }
      
        if (support.arrayBuffer) {
          var viewClasses = [
            '[object Int8Array]',
            '[object Uint8Array]',
            '[object Uint8ClampedArray]',
            '[object Int16Array]',
            '[object Uint16Array]',
            '[object Int32Array]',
            '[object Uint32Array]',
            '[object Float32Array]',
            '[object Float64Array]'
          ]
      
          var isDataView = function(obj) {
            return obj && DataView.prototype.isPrototypeOf(obj)
          }
      
          var isArrayBufferView = ArrayBuffer.isView || function(obj) {
            return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
          }
        }
      
        function normalizeName(name) {
          if (typeof name !== 'string') {
            name = String(name)
          }
          if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
            throw new TypeError('Invalid character in header field name')
          }
          return name.toLowerCase()
        }
      
        function normalizeValue(value) {
          if (typeof value !== 'string') {
            value = String(value)
          }
          return value
        }
      
        // Build a destructive iterator for the value list
        function iteratorFor(items) {
          var iterator = {
            next: function() {
              var value = items.shift()
              return {done: value === undefined, value: value}
            }
          }
      
          if (support.iterable) {
            iterator[Symbol.iterator] = function() {
              return iterator
            }
          }
      
          return iterator
        }
      
        function Headers(headers) {
          this.map = {}
      
          if (headers instanceof Headers) {
            headers.forEach(function(value, name) {
              this.append(name, value)
            }, this)
          } else if (Array.isArray(headers)) {
            headers.forEach(function(header) {
              this.append(header[0], header[1])
            }, this)
          } else if (headers) {
            Object.getOwnPropertyNames(headers).forEach(function(name) {
              this.append(name, headers[name])
            }, this)
          }
        }
      
        Headers.prototype.append = function(name, value) {
          name = normalizeName(name)
          value = normalizeValue(value)
          var oldValue = this.map[name]
          this.map[name] = oldValue ? oldValue+','+value : value
        }
      
        Headers.prototype['delete'] = function(name) {
          delete this.map[normalizeName(name)]
        }
      
        Headers.prototype.get = function(name) {
          name = normalizeName(name)
          return this.has(name) ? this.map[name] : null
        }
      
        Headers.prototype.has = function(name) {
          return this.map.hasOwnProperty(normalizeName(name))
        }
      
        Headers.prototype.set = function(name, value) {
          this.map[normalizeName(name)] = normalizeValue(value)
        }
      
        Headers.prototype.forEach = function(callback, thisArg) {
          for (var name in this.map) {
            if (this.map.hasOwnProperty(name)) {
              callback.call(thisArg, this.map[name], name, this)
            }
          }
        }
      
        Headers.prototype.keys = function() {
          var items = []
          this.forEach(function(value, name) { items.push(name) })
          return iteratorFor(items)
        }
      
        Headers.prototype.values = function() {
          var items = []
          this.forEach(function(value) { items.push(value) })
          return iteratorFor(items)
        }
      
        Headers.prototype.entries = function() {
          var items = []
          this.forEach(function(value, name) { items.push([name, value]) })
          return iteratorFor(items)
        }
      
        if (support.iterable) {
          Headers.prototype[Symbol.iterator] = Headers.prototype.entries
        }
      
        function consumed(body) {
          if (body.bodyUsed) {
            return Promise.reject(new TypeError('Already read'))
          }
          body.bodyUsed = true
        }
      
        function fileReaderReady(reader) {
          return new Promise(function(resolve, reject) {
            reader.onload = function() {
              resolve(reader.result)
            }
            reader.onerror = function() {
              reject(reader.error)
            }
          })
        }
      
        function readBlobAsArrayBuffer(blob) {
          var reader = new FileReader()
          var promise = fileReaderReady(reader)
          reader.readAsArrayBuffer(blob)
          return promise
        }
      
        function readBlobAsText(blob) {
          var reader = new FileReader()
          var promise = fileReaderReady(reader)
          reader.readAsText(blob)
          return promise
        }
      
        function readArrayBufferAsText(buf) {
          var view = new Uint8Array(buf)
          var chars = new Array(view.length)
      
          for (var i = 0; i < view.length; i++) {
            chars[i] = String.fromCharCode(view[i])
          }
          return chars.join('')
        }
      
        function bufferClone(buf) {
          if (buf.slice) {
            return buf.slice(0)
          } else {
            var view = new Uint8Array(buf.byteLength)
            view.set(new Uint8Array(buf))
            return view.buffer
          }
        }
      
        function Body() {
          this.bodyUsed = false
      
          this._initBody = function(body) {
            this._bodyInit = body
            if (!body) {
              this._bodyText = ''
            } else if (typeof body === 'string') {
              this._bodyText = body
            } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
              this._bodyBlob = body
            } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
              this._bodyFormData = body
            } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
              this._bodyText = body.toString()
            } else if (support.arrayBuffer && support.blob && isDataView(body)) {
              this._bodyArrayBuffer = bufferClone(body.buffer)
              // IE 10-11 can't handle a DataView body.
              this._bodyInit = new Blob([this._bodyArrayBuffer])
            } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
              this._bodyArrayBuffer = bufferClone(body)
            } else {
              throw new Error('unsupported BodyInit type')
            }
      
            if (!this.headers.get('content-type')) {
              if (typeof body === 'string') {
                this.headers.set('content-type', 'text/plain;charset=UTF-8')
              } else if (this._bodyBlob && this._bodyBlob.type) {
                this.headers.set('content-type', this._bodyBlob.type)
              } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
                this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
              }
            }
          }
      
          if (support.blob) {
            this.blob = function() {
              var rejected = consumed(this)
              if (rejected) {
                return rejected
              }
      
              if (this._bodyBlob) {
                return Promise.resolve(this._bodyBlob)
              } else if (this._bodyArrayBuffer) {
                return Promise.resolve(new Blob([this._bodyArrayBuffer]))
              } else if (this._bodyFormData) {
                throw new Error('could not read FormData body as blob')
              } else {
                return Promise.resolve(new Blob([this._bodyText]))
              }
            }
      
            this.arrayBuffer = function() {
              if (this._bodyArrayBuffer) {
                return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
              } else {
                return this.blob().then(readBlobAsArrayBuffer)
              }
            }
          }
      
          this.text = function() {
            var rejected = consumed(this)
            if (rejected) {
              return rejected
            }
      
            if (this._bodyBlob) {
              return readBlobAsText(this._bodyBlob)
            } else if (this._bodyArrayBuffer) {
              return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
            } else if (this._bodyFormData) {
              throw new Error('could not read FormData body as text')
            } else {
              return Promise.resolve(this._bodyText)
            }
          }
      
          if (support.formData) {
            this.formData = function() {
              return this.text().then(decode)
            }
          }
      
          this.json = function() {
            return this.text().then(JSON.parse)
          }
      
          return this
        }
      
        // HTTP methods whose capitalization should be normalized
        var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
      
        function normalizeMethod(method) {
          var upcased = method.toUpperCase()
          return (methods.indexOf(upcased) > -1) ? upcased : method
        }
      
        function Request(input, options) {
          options = options || {}
          var body = options.body
      
          if (input instanceof Request) {
            if (input.bodyUsed) {
              throw new TypeError('Already read')
            }
            this.url = input.url
            this.credentials = input.credentials
            if (!options.headers) {
              this.headers = new Headers(input.headers)
            }
            this.method = input.method
            this.mode = input.mode
            if (!body && input._bodyInit != null) {
              body = input._bodyInit
              input.bodyUsed = true
            }
          } else {
            this.url = String(input)
          }
      
          this.credentials = options.credentials || this.credentials || 'omit'
          if (options.headers || !this.headers) {
            this.headers = new Headers(options.headers)
          }
          this.method = normalizeMethod(options.method || this.method || 'GET')
          this.mode = options.mode || this.mode || null
          this.referrer = null
      
          if ((this.method === 'GET' || this.method === 'HEAD') && body) {
            throw new TypeError('Body not allowed for GET or HEAD requests')
          }
          this._initBody(body)
        }
      
        Request.prototype.clone = function() {
          return new Request(this, { body: this._bodyInit })
        }
      
        function decode(body) {
          var form = new FormData()
          body.trim().split('&').forEach(function(bytes) {
            if (bytes) {
              var split = bytes.split('=')
              var name = split.shift().replace(/\+/g, ' ')
              var value = split.join('=').replace(/\+/g, ' ')
              form.append(decodeURIComponent(name), decodeURIComponent(value))
            }
          })
          return form
        }
      
        function parseHeaders(rawHeaders) {
          var headers = new Headers()
          rawHeaders.split(/\r?\n/).forEach(function(line) {
            var parts = line.split(':')
            var key = parts.shift().trim()
            if (key) {
              var value = parts.join(':').trim()
              headers.append(key, value)
            }
          })
          return headers
        }
      
        Body.call(Request.prototype)
      
        function Response(bodyInit, options) {
          if (!options) {
            options = {}
          }
      
          this.type = 'default'
          this.status = 'status' in options ? options.status : 200
          this.ok = this.status >= 200 && this.status < 300
          this.statusText = 'statusText' in options ? options.statusText : 'OK'
          this.headers = new Headers(options.headers)
          this.url = options.url || ''
          this._initBody(bodyInit)
        }
      
        Body.call(Response.prototype)
      
        Response.prototype.clone = function() {
          return new Response(this._bodyInit, {
            status: this.status,
            statusText: this.statusText,
            headers: new Headers(this.headers),
            url: this.url
          })
        }
      
        Response.error = function() {
          var response = new Response(null, {status: 0, statusText: ''})
          response.type = 'error'
          return response
        }
      
        var redirectStatuses = [301, 302, 303, 307, 308]
      
        Response.redirect = function(url, status) {
          if (redirectStatuses.indexOf(status) === -1) {
            throw new RangeError('Invalid status code')
          }
      
          return new Response(null, {status: status, headers: {location: url}})
        }
      
        self.Headers = Headers
        self.Request = Request
        self.Response = Response
      
        self.fetch = function(input, init) {
          return new Promise(function(resolve, reject) {
            var request = new Request(input, init)
            var xhr = new XMLHttpRequest()
      
            xhr.onload = function() {
              var options = {
                status: xhr.status,
                statusText: xhr.statusText,
                headers: parseHeaders(xhr.getAllResponseHeaders() || '')
              }
              options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')
              var body = 'response' in xhr ? xhr.response : xhr.responseText
              resolve(new Response(body, options))
            }
      
            xhr.onerror = function() {
              reject(new TypeError('Network request failed'))
            }
      
            xhr.ontimeout = function() {
              reject(new TypeError('Network request failed'))
            }
      
            xhr.open(request.method, request.url, true)
      
            if (request.credentials === 'include') {
              xhr.withCredentials = true
            }
      
            if ('responseType' in xhr && support.blob) {
              xhr.responseType = 'blob'
            }
      
            request.headers.forEach(function(value, name) {
              xhr.setRequestHeader(name, value)
            })
      
            xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
          })
        }
        self.fetch.polyfill = true
      })(typeof self !== 'undefined' ? self : this);
      
    provide("whatwg-fetch", module.exports);
  }(global));
  
  // pakmanager:js-tokens
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    // Copyright 2014, 2015, 2016, 2017 Simon Lydell
      // License: MIT. (See LICENSE.)
      
      Object.defineProperty(exports, "__esModule", {
        value: true
      })
      
      // This regex comes from regex.coffee, and is inserted here by generate-index.js
      // (run `npm run build`).
      exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyu]{1,5}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g
      
      exports.matchToToken = function(match) {
        var token = {type: "invalid", value: match[0]}
             if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4])
        else if (match[ 5]) token.type = "comment"
        else if (match[ 6]) token.type = "comment", token.closed = !!match[7]
        else if (match[ 8]) token.type = "regex"
        else if (match[ 9]) token.type = "number"
        else if (match[10]) token.type = "name"
        else if (match[11]) token.type = "punctuator"
        else if (match[12]) token.type = "whitespace"
        return token
      }
      
    provide("js-tokens", module.exports);
  }(global));
  
  // pakmanager:asap/raw
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    "use strict";
      
      var domain; // The domain module is executed on demand
      var hasSetImmediate = typeof setImmediate === "function";
      
      // Use the fastest means possible to execute a task in its own turn, with
      // priority over other events including network IO events in Node.js.
      //
      // An exception thrown by a task will permanently interrupt the processing of
      // subsequent tasks. The higher level `asap` function ensures that if an
      // exception is thrown by a task, that the task queue will continue flushing as
      // soon as possible, but if you use `rawAsap` directly, you are responsible to
      // either ensure that no exceptions are thrown from your task, or to manually
      // call `rawAsap.requestFlush` if an exception is thrown.
      module.exports = rawAsap;
      function rawAsap(task) {
          if (!queue.length) {
              requestFlush();
              flushing = true;
          }
          // Avoids a function call
          queue[queue.length] = task;
      }
      
      var queue = [];
      // Once a flush has been requested, no further calls to `requestFlush` are
      // necessary until the next `flush` completes.
      var flushing = false;
      // The position of the next task to execute in the task queue. This is
      // preserved between calls to `flush` so that it can be resumed if
      // a task throws an exception.
      var index = 0;
      // If a task schedules additional tasks recursively, the task queue can grow
      // unbounded. To prevent memory excaustion, the task queue will periodically
      // truncate already-completed tasks.
      var capacity = 1024;
      
      // The flush function processes all tasks that have been scheduled with
      // `rawAsap` unless and until one of those tasks throws an exception.
      // If a task throws an exception, `flush` ensures that its state will remain
      // consistent and will resume where it left off when called again.
      // However, `flush` does not make any arrangements to be called again if an
      // exception is thrown.
      function flush() {
          while (index < queue.length) {
              var currentIndex = index;
              // Advance the index before calling the task. This ensures that we will
              // begin flushing on the next task the task throws an error.
              index = index + 1;
              queue[currentIndex].call();
              // Prevent leaking memory for long chains of recursive calls to `asap`.
              // If we call `asap` within tasks scheduled by `asap`, the queue will
              // grow, but to avoid an O(n) walk for every task we execute, we don't
              // shift tasks off the queue after they have been executed.
              // Instead, we periodically shift 1024 tasks off the queue.
              if (index > capacity) {
                  // Manually shift all values starting at the index back to the
                  // beginning of the queue.
                  for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
                      queue[scan] = queue[scan + index];
                  }
                  queue.length -= index;
                  index = 0;
              }
          }
          queue.length = 0;
          index = 0;
          flushing = false;
      }
      
      rawAsap.requestFlush = requestFlush;
      function requestFlush() {
          // Ensure flushing is not bound to any domain.
          // It is not sufficient to exit the domain, because domains exist on a stack.
          // To execute code outside of any domain, the following dance is necessary.
          var parentDomain = process.domain;
          if (parentDomain) {
              if (!domain) {
                  // Lazy execute the domain module.
                  // Only employed if the user elects to use domains.
                  domain = require("domain");
              }
              domain.active = process.domain = null;
          }
      
          // `setImmediate` is slower that `process.nextTick`, but `process.nextTick`
          // cannot handle recursion.
          // `requestFlush` will only be called recursively from `asap.js`, to resume
          // flushing after an error is thrown into a domain.
          // Conveniently, `setImmediate` was introduced in the same version
          // `process.nextTick` started throwing recursion errors.
          if (flushing && hasSetImmediate) {
              setImmediate(flush);
          } else {
              process.nextTick(flush);
          }
      
          if (parentDomain) {
              domain.active = process.domain = parentDomain;
          }
      }
      
    provide("asap/raw", module.exports);
  }(global));
  
  // pakmanager:asap
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    "use strict";
      
      var rawAsap =  require('asap/raw');
      var freeTasks = [];
      
      /**
       * Calls a task as soon as possible after returning, in its own event, with
       * priority over IO events. An exception thrown in a task can be handled by
       * `process.on("uncaughtException") or `domain.on("error")`, but will otherwise
       * crash the process. If the error is handled, all subsequent tasks will
       * resume.
       *
       * @param {{call}} task A callable object, typically a function that takes no
       * arguments.
       */
      module.exports = asap;
      function asap(task) {
          var rawTask;
          if (freeTasks.length) {
              rawTask = freeTasks.pop();
          } else {
              rawTask = new RawTask();
          }
          rawTask.task = task;
          rawTask.domain = process.domain;
          rawAsap(rawTask);
      }
      
      function RawTask() {
          this.task = null;
          this.domain = null;
      }
      
      RawTask.prototype.call = function () {
          if (this.domain) {
              this.domain.enter();
          }
          var threw = true;
          try {
              this.task.call();
              threw = false;
              // If the task throws an exception (presumably) Node.js restores the
              // domain stack for the next event.
              if (this.domain) {
                  this.domain.exit();
              }
          } finally {
              // We use try/finally and a threw flag to avoid messing up stack traces
              // when we catch and release errors.
              if (threw) {
                  // In Node.js, uncaught exceptions are considered fatal errors.
                  // Re-throw them to interrupt flushing!
                  // Ensure that flushing continues if an uncaught exception is
                  // suppressed listening process.on("uncaughtException") or
                  // domain.on("error").
                  rawAsap.requestFlush();
              }
              // If the task threw an error, we do not want to exit the domain here.
              // Exiting the domain would prevent the domain from catching the error.
              this.task = null;
              this.domain = null;
              freeTasks.push(this);
          }
      };
      
      
    provide("asap", module.exports);
  }(global));
  
  // pakmanager:core-js/shim
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    require('./modules/es5');
      require('./modules/es6.symbol');
      require('./modules/es6.object.assign');
      require('./modules/es6.object.is');
      require('./modules/es6.object.set-prototype-of');
      require('./modules/es6.object.to-string');
      require('./modules/es6.object.freeze');
      require('./modules/es6.object.seal');
      require('./modules/es6.object.prevent-extensions');
      require('./modules/es6.object.is-frozen');
      require('./modules/es6.object.is-sealed');
      require('./modules/es6.object.is-extensible');
      require('./modules/es6.object.get-own-property-descriptor');
      require('./modules/es6.object.get-prototype-of');
      require('./modules/es6.object.keys');
      require('./modules/es6.object.get-own-property-names');
      require('./modules/es6.function.name');
      require('./modules/es6.function.has-instance');
      require('./modules/es6.number.constructor');
      require('./modules/es6.number.epsilon');
      require('./modules/es6.number.is-finite');
      require('./modules/es6.number.is-integer');
      require('./modules/es6.number.is-nan');
      require('./modules/es6.number.is-safe-integer');
      require('./modules/es6.number.max-safe-integer');
      require('./modules/es6.number.min-safe-integer');
      require('./modules/es6.number.parse-float');
      require('./modules/es6.number.parse-int');
      require('./modules/es6.math.acosh');
      require('./modules/es6.math.asinh');
      require('./modules/es6.math.atanh');
      require('./modules/es6.math.cbrt');
      require('./modules/es6.math.clz32');
      require('./modules/es6.math.cosh');
      require('./modules/es6.math.expm1');
      require('./modules/es6.math.fround');
      require('./modules/es6.math.hypot');
      require('./modules/es6.math.imul');
      require('./modules/es6.math.log10');
      require('./modules/es6.math.log1p');
      require('./modules/es6.math.log2');
      require('./modules/es6.math.sign');
      require('./modules/es6.math.sinh');
      require('./modules/es6.math.tanh');
      require('./modules/es6.math.trunc');
      require('./modules/es6.string.from-code-point');
      require('./modules/es6.string.raw');
      require('./modules/es6.string.trim');
      require('./modules/es6.string.iterator');
      require('./modules/es6.string.code-point-at');
      require('./modules/es6.string.ends-with');
      require('./modules/es6.string.includes');
      require('./modules/es6.string.repeat');
      require('./modules/es6.string.starts-with');
      require('./modules/es6.array.from');
      require('./modules/es6.array.of');
      require('./modules/es6.array.iterator');
      require('./modules/es6.array.species');
      require('./modules/es6.array.copy-within');
      require('./modules/es6.array.fill');
      require('./modules/es6.array.find');
      require('./modules/es6.array.find-index');
      require('./modules/es6.regexp.constructor');
      require('./modules/es6.regexp.flags');
      require('./modules/es6.regexp.match');
      require('./modules/es6.regexp.replace');
      require('./modules/es6.regexp.search');
      require('./modules/es6.regexp.split');
      require('./modules/es6.promise');
      require('./modules/es6.map');
      require('./modules/es6.set');
      require('./modules/es6.weak-map');
      require('./modules/es6.weak-set');
      require('./modules/es6.reflect.apply');
      require('./modules/es6.reflect.construct');
      require('./modules/es6.reflect.define-property');
      require('./modules/es6.reflect.delete-property');
      require('./modules/es6.reflect.enumerate');
      require('./modules/es6.reflect.get');
      require('./modules/es6.reflect.get-own-property-descriptor');
      require('./modules/es6.reflect.get-prototype-of');
      require('./modules/es6.reflect.has');
      require('./modules/es6.reflect.is-extensible');
      require('./modules/es6.reflect.own-keys');
      require('./modules/es6.reflect.prevent-extensions');
      require('./modules/es6.reflect.set');
      require('./modules/es6.reflect.set-prototype-of');
      require('./modules/es7.array.includes');
      require('./modules/es7.string.at');
      require('./modules/es7.string.pad-left');
      require('./modules/es7.string.pad-right');
      require('./modules/es7.string.trim-left');
      require('./modules/es7.string.trim-right');
      require('./modules/es7.regexp.escape');
      require('./modules/es7.object.get-own-property-descriptors');
      require('./modules/es7.object.values');
      require('./modules/es7.object.entries');
      require('./modules/es7.map.to-json');
      require('./modules/es7.set.to-json');
      require('./modules/js.array.statics');
      require('./modules/web.timers');
      require('./modules/web.immediate');
      require('./modules/web.dom.iterable');
      module.exports = require('./modules/$.core');
    provide("core-js/shim", module.exports);
  }(global));
  
  // pakmanager:core-js
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
     require('core-js/shim');
      require('./modules/core.dict');
      require('./modules/core.get-iterator-method');
      require('./modules/core.get-iterator');
      require('./modules/core.is-iterable');
      require('./modules/core.delay');
      require('./modules/core.function.part');
      require('./modules/core.object.is-object');
      require('./modules/core.object.classof');
      require('./modules/core.object.define');
      require('./modules/core.object.make');
      require('./modules/core.number.iterator');
      require('./modules/core.string.escape-html');
      require('./modules/core.string.unescape-html');
      require('./modules/core.log');
      module.exports = require('./modules/$.core');
    provide("core-js", module.exports);
  }(global));
  
  // pakmanager:isomorphic-fetch
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    "use strict";
      
      var realFetch = require('node-fetch');
      module.exports = function(url, options) {
      	if (/^\/\//.test(url)) {
      		url = 'https:' + url;
      	}
      	return realFetch.call(this, url, options);
      };
      
      if (!global.fetch) {
      	global.fetch = module.exports;
      	global.Response = realFetch.Response;
      	global.Headers = realFetch.Headers;
      	global.Request = realFetch.Request;
      }
      
    provide("isomorphic-fetch", module.exports);
  }(global));
  
  // pakmanager:loose-envify
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    'use strict';
      
      module.exports =   require('loose-envify')(process.env);
      
    provide("loose-envify", module.exports);
  }(global));
  
  // pakmanager:object-assign
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    /*
      object-assign
      (c) Sindre Sorhus
      @license MIT
      */
      
      'use strict';
      /* eslint-disable no-unused-vars */
      var getOwnPropertySymbols = Object.getOwnPropertySymbols;
      var hasOwnProperty = Object.prototype.hasOwnProperty;
      var propIsEnumerable = Object.prototype.propertyIsEnumerable;
      
      function toObject(val) {
      	if (val === null || val === undefined) {
      		throw new TypeError('Object.assign cannot be called with null or undefined');
      	}
      
      	return Object(val);
      }
      
      function shouldUseNative() {
      	try {
      		if (!Object.assign) {
      			return false;
      		}
      
      		// Detect buggy property enumeration order in older V8 versions.
      
      		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
      		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
      		test1[5] = 'de';
      		if (Object.getOwnPropertyNames(test1)[0] === '5') {
      			return false;
      		}
      
      		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
      		var test2 = {};
      		for (var i = 0; i < 10; i++) {
      			test2['_' + String.fromCharCode(i)] = i;
      		}
      		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
      			return test2[n];
      		});
      		if (order2.join('') !== '0123456789') {
      			return false;
      		}
      
      		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
      		var test3 = {};
      		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
      			test3[letter] = letter;
      		});
      		if (Object.keys(Object.assign({}, test3)).join('') !==
      				'abcdefghijklmnopqrst') {
      			return false;
      		}
      
      		return true;
      	} catch (err) {
      		// We don't expect any of the above to throw, but better to be safe.
      		return false;
      	}
      }
      
      module.exports = shouldUseNative() ? Object.assign : function (target, source) {
      	var from;
      	var to = toObject(target);
      	var symbols;
      
      	for (var s = 1; s < arguments.length; s++) {
      		from = Object(arguments[s]);
      
      		for (var key in from) {
      			if (hasOwnProperty.call(from, key)) {
      				to[key] = from[key];
      			}
      		}
      
      		if (getOwnPropertySymbols) {
      			symbols = getOwnPropertySymbols(from);
      			for (var i = 0; i < symbols.length; i++) {
      				if (propIsEnumerable.call(from, symbols[i])) {
      					to[symbols[i]] = from[symbols[i]];
      				}
      			}
      		}
      	}
      
      	return to;
      };
      
    provide("object-assign", module.exports);
  }(global));
  
  // pakmanager:promise/lib
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    'use strict';
      
      module.exports = require('./core.js');
      require('./done.js');
      require('./finally.js');
      require('./es6-extensions.js');
      require('./node-extensions.js');
      require('./synchronous.js');
      
    provide("promise/lib", module.exports);
  }(global));
  
  // pakmanager:promise
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    'use strict';
      
      module.exports =  require('promise/lib')
      
    provide("promise", module.exports);
  }(global));
  
  // pakmanager:setimmediate
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    (function (global, undefined) {
          "use strict";
      
          if (global.setImmediate) {
              return;
          }
      
          var nextHandle = 1; // Spec says greater than zero
          var tasksByHandle = {};
          var currentlyRunningATask = false;
          var doc = global.document;
          var registerImmediate;
      
          function setImmediate(callback) {
            // Callback can either be a function or a string
            if (typeof callback !== "function") {
              callback = new Function("" + callback);
            }
            // Copy function arguments
            var args = new Array(arguments.length - 1);
            for (var i = 0; i < args.length; i++) {
                args[i] = arguments[i + 1];
            }
            // Store and register the task
            var task = { callback: callback, args: args };
            tasksByHandle[nextHandle] = task;
            registerImmediate(nextHandle);
            return nextHandle++;
          }
      
          function clearImmediate(handle) {
              delete tasksByHandle[handle];
          }
      
          function run(task) {
              var callback = task.callback;
              var args = task.args;
              switch (args.length) {
              case 0:
                  callback();
                  break;
              case 1:
                  callback(args[0]);
                  break;
              case 2:
                  callback(args[0], args[1]);
                  break;
              case 3:
                  callback(args[0], args[1], args[2]);
                  break;
              default:
                  callback.apply(undefined, args);
                  break;
              }
          }
      
          function runIfPresent(handle) {
              // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
              // So if we're currently running a task, we'll need to delay this invocation.
              if (currentlyRunningATask) {
                  // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
                  // "too much recursion" error.
                  setTimeout(runIfPresent, 0, handle);
              } else {
                  var task = tasksByHandle[handle];
                  if (task) {
                      currentlyRunningATask = true;
                      try {
                          run(task);
                      } finally {
                          clearImmediate(handle);
                          currentlyRunningATask = false;
                      }
                  }
              }
          }
      
          function installNextTickImplementation() {
              registerImmediate = function(handle) {
                  process.nextTick(function () { runIfPresent(handle); });
              };
          }
      
          function canUsePostMessage() {
              // The test against `importScripts` prevents this implementation from being installed inside a web worker,
              // where `global.postMessage` means something completely different and can't be used for this purpose.
              if (global.postMessage && !global.importScripts) {
                  var postMessageIsAsynchronous = true;
                  var oldOnMessage = global.onmessage;
                  global.onmessage = function() {
                      postMessageIsAsynchronous = false;
                  };
                  global.postMessage("", "*");
                  global.onmessage = oldOnMessage;
                  return postMessageIsAsynchronous;
              }
          }
      
          function installPostMessageImplementation() {
              // Installs an event handler on `global` for the `message` event: see
              // * https://developer.mozilla.org/en/DOM/window.postMessage
              // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
      
              var messagePrefix = "setImmediate$" + Math.random() + "$";
              var onGlobalMessage = function(event) {
                  if (event.source === global &&
                      typeof event.data === "string" &&
                      event.data.indexOf(messagePrefix) === 0) {
                      runIfPresent(+event.data.slice(messagePrefix.length));
                  }
              };
      
              if (global.addEventListener) {
                  global.addEventListener("message", onGlobalMessage, false);
              } else {
                  global.attachEvent("onmessage", onGlobalMessage);
              }
      
              registerImmediate = function(handle) {
                  global.postMessage(messagePrefix + handle, "*");
              };
          }
      
          function installMessageChannelImplementation() {
              var channel = new MessageChannel();
              channel.port1.onmessage = function(event) {
                  var handle = event.data;
                  runIfPresent(handle);
              };
      
              registerImmediate = function(handle) {
                  channel.port2.postMessage(handle);
              };
          }
      
          function installReadyStateChangeImplementation() {
              var html = doc.documentElement;
              registerImmediate = function(handle) {
                  // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
                  // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
                  var script = doc.createElement("script");
                  script.onreadystatechange = function () {
                      runIfPresent(handle);
                      script.onreadystatechange = null;
                      html.removeChild(script);
                      script = null;
                  };
                  html.appendChild(script);
              };
          }
      
          function installSetTimeoutImplementation() {
              registerImmediate = function(handle) {
                  setTimeout(runIfPresent, 0, handle);
              };
          }
      
          // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
          var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
          attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
      
          // Don't get fooled by e.g. browserify environments.
          if ({}.toString.call(global.process) === "[object process]") {
              // For Node.js before 0.9
              installNextTickImplementation();
      
          } else if (canUsePostMessage()) {
              // For non-IE10 modern browsers
              installPostMessageImplementation();
      
          } else if (global.MessageChannel) {
              // For web workers, where supported
              installMessageChannelImplementation();
      
          } else if (doc && "onreadystatechange" in doc.createElement("script")) {
              // For IE 6–8
              installReadyStateChangeImplementation();
      
          } else {
              // For older browsers
              installSetTimeoutImplementation();
          }
      
          attachTo.setImmediate = setImmediate;
          attachTo.clearImmediate = clearImmediate;
      }(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
      
    provide("setimmediate", module.exports);
  }(global));
  
  // pakmanager:fbjs
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    /**
       * Copyright (c) 2013-present, 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';
      
      throw new Error('The fbjs package should not be required without a full path.');
      
    provide("fbjs", module.exports);
  }(global));
  
  // pakmanager:create-react-class/factory
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    /**
       * Copyright 2013-present, 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';
      
      var _assign = require('object-assign');
      
      var emptyObject = require('fbjs/lib/emptyObject');
      var _invariant = require('fbjs/lib/invariant');
      
      if (process.env.NODE_ENV !== 'production') {
        var warning = require('fbjs/lib/warning');
      }
      
      var MIXINS_KEY = 'mixins';
      
      // Helper function to allow the creation of anonymous functions which do not
      // have .name set to the name of the variable being assigned to.
      function identity(fn) {
        return fn;
      }
      
      var ReactPropTypeLocationNames;
      if (process.env.NODE_ENV !== 'production') {
        ReactPropTypeLocationNames = {
          prop: 'prop',
          context: 'context',
          childContext: 'child context',
        };
      } else {
        ReactPropTypeLocationNames = {};
      }
      
      function factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {
        /**
         * Policies that describe methods in `ReactClassInterface`.
         */
      
      
        var injectedMixins = [];
      
        /**
         * Composite components are higher-level components that compose other composite
         * or host components.
         *
         * To create a new type of `ReactClass`, pass a specification of
         * your new class to `React.createClass`. The only requirement of your class
         * specification is that you implement a `render` method.
         *
         *   var MyComponent = React.createClass({
         *     render: function() {
         *       return <div>Hello World</div>;
         *     }
         *   });
         *
         * The class specification supports a specific protocol of methods that have
         * special meaning (e.g. `render`). See `ReactClassInterface` for
         * more the comprehensive protocol. Any other properties and methods in the
         * class specification will be available on the prototype.
         *
         * @interface ReactClassInterface
         * @internal
         */
        var ReactClassInterface = {
      
          /**
           * An array of Mixin objects to include when defining your component.
           *
           * @type {array}
           * @optional
           */
          mixins: 'DEFINE_MANY',
      
          /**
           * An object containing properties and methods that should be defined on
           * the component's constructor instead of its prototype (static methods).
           *
           * @type {object}
           * @optional
           */
          statics: 'DEFINE_MANY',
      
          /**
           * Definition of prop types for this component.
           *
           * @type {object}
           * @optional
           */
          propTypes: 'DEFINE_MANY',
      
          /**
           * Definition of context types for this component.
           *
           * @type {object}
           * @optional
           */
          contextTypes: 'DEFINE_MANY',
      
          /**
           * Definition of context types this component sets for its children.
           *
           * @type {object}
           * @optional
           */
          childContextTypes: 'DEFINE_MANY',
      
          // ==== Definition methods ====
      
          /**
           * Invoked when the component is mounted. Values in the mapping will be set on
           * `this.props` if that prop is not specified (i.e. using an `in` check).
           *
           * This method is invoked before `getInitialState` and therefore cannot rely
           * on `this.state` or use `this.setState`.
           *
           * @return {object}
           * @optional
           */
          getDefaultProps: 'DEFINE_MANY_MERGED',
      
          /**
           * Invoked once before the component is mounted. The return value will be used
           * as the initial value of `this.state`.
           *
           *   getInitialState: function() {
           *     return {
           *       isOn: false,
           *       fooBaz: new BazFoo()
           *     }
           *   }
           *
           * @return {object}
           * @optional
           */
          getInitialState: 'DEFINE_MANY_MERGED',
      
          /**
           * @return {object}
           * @optional
           */
          getChildContext: 'DEFINE_MANY_MERGED',
      
          /**
           * Uses props from `this.props` and state from `this.state` to render the
           * structure of the component.
           *
           * No guarantees are made about when or how often this method is invoked, so
           * it must not have side effects.
           *
           *   render: function() {
           *     var name = this.props.name;
           *     return <div>Hello, {name}!</div>;
           *   }
           *
           * @return {ReactComponent}
           * @nosideeffects
           * @required
           */
          render: 'DEFINE_ONCE',
      
          // ==== Delegate methods ====
      
          /**
           * Invoked when the component is initially created and about to be mounted.
           * This may have side effects, but any external subscriptions or data created
           * by this method must be cleaned up in `componentWillUnmount`.
           *
           * @optional
           */
          componentWillMount: 'DEFINE_MANY',
      
          /**
           * Invoked when the component has been mounted and has a DOM representation.
           * However, there is no guarantee that the DOM node is in the document.
           *
           * Use this as an opportunity to operate on the DOM when the component has
           * been mounted (initialized and rendered) for the first time.
           *
           * @param {DOMElement} rootNode DOM element representing the component.
           * @optional
           */
          componentDidMount: 'DEFINE_MANY',
      
          /**
           * Invoked before the component receives new props.
           *
           * Use this as an opportunity to react to a prop transition by updating the
           * state using `this.setState`. Current props are accessed via `this.props`.
           *
           *   componentWillReceiveProps: function(nextProps, nextContext) {
           *     this.setState({
           *       likesIncreasing: nextProps.likeCount > this.props.likeCount
           *     });
           *   }
           *
           * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
           * transition may cause a state change, but the opposite is not true. If you
           * need it, you are probably looking for `componentWillUpdate`.
           *
           * @param {object} nextProps
           * @optional
           */
          componentWillReceiveProps: 'DEFINE_MANY',
      
          /**
           * Invoked while deciding if the component should be updated as a result of
           * receiving new props, state and/or context.
           *
           * Use this as an opportunity to `return false` when you're certain that the
           * transition to the new props/state/context will not require a component
           * update.
           *
           *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
           *     return !equal(nextProps, this.props) ||
           *       !equal(nextState, this.state) ||
           *       !equal(nextContext, this.context);
           *   }
           *
           * @param {object} nextProps
           * @param {?object} nextState
           * @param {?object} nextContext
           * @return {boolean} True if the component should update.
           * @optional
           */
          shouldComponentUpdate: 'DEFINE_ONCE',
      
          /**
           * Invoked when the component is about to update due to a transition from
           * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
           * and `nextContext`.
           *
           * Use this as an opportunity to perform preparation before an update occurs.
           *
           * NOTE: You **cannot** use `this.setState()` in this method.
           *
           * @param {object} nextProps
           * @param {?object} nextState
           * @param {?object} nextContext
           * @param {ReactReconcileTransaction} transaction
           * @optional
           */
          componentWillUpdate: 'DEFINE_MANY',
      
          /**
           * Invoked when the component's DOM representation has been updated.
           *
           * Use this as an opportunity to operate on the DOM when the component has
           * been updated.
           *
           * @param {object} prevProps
           * @param {?object} prevState
           * @param {?object} prevContext
           * @param {DOMElement} rootNode DOM element representing the component.
           * @optional
           */
          componentDidUpdate: 'DEFINE_MANY',
      
          /**
           * Invoked when the component is about to be removed from its parent and have
           * its DOM representation destroyed.
           *
           * Use this as an opportunity to deallocate any external resources.
           *
           * NOTE: There is no `componentDidUnmount` since your component will have been
           * destroyed by that point.
           *
           * @optional
           */
          componentWillUnmount: 'DEFINE_MANY',
      
          // ==== Advanced methods ====
      
          /**
           * Updates the component's currently mounted DOM representation.
           *
           * By default, this implements React's rendering and reconciliation algorithm.
           * Sophisticated clients may wish to override this.
           *
           * @param {ReactReconcileTransaction} transaction
           * @internal
           * @overridable
           */
          updateComponent: 'OVERRIDE_BASE'
      
        };
      
        /**
         * Mapping from class specification keys to special processing functions.
         *
         * Although these are declared like instance properties in the specification
         * when defining classes using `React.createClass`, they are actually static
         * and are accessible on the constructor instead of the prototype. Despite
         * being static, they must be defined outside of the "statics" key under
         * which all other static methods are defined.
         */
        var RESERVED_SPEC_KEYS = {
          displayName: function (Constructor, displayName) {
            Constructor.displayName = displayName;
          },
          mixins: function (Constructor, mixins) {
            if (mixins) {
              for (var i = 0; i < mixins.length; i++) {
                mixSpecIntoComponent(Constructor, mixins[i]);
              }
            }
          },
          childContextTypes: function (Constructor, childContextTypes) {
            if (process.env.NODE_ENV !== 'production') {
              validateTypeDef(Constructor, childContextTypes, 'childContext');
            }
            Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);
          },
          contextTypes: function (Constructor, contextTypes) {
            if (process.env.NODE_ENV !== 'production') {
              validateTypeDef(Constructor, contextTypes, 'context');
            }
            Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);
          },
          /**
           * Special case getDefaultProps which should move into statics but requires
           * automatic merging.
           */
          getDefaultProps: function (Constructor, getDefaultProps) {
            if (Constructor.getDefaultProps) {
              Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);
            } else {
              Constructor.getDefaultProps = getDefaultProps;
            }
          },
          propTypes: function (Constructor, propTypes) {
            if (process.env.NODE_ENV !== 'production') {
              validateTypeDef(Constructor, propTypes, 'prop');
            }
            Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);
          },
          statics: function (Constructor, statics) {
            mixStaticSpecIntoComponent(Constructor, statics);
          },
          autobind: function () {} };
      
        function validateTypeDef(Constructor, typeDef, location) {
          for (var propName in typeDef) {
            if (typeDef.hasOwnProperty(propName)) {
              // use a warning instead of an _invariant so components
              // don't show up in prod but only in __DEV__
              process.env.NODE_ENV !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;
            }
          }
        }
      
        function validateMethodOverride(isAlreadyDefined, name) {
          var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;
      
          // Disallow overriding of base class methods unless explicitly allowed.
          if (ReactClassMixin.hasOwnProperty(name)) {
            _invariant(specPolicy === 'OVERRIDE_BASE', 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name);
          }
      
          // Disallow defining methods more than once unless explicitly allowed.
          if (isAlreadyDefined) {
            _invariant(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED', 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name);
          }
        }
      
        /**
         * Mixin helper which handles policy validation and reserved
         * specification keys when building React classes.
         */
        function mixSpecIntoComponent(Constructor, spec) {
          if (!spec) {
            if (process.env.NODE_ENV !== 'production') {
              var typeofSpec = typeof spec;
              var isMixinValid = typeofSpec === 'object' && spec !== null;
      
              process.env.NODE_ENV !== 'production' ? warning(isMixinValid, '%s: You\'re attempting to include a mixin that is either null ' + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec) : void 0;
            }
      
            return;
          }
      
          _invariant(typeof spec !== 'function', 'ReactClass: You\'re attempting to ' + 'use a component class or function as a mixin. Instead, just use a ' + 'regular object.');
          _invariant(!isValidElement(spec), 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.');
      
          var proto = Constructor.prototype;
          var autoBindPairs = proto.__reactAutoBindPairs;
      
          // By handling mixins before any other properties, we ensure the same
          // chaining order is applied to methods with DEFINE_MANY policy, whether
          // mixins are listed before or after these methods in the spec.
          if (spec.hasOwnProperty(MIXINS_KEY)) {
            RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
          }
      
          for (var name in spec) {
            if (!spec.hasOwnProperty(name)) {
              continue;
            }
      
            if (name === MIXINS_KEY) {
              // We have already handled mixins in a special case above.
              continue;
            }
      
            var property = spec[name];
            var isAlreadyDefined = proto.hasOwnProperty(name);
            validateMethodOverride(isAlreadyDefined, name);
      
            if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
              RESERVED_SPEC_KEYS[name](Constructor, property);
            } else {
              // Setup methods on prototype:
              // The following member methods should not be automatically bound:
              // 1. Expected ReactClass methods (in the "interface").
              // 2. Overridden methods (that were mixed in).
              var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
              var isFunction = typeof property === 'function';
              var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;
      
              if (shouldAutoBind) {
                autoBindPairs.push(name, property);
                proto[name] = property;
              } else {
                if (isAlreadyDefined) {
                  var specPolicy = ReactClassInterface[name];
      
                  // These cases should already be caught by validateMethodOverride.
                  _invariant(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY'), 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name);
      
                  // For methods which are defined more than once, call the existing
                  // methods before calling the new property, merging if appropriate.
                  if (specPolicy === 'DEFINE_MANY_MERGED') {
                    proto[name] = createMergedResultFunction(proto[name], property);
                  } else if (specPolicy === 'DEFINE_MANY') {
                    proto[name] = createChainedFunction(proto[name], property);
                  }
                } else {
                  proto[name] = property;
                  if (process.env.NODE_ENV !== 'production') {
                    // Add verbose displayName to the function, which helps when looking
                    // at profiling tools.
                    if (typeof property === 'function' && spec.displayName) {
                      proto[name].displayName = spec.displayName + '_' + name;
                    }
                  }
                }
              }
            }
          }
        }
      
        function mixStaticSpecIntoComponent(Constructor, statics) {
          if (!statics) {
            return;
          }
          for (var name in statics) {
            var property = statics[name];
            if (!statics.hasOwnProperty(name)) {
              continue;
            }
      
            var isReserved = name in RESERVED_SPEC_KEYS;
            _invariant(!isReserved, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name);
      
            var isInherited = name in Constructor;
            _invariant(!isInherited, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name);
            Constructor[name] = property;
          }
        }
      
        /**
         * Merge two objects, but throw if both contain the same key.
         *
         * @param {object} one The first object, which is mutated.
         * @param {object} two The second object
         * @return {object} one after it has been mutated to contain everything in two.
         */
        function mergeIntoWithNoDuplicateKeys(one, two) {
          _invariant(one && two && typeof one === 'object' && typeof two === 'object', 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.');
      
          for (var key in two) {
            if (two.hasOwnProperty(key)) {
              _invariant(one[key] === undefined, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key);
              one[key] = two[key];
            }
          }
          return one;
        }
      
        /**
         * Creates a function that invokes two functions and merges their return values.
         *
         * @param {function} one Function to invoke first.
         * @param {function} two Function to invoke second.
         * @return {function} Function that invokes the two argument functions.
         * @private
         */
        function createMergedResultFunction(one, two) {
          return function mergedResult() {
            var a = one.apply(this, arguments);
            var b = two.apply(this, arguments);
            if (a == null) {
              return b;
            } else if (b == null) {
              return a;
            }
            var c = {};
            mergeIntoWithNoDuplicateKeys(c, a);
            mergeIntoWithNoDuplicateKeys(c, b);
            return c;
          };
        }
      
        /**
         * Creates a function that invokes two functions and ignores their return vales.
         *
         * @param {function} one Function to invoke first.
         * @param {function} two Function to invoke second.
         * @return {function} Function that invokes the two argument functions.
         * @private
         */
        function createChainedFunction(one, two) {
          return function chainedFunction() {
            one.apply(this, arguments);
            two.apply(this, arguments);
          };
        }
      
        /**
         * Binds a method to the component.
         *
         * @param {object} component Component whose method is going to be bound.
         * @param {function} method Method to be bound.
         * @return {function} The bound method.
         */
        function bindAutoBindMethod(component, method) {
          var boundMethod = method.bind(component);
          if (process.env.NODE_ENV !== 'production') {
            boundMethod.__reactBoundContext = component;
            boundMethod.__reactBoundMethod = method;
            boundMethod.__reactBoundArguments = null;
            var componentName = component.constructor.displayName;
            var _bind = boundMethod.bind;
            boundMethod.bind = function (newThis) {
              for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
                args[_key - 1] = arguments[_key];
              }
      
              // User is trying to bind() an autobound method; we effectively will
              // ignore the value of "this" that the user is trying to use, so
              // let's warn.
              if (newThis !== component && newThis !== null) {
                process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;
              } else if (!args.length) {
                process.env.NODE_ENV !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;
                return boundMethod;
              }
              var reboundMethod = _bind.apply(boundMethod, arguments);
              reboundMethod.__reactBoundContext = component;
              reboundMethod.__reactBoundMethod = method;
              reboundMethod.__reactBoundArguments = args;
              return reboundMethod;
            };
          }
          return boundMethod;
        }
      
        /**
         * Binds all auto-bound methods in a component.
         *
         * @param {object} component Component whose method is going to be bound.
         */
        function bindAutoBindMethods(component) {
          var pairs = component.__reactAutoBindPairs;
          for (var i = 0; i < pairs.length; i += 2) {
            var autoBindKey = pairs[i];
            var method = pairs[i + 1];
            component[autoBindKey] = bindAutoBindMethod(component, method);
          }
        }
      
        var IsMountedMixin = {
          componentDidMount: function () {
            this.__isMounted = true;
          },
          componentWillUnmount: function () {
            this.__isMounted = false;
          }
        };
      
        /**
         * Add more to the ReactClass base class. These are all legacy features and
         * therefore not already part of the modern ReactComponent.
         */
        var ReactClassMixin = {
      
          /**
           * TODO: This will be deprecated because state should always keep a consistent
           * type signature and the only use case for this, is to avoid that.
           */
          replaceState: function (newState, callback) {
            this.updater.enqueueReplaceState(this, newState, callback);
          },
      
          /**
           * Checks whether or not this composite component is mounted.
           * @return {boolean} True if mounted, false otherwise.
           * @protected
           * @final
           */
          isMounted: function () {
            if (process.env.NODE_ENV !== 'production') {
              process.env.NODE_ENV !== 'production' ? warning(this.__didWarnIsMounted, '%s: isMounted is deprecated. Instead, make sure to clean up ' + 'subscriptions and pending requests in componentWillUnmount to ' + 'prevent memory leaks.', this.constructor && this.constructor.displayName || this.name || 'Component') : void 0;
              this.__didWarnIsMounted = true;
            }
            return !!this.__isMounted;
          }
        };
      
        var ReactClassComponent = function () {};
        _assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);
      
        /**
         * Creates a composite component class given a class specification.
         * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
         *
         * @param {object} spec Class specification (which must define `render`).
         * @return {function} Component constructor function.
         * @public
         */
        function createClass(spec) {
          // To keep our warnings more understandable, we'll use a little hack here to
          // ensure that Constructor.name !== 'Constructor'. This makes sure we don't
          // unnecessarily identify a class without displayName as 'Constructor'.
          var Constructor = identity(function (props, context, updater) {
            // This constructor gets overridden by mocks. The argument is used
            // by mocks to assert on what gets mounted.
      
            if (process.env.NODE_ENV !== 'production') {
              process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;
            }
      
            // Wire up auto-binding
            if (this.__reactAutoBindPairs.length) {
              bindAutoBindMethods(this);
            }
      
            this.props = props;
            this.context = context;
            this.refs = emptyObject;
            this.updater = updater || ReactNoopUpdateQueue;
      
            this.state = null;
      
            // ReactClasses doesn't have constructors. Instead, they use the
            // getInitialState and componentWillMount methods for initialization.
      
            var initialState = this.getInitialState ? this.getInitialState() : null;
            if (process.env.NODE_ENV !== 'production') {
              // We allow auto-mocks to proceed as if they're returning null.
              if (initialState === undefined && this.getInitialState._isMockFunction) {
                // This is probably bad practice. Consider warning here and
                // deprecating this convenience.
                initialState = null;
              }
            }
            _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent');
      
            this.state = initialState;
          });
          Constructor.prototype = new ReactClassComponent();
          Constructor.prototype.constructor = Constructor;
          Constructor.prototype.__reactAutoBindPairs = [];
      
          injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
      
          mixSpecIntoComponent(Constructor, IsMountedMixin);
          mixSpecIntoComponent(Constructor, spec);
      
          // Initialize the defaultProps property after all mixins have been merged.
          if (Constructor.getDefaultProps) {
            Constructor.defaultProps = Constructor.getDefaultProps();
          }
      
          if (process.env.NODE_ENV !== 'production') {
            // This is a tag to indicate that the use of these method names is ok,
            // since it's used with createClass. If it's not, then it's likely a
            // mistake so we'll warn you to use the static property, property
            // initializer or constructor respectively.
            if (Constructor.getDefaultProps) {
              Constructor.getDefaultProps.isReactClassApproved = {};
            }
            if (Constructor.prototype.getInitialState) {
              Constructor.prototype.getInitialState.isReactClassApproved = {};
            }
          }
      
          _invariant(Constructor.prototype.render, 'createClass(...): Class specification must implement a `render` method.');
      
          if (process.env.NODE_ENV !== 'production') {
            process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;
            process.env.NODE_ENV !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;
          }
      
          // Reduce time spent doing lookups by setting these on the prototype.
          for (var methodName in ReactClassInterface) {
            if (!Constructor.prototype[methodName]) {
              Constructor.prototype[methodName] = null;
            }
          }
      
          return Constructor;
        }
      
        return createClass;
      }
      
      module.exports = factory;
      
    provide("create-react-class/factory", module.exports);
  }(global));
  
  // pakmanager:create-react-class
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    /**
       * Copyright 2013-present, 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';
      
      var React = require('react');
      var factory =  require('create-react-class/factory');
      
      // Hack to grab NoopUpdateQueue from isomorphic React
      var ReactNoopUpdateQueue = new React.Component().updater;
      
      module.exports = factory(
        React.Component,
        React.isValidElement,
        ReactNoopUpdateQueue
      );
      
    provide("create-react-class", module.exports);
  }(global));
  
  // pakmanager:lodash.indexof
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    /**
       * lodash (Custom Build) <https://lodash.com/>
       * Build: `lodash modularize exports="npm" -o ./`
       * Copyright jQuery Foundation and other contributors <https://jquery.org/>
       * Released under MIT license <https://lodash.com/license>
       * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
       * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
       */
      
      /** Used as references for various `Number` constants. */
      var INFINITY = 1 / 0,
          MAX_INTEGER = 1.7976931348623157e+308,
          NAN = 0 / 0;
      
      /** `Object#toString` result references. */
      var symbolTag = '[object Symbol]';
      
      /** Used to match leading and trailing whitespace. */
      var reTrim = /^\s+|\s+$/g;
      
      /** Used to detect bad signed hexadecimal string values. */
      var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
      
      /** Used to detect binary string values. */
      var reIsBinary = /^0b[01]+$/i;
      
      /** Used to detect octal string values. */
      var reIsOctal = /^0o[0-7]+$/i;
      
      /** Built-in method references without a dependency on `root`. */
      var freeParseInt = parseInt;
      
      /**
       * The base implementation of `_.findIndex` and `_.findLastIndex` without
       * support for iteratee shorthands.
       *
       * @private
       * @param {Array} array The array to inspect.
       * @param {Function} predicate The function invoked per iteration.
       * @param {number} fromIndex The index to search from.
       * @param {boolean} [fromRight] Specify iterating from right to left.
       * @returns {number} Returns the index of the matched value, else `-1`.
       */
      function baseFindIndex(array, predicate, fromIndex, fromRight) {
        var length = array.length,
            index = fromIndex + (fromRight ? 1 : -1);
      
        while ((fromRight ? index-- : ++index < length)) {
          if (predicate(array[index], index, array)) {
            return index;
          }
        }
        return -1;
      }
      
      /**
       * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
       *
       * @private
       * @param {Array} array The array to inspect.
       * @param {*} value The value to search for.
       * @param {number} fromIndex The index to search from.
       * @returns {number} Returns the index of the matched value, else `-1`.
       */
      function baseIndexOf(array, value, fromIndex) {
        if (value !== value) {
          return baseFindIndex(array, baseIsNaN, fromIndex);
        }
        var index = fromIndex - 1,
            length = array.length;
      
        while (++index < length) {
          if (array[index] === value) {
            return index;
          }
        }
        return -1;
      }
      
      /**
       * The base implementation of `_.isNaN` without support for number objects.
       *
       * @private
       * @param {*} value The value to check.
       * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
       */
      function baseIsNaN(value) {
        return value !== value;
      }
      
      /** Used for built-in method references. */
      var objectProto = Object.prototype;
      
      /**
       * Used to resolve the
       * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
       * of values.
       */
      var objectToString = objectProto.toString;
      
      /* Built-in method references for those with the same name as other `lodash` methods. */
      var nativeMax = Math.max;
      
      /**
       * Gets the index at which the first occurrence of `value` is found in `array`
       * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
       * for equality comparisons. If `fromIndex` is negative, it's used as the
       * offset from the end of `array`.
       *
       * @static
       * @memberOf _
       * @since 0.1.0
       * @category Array
       * @param {Array} array The array to inspect.
       * @param {*} value The value to search for.
       * @param {number} [fromIndex=0] The index to search from.
       * @returns {number} Returns the index of the matched value, else `-1`.
       * @example
       *
       * _.indexOf([1, 2, 1, 2], 2);
       * // => 1
       *
       * // Search from the `fromIndex`.
       * _.indexOf([1, 2, 1, 2], 2, 2);
       * // => 3
       */
      function indexOf(array, value, fromIndex) {
        var length = array ? array.length : 0;
        if (!length) {
          return -1;
        }
        var index = fromIndex == null ? 0 : toInteger(fromIndex);
        if (index < 0) {
          index = nativeMax(length + index, 0);
        }
        return baseIndexOf(array, value, index);
      }
      
      /**
       * Checks if `value` is the
       * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
       * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
       *
       * @static
       * @memberOf _
       * @since 0.1.0
       * @category Lang
       * @param {*} value The value to check.
       * @returns {boolean} Returns `true` if `value` is an object, else `false`.
       * @example
       *
       * _.isObject({});
       * // => true
       *
       * _.isObject([1, 2, 3]);
       * // => true
       *
       * _.isObject(_.noop);
       * // => true
       *
       * _.isObject(null);
       * // => false
       */
      function isObject(value) {
        var type = typeof value;
        return !!value && (type == 'object' || type == 'function');
      }
      
      /**
       * Checks if `value` is object-like. A value is object-like if it's not `null`
       * and has a `typeof` result of "object".
       *
       * @static
       * @memberOf _
       * @since 4.0.0
       * @category Lang
       * @param {*} value The value to check.
       * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
       * @example
       *
       * _.isObjectLike({});
       * // => true
       *
       * _.isObjectLike([1, 2, 3]);
       * // => true
       *
       * _.isObjectLike(_.noop);
       * // => false
       *
       * _.isObjectLike(null);
       * // => false
       */
      function isObjectLike(value) {
        return !!value && typeof value == 'object';
      }
      
      /**
       * Checks if `value` is classified as a `Symbol` primitive or object.
       *
       * @static
       * @memberOf _
       * @since 4.0.0
       * @category Lang
       * @param {*} value The value to check.
       * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
       * @example
       *
       * _.isSymbol(Symbol.iterator);
       * // => true
       *
       * _.isSymbol('abc');
       * // => false
       */
      function isSymbol(value) {
        return typeof value == 'symbol' ||
          (isObjectLike(value) && objectToString.call(value) == symbolTag);
      }
      
      /**
       * Converts `value` to a finite number.
       *
       * @static
       * @memberOf _
       * @since 4.12.0
       * @category Lang
       * @param {*} value The value to convert.
       * @returns {number} Returns the converted number.
       * @example
       *
       * _.toFinite(3.2);
       * // => 3.2
       *
       * _.toFinite(Number.MIN_VALUE);
       * // => 5e-324
       *
       * _.toFinite(Infinity);
       * // => 1.7976931348623157e+308
       *
       * _.toFinite('3.2');
       * // => 3.2
       */
      function toFinite(value) {
        if (!value) {
          return value === 0 ? value : 0;
        }
        value = toNumber(value);
        if (value === INFINITY || value === -INFINITY) {
          var sign = (value < 0 ? -1 : 1);
          return sign * MAX_INTEGER;
        }
        return value === value ? value : 0;
      }
      
      /**
       * Converts `value` to an integer.
       *
       * **Note:** This method is loosely based on
       * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
       *
       * @static
       * @memberOf _
       * @since 4.0.0
       * @category Lang
       * @param {*} value The value to convert.
       * @returns {number} Returns the converted integer.
       * @example
       *
       * _.toInteger(3.2);
       * // => 3
       *
       * _.toInteger(Number.MIN_VALUE);
       * // => 0
       *
       * _.toInteger(Infinity);
       * // => 1.7976931348623157e+308
       *
       * _.toInteger('3.2');
       * // => 3
       */
      function toInteger(value) {
        var result = toFinite(value),
            remainder = result % 1;
      
        return result === result ? (remainder ? result - remainder : result) : 0;
      }
      
      /**
       * Converts `value` to a number.
       *
       * @static
       * @memberOf _
       * @since 4.0.0
       * @category Lang
       * @param {*} value The value to process.
       * @returns {number} Returns the number.
       * @example
       *
       * _.toNumber(3.2);
       * // => 3.2
       *
       * _.toNumber(Number.MIN_VALUE);
       * // => 5e-324
       *
       * _.toNumber(Infinity);
       * // => Infinity
       *
       * _.toNumber('3.2');
       * // => 3.2
       */
      function toNumber(value) {
        if (typeof value == 'number') {
          return value;
        }
        if (isSymbol(value)) {
          return NAN;
        }
        if (isObject(value)) {
          var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
          value = isObject(other) ? (other + '') : other;
        }
        if (typeof value != 'string') {
          return value === 0 ? value : +value;
        }
        value = value.replace(reTrim, '');
        var isBinary = reIsBinary.test(value);
        return (isBinary || reIsOctal.test(value))
          ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
          : (reIsBadHex.test(value) ? NAN : +value);
      }
      
      module.exports = indexOf;
      
    provide("lodash.indexof", module.exports);
  }(global));
  
  // pakmanager:react-onclickoutside
  (function (context) {
    
    var module = { exports: {} }, exports = module.exports
      , $ = require("ender")
      ;
    
    /**
       * A higher-order-component for handling onClickOutside for React components.
       */
      (function(root) {
      
        // administrative
        var registeredComponents = [];
        var handlers = [];
        var IGNORE_CLASS = 'ignore-react-onclickoutside';
        var DEFAULT_EVENTS = ['mousedown', 'touchstart'];
      
        /**
         * Check whether some DOM node is our Component's node.
         */
        var isNodeFound = function(current, componentNode, ignoreClass) {
          if (current === componentNode) {
            return true;
          }
          // SVG <use/> elements do not technically reside in the rendered DOM, so
          // they do not have classList directly, but they offer a link to their
          // corresponding element, which can have classList. This extra check is for
          // that case.
          // See: http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGUseElement
          // Discussion: https://github.com/Pomax/react-onclickoutside/pull/17
          if (current.correspondingElement) {
            return current.correspondingElement.classList.contains(ignoreClass);
          }
          return current.classList.contains(ignoreClass);
        };
      
        /**
         * Try to find our node in a hierarchy of nodes, returning the document
         * node as highest noode if our node is not found in the path up.
         */
        var findHighest = function(current, componentNode, ignoreClass) {
          if (current === componentNode) {
            return true;
          }
      
          // If source=local then this event came from 'somewhere'
          // inside and should be ignored. We could handle this with
          // a layered approach, too, but that requires going back to
          // thinking in terms of Dom node nesting, running counter
          // to React's 'you shouldn't care about the DOM' philosophy.
          while(current.parentNode) {
            if (isNodeFound(current, componentNode, ignoreClass)) {
              return true;
            }
            current = current.parentNode;
          }
          return current;
        };
      
        /**
         * Check if the browser scrollbar was clicked
         */
        var clickedScrollbar = function(evt) {
          return document.documentElement.clientWidth <= evt.clientX || document.documentElement.clientHeight <= evt.clientY;
        };
      
        /**
         * Generate the event handler that checks whether a clicked DOM node
         * is inside of, or lives outside of, our Component's node tree.
         */
        var generateOutsideCheck = function(componentNode, componentInstance, eventHandler, ignoreClass, excludeScrollbar, preventDefault, stopPropagation) {
          return function(evt) {
            if (preventDefault) {
              evt.preventDefault();
            }
            if (stopPropagation) {
              evt.stopPropagation();
            }
            var current = evt.target;
            if((excludeScrollbar && clickedScrollbar(evt)) || (findHighest(current, componentNode, ignoreClass) !== document)) {
              return;
            }
            eventHandler(evt);
          };
        };
      
        /**
         * This function generates the HOC function that you'll use
         * in order to impart onOutsideClick listening to an
         * arbitrary component. It gets called at the end of the
         * bootstrapping code to yield an instance of the
         * onClickOutsideHOC function defined inside setupHOC().
         */
        function setupHOC(root, React, ReactDOM, createReactClass) {
      
          // The actual Component-wrapping HOC:
          return function onClickOutsideHOC(Component, config) {
            var wrapComponentWithOnClickOutsideHandling = createReactClass({
              statics: {
                /**
                 * Access the wrapped Component's class.
                 */
                getClass: function() {
                  if (Component.getClass) {
                    return Component.getClass();
                  }
                  return Component;
                }
              },
      
              /**
               * Access the wrapped Component's instance.
               */
              getInstance: function() {
                return Component.prototype.isReactComponent ? this.refs.instance : this;
              },
      
              // this is given meaning in componentDidMount
              __outsideClickHandler: function() {},
      
              getDefaultProps: function() {
                return {
                  excludeScrollbar: config && config.excludeScrollbar
                };
              },
      
              /**
               * Add click listeners to the current document,
               * linked to this component's state.
               */
              componentDidMount: function() {
                // If we are in an environment without a DOM such
                // as shallow rendering or snapshots then we exit
                // early to prevent any unhandled errors being thrown.
                if (typeof document === 'undefined' || !document.createElement){
                  return;
                }
      
                var instance = this.getInstance();
                var clickOutsideHandler;
      
                if(config && typeof config.handleClickOutside === 'function') {
                  clickOutsideHandler = config.handleClickOutside(instance);
                  if(typeof clickOutsideHandler !== 'function') {
                    throw new Error('Component lacks a function for processing outside click events specified by the handleClickOutside config option.');
                  }
                } else if(typeof instance.handleClickOutside === 'function') {
                  if (React.Component.prototype.isPrototypeOf(instance)) {
                    clickOutsideHandler = instance.handleClickOutside.bind(instance);
                  } else {
                    clickOutsideHandler = instance.handleClickOutside;
                  }
                } else if(typeof instance.props.handleClickOutside === 'function') {
                  clickOutsideHandler = instance.props.handleClickOutside;
                } else {
                  throw new Error('Component lacks a handleClickOutside(event) function for processing outside click events.');
                }
      
                var componentNode = ReactDOM.findDOMNode(instance);
                if (componentNode === null) {
                  console.warn('Antipattern warning: there was no DOM node associated with the component that is being wrapped by outsideClick.');
                  console.warn([
                    'This is typically caused by having a component that starts life with a render function that',
                    'returns `null` (due to a state or props value), so that the component \'exist\' in the React',
                    'chain of components, but not in the DOM.\n\nInstead, you need to refactor your code so that the',
                    'decision of whether or not to show your component is handled by the parent, in their render()',
                    'function.\n\nIn code, rather than:\n\n  A{render(){return check? <.../> : null;}\n  B{render(){<A check=... />}\n\nmake sure that you',
                    'use:\n\n  A{render(){return <.../>}\n  B{render(){return <...>{ check ? <A/> : null }<...>}}\n\nThat is:',
                    'the parent is always responsible for deciding whether or not to render any of its children.',
                    'It is not the child\'s responsibility to decide whether a render instruction from above should',
                    'get ignored or not by returning `null`.\n\nWhen any component gets its render() function called,',
                    'that is the signal that it should be rendering its part of the UI. It may in turn decide not to',
                    'render all of *its* children, but it should never return `null` for itself. It is not responsible',
                    'for that decision.'
                  ].join(' '));
                }
      
                var fn = this.__outsideClickHandler = generateOutsideCheck(
                  componentNode,
                  instance,
                  clickOutsideHandler,
                  this.props.outsideClickIgnoreClass || IGNORE_CLASS,
                  this.props.excludeScrollbar, // fallback not needed, prop always exists because of getDefaultProps
                  this.props.preventDefault || false,
                  this.props.stopPropagation || false
                );
      
                var pos = registeredComponents.length;
                registeredComponents.push(this);
                handlers[pos] = fn;
      
                // If there is a truthy disableOnClickOutside property for this
                // component, don't immediately start listening for outside events.
                if (!this.props.disableOnClickOutside) {
                  this.enableOnClickOutside();
                }
              },
      
              /**
              * Track for disableOnClickOutside props changes and enable/disable click outside
              */
              componentWillReceiveProps: function(nextProps) {
                if (this.props.disableOnClickOutside && !nextProps.disableOnClickOutside) {
                  this.enableOnClickOutside();
                } else if (!this.props.disableOnClickOutside && nextProps.disableOnClickOutside) {
                  this.disableOnClickOutside();
                }
              },
      
              /**
               * Remove the document's event listeners
               */
              componentWillUnmount: function() {
                this.disableOnClickOutside();
                this.__outsideClickHandler = false;
                var pos = registeredComponents.indexOf(this);
                if( pos>-1) {
                  // clean up so we don't leak memory
                  if (handlers[pos]) { handlers.splice(pos, 1); }
                  registeredComponents.splice(pos, 1);
                }
              },
      
              /**
               * Can be called to explicitly enable event listening
               * for clicks and touches outside of this element.
               */
              enableOnClickOutside: function() {
                var fn = this.__outsideClickHandler;
                if (typeof document !== 'undefined') {
                  var events = this.props.eventTypes || DEFAULT_EVENTS;
                  if (!events.forEach) {
                    events = [events];
                  }
                  events.forEach(function (eventName) {
                    document.addEventListener(eventName, fn);
                  });
                }
              },
      
              /**
               * Can be called to explicitly disable event listening
               * for clicks and touches outside of this element.
               */
              disableOnClickOutside: function() {
                var fn = this.__outsideClickHandler;
                if (typeof document !== 'undefined') {
                  var events = this.props.eventTypes || DEFAULT_EVENTS;
                  if (!events.forEach) {
                    events = [events];
                  }
                  events.forEach(function (eventName) {
                    document.removeEventListener(eventName, fn);
                  });
                }
              },
      
              /**
               * Pass-through render
               */
              render: function() {
                var passedProps = this.props;
                var props = {};
                Object.keys(this.props).forEach(function(key) {
                  if (key !== 'excludeScrollbar') {
                    props[key] = passedProps[key];
                  }
                });
                if (Component.prototype.isReactComponent) {
                  props.ref = 'instance';
                }
                props.disableOnClickOutside = this.disableOnClickOutside;
                props.enableOnClickOutside = this.enableOnClickOutside;
                return React.createElement(Component, props);
              }
            });
      
            // Add display name for React devtools
            (function bindWrappedComponentName(c, wrapper) {
              var componentName = c.displayName || c.name || 'Component';
              wrapper.displayName = 'OnClickOutside(' + componentName + ')';
            }(Component, wrapComponentWithOnClickOutsideHandling));
      
            return wrapComponentWithOnClickOutsideHandling;
          };
        }
      
        /**
         * This function sets up the library in ways that
         * work with the various modulde loading solutions
         * used in JavaScript land today.
         */
        function setupBinding(root, factory) {
          if (typeof define === 'function' && define.amd) {
            // AMD. Register as an anonymous module.
            define(['react','react-dom','create-react-class'], function(React, ReactDom, createReactClass) {
              if (!createReactClass) createReactClass = React.createClass;
              return factory(root, React, ReactDom, createReactClass);
            });
          } else if (typeof exports === 'object') {
            // Node. Note that this does not work with strict
            // CommonJS, but only CommonJS-like environments
            // that support module.exports
            module.exports = factory(root, require('react'), require('react-dom'), require('create-react-class'));
          } else {
            // Browser globals (root is window)
            var createReactClass = React.createClass ? React.createClass : window.createReactClass;
            root.onClickOutside = factory(root, React, ReactDOM, createReactClass);
          }
        }
      
        // Make it all happen
        setupBinding(root, setupHOC);
      
      }(this));
      
    provide("react-onclickoutside", module.exports);
  }(global));