Full Code of themadcreator/gifler for AI

master ce36440633f5 cached
33 files
457.8 KB
133.3k tokens
469 symbols
1 requests
Download .txt
Showing preview only (474K chars total). Download the full file or copy to clipboard to get everything.
Repository: themadcreator/gifler
Branch: master
Commit: ce36440633f5
Files: 33
Total size: 457.8 KB

Directory structure:
gitextract_7a1xagvw/

├── .gitignore
├── README.md
├── gh-pages/
│   ├── assets/
│   │   ├── gifler.js
│   │   └── lib/
│   │       ├── highlight.pack.js
│   │       └── monokai_sublime.css
│   ├── docs.css
│   ├── docs.html
│   ├── examples.css
│   ├── examples.html
│   ├── index.css
│   ├── index.html
│   └── theme.css
├── gifler.bare.js
├── gifler.bundle.js
├── metalsmith.json
├── package.json
├── site/
│   ├── _constants.less
│   ├── _examples/
│   │   ├── control.js
│   │   ├── rainbow.js
│   │   └── simple.js
│   ├── _layout.jade
│   ├── _nav.jade
│   ├── assets/
│   │   ├── gifler.js
│   │   └── lib/
│   │       ├── highlight.pack.js
│   │       └── monokai_sublime.css
│   ├── docs.jade
│   ├── docs.less
│   ├── examples.jade
│   ├── examples.less
│   ├── index.jade
│   ├── index.less
│   └── theme.less
└── src/
    └── gifler.coffee

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
npm-debug.log

# Built gh-pages site
# site-dist


================================================
FILE: README.md
================================================
# Gifler
Animate GIFs in canvas.

- Loads GIF contents with XHR
- Decodes GIF frames and pixels with omggif
- Prepares canvas buffer for fast rendering
- Animates each frame and compensates for render delays
- API enables fully custom canvas rendering

### Examples & Docs

<http://themadcreator.github.io/gifler/>

### Usage

```html
<canvas class="example"></canvas>
<script src="gifler.min.js"></script>
<script>gifler('image.gif').animate('.example')</script>
```

### License
Apache-2.0

================================================
FILE: gh-pages/assets/gifler.js
================================================
/** gifler.js | github.com/themadcreator/gifler | @license: Apache-2.0 */
!function t(e,n,r){function i(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof require&&require;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};e[s][0].call(l.exports,function(t){var n=e[s][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[s].exports}for(var o="function"==typeof require&&require,s=0;s<r.length;s++)i(r[s]);return i}({1:[function(t,e,n){var r,i,o,s,a,u,c=function(t,e){return function(){return t.apply(e,arguments)}};s=t("omggif").GifReader,a=t("bluebird"),u=function(t){var e,n,r;return r=new XMLHttpRequest,r.open("GET",t,e=!0),r.responseType="arraybuffer",n=new a(function(t,e){return r.onload=function(e){return t(this.response)}}),r.send(),new o(n)},o=function(){function t(t){this._animatorPromise=t.then(function(t){var e;return e=new s(new Uint8Array(t)),i.decodeFramesAsync(e).then(function(t){return new r(e,t)})})}return t.getCanvasElement=function(t){var e,n;if("string"==typeof t&&"CANVAS"===(null!=(n=e=document.querySelector(t))?n.tagName:void 0))return e;if("CANVAS"===(null!=t?t.tagName:void 0))return t;throw new Error("Unexpected selector type. Valid types are query-selector-string/canvas-element")},t.prototype.animate=function(e){var n;return n=t.getCanvasElement(e),this._animatorPromise.then(function(t){return t.animateInCanvas(n)})},t.prototype.frames=function(e,n,r){var i;return null==r&&(r=!1),i=t.getCanvasElement(e),this._animatorPromise.then(function(t){return t.onDrawFrame=n,t.animateInCanvas(i,r)})},t.prototype.get=function(t){return this._animatorPromise},t}(),i=function(){function t(){}return t.decodeFramesSync=function(e){var n;return function(){n=[];for(var t=0,r=e.numFrames();r>=0?r>t:t>r;r>=0?t++:t--)n.push(t);return n}.apply(this).map(function(n){return t.decodeFrame(e,n)})},t.decodeFramesAsync=function(e){var n,r;return a.map(function(){r=[];for(var t=0,n=e.numFrames();n>=0?n>t:t>n;n>=0?t++:t--)r.push(t);return r}.apply(this),function(n){return t.decodeFrame(e,n)},n=1)},t.decodeFrame=function(t,e){var n;return n=t.frameInfo(e),n.pixels=new Uint8ClampedArray(t.width*t.height*4),t.decodeAndBlitFrameRGBA(e,n.pixels),n},t}(),r=function(){function t(t,e){var n;this._reader=t,this._frames=e,this._advanceFrame=c(this._advanceFrame,this),this._nextFrameRender=c(this._nextFrameRender,this),this._nextFrame=c(this._nextFrame,this),n=this._reader,this.width=n.width,this.height=n.height,this._loopCount=this._reader.loopCount(),this._loops=0,this._frameIndex=0,this._running=!1}return t.createBufferCanvas=function(t,e,n){var r,i,o;return r=document.createElement("canvas"),i=r.getContext("2d"),r.width=t.width,r.height=t.height,o=i.createImageData(e,n),o.data.set(t.pixels),i.putImageData(o,-t.x,-t.y),r},t.prototype.start=function(){return this._lastTime=(new Date).valueOf(),this._delayCompensation=0,this._running=!0,setTimeout(this._nextFrame,0),this},t.prototype.stop=function(){return this._running=!1,this},t.prototype.reset=function(){return this._frameIndex=0,this._loops=0,this},t.prototype.running=function(){return this._running},t.prototype._nextFrame=function(){requestAnimationFrame(this._nextFrameRender)},t.prototype._nextFrameRender=function(){var t,e;if(this._running)return t=this._frames[this._frameIndex],null!=(e=this.onFrame)&&e.apply(this,[t,this._frameIndex]),this._enqueueNextFrame()},t.prototype._advanceFrame=function(){this._frameIndex+=1,this._frameIndex>=this._frames.length&&(0!==this._loopCount&&this._loopCount===this._loops?this.stop():(this._frameIndex=0,this._loops+=1))},t.prototype._enqueueNextFrame=function(){var t,e,n,r;for(this._advanceFrame();this._running;){if(n=this._frames[this._frameIndex],e=(new Date).valueOf()-this._lastTime,this._lastTime+=e,this._delayCompensation+=e,r=10*n.delay,t=r-this._delayCompensation,this._delayCompensation-=r,!(0>t)){setTimeout(this._nextFrame,t);break}this._advanceFrame()}},t.prototype.animateInCanvas=function(e,n){var r;return null==n&&(n=!0),n&&(e.width=this.width,e.height=this.height),r=e.getContext("2d"),null==this.onDrawFrame&&(this.onDrawFrame=function(t,e,n){return t.drawImage(e.buffer,e.x,e.y)}),null==this.onFrame&&(this.onFrame=function(n){return function(i,o){var s,a;switch(null==i.buffer&&(i.buffer=t.createBufferCanvas(i,n.width,n.height)),"function"==typeof n.disposeFrame&&n.disposeFrame(),i.disposal){case 2:n.disposeFrame=function(){return r.clearRect(0,0,e.width,e.height)};break;case 3:a=r.getImageData(0,0,e.width,e.height),n.disposeFrame=function(){return r.putImageData(a,0,0)};break;default:n.disposeFrame=null}return null!=(s=n.onDrawFrame)?s.apply(n,[r,i,o]):void 0}}(this)),this.start(),this},t}(),u.Gif=o,u.Decoder=i,u.Animator=r,"undefined"!=typeof window&&null!==window&&(window.gifler=u),"undefined"!=typeof e&&null!==e&&(e.exports=u)},{bluebird:2,omggif:4}],2:[function(t,e,n){(function(t,r){!function(t){if("object"==typeof n&&"undefined"!=typeof e)e.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i;"undefined"!=typeof window?i=window:"undefined"!=typeof r?i=r:"undefined"!=typeof self&&(i=self),i.Promise=t()}}(function(){var e,n,i;return function t(e,n,r){function i(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof _dereq_&&_dereq_;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[s]={exports:{}};e[s][0].call(l.exports,function(t){var n=e[s][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[s].exports}for(var o="function"==typeof _dereq_&&_dereq_,s=0;s<r.length;s++)i(r[s]);return i}({1:[function(t,e,n){"use strict";e.exports=function(t){function e(t){var e=new n(t),r=e.promise();return e.setHowMany(1),e.setUnwrap(),e.init(),r}var n=t._SomePromiseArray;t.any=function(t){return e(t)},t.prototype.any=function(){return e(this)}}},{}],2:[function(e,n,r){"use strict";function i(){this._isTickUsed=!1,this._lateQueue=new l(16),this._normalQueue=new l(16),this._haveDrainedQueues=!1,this._trampolineEnabled=!0;var t=this;this.drainQueues=function(){t._drainQueues()},this._schedule=c.isStatic?c(this.drainQueues):c}function o(t,e,n){this._lateQueue.push(t,e,n),this._queueTick()}function s(t,e,n){this._normalQueue.push(t,e,n),this._queueTick()}function a(t){this._normalQueue._pushOne(t),this._queueTick()}var u;try{throw new Error}catch(t){u=t}var c=e("./schedule"),l=e("./queue"),h=e("./util");i.prototype.disableTrampolineIfNecessary=function(){h.hasDevTools&&(this._trampolineEnabled=!1)},i.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},i.prototype.fatalError=function(e,n){n?(t.stderr.write("Fatal "+(e instanceof Error?e.stack:e)),t.exit(2)):this.throwLater(e)},i.prototype.throwLater=function(t,e){if(1===arguments.length&&(e=t,t=function(){throw e}),"undefined"!=typeof setTimeout)setTimeout(function(){t(e)},0);else try{this._schedule(function(){t(e)})}catch(t){throw new Error("No async scheduler available\n\n    See http://goo.gl/MqrFmX\n")}},h.hasDevTools?(c.isStatic&&(c=function(t){setTimeout(t,0)}),i.prototype.invokeLater=function(t,e,n){this._trampolineEnabled?o.call(this,t,e,n):this._schedule(function(){setTimeout(function(){t.call(e,n)},100)})},i.prototype.invoke=function(t,e,n){this._trampolineEnabled?s.call(this,t,e,n):this._schedule(function(){t.call(e,n)})},i.prototype.settlePromises=function(t){this._trampolineEnabled?a.call(this,t):this._schedule(function(){t._settlePromises()})}):(i.prototype.invokeLater=o,i.prototype.invoke=s,i.prototype.settlePromises=a),i.prototype.invokeFirst=function(t,e,n){this._normalQueue.unshift(t,e,n),this._queueTick()},i.prototype._drainQueue=function(t){for(;t.length()>0;){var e=t.shift();if("function"==typeof e){var n=t.shift(),r=t.shift();e.call(n,r)}else e._settlePromises()}},i.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},i.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},i.prototype._reset=function(){this._isTickUsed=!1},n.exports=i,n.exports.firstLineError=u},{"./queue":26,"./schedule":29,"./util":36}],3:[function(t,e,n){"use strict";e.exports=function(t,e,n,r){var i=!1,o=function(t,e){this._reject(e)},s=function(t,e){e.promiseRejectionQueued=!0,e.bindingPromise._then(o,o,null,this,t)},a=function(t,e){0===(50397184&this._bitField)&&this._resolveCallback(e.target)},u=function(t,e){e.promiseRejectionQueued||this._reject(t)};t.prototype.bind=function(o){i||(i=!0,t.prototype._propagateFrom=r.propagateFromFunction(),t.prototype._boundValue=r.boundValueFunction());var c=n(o),l=new t(e);l._propagateFrom(this,1);var h=this._target();if(l._setBoundTo(c),c instanceof t){var f={promiseRejectionQueued:!1,promise:l,target:h,bindingPromise:c};h._then(e,s,void 0,l,f),c._then(a,u,void 0,l,f),l._setOnCancel(c)}else l._resolveCallback(h);return l},t.prototype._setBoundTo=function(t){void 0!==t?(this._bitField=2097152|this._bitField,this._boundTo=t):this._bitField=-2097153&this._bitField},t.prototype._isBound=function(){return 2097152===(2097152&this._bitField)},t.bind=function(e,n){return t.resolve(n).bind(e)}}},{}],4:[function(t,e,n){"use strict";function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}var i;"undefined"!=typeof Promise&&(i=Promise);var o=t("./promise")();o.noConflict=r,e.exports=o},{"./promise":22}],5:[function(t,e,n){"use strict";var r=Object.create;if(r){var i=r(null),o=r(null);i[" size"]=o[" size"]=0}e.exports=function(e){function n(t,n){var r;if(null!=t&&(r=t[n]),"function"!=typeof r){var i="Object "+a.classString(t)+" has no method '"+a.toString(n)+"'";throw new e.TypeError(i)}return r}function r(t){var e=this.pop(),r=n(t,e);return r.apply(t,this)}function i(t){return t[this]}function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}var s,a=t("./util"),u=a.canEvaluate;a.isIdentifier;e.prototype.call=function(t){var e=[].slice.call(arguments,1);return e.push(t),this._then(r,void 0,void 0,e,void 0)},e.prototype.get=function(t){var e,n="number"==typeof t;if(n)e=o;else if(u){var r=s(t);e=null!==r?r:i}else e=i;return this._then(e,void 0,void 0,t,void 0)}}},{"./util":36}],6:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util"),s=o.tryCatch,a=o.errorObj,u=e._async;e.prototype.break=e.prototype.cancel=function(){if(!i.cancellation())return this._warn("cancellation is disabled");for(var t=this,e=t;t.isCancellable();){if(!t._cancelBy(e)){e._isFollowing()?e._followee().cancel():e._cancelBranched();break}var n=t._cancellationParent;if(null==n||!n.isCancellable()){t._isFollowing()?t._followee().cancel():t._cancelBranched();break}t._isFollowing()&&t._followee().cancel(),e=t,t=n}},e.prototype._branchHasCancelled=function(){this._branchesRemainingToCancel--},e.prototype._enoughBranchesHaveCancelled=function(){return void 0===this._branchesRemainingToCancel||this._branchesRemainingToCancel<=0},e.prototype._cancelBy=function(t){return t===this?(this._branchesRemainingToCancel=0,this._invokeOnCancel(),!0):(this._branchHasCancelled(),this._enoughBranchesHaveCancelled()?(this._invokeOnCancel(),!0):!1)},e.prototype._cancelBranched=function(){this._enoughBranchesHaveCancelled()&&this._cancel()},e.prototype._cancel=function(){this.isCancellable()&&(this._setCancelled(),u.invoke(this._cancelPromises,this,void 0))},e.prototype._cancelPromises=function(){this._length()>0&&this._settlePromises()},e.prototype._unsetOnCancel=function(){this._onCancelField=void 0},e.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},e.prototype._doInvokeOnCancel=function(t,e){if(o.isArray(t))for(var n=0;n<t.length;++n)this._doInvokeOnCancel(t[n],e);else if(void 0!==t)if("function"==typeof t){if(!e){var r=s(t).call(this._boundValue());r===a&&(this._attachExtraTrace(r.e),u.throwLater(r.e))}}else t._resultCancelled(this)},e.prototype._invokeOnCancel=function(){var t=this._onCancel();this._unsetOnCancel(),u.invoke(this._doInvokeOnCancel,this,t)},e.prototype._invokeInternalOnCancel=function(){this.isCancellable()&&(this._doInvokeOnCancel(this._onCancel(),!0),this._unsetOnCancel())},e.prototype._resultCancelled=function(){this.cancel()}}},{"./util":36}],7:[function(t,e,n){"use strict";e.exports=function(e){function n(t,n,a){return function(u){var c=a._boundValue();t:for(var l=0;l<t.length;++l){var h=t[l];if(h===Error||null!=h&&h.prototype instanceof Error){if(u instanceof h)return o(n).call(c,u)}else if("function"==typeof h){var f=o(h).call(c,u);if(f===s)return f;if(f)return o(n).call(c,u)}else if(r.isObject(u)){for(var p=i(h),_=0;_<p.length;++_){var d=p[_];if(h[d]!=u[d])continue t}return o(n).call(c,u)}}return e}}var r=t("./util"),i=t("./es5").keys,o=r.tryCatch,s=r.errorObj;return n}},{"./es5":13,"./util":36}],8:[function(t,e,n){"use strict";e.exports=function(t){function e(){this._trace=new e.CapturedTrace(r())}function n(){return i?new e:void 0}function r(){var t=o.length-1;return t>=0?o[t]:void 0}var i=!1,o=[];return t.prototype._promiseCreated=function(){},t.prototype._pushContext=function(){},t.prototype._popContext=function(){return 0},t._peekContext=t.prototype._peekContext=function(){},e.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promisesCreated=0,o.push(this._trace))},e.prototype._popContext=function(){if(void 0!==this._trace){var t=o.pop(),e=t._promisesCreated;return t._promisesCreated=0,e}return 0},e.CapturedTrace=null,e.create=n,e.activateLongStackTraces=function(){i=!0,t.prototype._pushContext=e.prototype._pushContext,t.prototype._popContext=e.prototype._popContext,t._peekContext=t.prototype._peekContext=r,t.prototype._promiseCreated=function(){var t=this._peekContext();t&&t._promisesCreated++}},e}},{}],9:[function(e,n,r){"use strict";n.exports=function(n,r){function i(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof t)throw new TypeError("onCancel must be a function, got: "+H.toString(t));r._attachCancellationCallback(t)})}catch(t){return t}}function o(t){if(!this.isCancellable())return this;var e=this._onCancel();void 0!==e?H.isArray(e)?e.push(t):this._setOnCancel([e,t]):this._setOnCancel(t)}function s(){return this._onCancelField}function a(t){this._onCancelField=t}function u(){this._cancellationParent=void 0,this._onCancelField=void 0}function c(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branchesRemainingToCancel;void 0===n&&(n=0),t._branchesRemainingToCancel=n+1}0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function l(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}function h(){var t=this._boundTo;return void 0!==t&&t instanceof n?t.isFulfilled()?t.value():void 0:t}function f(){this._trace=new R(this._peekContext())}function p(t,e){if(L(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._parent),void 0!==n)n.attachExtraTrace(t);else if(!t.__stackCleaned__){var r=C(t);H.notEnumerableProp(t,"stack",r.message+"\n"+r.stack.join("\n")),H.notEnumerableProp(t,"__stackCleaned__",!0)}}}function _(t,e,n,r){if(void 0===t&&e>0&&Y.longStackTraces&&Y.warnings){var i="a promise was created in a "+n+" handler but was not returned from it";r._warn(i)}}function d(t,e){var n=t+" is deprecated and will be removed in a future version.";return e&&(n+=" Use "+e+" instead."),v(n)}function v(t,e,r){if(Y.warnings){var i,o=new V(t);if(e)r._attachExtraTrace(o);else if(Y.longStackTraces&&(i=n._peekContext()))i.attachExtraTrace(o);else{var s=C(o);o.stack=s.message+"\n"+s.stack.join("\n")}j(o,"",!0)}}function y(t,e){for(var n=0;n<e.length-1;++n)e[n].push("From previous event:"),e[n]=e[n].join("\n");return n<e.length&&(e[n]=e[n].join("\n")),t+"\n"+e.join("\n")}function m(t){for(var e=0;e<t.length;++e)(0===t[e].length||e+1<t.length&&t[e][0]===t[e+1][0])&&(t.splice(e,1),e--)}function g(t){for(var e=t[0],n=1;n<t.length;++n){for(var r=t[n],i=e.length-1,o=e[i],s=-1,a=r.length-1;a>=0;--a)if(r[a]===o){s=a;break}for(var a=s;a>=0;--a){var u=r[a];if(e[i]!==u)break;e.pop(),i--}e=r}}function b(t){for(var e=[],n=0;n<t.length;++n){var r=t[n],i="    (No stack trace)"===r||U.test(r),o=i&&z(r);i&&!o&&(M&&" "!==r.charAt(0)&&(r="    "+r),e.push(r))}return e}function w(t){for(var e=t.stack.replace(/\s+$/g,"").split("\n"),n=0;n<e.length;++n){var r=e[n];if("    (No stack trace)"===r||U.test(r))break}return n>0&&(e=e.slice(n)),e}function C(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&e.length>0?w(t):["    (No stack trace)"],{message:n,stack:b(e)}}function j(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)){var i=t.stack;r=e+B(i,t)}else r=e+String(t);"function"==typeof S?S(r,n):("function"==typeof console.log||"object"==typeof console.log)&&console.log(r)}}function F(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionHandled"===t?e(r):e(n,r))}catch(t){D.throwLater(t)}var o=!1;try{o=J(t,n,r)}catch(t){o=!0,D.throwLater(t)}var s=!1;if(X)try{s=X(t.toLowerCase(),{reason:n,promise:r})}catch(t){s=!0,D.throwLater(t)}o||i||s||"unhandledRejection"!==t||j(n,"Unhandled rejection ")}function k(t){var e;if("function"==typeof t)e="[function "+(t.name||"anonymous")+"]";else{e=t&&"function"==typeof t.toString?t.toString():H.toString(t);var n=/\[object [a-zA-Z0-9$_]+\]/;if(n.test(e))try{var r=JSON.stringify(t);e=r}catch(t){}0===e.length&&(e="(empty array)")}return"(<"+x(e)+">, no stack trace)"}function x(t){var e=41;return t.length<e?t:t.substr(0,e-3)+"..."}function E(){return"function"==typeof K}function T(t){var e=t.match(W);return e?{fileName:e[1],line:parseInt(e[2],10)}:void 0}function P(t,e){if(E()){for(var n,r,i=t.stack.split("\n"),o=e.stack.split("\n"),s=-1,a=-1,u=0;u<i.length;++u){var c=T(i[u]);if(c){n=c.fileName,s=c.line;break}}for(var u=0;u<o.length;++u){var c=T(o[u]);if(c){r=c.fileName,a=c.line;break}}0>s||0>a||!n||!r||n!==r||s>=a||(z=function(t){if(N.test(t))return!0;var e=T(t);return e&&e.fileName===n&&s<=e.line&&e.line<=a?!0:!1})}}function R(t){this._parent=t,this._promisesCreated=0;var e=this._length=1+(void 0===t?0:t._length);K(this,R),e>32&&this.uncycle()}var A,O,S,I=n._getDomain,D=n._async,V=e("./errors").Warning,H=e("./util"),L=H.canAttachTrace,N=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,U=null,B=null,M=!1,q=!0,Q=!(0==H.env("BLUEBIRD_WARNINGS")||!q&&!H.env("BLUEBIRD_WARNINGS")),$=!(0==H.env("BLUEBIRD_LONG_STACK_TRACES")||!q&&!H.env("BLUEBIRD_LONG_STACK_TRACES"));n.prototype.suppressUnhandledRejections=function(){var t=this._target();t._bitField=-1048577&t._bitField|2097152},n.prototype._ensurePossibleRejectionHandled=function(){0===(2097152&this._bitField)&&(this._setRejectionIsUnhandled(),D.invokeLater(this._notifyUnhandledRejection,this,void 0))},n.prototype._notifyUnhandledRejectionIsHandled=function(){F("rejectionHandled",A,void 0,this)},n.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var t=this._settledValue();this._setUnhandledRejectionIsNotified(),F("unhandledRejection",O,t,this)}},n.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},n.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},n.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},n.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},n.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},n.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},n.prototype._warn=function(t,e){return v(t,e,this)},n.onPossiblyUnhandledRejection=function(t){var e=I();O="function"==typeof t?null===e?t:e.bind(t):void 0},n.onUnhandledRejectionHandled=function(t){var e=I();A="function"==typeof t?null===e?t:e.bind(t):void 0},n.longStackTraces=function(){if(D.haveItemsQueued()&&!Y.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n    See http://goo.gl/MqrFmX\n");!Y.longStackTraces&&E()&&(Y.longStackTraces=!0,n.prototype._captureStackTrace=f,n.prototype._attachExtraTrace=p,r.activateLongStackTraces(),D.disableTrampolineIfNecessary())},n.hasLongStackTraces=function(){return Y.longStackTraces&&E()},n.config=function(t){if(t=Object(t),"longStackTraces"in t&&t.longStackTraces&&n.longStackTraces(),"warnings"in t&&(Y.warnings=!!t.warnings),"cancellation"in t&&t.cancellation&&!Y.cancellation){if(D.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");n.prototype._clearCancellationData=u,n.prototype._propagateFrom=c,n.prototype._onCancel=s,n.prototype._setOnCancel=a,n.prototype._attachCancellationCallback=o,n.prototype._execute=i,G=c,Y.cancellation=!0}},n.prototype._execute=function(t,e,n){try{t(e,n)}catch(t){return t}},n.prototype._onCancel=function(){},n.prototype._setOnCancel=function(t){},n.prototype._attachCancellationCallback=function(t){},n.prototype._captureStackTrace=function(){},n.prototype._attachExtraTrace=function(){},n.prototype._clearCancellationData=function(){},n.prototype._propagateFrom=function(t,e){};var G=l,z=function(){return!1},W=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;H.inherits(R,Error),r.CapturedTrace=R,R.prototype.uncycle=function(){var t=this._length;if(!(2>t)){for(var e=[],n={},r=0,i=this;void 0!==i;++r)e.push(i),i=i._parent;t=this._length=r;for(var r=t-1;r>=0;--r){var o=e[r].stack;void 0===n[o]&&(n[o]=r)}for(var r=0;t>r;++r){var s=e[r].stack,a=n[s];if(void 0!==a&&a!==r){a>0&&(e[a-1]._parent=void 0,e[a-1]._length=1),e[r]._parent=void 0,e[r]._length=1;var u=r>0?e[r-1]:this;t-1>a?(u._parent=e[a+1],u._parent.uncycle(),u._length=u._parent._length+1):(u._parent=void 0,u._length=1);for(var c=u._length+1,l=r-2;l>=0;--l)e[l]._length=c,c++;return}}}},R.prototype.attachExtraTrace=function(t){if(!t.__stackCleaned__){this.uncycle();for(var e=C(t),n=e.message,r=[e.stack],i=this;void 0!==i;)r.push(b(i.stack.split("\n"))),i=i._parent;g(r),m(r),H.notEnumerableProp(t,"stack",y(n,r)),H.notEnumerableProp(t,"__stackCleaned__",!0)}};var X,K=function(){var t=/^\s*at\s*/,e=function(t,e){return"string"==typeof t?t:void 0!==e.name&&void 0!==e.message?e.toString():k(e)};if("number"==typeof Error.stackTraceLimit&&"function"==typeof Error.captureStackTrace){Error.stackTraceLimit+=6,U=t,B=e;var n=Error.captureStackTrace;return z=function(t){return N.test(t)},function(t,e){Error.stackTraceLimit+=6,n(t,e),Error.stackTraceLimit-=6}}var r=new Error;if("string"==typeof r.stack&&r.stack.split("\n")[0].indexOf("stackDetection@")>=0)return U=/@/,B=e,M=!0,function(t){t.stack=(new Error).stack};var i;try{throw new Error}catch(t){i="stack"in t}return"stack"in r||!i||"number"!=typeof Error.stackTraceLimit?(B=function(t,e){return"string"==typeof t?t:"object"!=typeof e&&"function"!=typeof e||void 0===e.name||void 0===e.message?k(e):e.toString()},null):(U=t,B=e,function(t){Error.stackTraceLimit+=6;try{throw new Error}catch(e){t.stack=e.stack}Error.stackTraceLimit-=6})}([]),J=function(){if(H.isNode)return function(e,n,r){return"rejectionHandled"===e?t.emit(e,r):t.emit(e,n,r)};var e=!1,n=!0;try{var r=new self.CustomEvent("test");e=r instanceof CustomEvent}catch(t){}if(!e)try{var i=document.createEvent("CustomEvent");i.initCustomEvent("testingtheevent",!1,!0,{}),self.dispatchEvent(i)}catch(t){n=!1}n&&(X=function(t,n){var r;return e?r=new self.CustomEvent(t,{detail:n,bubbles:!1,cancelable:!0}):self.dispatchEvent&&(r=document.createEvent("CustomEvent"),r.initCustomEvent(t,!1,!0,n)),r?!self.dispatchEvent(r):!1});var o={};return o.unhandledRejection="onunhandledRejection".toLowerCase(),o.rejectionHandled="onrejectionHandled".toLowerCase(),function(t,e,n){var r=o[t],i=self[r];return i?("rejectionHandled"===t?i.call(self,n):i.call(self,e,n),!0):!1}}();"undefined"!=typeof console&&"undefined"!=typeof console.warn&&(S=function(t){console.warn(t)},H.isNode&&t.stderr.isTTY?S=function(e,n){var r=n?"":"";t.stderr.write(r+e+"\n")}:H.isNode||"string"!=typeof(new Error).stack||(S=function(t,e){console.warn("%c"+t,e?"color: darkorange":"color: red")}));var Y={warnings:Q,longStackTraces:!1,cancellation:!1};return $&&n.longStackTraces(),{longStackTraces:function(){return Y.longStackTraces},warnings:function(){return Y.warnings},cancellation:function(){return Y.cancellation},propagateFromFunction:function(){return G},boundValueFunction:function(){return h},checkForgottenReturns:_,setBounds:P,warn:v,deprecated:d,CapturedTrace:R}}},{"./errors":12,"./util":36}],10:[function(t,e,n){"use strict";e.exports=function(t){function e(){return this.value}function n(){throw this.reason}t.prototype.return=t.prototype.thenReturn=function(n){return n instanceof t&&n.suppressUnhandledRejections(),this._then(e,void 0,void 0,{value:n},void 0)},t.prototype.throw=t.prototype.thenThrow=function(t){return this._then(n,void 0,void 0,{reason:t},void 0)},t.prototype.catchThrow=function(t){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:t},void 0);var e=arguments[1],r=function(){throw e};return this.caught(t,r)},t.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof t&&n.suppressUnhandledRejections(),this._then(void 0,e,void 0,{value:n},void 0);var r=arguments[1];r instanceof t&&r.suppressUnhandledRejections();var i=function(){return r};return this.caught(n,i)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t,e){function n(){return o(this)}function r(t,n){return i(t,n,e,e)}var i=t.reduce,o=t.all;t.prototype.each=function(t){return this.mapSeries(t)._then(n,void 0,void 0,this,void 0)},t.prototype.mapSeries=function(t){return i(this,t,e,e)},t.each=function(t,e){return r(t,e)._then(n,void 0,void 0,t,void 0)},t.mapSeries=r}},{}],12:[function(t,e,n){"use strict";function r(t,e){function n(r){return this instanceof n?(h(this,"message","string"==typeof r?r:e),h(this,"name",t),void(Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this))):new n(r)}return l(n,Error),n}function i(t){return this instanceof i?(h(this,"name","OperationalError"),h(this,"message",t),this.cause=t,this.isOperational=!0,void(t instanceof Error?(h(this,"message",t.message),h(this,"stack",t.stack)):Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor))):new i(t)}var o,s,a=t("./es5"),u=a.freeze,c=t("./util"),l=c.inherits,h=c.notEnumerableProp,f=r("Warning","warning"),p=r("CancellationError","cancellation error"),_=r("TimeoutError","timeout error"),d=r("AggregateError","aggregate error");try{o=TypeError,s=RangeError}catch(t){o=r("TypeError","type error"),s=r("RangeError","range error")}for(var v="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),y=0;y<v.length;++y)"function"==typeof Array.prototype[v[y]]&&(d.prototype[v[y]]=Array.prototype[v[y]]);a.defineProperty(d.prototype,"length",{value:0,configurable:!1,writable:!0,enumerable:!0}),d.prototype.isOperational=!0;var m=0;d.prototype.toString=function(){var t=Array(4*m+1).join(" "),e="\n"+t+"AggregateError of:\n";m++,t=Array(4*m+1).join(" ");for(var n=0;n<this.length;++n){for(var r=this[n]===this?"[Circular AggregateError]":this[n]+"",i=r.split("\n"),o=0;o<i.length;++o)i[o]=t+i[o];r=i.join("\n"),e+=r+"\n"}return m--,e},l(i,Error);var g=Error.__BluebirdErrorTypes__;g||(g=u({CancellationError:p,TimeoutError:_,OperationalError:i,RejectionError:i,AggregateError:d}),h(Error,"__BluebirdErrorTypes__",g)),e.exports={Error:Error,TypeError:o,RangeError:s,CancellationError:g.CancellationError,OperationalError:g.OperationalError,TimeoutError:g.TimeoutError,AggregateError:g.AggregateError,Warning:f}},{"./es5":13,"./util":36}],13:[function(t,e,n){var r=function(){"use strict";return void 0===this}();if(r)e.exports={freeze:Object.freeze,defineProperty:Object.defineProperty,getDescriptor:Object.getOwnPropertyDescriptor,keys:Object.keys,names:Object.getOwnPropertyNames,getPrototypeOf:Object.getPrototypeOf,isArray:Array.isArray,isES5:r,propertyIsWritable:function(t,e){var n=Object.getOwnPropertyDescriptor(t,e);return!(n&&!n.writable&&!n.set)}};else{var i={}.hasOwnProperty,o={}.toString,s={}.constructor.prototype,a=function(t){var e=[];for(var n in t)i.call(t,n)&&e.push(n);return e},u=function(t,e){return{value:t[e]}},c=function(t,e,n){return t[e]=n.value,t},l=function(t){return t},h=function(t){try{return Object(t).constructor.prototype}catch(t){return s}},f=function(t){try{return"[object Array]"===o.call(t)}catch(t){return!1}};e.exports={isArray:f,keys:a,names:a,defineProperty:c,getDescriptor:u,freeze:l,getPrototypeOf:h,isES5:r,propertyIsWritable:function(){return!0}}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t,e){var n=t.map;t.prototype.filter=function(t,r){return n(this,t,r,e)},t.filter=function(t,r,i){return n(t,r,i,e)}}},{}],15:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t){this.finallyHandler=t}function i(t,e){return null!=t.cancelPromise?(arguments.length>1?t.cancelPromise._reject(e):t.cancelPromise._cancel(),t.cancelPromise=null,!0):!1}function o(){return a.call(this,this.promise._target()._settledValue())}function s(t){return i(this,t)?void 0:(l.e=t,l)}function a(t){var a=this.promise,u=this.handler;if(!this.called){this.called=!0;var h=0===this.type?u.call(a._boundValue()):u.call(a._boundValue(),t);if(void 0!==h){var f=n(h,a);if(f instanceof e){if(null!=this.cancelPromise){if(f.isCancelled()){var p=new c("late cancellation observer");return a._attachExtraTrace(p),l.e=p,l}f.isPending()&&f._attachCancellationCallback(new r(this))}return f._then(o,s,void 0,this,void 0)}}}return a.isRejected()?(i(this),l.e=t,l):(i(this),t)}var u=t("./util"),c=e.CancellationError,l=u.errorObj;return r.prototype._resultCancelled=function(){i(this.finallyHandler)},e.prototype._passThrough=function(t,e,n,r){return"function"!=typeof t?this.then():this._then(n,r,void 0,{promise:this,handler:t,called:!1,cancelPromise:null,type:e},void 0)},e.prototype.lastly=e.prototype.finally=function(t){return this._passThrough(t,0,a,a)},e.prototype.tap=function(t){return this._passThrough(t,1,a)},a}},{"./util":36}],16:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r){for(var o=0;o<n.length;++o){r._pushContext();var s=p(n[o])(t);if(r._popContext(),s===f){r._pushContext();var a=e.reject(f.e);return r._popContext(),a}var u=i(s,r);if(u instanceof e)return u}return null}function u(t,n,i,o){var s=this._promise=new e(r);s._captureStackTrace(),s._setOnCancel(this),this._stack=o,this._generatorFunction=t,this._receiver=n,this._generator=void 0,this._yieldHandlers="function"==typeof i?[i].concat(_):_,this._yieldedPromise=null}var c=t("./errors"),l=c.TypeError,h=t("./util"),f=h.errorObj,p=h.tryCatch,_=[];h.inherits(u,o),u.prototype._isResolved=function(){return null===this.promise},u.prototype._cleanup=function(){this._promise=this._generator=null},u.prototype._promiseCancelled=function(){if(!this._isResolved()){var t,n="undefined"!=typeof this._generator.return;if(n)this._promise._pushContext(),t=p(this._generator.return).call(this._generator,void 0),this._promise._popContext();else{var r=new e.CancellationError("generator .return() sentinel");e.coroutine.returnSentinel=r,this._promise._attachExtraTrace(r),this._promise._pushContext(),t=p(this._generator.throw).call(this._generator,r),this._promise._popContext(),t===f&&t.e===r&&(t=null)}var i=this._promise;this._cleanup(),t===f?i._rejectCallback(t.e,!1):i.cancel()}},u.prototype._promiseFulfilled=function(t){this._yieldedPromise=null,this._promise._pushContext();var e=p(this._generator.next).call(this._generator,t);this._promise._popContext(),this._continue(e)},u.prototype._promiseRejected=function(t){this._yieldedPromise=null,this._promise._attachExtraTrace(t),this._promise._pushContext();var e=p(this._generator.throw).call(this._generator,t);this._promise._popContext(),this._continue(e)},u.prototype._resultCancelled=function(){if(this._yieldedPromise instanceof e){var t=this._yieldedPromise;
this._yieldedPromise=null,t.cancel()}},u.prototype.promise=function(){return this._promise},u.prototype._run=function(){this._generator=this._generatorFunction.call(this._receiver),this._receiver=this._generatorFunction=void 0,this._promiseFulfilled(void 0)},u.prototype._continue=function(t){var n=this._promise;if(t===f)return this._cleanup(),n._rejectCallback(t.e,!1);var r=t.value;if(t.done===!0)return this._cleanup(),n._resolveCallback(r);var o=i(r,this._promise);if(!(o instanceof e)&&(o=a(o,this._yieldHandlers,this._promise),null===o))return void this._promiseRejected(new l("A value %s was yielded that could not be treated as a promise\n\n    See http://goo.gl/MqrFmX\n\n".replace("%s",r)+"From coroutine:\n"+this._stack.split("\n").slice(1,-7).join("\n")));o=o._target();var s=o._bitField;0===(50397184&s)?(this._yieldedPromise=o,o._proxy(this,null)):0!==(33554432&s)?this._promiseFulfilled(o._value()):0!==(16777216&s)?this._promiseRejected(o._reason()):this._promiseCancelled()},e.coroutine=function(t,e){if("function"!=typeof t)throw new l("generatorFunction must be a function\n\n    See http://goo.gl/MqrFmX\n");var n=Object(e).yieldHandler,r=u,i=(new Error).stack;return function(){var e=t.apply(this,arguments),o=new r(void 0,void 0,n,i),s=o.promise();return o._generator=e,o._promiseFulfilled(void 0),s}},e.coroutine.addYieldHandler=function(t){if("function"!=typeof t)throw new l("expecting a function but got "+h.classString(t));_.push(t)},e.spawn=function(t){if(s.deprecated("Promise.spawn()","Promise.coroutine()"),"function"!=typeof t)return n("generatorFunction must be a function\n\n    See http://goo.gl/MqrFmX\n");var r=new u(t,this),i=r.promise();return r._run(e.spawn),i}}},{"./errors":12,"./util":36}],17:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){var o=t("./util");o.canEvaluate,o.tryCatch,o.errorObj;e.join=function(){var t,e=arguments.length-1;if(e>0&&"function"==typeof arguments[e]){t=arguments[e];var r}var i=[].slice.call(arguments);t&&i.pop();var r=new n(i).promise();return void 0!==t?r.spread(t):r}}},{"./util":36}],18:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,e,n,r){this.constructor$(t),this._promise._captureStackTrace();var i=c();this._callback=null===i?e:i.bind(e),this._preservedValues=r===o?new Array(this.length()):null,this._limit=n,this._inFlight=0,this._queue=n>=1?[]:p,this._init$(void 0,-2)}function u(t,e,n,i){if("function"!=typeof e)return r("expecting a function but got "+l.classString(e));var o="object"==typeof n&&null!==n?n.concurrency:0;return o="number"==typeof o&&isFinite(o)&&o>=1?o:0,new a(t,e,o,i).promise()}var c=e._getDomain,l=t("./util"),h=l.tryCatch,f=l.errorObj,p=[];l.inherits(a,n),a.prototype._init=function(){},a.prototype._promiseFulfilled=function(t,n){var r=this._values,o=this.length(),a=this._preservedValues,u=this._limit;if(0>n){if(n=-1*n-1,r[n]=t,u>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(u>=1&&this._inFlight>=u)return r[n]=t,this._queue.push(n),!1;null!==a&&(a[n]=t);var c=this._promise,l=this._callback,p=c._boundValue();c._pushContext();var _=h(l).call(p,t,n,o),d=c._popContext();if(s.checkForgottenReturns(_,d,null!==a?"Promise.filter":"Promise.map",c),_===f)return this._reject(_.e),!0;var v=i(_,this._promise);if(v instanceof e){v=v._target();var y=v._bitField;if(0===(50397184&y))return u>=1&&this._inFlight++,r[n]=v,v._proxy(this,-1*(n+1)),!1;if(0===(33554432&y))return 0!==(16777216&y)?(this._reject(v._reason()),!0):(this._cancel(),!0);_=v._value()}r[n]=_}var m=++this._totalResolved;return m>=o?(null!==a?this._filter(r,a):this._resolve(r),!0):!1},a.prototype._drainQueue=function(){for(var t=this._queue,e=this._limit,n=this._values;t.length>0&&this._inFlight<e;){if(this._isResolved())return;var r=t.pop();this._promiseFulfilled(n[r],r)}},a.prototype._filter=function(t,e){for(var n=e.length,r=new Array(n),i=0,o=0;n>o;++o)t[o]&&(r[i++]=e[o]);r.length=i,this._resolve(r)},a.prototype.preservedValues=function(){return this._preservedValues},e.prototype.map=function(t,e){return u(this,t,e,null)},e.map=function(t,e,n,r){return u(t,e,n,r)}}},{"./util":36}],19:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){var s=t("./util"),a=s.tryCatch;e.method=function(t){if("function"!=typeof t)throw new e.TypeError("expecting a function but got "+s.classString(t));return function(){var r=new e(n);r._captureStackTrace(),r._pushContext();var i=a(t).apply(this,arguments);return r._popContext(),r._resolveFromSyncValue(i),r}},e.attempt=e.try=function(t){if("function"!=typeof t)return i("expecting a function but got "+s.classString(t));var r=new e(n);r._captureStackTrace(),r._pushContext();var u;if(arguments.length>1){o.deprecated("calling Promise.try with more than 1 argument");var c=arguments[1],l=arguments[2];u=s.isArray(c)?a(t).apply(l,c):a(t).call(l,c)}else u=a(t)();return r._popContext(),r._resolveFromSyncValue(u),r},e.prototype._resolveFromSyncValue=function(t){t===s.errorObj?this._rejectCallback(t.e,!1):this._resolveCallback(t,!0)}}},{"./util":36}],20:[function(t,e,n){"use strict";function r(t){return t instanceof Error&&l.getPrototypeOf(t)===Error.prototype}function i(t){var e;if(r(t)){e=new c(t),e.name=t.name,e.message=t.message,e.stack=t.stack;for(var n=l.keys(t),i=0;i<n.length;++i){var o=n[i];h.test(o)||(e[o]=t[o])}return e}return s.markAsOriginatingFromRejection(t),t}function o(t,e){return function(n,r){if(null!==t){if(n){var o=i(a(n));t._attachExtraTrace(o),t._reject(o)}else if(e){var s=[].slice.call(arguments,1);t._fulfill(s)}else t._fulfill(r);t=null}}}var s=t("./util"),a=s.maybeWrapAsError,u=t("./errors"),c=u.OperationalError,l=t("./es5"),h=/^(?:name|message|stack|cause)$/;e.exports=o},{"./errors":12,"./es5":13,"./util":36}],21:[function(t,e,n){"use strict";e.exports=function(e){function n(t,e){var n=this;if(!o.isArray(t))return r.call(n,t,e);var i=a(e).apply(n._boundValue(),[null].concat(t));i===u&&s.throwLater(i.e)}function r(t,e){var n=this,r=n._boundValue(),i=void 0===t?a(e).call(r,null):a(e).call(r,null,t);i===u&&s.throwLater(i.e)}function i(t,e){var n=this;if(!t){var r=new Error(t+"");r.cause=t,t=r}var i=a(e).call(n._boundValue(),t);i===u&&s.throwLater(i.e)}var o=t("./util"),s=e._async,a=o.tryCatch,u=o.errorObj;e.prototype.asCallback=e.prototype.nodeify=function(t,e){if("function"==typeof t){var o=r;void 0!==e&&Object(e).spread&&(o=n),this._then(o,i,void 0,this,t)}return this}}},{"./util":36}],22:[function(e,n,r){"use strict";n.exports=function(){function n(){}function r(t,e){if("function"!=typeof e)throw new m("expecting a function but got "+p.classString(e));if(t.constructor!==i)throw new m("the promise constructor cannot be invoked directly\n\n    See http://goo.gl/MqrFmX\n")}function i(t){this._bitField=0,this._fulfillmentHandler0=void 0,this._rejectionHandler0=void 0,this._promise0=void 0,this._receiver0=void 0,t!==b&&(r(this,t),this._resolveFromExecutor(t)),this._promiseCreated()}function o(t){this.promise._resolveCallback(t)}function s(t){this.promise._rejectCallback(t,!1)}function a(t){var e=new i(b);e._fulfillmentHandler0=t,e._rejectionHandler0=t,e._promise0=t,e._receiver0=t}var u,c=function(){return new m("circular promise resolution chain\n\n    See http://goo.gl/MqrFmX\n")},l=function(){return new i.PromiseInspection(this._target())},h=function(t){return i.reject(new m(t))},f={},p=e("./util");u=p.isNode?function(){var e=t.domain;return void 0===e&&(e=null),e}:function(){return null},p.notEnumerableProp(i,"_getDomain",u);var _=e("./es5"),d=e("./async"),v=new d;_.defineProperty(i,"_async",{value:v});var y=e("./errors"),m=i.TypeError=y.TypeError;i.RangeError=y.RangeError;var g=i.CancellationError=y.CancellationError;i.TimeoutError=y.TimeoutError,i.OperationalError=y.OperationalError,i.RejectionError=y.OperationalError,i.AggregateError=y.AggregateError;var b=function(){},w={},C={},j=e("./thenables")(i,b),F=e("./promise_array")(i,b,j,h,n),k=e("./context")(i),x=k.create,E=e("./debuggability")(i,k),T=(E.CapturedTrace,e("./finally")(i,j)),P=e("./catch_filter")(C),R=e("./nodeback"),A=p.errorObj,O=p.tryCatch;return i.prototype.toString=function(){return"[object Promise]"},i.prototype.caught=i.prototype.catch=function(t){var e=arguments.length;if(e>1){var n,r=new Array(e-1),i=0;for(n=0;e-1>n;++n){var o=arguments[n];if(!p.isObject(o))return h("expecting an object but got "+p.classString(o));r[i++]=o}return r.length=i,t=arguments[n],this.then(void 0,P(r,t,this))}return this.then(void 0,t)},i.prototype.reflect=function(){return this._then(l,l,void 0,this,void 0)},i.prototype.then=function(t,e){if(E.warnings()&&arguments.length>0&&"function"!=typeof t&&"function"!=typeof e){var n=".then() only accepts functions but was passed: "+p.classString(t);arguments.length>1&&(n+=", "+p.classString(e)),this._warn(n)}return this._then(t,e,void 0,void 0,void 0)},i.prototype.done=function(t,e){var n=this._then(t,e,void 0,void 0,void 0);n._setIsFinal()},i.prototype.spread=function(t){return"function"!=typeof t?h("expecting a function but got "+p.classString(t)):this.all()._then(t,void 0,void 0,w,void 0)},i.prototype.toJSON=function(){var t={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(t.fulfillmentValue=this.value(),t.isFulfilled=!0):this.isRejected()&&(t.rejectionReason=this.reason(),t.isRejected=!0),t},i.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new F(this).promise()},i.prototype.error=function(t){return this.caught(p.originatesFromRejection,t)},i.is=function(t){return t instanceof i},i.fromNode=i.fromCallback=function(t){var e=new i(b),n=arguments.length>1?!!Object(arguments[1]).multiArgs:!1,r=O(t)(R(e,n));return r===A&&e._rejectCallback(r.e,!0),e._isFateSealed()||e._setAsyncGuaranteed(),e},i.all=function(t){return new F(t).promise()},i.cast=function(t){var e=j(t);return e instanceof i||(e=new i(b),e._setFulfilled(),e._rejectionHandler0=t),e},i.resolve=i.fulfilled=i.cast,i.reject=i.rejected=function(t){var e=new i(b);return e._captureStackTrace(),e._rejectCallback(t,!0),e},i.setScheduler=function(t){if("function"!=typeof t)throw new m("expecting a function but got "+p.classString(t));var e=v._schedule;return v._schedule=t,e},i.prototype._then=function(t,e,n,r,o){var s=void 0!==o,a=s?o:new i(b),c=this._target(),l=c._bitField;s||(a._propagateFrom(this,3),a._captureStackTrace(),void 0===r&&0!==(2097152&this._bitField)&&(r=0!==(50397184&l)?this._boundValue():c===this?void 0:this._boundTo));var h=u();if(0!==(50397184&l)){var f,p,_=c._settlePromiseCtx;0!==(33554432&l)?(p=c._rejectionHandler0,f=t):0!==(16777216&l)?(p=c._fulfillmentHandler0,f=e,c._unsetRejectionIsUnhandled()):(_=c._settlePromiseLateCancellationObserver,p=new g("late cancellation observer"),c._attachExtraTrace(p),f=e),v.invoke(_,c,{handler:null===h?f:"function"==typeof f&&h.bind(f),promise:a,receiver:r,value:p})}else c._addCallbacks(t,e,a,r,h);return a},i.prototype._length=function(){return 65535&this._bitField},i.prototype._isFateSealed=function(){return 0!==(117506048&this._bitField)},i.prototype._isFollowing=function(){return 67108864===(67108864&this._bitField)},i.prototype._setLength=function(t){this._bitField=-65536&this._bitField|65535&t},i.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField},i.prototype._setRejected=function(){this._bitField=16777216|this._bitField},i.prototype._setFollowing=function(){this._bitField=67108864|this._bitField},i.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},i.prototype._isFinal=function(){return(4194304&this._bitField)>0},i.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},i.prototype._setCancelled=function(){this._bitField=65536|this._bitField},i.prototype._setAsyncGuaranteed=function(){this._bitField=134217728|this._bitField},i.prototype._receiverAt=function(t){var e=0===t?this._receiver0:this[4*t-4+3];return e===f?void 0:void 0===e&&this._isBound()?this._boundValue():e},i.prototype._promiseAt=function(t){return this[4*t-4+2]},i.prototype._fulfillmentHandlerAt=function(t){return this[4*t-4+0]},i.prototype._rejectionHandlerAt=function(t){return this[4*t-4+1]},i.prototype._boundValue=function(){},i.prototype._migrateCallback0=function(t){var e=(t._bitField,t._fulfillmentHandler0),n=t._rejectionHandler0,r=t._promise0,i=t._receiverAt(0);void 0===i&&(i=f),this._addCallbacks(e,n,r,i,null)},i.prototype._migrateCallbackAt=function(t,e){var n=t._fulfillmentHandlerAt(e),r=t._rejectionHandlerAt(e),i=t._promiseAt(e),o=t._receiverAt(e);void 0===o&&(o=f),this._addCallbacks(n,r,i,o,null)},i.prototype._addCallbacks=function(t,e,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof t&&(this._fulfillmentHandler0=null===i?t:i.bind(t)),"function"==typeof e&&(this._rejectionHandler0=null===i?e:i.bind(e));else{var s=4*o-4;this[s+2]=n,this[s+3]=r,"function"==typeof t&&(this[s+0]=null===i?t:i.bind(t)),"function"==typeof e&&(this[s+1]=null===i?e:i.bind(e))}return this._setLength(o+1),o},i.prototype._proxy=function(t,e){this._addCallbacks(void 0,void 0,e,t,null)},i.prototype._resolveCallback=function(t,e){if(0===(117506048&this._bitField)){if(t===this)return this._rejectCallback(c(),!1);var n=j(t,this);if(!(n instanceof i))return this._fulfill(t);e&&this._propagateFrom(n,2);var r=n._target(),o=r._bitField;if(0===(50397184&o)){var s=this._length();s>0&&r._migrateCallback0(this);for(var a=1;s>a;++a)r._migrateCallbackAt(this,a);this._setFollowing(),this._setLength(0),this._setFollowee(r)}else if(0!==(33554432&o))this._fulfill(r._value());else if(0!==(16777216&o))this._reject(r._reason());else{var u=new g("late cancellation observer");r._attachExtraTrace(u),this._reject(u)}}},i.prototype._rejectCallback=function(t,e){var n=p.ensureErrorObject(t),r=n===t;if(!r&&E.warnings()){var i="a promise was rejected with a non-error: "+p.classString(t);this._warn(i,!0)}this._attachExtraTrace(n,e?r:!1),this._reject(t)},i.prototype._resolveFromExecutor=function(t){var e=this;this._captureStackTrace(),this._pushContext();var n=!0,r=this._execute(t,function(t){e._resolveCallback(t)},function(t){e._rejectCallback(t,n)});n=!1,this._popContext(),void 0!==r&&e._rejectCallback(r,!0)},i.prototype._settlePromiseFromHandler=function(t,e,n,r){var i=r._bitField;if(0===(65536&i)){r._pushContext();var o;e===w?n&&"number"==typeof n.length?o=O(t).apply(this._boundValue(),n):(o=A,o.e=new m("cannot .spread() a non-array: "+p.classString(n))):o=O(t).call(e,n);var s=r._popContext();if(i=r._bitField,0===(65536&i))if(o===C)r._reject(n);else if(o===A||o===r){var a=o===r?c():o.e;r._rejectCallback(a,!1)}else void 0===o&&s>0&&E.longStackTraces()&&E.warnings()&&r._warn("a promise was created in a handler but none were returned from it",!0),r._resolveCallback(o)}},i.prototype._target=function(){for(var t=this;t._isFollowing();)t=t._followee();return t},i.prototype._followee=function(){return this._rejectionHandler0},i.prototype._setFollowee=function(t){this._rejectionHandler0=t},i.prototype._settlePromise=function(t,e,r,o){var s=t instanceof i,a=this._bitField,u=0!==(134217728&a);0!==(65536&a)?(s&&t._invokeInternalOnCancel(),e===T?(r.cancelPromise=t,O(e).call(r,o)===A&&t._reject(A.e)):e===l?t._fulfill(l.call(r)):r instanceof n?r._promiseCancelled(t):s||t instanceof F?t._cancel():r.cancel()):"function"==typeof e?s?(u&&t._setAsyncGuaranteed(),this._settlePromiseFromHandler(e,r,o,t)):e.call(r,o,t):r instanceof n?r._isResolved()||(0!==(33554432&a)?r._promiseFulfilled(o,t):r._promiseRejected(o,t)):s&&(u&&t._setAsyncGuaranteed(),0!==(33554432&a)?t._fulfill(o):t._reject(o))},i.prototype._settlePromiseLateCancellationObserver=function(t){var e=t.handler,n=t.promise,r=t.receiver,o=t.value;"function"==typeof e?n instanceof i?this._settlePromiseFromHandler(e,r,o,n):e.call(r,o,n):n instanceof i&&n._reject(o)},i.prototype._settlePromiseCtx=function(t){this._settlePromise(t.promise,t.handler,t.receiver,t.value)},i.prototype._settlePromise0=function(t,e,n){var r=this._promise0,i=this._receiverAt(0);this._promise0=void 0,this._receiver0=void 0,this._settlePromise(r,t,i,e)},i.prototype._clearCallbackDataAtIndex=function(t){var e=4*t-4;this[e+2]=this[e+3]=this[e+0]=this[e+1]=void 0},i.prototype._fulfill=function(t){var e=this._bitField;if(!((117506048&e)>>>16)){if(t===this){var n=c();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=t,(65535&e)>0&&(0!==(134217728&e)?this._settlePromises():v.settlePromises(this))}},i.prototype._reject=function(t){var e=this._bitField;if(!((117506048&e)>>>16))return this._setRejected(),this._fulfillmentHandler0=t,this._isFinal()?v.fatalError(t,p.isNode):void((65535&e)>0?0!==(134217728&e)?this._settlePromises():v.settlePromises(this):this._ensurePossibleRejectionHandled())},i.prototype._fulfillPromises=function(t,e){for(var n=1;t>n;n++){var r=this._fulfillmentHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._rejectPromises=function(t,e){for(var n=1;t>n;n++){var r=this._rejectionHandlerAt(n),i=this._promiseAt(n),o=this._receiverAt(n);this._clearCallbackDataAtIndex(n),this._settlePromise(i,r,o,e)}},i.prototype._settlePromises=function(){var t=this._bitField,e=65535&t;if(e>0){if(0!==(16842752&t)){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,t),this._rejectPromises(e,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,t),this._fulfillPromises(e,r)}this._setLength(0)}this._clearCancellationData()},i.prototype._settledValue=function(){var t=this._bitField;return 0!==(33554432&t)?this._rejectionHandler0:0!==(16777216&t)?this._fulfillmentHandler0:void 0},i.defer=i.pending=function(){E.deprecated("Promise.defer","new Promise");var t=new i(b);return{promise:t,resolve:o,reject:s}},p.notEnumerableProp(i,"_makeSelfResolutionError",c),e("./method")(i,b,j,h,E),e("./bind")(i,b,j,E),e("./cancel")(i,F,h,E),e("./direct_resolve")(i),e("./synchronous_inspection")(i),e("./join")(i,F,j,b,E),i.Promise=i,e("./map.js")(i,F,h,j,b,E),e("./using.js")(i,h,j,x,b,E),e("./timers.js")(i,b),e("./generators.js")(i,h,b,j,n,E),e("./nodeify.js")(i),e("./call_get.js")(i),e("./props.js")(i,F,j,h),e("./race.js")(i,b,j,h),e("./reduce.js")(i,F,h,j,b,E),e("./settle.js")(i,F,E),e("./some.js")(i,F,h),e("./promisify.js")(i,b),e("./any.js")(i),e("./each.js")(i,b),e("./filter.js")(i,b),p.toFastProperties(i),p.toFastProperties(i.prototype),a({a:1}),a({b:2}),a({c:3}),a(1),a(function(){}),a(void 0),a(!1),a(new i(b)),E.setBounds(d.firstLineError,p.lastLineError),i}},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o){function s(t){switch(t){case-2:return[];case-3:return{}}}function a(t){var r=this._promise=new e(n);t instanceof e&&r._propagateFrom(t,3),r._setOnCancel(this),this._values=t,this._length=0,this._totalResolved=0,this._init(void 0,-2)}var u=t("./util");u.isArray;return u.inherits(a,o),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function t(n,o){var a=r(this._values,this._promise);if(a instanceof e){a=a._target();var c=a._bitField;if(this._values=a,0===(50397184&c))return this._promise._setAsyncGuaranteed(),a._then(t,this._reject,void 0,this,o);if(0===(33554432&c))return 0!==(16777216&c)?this._reject(a._reason()):this._cancel();a=a._value()}if(a=u.asArray(a),null===a){var l=i("expecting an array or an iterable object but got "+u.classString(a)).reason();return void this._promise._rejectCallback(l,!1)}return 0===a.length?void(-5===o?this._resolveEmptyArray():this._resolve(s(o))):void this._iterate(a)},a.prototype._iterate=function(t){var n=this.getActualLength(t.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,s=null,a=0;n>a;++a){var u=r(t[a],i);u instanceof e?(u=u._target(),s=u._bitField):s=null,o?null!==s&&u.suppressUnhandledRejections():null!==s?0===(50397184&s)?(u._proxy(this,a),this._values[a]=u):o=0!==(33554432&s)?this._promiseFulfilled(u._value(),a):0!==(16777216&s)?this._promiseRejected(u._reason(),a):this._promiseCancelled(a):o=this._promiseFulfilled(u,a)}o||i._setAsyncGuaranteed()},a.prototype._isResolved=function(){return null===this._values},a.prototype._resolve=function(t){this._values=null,this._promise._fulfill(t)},a.prototype._cancel=function(){!this._isResolved()&&this._promise.isCancellable()&&(this._values=null,this._promise._cancel())},a.prototype._reject=function(t){this._values=null,this._promise._rejectCallback(t,!1)},a.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(t){return this._totalResolved++,this._reject(t),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var t=this._values;if(this._cancel(),t instanceof e)t.cancel();else for(var n=0;n<t.length;++n)t[n]instanceof e&&t[n].cancel()}},a.prototype.shouldCopyValues=function(){return!0},a.prototype.getActualLength=function(t){return t},a}},{"./util":36}],24:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t){return!C.test(t)}function i(t){try{return t.__isPromisified__===!0}catch(t){return!1}}function o(t,e,n){var r=p.getDataPropertyOrDefault(t,e+n,b);return r?i(r):!1}function s(t,e,n){for(var r=0;r<t.length;r+=2){var i=t[r];if(n.test(i))for(var o=i.replace(n,""),s=0;s<t.length;s+=2)if(t[s]===o)throw new m("Cannot promisify an API that has normal methods with '%s'-suffix\n\n    See http://goo.gl/MqrFmX\n".replace("%s",e))}}function a(t,e,n,r){for(var a=p.inheritedDataKeys(t),u=[],c=0;c<a.length;++c){var l=a[c],h=t[l],f=r===j?!0:j(l,h,t);"function"!=typeof h||i(h)||o(t,l,e)||!r(l,h,t,f)||u.push(l,h)}return s(u,e,n),u}function u(t,r,i,o,s,a){function u(){var i=r;r===f&&(i=this);var o=new e(n);o._captureStackTrace();var s="string"==typeof l&&this!==c?this[l]:t,u=_(o,a);try{s.apply(i,d(arguments,u))}catch(t){o._rejectCallback(v(t),!0)}return o._isFateSealed()||o._setAsyncGuaranteed(),o}var c=function(){return this}(),l=t;return"string"==typeof l&&(t=o),p.notEnumerableProp(u,"__isPromisified__",!0),u}function c(t,e,n,r,i){for(var o=new RegExp(F(e)+"$"),s=a(t,e,o,n),u=0,c=s.length;c>u;u+=2){var l=s[u],h=s[u+1],_=l+e;if(r===k)t[_]=k(l,f,l,h,e,i);else{var d=r(h,function(){return k(l,f,l,h,e,i)});p.notEnumerableProp(d,"__isPromisified__",!0),t[_]=d}}return p.toFastProperties(t),t}function l(t,e,n){return k(t,e,void 0,t,null,n)}var h,f={},p=t("./util"),_=t("./nodeback"),d=p.withAppended,v=p.maybeWrapAsError,y=p.canEvaluate,m=t("./errors").TypeError,g="Async",b={__isPromisified__:!0},w=["arity","length","name","arguments","caller","callee","prototype","__isPromisified__"],C=new RegExp("^(?:"+w.join("|")+")$"),j=function(t){return p.isIdentifier(t)&&"_"!==t.charAt(0)&&"constructor"!==t},F=function(t){return t.replace(/([$])/,"\\$")},k=y?h:u;e.promisify=function(t,e){if("function"!=typeof t)throw new m("expecting a function but got "+p.classString(t));if(i(t))return t;e=Object(e);var n=void 0===e.context?f:e.context,o=!!e.multiArgs,s=l(t,n,o);return p.copyDescriptors(t,s,r),s},e.promisifyAll=function(t,e){if("function"!=typeof t&&"object"!=typeof t)throw new m("the target of promisifyAll must be an object or a function\n\n    See http://goo.gl/MqrFmX\n");e=Object(e);var n=!!e.multiArgs,r=e.suffix;"string"!=typeof r&&(r=g);var i=e.filter;"function"!=typeof i&&(i=j);var o=e.promisifier;if("function"!=typeof o&&(o=k),!p.isIdentifier(r))throw new RangeError("suffix must be a valid identifier\n\n    See http://goo.gl/MqrFmX\n");for(var s=p.inheritedDataKeys(t),a=0;a<s.length;++a){var u=t[s[a]];"constructor"!==s[a]&&p.isClass(u)&&(c(u.prototype,r,i,o,n),c(u,r,i,o,n))}return c(t,r,i,o,n)}}},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){function o(t){var e,n=!1;if(void 0!==a&&t instanceof a)e=h(t),n=!0;else{var r=l.keys(t),i=r.length;e=new Array(2*i);for(var o=0;i>o;++o){var s=r[o];e[o]=t[s],e[o+i]=s}}this.constructor$(e),this._isMap=n,this._init$(void 0,-3)}function s(t){var n,s=r(t);return c(s)?(n=s instanceof e?s._then(e.props,void 0,void 0,void 0,void 0):new o(s).promise(),s instanceof e&&n._propagateFrom(s,2),n):i("cannot await properties of a non-object\n\n    See http://goo.gl/MqrFmX\n")}var a,u=t("./util"),c=u.isObject,l=t("./es5");"function"==typeof Map&&(a=Map);var h=function(){function t(t,r){this[e]=t,this[e+n]=r,e++}var e=0,n=0;return function(r){n=r.size,e=0;var i=new Array(2*r.size);return r.forEach(t,i),i}}(),f=function(t){for(var e=new a,n=t.length/2|0,r=0;n>r;++r){var i=t[n+r],o=t[r];e.set(i,o)}return e};u.inherits(o,n),o.prototype._init=function(){},o.prototype._promiseFulfilled=function(t,e){this._values[e]=t;var n=++this._totalResolved;if(n>=this._length){var r;if(this._isMap)r=f(this._values);else{r={};for(var i=this.length(),o=0,s=this.length();s>o;++o)r[this._values[o+i]]=this._values[o]}return this._resolve(r),!0}return!1},o.prototype.shouldCopyValues=function(){return!1},o.prototype.getActualLength=function(t){return t>>1},e.prototype.props=function(){return s(this)},e.props=function(t){return s(t)}}},{"./es5":13,"./util":36}],26:[function(t,e,n){"use strict";function r(t,e,n,r,i){for(var o=0;i>o;++o)n[o+r]=t[o+e],t[o+e]=void 0}function i(t){this._capacity=t,this._length=0,this._front=0}i.prototype._willBeOverCapacity=function(t){return this._capacity<t},i.prototype._pushOne=function(t){var e=this.length();this._checkCapacity(e+1);var n=this._front+e&this._capacity-1;this[n]=t,this._length=e+1},i.prototype._unshiftOne=function(t){var e=this._capacity;this._checkCapacity(this.length()+1);var n=this._front,r=(n-1&e-1^e)-e;this[r]=t,this._front=r,this._length=this.length()+1},i.prototype.unshift=function(t,e,n){this._unshiftOne(n),this._unshiftOne(e),this._unshiftOne(t)},i.prototype.push=function(t,e,n){var r=this.length()+3;if(this._willBeOverCapacity(r))return this._pushOne(t),this._pushOne(e),void this._pushOne(n);var i=this._front+r-3;this._checkCapacity(r);var o=this._capacity-1;this[i+0&o]=t,this[i+1&o]=e,this[i+2&o]=n,this._length=r},i.prototype.shift=function(){var t=this._front,e=this[t];return this[t]=void 0,this._front=t+1&this._capacity-1,this._length--,e},i.prototype.length=function(){return this._length},i.prototype._checkCapacity=function(t){this._capacity<t&&this._resizeTo(this._capacity<<1)},i.prototype._resizeTo=function(t){var e=this._capacity;this._capacity=t;var n=this._front,i=this._length,o=n+i&e-1;r(this,0,this,e,o)},e.exports=i},{}],27:[function(t,e,n){"use strict";e.exports=function(e,n,r,i){function o(t,o){var u=r(t);if(u instanceof e)return a(u);if(t=s.asArray(t),null===t)return i("expecting an array or an iterable object but got "+s.classString(t));var c=new e(n);void 0!==o&&c._propagateFrom(o,3);for(var l=c._fulfill,h=c._reject,f=0,p=t.length;p>f;++f){var _=t[f];(void 0!==_||f in t)&&e.cast(_)._then(l,h,void 0,c,null)}return c}var s=t("./util"),a=function(t){return t.then(function(e){return o(e,t)})};e.race=function(t){return o(t,void 0)},e.prototype.race=function(){return o(this,void 0)}}},{"./util":36}],28:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t,n,r,i){this.constructor$(t);var s=f();this._fn=null===s?n:s.bind(n),void 0!==r&&(r=e.resolve(r),r._attachCancellationCallback(this)),this._initialValue=r,this._currentCancellable=null,this._eachValues=i===o?[]:void 0,this._promise._captureStackTrace(),this._init$(void 0,-5)}function u(t,e){this.isFulfilled()?e._resolve(t):e._reject(t)}function c(t,e,n,i){if("function"!=typeof e)return r("expecting a function but got "+p.classString(e));var o=new a(t,e,n,i);return o.promise()}function l(t){this.accum=t,this.array._gotAccum(t);var n=i(this.value,this.array._promise);return n instanceof e?(this.array._currentCancellable=n,n._then(h,void 0,void 0,this,void 0)):h.call(this,n)}function h(t){var n=this.array,r=n._promise,i=_(n._fn);r._pushContext();var o;o=void 0!==n._eachValues?i.call(r._boundValue(),t,this.index,this.length):i.call(r._boundValue(),this.accum,t,this.index,this.length),o instanceof e&&(n._currentCancellable=o);var a=r._popContext();return s.checkForgottenReturns(o,a,void 0!==n._eachValues?"Promise.each":"Promise.reduce",r),o}var f=e._getDomain,p=t("./util"),_=p.tryCatch;p.inherits(a,n),a.prototype._gotAccum=function(t){void 0!==this._eachValues&&t!==o&&this._eachValues.push(t)},a.prototype._eachComplete=function(t){return this._eachValues.push(t),this._eachValues},a.prototype._init=function(){},a.prototype._resolveEmptyArray=function(){this._resolve(void 0!==this._eachValues?this._eachValues:this._initialValue)},a.prototype.shouldCopyValues=function(){return!1},a.prototype._resolve=function(t){this._promise._resolveCallback(t),this._values=null},a.prototype._resultCancelled=function(t){return t===this._initialValue?this._cancel():void(this._isResolved()||(this._resultCancelled$(),this._currentCancellable instanceof e&&this._currentCancellable.cancel(),this._initialValue instanceof e&&this._initialValue.cancel()))},a.prototype._iterate=function(t){this._values=t;var n,r,i=t.length;if(void 0!==this._initialValue?(n=this._initialValue,r=0):(n=e.resolve(t[0]),r=1),this._currentCancellable=n,!n.isRejected())for(;i>r;++r){var o={accum:null,value:t[r],index:r,length:i,array:this};n=n._then(l,void 0,void 0,o,void 0)}void 0!==this._eachValues&&(n=n._then(this._eachComplete,void 0,void 0,this,void 0)),n._then(u,u,void 0,n,this)},e.prototype.reduce=function(t,e){return c(this,t,e,null)},e.reduce=function(t,e,n,r){return c(t,e,n,r)}}},{"./util":36}],29:[function(e,n,i){"use strict";var o,s=e("./util"),a=function(){throw new Error("No async scheduler available\n\n    See http://goo.gl/MqrFmX\n")};if(s.isNode&&"undefined"==typeof MutationObserver){var u=r.setImmediate,c=t.nextTick;o=s.isRecentNode?function(t){u.call(r,t)}:function(e){c.call(t,e)}}else"undefined"==typeof MutationObserver||"undefined"!=typeof window&&window.navigator&&window.navigator.standalone?o="undefined"!=typeof setImmediate?function(t){setImmediate(t)}:"undefined"!=typeof setTimeout?function(t){setTimeout(t,0)}:a:(o=function(t){var e=document.createElement("div"),n=new MutationObserver(t);return n.observe(e,{attributes:!0}),function(){e.classList.toggle("foo")}},o.isStatic=!0);n.exports=o},{"./util":36}],30:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t)}var o=e.PromiseInspection,s=t("./util");s.inherits(i,n),i.prototype._promiseResolved=function(t,e){this._values[t]=e;var n=++this._totalResolved;return n>=this._length?(this._resolve(this._values),!0):!1},i.prototype._promiseFulfilled=function(t,e){var n=new o;return n._bitField=33554432,n._settledValueField=t,this._promiseResolved(e,n)},i.prototype._promiseRejected=function(t,e){var n=new o;return n._bitField=16777216,n._settledValueField=t,this._promiseResolved(e,n)},e.settle=function(t){return r.deprecated(".settle()",".reflect()"),new i(t).promise()},e.prototype.settle=function(){return e.settle(this)}}},{"./util":36}],31:[function(t,e,n){"use strict";e.exports=function(e,n,r){function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this._initialized=!1}function o(t,e){if((0|e)!==e||0>e)return r("expecting a positive integer\n\n    See http://goo.gl/MqrFmX\n");
var n=new i(t),o=n.promise();return n.setHowMany(e),n.init(),o}var s=t("./util"),a=t("./errors").RangeError,u=t("./errors").AggregateError,c=s.isArray,l={};s.inherits(i,n),i.prototype._init=function(){if(this._initialized){if(0===this._howMany)return void this._resolve([]);this._init$(void 0,-5);var t=c(this._values);!this._isResolved()&&t&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}},i.prototype.init=function(){this._initialized=!0,this._init()},i.prototype.setUnwrap=function(){this._unwrap=!0},i.prototype.howMany=function(){return this._howMany},i.prototype.setHowMany=function(t){this._howMany=t},i.prototype._promiseFulfilled=function(t){return this._addFulfilled(t),this._fulfilled()===this.howMany()?(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0):!1},i.prototype._promiseRejected=function(t){return this._addRejected(t),this._checkOutcome()},i.prototype._promiseCancelled=function(){return this._values instanceof e||null==this._values?this._cancel():(this._addRejected(l),this._checkOutcome())},i.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var t=new u,e=this.length();e<this._values.length;++e)this._values[e]!==l&&t.push(this._values[e]);return t.length>0?this._reject(t):this._cancel(),!0}return!1},i.prototype._fulfilled=function(){return this._totalResolved},i.prototype._rejected=function(){return this._values.length-this.length()},i.prototype._addRejected=function(t){this._values.push(t)},i.prototype._addFulfilled=function(t){this._values[this._totalResolved++]=t},i.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},i.prototype._getRangeError=function(t){var e="Input array must contain at least "+this._howMany+" items but contains only "+t+" items";return new a(e)},i.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},e.some=function(t,e){return o(t,e)},e.prototype.some=function(t){return o(this,t)},e._SomePromiseArray=i}},{"./errors":12,"./util":36}],32:[function(t,e,n){"use strict";e.exports=function(t){function e(t){void 0!==t?(t=t._target(),this._bitField=t._bitField,this._settledValueField=t._isFateSealed()?t._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}e.prototype._settledValue=function(){return this._settledValueField};var n=e.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n    See http://goo.gl/MqrFmX\n");return this._settledValue()},r=e.prototype.error=e.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n    See http://goo.gl/MqrFmX\n");return this._settledValue()},i=e.prototype.isFulfilled=function(){return 0!==(33554432&this._bitField)},o=e.prototype.isRejected=function(){return 0!==(16777216&this._bitField)},s=e.prototype.isPending=function(){return 0===(50397184&this._bitField)},a=e.prototype.isResolved=function(){return 0!==(50331648&this._bitField)};e.prototype.isCancelled=t.prototype._isCancelled=function(){return 65536===(65536&this._bitField)},t.prototype.isCancelled=function(){return this._target()._isCancelled()},t.prototype.isPending=function(){return s.call(this._target())},t.prototype.isRejected=function(){return o.call(this._target())},t.prototype.isFulfilled=function(){return i.call(this._target())},t.prototype.isResolved=function(){return a.call(this._target())},t.prototype.value=function(){return n.call(this._target())},t.prototype.reason=function(){var t=this._target();return t._unsetRejectionIsUnhandled(),r.call(t)},t.prototype._value=function(){return this._settledValue()},t.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},t.PromiseInspection=e}},{}],33:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t,r){if(l(t)){if(t instanceof e)return t;var i=o(t);if(i===c){r&&r._pushContext();var u=e.reject(i.e);return r&&r._popContext(),u}if("function"==typeof i){if(s(t)){var u=new e(n);return t._then(u._fulfill,u._reject,void 0,u,null),u}return a(t,i,r)}}return t}function i(t){return t.then}function o(t){try{return i(t)}catch(t){return c.e=t,c}}function s(t){return h.call(t,"_promise0")}function a(t,r,i){function o(t){a&&(a._resolveCallback(t),a=null)}function s(t){a&&(a._rejectCallback(t,h),a=null)}var a=new e(n),l=a;i&&i._pushContext(),a._captureStackTrace(),i&&i._popContext();var h=!0,f=u.tryCatch(r).call(t,o,s);return h=!1,a&&f===c&&(a._rejectCallback(f.e,!0),a=null),l}var u=t("./util"),c=u.errorObj,l=u.isObject,h={}.hasOwnProperty;return r}},{"./util":36}],34:[function(t,e,n){"use strict";e.exports=function(e,n){function r(t){var e=this;return e instanceof Number&&(e=+e),clearTimeout(e),t}function i(t){var e=this;throw e instanceof Number&&(e=+e),clearTimeout(e),t}var o=t("./util"),s=e.TimeoutError,a=function(t,e){if(t.isPending()){var n;n="string"!=typeof e?e instanceof Error?e:new s("operation timed out"):new s(e),o.markAsOriginatingFromRejection(n),t._attachExtraTrace(n),t._reject(n)}},u=function(t){return c(+this).thenReturn(t)},c=e.delay=function(t,r){var i;return void 0!==r?i=e.resolve(r)._then(u,null,null,t,void 0):(i=new e(n),setTimeout(function(){i._fulfill()},+t)),i._setAsyncGuaranteed(),i};e.prototype.delay=function(t){return c(t,this)},e.prototype.timeout=function(t,e){t=+t;var n=this.then(),o=setTimeout(function(){a(n,e)},t);return n._then(r,i,void 0,o,void 0)}}},{"./util":36}],35:[function(t,e,n){"use strict";e.exports=function(e,n,r,i,o,s){function a(t){setTimeout(function(){throw t},0)}function u(t){var e=r(t);return e!==t&&"function"==typeof t._isDisposable&&"function"==typeof t._getDisposer&&t._isDisposable()&&e._setDisposable(t._getDisposer()),e}function c(t,n){function i(){if(s>=c)return l._fulfill();var o=u(t[s++]);if(o instanceof e&&o._isDisposable()){try{o=r(o._getDisposer().tryDispose(n),t.promise)}catch(t){return a(t)}if(o instanceof e)return o._then(i,a,null,null,null)}i()}var s=0,c=t.length,l=new e(o);return i(),l}function l(t,e,n){this._data=t,this._promise=e,this._context=n}function h(t,e,n){this.constructor$(t,e,n)}function f(t){return l.isDisposer(t)?(this.resources[this.index]._setDisposable(t),t.promise()):t}function p(t){this.length=t,this.promise=null,this[t-1]=null}var _=t("./util"),d=t("./errors").TypeError,v=t("./util").inherits,y=_.errorObj,m=_.tryCatch;l.prototype.data=function(){return this._data},l.prototype.promise=function(){return this._promise},l.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():null},l.prototype.tryDispose=function(t){var e=this.resource(),n=this._context;void 0!==n&&n._pushContext();var r=null!==e?this.doDispose(e,t):null;return void 0!==n&&n._popContext(),this._promise._unsetDisposable(),this._data=null,r},l.isDisposer=function(t){return null!=t&&"function"==typeof t.resource&&"function"==typeof t.tryDispose},v(h,l),h.prototype.doDispose=function(t,e){var n=this.data();return n.call(t,t,e)},p.prototype._resultCancelled=function(){for(var t=this.length,n=0;t>n;++n){var r=this[n];r instanceof e&&r.cancel()}},e.using=function(){var t=arguments.length;if(2>t)return n("you must pass at least 2 arguments to Promise.using");var i=arguments[t-1];if("function"!=typeof i)return n("expecting a function but got "+_.classString(i));var o,a=!0;2===t&&Array.isArray(arguments[0])?(o=arguments[0],t=o.length,a=!1):(o=arguments,t--);for(var u=new p(t),h=0;t>h;++h){var d=o[h];if(l.isDisposer(d)){var v=d;d=d.promise(),d._setDisposable(v)}else{var g=r(d);g instanceof e&&(d=g._then(f,null,null,{resources:u,index:h},void 0))}u[h]=d}for(var b=new Array(u.length),h=0;h<b.length;++h)b[h]=e.resolve(u[h]).reflect();var w=e.all(b).then(function(t){for(var e=0;e<t.length;++e){var n=t[e];if(n.isRejected())return y.e=n.error(),y;if(!n.isFulfilled())return void w.cancel();t[e]=n.value()}C._pushContext(),i=m(i);var r=a?i.apply(void 0,t):i(t),o=C._popContext();return s.checkForgottenReturns(r,o,"Promise.using",C),r}),C=w.lastly(function(){var t=new e.PromiseInspection(w);return c(u,t)});return u.promise=C,C._setOnCancel(u),C},e.prototype._setDisposable=function(t){this._bitField=131072|this._bitField,this._disposer=t},e.prototype._isDisposable=function(){return(131072&this._bitField)>0},e.prototype._getDisposer=function(){return this._disposer},e.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},e.prototype.disposer=function(t){if("function"==typeof t)return new h(t,this,i());throw new d}}},{"./errors":12,"./util":36}],36:[function(e,n,r){"use strict";function i(){try{var t=E;return E=null,t.apply(this,arguments)}catch(t){return x.e=t,x}}function o(t){return E=t,i}function s(t){return null==t||t===!0||t===!1||"string"==typeof t||"number"==typeof t}function a(t){return"function"==typeof t||"object"==typeof t&&null!==t}function u(t){return s(t)?new Error(y(t)):t}function c(t,e){var n,r=t.length,i=new Array(r+1);for(n=0;r>n;++n)i[n]=t[n];return i[n]=e,i}function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:void 0;var r=Object.getOwnPropertyDescriptor(t,e);return null!=r?null==r.get&&null==r.set?r.value:n:void 0}function h(t,e,n){if(s(t))return t;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return F.defineProperty(t,e,r),t}function f(t){throw t}function p(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=F.isES5&&e.length>1,r=e.length>0&&!(1===e.length&&"constructor"===e[0]),i=R.test(t+"")&&F.names(t).length>0;if(n||r||i)return!0}return!1}catch(t){return!1}}function _(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}function d(t){return A.test(t)}function v(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}function y(t){try{return t+""}catch(t){return"[no string representation]"}}function m(t){try{h(t,"isOperational",!0)}catch(t){}}function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes__.OperationalError||t.isOperational===!0}function b(t){return t instanceof Error&&F.propertyIsWritable(t,"stack")}function w(t){return{}.toString.call(t)}function C(t,e,n){for(var r=F.names(t),i=0;i<r.length;++i){var o=r[i];if(n(o))try{F.defineProperty(e,o,F.getDescriptor(t,o))}catch(t){}}}function j(e,n){return D?t.env[e]:n}var F=e("./es5"),k="undefined"==typeof navigator,x={e:{}},E,T=function(t,e){function n(){this.constructor=t,this.constructor$=e;for(var n in e.prototype)r.call(e.prototype,n)&&"$"!==n.charAt(n.length-1)&&(this[n+"$"]=e.prototype[n])}var r={}.hasOwnProperty;return n.prototype=e.prototype,t.prototype=new n,t.prototype},P=function(){var t=[Array.prototype,Object.prototype,Function.prototype],e=function(e){for(var n=0;n<t.length;++n)if(t[n]===e)return!0;return!1};if(F.isES5){var n=Object.getOwnPropertyNames;return function(t){for(var r=[],i=Object.create(null);null!=t&&!e(t);){var o;try{o=n(t)}catch(t){return r}for(var s=0;s<o.length;++s){var a=o[s];if(!i[a]){i[a]=!0;var u=Object.getOwnPropertyDescriptor(t,a);null!=u&&null==u.get&&null==u.set&&r.push(a)}}t=F.getPrototypeOf(t)}return r}}var r={}.hasOwnProperty;return function(n){if(e(n))return[];var i=[];t:for(var o in n)if(r.call(n,o))i.push(o);else{for(var s=0;s<t.length;++s)if(r.call(t[s],o))continue t;i.push(o)}return i}}(),R=/this\s*\.\s*\S+\s*=/,A=/^[a-z$_][a-z$_0-9]*$/i,O=function(){return"stack"in new Error?function(t){return b(t)?t:new Error(y(t))}:function(t){if(b(t))return t;try{throw new Error(y(t))}catch(t){return t}}}(),S=function(t){return F.isArray(t)?t:null};if("undefined"!=typeof Symbol&&Symbol.iterator){var I="function"==typeof Array.from?function(t){return Array.from(t)}:function(t){for(var e,n=[],r=t[Symbol.iterator]();!(e=r.next()).done;)n.push(e.value);return n};S=function(t){return F.isArray(t)?t:null!=t&&"function"==typeof t[Symbol.iterator]?I(t):null}}var D="undefined"!=typeof t&&"[object process]"===w(t).toLowerCase(),V={isClass:p,isIdentifier:d,inheritedDataKeys:P,getDataPropertyOrDefault:l,thrower:f,isArray:F.isArray,asArray:S,notEnumerableProp:h,isPrimitive:s,isObject:a,canEvaluate:k,errorObj:x,tryCatch:o,inherits:T,withAppended:c,maybeWrapAsError:u,toFastProperties:_,filledRange:v,toString:y,canAttachTrace:b,ensureErrorObject:O,originatesFromRejection:g,markAsOriginatingFromRejection:m,classString:w,copyDescriptors:C,hasDevTools:"undefined"!=typeof chrome&&chrome&&"function"==typeof chrome.loadTimes,isNode:D,env:j};V.isRecentNode=V.isNode&&function(){var e=t.versions.node.split(".").map(Number);return 0===e[0]&&e[1]>10||e[0]>0}(),V.isNode&&V.toFastProperties(t);try{throw new Error}catch(t){V.lastLineError=t}n.exports=V},{"./es5":13}]},{},[4])(4)}),"undefined"!=typeof window&&null!==window?window.P=window.Promise:"undefined"!=typeof self&&null!==self&&(self.P=self.Promise)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:3}],3:[function(t,e,n){function r(){l=!1,a.length?c=a.concat(c):h=-1,c.length&&i()}function i(){if(!l){var t=setTimeout(r);l=!0;for(var e=c.length;e;){for(a=c,c=[];++h<e;)a&&a[h].run();h=-1,e=c.length}a=null,l=!1,clearTimeout(t)}}function o(t,e){this.fun=t,this.array=e}function s(){}var a,u=e.exports={},c=[],l=!1,h=-1;u.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new o(t,e)),1!==c.length||l||setTimeout(i,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=s,u.addListener=s,u.once=s,u.off=s,u.removeListener=s,u.removeAllListeners=s,u.emit=s,u.binding=function(t){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(t){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],4:[function(t,e,n){function r(t,e,n,r){function o(t){var e=t.length;if(2>e||e>256||e&e-1)throw"Invalid code/color length, must be power of 2 and 2 .. 256.";return e}var s=0,r=void 0===r?{}:r,a=void 0===r.loop?null:r.loop,u=void 0===r.palette?null:r.palette;if(0>=e||0>=n||e>65535||n>65535)throw"Width/Height invalid.";t[s++]=71,t[s++]=73,t[s++]=70,t[s++]=56,t[s++]=57,t[s++]=97;var c=0,l=0;if(null!==u){for(var h=o(u);h>>=1;)++c;if(h=1<<c,--c,void 0!==r.background){if(l=r.background,l>=h)throw"Background index out of range.";if(0===l)throw"Background index explicitly passed as 0."}}if(t[s++]=255&e,t[s++]=e>>8&255,t[s++]=255&n,t[s++]=n>>8&255,t[s++]=(null!==u?128:0)|c,t[s++]=l,t[s++]=0,null!==u)for(var f=0,p=u.length;p>f;++f){var _=u[f];t[s++]=_>>16&255,t[s++]=_>>8&255,t[s++]=255&_}if(null!==a){if(0>a||a>65535)throw"Loop count invalid.";t[s++]=33,t[s++]=255,t[s++]=11,t[s++]=78,t[s++]=69,t[s++]=84,t[s++]=83,t[s++]=67,t[s++]=65,t[s++]=80,t[s++]=69,t[s++]=50,t[s++]=46,t[s++]=48,t[s++]=3,t[s++]=1,t[s++]=255&a,t[s++]=a>>8&255,t[s++]=0}var d=!1;this.addFrame=function(e,n,r,a,c,l){if(d===!0&&(--s,d=!1),l=void 0===l?{}:l,0>e||0>n||e>65535||n>65535)throw"x/y invalid.";if(0>=r||0>=a||r>65535||a>65535)throw"Width/Height invalid.";if(c.length<r*a)throw"Not enough pixels for the frame size.";var h=!0,f=l.palette;if((void 0===f||null===f)&&(h=!1,f=u),void 0===f||null===f)throw"Must supply either a local or global palette.";for(var p=o(f),_=0;p>>=1;)++_;p=1<<_;var v=void 0===l.delay?0:l.delay,y=void 0===l.disposal?0:l.disposal;if(0>y||y>3)throw"Disposal out of range.";var m=!1,g=0;if(void 0!==l.transparent&&null!==l.transparent&&(m=!0,g=l.transparent,0>g||g>=p))throw"Transparent color index.";if((0!==y||m||0!==v)&&(t[s++]=33,t[s++]=249,t[s++]=4,t[s++]=y<<2|(m===!0?1:0),t[s++]=255&v,t[s++]=v>>8&255,t[s++]=g,t[s++]=0),t[s++]=44,t[s++]=255&e,t[s++]=e>>8&255,t[s++]=255&n,t[s++]=n>>8&255,t[s++]=255&r,t[s++]=r>>8&255,t[s++]=255&a,t[s++]=a>>8&255,t[s++]=h===!0?128|_-1:0,h===!0)for(var b=0,w=f.length;w>b;++b){var C=f[b];t[s++]=C>>16&255,t[s++]=C>>8&255,t[s++]=255&C}s=i(t,s,2>_?2:_,c)},this.end=function(){return d===!1&&(t[s++]=59,d=!0),s}}function i(t,e,n,r){function i(n){for(;f>=n;)t[e++]=255&p,p>>=8,f-=8,e===s+256&&(t[s]=255,s=e++)}function o(t){p|=t<<f,f+=h,i(8)}t[e++]=n;var s=e++,a=1<<n,u=a-1,c=a+1,l=c+1,h=n+1,f=0,p=0,_=r[0]&u,d={};o(a);for(var v=1,y=r.length;y>v;++v){var m=r[v]&u,g=_<<8|m,b=d[g];if(void 0===b){for(p|=_<<f,f+=h;f>=8;)t[e++]=255&p,p>>=8,f-=8,e===s+256&&(t[s]=255,s=e++);4096===l?(o(a),l=c+1,h=n+1,d={}):(l>=1<<h&&++h,d[g]=l++),_=m}else _=b}return o(_),o(c),i(1),s+1===e?t[s]=0:(t[s]=e-s-1,t[e++]=0),e}function o(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e++]||56!==(t[e++]+1&253)||97!==t[e++])throw"Invalid GIF 87a/89a header.";var n=t[e++]|t[e++]<<8,r=t[e++]|t[e++]<<8,i=t[e++],o=i>>7,a=7&i,u=1<<a+1;t[e++];t[e++];var c=null;o&&(c=e,e+=3*u);var l=!0,h=[],f=0,p=null,_=0,d=null;for(this.width=n,this.height=r;l&&e<t.length;)switch(t[e++]){case 33:switch(t[e++]){case 255:if(11!==t[e]||78==t[e+1]&&69==t[e+2]&&84==t[e+3]&&83==t[e+4]&&67==t[e+5]&&65==t[e+6]&&80==t[e+7]&&69==t[e+8]&&50==t[e+9]&&46==t[e+10]&&48==t[e+11]&&3==t[e+12]&&1==t[e+13]&&0==t[e+16])e+=14,d=t[e++]|t[e++]<<8,e++;else for(e+=12;;){var v=t[e++];if(0===v)break;e+=v}break;case 249:if(4!==t[e++]||0!==t[e+4])throw"Invalid graphics extension block.";var y=t[e++];f=t[e++]|t[e++]<<8,p=t[e++],0===(1&y)&&(p=null),_=y>>2&7,e++;break;case 254:for(;;){var v=t[e++];if(0===v)break;e+=v}break;default:throw"Unknown graphic control label: 0x"+t[e-1].toString(16)}break;case 44:var m=t[e++]|t[e++]<<8,g=t[e++]|t[e++]<<8,b=t[e++]|t[e++]<<8,w=t[e++]|t[e++]<<8,C=t[e++],j=C>>7,F=C>>6&1,k=7&C,x=1<<k+1,E=c,T=!1;if(j){var T=!0;E=e,e+=3*x}var P=e;for(e++;;){var v=t[e++];if(0===v)break;e+=v}h.push({x:m,y:g,width:b,height:w,has_local_palette:T,palette_offset:E,data_offset:P,data_length:e-P,transparent_index:p,interlaced:!!F,delay:f,disposal:_});break;case 59:l=!1;break;default:throw"Unknown gif block: 0x"+t[e-1].toString(16)}this.numFrames=function(){return h.length},this.loopCount=function(){return d},this.frameInfo=function(t){if(0>t||t>=h.length)throw"Frame index out of range.";return h[t]},this.decodeAndBlitFrameBGRA=function(e,r){var i=this.frameInfo(e),o=i.width*i.height,a=new Uint8Array(o);s(t,i.data_offset,a,o);var u=i.palette_offset,c=i.transparent_index;null===c&&(c=256);var l=i.width,h=n-l,f=l,p=4*(i.y*n+i.x),_=4*((i.y+i.height)*n+i.x),d=p,v=4*h;i.interlaced===!0&&(v+=4*n*7);for(var y=8,m=0,g=a.length;g>m;++m){var b=a[m];if(0===f&&(d+=v,f=l,d>=_&&(v=4*h+4*n*(y-1),d=p+(l+h)*(y<<1),y>>=1)),b===c)d+=4;else{var w=t[u+3*b],C=t[u+3*b+1],j=t[u+3*b+2];r[d++]=j,r[d++]=C,r[d++]=w,r[d++]=255}--f}},this.decodeAndBlitFrameRGBA=function(e,r){var i=this.frameInfo(e),o=i.width*i.height,a=new Uint8Array(o);s(t,i.data_offset,a,o);var u=i.palette_offset,c=i.transparent_index;null===c&&(c=256);var l=i.width,h=n-l,f=l,p=4*(i.y*n+i.x),_=4*((i.y+i.height)*n+i.x),d=p,v=4*h;i.interlaced===!0&&(v+=4*n*7);for(var y=8,m=0,g=a.length;g>m;++m){var b=a[m];if(0===f&&(d+=v,f=l,d>=_&&(v=4*h+4*n*(y-1),d=p+(l+h)*(y<<1),y>>=1)),b===c)d+=4;else{var w=t[u+3*b],C=t[u+3*b+1],j=t[u+3*b+2];r[d++]=w,r[d++]=C,r[d++]=j,r[d++]=255}--f}}}function s(t,e,n,r){for(var i=t[e++],o=1<<i,s=o+1,a=s+1,u=i+1,c=(1<<u)-1,l=0,h=0,f=0,p=t[e++],_=new Int32Array(4096),d=null;;){for(;16>l&&0!==p;)h|=t[e++]<<l,l+=8,1===p?p=t[e++]:--p;if(u>l)break;var v=h&c;if(h>>=u,l-=u,v!==o){if(v===s)break;for(var y=a>v?v:d,m=0,g=y;g>o;)g=_[g]>>8,++m;var b=g,w=f+m+(y!==v?1:0);if(w>r)return void console.log("Warning, gif stream longer than expected.");n[f++]=b,f+=m;var C=f;for(y!==v&&(n[f++]=b),g=y;m--;)g=_[g],n[--C]=255&g,g>>=8;null!==d&&4096>a&&(_[a++]=d<<8|b,a>=c+1&&12>u&&(++u,c=c<<1|1)),d=v}else a=s+1,u=i+1,c=(1<<u)-1,d=null}return f!==r&&console.log("Warning, gif stream shorter than expected."),n}try{n.GifWriter=r,n.GifReader=o}catch(t){}},{}]},{},[1]);


================================================
FILE: gh-pages/assets/lib/highlight.pack.js
================================================
!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset<r[0].offset?e:r:"start"==r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value)+'"'}f+="<"+t(e)+Array.prototype.map.call(e.attributes,r).join("")+">"}function u(e){f+="</"+t(e)+">"}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?"":E.classPrefix,i='<span class="'+a,o=t?"":"</span>";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(y);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e="string"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,y=""):e.eB?(k+=n(t)+r,y=""):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+="</span>"),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"<unnamed>")+'"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,M={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var y="",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="</span>");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"<br>")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,r,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}|	)",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(t)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:t.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+i,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:i,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}],i:/#/}});hljs.registerLanguage("xml",function(t){var s="[A-Za-z0-9\\._:-]+",c={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php"},e={eW:!0,i:/</,r:0,c:[c,{cN:"attribute",b:s,r:0},{b:"=",r:0,c:[{cN:"value",c:[c],v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("<!--","-->",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[e],starts:{e:"</style>",rE:!0,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[e],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars"]}},c,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},e]}]}});

================================================
FILE: gh-pages/assets/lib/monokai_sublime.css
================================================
/*

Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/

*/

.hljs {
  display: block;
  overflow-x: auto;
  padding: 0.5em;
  background: #23241f;
  -webkit-text-size-adjust: none;
}

.hljs,
.hljs-tag,
.css .hljs-rule,
.css .hljs-value,
.aspectj .hljs-function,
.css .hljs-function
.hljs-preprocessor,
.hljs-pragma {
  color: #f8f8f2;
}

.hljs-strongemphasis,
.hljs-strong,
.hljs-emphasis {
  color: #a8a8a2;
}

.hljs-bullet,
.hljs-blockquote,
.hljs-horizontal_rule,
.hljs-number,
.hljs-regexp,
.alias .hljs-keyword,
.hljs-literal,
.hljs-hexcolor {
  color: #ae81ff;
}

.hljs-tag .hljs-value,
.hljs-code,
.hljs-title,
.css .hljs-class,
.hljs-class .hljs-title:last-child {
  color: #a6e22e;
}

.hljs-link_url {
  font-size: 80%;
}

.hljs-strong,
.hljs-strongemphasis {
  font-weight: bold;
}

.hljs-emphasis,
.hljs-strongemphasis,
.hljs-class .hljs-title:last-child,
.hljs-typename {
  font-style: italic;
}

.hljs-keyword,
.ruby .hljs-class .hljs-keyword:first-child,
.ruby .hljs-function .hljs-keyword,
.hljs-function,
.hljs-change,
.hljs-winutils,
.hljs-flow,
.nginx .hljs-title,
.tex .hljs-special,
.hljs-header,
.hljs-attribute,
.hljs-symbol,
.hljs-symbol .hljs-string,
.hljs-tag .hljs-title,
.hljs-value,
.alias .hljs-keyword:first-child,
.css .hljs-tag,
.css .unit,
.css .hljs-important {
  color: #f92672;
}

.hljs-function .hljs-keyword,
.hljs-class .hljs-keyword:first-child,
.hljs-aspect .hljs-keyword:first-child,
.hljs-constant,
.hljs-typename,
.hljs-name,
.css .hljs-attribute {
  color: #66d9ef;
}

.hljs-variable,
.hljs-params,
.hljs-class .hljs-title,
.hljs-aspect .hljs-title {
  color: #f8f8f2;
}

.hljs-string,
.css .hljs-id,
.hljs-subst,
.hljs-type,
.ruby .hljs-class .hljs-parent,
.hljs-built_in,
.django .hljs-template_tag,
.django .hljs-variable,
.smalltalk .hljs-class,
.django .hljs-filter .hljs-argument,
.smalltalk .hljs-localvars,
.smalltalk .hljs-array,
.hljs-attr_selector,
.hljs-pseudo,
.hljs-addition,
.hljs-stream,
.hljs-envvar,
.apache .hljs-tag,
.apache .hljs-cbracket,
.tex .hljs-command,
.hljs-prompt,
.hljs-link_label,
.hljs-link_url {
  color: #e6db74;
}

.hljs-comment,
.hljs-annotation,
.hljs-decorator,
.hljs-pi,
.hljs-doctype,
.hljs-deletion,
.hljs-shebang,
.apache .hljs-sqbracket,
.tex .hljs-formula {
  color: #75715e;
}

.coffeescript .javascript,
.javascript .xml,
.tex .hljs-formula,
.xml .javascript,
.xml .vbscript,
.xml .css,
.xml .hljs-cdata,
.xml .php,
.php .xml {
  opacity: 0.5;
}


================================================
FILE: gh-pages/docs.css
================================================
h2 {
  font-weight: 100;
  color: #BD1550;
  font-size: 30px;
  line-height: 30px;
  margin-top: 20px;
  margin-bottom: 10px;
}
h4 {
  font-weight: 700;
  margin-top: 30px;
  margin-bottom: 20px;
}
p.text {
  line-height: 1.2em;
}
table.arguments {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
}
table.arguments td {
  padding: 10px 15px;
  border: 1px solid #DDD;
  vertical-align: top;
}
table.arguments td.name {
  width: 110px;
}


================================================
FILE: gh-pages/docs.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0">
    <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:100,300,400,700,900">
    <link rel="stylesheet" href="//cdn.jsdelivr.net/devicons/1.8.0/css/devicons.min.css">
    <link rel="stylesheet" href="assets/lib/monokai_sublime.css">
    <link rel="stylesheet" href="theme.css">
    <link rel="stylesheet" href="docs.css">
    <script type="text/javascript" src="assets/gifler.js"></script>
    <script type="text/javascript" src="assets/lib/highlight.pack.js"></script>
    <script type="text/javascript">hljs.initHighlightingOnLoad();</script>
  </head>
  <body>
    <div class="nav-top row">
      <div class="nav-left"><a href="./">Gifler</a><a href="examples.html">examples</a><a href="docs.html">docs</a></div>
      <div class="nav-right"><a href="https://github.com/themadcreator/gifler"><span class="devicons devicons-github_full"></span></a><a href="https://www.npmjs.com/package/gifler"><span class="devicons devicons-npm"></span></a></div>
    </div>
    <div class="content-row row">
      <div class="content"><a name="gifler()" href="#gifler()">
          <h2>gifler()</h2></a>
        <p class="text">This is the main entrypoint to the library.</p>
        <p class="text">Prepares and sends an XHR request to load the GIF file.</p>
        <p class="text">Returns a <b>Gif</b> instance for interacting with the library.</p>
        <h4>Arguments</h4>
        <table class="arguments">
          <tr>
            <td class="name">url</td>
            <td class="desc">URL to .gif file</td>
          </tr>
        </table>
        <h4>Returns</h4>
        <p class="returns">a Gif instance object</p><a name="gif.animate()" href="#gif.animate()">
          <h2>gif.animate()</h2></a>
        <p class="text">Animates the loaded GIF, drawing each frame into the canvas. This matches the look of an &lt;img&gt; tag.
</p>
        <h4>Arguments</h4>
        <table class="arguments">
          <tr>
            <td class="name">selector</td>
            <td class="desc">A &lt;canvas&gt; element or query selector for a &lt;canvas&gt; element.</td>
          </tr>
        </table><a name="gif.frames()" href="#gif.frames()">
          <h2>gif.frames()</h2></a>
        <p class="text">Runs the animation on the loaded GIF, but passes the canvas context and GIF frame to the <b>onDrawFrame</b> callback for rendering.
</p>
        <p class="text">This gives you complete control of how the frame is drawn into the canvas context.
</p>
        <h4>Arguments</h4>
        <table class="arguments">
          <tr>
            <td class="name">selector</td>
            <td class="desc">A &lt;canvas&gt; element or query selector for a &lt;canvas&gt; element.</td>
          </tr>
          <tr>
            <td class="name">onDrawFrame</td>
            <td class="desc">A callback that will be invoked when each frame should be drawn into the canvas. see Animator.onDrawFrame.</td>
          </tr>
          <tr>
            <td class="name">setDimesions</td>
            <td class="desc">OPTIONAL. If true, the canvas's width/height will be set to the dimension of the loaded GIF. default: false.</td>
          </tr>
        </table><a name="gif.get()" href="#gif.get()">
          <h2>gif.get()</h2></a>
        <p class="text">To get even more control, and for your convenience, this method returns a promise that will be fulfilled with an <b>Animator</b> instance. The animator will be in an unstarted state, but can be started with a call to <b>animator.animateInCanvas()</b>
</p><a name="animator::createBufferCanvas()" href="#animator::createBufferCanvas()">
          <h2>animator::createBufferCanvas()</h2></a>
        <p class="text">Creates a buffer canvas element since it is much faster to call <b>.putImage()</b> than <b>.putImageData()</b>.
</p>
        <p class="text">The omggif library decodes the pixels into the full gif dimensions. We only need to store the frame dimensions, so we offset the putImageData call.
</p>
        <h4>Arguments</h4>
        <table class="arguments">
          <tr>
            <td class="name">frame</td>
            <td class="desc">A frame of the GIF (from the omggif library)</td>
          </tr>
          <tr>
            <td class="name">width</td>
            <td class="desc">width of the GIF (not the frame)</td>
          </tr>
          <tr>
            <td class="name">height</td>
            <td class="desc">height of the GIF</td>
          </tr>
        </table>
        <h4>Returns</h4>
        <p class="returns">A &lt;canvas&gt; element containing the frame's image.</p><a name="animator.start()" href="#animator.start()">
          <h2>animator.start()</h2></a>
        <p class="text">Starts running the GIF animation loop.</p><a name="animator.stop()" href="#animator.stop()">
          <h2>animator.stop()</h2></a>
        <p class="text">Stops running the GIF animation loop.</p><a name="animator.reset()" href="#animator.reset()">
          <h2>animator.reset()</h2></a>
        <p class="text">Resets the animation loop to the first frame.</p>
        <p class="text">Does not stop the animation from running.</p><a name="animator.running()" href="#animator.running()">
          <h2>animator.running()</h2></a>
        <h4>Returns</h4>
        <p class="returns">A boolean indicating whether or not the animation is running.</p><a name="animator.animateInCanvas()" href="#animator.animateInCanvas()">
          <h2>animator.animateInCanvas()</h2></a>
        <p class="text">This method prepares the canvas to be drawn into and sets up the callbacks for each frame while the animation is running.
</p>
        <p class="text">To change how each frame is drawn into the canvas, override <b>animator.onDrawFrame()</b> before calling this method. If <b>animator.onDrawFrame()</b> is not set, we simply draw the frame directly into the canvas as is.
</p>
        <p class="text">You may also override <b>animator.onFrame()</b> before calling this method. onFrame handles the lazy construction of canvas buffers for each frame as well as the disposal method for each frame.
</p>
        <h4>Arguments</h4>
        <table class="arguments">
          <tr>
            <td class="name">canvas</td>
            <td class="desc">A canvas element.</td>
          </tr>
          <tr>
            <td class="name">setDimensions</td>
            <td class="desc">OPTIONAL. If true, the canvas width/height will be set to match the GIF. default: true.</td>
          </tr>
        </table>
      </div>
    </div>
    <div class="footer">made by <a href="https://github.com/themadcreator/">themadcreator@github</a></div>
  </body>
</html>

================================================
FILE: gh-pages/examples.css
================================================
h3 {
  font-size: 30px;
  line-height: 40px;
}
table.comparisons {
  width: 100%;
  table-layout: fixed;
  text-align: center;
}
table.comparisons td img {
  width: 300px;
  height: 300px;
}
table.comparisons td canvas {
  width: 300px;
  height: 300px;
}
@media only screen and (max-device-width: 480px) {
  table.comparisons td img {
    width: 150px;
    height: 150px;
  }
  table.comparisons td canvas {
    width: 150px;
    height: 150px;
  }
}
.source {
  font-size: 14px;
  color: #AAA;
  float: right;
  margin-right: 20px;
  margin-bottom: 20px;
  clear: both;
}


================================================
FILE: gh-pages/examples.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0">
    <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:100,300,400,700,900">
    <link rel="stylesheet" href="//cdn.jsdelivr.net/devicons/1.8.0/css/devicons.min.css">
    <link rel="stylesheet" href="assets/lib/monokai_sublime.css">
    <link rel="stylesheet" href="theme.css">
    <link rel="stylesheet" href="examples.css">
    <script type="text/javascript" src="assets/gifler.js"></script>
    <script type="text/javascript" src="assets/lib/highlight.pack.js"></script>
    <script type="text/javascript">hljs.initHighlightingOnLoad();</script>
  </head>
  <body>
    <div class="nav-top row">
      <div class="nav-left"><a href="./">Gifler</a><a href="examples.html">examples</a><a href="docs.html">docs</a></div>
      <div class="nav-right"><a href="https://github.com/themadcreator/gifler"><span class="devicons devicons-github_full"></span></a><a href="https://www.npmjs.com/package/gifler"><span class="devicons devicons-npm"></span></a></div>
    </div>
    <div class="content-row row">
      <div class="content">
        <table class="comparisons">
          <tr>
            <th>
              <h3>&lt;img&gt;</h3>
            </th>
            <th>
              <h3>&lt;canvas&gt;</h3>
            </th>
          </tr>
          <tr>
            <td><img class="nyancat"/></td>
            <td>
              <canvas class="nyancat"></canvas>
            </td>
          </tr>
          <tr>
            <td colspan="2">
              <div class="source">Source: http://www.wired.co.uk/</div>
              <script>
                var url = "assets/gif/nyan.gif";
                var selector = ".nyancat";
                gifler(url).animate(document.querySelector('canvas' + selector));
                document.querySelector('img' + selector).src = url;
                
              </script>
            </td>
          </tr>
          <tr>
            <td><img class="florian"/></td>
            <td>
              <canvas class="florian"></canvas>
            </td>
          </tr>
          <tr>
            <td colspan="2">
              <div class="source">Source: Florian de Looij</div>
              <script>
                var url = "assets/gif/florian-8.gif";
                var selector = ".florian";
                gifler(url).animate(document.querySelector('canvas' + selector));
                document.querySelector('img' + selector).src = url;
                
              </script>
            </td>
          </tr>
          <tr>
            <td><img class="pots"/></td>
            <td>
              <canvas class="pots"></canvas>
            </td>
          </tr>
          <tr>
            <td colspan="2">
              <div class="source">Source: http://www.weshootfood.net/</div>
              <script>
                var url = "assets/gif/pots.gif";
                var selector = ".pots";
                gifler(url).animate(document.querySelector('canvas' + selector));
                document.querySelector('img' + selector).src = url;
                
              </script>
            </td>
          </tr>
          <tr>
            <td><img class="toroid"/></td>
            <td>
              <canvas class="toroid"></canvas>
            </td>
          </tr>
          <tr>
            <td colspan="2">
              <div class="source">Source: David Ope</div>
              <script>
                var url = "assets/gif/toroid.gif";
                var selector = ".toroid";
                gifler(url).animate(document.querySelector('canvas' + selector));
                document.querySelector('img' + selector).src = url;
                
              </script>
            </td>
          </tr>
        </table>
      </div>
    </div>
    <div class="footer">made by <a href="https://github.com/themadcreator/">themadcreator@github</a></div>
  </body>
</html>

================================================
FILE: gh-pages/index.css
================================================
.hero {
  width: 100vw;
  height: 66vh;
  background-color: #490A3D;
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}
.hero h1 {
  color: white;
  font-size: 140px;
  line-height: 150px;
  font-weight: 100;
  margin-top: 15px;
}
.hero h2 {
  color: rgba(255, 255, 255, 0.5);
  font-size: 20px;
  font-weight: normal;
}
.hero .download {
  margin-top: 50px;
  margin-bottom: 15px;
  padding: 0px 0px;
  width: 200px;
  height: 60px;
  line-height: 60px;
  font-size: 24px;
}
.canvas-wrapper {
  max-width: 100vw;
  padding: 15px 15px;
}
.canvas-wrapper canvas {
  max-width: 100%;
}
.canvas-wrapper canvas.rainbow-pikachus {
  width: 100%;
  height: 100px;
}
pre code {
  padding: 15px 15px !important;
  box-sizing: border-box;
  overflow-x: scroll !important;
  -webkit-touch-callout: text;
  -webkit-user-select: text;
  -khtml-user-select: text;
  -moz-user-select: text;
  -ms-user-select: text;
  user-select: text;
}
.tech-icons {
  font-size: 50px;
  text-align: center;
  margin: 30px 0px;
  color: #AAA;
}
.tech-icons span {
  margin: 0px 15px;
}


================================================
FILE: gh-pages/index.html
================================================
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0">
    <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:100,300,400,700,900">
    <link rel="stylesheet" href="//cdn.jsdelivr.net/devicons/1.8.0/css/devicons.min.css">
    <link rel="stylesheet" href="assets/lib/monokai_sublime.css">
    <link rel="stylesheet" href="theme.css">
    <link rel="stylesheet" href="index.css">
    <script type="text/javascript" src="//code.jquery.com/jquery-2.1.4.min.js"></script>
    <script type="text/javascript" src="assets/gifler.js"></script>
    <script type="text/javascript" src="assets/lib/highlight.pack.js"></script>
    <script type="text/javascript">hljs.initHighlightingOnLoad();</script>
  </head>
  <body>
    <div class="nav-top row">
      <div class="nav-left"><a href="./">Gifler</a><a href="examples.html">examples</a><a href="docs.html">docs</a></div>
      <div class="nav-right"><a href="https://github.com/themadcreator/gifler"><span class="devicons devicons-github_full"></span></a><a href="https://www.npmjs.com/package/gifler"><span class="devicons devicons-npm"></span></a></div>
    </div>
    <div class="hero row">
      <h1>Gifler</h1>
      <h2>Render GIF frames to &lt;canvas&gt;</h2><a href="https://raw.githubusercontent.com/themadcreator/gifler/master/gifler.min.js">
        <div class="button download">Download</div></a>
    </div>
    <div class="content-row row">
      <div class="content">
        <div class="block">
          <h2>Hello, Gifler!</h2>
          <div class="flavor">Getting started is easy! Just call the gifler function to load a GIF. Then run the animation in a canvas using the <b>.animate()</b> method. The method <b>.animate()</b> accepts a canvas DOM element or a string selector to a canvas element.
</div>
        </div>
        <div class="canvas-wrapper">
          <canvas class="running-pikachu"></canvas>
        </div>
        <script>gifler('assets/gif/run.gif').animate('canvas.running-pikachu')</script>
        <div class="block">
          <pre><code class="running-pikachu javascript">gifler('assets/gif/run.gif').animate('canvas.running-pikachu')</code></pre>
        </div>
        <div class="block">
          <h2>Custom Rendering</h2>
          <div class="flavor">Gifler makes it easy to manipulate the underlying frames from the GIF. Just call the <b>.frames()</b> method with a canvas selector and a callback that will be called when each frame should be renderd. Gifler handles all the timing calculations and GIF transition logic. Just put the pixels you want to see into the canvas.
</div>
        </div>
        <div class="canvas-wrapper">
          <canvas class="rainbow-pikachus"></canvas>
        </div>
        <script>var frames = 0;

function onDrawFrame(ctx, frame) {
  // Match width/height to remove distortion
  ctx.canvas.width  = ctx.canvas.offsetWidth;
  ctx.canvas.height = ctx.canvas.offsetHeight;

  // Determine how many pikachus will fit on screen
  var n = Math.floor((ctx.canvas.width)/150)

  for(var x = 0; x < n; x++) {
    // Draw a pikachu
    var left = x * 150;
    ctx.globalCompositeOperation = 'source-over';
    ctx.drawImage(frame.buffer, frame.x + left, frame.y, 150, 100);

    // Composite a color
    var hue = (frames * 10 + x * 50) % 360;
    ctx.globalCompositeOperation = 'source-atop';
    ctx.fillStyle = 'hsla(' + hue + ', 100%, 50%, 0.5)';
    ctx.fillRect(left, 0, 150, this.height);
  }
  frames++;
}

// Load the GIF, set custom frame render function
gifler('assets/gif/run.gif')
  .frames('canvas.rainbow-pikachus', onDrawFrame);</script>
        <div class="block">
          <pre><code class="rainbow-pikachus javascript">var frames = 0;

function onDrawFrame(ctx, frame) {
  // Match width/height to remove distortion
  ctx.canvas.width  = ctx.canvas.offsetWidth;
  ctx.canvas.height = ctx.canvas.offsetHeight;

  // Determine how many pikachus will fit on screen
  var n = Math.floor((ctx.canvas.width)/150)

  for(var x = 0; x &lt; n; x++) {
    // Draw a pikachu
    var left = x * 150;
    ctx.globalCompositeOperation = 'source-over';
    ctx.drawImage(frame.buffer, frame.x + left, frame.y, 150, 100);

    // Composite a color
    var hue = (frames * 10 + x * 50) % 360;
    ctx.globalCompositeOperation = 'source-atop';
    ctx.fillStyle = 'hsla(' + hue + ', 100%, 50%, 0.5)';
    ctx.fillRect(left, 0, 150, this.height);
  }
  frames++;
}

// Load the GIF, set custom frame render function
gifler('assets/gif/run.gif')
  .frames('canvas.rainbow-pikachus', onDrawFrame);</code></pre>
        </div>
        <div class="block">
          <h2>Play/Pause Control</h2>
          <div class="flavor">With access to Gifler''s animator, you can stop and start the animation with ease. When running, the animator will automatically compensate for canvas render time when computing when to draw the next GIF frame. <br/><br/> Try clicking the animation below to start/stop it.
</div>
        </div>
        <div class="canvas-wrapper">
          <canvas class="play-pause"></canvas>
        </div>
        <script>gifler('assets/gif/run.gif')
  .animate('canvas.play-pause')
  .then(function(animator) {
    $('canvas.play-pause').click(function(){
      if(animator.running()){
        animator.stop();
      } else {
        animator.start();
      }
    });
  });</script>
        <div class="block">
          <pre><code class="play-pause javascript">gifler('assets/gif/run.gif')
  .animate('canvas.play-pause')
  .then(function(animator) {
    $('canvas.play-pause').click(function(){
      if(animator.running()){
        animator.stop();
      } else {
        animator.start();
      }
    });
  });</code></pre>
        </div>
        <div class="tech-icons"><span title="CoffeeScript" class="devicons devicons-coffeescript"></span><span title="Javascript" class="devicons devicons-javascript_badge"></span><span title="less" class="devicons devicons-less"></span><span title="npm" class="devicons devicons-npm"></span></div>
      </div>
    </div>
    <div class="footer">made by <a href="https://github.com/themadcreator/">themadcreator@github</a></div>
  </body>
</html>

================================================
FILE: gh-pages/theme.css
================================================
a,
div {
  box-sizing: border-box;
}
a {
  text-decoration: none;
}
h1,
h2,
h3,
h4 {
  color: black;
  box-sizing: border-box;
  font-weight: 700;
  padding: 0px 0px;
  margin: 0px 0px;
}
body {
  font-family: "Roboto";
  text-align: center;
  background: #490A3D;
  color: #555;
  margin: 0;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
body > div {
  font-size: 16px;
  line-height: 1em;
}
.nav-top {
  width: 100%;
  height: 60px;
  background-color: #BD1550;
}
.nav-top .nav-left {
  float: left;
  margin-left: 20px;
}
@media only screen and (max-device-width: 400px) {
  .nav-top .nav-left {
    margin-left: 0px;
  }
}
.nav-top .nav-right {
  float: right;
  margin-right: 20px;
}
@media only screen and (max-device-width: 400px) {
  .nav-top .nav-right {
    display: none;
  }
}
.nav-top .devicons {
  font-size: 50px;
  line-height: 60px;
}
.nav-top a {
  display: inline-block;
  color: white;
  line-height: 60px;
  height: 60px;
  border-bottom: 5px solid transparent;
  padding: 0px 15px;
}
.nav-top a:hover {
  border-bottom-color: #eb4d84;
}
.content-row {
  text-align: center;
  background: white;
}
.content {
  display: inline-block;
  text-align: left;
  padding: 15px 0px;
  width: 700px;
  max-width: 100vw;
}
.content h2 {
  font-size: 40px;
  line-height: 40px;
  padding: 30px 0px 15px 0px;
}
.content .flavor {
  font-weight: 300;
  line-height: 1.2em;
  margin-bottom: 2em;
}
.block {
  padding-left: 15px;
  padding-right: 15px;
}
.button {
  padding: 15px 30px;
  background: #BD1550;
  color: white;
  cursor: pointer;
  display: inline-block;
}
.button:hover {
  background: #eb4d84;
}
.footer {
  margin: 30px 0px;
  color: #BD1550;
}
.footer a {
  color: #BD1550;
}


================================================
FILE: gifler.bare.js
================================================
// Generated by CoffeeScript 1.10.0
var Animator, Decoder, Gif, GifReader, Promise, gifler,
  bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };

GifReader = require('omggif').GifReader;

Promise = require('bluebird');


/*---
head : 'gifler()'
text :
  - This is the main entrypoint to the library.
  - Prepares and sends an XHR request to load the GIF file.
  - Returns a <b>Gif</b> instance for interacting with the library.
args : 
  url : 'URL to .gif file'
return : 'a Gif instance object'
 */

gifler = function(url) {
  var aync, promise, xhr;
  xhr = new XMLHttpRequest();
  xhr.open('GET', url, aync = true);
  xhr.responseType = 'arraybuffer';
  promise = new Promise(function(resolve, reject) {
    return xhr.onload = function(e) {
      return resolve(this.response);
    };
  });
  xhr.send();
  return new Gif(promise);
};

Gif = (function() {
  Gif.getCanvasElement = function(selector) {
    var element, ref;
    if (typeof selector === 'string' && ((ref = (element = document.querySelector(selector))) != null ? ref.tagName : void 0) === 'CANVAS') {
      return element;
    } else if ((selector != null ? selector.tagName : void 0) === 'CANVAS') {
      return selector;
    } else {
      throw new Error('Unexpected selector type. Valid types are query-selector-string/canvas-element');
    }
  };

  function Gif(dataPromise) {
    this._animatorPromise = dataPromise.then(function(data) {
      var reader;
      reader = new GifReader(new Uint8Array(data));
      return Decoder.decodeFramesAsync(reader).then(function(frames) {
        return new Animator(reader, frames);
      });
    });
  }


  /*---
  head : 'gif.animate()'
  text :
    - >
      Animates the loaded GIF, drawing each frame into the canvas.
      This matches the look of an &lt;img&gt; tag.
  args : 
    selector : 'A <canvas> element or query selector for a <canvas> element.'
   */

  Gif.prototype.animate = function(selector) {
    var canvas;
    canvas = Gif.getCanvasElement(selector);
    return this._animatorPromise.then(function(animator) {
      return animator.animateInCanvas(canvas);
    });
  };


  /*---
  head : 'gif.frames()'
  text :
    - >
      Runs the animation on the loaded GIF, but passes the
      canvas context and GIF frame to the <b>onDrawFrame</b>
      callback for rendering.
    - >
      This gives you complete control of how the frame is drawn
      into the canvas context.
  args : 
    selector     : 'A <canvas> element or query selector for a <canvas> element.'
    onDrawFrame  : 'A callback that will be invoked when each frame should be drawn into the canvas. see Animator.onDrawFrame.'
    setDimesions : 'OPTIONAL. If true, the canvas''s width/height will be set to the dimension of the loaded GIF. default: false.'
   */

  Gif.prototype.frames = function(selector, onDrawFrame, setCanvasDimesions) {
    var canvas;
    if (setCanvasDimesions == null) {
      setCanvasDimesions = false;
    }
    canvas = Gif.getCanvasElement(selector);
    return this._animatorPromise.then(function(animator) {
      animator.onDrawFrame = onDrawFrame;
      return animator.animateInCanvas(canvas, setCanvasDimesions);
    });
  };


  /*---
  head : 'gif.get()'
  text :
    - >
      To get even more control, and for your convenience,
      this method returns a promise that will be fulfilled with
      an <b>Animator</b> instance. The animator will be in an unstarted state,
      but can be started with a call to <b>animator.animateInCanvas()</b>
   */

  Gif.prototype.get = function(callback) {
    return this._animatorPromise;
  };

  return Gif;

})();


/*
These methods decode the pixels for each frame (decompressing and de-interlacing)
into a Uint8ClampedArray, which is suitable for canvas ImageData.
 */

Decoder = (function() {
  function Decoder() {}

  Decoder.decodeFramesSync = function(reader) {
    var j, ref, results;
    return (function() {
      results = [];
      for (var j = 0, ref = reader.numFrames(); 0 <= ref ? j < ref : j > ref; 0 <= ref ? j++ : j--){ results.push(j); }
      return results;
    }).apply(this).map(function(frameIndex) {
      return Decoder.decodeFrame(reader, frameIndex);
    });
  };

  Decoder.decodeFramesAsync = function(reader) {
    var concurrency, j, ref, results;
    return Promise.map((function() {
      results = [];
      for (var j = 0, ref = reader.numFrames(); 0 <= ref ? j < ref : j > ref; 0 <= ref ? j++ : j--){ results.push(j); }
      return results;
    }).apply(this), (function(i) {
      return Decoder.decodeFrame(reader, i);
    }), concurrency = 1);
  };

  Decoder.decodeFrame = function(reader, frameIndex) {
    var frameInfo;
    frameInfo = reader.frameInfo(frameIndex);
    frameInfo.pixels = new Uint8ClampedArray(reader.width * reader.height * 4);
    reader.decodeAndBlitFrameRGBA(frameIndex, frameInfo.pixels);
    return frameInfo;
  };

  return Decoder;

})();

Animator = (function() {

  /*---
  head : 'animator::createBufferCanvas()'
  text :
    - >
      Creates a buffer canvas element since it is much faster
      to call <b>.putImage()</b> than <b>.putImageData()</b>.
    - >
      The omggif library decodes the pixels into the full gif
      dimensions. We only need to store the frame dimensions,
      so we offset the putImageData call.
  args :
    frame  : A frame of the GIF (from the omggif library)
    width  : width of the GIF (not the frame)
    height : height of the GIF
  return : A <canvas> element containing the frame's image.
   */
  Animator.createBufferCanvas = function(frame, width, height) {
    var bufferCanvas, bufferContext, imageData;
    bufferCanvas = document.createElement('canvas');
    bufferContext = bufferCanvas.getContext('2d');
    bufferCanvas.width = frame.width;
    bufferCanvas.height = frame.height;
    imageData = bufferContext.createImageData(width, height);
    imageData.data.set(frame.pixels);
    bufferContext.putImageData(imageData, -frame.x, -frame.y);
    return bufferCanvas;
  };

  function Animator(_reader, _frames) {
    var ref;
    this._reader = _reader;
    this._frames = _frames;
    this._advanceFrame = bind(this._advanceFrame, this);
    this._nextFrameRender = bind(this._nextFrameRender, this);
    this._nextFrame = bind(this._nextFrame, this);
    ref = this._reader, this.width = ref.width, this.height = ref.height;
    this._loopCount = this._reader.loopCount();
    this._loops = 0;
    this._frameIndex = 0;
    this._running = false;
  }


  /*---
  head : 'animator.start()'
  text :
    - Starts running the GIF animation loop.
   */

  Animator.prototype.start = function() {
    this._lastTime = new Date().valueOf();
    this._delayCompensation = 0;
    this._running = true;
    setTimeout(this._nextFrame, 0);
    return this;
  };


  /*---
  head : 'animator.stop()'
  text :
    - Stops running the GIF animation loop.
   */

  Animator.prototype.stop = function() {
    this._running = false;
    return this;
  };


  /*---
  head : 'animator.reset()'
  text :
    - Resets the animation loop to the first frame.
    - Does not stop the animation from running.
   */

  Animator.prototype.reset = function() {
    this._frameIndex = 0;
    this._loops = 0;
    return this;
  };


  /*---
  head : 'animator.running()'
  return : A boolean indicating whether or not the animation is running.
   */

  Animator.prototype.running = function() {
    return this._running;
  };

  Animator.prototype._nextFrame = function() {
    requestAnimationFrame(this._nextFrameRender);
  };

  Animator.prototype._nextFrameRender = function() {
    var frame, ref;
    if (!this._running) {
      return;
    }
    frame = this._frames[this._frameIndex];
    if ((ref = this.onFrame) != null) {
      ref.apply(this, [frame, this._frameIndex]);
    }
    return this._enqueueNextFrame();
  };

  Animator.prototype._advanceFrame = function() {
    this._frameIndex += 1;
    if (this._frameIndex >= this._frames.length) {
      if (this._loopCount !== 0 && this._loopCount === this._loops) {
        this.stop();
      } else {
        this._frameIndex = 0;
        this._loops += 1;
      }
    }
  };

  Animator.prototype._enqueueNextFrame = function() {
    var actualDelay, delta, frame, frameDelay;
    this._advanceFrame();
    while (this._running) {
      frame = this._frames[this._frameIndex];
      delta = new Date().valueOf() - this._lastTime;
      this._lastTime += delta;
      this._delayCompensation += delta;
      frameDelay = frame.delay * 10;
      actualDelay = frameDelay - this._delayCompensation;
      this._delayCompensation -= frameDelay;
      if (actualDelay < 0) {
        this._advanceFrame();
        continue;
      } else {
        setTimeout(this._nextFrame, actualDelay);
        break;
      }
    }
  };


  /*---
  head : 'animator.animateInCanvas()'
  text :
    - >
      This method prepares the canvas to be drawn into and sets up
      the callbacks for each frame while the animation is running.
    - >
      To change how each frame is drawn into the canvas, override
      <b>animator.onDrawFrame()</b> before calling this method.
      If <b>animator.onDrawFrame()</b> is not set, we simply draw
      the frame directly into the canvas as is.
    - >
      You may also override <b>animator.onFrame()</b> before calling
      this method. onFrame handles the lazy construction of canvas
      buffers for each frame as well as the disposal method for each frame.
  args :
    canvas        : A canvas element.
    setDimensions : 'OPTIONAL. If true, the canvas width/height will be set to match the GIF. default: true.'
   */

  Animator.prototype.animateInCanvas = function(canvas, setDimensions) {
    var ctx;
    if (setDimensions == null) {
      setDimensions = true;
    }
    if (setDimensions) {
      canvas.width = this.width;
      canvas.height = this.height;
    }
    ctx = canvas.getContext('2d');
    if (this.onDrawFrame == null) {
      this.onDrawFrame = function(ctx, frame, i) {
        return ctx.drawImage(frame.buffer, frame.x, frame.y);
      };
    }
    if (this.onFrame == null) {
      this.onFrame = (function(_this) {
        return function(frame, i) {
          var ref, saved;
          if (frame.buffer == null) {
            frame.buffer = Animator.createBufferCanvas(frame, _this.width, _this.height);
          }
          if (typeof _this.disposeFrame === "function") {
            _this.disposeFrame();
          }
          switch (frame.disposal) {
            case 2:
              _this.disposeFrame = function() {
                return ctx.clearRect(0, 0, canvas.width, canvas.height);
              };
              break;
            case 3:
              saved = ctx.getImageData(0, 0, canvas.width, canvas.height);
              _this.disposeFrame = function() {
                return ctx.putImageData(saved, 0, 0);
              };
              break;
            default:
              _this.disposeFrame = null;
          }
          return (ref = _this.onDrawFrame) != null ? ref.apply(_this, [ctx, frame, i]) : void 0;
        };
      })(this);
    }
    this.start();
    return this;
  };

  return Animator;

})();

gifler.Gif = Gif;

gifler.Decoder = Decoder;

gifler.Animator = Animator;

if (typeof window !== "undefined" && window !== null) {
  window.gifler = gifler;
}

if (typeof module !== "undefined" && module !== null) {
  module.exports = gifler;
}


================================================
FILE: gifler.bundle.js
================================================
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
// Generated by CoffeeScript 1.10.0
var Animator, Decoder, Gif, GifReader, Promise, gifler,
  bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };

GifReader = require('omggif').GifReader;

Promise = require('bluebird');


/*---
head : 'gifler()'
text :
  - This is the main entrypoint to the library.
  - Prepares and sends an XHR request to load the GIF file.
  - Returns a <b>Gif</b> instance for interacting with the library.
args : 
  url : 'URL to .gif file'
return : 'a Gif instance object'
 */

gifler = function(url) {
  var aync, promise, xhr;
  xhr = new XMLHttpRequest();
  xhr.open('GET', url, aync = true);
  xhr.responseType = 'arraybuffer';
  promise = new Promise(function(resolve, reject) {
    return xhr.onload = function(e) {
      return resolve(this.response);
    };
  });
  xhr.send();
  return new Gif(promise);
};

Gif = (function() {
  Gif.getCanvasElement = function(selector) {
    var element, ref;
    if (typeof selector === 'string' && ((ref = (element = document.querySelector(selector))) != null ? ref.tagName : void 0) === 'CANVAS') {
      return element;
    } else if ((selector != null ? selector.tagName : void 0) === 'CANVAS') {
      return selector;
    } else {
      throw new Error('Unexpected selector type. Valid types are query-selector-string/canvas-element');
    }
  };

  function Gif(dataPromise) {
    this._animatorPromise = dataPromise.then(function(data) {
      var reader;
      reader = new GifReader(new Uint8Array(data));
      return Decoder.decodeFramesAsync(reader).then(function(frames) {
        return new Animator(reader, frames);
      });
    });
  }


  /*---
  head : 'gif.animate()'
  text :
    - >
      Animates the loaded GIF, drawing each frame into the canvas.
      This matches the look of an &lt;img&gt; tag.
  args : 
    selector : 'A <canvas> element or query selector for a <canvas> element.'
   */

  Gif.prototype.animate = function(selector) {
    var canvas;
    canvas = Gif.getCanvasElement(selector);
    return this._animatorPromise.then(function(animator) {
      return animator.animateInCanvas(canvas);
    });
  };


  /*---
  head : 'gif.frames()'
  text :
    - >
      Runs the animation on the loaded GIF, but passes the
      canvas context and GIF frame to the <b>onDrawFrame</b>
      callback for rendering.
    - >
      This gives you complete control of how the frame is drawn
      into the canvas context.
  args : 
    selector     : 'A <canvas> element or query selector for a <canvas> element.'
    onDrawFrame  : 'A callback that will be invoked when each frame should be drawn into the canvas. see Animator.onDrawFrame.'
    setDimesions : 'OPTIONAL. If true, the canvas''s width/height will be set to the dimension of the loaded GIF. default: false.'
   */

  Gif.prototype.frames = function(selector, onDrawFrame, setCanvasDimesions) {
    var canvas;
    if (setCanvasDimesions == null) {
      setCanvasDimesions = false;
    }
    canvas = Gif.getCanvasElement(selector);
    return this._animatorPromise.then(function(animator) {
      animator.onDrawFrame = onDrawFrame;
      return animator.animateInCanvas(canvas, setCanvasDimesions);
    });
  };


  /*---
  head : 'gif.get()'
  text :
    - >
      To get even more control, and for your convenience,
      this method returns a promise that will be fulfilled with
      an <b>Animator</b> instance. The animator will be in an unstarted state,
      but can be started with a call to <b>animator.animateInCanvas()</b>
   */

  Gif.prototype.get = function(callback) {
    return this._animatorPromise;
  };

  return Gif;

})();


/*
These methods decode the pixels for each frame (decompressing and de-interlacing)
into a Uint8ClampedArray, which is suitable for canvas ImageData.
 */

Decoder = (function() {
  function Decoder() {}

  Decoder.decodeFramesSync = function(reader) {
    var j, ref, results;
    return (function() {
      results = [];
      for (var j = 0, ref = reader.numFrames(); 0 <= ref ? j < ref : j > ref; 0 <= ref ? j++ : j--){ results.push(j); }
      return results;
    }).apply(this).map(function(frameIndex) {
      return Decoder.decodeFrame(reader, frameIndex);
    });
  };

  Decoder.decodeFramesAsync = function(reader) {
    var concurrency, j, ref, results;
    return Promise.map((function() {
      results = [];
      for (var j = 0, ref = reader.numFrames(); 0 <= ref ? j < ref : j > ref; 0 <= ref ? j++ : j--){ results.push(j); }
      return results;
    }).apply(this), (function(i) {
      return Decoder.decodeFrame(reader, i);
    }), concurrency = 1);
  };

  Decoder.decodeFrame = function(reader, frameIndex) {
    var frameInfo;
    frameInfo = reader.frameInfo(frameIndex);
    frameInfo.pixels = new Uint8ClampedArray(reader.width * reader.height * 4);
    reader.decodeAndBlitFrameRGBA(frameIndex, frameInfo.pixels);
    return frameInfo;
  };

  return Decoder;

})();

Animator = (function() {

  /*---
  head : 'animator::createBufferCanvas()'
  text :
    - >
      Creates a buffer canvas element since it is much faster
      to call <b>.putImage()</b> than <b>.putImageData()</b>.
    - >
      The omggif library decodes the pixels into the full gif
      dimensions. We only need to store the frame dimensions,
      so we offset the putImageData call.
  args :
    frame  : A frame of the GIF (from the omggif library)
    width  : width of the GIF (not the frame)
    height : height of the GIF
  return : A <canvas> element containing the frame's image.
   */
  Animator.createBufferCanvas = function(frame, width, height) {
    var bufferCanvas, bufferContext, imageData;
    bufferCanvas = document.createElement('canvas');
    bufferContext = bufferCanvas.getContext('2d');
    bufferCanvas.width = frame.width;
    bufferCanvas.height = frame.height;
    imageData = bufferContext.createImageData(width, height);
    imageData.data.set(frame.pixels);
    bufferContext.putImageData(imageData, -frame.x, -frame.y);
    return bufferCanvas;
  };

  function Animator(_reader, _frames) {
    var ref;
    this._reader = _reader;
    this._frames = _frames;
    this._advanceFrame = bind(this._advanceFrame, this);
    this._nextFrameRender = bind(this._nextFrameRender, this);
    this._nextFrame = bind(this._nextFrame, this);
    ref = this._reader, this.width = ref.width, this.height = ref.height;
    this._loopCount = this._reader.loopCount();
    this._loops = 0;
    this._frameIndex = 0;
    this._running = false;
  }


  /*---
  head : 'animator.start()'
  text :
    - Starts running the GIF animation loop.
   */

  Animator.prototype.start = function() {
    this._lastTime = new Date().valueOf();
    this._delayCompensation = 0;
    this._running = true;
    setTimeout(this._nextFrame, 0);
    return this;
  };


  /*---
  head : 'animator.stop()'
  text :
    - Stops running the GIF animation loop.
   */

  Animator.prototype.stop = function() {
    this._running = false;
    return this;
  };


  /*---
  head : 'animator.reset()'
  text :
    - Resets the animation loop to the first frame.
    - Does not stop the animation from running.
   */

  Animator.prototype.reset = function() {
    this._frameIndex = 0;
    this._loops = 0;
    return this;
  };


  /*---
  head : 'animator.running()'
  return : A boolean indicating whether or not the animation is running.
   */

  Animator.prototype.running = function() {
    return this._running;
  };

  Animator.prototype._nextFrame = function() {
    requestAnimationFrame(this._nextFrameRender);
  };

  Animator.prototype._nextFrameRender = function() {
    var frame, ref;
    if (!this._running) {
      return;
    }
    frame = this._frames[this._frameIndex];
    if ((ref = this.onFrame) != null) {
      ref.apply(this, [frame, this._frameIndex]);
    }
    return this._enqueueNextFrame();
  };

  Animator.prototype._advanceFrame = function() {
    this._frameIndex += 1;
    if (this._frameIndex >= this._frames.length) {
      if (this._loopCount !== 0 && this._loopCount === this._loops) {
        this.stop();
      } else {
        this._frameIndex = 0;
        this._loops += 1;
      }
    }
  };

  Animator.prototype._enqueueNextFrame = function() {
    var actualDelay, delta, frame, frameDelay;
    this._advanceFrame();
    while (this._running) {
      frame = this._frames[this._frameIndex];
      delta = new Date().valueOf() - this._lastTime;
      this._lastTime += delta;
      this._delayCompensation += delta;
      frameDelay = frame.delay * 10;
      actualDelay = frameDelay - this._delayCompensation;
      this._delayCompensation -= frameDelay;
      if (actualDelay < 0) {
        this._advanceFrame();
        continue;
      } else {
        setTimeout(this._nextFrame, actualDelay);
        break;
      }
    }
  };


  /*---
  head : 'animator.animateInCanvas()'
  text :
    - >
      This method prepares the canvas to be drawn into and sets up
      the callbacks for each frame while the animation is running.
    - >
      To change how each frame is drawn into the canvas, override
      <b>animator.onDrawFrame()</b> before calling this method.
      If <b>animator.onDrawFrame()</b> is not set, we simply draw
      the frame directly into the canvas as is.
    - >
      You may also override <b>animator.onFrame()</b> before calling
      this method. onFrame handles the lazy construction of canvas
      buffers for each frame as well as the disposal method for each frame.
  args :
    canvas        : A canvas element.
    setDimensions : 'OPTIONAL. If true, the canvas width/height will be set to match the GIF. default: true.'
   */

  Animator.prototype.animateInCanvas = function(canvas, setDimensions) {
    var ctx;
    if (setDimensions == null) {
      setDimensions = true;
    }
    if (setDimensions) {
      canvas.width = this.width;
      canvas.height = this.height;
    }
    ctx = canvas.getContext('2d');
    if (this.onDrawFrame == null) {
      this.onDrawFrame = function(ctx, frame, i) {
        return ctx.drawImage(frame.buffer, frame.x, frame.y);
      };
    }
    if (this.onFrame == null) {
      this.onFrame = (function(_this) {
        return function(frame, i) {
          var ref, saved;
          if (frame.buffer == null) {
            frame.buffer = Animator.createBufferCanvas(frame, _this.width, _this.height);
          }
          if (typeof _this.disposeFrame === "function") {
            _this.disposeFrame();
          }
          switch (frame.disposal) {
            case 2:
              _this.disposeFrame = function() {
                return ctx.clearRect(0, 0, canvas.width, canvas.height);
              };
              break;
            case 3:
              saved = ctx.getImageData(0, 0, canvas.width, canvas.height);
              _this.disposeFrame = function() {
                return ctx.putImageData(saved, 0, 0);
              };
              break;
            default:
              _this.disposeFrame = null;
          }
          return (ref = _this.onDrawFrame) != null ? ref.apply(_this, [ctx, frame, i]) : void 0;
        };
      })(this);
    }
    this.start();
    return this;
  };

  return Animator;

})();

gifler.Gif = Gif;

gifler.Decoder = Decoder;

gifler.Animator = Animator;

if (typeof window !== "undefined" && window !== null) {
  window.gifler = gifler;
}

if (typeof module !== "undefined" && module !== null) {
  module.exports = gifler;
}

},{"bluebird":2,"omggif":4}],2:[function(require,module,exports){
(function (process,global){
/* @preserve
 * The MIT License (MIT)
 * 
 * Copyright (c) 2013-2015 Petka Antonov
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 * 
 */
/**
 * bluebird build version 3.0.2
 * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each
*/
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_=="function"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise) {
var SomePromiseArray = Promise._SomePromiseArray;
function any(promises) {
    var ret = new SomePromiseArray(promises);
    var promise = ret.promise();
    ret.setHowMany(1);
    ret.setUnwrap();
    ret.init();
    return promise;
}

Promise.any = function (promises) {
    return any(promises);
};

Promise.prototype.any = function () {
    return any(this);
};

};

},{}],2:[function(_dereq_,module,exports){
"use strict";
var firstLineError;
try {throw new Error(); } catch (e) {firstLineError = e;}
var schedule = _dereq_("./schedule");
var Queue = _dereq_("./queue");
var util = _dereq_("./util");

function Async() {
    this._isTickUsed = false;
    this._lateQueue = new Queue(16);
    this._normalQueue = new Queue(16);
    this._haveDrainedQueues = false;
    this._trampolineEnabled = true;
    var self = this;
    this.drainQueues = function () {
        self._drainQueues();
    };
    this._schedule =
        schedule.isStatic ? schedule(this.drainQueues) : schedule;
}

Async.prototype.disableTrampolineIfNecessary = function() {
    if (util.hasDevTools) {
        this._trampolineEnabled = false;
    }
};

Async.prototype.haveItemsQueued = function () {
    return this._isTickUsed || this._haveDrainedQueues;
};


Async.prototype.fatalError = function(e, isNode) {
    if (isNode) {
        process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e));
        process.exit(2);
    } else {
        this.throwLater(e);
    }
};

Async.prototype.throwLater = function(fn, arg) {
    if (arguments.length === 1) {
        arg = fn;
        fn = function () { throw arg; };
    }
    if (typeof setTimeout !== "undefined") {
        setTimeout(function() {
            fn(arg);
        }, 0);
    } else try {
        this._schedule(function() {
            fn(arg);
        });
    } catch (e) {
        throw new Error("No async scheduler available\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
    }
};

function AsyncInvokeLater(fn, receiver, arg) {
    this._lateQueue.push(fn, receiver, arg);
    this._queueTick();
}

function AsyncInvoke(fn, receiver, arg) {
    this._normalQueue.push(fn, receiver, arg);
    this._queueTick();
}

function AsyncSettlePromises(promise) {
    this._normalQueue._pushOne(promise);
    this._queueTick();
}

if (!util.hasDevTools) {
    Async.prototype.invokeLater = AsyncInvokeLater;
    Async.prototype.invoke = AsyncInvoke;
    Async.prototype.settlePromises = AsyncSettlePromises;
} else {
    if (schedule.isStatic) {
        schedule = function(fn) { setTimeout(fn, 0); };
    }
    Async.prototype.invokeLater = function (fn, receiver, arg) {
        if (this._trampolineEnabled) {
            AsyncInvokeLater.call(this, fn, receiver, arg);
        } else {
            this._schedule(function() {
                setTimeout(function() {
                    fn.call(receiver, arg);
                }, 100);
            });
        }
    };

    Async.prototype.invoke = function (fn, receiver, arg) {
        if (this._trampolineEnabled) {
            AsyncInvoke.call(this, fn, receiver, arg);
        } else {
            this._schedule(function() {
                fn.call(receiver, arg);
            });
        }
    };

    Async.prototype.settlePromises = function(promise) {
        if (this._trampolineEnabled) {
            AsyncSettlePromises.call(this, promise);
        } else {
            this._schedule(function() {
                promise._settlePromises();
            });
        }
    };
}

Async.prototype.invokeFirst = function (fn, receiver, arg) {
    this._normalQueue.unshift(fn, receiver, arg);
    this._queueTick();
};

Async.prototype._drainQueue = function(queue) {
    while (queue.length() > 0) {
        var fn = queue.shift();
        if (typeof fn !== "function") {
            fn._settlePromises();
            continue;
        }
        var receiver = queue.shift();
        var arg = queue.shift();
        fn.call(receiver, arg);
    }
};

Async.prototype._drainQueues = function () {
    this._drainQueue(this._normalQueue);
    this._reset();
    this._haveDrainedQueues = true;
    this._drainQueue(this._lateQueue);
};

Async.prototype._queueTick = function () {
    if (!this._isTickUsed) {
        this._isTickUsed = true;
        this._schedule(this.drainQueues);
    }
};

Async.prototype._reset = function () {
    this._isTickUsed = false;
};

module.exports = Async;
module.exports.firstLineError = firstLineError;

},{"./queue":26,"./schedule":29,"./util":36}],3:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {
var calledBind = false;
var rejectThis = function(_, e) {
    this._reject(e);
};

var targetRejected = function(e, context) {
    context.promiseRejectionQueued = true;
    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
};

var bindingResolved = function(thisArg, context) {
    if (((this._bitField & 50397184) === 0)) {
        this._resolveCallback(context.target);
    }
};

var bindingRejected = function(e, context) {
    if (!context.promiseRejectionQueued) this._reject(e);
};

Promise.prototype.bind = function (thisArg) {
    if (!calledBind) {
        calledBind = true;
        Promise.prototype._propagateFrom = debug.propagateFromFunction();
        Promise.prototype._boundValue = debug.boundValueFunction();
    }
    var maybePromise = tryConvertToPromise(thisArg);
    var ret = new Promise(INTERNAL);
    ret._propagateFrom(this, 1);
    var target = this._target();
    ret._setBoundTo(maybePromise);
    if (maybePromise instanceof Promise) {
        var context = {
            promiseRejectionQueued: false,
            promise: ret,
            target: target,
            bindingPromise: maybePromise
        };
        target._then(INTERNAL, targetRejected, undefined, ret, context);
        maybePromise._then(
            bindingResolved, bindingRejected, undefined, ret, context);
        ret._setOnCancel(maybePromise);
    } else {
        ret._resolveCallback(target);
    }
    return ret;
};

Promise.prototype._setBoundTo = function (obj) {
    if (obj !== undefined) {
        this._bitField = this._bitField | 2097152;
        this._boundTo = obj;
    } else {
        this._bitField = this._bitField & (~2097152);
    }
};

Promise.prototype._isBound = function () {
    return (this._bitField & 2097152) === 2097152;
};

Promise.bind = function (thisArg, value) {
    return Promise.resolve(value).bind(thisArg);
};
};

},{}],4:[function(_dereq_,module,exports){
"use strict";
var old;
if (typeof Promise !== "undefined") old = Promise;
function noConflict() {
    try { if (Promise === bluebird) Promise = old; }
    catch (e) {}
    return bluebird;
}
var bluebird = _dereq_("./promise")();
bluebird.noConflict = noConflict;
module.exports = bluebird;

},{"./promise":22}],5:[function(_dereq_,module,exports){
"use strict";
var cr = Object.create;
if (cr) {
    var callerCache = cr(null);
    var getterCache = cr(null);
    callerCache[" size"] = getterCache[" size"] = 0;
}

module.exports = function(Promise) {
var util = _dereq_("./util");
var canEvaluate = util.canEvaluate;
var isIdentifier = util.isIdentifier;

var getMethodCaller;
var getGetter;
if (!true) {
var makeMethodCaller = function (methodName) {
    return new Function("ensureMethod", "                                    \n\
        return function(obj) {                                               \n\
            'use strict'                                                     \n\
            var len = this.length;                                           \n\
            ensureMethod(obj, 'methodName');                                 \n\
            switch(len) {                                                    \n\
                case 1: return obj.methodName(this[0]);                      \n\
                case 2: return obj.methodName(this[0], this[1]);             \n\
                case 3: return obj.methodName(this[0], this[1], this[2]);    \n\
                case 0: return obj.methodName();                             \n\
                default:                                                     \n\
                    return obj.methodName.apply(obj, this);                  \n\
            }                                                                \n\
        };                                                                   \n\
        ".replace(/methodName/g, methodName))(ensureMethod);
};

var makeGetter = function (propertyName) {
    return new Function("obj", "                                             \n\
        'use strict';                                                        \n\
        return obj.propertyName;                                             \n\
        ".replace("propertyName", propertyName));
};

var getCompiled = function(name, compiler, cache) {
    var ret = cache[name];
    if (typeof ret !== "function") {
        if (!isIdentifier(name)) {
            return null;
        }
        ret = compiler(name);
        cache[name] = ret;
        cache[" size"]++;
        if (cache[" size"] > 512) {
            var keys = Object.keys(cache);
            for (var i = 0; i < 256; ++i) delete cache[keys[i]];
            cache[" size"] = keys.length - 256;
        }
    }
    return ret;
};

getMethodCaller = function(name) {
    return getCompiled(name, makeMethodCaller, callerCache);
};

getGetter = function(name) {
    return getCompiled(name, makeGetter, getterCache);
};
}

function ensureMethod(obj, methodName) {
    var fn;
    if (obj != null) fn = obj[methodName];
    if (typeof fn !== "function") {
        var message = "Object " + util.classString(obj) + " has no method '" +
            util.toString(methodName) + "'";
        throw new Promise.TypeError(message);
    }
    return fn;
}

function caller(obj) {
    var methodName = this.pop();
    var fn = ensureMethod(obj, methodName);
    return fn.apply(obj, this);
}
Promise.prototype.call = function (methodName) {
    var args = [].slice.call(arguments, 1);;
    if (!true) {
        if (canEvaluate) {
            var maybeCaller = getMethodCaller(methodName);
            if (maybeCaller !== null) {
                return this._then(
                    maybeCaller, undefined, undefined, args, undefined);
            }
        }
    }
    args.push(methodName);
    return this._then(caller, undefined, undefined, args, undefined);
};

function namedGetter(obj) {
    return obj[this];
}
function indexedGetter(obj) {
    var index = +this;
    if (index < 0) index = Math.max(0, index + obj.length);
    return obj[index];
}
Promise.prototype.get = function (propertyName) {
    var isIndex = (typeof propertyName === "number");
    var getter;
    if (!isIndex) {
        if (canEvaluate) {
            var maybeGetter = getGetter(propertyName);
            getter = maybeGetter !== null ? maybeGetter : namedGetter;
        } else {
            getter = namedGetter;
        }
    } else {
        getter = indexedGetter;
    }
    return this._then(getter, undefined, undefined, propertyName, undefined);
};
};

},{"./util":36}],6:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise, PromiseArray, apiRejection, debug) {
var util = _dereq_("./util");
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;
var async = Promise._async;

Promise.prototype["break"] = Promise.prototype.cancel = function() {
    if (!debug.cancellation()) return this._warn("cancellation is disabled");

    var promise = this;
    var child = promise;
    while (promise.isCancellable()) {
        if (!promise._cancelBy(child)) {
            if (child._isFollowing()) {
                child._followee().cancel();
            } else {
                child._cancelBranched();
            }
            break;
        }

        var parent = promise._cancellationParent;
        if (parent == null || !parent.isCancellable()) {
            if (promise._isFollowing()) {
                promise._followee().cancel();
            } else {
                promise._cancelBranched();
            }
            break;
        } else {
            if (promise._isFollowing()) promise._followee().cancel();
            child = promise;
            promise = parent;
        }
    }
};

Promise.prototype._branchHasCancelled = function() {
    this._branchesRemainingToCancel--;
};

Promise.prototype._enoughBranchesHaveCancelled = function() {
    return this._branchesRemainingToCancel === undefined ||
           this._branchesRemainingToCancel <= 0;
};

Promise.prototype._cancelBy = function(canceller) {
    if (canceller === this) {
        this._branchesRemainingToCancel = 0;
        this._invokeOnCancel();
        return true;
    } else {
        this._branchHasCancelled();
        if (this._enoughBranchesHaveCancelled()) {
            this._invokeOnCancel();
            return true;
        }
    }
    return false;
};

Promise.prototype._cancelBranched = function() {
    if (this._enoughBranchesHaveCancelled()) {
        this._cancel();
    }
};

Promise.prototype._cancel = function() {
    if (!this.isCancellable()) return;

    this._setCancelled();
    async.invoke(this._cancelPromises, this, undefined);
};

Promise.prototype._cancelPromises = function() {
    if (this._length() > 0) this._settlePromises();
};

Promise.prototype._unsetOnCancel = function() {
    this._onCancelField = undefined;
};

Promise.prototype.isCancellable = function() {
    return this.isPending() && !this.isCancelled();
};

Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {
    if (util.isArray(onCancelCallback)) {
        for (var i = 0; i < onCancelCallback.length; ++i) {
            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);
        }
    } else if (onCancelCallback !== undefined) {
        if (typeof onCancelCallback === "function") {
            if (!internalOnly) {
                var e = tryCatch(onCancelCallback).call(this._boundValue());
                if (e === errorObj) {
                    this._attachExtraTrace(e.e);
                    async.throwLater(e.e);
                }
            }
        } else {
            onCancelCallback._resultCancelled(this);
        }
    }
};

Promise.prototype._invokeOnCancel = function() {
    var onCancelCallback = this._onCancel();
    this._unsetOnCancel();
    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);
};

Promise.prototype._invokeInternalOnCancel = function() {
    if (this.isCancellable()) {
        this._doInvokeOnCancel(this._onCancel(), true);
        this._unsetOnCancel();
    }
};

Promise.prototype._resultCancelled = function() {
    this.cancel();
};

};

},{"./util":36}],7:[function(_dereq_,module,exports){
"use strict";
module.exports = function(NEXT_FILTER) {
var util = _dereq_("./util");
var getKeys = _dereq_("./es5").keys;
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;

function catchFilter(instances, cb, promise) {
    return function(e) {
        var boundTo = promise._boundValue();
        predicateLoop: for (var i = 0; i < instances.length; ++i) {
            var item = instances[i];

            if (item === Error ||
                (item != null && item.prototype instanceof Error)) {
                if (e instanceof item) {
                    return tryCatch(cb).call(boundTo, e);
                }
            } else if (typeof item === "function") {
                var matchesPredicate = tryCatch(item).call(boundTo, e);
                if (matchesPredicate === errorObj) {
                    return matchesPredicate;
                } else if (matchesPredicate) {
                    return tryCatch(cb).call(boundTo, e);
                }
            } else if (util.isObject(e)) {
                var keys = getKeys(item);
                for (var j = 0; j < keys.length; ++j) {
                    var key = keys[j];
                    if (item[key] != e[key]) {
                        continue predicateLoop;
                    }
                }
                return tryCatch(cb).call(boundTo, e);
            }
        }
        return NEXT_FILTER;
    };
}

return catchFilter;
};

},{"./es5":13,"./util":36}],8:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise) {
var longStackTraces = false;
var contextStack = [];

Promise.prototype._promiseCreated = function() {};
Promise.prototype._pushContext = function() {};
Promise.prototype._popContext = function() {return 0;};
Promise._peekContext = Promise.prototype._peekContext = function() {};

function Context() {
    this._trace = new Context.CapturedTrace(peekContext());
}
Context.prototype._pushContext = function () {
    if (this._trace !== undefined) {
        this._trace._promisesCreated = 0;
        contextStack.push(this._trace);
    }
};

Context.prototype._popContext = function () {
    if (this._trace !== undefined) {
        var trace = contextStack.pop();
        var ret = trace._promisesCreated;
        trace._promisesCreated = 0;
        return ret;
    }
    return 0;
};

function createContext() {
    if (longStackTraces) return new Context();
}

function peekContext() {
    var lastIndex = contextStack.length - 1;
    if (lastIndex >= 0) {
        return contextStack[lastIndex];
    }
    return undefined;
}
Context.CapturedTrace = null;
Context.create = createContext;
Context.activateLongStackTraces = function() {
    longStackTraces = true;
    Promise.prototype._pushContext = Context.prototype._pushContext;
    Promise.prototype._popContext = Context.prototype._popContext;
    Promise._peekContext = Promise.prototype._peekContext = peekContext;
    Promise.prototype._promiseCreated = function() {
        var ctx = this._peekContext();
        if (ctx) ctx._promisesCreated++;
    };
};
return Context;
};

},{}],9:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise, Context) {
var getDomain = Promise._getDomain;
var async = Promise._async;
var Warning = _dereq_("./errors").Warning;
var util = _dereq_("./util");
var canAttachTrace = util.canAttachTrace;
var unhandledRejectionHandled;
var possiblyUnhandledRejection;
var bluebirdFramePattern =
    /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/;
var stackFramePattern = null;
var formatStack = null;
var indentStackFrames = false;
var printWarning;
var debugging =!!(true || util.env("BLUEBIRD_DEBUG") ||
                               util.env("NODE_ENV") === "development");
var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
    (debugging || util.env("BLUEBIRD_WARNINGS")));
var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
    (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));

Promise.prototype.suppressUnhandledRejections = function() {
    var target = this._target();
    target._bitField = ((target._bitField & (~1048576)) |
                      2097152);
};

Promise.prototype._ensurePossibleRejectionHandled = function () {
    if ((this._bitField & 2097152) !== 0) return;
    this._setRejectionIsUnhandled();
    async.invokeLater(this._notifyUnhandledRejection, this, undefined);
};

Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
    fireRejectionEvent("rejectionHandled",
                                  unhandledRejectionHandled, undefined, this);
};

Promise.prototype._notifyUnhandledRejection = function () {
    if (this._isRejectionUnhandled()) {
        var reason = this._settledValue();
        this._setUnhandledRejectionIsNotified();
        fireRejectionEvent("unhandledRejection",
                                      possiblyUnhandledRejection, reason, this);
    }
};

Promise.prototype._setUnhandledRejectionIsNotified = function () {
    this._bitField = this._bitField | 262144;
};

Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
    this._bitField = this._bitField & (~262144);
};

Promise.prototype._isUnhandledRejectionNotified = function () {
    return (this._bitField & 262144) > 0;
};

Promise.prototype._setRejectionIsUnhandled = function () {
    this._bitField = this._bitField | 1048576;
};

Promise.prototype._unsetRejectionIsUnhandled = function () {
    this._bitField = this._bitField & (~1048576);
    if (this._isUnhandledRejectionNotified()) {
        this._unsetUnhandledRejectionIsNotified();
        this._notifyUnhandledRejectionIsHandled();
    }
};

Promise.prototype._isRejectionUnhandled = function () {
    return (this._bitField & 1048576) > 0;
};

Promise.prototype._warn = function(message, shouldUseOwnTrace) {
    return warn(message, shouldUseOwnTrace, this);
};

Promise.onPossiblyUnhandledRejection = function (fn) {
    var domain = getDomain();
    possiblyUnhandledRejection =
        typeof fn === "function" ? (domain === null ? fn : domain.bind(fn))
                                 : undefined;
};

Promise.onUnhandledRejectionHandled = function (fn) {
    var domain = getDomain();
    unhandledRejectionHandled =
        typeof fn === "function" ? (domain === null ? fn : domain.bind(fn))
                                 : undefined;
};

Promise.longStackTraces = function () {
    if (async.haveItemsQueued() && !config.longStackTraces) {
        throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
    }
    if (!config.longStackTraces && longStackTracesIsSupported()) {
        config.longStackTraces = true;
        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;
        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;
        Context.activateLongStackTraces();
        async.disableTrampolineIfNecessary();
    }
};

Promise.hasLongStackTraces = function () {
    return config.longStackTraces && longStackTracesIsSupported();
};

Promise.config = function(opts) {
    opts = Object(opts);
    if ("longStackTraces" in opts && opts.longStackTraces) {
        Promise.longStackTraces();
    }
    if ("warnings" in opts) {
        config.warnings = !!opts.warnings;
    }
    if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
        if (async.haveItemsQueued()) {
            throw new Error(
                "cannot enable cancellation after promises are in use");
        }
        Promise.prototype._clearCancellationData =
            cancellationClearCancellationData;
        Promise.prototype._propagateFrom = cancellationPropagateFrom;
        Promise.prototype._onCancel = cancellationOnCancel;
        Promise.prototype._setOnCancel = cancellationSetOnCancel;
        Promise.prototype._attachCancellationCallback =
            cancellationAttachCancellationCallback;
        Promise.prototype._execute = cancellationExecute;
        propagateFromFunction = cancellationPropagateFrom;
        config.cancellation = true;
    }
};

Promise.prototype._execute = function(executor, resolve, reject) {
    try {
        executor(resolve, reject);
    } catch (e) {
        return e;
    }
};
Promise.prototype._onCancel = function () {};
Promise.prototype._setOnCancel = function (handler) { ; };
Promise.prototype._attachCancellationCallback = function(onCancel) {
    ;
};
Promise.prototype._captureStackTrace = function () {};
Promise.prototype._attachExtraTrace = function () {};
Promise.prototype._clearCancellationData = function() {};
Promise.prototype._propagateFrom = function (parent, flags) {
    ;
    ;
};

function cancellationExecute(executor, resolve, reject) {
    var promise = this;
    try {
        executor(resolve, reject, function(onCancel) {
            if (typeof onCancel !== "function") {
                throw new TypeError("onCancel must be a function, got: " +
                                    util.toString(onCancel));
            }
            promise._attachCancellationCallback(onCancel);
        });
    } catch (e) {
        return e;
    }
}

function cancellationAttachCancellationCallback(onCancel) {
    if (!this.isCancellable()) return this;

    var previousOnCancel = this._onCancel();
    if (previousOnCancel !== undefined) {
        if (util.isArray(previousOnCancel)) {
            previousOnCancel.push(onCancel);
        } else {
            this._setOnCancel([previousOnCancel, onCancel]);
        }
    } else {
        this._setOnCancel(onCancel);
    }
}

function cancellationOnCancel() {
    return this._onCancelField;
}

function cancellationSetOnCancel(onCancel) {
    this._onCancelField = onCancel;
}

function cancellationClearCancellationData() {
    this._cancellationParent = undefined;
    this._onCancelField = undefined;
}

function cancellationPropagateFrom(parent, flags) {
    if ((flags & 1) !== 0) {
        this._cancellationParent = parent;
        var branchesRemainingToCancel = parent._branchesRemainingToCancel;
        if (branchesRemainingToCancel === undefined) {
            branchesRemainingToCancel = 0;
        }
        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;
    }
    if ((flags & 2) !== 0 && parent._isBound()) {
        this._setBoundTo(parent._boundTo);
    }
}

function bindingPropagateFrom(parent, flags) {
    if ((flags & 2) !== 0 && parent._isBound()) {
        this._setBoundTo(parent._boundTo);
    }
}
var propagateFromFunction = bindingPropagateFrom;

function boundValueFunction() {
    var ret = this._boundTo;
    if (ret !== undefined) {
        if (ret instanceof Promise) {
            if (ret.isFulfilled()) {
                return ret.value();
            } else {
                return undefined;
            }
        }
    }
    return ret;
}

function longStackTracesCaptureStackTrace() {
    this._trace = new CapturedTrace(this._peekContext());
}

function longStackTracesAttachExtraTrace(error, ignoreSelf) {
    if (canAttachTrace(error)) {
        var trace = this._trace;
        if (trace !== undefined) {
            if (ignoreSelf) trace = trace._parent;
        }
        if (trace !== undefined) {
            trace.attachExtraTrace(error);
        } else if (!error.__stackCleaned__) {
            var parsed = parseStackAndMessage(error);
            util.notEnumerableProp(error, "stack",
                parsed.message + "\n" + parsed.stack.join("\n"));
            util.notEnumerableProp(error, "__stackCleaned__", true);
        }
    }
}

function checkForgottenReturns(returnValue, promisesCreated, name, promise) {
    if (returnValue === undefined &&
        promisesCreated > 0 &&
        config.longStackTraces &&
        config.warnings) {
        var msg = "a promise was created in a " + name +
            " handler but was not returned from it";
        promise._warn(msg);
    }
}

function deprecated(name, replacement) {
    var message = name +
        " is deprecated and will be removed in a future version.";
    if (replacement) message += " Use " + replacement + " instead.";
    return warn(message);
}

function warn(message, shouldUseOwnTrace, promise) {
    if (!config.warnings) return;
    var warning = new Warning(message);
    var ctx;
    if (shouldUseOwnTrace) {
        promise._attachExtraTrace(warning);
    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {
        ctx.attachExtraTrace(warning);
    } else {
        var parsed = parseStackAndMessage(warning);
        warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
    }
    formatAndLogError(warning, "", true);
}

function reconstructStack(message, stacks) {
    for (var i = 0; i < stacks.length - 1; ++i) {
        stacks[i].push("From previous event:");
        stacks[i] = stacks[i].join("\n");
    }
    if (i < stacks.length) {
        stacks[i] = stacks[i].join("\n");
    }
    return message + "\n" + stacks.join("\n");
}

function removeDuplicateOrEmptyJumps(stacks) {
    for (var i = 0; i < stacks.length; ++i) {
        if (stacks[i].length === 0 ||
            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
            stacks.splice(i, 1);
            i--;
        }
    }
}

function removeCommonRoots(stacks) {
    var current = stacks[0];
    for (var i = 1; i < stacks.length; ++i) {
        var prev = stacks[i];
        var currentLastIndex = current.length - 1;
        var currentLastLine = current[currentLastIndex];
        var commonRootMeetPoint = -1;

        for (var j = prev.length - 1; j >= 0; --j) {
            if (prev[j] === currentLastLine) {
                commonRootMeetPoint = j;
                break;
            }
        }

        for (var j = commonRootMeetPoint; j >= 0; --j) {
            var line = prev[j];
            if (current[currentLastIndex] === line) {
                current.pop();
                currentLastIndex--;
            } else {
                break;
            }
        }
        current = prev;
    }
}

function cleanStack(stack) {
    var ret = [];
    for (var i = 0; i < stack.length; ++i) {
        var line = stack[i];
        var isTraceLine = "    (No stack trace)" === line ||
            stackFramePattern.test(line);
        var isInternalFrame = isTraceLine && shouldIgnore(line);
        if (isTraceLine && !isInternalFrame) {
            if (indentStackFrames && line.charAt(0) !== " ") {
                line = "    " + line;
            }
            ret.push(line);
        }
    }
    return ret;
}

function stackFramesAsArray(error) {
    var stack = error.stack.replace(/\s+$/g, "").split("\n");
    for (var i = 0; i < stack.length; ++i) {
        var line = stack[i];
        if ("    (No stack trace)" === line || stackFramePattern.test(line)) {
            break;
        }
    }
    if (i > 0) {
        stack = stack.slice(i);
    }
    return stack;
}

function parseStackAndMessage(error) {
    var stack = error.stack;
    var message = error.toString();
    stack = typeof stack === "string" && stack.length > 0
                ? stackFramesAsArray(error) : ["    (No stack trace)"];
    return {
        message: message,
        stack: cleanStack(stack)
    };
}

function formatAndLogError(error, title, isSoft) {
    if (typeof console !== "undefined") {
        var message;
        if (util.isObject(error)) {
            var stack = error.stack;
            message = title + formatStack(stack, error);
        } else {
            message = title + String(error);
        }
        if (typeof printWarning === "function") {
            printWarning(message, isSoft);
        } else if (typeof console.log === "function" ||
            typeof console.log === "object") {
            console.log(message);
        }
    }
}

function fireRejectionEvent(name, localHandler, reason, promise) {
    var localEventFired = false;
    try {
        if (typeof localHandler === "function") {
            localEventFired = true;
            if (name === "rejectionHandled") {
                localHandler(promise);
            } else {
                localHandler(reason, promise);
            }
        }
    } catch (e) {
        async.throwLater(e);
    }

    var globalEventFired = false;
    try {
        globalEventFired = fireGlobalEvent(name, reason, promise);
    } catch (e) {
        globalEventFired = true;
        async.throwLater(e);
    }

    var domEventFired = false;
    if (fireDomEvent) {
        try {
            domEventFired = fireDomEvent(name.toLowerCase(), {
                reason: reason,
                promise: promise
            });
        } catch (e) {
            domEventFired = true;
            async.throwLater(e);
        }
    }

    if (!globalEventFired && !localEventFired && !domEventFired &&
        name === "unhandledRejection") {
        formatAndLogError(reason, "Unhandled rejection ");
    }
}

function formatNonError(obj) {
    var str;
    if (typeof obj === "function") {
        str = "[function " +
            (obj.name || "anonymous") +
            "]";
    } else {
        str = obj && typeof obj.toString === "function"
            ? obj.toString() : util.toString(obj);
        var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;
        if (ruselessToString.test(str)) {
            try {
                var newStr = JSON.stringify(obj);
                str = newStr;
            }
            catch(e) {

            }
        }
        if (str.length === 0) {
            str = "(empty array)";
        }
    }
    return ("(<" + snip(str) + ">, no stack trace)");
}

function snip(str) {
    var maxChars = 41;
    if (str.length < maxChars) {
        return str;
    }
    return str.substr(0, maxChars - 3) + "...";
}

function longStackTracesIsSupported() {
    return typeof captureStackTrace === "function";
}

var shouldIgnore = function() { return false; };
var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
function parseLineInfo(line) {
    var matches = line.match(parseLineInfoRegex);
    if (matches) {
        return {
            fileName: matches[1],
            line: parseInt(matches[2], 10)
        };
    }
}

function setBounds(firstLineError, lastLineError) {
    if (!longStackTracesIsSupported()) return;
    var firstStackLines = firstLineError.stack.split("\n");
    var lastStackLines = lastLineError.stack.split("\n");
    var firstIndex = -1;
    var lastIndex = -1;
    var firstFileName;
    var lastFileName;
    for (var i = 0; i < firstStackLines.length; ++i) {
        var result = parseLineInfo(firstStackLines[i]);
        if (result) {
            firstFileName = result.fileName;
            firstIndex = result.line;
            break;
        }
    }
    for (var i = 0; i < lastStackLines.length; ++i) {
        var result = parseLineInfo(lastStackLines[i]);
        if (result) {
            lastFileName = result.fileName;
            lastIndex = result.line;
            break;
        }
    }
    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
        firstFileName !== lastFileName || firstIndex >= lastIndex) {
        return;
    }

    shouldIgnore = function(line) {
        if (bluebirdFramePattern.test(line)) return true;
        var info = parseLineInfo(line);
        if (info) {
            if (info.fileName === firstFileName &&
                (firstIndex <= info.line && info.line <= lastIndex)) {
                return true;
            }
        }
        return false;
    };
}

function CapturedTrace(parent) {
    this._parent = parent;
    this._promisesCreated = 0;
    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
    captureStackTrace(this, CapturedTrace);
    if (length > 32) this.uncycle();
}
util.inherits(CapturedTrace, Error);
Context.CapturedTrace = CapturedTrace;

CapturedTrace.prototype.uncycle = function() {
    var length = this._length;
    if (length < 2) return;
    var nodes = [];
    var stackToIndex = {};

    for (var i = 0, node = this; node !== undefined; ++i) {
        nodes.push(node);
        node = node._parent;
    }
    length = this._length = i;
    for (var i = length - 1; i >= 0; --i) {
        var stack = nodes[i].stack;
        if (stackToIndex[stack] === undefined) {
            stackToIndex[stack] = i;
        }
    }
    for (var i = 0; i < length; ++i) {
        var currentStack = nodes[i].stack;
        var index = stackToIndex[currentStack];
        if (index !== undefined && index !== i) {
            if (index > 0) {
                nodes[index - 1]._parent = undefined;
                nodes[index - 1]._length = 1;
            }
            nodes[i]._parent = undefined;
            nodes[i]._length = 1;
            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;

            if (index < length - 1) {
                cycleEdgeNode._parent = nodes[index + 1];
                cycleEdgeNode._parent.uncycle();
                cycleEdgeNode._length =
                    cycleEdgeNode._parent._length + 1;
            } else {
                cycleEdgeNode._parent = undefined;
                cycleEdgeNode._length = 1;
            }
            var currentChildLength = cycleEdgeNode._length + 1;
            for (var j = i - 2; j >= 0; --j) {
                nodes[j]._length = currentChildLength;
                currentChildLength++;
            }
            return;
        }
    }
};

CapturedTrace.prototype.attachExtraTrace = function(error) {
    if (error.__stackCleaned__) return;
    this.uncycle();
    var parsed = parseStackAndMessage(error);
    var message = parsed.message;
    var stacks = [parsed.stack];

    var trace = this;
    while (trace !== undefined) {
        stacks.push(cleanStack(trace.stack.split("\n")));
        trace = trace._parent;
    }
    removeCommonRoots(stacks);
    removeDuplicateOrEmptyJumps(stacks);
    util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
    util.notEnumerableProp(error, "__stackCleaned__", true);
};

var captureStackTrace = (function stackDetection() {
    var v8stackFramePattern = /^\s*at\s*/;
    var v8stackFormatter = function(stack, error) {
        if (typeof stack === "string") return stack;

        if (error.name !== undefined &&
            error.message !== undefined) {
            return error.toString();
        }
        return formatNonError(error);
    };

    if (typeof Error.stackTraceLimit === "number" &&
        typeof Error.captureStackTrace === "function") {
        Error.stackTraceLimit += 6;
        stackFramePattern = v8stackFramePattern;
        formatStack = v8stackFormatter;
        var captureStackTrace = Error.captureStackTrace;

        shouldIgnore = function(line) {
            return bluebirdFramePattern.test(line);
        };
        return function(receiver, ignoreUntil) {
            Error.stackTraceLimit += 6;
            captureStackTrace(receiver, ignoreUntil);
            Error.stackTraceLimit -= 6;
        };
    }
    var err = new Error();

    if (typeof err.stack === "string" &&
        err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
        stackFramePattern = /@/;
        formatStack = v8stackFormatter;
        indentStackFrames = true;
        return function captureStackTrace(o) {
            o.stack = new Error().stack;
        };
    }

    var hasStackAfterThrow;
    try { throw new Error(); }
    catch(e) {
        hasStackAfterThrow = ("stack" in e);
    }
    if (!("stack" in err) && hasStackAfterThrow &&
        typeof Error.stackTraceLimit === "number") {
        stackFramePattern = v8stackFramePattern;
        formatStack = v8stackFormatter;
        return function captureStackTrace(o) {
            Error.stackTraceLimit += 6;
            try { throw new Error(); }
            catch(e) { o.stack = e.stack; }
            Error.stackTraceLimit -= 6;
        };
    }

    formatStack = function(stack, error) {
        if (typeof stack === "string") return stack;

        if ((typeof error === "object" ||
            typeof error === "function") &&
            error.name !== undefined &&
            error.message !== undefined) {
            return error.toString();
        }
        return formatNonError(error);
    };

    return null;

})([]);

var fireDomEvent;
var fireGlobalEvent = (function() {
    if (util.isNode) {
        return function(name, reason, promise) {
            if (name === "rejectionHandled") {
                return process.emit(name, promise);
            } else {
                return process.emit(name, reason, promise);
            }
        };
    } else {
        var customEventWorks = false;
        var anyEventWorks = true;
        try {
            var ev = new self.CustomEvent("test");
            customEventWorks = ev instanceof CustomEvent;
        } catch (e) {}
        if (!customEventWorks) {
            try {
                var event = document.createEvent("CustomEvent");
                event.initCustomEvent("testingtheevent", false, true, {});
                self.dispatchEvent(event);
            } catch (e) {
                anyEventWorks = false;
            }
        }
        if (anyEventWorks) {
            fireDomEvent = function(type, detail) {
                var event;
                if (customEventWorks) {
                    event = new self.CustomEvent(type, {
                        detail: detail,
                        bubbles: false,
                        cancelable: true
                    });
                } else if (self.dispatchEvent) {
                    event = document.createEvent("CustomEvent");
                    event.initCustomEvent(type, false, true, detail);
                }

                return event ? !self.dispatchEvent(event) : false;
            };
        }

        var toWindowMethodNameMap = {};
        toWindowMethodNameMap["unhandledRejection"] = ("on" +
            "unhandledRejection").toLowerCase();
        toWindowMethodNameMap["rejectionHandled"] = ("on" +
            "rejectionHandled").toLowerCase();

        return function(name, reason, promise) {
            var methodName = toWindowMethodNameMap[name];
            var method = self[methodName];
            if (!method) return false;
            if (name === "rejectionHandled") {
                method.call(self, promise);
            } else {
                method.call(self, reason, promise);
            }
            return true;
        };
    }
})();

if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
    printWarning = function (message) {
        console.warn(message);
    };
    if (util.isNode && process.stderr.isTTY) {
        printWarning = function(message, isSoft) {
            var color = isSoft ? "\u001b[33m" : "\u001b[31m";
            process.stderr.write(color + message + "\u001b[0m\n");
        };
    } else if (!util.isNode && typeof (new Error().stack) === "string") {
        printWarning = function(message, isSoft) {
            console.warn("%c" + message,
                        isSoft ? "color: darkorange" : "color: red");
        };
    }
}

var config = {
    warnings: warnings,
    longStackTraces: false,
    cancellation: false
};

if (longStackTraces) Promise.longStackTraces();

return {
    longStackTraces: function() {
        return config.longStackTraces;
    },
    warnings: function() {
        return config.warnings;
    },
    cancellation: function() {
        return config.cancellation;
    },
    propagateFromFunction: function() {
        return propagateFromFunction;
    },
    boundValueFunction: function() {
        return boundValueFunction;
    },
    checkForgottenReturns: checkForgottenReturns,
    setBounds: setBounds,
    warn: warn,
    deprecated: deprecated,
    CapturedTrace: CapturedTrace
};
};

},{"./errors":12,"./util":36}],10:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise) {
function returner() {
    return this.value;
}
function thrower() {
    throw this.reason;
}

Promise.prototype["return"] =
Promise.prototype.thenReturn = function (value) {
    if (value instanceof Promise) value.suppressUnhandledRejections();
    return this._then(
        returner, undefined, undefined, {value: value}, undefined);
};

Promise.prototype["throw"] =
Promise.prototype.thenThrow = function (reason) {
    return this._then(
        thrower, undefined, undefined, {reason: reason}, undefined);
};

Promise.prototype.catchThrow = function (reason) {
    if (arguments.length <= 1) {
        return this._then(
            undefined, thrower, undefined, {reason: reason}, undefined);
    } else {
        var _reason = arguments[1];
        var handler = function() {throw _reason;};
        return this.caught(reason, handler);
    }
};

Promise.prototype.catchReturn = function (value) {
    if (arguments.length <= 1) {
        if (value instanceof Promise) value.suppressUnhandledRejections();
        return this._then(
            undefined, returner, undefined, {value: value}, undefined);
    } else {
        var _value = arguments[1];
        if (_value instanceof Promise) _value.suppressUnhandledRejections();
        var handler = function() {return _value;};
        return this.caught(value, handler);
    }
};
};

},{}],11:[function(_dereq_,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL) {
var PromiseReduce = Promise.reduce;
var PromiseAll = Promise.all;

function promiseAllThis() {
    return PromiseAll(this);
}

function PromiseMapSeries(promises, fn) {
    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);
}

Promise.prototype.each = function (fn) {
    return this.mapSeries(fn)
            ._then(promiseAllThis, undefined, undefined, this, undefined);
};

Promise.prototype.mapSeries = function (fn) {
    return PromiseReduce(this, fn, INTERNAL, INTERNAL);
};

Promise.each = function (promises, fn) {
    return PromiseMapSeries(promises, fn)
            ._then(promiseAllThis, undefined, undefined, promises, undefined);
};

Promise.mapSeries = PromiseMapSeries;
};

},{}],12:[function(_dereq_,module,exports){
"use strict";
var es5 = _dereq_("./es5");
var Objectfreeze = es5.freeze;
var util = _dereq_("./util");
var inherits = util.inherits;
var notEnumerableProp = util.notEnumerableProp;

function subError(nameProperty, defaultMessage) {
    function SubError(message) {
        if (!(this instanceof SubError)) return new SubError(message);
        notEnumerableProp(this, "message",
            typeof message === "string" ? message : defaultMessage);
        notEnumerableProp(this, "name", nameProperty);
        if (Error.captureStackTrace) {
            Error.captureStackTrace(this, this.constructor);
        } else {
            Error.call(this);
        }
    }
    inherits(SubError, Error);
    return SubError;
}

var _TypeError, _RangeError;
var Warning = subError("Warning", "warning");
var CancellationError = subError("CancellationError", "cancellation error");
var TimeoutError = subError("TimeoutError", "timeout error");
var AggregateError = subError("AggregateError", "aggregate error");
try {
    _TypeError = TypeError;
    _RangeError = RangeError;
} catch(e) {
    _TypeError = subError("TypeError", "type error");
    _RangeError = subError("RangeError", "range error");
}

var methods = ("join pop push shift unshift slice filter forEach some " +
    "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" ");

for (var i = 0; i < methods.length; ++i) {
    if (typeof Array.prototype[methods[i]] === "function") {
        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];
    }
}

es5.defineProperty(AggregateError.prototype, "length", {
    value: 0,
    configurable: false,
    writable: true,
    enumerable: true
});
AggregateError.prototype["isOperational"] = true;
var level = 0;
AggregateError.prototype.toString = function() {
    var indent = Array(level * 4 + 1).join(" ");
    var ret = "\n" + indent + "AggregateError of:" + "\n";
    level++;
    indent = Array(level * 4 + 1).join(" ");
    for (var i = 0; i < this.length; ++i) {
        var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "";
        var lines = str.split("\n");
        for (var j = 0; j < lines.length; ++j) {
            lines[j] = indent + lines[j];
        }
        str = lines.join("\n");
        ret += str + "\n";
    }
    level--;
    return ret;
};

function OperationalError(message) {
    if (!(this instanceof OperationalError))
        return new OperationalError(message);
    notEnumerableProp(this, "name", "OperationalError");
    notEnumerableProp(this, "message", message);
    this.cause = message;
    this["isOperational"] = true;

    if (message instanceof Error) {
        notEnumerableProp(this, "message", message.message);
        notEnumerableProp(this, "stack", message.stack);
    } else if (Error.captureStackTrace) {
        Error.captureStackTrace(this, this.constructor);
    }

}
inherits(OperationalError, Error);

var errorTypes = Error["__BluebirdErrorTypes__"];
if (!errorTypes) {
    errorTypes = Objectfreeze({
        CancellationError: CancellationError,
        TimeoutError: TimeoutError,
        OperationalError: OperationalError,
        RejectionError: OperationalError,
        AggregateError: AggregateError
    });
    notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes);
}

module.exports = {
    Error: Error,
    TypeError: _TypeError,
    RangeError: _RangeError,
    CancellationError: errorTypes.CancellationError,
    OperationalError: errorTypes.OperationalError,
    TimeoutError: errorTypes.TimeoutError,
    AggregateError: errorTypes.AggregateError,
    Warning: Warning
};

},{"./es5":13,"./util":36}],13:[function(_dereq_,module,exports){
var isES5 = (function(){
    "use strict";
    return this === undefined;
})();

if (isES5) {
    module.exports = {
        freeze: Object.freeze,
        defineProperty: Object.defineProperty,
        getDescriptor: Object.getOwnPropertyDescriptor,
        keys: Object.keys,
        names: Object.getOwnPropertyNames,
        getPrototypeOf: Object.getPrototypeOf,
        isArray: Array.isArray,
        isES5: isES5,
        propertyIsWritable: function(obj, prop) {
            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
            return !!(!descriptor || descriptor.writable || descriptor.set);
        }
    };
} else {
    var has = {}.hasOwnProperty;
    var str = {}.toString;
    var proto = {}.constructor.prototype;

    var ObjectKeys = function (o) {
        var ret = [];
        for (var key in o) {
            if (has.call(o, key)) {
                ret.push(key);
            }
        }
        return ret;
    };

    var ObjectGetDescriptor = function(o, key) {
Download .txt
gitextract_7a1xagvw/

├── .gitignore
├── README.md
├── gh-pages/
│   ├── assets/
│   │   ├── gifler.js
│   │   └── lib/
│   │       ├── highlight.pack.js
│   │       └── monokai_sublime.css
│   ├── docs.css
│   ├── docs.html
│   ├── examples.css
│   ├── examples.html
│   ├── index.css
│   ├── index.html
│   └── theme.css
├── gifler.bare.js
├── gifler.bundle.js
├── metalsmith.json
├── package.json
├── site/
│   ├── _constants.less
│   ├── _examples/
│   │   ├── control.js
│   │   ├── rainbow.js
│   │   └── simple.js
│   ├── _layout.jade
│   ├── _nav.jade
│   ├── assets/
│   │   ├── gifler.js
│   │   └── lib/
│   │       ├── highlight.pack.js
│   │       └── monokai_sublime.css
│   ├── docs.jade
│   ├── docs.less
│   ├── examples.jade
│   ├── examples.less
│   ├── index.jade
│   ├── index.less
│   └── theme.less
└── src/
    └── gifler.coffee
Download .txt
SYMBOL INDEX (469 symbols across 7 files)

FILE: gh-pages/assets/gifler.js
  function i (line 2) | function i(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof require&&re...
  function t (line 2) | function t(t){this._animatorPromise=t.then(function(t){var e;return e=ne...
  function t (line 2) | function t(){}
  function t (line 2) | function t(t,e){var n;this._reader=t,this._frames=e,this._advanceFrame=c...
  function i (line 2) | function i(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof _dereq_&&_d...
  function e (line 2) | function e(t){var e=new n(t),r=e.promise();return e.setHowMany(1),e.setU...
  function i (line 2) | function i(){this._isTickUsed=!1,this._lateQueue=new l(16),this._normalQ...
  function o (line 2) | function o(t,e,n){this._lateQueue.push(t,e,n),this._queueTick()}
  function s (line 2) | function s(t,e,n){this._normalQueue.push(t,e,n),this._queueTick()}
  function a (line 2) | function a(t){this._normalQueue._pushOne(t),this._queueTick()}
  function r (line 2) | function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}
  function n (line 2) | function n(t,n){var r;if(null!=t&&(r=t[n]),"function"!=typeof r){var i="...
  function r (line 2) | function r(t){var e=this.pop(),r=n(t,e);return r.apply(t,this)}
  function i (line 2) | function i(t){return t[this]}
  function o (line 2) | function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}
  function n (line 2) | function n(t,n,a){return function(u){var c=a._boundValue();t:for(var l=0...
  function e (line 2) | function e(){this._trace=new e.CapturedTrace(r())}
  function n (line 2) | function n(){return i?new e:void 0}
  function r (line 2) | function r(){var t=o.length-1;return t>=0?o[t]:void 0}
  function i (line 2) | function i(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof...
  function o (line 2) | function o(t){if(!this.isCancellable())return this;var e=this._onCancel(...
  function s (line 2) | function s(){return this._onCancelField}
  function a (line 2) | function a(t){this._onCancelField=t}
  function u (line 2) | function u(){this._cancellationParent=void 0,this._onCancelField=void 0}
  function c (line 2) | function c(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branch...
  function l (line 2) | function l(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}
  function h (line 2) | function h(){var t=this._boundTo;return void 0!==t&&t instanceof n?t.isF...
  function f (line 2) | function f(){this._trace=new R(this._peekContext())}
  function p (line 2) | function p(t,e){if(L(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._paren...
  function _ (line 2) | function _(t,e,n,r){if(void 0===t&&e>0&&Y.longStackTraces&&Y.warnings){v...
  function d (line 2) | function d(t,e){var n=t+" is deprecated and will be removed in a future ...
  function v (line 2) | function v(t,e,r){if(Y.warnings){var i,o=new V(t);if(e)r._attachExtraTra...
  function y (line 2) | function y(t,e){for(var n=0;n<e.length-1;++n)e[n].push("From previous ev...
  function m (line 2) | function m(t){for(var e=0;e<t.length;++e)(0===t[e].length||e+1<t.length&...
  function g (line 2) | function g(t){for(var e=t[0],n=1;n<t.length;++n){for(var r=t[n],i=e.leng...
  function b (line 2) | function b(t){for(var e=[],n=0;n<t.length;++n){var r=t[n],i="    (No sta...
  function w (line 2) | function w(t){for(var e=t.stack.replace(/\s+$/g,"").split("\n"),n=0;n<e....
  function C (line 2) | function C(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&...
  function j (line 2) | function j(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)...
  function F (line 2) | function F(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionH...
  function k (line 2) | function k(t){var e;if("function"==typeof t)e="[function "+(t.name||"ano...
  function x (line 2) | function x(t){var e=41;return t.length<e?t:t.substr(0,e-3)+"..."}
  function E (line 2) | function E(){return"function"==typeof K}
  function T (line 2) | function T(t){var e=t.match(W);return e?{fileName:e[1],line:parseInt(e[2...
  function P (line 2) | function P(t,e){if(E()){for(var n,r,i=t.stack.split("\n"),o=e.stack.spli...
  function R (line 2) | function R(t){this._parent=t,this._promisesCreated=0;var e=this._length=...
  function e (line 2) | function e(){return this.value}
  function n (line 2) | function n(){throw this.reason}
  function n (line 2) | function n(){return o(this)}
  function r (line 2) | function r(t,n){return i(t,n,e,e)}
  function r (line 2) | function r(t,e){function n(r){return this instanceof n?(h(this,"message"...
  function i (line 2) | function i(t){return this instanceof i?(h(this,"name","OperationalError"...
  function r (line 2) | function r(t){this.finallyHandler=t}
  function i (line 2) | function i(t,e){return null!=t.cancelPromise?(arguments.length>1?t.cance...
  function o (line 2) | function o(){return a.call(this,this.promise._target()._settledValue())}
  function s (line 2) | function s(t){return i(this,t)?void 0:(l.e=t,l)}
  function a (line 2) | function a(t){var a=this.promise,u=this.handler;if(!this.called){this.ca...
  function a (line 2) | function a(t,n,r){for(var o=0;o<n.length;++o){r._pushContext();var s=p(n...
  function u (line 2) | function u(t,n,i,o){var s=this._promise=new e(r);s._captureStackTrace(),...
  function a (line 3) | function a(t,e,n,r){this.constructor$(t),this._promise._captureStackTrac...
  function u (line 3) | function u(t,e,n,i){if("function"!=typeof e)return r("expecting a functi...
  function r (line 3) | function r(t){return t instanceof Error&&l.getPrototypeOf(t)===Error.pro...
  function i (line 3) | function i(t){var e;if(r(t)){e=new c(t),e.name=t.name,e.message=t.messag...
  function o (line 3) | function o(t,e){return function(n,r){if(null!==t){if(n){var o=i(a(n));t....
  function n (line 3) | function n(t,e){var n=this;if(!o.isArray(t))return r.call(n,t,e);var i=a...
  function r (line 3) | function r(t,e){var n=this,r=n._boundValue(),i=void 0===t?a(e).call(r,nu...
  function i (line 3) | function i(t,e){var n=this;if(!t){var r=new Error(t+"");r.cause=t,t=r}va...
  function n (line 3) | function n(){}
  function r (line 3) | function r(t,e){if("function"!=typeof e)throw new m("expecting a functio...
  function i (line 3) | function i(t){this._bitField=0,this._fulfillmentHandler0=void 0,this._re...
  function o (line 3) | function o(t){this.promise._resolveCallback(t)}
  function s (line 3) | function s(t){this.promise._rejectCallback(t,!1)}
  function a (line 3) | function a(t){var e=new i(b);e._fulfillmentHandler0=t,e._rejectionHandle...
  function s (line 3) | function s(t){switch(t){case-2:return[];case-3:return{}}}
  function a (line 3) | function a(t){var r=this._promise=new e(n);t instanceof e&&r._propagateF...
  function r (line 3) | function r(t){return!C.test(t)}
  function i (line 3) | function i(t){try{return t.__isPromisified__===!0}catch(t){return!1}}
  function o (line 3) | function o(t,e,n){var r=p.getDataPropertyOrDefault(t,e+n,b);return r?i(r...
  function s (line 3) | function s(t,e,n){for(var r=0;r<t.length;r+=2){var i=t[r];if(n.test(i))f...
  function a (line 3) | function a(t,e,n,r){for(var a=p.inheritedDataKeys(t),u=[],c=0;c<a.length...
  function u (line 3) | function u(t,r,i,o,s,a){function u(){var i=r;r===f&&(i=this);var o=new e...
  function c (line 3) | function c(t,e,n,r,i){for(var o=new RegExp(F(e)+"$"),s=a(t,e,o,n),u=0,c=...
  function l (line 3) | function l(t,e,n){return k(t,e,void 0,t,null,n)}
  function o (line 3) | function o(t){var e,n=!1;if(void 0!==a&&t instanceof a)e=h(t),n=!0;else{...
  function s (line 3) | function s(t){var n,s=r(t);return c(s)?(n=s instanceof e?s._then(e.props...
  function t (line 3) | function t(t,r){this[e]=t,this[e+n]=r,e++}
  function r (line 3) | function r(t,e,n,r,i){for(var o=0;i>o;++o)n[o+r]=t[o+e],t[o+e]=void 0}
  function i (line 3) | function i(t){this._capacity=t,this._length=0,this._front=0}
  function o (line 3) | function o(t,o){var u=r(t);if(u instanceof e)return a(u);if(t=s.asArray(...
  function a (line 3) | function a(t,n,r,i){this.constructor$(t);var s=f();this._fn=null===s?n:s...
  function u (line 3) | function u(t,e){this.isFulfilled()?e._resolve(t):e._reject(t)}
  function c (line 3) | function c(t,e,n,i){if("function"!=typeof e)return r("expecting a functi...
  function l (line 3) | function l(t){this.accum=t,this.array._gotAccum(t);var n=i(this.value,th...
  function h (line 3) | function h(t){var n=this.array,r=n._promise,i=_(n._fn);r._pushContext();...
  function i (line 3) | function i(t){this.constructor$(t)}
  function i (line 3) | function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this....
  function o (line 3) | function o(t,e){if((0|e)!==e||0>e)return r("expecting a positive integer...
  function e (line 4) | function e(t){void 0!==t?(t=t._target(),this._bitField=t._bitField,this....
  function r (line 4) | function r(t,r){if(l(t)){if(t instanceof e)return t;var i=o(t);if(i===c)...
  function i (line 4) | function i(t){return t.then}
  function o (line 4) | function o(t){try{return i(t)}catch(t){return c.e=t,c}}
  function s (line 4) | function s(t){return h.call(t,"_promise0")}
  function a (line 4) | function a(t,r,i){function o(t){a&&(a._resolveCallback(t),a=null)}functi...
  function r (line 4) | function r(t){var e=this;return e instanceof Number&&(e=+e),clearTimeout...
  function i (line 4) | function i(t){var e=this;throw e instanceof Number&&(e=+e),clearTimeout(...
  function a (line 4) | function a(t){setTimeout(function(){throw t},0)}
  function u (line 4) | function u(t){var e=r(t);return e!==t&&"function"==typeof t._isDisposabl...
  function c (line 4) | function c(t,n){function i(){if(s>=c)return l._fulfill();var o=u(t[s++])...
  function l (line 4) | function l(t,e,n){this._data=t,this._promise=e,this._context=n}
  function h (line 4) | function h(t,e,n){this.constructor$(t,e,n)}
  function f (line 4) | function f(t){return l.isDisposer(t)?(this.resources[this.index]._setDis...
  function p (line 4) | function p(t){this.length=t,this.promise=null,this[t-1]=null}
  function i (line 4) | function i(){try{var t=E;return E=null,t.apply(this,arguments)}catch(t){...
  function o (line 4) | function o(t){return E=t,i}
  function s (line 4) | function s(t){return null==t||t===!0||t===!1||"string"==typeof t||"numbe...
  function a (line 4) | function a(t){return"function"==typeof t||"object"==typeof t&&null!==t}
  function u (line 4) | function u(t){return s(t)?new Error(y(t)):t}
  function c (line 4) | function c(t,e){var n,r=t.length,i=new Array(r+1);for(n=0;r>n;++n)i[n]=t...
  function l (line 4) | function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:voi...
  function h (line 4) | function h(t,e,n){if(s(t))return t;var r={value:n,configurable:!0,enumer...
  function f (line 4) | function f(t){throw t}
  function p (line 4) | function p(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=...
  function _ (line 4) | function _(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}
  function d (line 4) | function d(t){return A.test(t)}
  function v (line 4) | function v(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}
  function y (line 4) | function y(t){try{return t+""}catch(t){return"[no string representation]"}}
  function m (line 4) | function m(t){try{h(t,"isOperational",!0)}catch(t){}}
  function g (line 4) | function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes_...
  function b (line 4) | function b(t){return t instanceof Error&&F.propertyIsWritable(t,"stack")}
  function w (line 4) | function w(t){return{}.toString.call(t)}
  function C (line 4) | function C(t,e,n){for(var r=F.names(t),i=0;i<r.length;++i){var o=r[i];if...
  function j (line 4) | function j(e,n){return D?t.env[e]:n}
  function n (line 4) | function n(){this.constructor=t,this.constructor$=e;for(var n in e.proto...
  function r (line 4) | function r(){l=!1,a.length?c=a.concat(c):h=-1,c.length&&i()}
  function i (line 4) | function i(){if(!l){var t=setTimeout(r);l=!0;for(var e=c.length;e;){for(...
  function o (line 4) | function o(t,e){this.fun=t,this.array=e}
  function s (line 4) | function s(){}
  function r (line 4) | function r(t,e,n,r){function o(t){var e=t.length;if(2>e||e>256||e&e-1)th...
  function i (line 4) | function i(t,e,n,r){function i(n){for(;f>=n;)t[e++]=255&p,p>>=8,f-=8,e==...
  function o (line 4) | function o(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e...
  function s (line 4) | function s(t,e,n,r){for(var i=t[e++],o=1<<i,s=o+1,a=s+1,u=i+1,c=(1<<u)-1...

FILE: gh-pages/assets/lib/highlight.pack.js
  function n (line 1) | function n(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").repl...
  function t (line 1) | function t(e){return e.nodeName.toLowerCase()}
  function r (line 1) | function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}
  function a (line 1) | function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}
  function i (line 1) | function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNod...
  function o (line 1) | function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t...
  function u (line 1) | function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i...
  function c (line 1) | function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[...
  function s (line 1) | function s(e){function n(e){return e&&e.source||e}function t(t,r){return...
  function f (line 1) | function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n....
  function l (line 1) | function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},...
  function g (line 1) | function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,fun...
  function h (line 1) | function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)...
  function p (line 1) | function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createEleme...
  function d (line 1) | function d(e){E=o(E,e)}
  function b (line 1) | function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("...
  function v (line 1) | function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener(...
  function m (line 1) | function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e)...
  function N (line 1) | function N(){return Object.keys(x)}
  function w (line 1) | function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}

FILE: gifler.bare.js
  function Gif (line 47) | function Gif(dataPromise) {
  function Decoder (line 131) | function Decoder() {}
  function Animator (line 197) | function Animator(_reader, _frames) {

FILE: gifler.bundle.js
  function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function Gif (line 48) | function Gif(dataPromise) {
  function Decoder (line 132) | function Decoder() {}
  function Animator (line 198) | function Animator(_reader, _frames) {
  function s (line 429) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_d...
  function any (line 433) | function any(promises) {
  function Async (line 460) | function Async() {
  function AsyncInvokeLater (line 512) | function AsyncInvokeLater(fn, receiver, arg) {
  function AsyncInvoke (line 517) | function AsyncInvoke(fn, receiver, arg) {
  function AsyncSettlePromises (line 522) | function AsyncSettlePromises(promise) {
  function noConflict (line 680) | function noConflict() {
  function ensureMethod (line 758) | function ensureMethod(obj, methodName) {
  function caller (line 769) | function caller(obj) {
  function namedGetter (line 789) | function namedGetter(obj) {
  function indexedGetter (line 792) | function indexedGetter(obj) {
  function catchFilter (line 949) | function catchFilter(instances, cb, promise) {
  function Context (line 996) | function Context() {
  function createContext (line 1016) | function createContext() {
  function peekContext (line 1020) | function peekContext() {
  function cancellationExecute (line 1200) | function cancellationExecute(executor, resolve, reject) {
  function cancellationAttachCancellationCallback (line 1215) | function cancellationAttachCancellationCallback(onCancel) {
  function cancellationOnCancel (line 1230) | function cancellationOnCancel() {
  function cancellationSetOnCancel (line 1234) | function cancellationSetOnCancel(onCancel) {
  function cancellationClearCancellationData (line 1238) | function cancellationClearCancellationData() {
  function cancellationPropagateFrom (line 1243) | function cancellationPropagateFrom(parent, flags) {
  function bindingPropagateFrom (line 1257) | function bindingPropagateFrom(parent, flags) {
  function boundValueFunction (line 1264) | function boundValueFunction() {
  function longStackTracesCaptureStackTrace (line 1278) | function longStackTracesCaptureStackTrace() {
  function longStackTracesAttachExtraTrace (line 1282) | function longStackTracesAttachExtraTrace(error, ignoreSelf) {
  function checkForgottenReturns (line 1299) | function checkForgottenReturns(returnValue, promisesCreated, name, promi...
  function deprecated (line 1310) | function deprecated(name, replacement) {
  function warn (line 1317) | function warn(message, shouldUseOwnTrace, promise) {
  function reconstructStack (line 1332) | function reconstructStack(message, stacks) {
  function removeDuplicateOrEmptyJumps (line 1343) | function removeDuplicateOrEmptyJumps(stacks) {
  function removeCommonRoots (line 1353) | function removeCommonRoots(stacks) {
  function cleanStack (line 1381) | function cleanStack(stack) {
  function stackFramesAsArray (line 1398) | function stackFramesAsArray(error) {
  function parseStackAndMessage (line 1412) | function parseStackAndMessage(error) {
  function formatAndLogError (line 1423) | function formatAndLogError(error, title, isSoft) {
  function fireRejectionEvent (line 1441) | function fireRejectionEvent(name, localHandler, reason, promise) {
  function formatNonError (line 1483) | function formatNonError(obj) {
  function snip (line 1509) | function snip(str) {
  function longStackTracesIsSupported (line 1517) | function longStackTracesIsSupported() {
  function parseLineInfo (line 1523) | function parseLineInfo(line) {
  function setBounds (line 1533) | function setBounds(firstLineError, lastLineError) {
  function CapturedTrace (line 1575) | function CapturedTrace(parent) {
  function returner (line 1840) | function returner() {
  function thrower (line 1843) | function thrower() {
  function promiseAllThis (line 1891) | function promiseAllThis() {
  function PromiseMapSeries (line 1895) | function PromiseMapSeries(promises, fn) {
  function subError (line 1924) | function subError(nameProperty, defaultMessage) {
  function OperationalError (line 1988) | function OperationalError(message) {
  function FinallyHandlerCancelReaction (line 2132) | function FinallyHandlerCancelReaction(finallyHandler) {
  function checkCancel (line 2140) | function checkCancel(ctx, reason) {
  function succeed (line 2153) | function succeed() {
  function fail (line 2156) | function fail(reason) {
  function finallyHandler (line 2161) | function finallyHandler(reasonOrValue) {
  function promiseFromYieldHandler (line 2242) | function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
  function PromiseSpawn (line 2259) | function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
  function MappingPromiseArray (line 2598) | function MappingPromiseArray(promises, fn, limit, _filter) {
  function map (line 2714) | function map(promises, fn, options, _filter) {
  function isUntypedError (line 2798) | function isUntypedError(obj) {
  function wrapAsOperationalError (line 2804) | function wrapAsOperationalError(obj) {
  function nodebackForPromise (line 2824) | function nodebackForPromise(promise, multiArgs) {
  function spreadAdapter (line 2851) | function spreadAdapter(val, nodeback) {
  function successAdapter (line 2861) | function successAdapter(val, nodeback) {
  function errorAdapter (line 2871) | function errorAdapter(reason, nodeback) {
  function Proxyable (line 2915) | function Proxyable() {}
  function check (line 2962) | function check(self, executor) {
  function Promise (line 2971) | function Promise(executor) {
  function deferResolve (line 3598) | function deferResolve(v) {this.promise._resolveCallback(v);}
  function deferReject (line 3599) | function deferReject(v) {this.promise._rejectCallback(v, false);}
  function fillTypes (line 3642) | function fillTypes(value) {
  function toResolutionValue (line 3671) | function toResolutionValue(val) {
  function PromiseArray (line 3678) | function PromiseArray(values) {
  function propsFilter (line 3879) | function propsFilter(key) {
  function isPromisified (line 3883) | function isPromisified(fn) {
  function hasPromisified (line 3892) | function hasPromisified(obj, key, suffix) {
  function checkValid (line 3897) | function checkValid(ret, suffix, suffixRegexp) {
  function promisifiableMethods (line 3912) | function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
  function generateCallForArgumentCount (line 3971) | function generateCallForArgumentCount(count) {
  function generateArgumentSwitchCase (line 3985) | function generateArgumentSwitchCase() {
  function makeNodePromisifiedClosure (line 4058) | function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multi...
  function promisifyAll (line 4088) | function promisifyAll(obj, suffix, filter, promisifier, multiArgs) {
  function promisify (line 4113) | function promisify(callback, receiver, multiArgs) {
  function extractEntry (line 4180) | function extractEntry(value, key) {
  function PropertiesPromiseArray (line 4206) | function PropertiesPromiseArray(obj) {
  function props (line 4258) | function props(promises) {
  function arrayMove (line 4288) | function arrayMove(src, srcIndex, dst, dstIndex, len) {
  function Queue (line 4295) | function Queue(capacity) {
  function race (line 4390) | function race(promises, parent) {
  function ReductionPromiseArray (line 4441) | function ReductionPromiseArray(promises, fn, initialValue, _each) {
  function completed (line 4539) | function completed(valueOrReason, array) {
  function reduce (line 4547) | function reduce(promises, fn, initialValue, _each) {
  function gotAccum (line 4555) | function gotAccum(accum) {
  function gotValue (line 4567) | function gotValue(value) {
  function SettledPromiseArray (line 4637) | function SettledPromiseArray(values) {
  function SomePromiseArray (line 4686) | function SomePromiseArray(values) {
  function some (line 4803) | function some(promises, howMany) {
  function PromiseInspection (line 4828) | function PromiseInspection(promise) {
  function tryConvertToPromise (line 4930) | function tryConvertToPromise(obj, context) {
  function doGetThen (line 4957) | function doGetThen(obj) {
  function getThen (line 4961) | function getThen(obj) {
  function isAnyBluebirdPromise (line 4971) | function isAnyBluebirdPromise(obj) {
  function doThenable (line 4975) | function doThenable(x, then, context) {
  function successClear (line 5048) | function successClear(value) {
  function failureClear (line 5055) | function failureClear(reason) {
  function thrower (line 5083) | function thrower(e) {
  function castPreservingDisposable (line 5087) | function castPreservingDisposable(thenable) {
  function dispose (line 5097) | function dispose(resources, inspection) {
  function Disposer (line 5124) | function Disposer(data, promise, context) {
  function FunctionDisposer (line 5163) | function FunctionDisposer(fn, promise, context) {
  function maybeUnwrapDisposer (line 5173) | function maybeUnwrapDisposer(value) {
  function ResourceList (line 5181) | function ResourceList(length) {
  function tryCatcher (line 5307) | function tryCatcher() {
  function tryCatch (line 5317) | function tryCatch(fn) {
  function T (line 5325) | function T() {
  function isPrimitive (line 5342) | function isPrimitive(val) {
  function isObject (line 5348) | function isObject(value) {
  function maybeWrapAsError (line 5353) | function maybeWrapAsError(maybeError) {
  function withAppended (line 5359) | function withAppended(target, appendee) {
  function getDataPropertyOrDefault (line 5370) | function getDataPropertyOrDefault(obj, key, defaultValue) {
  function notEnumerableProp (line 5384) | function notEnumerableProp(obj, name, value) {
  function thrower (line 5396) | function thrower(r) {
  function isClass (line 5467) | function isClass(fn) {
  function toFastProperties (line 5489) | function toFastProperties(obj) {
  function isIdentifier (line 5500) | function isIdentifier(str) {
  function filledRange (line 5504) | function filledRange(count, prefix, suffix) {
  function safeToString (line 5512) | function safeToString(obj) {
  function markAsOriginatingFromRejection (line 5520) | function markAsOriginatingFromRejection(e) {
  function originatesFromRejection (line 5527) | function originatesFromRejection(e) {
  function canAttachTrace (line 5533) | function canAttachTrace(obj) {
  function classString (line 5552) | function classString(obj) {
  function copyDescriptors (line 5556) | function copyDescriptors(from, to, filter) {
  function env (line 5601) | function env(key, def) {
  function cleanUpNextTick (line 5658) | function cleanUpNextTick() {
  function drainQueue (line 5670) | function drainQueue() {
  function Item (line 5708) | function Item(fun, array) {
  function noop (line 5722) | function noop() {}
  function GifWriter (line 5769) | function GifWriter(buf, width, height, gopts) {
  function GifWriterOutputLZWCodeStream (line 5955) | function GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_strea...
  function GifReader (line 6096) | function GifReader(buf) {
  function GifReaderLZWOutputIndexStream (line 6380) | function GifReaderLZWOutputIndexStream(code_stream, p, output, output_le...

FILE: site/_examples/rainbow.js
  function onDrawFrame (line 3) | function onDrawFrame(ctx, frame) {

FILE: site/assets/gifler.js
  function i (line 2) | function i(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof require&&re...
  function t (line 2) | function t(t){this._animatorPromise=t.then(function(t){var e;return e=ne...
  function t (line 2) | function t(){}
  function t (line 2) | function t(t,e){var n;this._reader=t,this._frames=e,this._advanceFrame=c...
  function i (line 2) | function i(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof _dereq_&&_d...
  function e (line 2) | function e(t){var e=new n(t),r=e.promise();return e.setHowMany(1),e.setU...
  function i (line 2) | function i(){this._isTickUsed=!1,this._lateQueue=new l(16),this._normalQ...
  function o (line 2) | function o(t,e,n){this._lateQueue.push(t,e,n),this._queueTick()}
  function s (line 2) | function s(t,e,n){this._normalQueue.push(t,e,n),this._queueTick()}
  function a (line 2) | function a(t){this._normalQueue._pushOne(t),this._queueTick()}
  function r (line 2) | function r(){try{Promise===o&&(Promise=i)}catch(t){}return o}
  function n (line 2) | function n(t,n){var r;if(null!=t&&(r=t[n]),"function"!=typeof r){var i="...
  function r (line 2) | function r(t){var e=this.pop(),r=n(t,e);return r.apply(t,this)}
  function i (line 2) | function i(t){return t[this]}
  function o (line 2) | function o(t){var e=+this;return 0>e&&(e=Math.max(0,e+t.length)),t[e]}
  function n (line 2) | function n(t,n,a){return function(u){var c=a._boundValue();t:for(var l=0...
  function e (line 2) | function e(){this._trace=new e.CapturedTrace(r())}
  function n (line 2) | function n(){return i?new e:void 0}
  function r (line 2) | function r(){var t=o.length-1;return t>=0?o[t]:void 0}
  function i (line 2) | function i(t,e,n){var r=this;try{t(e,n,function(t){if("function"!=typeof...
  function o (line 2) | function o(t){if(!this.isCancellable())return this;var e=this._onCancel(...
  function s (line 2) | function s(){return this._onCancelField}
  function a (line 2) | function a(t){this._onCancelField=t}
  function u (line 2) | function u(){this._cancellationParent=void 0,this._onCancelField=void 0}
  function c (line 2) | function c(t,e){if(0!==(1&e)){this._cancellationParent=t;var n=t._branch...
  function l (line 2) | function l(t,e){0!==(2&e)&&t._isBound()&&this._setBoundTo(t._boundTo)}
  function h (line 2) | function h(){var t=this._boundTo;return void 0!==t&&t instanceof n?t.isF...
  function f (line 2) | function f(){this._trace=new R(this._peekContext())}
  function p (line 2) | function p(t,e){if(L(t)){var n=this._trace;if(void 0!==n&&e&&(n=n._paren...
  function _ (line 2) | function _(t,e,n,r){if(void 0===t&&e>0&&Y.longStackTraces&&Y.warnings){v...
  function d (line 2) | function d(t,e){var n=t+" is deprecated and will be removed in a future ...
  function v (line 2) | function v(t,e,r){if(Y.warnings){var i,o=new V(t);if(e)r._attachExtraTra...
  function y (line 2) | function y(t,e){for(var n=0;n<e.length-1;++n)e[n].push("From previous ev...
  function m (line 2) | function m(t){for(var e=0;e<t.length;++e)(0===t[e].length||e+1<t.length&...
  function g (line 2) | function g(t){for(var e=t[0],n=1;n<t.length;++n){for(var r=t[n],i=e.leng...
  function b (line 2) | function b(t){for(var e=[],n=0;n<t.length;++n){var r=t[n],i="    (No sta...
  function w (line 2) | function w(t){for(var e=t.stack.replace(/\s+$/g,"").split("\n"),n=0;n<e....
  function C (line 2) | function C(t){var e=t.stack,n=t.toString();return e="string"==typeof e&&...
  function j (line 2) | function j(t,e,n){if("undefined"!=typeof console){var r;if(H.isObject(t)...
  function F (line 2) | function F(t,e,n,r){var i=!1;try{"function"==typeof e&&(i=!0,"rejectionH...
  function k (line 2) | function k(t){var e;if("function"==typeof t)e="[function "+(t.name||"ano...
  function x (line 2) | function x(t){var e=41;return t.length<e?t:t.substr(0,e-3)+"..."}
  function E (line 2) | function E(){return"function"==typeof K}
  function T (line 2) | function T(t){var e=t.match(W);return e?{fileName:e[1],line:parseInt(e[2...
  function P (line 2) | function P(t,e){if(E()){for(var n,r,i=t.stack.split("\n"),o=e.stack.spli...
  function R (line 2) | function R(t){this._parent=t,this._promisesCreated=0;var e=this._length=...
  function e (line 2) | function e(){return this.value}
  function n (line 2) | function n(){throw this.reason}
  function n (line 2) | function n(){return o(this)}
  function r (line 2) | function r(t,n){return i(t,n,e,e)}
  function r (line 2) | function r(t,e){function n(r){return this instanceof n?(h(this,"message"...
  function i (line 2) | function i(t){return this instanceof i?(h(this,"name","OperationalError"...
  function r (line 2) | function r(t){this.finallyHandler=t}
  function i (line 2) | function i(t,e){return null!=t.cancelPromise?(arguments.length>1?t.cance...
  function o (line 2) | function o(){return a.call(this,this.promise._target()._settledValue())}
  function s (line 2) | function s(t){return i(this,t)?void 0:(l.e=t,l)}
  function a (line 2) | function a(t){var a=this.promise,u=this.handler;if(!this.called){this.ca...
  function a (line 2) | function a(t,n,r){for(var o=0;o<n.length;++o){r._pushContext();var s=p(n...
  function u (line 2) | function u(t,n,i,o){var s=this._promise=new e(r);s._captureStackTrace(),...
  function a (line 3) | function a(t,e,n,r){this.constructor$(t),this._promise._captureStackTrac...
  function u (line 3) | function u(t,e,n,i){if("function"!=typeof e)return r("expecting a functi...
  function r (line 3) | function r(t){return t instanceof Error&&l.getPrototypeOf(t)===Error.pro...
  function i (line 3) | function i(t){var e;if(r(t)){e=new c(t),e.name=t.name,e.message=t.messag...
  function o (line 3) | function o(t,e){return function(n,r){if(null!==t){if(n){var o=i(a(n));t....
  function n (line 3) | function n(t,e){var n=this;if(!o.isArray(t))return r.call(n,t,e);var i=a...
  function r (line 3) | function r(t,e){var n=this,r=n._boundValue(),i=void 0===t?a(e).call(r,nu...
  function i (line 3) | function i(t,e){var n=this;if(!t){var r=new Error(t+"");r.cause=t,t=r}va...
  function n (line 3) | function n(){}
  function r (line 3) | function r(t,e){if("function"!=typeof e)throw new m("expecting a functio...
  function i (line 3) | function i(t){this._bitField=0,this._fulfillmentHandler0=void 0,this._re...
  function o (line 3) | function o(t){this.promise._resolveCallback(t)}
  function s (line 3) | function s(t){this.promise._rejectCallback(t,!1)}
  function a (line 3) | function a(t){var e=new i(b);e._fulfillmentHandler0=t,e._rejectionHandle...
  function s (line 3) | function s(t){switch(t){case-2:return[];case-3:return{}}}
  function a (line 3) | function a(t){var r=this._promise=new e(n);t instanceof e&&r._propagateF...
  function r (line 3) | function r(t){return!C.test(t)}
  function i (line 3) | function i(t){try{return t.__isPromisified__===!0}catch(t){return!1}}
  function o (line 3) | function o(t,e,n){var r=p.getDataPropertyOrDefault(t,e+n,b);return r?i(r...
  function s (line 3) | function s(t,e,n){for(var r=0;r<t.length;r+=2){var i=t[r];if(n.test(i))f...
  function a (line 3) | function a(t,e,n,r){for(var a=p.inheritedDataKeys(t),u=[],c=0;c<a.length...
  function u (line 3) | function u(t,r,i,o,s,a){function u(){var i=r;r===f&&(i=this);var o=new e...
  function c (line 3) | function c(t,e,n,r,i){for(var o=new RegExp(F(e)+"$"),s=a(t,e,o,n),u=0,c=...
  function l (line 3) | function l(t,e,n){return k(t,e,void 0,t,null,n)}
  function o (line 3) | function o(t){var e,n=!1;if(void 0!==a&&t instanceof a)e=h(t),n=!0;else{...
  function s (line 3) | function s(t){var n,s=r(t);return c(s)?(n=s instanceof e?s._then(e.props...
  function t (line 3) | function t(t,r){this[e]=t,this[e+n]=r,e++}
  function r (line 3) | function r(t,e,n,r,i){for(var o=0;i>o;++o)n[o+r]=t[o+e],t[o+e]=void 0}
  function i (line 3) | function i(t){this._capacity=t,this._length=0,this._front=0}
  function o (line 3) | function o(t,o){var u=r(t);if(u instanceof e)return a(u);if(t=s.asArray(...
  function a (line 3) | function a(t,n,r,i){this.constructor$(t);var s=f();this._fn=null===s?n:s...
  function u (line 3) | function u(t,e){this.isFulfilled()?e._resolve(t):e._reject(t)}
  function c (line 3) | function c(t,e,n,i){if("function"!=typeof e)return r("expecting a functi...
  function l (line 3) | function l(t){this.accum=t,this.array._gotAccum(t);var n=i(this.value,th...
  function h (line 3) | function h(t){var n=this.array,r=n._promise,i=_(n._fn);r._pushContext();...
  function i (line 3) | function i(t){this.constructor$(t)}
  function i (line 3) | function i(t){this.constructor$(t),this._howMany=0,this._unwrap=!1,this....
  function o (line 3) | function o(t,e){if((0|e)!==e||0>e)return r("expecting a positive integer...
  function e (line 4) | function e(t){void 0!==t?(t=t._target(),this._bitField=t._bitField,this....
  function r (line 4) | function r(t,r){if(l(t)){if(t instanceof e)return t;var i=o(t);if(i===c)...
  function i (line 4) | function i(t){return t.then}
  function o (line 4) | function o(t){try{return i(t)}catch(t){return c.e=t,c}}
  function s (line 4) | function s(t){return h.call(t,"_promise0")}
  function a (line 4) | function a(t,r,i){function o(t){a&&(a._resolveCallback(t),a=null)}functi...
  function r (line 4) | function r(t){var e=this;return e instanceof Number&&(e=+e),clearTimeout...
  function i (line 4) | function i(t){var e=this;throw e instanceof Number&&(e=+e),clearTimeout(...
  function a (line 4) | function a(t){setTimeout(function(){throw t},0)}
  function u (line 4) | function u(t){var e=r(t);return e!==t&&"function"==typeof t._isDisposabl...
  function c (line 4) | function c(t,n){function i(){if(s>=c)return l._fulfill();var o=u(t[s++])...
  function l (line 4) | function l(t,e,n){this._data=t,this._promise=e,this._context=n}
  function h (line 4) | function h(t,e,n){this.constructor$(t,e,n)}
  function f (line 4) | function f(t){return l.isDisposer(t)?(this.resources[this.index]._setDis...
  function p (line 4) | function p(t){this.length=t,this.promise=null,this[t-1]=null}
  function i (line 4) | function i(){try{var t=E;return E=null,t.apply(this,arguments)}catch(t){...
  function o (line 4) | function o(t){return E=t,i}
  function s (line 4) | function s(t){return null==t||t===!0||t===!1||"string"==typeof t||"numbe...
  function a (line 4) | function a(t){return"function"==typeof t||"object"==typeof t&&null!==t}
  function u (line 4) | function u(t){return s(t)?new Error(y(t)):t}
  function c (line 4) | function c(t,e){var n,r=t.length,i=new Array(r+1);for(n=0;r>n;++n)i[n]=t...
  function l (line 4) | function l(t,e,n){if(!F.isES5)return{}.hasOwnProperty.call(t,e)?t[e]:voi...
  function h (line 4) | function h(t,e,n){if(s(t))return t;var r={value:n,configurable:!0,enumer...
  function f (line 4) | function f(t){throw t}
  function p (line 4) | function p(t){try{if("function"==typeof t){var e=F.names(t.prototype),n=...
  function _ (line 4) | function _(t){function e(){}e.prototype=t;for(var n=8;n--;)new e;return t}
  function d (line 4) | function d(t){return A.test(t)}
  function v (line 4) | function v(t,e,n){for(var r=new Array(t),i=0;t>i;++i)r[i]=e+i+n;return r}
  function y (line 4) | function y(t){try{return t+""}catch(t){return"[no string representation]"}}
  function m (line 4) | function m(t){try{h(t,"isOperational",!0)}catch(t){}}
  function g (line 4) | function g(t){return null==t?!1:t instanceof Error.__BluebirdErrorTypes_...
  function b (line 4) | function b(t){return t instanceof Error&&F.propertyIsWritable(t,"stack")}
  function w (line 4) | function w(t){return{}.toString.call(t)}
  function C (line 4) | function C(t,e,n){for(var r=F.names(t),i=0;i<r.length;++i){var o=r[i];if...
  function j (line 4) | function j(e,n){return D?t.env[e]:n}
  function n (line 4) | function n(){this.constructor=t,this.constructor$=e;for(var n in e.proto...
  function r (line 4) | function r(){l=!1,a.length?c=a.concat(c):h=-1,c.length&&i()}
  function i (line 4) | function i(){if(!l){var t=setTimeout(r);l=!0;for(var e=c.length;e;){for(...
  function o (line 4) | function o(t,e){this.fun=t,this.array=e}
  function s (line 4) | function s(){}
  function r (line 4) | function r(t,e,n,r){function o(t){var e=t.length;if(2>e||e>256||e&e-1)th...
  function i (line 4) | function i(t,e,n,r){function i(n){for(;f>=n;)t[e++]=255&p,p>>=8,f-=8,e==...
  function o (line 4) | function o(t){var e=0;if(71!==t[e++]||73!==t[e++]||70!==t[e++]||56!==t[e...
  function s (line 4) | function s(t,e,n,r){for(var i=t[e++],o=1<<i,s=o+1,a=s+1,u=i+1,c=(1<<u)-1...

FILE: site/assets/lib/highlight.pack.js
  function n (line 1) | function n(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").repl...
  function t (line 1) | function t(e){return e.nodeName.toLowerCase()}
  function r (line 1) | function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}
  function a (line 1) | function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}
  function i (line 1) | function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNod...
  function o (line 1) | function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t...
  function u (line 1) | function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i...
  function c (line 1) | function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[...
  function s (line 1) | function s(e){function n(e){return e&&e.source||e}function t(t,r){return...
  function f (line 1) | function f(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n....
  function l (line 1) | function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},...
  function g (line 1) | function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,fun...
  function h (line 1) | function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)...
  function p (line 1) | function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createEleme...
  function d (line 1) | function d(e){E=o(E,e)}
  function b (line 1) | function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("...
  function v (line 1) | function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener(...
  function m (line 1) | function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e)...
  function N (line 1) | function N(){return Object.keys(x)}
  function w (line 1) | function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}
Condensed preview — 33 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (486K chars).
[
  {
    "path": ".gitignore",
    "chars": 72,
    "preview": ".DS_Store\nnode_modules\nnpm-debug.log\n\n# Built gh-pages site\n# site-dist\n"
  },
  {
    "path": "README.md",
    "chars": 491,
    "preview": "# Gifler\nAnimate GIFs in canvas.\n\n- Loads GIF contents with XHR\n- Decodes GIF frames and pixels with omggif\n- Prepares c"
  },
  {
    "path": "gh-pages/assets/gifler.js",
    "chars": 84072,
    "preview": "/** gifler.js | github.com/themadcreator/gifler | @license: Apache-2.0 */\n!function t(e,n,r){function i(s,a){if(!n[s]){i"
  },
  {
    "path": "gh-pages/assets/lib/highlight.pack.js",
    "chars": 14771,
    "preview": "!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hl"
  },
  {
    "path": "gh-pages/assets/lib/monokai_sublime.css",
    "chars": 2477,
    "preview": "/*\n\nMonokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/\n\n*/\n\n.hljs {\n  display: bl"
  },
  {
    "path": "gh-pages/docs.css",
    "chars": 456,
    "preview": "h2 {\n  font-weight: 100;\n  color: #BD1550;\n  font-size: 30px;\n  line-height: 30px;\n  margin-top: 20px;\n  margin-bottom: "
  },
  {
    "path": "gh-pages/docs.html",
    "chars": 6791,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta name=\"viewport\" content=\"width=device-width\">\n    <meta name=\"viewport\" conten"
  },
  {
    "path": "gh-pages/examples.css",
    "chars": 574,
    "preview": "h3 {\n  font-size: 30px;\n  line-height: 40px;\n}\ntable.comparisons {\n  width: 100%;\n  table-layout: fixed;\n  text-align: c"
  },
  {
    "path": "gh-pages/examples.html",
    "chars": 4018,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta name=\"viewport\" content=\"width=device-width\">\n    <meta name=\"viewport\" conten"
  },
  {
    "path": "gh-pages/index.css",
    "chars": 1080,
    "preview": ".hero {\n  width: 100vw;\n  height: 66vh;\n  background-color: #490A3D;\n  display: table-cell;\n  text-align: center;\n  vert"
  },
  {
    "path": "gh-pages/index.html",
    "chars": 6241,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta name=\"viewport\" content=\"width=device-width\">\n    <meta name=\"viewport\" conten"
  },
  {
    "path": "gh-pages/theme.css",
    "chars": 1817,
    "preview": "a,\ndiv {\n  box-sizing: border-box;\n}\na {\n  text-decoration: none;\n}\nh1,\nh2,\nh3,\nh4 {\n  color: black;\n  box-sizing: borde"
  },
  {
    "path": "gifler.bare.js",
    "chars": 11445,
    "preview": "// Generated by CoffeeScript 1.10.0\nvar Animator, Decoder, Gif, GifReader, Promise, gifler,\n  bind = function(fn, me){ r"
  },
  {
    "path": "gifler.bundle.js",
    "chars": 210732,
    "preview": "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0)"
  },
  {
    "path": "metalsmith.json",
    "chars": 701,
    "preview": "{\n  \"source\"      : \"site\",\n  \"destination\" : \"gh-pages\",\n  \"plugins\"     : {\n    \"metalsmith-less\" : {\n      \"render\" :"
  },
  {
    "path": "package.json",
    "chars": 1653,
    "preview": "{\n  \"name\"        : \"gifler\",\n  \"version\"     : \"0.3.0\",\n  \"description\" : \"Render GIF frames to <canvas>\",\n  \"author\"  "
  },
  {
    "path": "site/_constants.less",
    "chars": 653,
    "preview": "@color-bg      : @color-hero-bg;\n@color-content : white;\n@color-text    : #555;\n@color-header  : #45ADA8;\n\n@color-highli"
  },
  {
    "path": "site/_examples/control.js",
    "chars": 252,
    "preview": "gifler('assets/gif/run.gif')\n  .animate('canvas.play-pause')\n  .then(function(animator) {\n    $('canvas.play-pause').cli"
  },
  {
    "path": "site/_examples/rainbow.js",
    "chars": 854,
    "preview": "var frames = 0;\n\nfunction onDrawFrame(ctx, frame) {\n  // Match width/height to remove distortion\n  ctx.canvas.width  = c"
  },
  {
    "path": "site/_examples/simple.js",
    "chars": 62,
    "preview": "gifler('assets/gif/run.gif').animate('canvas.running-pikachu')"
  },
  {
    "path": "site/_layout.jade",
    "chars": 833,
    "preview": "doctype\nhtml\n  head\n    meta(name='viewport', content='width=device-width')\n    meta(name='viewport', content='initial-s"
  },
  {
    "path": "site/_nav.jade",
    "chars": 297,
    "preview": ".nav-top.row\n  .nav-left\n    a(href=\"./\") Gifler\n    a(href=\"examples.html\") examples\n    a(href=\"docs.html\") docs\n\n  .n"
  },
  {
    "path": "site/assets/gifler.js",
    "chars": 84072,
    "preview": "/** gifler.js | github.com/themadcreator/gifler | @license: Apache-2.0 */\n!function t(e,n,r){function i(s,a){if(!n[s]){i"
  },
  {
    "path": "site/assets/lib/highlight.pack.js",
    "chars": 14771,
    "preview": "!function(e){\"undefined\"!=typeof exports?e(exports):(window.hljs=e({}),\"function\"==typeof define&&define.amd&&define(\"hl"
  },
  {
    "path": "site/assets/lib/monokai_sublime.css",
    "chars": 2477,
    "preview": "/*\n\nMonokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/\n\n*/\n\n.hljs {\n  display: bl"
  },
  {
    "path": "site/docs.jade",
    "chars": 506,
    "preview": "extend _layout.jade\n\nblock style\n  link(rel=\"stylesheet\" href=\"docs.css\")\n\nmixin documentation(doc)\n  a(name=doc.head hr"
  },
  {
    "path": "site/docs.less",
    "chars": 546,
    "preview": "@import \"_constants.less\";\n\nh2 { \n  font-weight   : 100;\n  color         : @color-nav;\n  font-size     : 30px;\n  line-he"
  },
  {
    "path": "site/examples.jade",
    "chars": 943,
    "preview": "---\nbase     : 'assets/gif'\nexamples :\n  nyancat :\n    url    : 'nyan.gif'\n    source : 'http://www.wired.co.uk/'\n  flor"
  },
  {
    "path": "site/examples.less",
    "chars": 571,
    "preview": "@import \"_constants.less\";\n\nh3 {\n  font-size : 30px;\n  line-height : 40px;\n}\n\n.example-size(@dim) {\n  td img {\n    width"
  },
  {
    "path": "site/index.jade",
    "chars": 2273,
    "preview": "---\nexamples :\n  -\n    title       : 'Hello, Gifler!'\n    key         : 'running-pikachu'\n    description : >\n      Gett"
  },
  {
    "path": "site/index.less",
    "chars": 1064,
    "preview": "@import \"_constants.less\";\n\n.hero {\n  width            : 100vw;\n  height           : 66vh;\n  background-color : @color-h"
  },
  {
    "path": "site/theme.less",
    "chars": 2108,
    "preview": "@import \"_constants.less\";\n\na,div {\n  box-sizing : border-box;\n}\n\na {\n  text-decoration : none;\n}\n\nh1, h2, h3, h4 {\n  co"
  },
  {
    "path": "src/gifler.coffee",
    "chars": 9157,
    "preview": "{GifReader} = require 'omggif'\nPromise     = require 'bluebird'\n\n# For more on the file format for GIFs\n# http://www.w3."
  }
]

About this extraction

This page contains the full source code of the themadcreator/gifler GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 33 files (457.8 KB), approximately 133.3k tokens, and a symbol index with 469 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!