<html>
    <head>
        <title>Wheel of fortune Wheel</title>
    </head>
    <body>
      <img style="display: inline-block; margin-bottom: 1px;" id="spin_button" class="clickable" src="http://dougtesting.net//elements/images/examples/spin_off.png" alt="Spin" onclick="startSpin();">
        <canvas id='canvas' style='display: inline-block;' width='300' height='300'>
            Canvas not supported, use another browser.
        </canvas>
    </body>
</html>
/*!
 * VERSION: 1.11.8
 * DATE: 2014-05-13
 * UPDATES AND DOCS AT: http://www.greensock.com
 * 
 * Includes all of the following: TweenLite, TweenMax, TimelineLite, TimelineMax, EasePack, CSSPlugin, RoundPropsPlugin, BezierPlugin, AttrPlugin, DirectionalRotationPlugin
 *
 * @license Copyright (c) 2008-2014, GreenSock. All rights reserved.
 * This work is subject to the terms at http://www.greensock.com/terms_of_use.html or for
 * Club GreenSock members, the software agreement that was issued with your membership.
 * 
 * @author: Jack Doyle, [email protected]
 **/
(window._gsQueue || (window._gsQueue = [])).push(function() {
    "use strict";
    window._gsDefine("TweenMax", ["core.Animation", "core.SimpleTimeline", "TweenLite"], function(t, e, i) {
        var s = [].slice
          , r = function(t, e, s) {
            i.call(this, t, e, s),
            this._cycle = 0,
            this._yoyo = this.vars.yoyo === !0,
            this._repeat = this.vars.repeat || 0,
            this._repeatDelay = this.vars.repeatDelay || 0,
            this._dirty = !0,
            this.render = r.prototype.render
        }
          , n = 1e-10
          , a = i._internals.isSelector
          , o = i._internals.isArray
          , h = r.prototype = i.to({}, .1, {})
          , l = [];
        r.version = "1.11.8",
        h.constructor = r,
        h.kill()._gc = !1,
        r.killTweensOf = r.killDelayedCallsTo = i.killTweensOf,
        r.getTweensOf = i.getTweensOf,
        r.ticker = i.ticker,
        h.invalidate = function() {
            return this._yoyo = this.vars.yoyo === !0,
            this._repeat = this.vars.repeat || 0,
            this._repeatDelay = this.vars.repeatDelay || 0,
            this._uncache(!0),
            i.prototype.invalidate.call(this)
        }
        ,
        h.updateTo = function(t, e) {
            var s, r = this.ratio;
            e && this._startTime < this._timeline._time && (this._startTime = this._timeline._time,
            this._uncache(!1),
            this._gc ? this._enabled(!0, !1) : this._timeline.insert(this, this._startTime - this._delay));
            for (s in t)
                this.vars[s] = t[s];
            if (this._initted)
                if (e)
                    this._initted = !1;
                else if (this._gc && this._enabled(!0, !1),
                this._notifyPluginsOfEnabled && this._firstPT && i._onPluginEvent("_onDisable", this),
                this._time / this._duration > .998) {
                    var n = this._time;
                    this.render(0, !0, !1),
                    this._initted = !1,
                    this.render(n, !0, !1)
                } else if (this._time > 0) {
                    this._initted = !1,
                    this._init();
                    for (var a, o = 1 / (1 - r), h = this._firstPT; h; )
                        a = h.s + h.c,
                        h.c *= o,
                        h.s = a - h.c,
                        h = h._next
                }
            return this
        }
        ,
        h.render = function(t, e, i) {
            this._initted || 0 === this._duration && this.vars.repeat && this.invalidate();
            var s, r, a, o, h, _, u, p, c = this._dirty ? this.totalDuration() : this._totalDuration, f = this._time, m = this._totalTime, d = this._cycle, g = this._duration;
            if (t >= c ? (this._totalTime = c,
            this._cycle = this._repeat,
            this._yoyo && 0 !== (1 & this._cycle) ? (this._time = 0,
            this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0) : (this._time = g,
            this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1),
            this._reversed || (s = !0,
            r = "onComplete"),
            0 === g && (p = this._rawPrevTime,
            this._startTime === this._timeline._duration && (t = 0),
            (0 === t || 0 > p || p === n) && p !== t && (i = !0,
            p > n && (r = "onReverseComplete")),
            this._rawPrevTime = p = !e || t || this._rawPrevTime === t ? t : n)) : 1e-7 > t ? (this._totalTime = this._time = this._cycle = 0,
            this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0,
            (0 !== m || 0 === g && this._rawPrevTime > 0 && this._rawPrevTime !== n) && (r = "onReverseComplete",
            s = this._reversed),
            0 > t ? (this._active = !1,
            0 === g && (this._rawPrevTime >= 0 && (i = !0),
            this._rawPrevTime = p = !e || t || this._rawPrevTime === t ? t : n)) : this._initted || (i = !0)) : (this._totalTime = this._time = t,
            0 !== this._repeat && (o = g + this._repeatDelay,
            this._cycle = this._totalTime / o >> 0,
            0 !== this._cycle && this._cycle === this._totalTime / o && this._cycle--,
            this._time = this._totalTime - this._cycle * o,
            this._yoyo && 0 !== (1 & this._cycle) && (this._time = g - this._time),
            this._time > g ? this._time = g : 0 > this._time && (this._time = 0)),
            this._easeType ? (h = this._time / g,
            _ = this._easeType,
            u = this._easePower,
            (1 === _ || 3 === _ && h >= .5) && (h = 1 - h),
            3 === _ && (h *= 2),
            1 === u ? h *= h : 2 === u ? h *= h * h : 3 === u ? h *= h * h * h : 4 === u && (h *= h * h * h * h),
            this.ratio = 1 === _ ? 1 - h : 2 === _ ? h : .5 > this._time / g ? h / 2 : 1 - h / 2) : this.ratio = this._ease.getRatio(this._time / g)),
            f === this._time && !i && d === this._cycle)
                return m !== this._totalTime && this._onUpdate && (e || this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || l)),
                void 0;
            if (!this._initted) {
                if (this._init(),
                !this._initted || this._gc)
                    return;
                this._time && !s ? this.ratio = this._ease.getRatio(this._time / g) : s && this._ease._calcEnd && (this.ratio = this._ease.getRatio(0 === this._time ? 0 : 1))
            }
            for (this._active || !this._paused && this._time !== f && t >= 0 && (this._active = !0),
            0 === m && (this._startAt && (t >= 0 ? this._startAt.render(t, e, i) : r || (r = "_dummyGS")),
            this.vars.onStart && (0 !== this._totalTime || 0 === g) && (e || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || l))),
            a = this._firstPT; a; )
                a.f ? a.t[a.p](a.c * this.ratio + a.s) : a.t[a.p] = a.c * this.ratio + a.s,
                a = a._next;
            this._onUpdate && (0 > t && this._startAt && this._startTime && this._startAt.render(t, e, i),
            e || (this._totalTime !== m || s) && this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || l)),
            this._cycle !== d && (e || this._gc || this.vars.onRepeat && this.vars.onRepeat.apply(this.vars.onRepeatScope || this, this.vars.onRepeatParams || l)),
            r && (this._gc || (0 > t && this._startAt && !this._onUpdate && this._startTime && this._startAt.render(t, e, i),
            s && (this._timeline.autoRemoveChildren && this._enabled(!1, !1),
            this._active = !1),
            !e && this.vars[r] && this.vars[r].apply(this.vars[r + "Scope"] || this, this.vars[r + "Params"] || l),
            0 === g && this._rawPrevTime === n && p !== n && (this._rawPrevTime = 0)))
        }
        ,
        r.to = function(t, e, i) {
            return new r(t,e,i)
        }
        ,
        r.from = function(t, e, i) {
            return i.runBackwards = !0,
            i.immediateRender = 0 != i.immediateRender,
            new r(t,e,i)
        }
        ,
        r.fromTo = function(t, e, i, s) {
            return s.startAt = i,
            s.immediateRender = 0 != s.immediateRender && 0 != i.immediateRender,
            new r(t,e,s)
        }
        ,
        r.staggerTo = r.allTo = function(t, e, n, h, _, u, p) {
            h = h || 0;
            var c, f, m, d, g = n.delay || 0, v = [], y = function() {
                n.onComplete && n.onComplete.apply(n.onCompleteScope || this, arguments),
                _.apply(p || this, u || l)
            };
            for (o(t) || ("string" == typeof t && (t = i.selector(t) || t),
            a(t) && (t = s.call(t, 0))),
            c = t.length,
            m = 0; c > m; m++) {
                f = {};
                for (d in n)
                    f[d] = n[d];
                f.delay = g,
                m === c - 1 && _ && (f.onComplete = y),
                v[m] = new r(t[m],e,f),
                g += h
            }
            return v
        }
        ,
        r.staggerFrom = r.allFrom = function(t, e, i, s, n, a, o) {
            return i.runBackwards = !0,
            i.immediateRender = 0 != i.immediateRender,
            r.staggerTo(t, e, i, s, n, a, o)
        }
        ,
        r.staggerFromTo = r.allFromTo = function(t, e, i, s, n, a, o, h) {
            return s.startAt = i,
            s.immediateRender = 0 != s.immediateRender && 0 != i.immediateRender,
            r.staggerTo(t, e, s, n, a, o, h)
        }
        ,
        r.delayedCall = function(t, e, i, s, n) {
            return new r(e,0,{
                delay: t,
                onComplete: e,
                onCompleteParams: i,
                onCompleteScope: s,
                onReverseComplete: e,
                onReverseCompleteParams: i,
                onReverseCompleteScope: s,
                immediateRender: !1,
                useFrames: n,
                overwrite: 0
            })
        }
        ,
        r.set = function(t, e) {
            return new r(t,0,e)
        }
        ,
        r.isTweening = function(t) {
            return i.getTweensOf(t, !0).length > 0
        }
        ;
        var _ = function(t, e) {
            for (var s = [], r = 0, n = t._first; n; )
                n instanceof i ? s[r++] = n : (e && (s[r++] = n),
                s = s.concat(_(n, e)),
                r = s.length),
                n = n._next;
            return s
        }
          , u = r.getAllTweens = function(e) {
            return _(t._rootTimeline, e).concat(_(t._rootFramesTimeline, e))
        }
        ;
        r.killAll = function(t, i, s, r) {
            null == i && (i = !0),
            null == s && (s = !0);
            var n, a, o, h = u(0 != r), l = h.length, _ = i && s && r;
            for (o = 0; l > o; o++)
                a = h[o],
                (_ || a instanceof e || (n = a.target === a.vars.onComplete) && s || i && !n) && (t ? a.totalTime(a.totalDuration()) : a._enabled(!1, !1))
        }
        ,
        r.killChildTweensOf = function(t, e) {
            if (null != t) {
                var n, h, l, _, u, p = i._tweenLookup;
                if ("string" == typeof t && (t = i.selector(t) || t),
                a(t) && (t = s.call(t, 0)),
                o(t))
                    for (_ = t.length; --_ > -1; )
                        r.killChildTweensOf(t[_], e);
                else {
                    n = [];
                    for (l in p)
                        for (h = p[l].target.parentNode; h; )
                            h === t && (n = n.concat(p[l].tweens)),
                            h = h.parentNode;
                    for (u = n.length,
                    _ = 0; u > _; _++)
                        e && n[_].totalTime(n[_].totalDuration()),
                        n[_]._enabled(!1, !1)
                }
            }
        }
        ;
        var p = function(t, i, s, r) {
            i = i !== !1,
            s = s !== !1,
            r = r !== !1;
            for (var n, a, o = u(r), h = i && s && r, l = o.length; --l > -1; )
                a = o[l],
                (h || a instanceof e || (n = a.target === a.vars.onComplete) && s || i && !n) && a.paused(t)
        };
        return r.pauseAll = function(t, e, i) {
            p(!0, t, e, i)
        }
        ,
        r.resumeAll = function(t, e, i) {
            p(!1, t, e, i)
        }
        ,
        r.globalTimeScale = function(e) {
            var s = t._rootTimeline
              , r = i.ticker.time;
            return arguments.length ? (e = e || n,
            s._startTime = r - (r - s._startTime) * s._timeScale / e,
            s = t._rootFramesTimeline,
            r = i.ticker.frame,
            s._startTime = r - (r - s._startTime) * s._timeScale / e,
            s._timeScale = t._rootTimeline._timeScale = e,
            e) : s._timeScale
        }
        ,
        h.progress = function(t) {
            return arguments.length ? this.totalTime(this.duration() * (this._yoyo && 0 !== (1 & this._cycle) ? 1 - t : t) + this._cycle * (this._duration + this._repeatDelay), !1) : this._time / this.duration()
        }
        ,
        h.totalProgress = function(t) {
            return arguments.length ? this.totalTime(this.totalDuration() * t, !1) : this._totalTime / this.totalDuration()
        }
        ,
        h.time = function(t, e) {
            return arguments.length ? (this._dirty && this.totalDuration(),
            t > this._duration && (t = this._duration),
            this._yoyo && 0 !== (1 & this._cycle) ? t = this._duration - t + this._cycle * (this._duration + this._repeatDelay) : 0 !== this._repeat && (t += this._cycle * (this._duration + this._repeatDelay)),
            this.totalTime(t, e)) : this._time
        }
        ,
        h.duration = function(e) {
            return arguments.length ? t.prototype.duration.call(this, e) : this._duration
        }
        ,
        h.totalDuration = function(t) {
            return arguments.length ? -1 === this._repeat ? this : this.duration((t - this._repeat * this._repeatDelay) / (this._repeat + 1)) : (this._dirty && (this._totalDuration = -1 === this._repeat ? 999999999999 : this._duration * (this._repeat + 1) + this._repeatDelay * this._repeat,
            this._dirty = !1),
            this._totalDuration)
        }
        ,
        h.repeat = function(t) {
            return arguments.length ? (this._repeat = t,
            this._uncache(!0)) : this._repeat
        }
        ,
        h.repeatDelay = function(t) {
            return arguments.length ? (this._repeatDelay = t,
            this._uncache(!0)) : this._repeatDelay
        }
        ,
        h.yoyo = function(t) {
            return arguments.length ? (this._yoyo = t,
            this) : this._yoyo
        }
        ,
        r
    }, !0),
    window._gsDefine("TimelineLite", ["core.Animation", "core.SimpleTimeline", "TweenLite"], function(t, e, i) {
        var s = function(t) {
            e.call(this, t),
            this._labels = {},
            this.autoRemoveChildren = this.vars.autoRemoveChildren === !0,
            this.smoothChildTiming = this.vars.smoothChildTiming === !0,
            this._sortChildren = !0,
            this._onUpdate = this.vars.onUpdate;
            var i, s, r = this.vars;
            for (s in r)
                i = r[s],
                a(i) && -1 !== i.join("").indexOf("{self}") && (r[s] = this._swapSelfInParams(i));
            a(r.tweens) && this.add(r.tweens, 0, r.align, r.stagger)
        }
          , r = 1e-10
          , n = i._internals.isSelector
          , a = i._internals.isArray
          , o = []
          , h = window._gsDefine.globals
          , l = function(t) {
            var e, i = {};
            for (e in t)
                i[e] = t[e];
            return i
        }
          , _ = function(t, e, i, s) {
            t._timeline.pause(t._startTime),
            e && e.apply(s || t._timeline, i || o)
        }
          , u = o.slice
          , p = s.prototype = new e;
        return s.version = "1.11.8",
        p.constructor = s,
        p.kill()._gc = !1,
        p.to = function(t, e, s, r) {
            var n = s.repeat && h.TweenMax || i;
            return e ? this.add(new n(t,e,s), r) : this.set(t, s, r)
        }
        ,
        p.from = function(t, e, s, r) {
            return this.add((s.repeat && h.TweenMax || i).from(t, e, s), r)
        }
        ,
        p.fromTo = function(t, e, s, r, n) {
            var a = r.repeat && h.TweenMax || i;
            return e ? this.add(a.fromTo(t, e, s, r), n) : this.set(t, r, n)
        }
        ,
        p.staggerTo = function(t, e, r, a, o, h, _, p) {
            var c, f = new s({
                onComplete: h,
                onCompleteParams: _,
                onCompleteScope: p,
                smoothChildTiming: this.smoothChildTiming
            });
            for ("string" == typeof t && (t = i.selector(t) || t),
            n(t) && (t = u.call(t, 0)),
            a = a || 0,
            c = 0; t.length > c; c++)
                r.startAt && (r.startAt = l(r.startAt)),
                f.to(t[c], e, l(r), c * a);
            return this.add(f, o)
        }
        ,
        p.staggerFrom = function(t, e, i, s, r, n, a, o) {
            return i.immediateRender = 0 != i.immediateRender,
            i.runBackwards = !0,
            this.staggerTo(t, e, i, s, r, n, a, o)
        }
        ,
        p.staggerFromTo = function(t, e, i, s, r, n, a, o, h) {
            return s.startAt = i,
            s.immediateRender = 0 != s.immediateRender && 0 != i.immediateRender,
            this.staggerTo(t, e, s, r, n, a, o, h)
        }
        ,
        p.call = function(t, e, s, r) {
            return this.add(i.delayedCall(0, t, e, s), r)
        }
        ,
        p.set = function(t, e, s) {
            return s = this._parseTimeOrLabel(s, 0, !0),
            null == e.immediateRender && (e.immediateRender = s === this._time && !this._paused),
            this.add(new i(t,0,e), s)
        }
        ,
        s.exportRoot = function(t, e) {
            t = t || {},
            null == t.smoothChildTiming && (t.smoothChildTiming = !0);
            var r, n, a = new s(t), o = a._timeline;
            for (null == e && (e = !0),
            o._remove(a, !0),
            a._startTime = 0,
            a._rawPrevTime = a._time = a._totalTime = o._time,
            r = o._first; r; )
                n = r._next,
                e && r instanceof i && r.target === r.vars.onComplete || a.add(r, r._startTime - r._delay),
                r = n;
            return o.add(a, 0),
            a
        }
        ,
        p.add = function(r, n, o, h) {
            var l, _, u, p, c, f;
            if ("number" != typeof n && (n = this._parseTimeOrLabel(n, 0, !0, r)),
            !(r instanceof t)) {
                if (r instanceof Array || r && r.push && a(r)) {
                    for (o = o || "normal",
                    h = h || 0,
                    l = n,
                    _ = r.length,
                    u = 0; _ > u; u++)
                        a(p = r[u]) && (p = new s({
                            tweens: p
                        })),
                        this.add(p, l),
                        "string" != typeof p && "function" != typeof p && ("sequence" === o ? l = p._startTime + p.totalDuration() / p._timeScale : "start" === o && (p._startTime -= p.delay())),
                        l += h;
                    return this._uncache(!0)
                }
                if ("string" == typeof r)
                    return this.addLabel(r, n);
                if ("function" != typeof r)
                    throw "Cannot add " + r + " into the timeline; it is not a tween, timeline, function, or string.";
                r = i.delayedCall(0, r)
            }
            if (e.prototype.add.call(this, r, n),
            (this._gc || this._time === this._duration) && !this._paused && this._duration < this.duration())
                for (c = this,
                f = c.rawTime() > r._startTime; c._timeline; )
                    f && c._timeline.smoothChildTiming ? c.totalTime(c._totalTime, !0) : c._gc && c._enabled(!0, !1),
                    c = c._timeline;
            return this
        }
        ,
        p.remove = function(e) {
            if (e instanceof t)
                return this._remove(e, !1);
            if (e instanceof Array || e && e.push && a(e)) {
                for (var i = e.length; --i > -1; )
                    this.remove(e[i]);
                return this
            }
            return "string" == typeof e ? this.removeLabel(e) : this.kill(null, e)
        }
        ,
        p._remove = function(t, i) {
            e.prototype._remove.call(this, t, i);
            var s = this._last;
            return s ? this._time > s._startTime + s._totalDuration / s._timeScale && (this._time = this.duration(),
            this._totalTime = this._totalDuration) : this._time = this._totalTime = this._duration = this._totalDuration = 0,
            this
        }
        ,
        p.append = function(t, e) {
            return this.add(t, this._parseTimeOrLabel(null, e, !0, t))
        }
        ,
        p.insert = p.insertMultiple = function(t, e, i, s) {
            return this.add(t, e || 0, i, s)
        }
        ,
        p.appendMultiple = function(t, e, i, s) {
            return this.add(t, this._parseTimeOrLabel(null, e, !0, t), i, s)
        }
        ,
        p.addLabel = function(t, e) {
            return this._labels[t] = this._parseTimeOrLabel(e),
            this
        }
        ,
        p.addPause = function(t, e, i, s) {
            return this.call(_, ["{self}", e, i, s], this, t)
        }
        ,
        p.removeLabel = function(t) {
            return delete this._labels[t],
            this
        }
        ,
        p.getLabelTime = function(t) {
            return null != this._labels[t] ? this._labels[t] : -1
        }
        ,
        p._parseTimeOrLabel = function(e, i, s, r) {
            var n;
            if (r instanceof t && r.timeline === this)
                this.remove(r);
            else if (r && (r instanceof Array || r.push && a(r)))
                for (n = r.length; --n > -1; )
                    r[n]instanceof t && r[n].timeline === this && this.remove(r[n]);
            if ("string" == typeof i)
                return this._parseTimeOrLabel(i, s && "number" == typeof e && null == this._labels[i] ? e - this.duration() : 0, s);
            if (i = i || 0,
            "string" != typeof e || !isNaN(e) && null == this._labels[e])
                null == e && (e = this.duration());
            else {
                if (n = e.indexOf("="),
                -1 === n)
                    return null == this._labels[e] ? s ? this._labels[e] = this.duration() + i : i : this._labels[e] + i;
                i = parseInt(e.charAt(n - 1) + "1", 10) * Number(e.substr(n + 1)),
                e = n > 1 ? this._parseTimeOrLabel(e.substr(0, n - 1), 0, s) : this.duration()
            }
            return Number(e) + i
        }
        ,
        p.seek = function(t, e) {
            return this.totalTime("number" == typeof t ? t : this._parseTimeOrLabel(t), e !== !1)
        }
        ,
        p.stop = function() {
            return this.paused(!0)
        }
        ,
        p.gotoAndPlay = function(t, e) {
            return this.play(t, e)
        }
        ,
        p.gotoAndStop = function(t, e) {
            return this.pause(t, e)
        }
        ,
        p.render = function(t, e, i) {
            this._gc && this._enabled(!0, !1);
            var s, n, a, h, l, _ = this._dirty ? this.totalDuration() : this._totalDuration, u = this._time, p = this._startTime, c = this._timeScale, f = this._paused;
            if (t >= _ ? (this._totalTime = this._time = _,
            this._reversed || this._hasPausedChild() || (n = !0,
            h = "onComplete",
            0 === this._duration && (0 === t || 0 > this._rawPrevTime || this._rawPrevTime === r) && this._rawPrevTime !== t && this._first && (l = !0,
            this._rawPrevTime > r && (h = "onReverseComplete"))),
            this._rawPrevTime = this._duration || !e || t || this._rawPrevTime === t ? t : r,
            t = _ + 1e-4) : 1e-7 > t ? (this._totalTime = this._time = 0,
            (0 !== u || 0 === this._duration && this._rawPrevTime !== r && (this._rawPrevTime > 0 || 0 > t && this._rawPrevTime >= 0)) && (h = "onReverseComplete",
            n = this._reversed),
            0 > t ? (this._active = !1,
            0 === this._duration && this._rawPrevTime >= 0 && this._first && (l = !0),
            this._rawPrevTime = t) : (this._rawPrevTime = this._duration || !e || t || this._rawPrevTime === t ? t : r,
            t = 0,
            this._initted || (l = !0))) : this._totalTime = this._time = this._rawPrevTime = t,
            this._time !== u && this._first || i || l) {
                if (this._initted || (this._initted = !0),
                this._active || !this._paused && this._time !== u && t > 0 && (this._active = !0),
                0 === u && this.vars.onStart && 0 !== this._time && (e || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || o)),
                this._time >= u)
                    for (s = this._first; s && (a = s._next,
                    !this._paused || f); )
                        (s._active || s._startTime <= this._time && !s._paused && !s._gc) && (s._reversed ? s.render((s._dirty ? s.totalDuration() : s._totalDuration) - (t - s._startTime) * s._timeScale, e, i) : s.render((t - s._startTime) * s._timeScale, e, i)),
                        s = a;
                else
                    for (s = this._last; s && (a = s._prev,
                    !this._paused || f); )
                        (s._active || u >= s._startTime && !s._paused && !s._gc) && (s._reversed ? s.render((s._dirty ? s.totalDuration() : s._totalDuration) - (t - s._startTime) * s._timeScale, e, i) : s.render((t - s._startTime) * s._timeScale, e, i)),
                        s = a;
                this._onUpdate && (e || this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || o)),
                h && (this._gc || (p === this._startTime || c !== this._timeScale) && (0 === this._time || _ >= this.totalDuration()) && (n && (this._timeline.autoRemoveChildren && this._enabled(!1, !1),
                this._active = !1),
                !e && this.vars[h] && this.vars[h].apply(this.vars[h + "Scope"] || this, this.vars[h + "Params"] || o)))
            }
        }
        ,
        p._hasPausedChild = function() {
            for (var t = this._first; t; ) {
                if (t._paused || t instanceof s && t._hasPausedChild())
                    return !0;
                t = t._next
            }
            return !1
        }
        ,
        p.getChildren = function(t, e, s, r) {
            r = r || -9999999999;
            for (var n = [], a = this._first, o = 0; a; )
                r > a._startTime || (a instanceof i ? e !== !1 && (n[o++] = a) : (s !== !1 && (n[o++] = a),
                t !== !1 && (n = n.concat(a.getChildren(!0, e, s)),
                o = n.length))),
                a = a._next;
            return n
        }
        ,
        p.getTweensOf = function(t, e) {
            for (var s = i.getTweensOf(t), r = s.length, n = [], a = 0; --r > -1; )
                (s[r].timeline === this || e && this._contains(s[r])) && (n[a++] = s[r]);
            return n
        }
        ,
        p._contains = function(t) {
            for (var e = t.timeline; e; ) {
                if (e === this)
                    return !0;
                e = e.timeline
            }
            return !1
        }
        ,
        p.shiftChildren = function(t, e, i) {
            i = i || 0;
            for (var s, r = this._first, n = this._labels; r; )
                r._startTime >= i && (r._startTime += t),
                r = r._next;
            if (e)
                for (s in n)
                    n[s] >= i && (n[s] += t);
            return this._uncache(!0)
        }
        ,
        p._kill = function(t, e) {
            if (!t && !e)
                return this._enabled(!1, !1);
            for (var i = e ? this.getTweensOf(e) : this.getChildren(!0, !0, !1), s = i.length, r = !1; --s > -1; )
                i[s]._kill(t, e) && (r = !0);
            return r
        }
        ,
        p.clear = function(t) {
            var e = this.getChildren(!1, !0, !0)
              , i = e.length;
            for (this._time = this._totalTime = 0; --i > -1; )
                e[i]._enabled(!1, !1);
            return t !== !1 && (this._labels = {}),
            this._uncache(!0)
        }
        ,
        p.invalidate = function() {
            for (var t = this._first; t; )
                t.invalidate(),
                t = t._next;
            return this
        }
        ,
        p._enabled = function(t, i) {
            if (t === this._gc)
                for (var s = this._first; s; )
                    s._enabled(t, !0),
                    s = s._next;
            return e.prototype._enabled.call(this, t, i)
        }
        ,
        p.duration = function(t) {
            return arguments.length ? (0 !== this.duration() && 0 !== t && this.timeScale(this._duration / t),
            this) : (this._dirty && this.totalDuration(),
            this._duration)
        }
        ,
        p.totalDuration = function(t) {
            if (!arguments.length) {
                if (this._dirty) {
                    for (var e, i, s = 0, r = this._last, n = 999999999999; r; )
                        e = r._prev,
                        r._dirty && r.totalDuration(),
                        r._startTime > n && this._sortChildren && !r._paused ? this.add(r, r._startTime - r._delay) : n = r._startTime,
                        0 > r._startTime && !r._paused && (s -= r._startTime,
                        this._timeline.smoothChildTiming && (this._startTime += r._startTime / this._timeScale),
                        this.shiftChildren(-r._startTime, !1, -9999999999),
                        n = 0),
                        i = r._startTime + r._totalDuration / r._timeScale,
                        i > s && (s = i),
                        r = e;
                    this._duration = this._totalDuration = s,
                    this._dirty = !1
                }
                return this._totalDuration
            }
            return 0 !== this.totalDuration() && 0 !== t && this.timeScale(this._totalDuration / t),
            this
        }
        ,
        p.usesFrames = function() {
            for (var e = this._timeline; e._timeline; )
                e = e._timeline;
            return e === t._rootFramesTimeline
        }
        ,
        p.rawTime = function() {
            return this._paused ? this._totalTime : (this._timeline.rawTime() - this._startTime) * this._timeScale
        }
        ,
        s
    }, !0),
    window._gsDefine("TimelineMax", ["TimelineLite", "TweenLite", "easing.Ease"], function(t, e, i) {
        var s = function(e) {
            t.call(this, e),
            this._repeat = this.vars.repeat || 0,
            this._repeatDelay = this.vars.repeatDelay || 0,
            this._cycle = 0,
            this._yoyo = this.vars.yoyo === !0,
            this._dirty = !0
        }
          , r = 1e-10
          , n = []
          , a = new i(null,null,1,0)
          , o = s.prototype = new t;
        return o.constructor = s,
        o.kill()._gc = !1,
        s.version = "1.11.8",
        o.invalidate = function() {
            return this._yoyo = this.vars.yoyo === !0,
            this._repeat = this.vars.repeat || 0,
            this._repeatDelay = this.vars.repeatDelay || 0,
            this._uncache(!0),
            t.prototype.invalidate.call(this)
        }
        ,
        o.addCallback = function(t, i, s, r) {
            return this.add(e.delayedCall(0, t, s, r), i)
        }
        ,
        o.removeCallback = function(t, e) {
            if (t)
                if (null == e)
                    this._kill(null, t);
                else
                    for (var i = this.getTweensOf(t, !1), s = i.length, r = this._parseTimeOrLabel(e); --s > -1; )
                        i[s]._startTime === r && i[s]._enabled(!1, !1);
            return this
        }
        ,
        o.tweenTo = function(t, i) {
            i = i || {};
            var s, r, o, h = {
                ease: a,
                overwrite: i.delay ? 2 : 1,
                useFrames: this.usesFrames(),
                immediateRender: !1
            };
            for (r in i)
                h[r] = i[r];
            return h.time = this._parseTimeOrLabel(t),
            s = Math.abs(Number(h.time) - this._time) / this._timeScale || .001,
            o = new e(this,s,h),
            h.onStart = function() {
                o.target.paused(!0),
                o.vars.time !== o.target.time() && s === o.duration() && o.duration(Math.abs(o.vars.time - o.target.time()) / o.target._timeScale),
                i.onStart && i.onStart.apply(i.onStartScope || o, i.onStartParams || n)
            }
            ,
            o
        }
        ,
        o.tweenFromTo = function(t, e, i) {
            i = i || {},
            t = this._parseTimeOrLabel(t),
            i.startAt = {
                onComplete: this.seek,
                onCompleteParams: [t],
                onCompleteScope: this
            },
            i.immediateRender = i.immediateRender !== !1;
            var s = this.tweenTo(e, i);
            return s.duration(Math.abs(s.vars.time - t) / this._timeScale || .001)
        }
        ,
        o.render = function(t, e, i) {
            this._gc && this._enabled(!0, !1);
            var s, a, o, h, l, _, u = this._dirty ? this.totalDuration() : this._totalDuration, p = this._duration, c = this._time, f = this._totalTime, m = this._startTime, d = this._timeScale, g = this._rawPrevTime, v = this._paused, y = this._cycle;
            if (t >= u ? (this._locked || (this._totalTime = u,
            this._cycle = this._repeat),
            this._reversed || this._hasPausedChild() || (a = !0,
            h = "onComplete",
            0 === this._duration && (0 === t || 0 > g || g === r) && g !== t && this._first && (l = !0,
            g > r && (h = "onReverseComplete"))),
            this._rawPrevTime = this._duration || !e || t || this._rawPrevTime === t ? t : r,
            this._yoyo && 0 !== (1 & this._cycle) ? this._time = t = 0 : (this._time = p,
            t = p + 1e-4)) : 1e-7 > t ? (this._locked || (this._totalTime = this._cycle = 0),
            this._time = 0,
            (0 !== c || 0 === p && g !== r && (g > 0 || 0 > t && g >= 0) && !this._locked) && (h = "onReverseComplete",
            a = this._reversed),
            0 > t ? (this._active = !1,
            0 === p && g >= 0 && this._first && (l = !0),
            this._rawPrevTime = t) : (this._rawPrevTime = p || !e || t || this._rawPrevTime === t ? t : r,
            t = 0,
            this._initted || (l = !0))) : (0 === p && 0 > g && (l = !0),
            this._time = this._rawPrevTime = t,
            this._locked || (this._totalTime = t,
            0 !== this._repeat && (_ = p + this._repeatDelay,
            this._cycle = this._totalTime / _ >> 0,
            0 !== this._cycle && this._cycle === this._totalTime / _ && this._cycle--,
            this._time = this._totalTime - this._cycle * _,
            this._yoyo && 0 !== (1 & this._cycle) && (this._time = p - this._time),
            this._time > p ? (this._time = p,
            t = p + 1e-4) : 0 > this._time ? this._time = t = 0 : t = this._time))),
            this._cycle !== y && !this._locked) {
                var T = this._yoyo && 0 !== (1 & y)
                  , w = T === (this._yoyo && 0 !== (1 & this._cycle))
                  , x = this._totalTime
                  , b = this._cycle
                  , P = this._rawPrevTime
                  , S = this._time;
                if (this._totalTime = y * p,
                y > this._cycle ? T = !T : this._totalTime += p,
                this._time = c,
                this._rawPrevTime = 0 === p ? g - 1e-4 : g,
                this._cycle = y,
                this._locked = !0,
                c = T ? 0 : p,
                this.render(c, e, 0 === p),
                e || this._gc || this.vars.onRepeat && this.vars.onRepeat.apply(this.vars.onRepeatScope || this, this.vars.onRepeatParams || n),
                w && (c = T ? p + 1e-4 : -1e-4,
                this.render(c, !0, !1)),
                this._locked = !1,
                this._paused && !v)
                    return;
                this._time = S,
                this._totalTime = x,
                this._cycle = b,
                this._rawPrevTime = P
            }
            if (!(this._time !== c && this._first || i || l))
                return f !== this._totalTime && this._onUpdate && (e || this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || n)),
                void 0;
            if (this._initted || (this._initted = !0),
            this._active || !this._paused && this._totalTime !== f && t > 0 && (this._active = !0),
            0 === f && this.vars.onStart && 0 !== this._totalTime && (e || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || n)),
            this._time >= c)
                for (s = this._first; s && (o = s._next,
                !this._paused || v); )
                    (s._active || s._startTime <= this._time && !s._paused && !s._gc) && (s._reversed ? s.render((s._dirty ? s.totalDuration() : s._totalDuration) - (t - s._startTime) * s._timeScale, e, i) : s.render((t - s._startTime) * s._timeScale, e, i)),
                    s = o;
            else
                for (s = this._last; s && (o = s._prev,
                !this._paused || v); )
                    (s._active || c >= s._startTime && !s._paused && !s._gc) && (s._reversed ? s.render((s._dirty ? s.totalDuration() : s._totalDuration) - (t - s._startTime) * s._timeScale, e, i) : s.render((t - s._startTime) * s._timeScale, e, i)),
                    s = o;
            this._onUpdate && (e || this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || n)),
            h && (this._locked || this._gc || (m === this._startTime || d !== this._timeScale) && (0 === this._time || u >= this.totalDuration()) && (a && (this._timeline.autoRemoveChildren && this._enabled(!1, !1),
            this._active = !1),
            !e && this.vars[h] && this.vars[h].apply(this.vars[h + "Scope"] || this, this.vars[h + "Params"] || n)))
        }
        ,
        o.getActive = function(t, e, i) {
            null == t && (t = !0),
            null == e && (e = !0),
            null == i && (i = !1);
            var s, r, n = [], a = this.getChildren(t, e, i), o = 0, h = a.length;
            for (s = 0; h > s; s++)
                r = a[s],
                r.isActive() && (n[o++] = r);
            return n
        }
        ,
        o.getLabelAfter = function(t) {
            t || 0 !== t && (t = this._time);
            var e, i = this.getLabelsArray(), s = i.length;
            for (e = 0; s > e; e++)
                if (i[e].time > t)
                    return i[e].name;
            return null
        }
        ,
        o.getLabelBefore = function(t) {
            null == t && (t = this._time);
            for (var e = this.getLabelsArray(), i = e.length; --i > -1; )
                if (t > e[i].time)
                    return e[i].name;
            return null
        }
        ,
        o.getLabelsArray = function() {
            var t, e = [], i = 0;
            for (t in this._labels)
                e[i++] = {
                    time: this._labels[t],
                    name: t
                };
            return e.sort(function(t, e) {
                return t.time - e.time
            }),
            e
        }
        ,
        o.progress = function(t) {
            return arguments.length ? this.totalTime(this.duration() * (this._yoyo && 0 !== (1 & this._cycle) ? 1 - t : t) + this._cycle * (this._duration + this._repeatDelay), !1) : this._time / this.duration()
        }
        ,
        o.totalProgress = function(t) {
            return arguments.length ? this.totalTime(this.totalDuration() * t, !1) : this._totalTime / this.totalDuration()
        }
        ,
        o.totalDuration = function(e) {
            return arguments.length ? -1 === this._repeat ? this : this.duration((e - this._repeat * this._repeatDelay) / (this._repeat + 1)) : (this._dirty && (t.prototype.totalDuration.call(this),
            this._totalDuration = -1 === this._repeat ? 999999999999 : this._duration * (this._repeat + 1) + this._repeatDelay * this._repeat),
            this._totalDuration)
        }
        ,
        o.time = function(t, e) {
            return arguments.length ? (this._dirty && this.totalDuration(),
            t > this._duration && (t = this._duration),
            this._yoyo && 0 !== (1 & this._cycle) ? t = this._duration - t + this._cycle * (this._duration + this._repeatDelay) : 0 !== this._repeat && (t += this._cycle * (this._duration + this._repeatDelay)),
            this.totalTime(t, e)) : this._time
        }
        ,
        o.repeat = function(t) {
            return arguments.length ? (this._repeat = t,
            this._uncache(!0)) : this._repeat
        }
        ,
        o.repeatDelay = function(t) {
            return arguments.length ? (this._repeatDelay = t,
            this._uncache(!0)) : this._repeatDelay
        }
        ,
        o.yoyo = function(t) {
            return arguments.length ? (this._yoyo = t,
            this) : this._yoyo
        }
        ,
        o.currentLabel = function(t) {
            return arguments.length ? this.seek(t, !0) : this.getLabelBefore(this._time + 1e-8)
        }
        ,
        s
    }, !0),
    function() {
        var t = 180 / Math.PI
          , e = []
          , i = []
          , s = []
          , r = {}
          , n = function(t, e, i, s) {
            this.a = t,
            this.b = e,
            this.c = i,
            this.d = s,
            this.da = s - t,
            this.ca = i - t,
            this.ba = e - t
        }
          , a = ",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,"
          , o = function(t, e, i, s) {
            var r = {
                a: t
            }
              , n = {}
              , a = {}
              , o = {
                c: s
            }
              , h = (t + e) / 2
              , l = (e + i) / 2
              , _ = (i + s) / 2
              , u = (h + l) / 2
              , p = (l + _) / 2
              , c = (p - u) / 8;
            return r.b = h + (t - h) / 4,
            n.b = u + c,
            r.c = n.a = (r.b + n.b) / 2,
            n.c = a.a = (u + p) / 2,
            a.b = p - c,
            o.b = _ + (s - _) / 4,
            a.c = o.a = (a.b + o.b) / 2,
            [r, n, a, o]
        }
          , h = function(t, r, n, a, h) {
            var l, _, u, p, c, f, m, d, g, v, y, T, w, x = t.length - 1, b = 0, P = t[0].a;
            for (l = 0; x > l; l++)
                c = t[b],
                _ = c.a,
                u = c.d,
                p = t[b + 1].d,
                h ? (y = e[l],
                T = i[l],
                w = .25 * (T + y) * r / (a ? .5 : s[l] || .5),
                f = u - (u - _) * (a ? .5 * r : 0 !== y ? w / y : 0),
                m = u + (p - u) * (a ? .5 * r : 0 !== T ? w / T : 0),
                d = u - (f + ((m - f) * (3 * y / (y + T) + .5) / 4 || 0))) : (f = u - .5 * (u - _) * r,
                m = u + .5 * (p - u) * r,
                d = u - (f + m) / 2),
                f += d,
                m += d,
                c.c = g = f,
                c.b = 0 !== l ? P : P = c.a + .6 * (c.c - c.a),
                c.da = u - _,
                c.ca = g - _,
                c.ba = P - _,
                n ? (v = o(_, P, g, u),
                t.splice(b, 1, v[0], v[1], v[2], v[3]),
                b += 4) : b++,
                P = m;
            c = t[b],
            c.b = P,
            c.c = P + .4 * (c.d - P),
            c.da = c.d - c.a,
            c.ca = c.c - c.a,
            c.ba = P - c.a,
            n && (v = o(c.a, P, c.c, c.d),
            t.splice(b, 1, v[0], v[1], v[2], v[3]))
        }
          , l = function(t, s, r, a) {
            var o, h, l, _, u, p, c = [];
            if (a)
                for (t = [a].concat(t),
                h = t.length; --h > -1; )
                    "string" == typeof (p = t[h][s]) && "=" === p.charAt(1) && (t[h][s] = a[s] + Number(p.charAt(0) + p.substr(2)));
            if (o = t.length - 2,
            0 > o)
                return c[0] = new n(t[0][s],0,0,t[-1 > o ? 0 : 1][s]),
                c;
            for (h = 0; o > h; h++)
                l = t[h][s],
                _ = t[h + 1][s],
                c[h] = new n(l,0,0,_),
                r && (u = t[h + 2][s],
                e[h] = (e[h] || 0) + (_ - l) * (_ - l),
                i[h] = (i[h] || 0) + (u - _) * (u - _));
            return c[h] = new n(t[h][s],0,0,t[h + 1][s]),
            c
        }
          , _ = function(t, n, o, _, u, p) {
            var c, f, m, d, g, v, y, T, w = {}, x = [], b = p || t[0];
            u = "string" == typeof u ? "," + u + "," : a,
            null == n && (n = 1);
            for (f in t[0])
                x.push(f);
            if (t.length > 1) {
                for (T = t[t.length - 1],
                y = !0,
                c = x.length; --c > -1; )
                    if (f = x[c],
                    Math.abs(b[f] - T[f]) > .05) {
                        y = !1;
                        break
                    }
                y && (t = t.concat(),
                p && t.unshift(p),
                t.push(t[1]),
                p = t[t.length - 3])
            }
            for (e.length = i.length = s.length = 0,
            c = x.length; --c > -1; )
                f = x[c],
                r[f] = -1 !== u.indexOf("," + f + ","),
                w[f] = l(t, f, r[f], p);
            for (c = e.length; --c > -1; )
                e[c] = Math.sqrt(e[c]),
                i[c] = Math.sqrt(i[c]);
            if (!_) {
                for (c = x.length; --c > -1; )
                    if (r[f])
                        for (m = w[x[c]],
                        v = m.length - 1,
                        d = 0; v > d; d++)
                            g = m[d + 1].da / i[d] + m[d].da / e[d],
                            s[d] = (s[d] || 0) + g * g;
                for (c = s.length; --c > -1; )
                    s[c] = Math.sqrt(s[c])
            }
            for (c = x.length,
            d = o ? 4 : 1; --c > -1; )
                f = x[c],
                m = w[f],
                h(m, n, o, _, r[f]),
                y && (m.splice(0, d),
                m.splice(m.length - d, d));
            return w
        }
          , u = function(t, e, i) {
            e = e || "soft";
            var s, r, a, o, h, l, _, u, p, c, f, m = {}, d = "cubic" === e ? 3 : 2, g = "soft" === e, v = [];
            if (g && i && (t = [i].concat(t)),
            null == t || d + 1 > t.length)
                throw "invalid Bezier data";
            for (p in t[0])
                v.push(p);
            for (l = v.length; --l > -1; ) {
                for (p = v[l],
                m[p] = h = [],
                c = 0,
                u = t.length,
                _ = 0; u > _; _++)
                    s = null == i ? t[_][p] : "string" == typeof (f = t[_][p]) && "=" === f.charAt(1) ? i[p] + Number(f.charAt(0) + f.substr(2)) : Number(f),
                    g && _ > 1 && u - 1 > _ && (h[c++] = (s + h[c - 2]) / 2),
                    h[c++] = s;
                for (u = c - d + 1,
                c = 0,
                _ = 0; u > _; _ += d)
                    s = h[_],
                    r = h[_ + 1],
                    a = h[_ + 2],
                    o = 2 === d ? 0 : h[_ + 3],
                    h[c++] = f = 3 === d ? new n(s,r,a,o) : new n(s,(2 * r + s) / 3,(2 * r + a) / 3,a);
                h.length = c
            }
            return m
        }
          , p = function(t, e, i) {
            for (var s, r, n, a, o, h, l, _, u, p, c, f = 1 / i, m = t.length; --m > -1; )
                for (p = t[m],
                n = p.a,
                a = p.d - n,
                o = p.c - n,
                h = p.b - n,
                s = r = 0,
                _ = 1; i >= _; _++)
                    l = f * _,
                    u = 1 - l,
                    s = r - (r = (l * l * a + 3 * u * (l * o + u * h)) * l),
                    c = m * i + _ - 1,
                    e[c] = (e[c] || 0) + s * s
        }
          , c = function(t, e) {
            e = e >> 0 || 6;
            var i, s, r, n, a = [], o = [], h = 0, l = 0, _ = e - 1, u = [], c = [];
            for (i in t)
                p(t[i], a, e);
            for (r = a.length,
            s = 0; r > s; s++)
                h += Math.sqrt(a[s]),
                n = s % e,
                c[n] = h,
                n === _ && (l += h,
                n = s / e >> 0,
                u[n] = c,
                o[n] = l,
                h = 0,
                c = []);
            return {
                length: l,
                lengths: o,
                segments: u
            }
        }
          , f = window._gsDefine.plugin({
            propName: "bezier",
            priority: -1,
            version: "1.3.2",
            API: 2,
            global: !0,
            init: function(t, e, i) {
                this._target = t,
                e instanceof Array && (e = {
                    values: e
                }),
                this._func = {},
                this._round = {},
                this._props = [],
                this._timeRes = null == e.timeResolution ? 6 : parseInt(e.timeResolution, 10);
                var s, r, n, a, o, h = e.values || [], l = {}, p = h[0], f = e.autoRotate || i.vars.orientToBezier;
                this._autoRotate = f ? f instanceof Array ? f : [["x", "y", "rotation", f === !0 ? 0 : Number(f) || 0]] : null;
                for (s in p)
                    this._props.push(s);
                for (n = this._props.length; --n > -1; )
                    s = this._props[n],
                    this._overwriteProps.push(s),
                    r = this._func[s] = "function" == typeof t[s],
                    l[s] = r ? t[s.indexOf("set") || "function" != typeof t["get" + s.substr(3)] ? s : "get" + s.substr(3)]() : parseFloat(t[s]),
                    o || l[s] !== h[0][s] && (o = l);
                if (this._beziers = "cubic" !== e.type && "quadratic" !== e.type && "soft" !== e.type ? _(h, isNaN(e.curviness) ? 1 : e.curviness, !1, "thruBasic" === e.type, e.correlate, o) : u(h, e.type, l),
                this._segCount = this._beziers[s].length,
                this._timeRes) {
                    var m = c(this._beziers, this._timeRes);
                    this._length = m.length,
                    this._lengths = m.lengths,
                    this._segments = m.segments,
                    this._l1 = this._li = this._s1 = this._si = 0,
                    this._l2 = this._lengths[0],
                    this._curSeg = this._segments[0],
                    this._s2 = this._curSeg[0],
                    this._prec = 1 / this._curSeg.length
                }
                if (f = this._autoRotate)
                    for (this._initialRotations = [],
                    f[0]instanceof Array || (this._autoRotate = f = [f]),
                    n = f.length; --n > -1; ) {
                        for (a = 0; 3 > a; a++)
                            s = f[n][a],
                            this._func[s] = "function" == typeof t[s] ? t[s.indexOf("set") || "function" != typeof t["get" + s.substr(3)] ? s : "get" + s.substr(3)] : !1;
                        s = f[n][2],
                        this._initialRotations[n] = this._func[s] ? this._func[s].call(this._target) : this._target[s]
                    }
                return this._startRatio = i.vars.runBackwards ? 1 : 0,
                !0
            },
            set: function(e) {
                var i, s, r, n, a, o, h, l, _, u, p = this._segCount, c = this._func, f = this._target, m = e !== this._startRatio;
                if (this._timeRes) {
                    if (_ = this._lengths,
                    u = this._curSeg,
                    e *= this._length,
                    r = this._li,
                    e > this._l2 && p - 1 > r) {
                        for (l = p - 1; l > r && e >= (this._l2 = _[++r]); )
                            ;
                        this._l1 = _[r - 1],
                        this._li = r,
                        this._curSeg = u = this._segments[r],
                        this._s2 = u[this._s1 = this._si = 0]
                    } else if (this._l1 > e && r > 0) {
                        for (; r > 0 && (this._l1 = _[--r]) >= e; )
                            ;
                        0 === r && this._l1 > e ? this._l1 = 0 : r++,
                        this._l2 = _[r],
                        this._li = r,
                        this._curSeg = u = this._segments[r],
                        this._s1 = u[(this._si = u.length - 1) - 1] || 0,
                        this._s2 = u[this._si]
                    }
                    if (i = r,
                    e -= this._l1,
                    r = this._si,
                    e > this._s2 && u.length - 1 > r) {
                        for (l = u.length - 1; l > r && e >= (this._s2 = u[++r]); )
                            ;
                        this._s1 = u[r - 1],
                        this._si = r
                    } else if (this._s1 > e && r > 0) {
                        for (; r > 0 && (this._s1 = u[--r]) >= e; )
                            ;
                        0 === r && this._s1 > e ? this._s1 = 0 : r++,
                        this._s2 = u[r],
                        this._si = r
                    }
                    o = (r + (e - this._s1) / (this._s2 - this._s1)) * this._prec
                } else
                    i = 0 > e ? 0 : e >= 1 ? p - 1 : p * e >> 0,
                    o = (e - i * (1 / p)) * p;
                for (s = 1 - o,
                r = this._props.length; --r > -1; )
                    n = this._props[r],
                    a = this._beziers[n][i],
                    h = (o * o * a.da + 3 * s * (o * a.ca + s * a.ba)) * o + a.a,
                    this._round[n] && (h = Math.round(h)),
                    c[n] ? f[n](h) : f[n] = h;
                if (this._autoRotate) {
                    var d, g, v, y, T, w, x, b = this._autoRotate;
                    for (r = b.length; --r > -1; )
                        n = b[r][2],
                        w = b[r][3] || 0,
                        x = b[r][4] === !0 ? 1 : t,
                        a = this._beziers[b[r][0]],
                        d = this._beziers[b[r][1]],
                        a && d && (a = a[i],
                        d = d[i],
                        g = a.a + (a.b - a.a) * o,
                        y = a.b + (a.c - a.b) * o,
                        g += (y - g) * o,
                        y += (a.c + (a.d - a.c) * o - y) * o,
                        v = d.a + (d.b - d.a) * o,
                        T = d.b + (d.c - d.b) * o,
                        v += (T - v) * o,
                        T += (d.c + (d.d - d.c) * o - T) * o,
                        h = m ? Math.atan2(T - v, y - g) * x + w : this._initialRotations[r],
                        c[n] ? f[n](h) : f[n] = h)
                }
            }
        })
          , m = f.prototype;
        f.bezierThrough = _,
        f.cubicToQuadratic = o,
        f._autoCSS = !0,
        f.quadraticToCubic = function(t, e, i) {
            return new n(t,(2 * e + t) / 3,(2 * e + i) / 3,i)
        }
        ,
        f._cssRegister = function() {
            var t = window._gsDefine.globals.CSSPlugin;
            if (t) {
                var e = t._internals
                  , i = e._parseToProxy
                  , s = e._setPluginRatio
                  , r = e.CSSPropTween;
                e._registerComplexSpecialProp("bezier", {
                    parser: function(t, e, n, a, o, h) {
                        e instanceof Array && (e = {
                            values: e
                        }),
                        h = new f;
                        var l, _, u, p = e.values, c = p.length - 1, m = [], d = {};
                        if (0 > c)
                            return o;
                        for (l = 0; c >= l; l++)
                            u = i(t, p[l], a, o, h, c !== l),
                            m[l] = u.end;
                        for (_ in e)
                            d[_] = e[_];
                        return d.values = m,
                        o = new r(t,"bezier",0,0,u.pt,2),
                        o.data = u,
                        o.plugin = h,
                        o.setRatio = s,
                        0 === d.autoRotate && (d.autoRotate = !0),
                        !d.autoRotate || d.autoRotate instanceof Array || (l = d.autoRotate === !0 ? 0 : Number(d.autoRotate),
                        d.autoRotate = null != u.end.left ? [["left", "top", "rotation", l, !1]] : null != u.end.x ? [["x", "y", "rotation", l, !1]] : !1),
                        d.autoRotate && (a._transform || a._enableTransforms(!1),
                        u.autoRotate = a._target._gsTransform),
                        h._onInitTween(u.proxy, d, a._tween),
                        o
                    }
                })
            }
        }
        ,
        m._roundProps = function(t, e) {
            for (var i = this._overwriteProps, s = i.length; --s > -1; )
                (t[i[s]] || t.bezier || t.bezierThrough) && (this._round[i[s]] = e)
        }
        ,
        m._kill = function(t) {
            var e, i, s = this._props;
            for (e in this._beziers)
                if (e in t)
                    for (delete this._beziers[e],
                    delete this._func[e],
                    i = s.length; --i > -1; )
                        s[i] === e && s.splice(i, 1);
            return this._super._kill.call(this, t)
        }
    }(),
    window._gsDefine("plugins.CSSPlugin", ["plugins.TweenPlugin", "TweenLite"], function(t, e) {
        var i, s, r, n, a = function() {
            t.call(this, "css"),
            this._overwriteProps.length = 0,
            this.setRatio = a.prototype.setRatio
        }, o = {}, h = a.prototype = new t("css");
        h.constructor = a,
        a.version = "1.11.8",
        a.API = 2,
        a.defaultTransformPerspective = 0,
        a.defaultSkewType = "compensated",
        h = "px",
        a.suffixMap = {
            top: h,
            right: h,
            bottom: h,
            left: h,
            width: h,
            height: h,
            fontSize: h,
            padding: h,
            margin: h,
            perspective: h,
            lineHeight: ""
        };
        var l, _, u, p, c, f, m = /(?:\d|\-\d|\.\d|\-\.\d)+/g, d = /(?:\d|\-\d|\.\d|\-\.\d|\+=\d|\-=\d|\+=.\d|\-=\.\d)+/g, g = /(?:\+=|\-=|\-|\b)[\d\-\.]+[a-zA-Z0-9]*(?:%|\b)/gi, v = /[^\d\-\.]/g, y = /(?:\d|\-|\+|=|#|\.)*/g, T = /opacity *= *([^)]*)/, w = /opacity:([^;]*)/, x = /alpha\(opacity *=.+?\)/i, b = /^(rgb|hsl)/, P = /([A-Z])/g, S = /-([a-z])/gi, k = /(^(?:url\(\"|url\())|(?:(\"\))$|\)$)/gi, R = function(t, e) {
            return e.toUpperCase()
        }, A = /(?:Left|Right|Width)/i, C = /(M11|M12|M21|M22)=[\d\-\.e]+/gi, O = /progid\:DXImageTransform\.Microsoft\.Matrix\(.+?\)/i, D = /,(?=[^\)]*(?:\(|$))/gi, M = Math.PI / 180, I = 180 / Math.PI, E = {}, N = document, F = N.createElement("div"), L = N.createElement("img"), X = a._internals = {
            _specialProps: o
        }, z = navigator.userAgent, U = function() {
            var t, e = z.indexOf("Android"), i = N.createElement("div");
            return u = -1 !== z.indexOf("Safari") && -1 === z.indexOf("Chrome") && (-1 === e || Number(z.substr(e + 8, 1)) > 3),
            c = u && 6 > Number(z.substr(z.indexOf("Version/") + 8, 1)),
            p = -1 !== z.indexOf("Firefox"),
            /MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(z) && (f = parseFloat(RegExp.$1)),
            i.innerHTML = "<a style='top:1px;opacity:.55;'>a</a>",
            t = i.getElementsByTagName("a")[0],
            t ? /^0.55/.test(t.style.opacity) : !1
        }(), Y = function(t) {
            return T.test("string" == typeof t ? t : (t.currentStyle ? t.currentStyle.filter : t.style.filter) || "") ? parseFloat(RegExp.$1) / 100 : 1
        }, j = function(t) {
            window.console && console.log(t)
        }, B = "", q = "", V = function(t, e) {
            e = e || F;
            var i, s, r = e.style;
            if (void 0 !== r[t])
                return t;
            for (t = t.charAt(0).toUpperCase() + t.substr(1),
            i = ["O", "Moz", "ms", "Ms", "Webkit"],
            s = 5; --s > -1 && void 0 === r[i[s] + t]; )
                ;
            return s >= 0 ? (q = 3 === s ? "ms" : i[s],
            B = "-" + q.toLowerCase() + "-",
            q + t) : null
        }, W = N.defaultView ? N.defaultView.getComputedStyle : function() {}
        , G = a.getStyle = function(t, e, i, s, r) {
            var n;
            return U || "opacity" !== e ? (!s && t.style[e] ? n = t.style[e] : (i = i || W(t, null)) ? n = i[e] || i.getPropertyValue(e) || i.getPropertyValue(e.replace(P, "-$1").toLowerCase()) : t.currentStyle && (n = t.currentStyle[e]),
            null == r || n && "none" !== n && "auto" !== n && "auto auto" !== n ? n : r) : Y(t)
        }
        , $ = X.convertToPixels = function(t, i, s, r, n) {
            if ("px" === r || !r)
                return s;
            if ("auto" === r || !s)
                return 0;
            var o, h, l, _ = A.test(i), u = t, p = F.style, c = 0 > s;
            if (c && (s = -s),
            "%" === r && -1 !== i.indexOf("border"))
                o = s / 100 * (_ ? t.clientWidth : t.clientHeight);
            else {
                if (p.cssText = "border:0 solid red;position:" + G(t, "position") + ";line-height:0;",
                "%" !== r && u.appendChild)
                    p[_ ? "borderLeftWidth" : "borderTopWidth"] = s + r;
                else {
                    if (u = t.parentNode || N.body,
                    h = u._gsCache,
                    l = e.ticker.frame,
                    h && _ && h.time === l)
                        return h.width * s / 100;
                    p[_ ? "width" : "height"] = s + r
                }
                u.appendChild(F),
                o = parseFloat(F[_ ? "offsetWidth" : "offsetHeight"]),
                u.removeChild(F),
                _ && "%" === r && a.cacheWidths !== !1 && (h = u._gsCache = u._gsCache || {},
                h.time = l,
                h.width = 100 * (o / s)),
                0 !== o || n || (o = $(t, i, s, r, !0))
            }
            return c ? -o : o
        }
        , Z = X.calculateOffset = function(t, e, i) {
            if ("absolute" !== G(t, "position", i))
                return 0;
            var s = "left" === e ? "Left" : "Top"
              , r = G(t, "margin" + s, i);
            return t["offset" + s] - ($(t, e, parseFloat(r), r.replace(y, "")) || 0)
        }
        , Q = function(t, e) {
            var i, s, r = {};
            if (e = e || W(t, null))
                if (i = e.length)
                    for (; --i > -1; )
                        r[e[i].replace(S, R)] = e.getPropertyValue(e[i]);
                else
                    for (i in e)
                        r[i] = e[i];
            else if (e = t.currentStyle || t.style)
                for (i in e)
                    "string" == typeof i && void 0 === r[i] && (r[i.replace(S, R)] = e[i]);
            return U || (r.opacity = Y(t)),
            s = Pe(t, e, !1),
            r.rotation = s.rotation,
            r.skewX = s.skewX,
            r.scaleX = s.scaleX,
            r.scaleY = s.scaleY,
            r.x = s.x,
            r.y = s.y,
            xe && (r.z = s.z,
            r.rotationX = s.rotationX,
            r.rotationY = s.rotationY,
            r.scaleZ = s.scaleZ),
            r.filters && delete r.filters,
            r
        }, H = function(t, e, i, s, r) {
            var n, a, o, h = {}, l = t.style;
            for (a in i)
                "cssText" !== a && "length" !== a && isNaN(a) && (e[a] !== (n = i[a]) || r && r[a]) && -1 === a.indexOf("Origin") && ("number" == typeof n || "string" == typeof n) && (h[a] = "auto" !== n || "left" !== a && "top" !== a ? "" !== n && "auto" !== n && "none" !== n || "string" != typeof e[a] || "" === e[a].replace(v, "") ? n : 0 : Z(t, a),
                void 0 !== l[a] && (o = new ue(l,a,l[a],o)));
            if (s)
                for (a in s)
                    "className" !== a && (h[a] = s[a]);
            return {
                difs: h,
                firstMPT: o
            }
        }, K = {
            width: ["Left", "Right"],
            height: ["Top", "Bottom"]
        }, J = ["marginLeft", "marginRight", "marginTop", "marginBottom"], te = function(t, e, i) {
            var s = parseFloat("width" === e ? t.offsetWidth : t.offsetHeight)
              , r = K[e]
              , n = r.length;
            for (i = i || W(t, null); --n > -1; )
                s -= parseFloat(G(t, "padding" + r[n], i, !0)) || 0,
                s -= parseFloat(G(t, "border" + r[n] + "Width", i, !0)) || 0;
            return s
        }, ee = function(t, e) {
            (null == t || "" === t || "auto" === t || "auto auto" === t) && (t = "0 0");
            var i = t.split(" ")
              , s = -1 !== t.indexOf("left") ? "0%" : -1 !== t.indexOf("right") ? "100%" : i[0]
              , r = -1 !== t.indexOf("top") ? "0%" : -1 !== t.indexOf("bottom") ? "100%" : i[1];
            return null == r ? r = "0" : "center" === r && (r = "50%"),
            ("center" === s || isNaN(parseFloat(s)) && -1 === (s + "").indexOf("=")) && (s = "50%"),
            e && (e.oxp = -1 !== s.indexOf("%"),
            e.oyp = -1 !== r.indexOf("%"),
            e.oxr = "=" === s.charAt(1),
            e.oyr = "=" === r.charAt(1),
            e.ox = parseFloat(s.replace(v, "")),
            e.oy = parseFloat(r.replace(v, ""))),
            s + " " + r + (i.length > 2 ? " " + i[2] : "")
        }, ie = function(t, e) {
            return "string" == typeof t && "=" === t.charAt(1) ? parseInt(t.charAt(0) + "1", 10) * parseFloat(t.substr(2)) : parseFloat(t) - parseFloat(e)
        }, se = function(t, e) {
            return null == t ? e : "string" == typeof t && "=" === t.charAt(1) ? parseInt(t.charAt(0) + "1", 10) * Number(t.substr(2)) + e : parseFloat(t)
        }, re = function(t, e, i, s) {
            var r, n, a, o, h = 1e-6;
            return null == t ? o = e : "number" == typeof t ? o = t : (r = 360,
            n = t.split("_"),
            a = Number(n[0].replace(v, "")) * (-1 === t.indexOf("rad") ? 1 : I) - ("=" === t.charAt(1) ? 0 : e),
            n.length && (s && (s[i] = e + a),
            -1 !== t.indexOf("short") && (a %= r,
            a !== a % (r / 2) && (a = 0 > a ? a + r : a - r)),
            -1 !== t.indexOf("_cw") && 0 > a ? a = (a + 9999999999 * r) % r - (0 | a / r) * r : -1 !== t.indexOf("ccw") && a > 0 && (a = (a - 9999999999 * r) % r - (0 | a / r) * r)),
            o = e + a),
            h > o && o > -h && (o = 0),
            o
        }, ne = {
            aqua: [0, 255, 255],
            lime: [0, 255, 0],
            silver: [192, 192, 192],
            black: [0, 0, 0],
            maroon: [128, 0, 0],
            teal: [0, 128, 128],
            blue: [0, 0, 255],
            navy: [0, 0, 128],
            white: [255, 255, 255],
            fuchsia: [255, 0, 255],
            olive: [128, 128, 0],
            yellow: [255, 255, 0],
            orange: [255, 165, 0],
            gray: [128, 128, 128],
            purple: [128, 0, 128],
            green: [0, 128, 0],
            red: [255, 0, 0],
            pink: [255, 192, 203],
            cyan: [0, 255, 255],
            transparent: [255, 255, 255, 0]
        }, ae = function(t, e, i) {
            return t = 0 > t ? t + 1 : t > 1 ? t - 1 : t,
            0 | 255 * (1 > 6 * t ? e + 6 * (i - e) * t : .5 > t ? i : 2 > 3 * t ? e + 6 * (i - e) * (2 / 3 - t) : e) + .5
        }, oe = function(t) {
            var e, i, s, r, n, a;
            return t && "" !== t ? "number" == typeof t ? [t >> 16, 255 & t >> 8, 255 & t] : ("," === t.charAt(t.length - 1) && (t = t.substr(0, t.length - 1)),
            ne[t] ? ne[t] : "#" === t.charAt(0) ? (4 === t.length && (e = t.charAt(1),
            i = t.charAt(2),
            s = t.charAt(3),
            t = "#" + e + e + i + i + s + s),
            t = parseInt(t.substr(1), 16),
            [t >> 16, 255 & t >> 8, 255 & t]) : "hsl" === t.substr(0, 3) ? (t = t.match(m),
            r = Number(t[0]) % 360 / 360,
            n = Number(t[1]) / 100,
            a = Number(t[2]) / 100,
            i = .5 >= a ? a * (n + 1) : a + n - a * n,
            e = 2 * a - i,
            t.length > 3 && (t[3] = Number(t[3])),
            t[0] = ae(r + 1 / 3, e, i),
            t[1] = ae(r, e, i),
            t[2] = ae(r - 1 / 3, e, i),
            t) : (t = t.match(m) || ne.transparent,
            t[0] = Number(t[0]),
            t[1] = Number(t[1]),
            t[2] = Number(t[2]),
            t.length > 3 && (t[3] = Number(t[3])),
            t)) : ne.black
        }, he = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#.+?\\b";
        for (h in ne)
            he += "|" + h + "\\b";
        he = RegExp(he + ")", "gi");
        var le = function(t, e, i, s) {
            if (null == t)
                return function(t) {
                    return t
                }
                ;
            var r, n = e ? (t.match(he) || [""])[0] : "", a = t.split(n).join("").match(g) || [], o = t.substr(0, t.indexOf(a[0])), h = ")" === t.charAt(t.length - 1) ? ")" : "", l = -1 !== t.indexOf(" ") ? " " : ",", _ = a.length, u = _ > 0 ? a[0].replace(m, "") : "";
            return _ ? r = e ? function(t) {
                var e, p, c, f;
                if ("number" == typeof t)
                    t += u;
                else if (s && D.test(t)) {
                    for (f = t.replace(D, "|").split("|"),
                    c = 0; f.length > c; c++)
                        f[c] = r(f[c]);
                    return f.join(",")
                }
                if (e = (t.match(he) || [n])[0],
                p = t.split(e).join("").match(g) || [],
                c = p.length,
                _ > c--)
                    for (; _ > ++c; )
                        p[c] = i ? p[0 | (c - 1) / 2] : a[c];
                return o + p.join(l) + l + e + h + (-1 !== t.indexOf("inset") ? " inset" : "")
            }
            : function(t) {
                var e, n, p;
                if ("number" == typeof t)
                    t += u;
                else if (s && D.test(t)) {
                    for (n = t.replace(D, "|").split("|"),
                    p = 0; n.length > p; p++)
                        n[p] = r(n[p]);
                    return n.join(",")
                }
                if (e = t.match(g) || [],
                p = e.length,
                _ > p--)
                    for (; _ > ++p; )
                        e[p] = i ? e[0 | (p - 1) / 2] : a[p];
                return o + e.join(l) + h
            }
            : function(t) {
                return t
            }
        }
          , _e = function(t) {
            return t = t.split(","),
            function(e, i, s, r, n, a, o) {
                var h, l = (i + "").split(" ");
                for (o = {},
                h = 0; 4 > h; h++)
                    o[t[h]] = l[h] = l[h] || l[(h - 1) / 2 >> 0];
                return r.parse(e, o, n, a)
            }
        }
          , ue = (X._setPluginRatio = function(t) {
            this.plugin.setRatio(t);
            for (var e, i, s, r, n = this.data, a = n.proxy, o = n.firstMPT, h = 1e-6; o; )
                e = a[o.v],
                o.r ? e = Math.round(e) : h > e && e > -h && (e = 0),
                o.t[o.p] = e,
                o = o._next;
            if (n.autoRotate && (n.autoRotate.rotation = a.rotation),
            1 === t)
                for (o = n.firstMPT; o; ) {
                    if (i = o.t,
                    i.type) {
                        if (1 === i.type) {
                            for (r = i.xs0 + i.s + i.xs1,
                            s = 1; i.l > s; s++)
                                r += i["xn" + s] + i["xs" + (s + 1)];
                            i.e = r
                        }
                    } else
                        i.e = i.s + i.xs0;
                    o = o._next
                }
        }
        ,
        function(t, e, i, s, r) {
            this.t = t,
            this.p = e,
            this.v = i,
            this.r = r,
            s && (s._prev = this,
            this._next = s)
        }
        )
          , pe = (X._parseToProxy = function(t, e, i, s, r, n) {
            var a, o, h, l, _, u = s, p = {}, c = {}, f = i._transform, m = E;
            for (i._transform = null,
            E = e,
            s = _ = i.parse(t, e, s, r),
            E = m,
            n && (i._transform = f,
            u && (u._prev = null,
            u._prev && (u._prev._next = null))); s && s !== u; ) {
                if (1 >= s.type && (o = s.p,
                c[o] = s.s + s.c,
                p[o] = s.s,
                n || (l = new ue(s,"s",o,l,s.r),
                s.c = 0),
                1 === s.type))
                    for (a = s.l; --a > 0; )
                        h = "xn" + a,
                        o = s.p + "_" + h,
                        c[o] = s.data[h],
                        p[o] = s[h],
                        n || (l = new ue(s,h,o,l,s.rxp[h]));
                s = s._next
            }
            return {
                proxy: p,
                end: c,
                firstMPT: l,
                pt: _
            }
        }
        ,
        X.CSSPropTween = function(t, e, s, r, a, o, h, l, _, u, p) {
            this.t = t,
            this.p = e,
            this.s = s,
            this.c = r,
            this.n = h || e,
            t instanceof pe || n.push(this.n),
            this.r = l,
            this.type = o || 0,
            _ && (this.pr = _,
            i = !0),
            this.b = void 0 === u ? s : u,
            this.e = void 0 === p ? s + r : p,
            a && (this._next = a,
            a._prev = this)
        }
        )
          , ce = a.parseComplex = function(t, e, i, s, r, n, a, o, h, _) {
            i = i || n || "",
            a = new pe(t,e,0,0,a,_ ? 2 : 1,null,!1,o,i,s),
            s += "";
            var u, p, c, f, g, v, y, T, w, x, P, S, k = i.split(", ").join(",").split(" "), R = s.split(", ").join(",").split(" "), A = k.length, C = l !== !1;
            for ((-1 !== s.indexOf(",") || -1 !== i.indexOf(",")) && (k = k.join(" ").replace(D, ", ").split(" "),
            R = R.join(" ").replace(D, ", ").split(" "),
            A = k.length),
            A !== R.length && (k = (n || "").split(" "),
            A = k.length),
            a.plugin = h,
            a.setRatio = _,
            u = 0; A > u; u++)
                if (f = k[u],
                g = R[u],
                T = parseFloat(f),
                T || 0 === T)
                    a.appendXtra("", T, ie(g, T), g.replace(d, ""), C && -1 !== g.indexOf("px"), !0);
                else if (r && ("#" === f.charAt(0) || ne[f] || b.test(f)))
                    S = "," === g.charAt(g.length - 1) ? ")," : ")",
                    f = oe(f),
                    g = oe(g),
                    w = f.length + g.length > 6,
                    w && !U && 0 === g[3] ? (a["xs" + a.l] += a.l ? " transparent" : "transparent",
                    a.e = a.e.split(R[u]).join("transparent")) : (U || (w = !1),
                    a.appendXtra(w ? "rgba(" : "rgb(", f[0], g[0] - f[0], ",", !0, !0).appendXtra("", f[1], g[1] - f[1], ",", !0).appendXtra("", f[2], g[2] - f[2], w ? "," : S, !0),
                    w && (f = 4 > f.length ? 1 : f[3],
                    a.appendXtra("", f, (4 > g.length ? 1 : g[3]) - f, S, !1)));
                else if (v = f.match(m)) {
                    if (y = g.match(d),
                    !y || y.length !== v.length)
                        return a;
                    for (c = 0,
                    p = 0; v.length > p; p++)
                        P = v[p],
                        x = f.indexOf(P, c),
                        a.appendXtra(f.substr(c, x - c), Number(P), ie(y[p], P), "", C && "px" === f.substr(x + P.length, 2), 0 === p),
                        c = x + P.length;
                    a["xs" + a.l] += f.substr(c)
                } else
                    a["xs" + a.l] += a.l ? " " + f : f;
            if (-1 !== s.indexOf("=") && a.data) {
                for (S = a.xs0 + a.data.s,
                u = 1; a.l > u; u++)
                    S += a["xs" + u] + a.data["xn" + u];
                a.e = S + a["xs" + u]
            }
            return a.l || (a.type = -1,
            a.xs0 = a.e),
            a.xfirst || a
        }
          , fe = 9;
        for (h = pe.prototype,
        h.l = h.pr = 0; --fe > 0; )
            h["xn" + fe] = 0,
            h["xs" + fe] = "";
        h.xs0 = "",
        h._next = h._prev = h.xfirst = h.data = h.plugin = h.setRatio = h.rxp = null,
        h.appendXtra = function(t, e, i, s, r, n) {
            var a = this
              , o = a.l;
            return a["xs" + o] += n && o ? " " + t : t || "",
            i || 0 === o || a.plugin ? (a.l++,
            a.type = a.setRatio ? 2 : 1,
            a["xs" + a.l] = s || "",
            o > 0 ? (a.data["xn" + o] = e + i,
            a.rxp["xn" + o] = r,
            a["xn" + o] = e,
            a.plugin || (a.xfirst = new pe(a,"xn" + o,e,i,a.xfirst || a,0,a.n,r,a.pr),
            a.xfirst.xs0 = 0),
            a) : (a.data = {
                s: e + i
            },
            a.rxp = {},
            a.s = e,
            a.c = i,
            a.r = r,
            a)) : (a["xs" + o] += e + (s || ""),
            a)
        }
        ;
        var me = function(t, e) {
            e = e || {},
            this.p = e.prefix ? V(t) || t : t,
            o[t] = o[this.p] = this,
            this.format = e.formatter || le(e.defaultValue, e.color, e.collapsible, e.multi),
            e.parser && (this.parse = e.parser),
            this.clrs = e.color,
            this.multi = e.multi,
            this.keyword = e.keyword,
            this.dflt = e.defaultValue,
            this.pr = e.priority || 0
        }
          , de = X._registerComplexSpecialProp = function(t, e, i) {
            "object" != typeof e && (e = {
                parser: i
            });
            var s, r, n = t.split(","), a = e.defaultValue;
            for (i = i || [a],
            s = 0; n.length > s; s++)
                e.prefix = 0 === s && e.prefix,
                e.defaultValue = i[s] || a,
                r = new me(n[s],e)
        }
          , ge = function(t) {
            if (!o[t]) {
                var e = t.charAt(0).toUpperCase() + t.substr(1) + "Plugin";
                de(t, {
                    parser: function(t, i, s, r, n, a, h) {
                        var l = (window.GreenSockGlobals || window).com.greensock.plugins[e];
                        return l ? (l._cssRegister(),
                        o[s].parse(t, i, s, r, n, a, h)) : (j("Error: " + e + " js file not loaded."),
                        n)
                    }
                })
            }
        };
        h = me.prototype,
        h.parseComplex = function(t, e, i, s, r, n) {
            var a, o, h, l, _, u, p = this.keyword;
            if (this.multi && (D.test(i) || D.test(e) ? (o = e.replace(D, "|").split("|"),
            h = i.replace(D, "|").split("|")) : p && (o = [e],
            h = [i])),
            h) {
                for (l = h.length > o.length ? h.length : o.length,
                a = 0; l > a; a++)
                    e = o[a] = o[a] || this.dflt,
                    i = h[a] = h[a] || this.dflt,
                    p && (_ = e.indexOf(p),
                    u = i.indexOf(p),
                    _ !== u && (i = -1 === u ? h : o,
                    i[a] += " " + p));
                e = o.join(", "),
                i = h.join(", ")
            }
            return ce(t, this.p, e, i, this.clrs, this.dflt, s, this.pr, r, n)
        }
        ,
        h.parse = function(t, e, i, s, n, a) {
            return this.parseComplex(t.style, this.format(G(t, this.p, r, !1, this.dflt)), this.format(e), n, a)
        }
        ,
        a.registerSpecialProp = function(t, e, i) {
            de(t, {
                parser: function(t, s, r, n, a, o) {
                    var h = new pe(t,r,0,0,a,2,r,!1,i);
                    return h.plugin = o,
                    h.setRatio = e(t, s, n._tween, r),
                    h
                },
                priority: i
            })
        }
        ;
        var ve = "scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective".split(",")
          , ye = V("transform")
          , Te = B + "transform"
          , we = V("transformOrigin")
          , xe = null !== V("perspective")
          , be = X.Transform = function() {
            this.skewY = 0
        }
          , Pe = X.getTransform = function(t, e, i, s) {
            if (t._gsTransform && i && !s)
                return t._gsTransform;
            var r, n, o, h, l, _, u, p, c, f, m, d, g, v = i ? t._gsTransform || new be : new be, y = 0 > v.scaleX, T = 2e-5, w = 1e5, x = 179.99, b = x * M, P = xe ? parseFloat(G(t, we, e, !1, "0 0 0").split(" ")[2]) || v.zOrigin || 0 : 0;
            for (ye ? r = G(t, Te, e, !0) : t.currentStyle && (r = t.currentStyle.filter.match(C),
            r = r && 4 === r.length ? [r[0].substr(4), Number(r[2].substr(4)), Number(r[1].substr(4)), r[3].substr(4), v.x || 0, v.y || 0].join(",") : ""),
            n = (r || "").match(/(?:\-|\b)[\d\-\.e]+\b/gi) || [],
            o = n.length; --o > -1; )
                h = Number(n[o]),
                n[o] = (l = h - (h |= 0)) ? (0 | l * w + (0 > l ? -.5 : .5)) / w + h : h;
            if (16 === n.length) {
                var S = n[8]
                  , k = n[9]
                  , R = n[10]
                  , A = n[12]
                  , O = n[13]
                  , D = n[14];
                if (v.zOrigin && (D = -v.zOrigin,
                A = S * D - n[12],
                O = k * D - n[13],
                D = R * D + v.zOrigin - n[14]),
                !i || s || null == v.rotationX) {
                    var E, N, F, L, X, z, U, Y = n[0], j = n[1], B = n[2], q = n[3], V = n[4], W = n[5], $ = n[6], Z = n[7], Q = n[11], H = Math.atan2($, R), K = -b > H || H > b;
                    v.rotationX = H * I,
                    H && (L = Math.cos(-H),
                    X = Math.sin(-H),
                    E = V * L + S * X,
                    N = W * L + k * X,
                    F = $ * L + R * X,
                    S = V * -X + S * L,
                    k = W * -X + k * L,
                    R = $ * -X + R * L,
                    Q = Z * -X + Q * L,
                    V = E,
                    W = N,
                    $ = F),
                    H = Math.atan2(S, Y),
                    v.rotationY = H * I,
                    H && (z = -b > H || H > b,
                    L = Math.cos(-H),
                    X = Math.sin(-H),
                    E = Y * L - S * X,
                    N = j * L - k * X,
                    F = B * L - R * X,
                    k = j * X + k * L,
                    R = B * X + R * L,
                    Q = q * X + Q * L,
                    Y = E,
                    j = N,
                    B = F),
                    H = Math.atan2(j, W),
                    v.rotation = H * I,
                    H && (U = -b > H || H > b,
                    L = Math.cos(-H),
                    X = Math.sin(-H),
                    Y = Y * L + V * X,
                    N = j * L + W * X,
                    W = j * -X + W * L,
                    $ = B * -X + $ * L,
                    j = N),
                    U && K ? v.rotation = v.rotationX = 0 : U && z ? v.rotation = v.rotationY = 0 : z && K && (v.rotationY = v.rotationX = 0),
                    v.scaleX = (0 | Math.sqrt(Y * Y + j * j) * w + .5) / w,
                    v.scaleY = (0 | Math.sqrt(W * W + k * k) * w + .5) / w,
                    v.scaleZ = (0 | Math.sqrt($ * $ + R * R) * w + .5) / w,
                    v.skewX = 0,
                    v.perspective = Q ? 1 / (0 > Q ? -Q : Q) : 0,
                    v.x = A,
                    v.y = O,
                    v.z = D
                }
            } else if (!(xe && !s && n.length && v.x === n[4] && v.y === n[5] && (v.rotationX || v.rotationY) || void 0 !== v.x && "none" === G(t, "display", e))) {
                var J = n.length >= 6
                  , te = J ? n[0] : 1
                  , ee = n[1] || 0
                  , ie = n[2] || 0
                  , se = J ? n[3] : 1;
                v.x = n[4] || 0,
                v.y = n[5] || 0,
                _ = Math.sqrt(te * te + ee * ee),
                u = Math.sqrt(se * se + ie * ie),
                p = te || ee ? Math.atan2(ee, te) * I : v.rotation || 0,
                c = ie || se ? Math.atan2(ie, se) * I + p : v.skewX || 0,
                f = _ - Math.abs(v.scaleX || 0),
                m = u - Math.abs(v.scaleY || 0),
                Math.abs(c) > 90 && 270 > Math.abs(c) && (y ? (_ *= -1,
                c += 0 >= p ? 180 : -180,
                p += 0 >= p ? 180 : -180) : (u *= -1,
                c += 0 >= c ? 180 : -180)),
                d = (p - v.rotation) % 180,
                g = (c - v.skewX) % 180,
                (void 0 === v.skewX || f > T || -T > f || m > T || -T > m || d > -x && x > d && false | d * w || g > -x && x > g && false | g * w) && (v.scaleX = _,
                v.scaleY = u,
                v.rotation = p,
                v.skewX = c),
                xe && (v.rotationX = v.rotationY = v.z = 0,
                v.perspective = parseFloat(a.defaultTransformPerspective) || 0,
                v.scaleZ = 1)
            }
            v.zOrigin = P;
            for (o in v)
                T > v[o] && v[o] > -T && (v[o] = 0);
            return i && (t._gsTransform = v),
            v
        }
          , Se = function(t) {
            var e, i, s = this.data, r = -s.rotation * M, n = r + s.skewX * M, a = 1e5, o = (0 | Math.cos(r) * s.scaleX * a) / a, h = (0 | Math.sin(r) * s.scaleX * a) / a, l = (0 | Math.sin(n) * -s.scaleY * a) / a, _ = (0 | Math.cos(n) * s.scaleY * a) / a, u = this.t.style, p = this.t.currentStyle;
            if (p) {
                i = h,
                h = -l,
                l = -i,
                e = p.filter,
                u.filter = "";
                var c, m, d = this.t.offsetWidth, g = this.t.offsetHeight, v = "absolute" !== p.position, w = "progid:DXImageTransform.Microsoft.Matrix(M11=" + o + ", M12=" + h + ", M21=" + l + ", M22=" + _, x = s.x, b = s.y;
                if (null != s.ox && (c = (s.oxp ? .01 * d * s.ox : s.ox) - d / 2,
                m = (s.oyp ? .01 * g * s.oy : s.oy) - g / 2,
                x += c - (c * o + m * h),
                b += m - (c * l + m * _)),
                v ? (c = d / 2,
                m = g / 2,
                w += ", Dx=" + (c - (c * o + m * h) + x) + ", Dy=" + (m - (c * l + m * _) + b) + ")") : w += ", sizingMethod='auto expand')",
                u.filter = -1 !== e.indexOf("DXImageTransform.Microsoft.Matrix(") ? e.replace(O, w) : w + " " + e,
                (0 === t || 1 === t) && 1 === o && 0 === h && 0 === l && 1 === _ && (v && -1 === w.indexOf("Dx=0, Dy=0") || T.test(e) && 100 !== parseFloat(RegExp.$1) || -1 === e.indexOf("gradient(" && e.indexOf("Alpha")) && u.removeAttribute("filter")),
                !v) {
                    var P, S, k, R = 8 > f ? 1 : -1;
                    for (c = s.ieOffsetX || 0,
                    m = s.ieOffsetY || 0,
                    s.ieOffsetX = Math.round((d - ((0 > o ? -o : o) * d + (0 > h ? -h : h) * g)) / 2 + x),
                    s.ieOffsetY = Math.round((g - ((0 > _ ? -_ : _) * g + (0 > l ? -l : l) * d)) / 2 + b),
                    fe = 0; 4 > fe; fe++)
                        S = J[fe],
                        P = p[S],
                        i = -1 !== P.indexOf("px") ? parseFloat(P) : $(this.t, S, parseFloat(P), P.replace(y, "")) || 0,
                        k = i !== s[S] ? 2 > fe ? -s.ieOffsetX : -s.ieOffsetY : 2 > fe ? c - s.ieOffsetX : m - s.ieOffsetY,
                        u[S] = (s[S] = Math.round(i - k * (0 === fe || 2 === fe ? 1 : R))) + "px"
                }
            }
        }
          , ke = X.set3DTransformRatio = function() {
            var t, e, i, s, r, n, a, o, h, l, _, u, c, f, m, d, g, v, y, T, w, x, b, P = this.data, S = this.t.style, k = P.rotation * M, R = P.scaleX, A = P.scaleY, C = P.scaleZ, O = P.perspective;
            if (p) {
                var D = 1e-4;
                D > R && R > -D && (R = C = 2e-5),
                D > A && A > -D && (A = C = 2e-5),
                !O || P.z || P.rotationX || P.rotationY || (O = 0)
            }
            if (k || P.skewX)
                v = Math.cos(k),
                y = Math.sin(k),
                t = v,
                r = y,
                P.skewX && (k -= P.skewX * M,
                v = Math.cos(k),
                y = Math.sin(k),
                "simple" === P.skewType && (T = Math.tan(P.skewX * M),
                T = Math.sqrt(1 + T * T),
                v *= T,
                y *= T)),
                e = -y,
                n = v;
            else {
                if (!(P.rotationY || P.rotationX || 1 !== C || O))
                    return S[ye] = "translate3d(" + P.x + "px," + P.y + "px," + P.z + "px)" + (1 !== R || 1 !== A ? " scale(" + R + "," + A + ")" : ""),
                    void 0;
                t = n = 1,
                e = r = 0
            }
            _ = 1,
            i = s = a = o = h = l = u = c = f = 0,
            m = O ? -1 / O : 0,
            d = P.zOrigin,
            g = 1e5,
            k = P.rotationY * M,
            k && (v = Math.cos(k),
            y = Math.sin(k),
            h = _ * -y,
            c = m * -y,
            i = t * y,
            a = r * y,
            _ *= v,
            m *= v,
            t *= v,
            r *= v),
            k = P.rotationX * M,
            k && (v = Math.cos(k),
            y = Math.sin(k),
            T = e * v + i * y,
            w = n * v + a * y,
            x = l * v + _ * y,
            b = f * v + m * y,
            i = e * -y + i * v,
            a = n * -y + a * v,
            _ = l * -y + _ * v,
            m = f * -y + m * v,
            e = T,
            n = w,
            l = x,
            f = b),
            1 !== C && (i *= C,
            a *= C,
            _ *= C,
            m *= C),
            1 !== A && (e *= A,
            n *= A,
            l *= A,
            f *= A),
            1 !== R && (t *= R,
            r *= R,
            h *= R,
            c *= R),
            d && (u -= d,
            s = i * u,
            o = a * u,
            u = _ * u + d),
            s = (T = (s += P.x) - (s |= 0)) ? (0 | T * g + (0 > T ? -.5 : .5)) / g + s : s,
            o = (T = (o += P.y) - (o |= 0)) ? (0 | T * g + (0 > T ? -.5 : .5)) / g + o : o,
            u = (T = (u += P.z) - (u |= 0)) ? (0 | T * g + (0 > T ? -.5 : .5)) / g + u : u,
            S[ye] = "matrix3d(" + [(0 | t * g) / g, (0 | r * g) / g, (0 | h * g) / g, (0 | c * g) / g, (0 | e * g) / g, (0 | n * g) / g, (0 | l * g) / g, (0 | f * g) / g, (0 | i * g) / g, (0 | a * g) / g, (0 | _ * g) / g, (0 | m * g) / g, s, o, u, O ? 1 + -u / O : 1].join(",") + ")"
        }
          , Re = X.set2DTransformRatio = function(t) {
            var e, i, s, r, n, a = this.data, o = this.t, h = o.style;
            return a.rotationX || a.rotationY || a.z || a.force3D ? (this.setRatio = ke,
            ke.call(this, t),
            void 0) : (a.rotation || a.skewX ? (e = a.rotation * M,
            i = e - a.skewX * M,
            s = 1e5,
            r = a.scaleX * s,
            n = a.scaleY * s,
            h[ye] = "matrix(" + (0 | Math.cos(e) * r) / s + "," + (0 | Math.sin(e) * r) / s + "," + (0 | Math.sin(i) * -n) / s + "," + (0 | Math.cos(i) * n) / s + "," + a.x + "," + a.y + ")") : h[ye] = "matrix(" + a.scaleX + ",0,0," + a.scaleY + "," + a.x + "," + a.y + ")",
            void 0)
        }
        ;
        de("transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType", {
            parser: function(t, e, i, s, n, o, h) {
                if (s._transform)
                    return n;
                var l, _, u, p, c, f, m, d = s._transform = Pe(t, r, !0, h.parseTransform), g = t.style, v = 1e-6, y = ve.length, T = h, w = {};
                if ("string" == typeof T.transform && ye)
                    u = g.cssText,
                    g[ye] = T.transform,
                    g.display = "block",
                    l = Pe(t, null, !1),
                    g.cssText = u;
                else if ("object" == typeof T) {
                    if (l = {
                        scaleX: se(null != T.scaleX ? T.scaleX : T.scale, d.scaleX),
                        scaleY: se(null != T.scaleY ? T.scaleY : T.scale, d.scaleY),
                        scaleZ: se(T.scaleZ, d.scaleZ),
                        x: se(T.x, d.x),
                        y: se(T.y, d.y),
                        z: se(T.z, d.z),
                        perspective: se(T.transformPerspective, d.perspective)
                    },
                    m = T.directionalRotation,
                    null != m)
                        if ("object" == typeof m)
                            for (u in m)
                                T[u] = m[u];
                        else
                            T.rotation = m;
                    l.rotation = re("rotation"in T ? T.rotation : "shortRotation"in T ? T.shortRotation + "_short" : "rotationZ"in T ? T.rotationZ : d.rotation, d.rotation, "rotation", w),
                    xe && (l.rotationX = re("rotationX"in T ? T.rotationX : "shortRotationX"in T ? T.shortRotationX + "_short" : d.rotationX || 0, d.rotationX, "rotationX", w),
                    l.rotationY = re("rotationY"in T ? T.rotationY : "shortRotationY"in T ? T.shortRotationY + "_short" : d.rotationY || 0, d.rotationY, "rotationY", w)),
                    l.skewX = null == T.skewX ? d.skewX : re(T.skewX, d.skewX),
                    l.skewY = null == T.skewY ? d.skewY : re(T.skewY, d.skewY),
                    (_ = l.skewY - d.skewY) && (l.skewX += _,
                    l.rotation += _)
                }
                for (xe && null != T.force3D && (d.force3D = T.force3D,
                f = !0),
                d.skewType = T.skewType || d.skewType || a.defaultSkewType,
                c = d.force3D || d.z || d.rotationX || d.rotationY || l.z || l.rotationX || l.rotationY || l.perspective,
                c || null == T.scale || (l.scaleZ = 1); --y > -1; )
                    i = ve[y],
                    p = l[i] - d[i],
                    (p > v || -v > p || null != E[i]) && (f = !0,
                    n = new pe(d,i,d[i],p,n),
                    i in w && (n.e = w[i]),
                    n.xs0 = 0,
                    n.plugin = o,
                    s._overwriteProps.push(n.n));
                return p = T.transformOrigin,
                (p || xe && c && d.zOrigin) && (ye ? (f = !0,
                i = we,
                p = (p || G(t, i, r, !1, "50% 50%")) + "",
                n = new pe(g,i,0,0,n,-1,"transformOrigin"),
                n.b = g[i],
                n.plugin = o,
                xe ? (u = d.zOrigin,
                p = p.split(" "),
                d.zOrigin = (p.length > 2 && (0 === u || "0px" !== p[2]) ? parseFloat(p[2]) : u) || 0,
                n.xs0 = n.e = g[i] = p[0] + " " + (p[1] || "50%") + " 0px",
                n = new pe(d,"zOrigin",0,0,n,-1,n.n),
                n.b = u,
                n.xs0 = n.e = d.zOrigin) : n.xs0 = n.e = g[i] = p) : ee(p + "", d)),
                f && (s._transformType = c || 3 === this._transformType ? 3 : 2),
                n
            },
            prefix: !0
        }),
        de("boxShadow", {
            defaultValue: "0px 0px 0px 0px #999",
            prefix: !0,
            color: !0,
            multi: !0,
            keyword: "inset"
        }),
        de("borderRadius", {
            defaultValue: "0px",
            parser: function(t, e, i, n, a) {
                e = this.format(e);
                var o, h, l, _, u, p, c, f, m, d, g, v, y, T, w, x, b = ["borderTopLeftRadius", "borderTopRightRadius", "borderBottomRightRadius", "borderBottomLeftRadius"], P = t.style;
                for (m = parseFloat(t.offsetWidth),
                d = parseFloat(t.offsetHeight),
                o = e.split(" "),
                h = 0; b.length > h; h++)
                    this.p.indexOf("border") && (b[h] = V(b[h])),
                    u = _ = G(t, b[h], r, !1, "0px"),
                    -1 !== u.indexOf(" ") && (_ = u.split(" "),
                    u = _[0],
                    _ = _[1]),
                    p = l = o[h],
                    c = parseFloat(u),
                    v = u.substr((c + "").length),
                    y = "=" === p.charAt(1),
                    y ? (f = parseInt(p.charAt(0) + "1", 10),
                    p = p.substr(2),
                    f *= parseFloat(p),
                    g = p.substr((f + "").length - (0 > f ? 1 : 0)) || "") : (f = parseFloat(p),
                    g = p.substr((f + "").length)),
                    "" === g && (g = s[i] || v),
                    g !== v && (T = $(t, "borderLeft", c, v),
                    w = $(t, "borderTop", c, v),
                    "%" === g ? (u = 100 * (T / m) + "%",
                    _ = 100 * (w / d) + "%") : "em" === g ? (x = $(t, "borderLeft", 1, "em"),
                    u = T / x + "em",
                    _ = w / x + "em") : (u = T + "px",
                    _ = w + "px"),
                    y && (p = parseFloat(u) + f + g,
                    l = parseFloat(_) + f + g)),
                    a = ce(P, b[h], u + " " + _, p + " " + l, !1, "0px", a);
                return a
            },
            prefix: !0,
            formatter: le("0px 0px 0px 0px", !1, !0)
        }),
        de("backgroundPosition", {
            defaultValue: "0 0",
            parser: function(t, e, i, s, n, a) {
                var o, h, l, _, u, p, c = "background-position", m = r || W(t, null), d = this.format((m ? f ? m.getPropertyValue(c + "-x") + " " + m.getPropertyValue(c + "-y") : m.getPropertyValue(c) : t.currentStyle.backgroundPositionX + " " + t.currentStyle.backgroundPositionY) || "0 0"), g = this.format(e);
                if (-1 !== d.indexOf("%") != (-1 !== g.indexOf("%")) && (p = G(t, "backgroundImage").replace(k, ""),
                p && "none" !== p)) {
                    for (o = d.split(" "),
                    h = g.split(" "),
                    L.setAttribute("src", p),
                    l = 2; --l > -1; )
                        d = o[l],
                        _ = -1 !== d.indexOf("%"),
                        _ !== (-1 !== h[l].indexOf("%")) && (u = 0 === l ? t.offsetWidth - L.width : t.offsetHeight - L.height,
                        o[l] = _ ? parseFloat(d) / 100 * u + "px" : 100 * (parseFloat(d) / u) + "%");
                    d = o.join(" ")
                }
                return this.parseComplex(t.style, d, g, n, a)
            },
            formatter: ee
        }),
        de("backgroundSize", {
            defaultValue: "0 0",
            formatter: ee
        }),
        de("perspective", {
            defaultValue: "0px",
            prefix: !0
        }),
        de("perspectiveOrigin", {
            defaultValue: "50% 50%",
            prefix: !0
        }),
        de("transformStyle", {
            prefix: !0
        }),
        de("backfaceVisibility", {
            prefix: !0
        }),
        de("userSelect", {
            prefix: !0
        }),
        de("margin", {
            parser: _e("marginTop,marginRight,marginBottom,marginLeft")
        }),
        de("padding", {
            parser: _e("paddingTop,paddingRight,paddingBottom,paddingLeft")
        }),
        de("clip", {
            defaultValue: "rect(0px,0px,0px,0px)",
            parser: function(t, e, i, s, n, a) {
                var o, h, l;
                return 9 > f ? (h = t.currentStyle,
                l = 8 > f ? " " : ",",
                o = "rect(" + h.clipTop + l + h.clipRight + l + h.clipBottom + l + h.clipLeft + ")",
                e = this.format(e).split(",").join(l)) : (o = this.format(G(t, this.p, r, !1, this.dflt)),
                e = this.format(e)),
                this.parseComplex(t.style, o, e, n, a)
            }
        }),
        de("textShadow", {
            defaultValue: "0px 0px 0px #999",
            color: !0,
            multi: !0
        }),
        de("autoRound,strictUnits", {
            parser: function(t, e, i, s, r) {
                return r
            }
        }),
        de("border", {
            defaultValue: "0px solid #000",
            parser: function(t, e, i, s, n, a) {
                return this.parseComplex(t.style, this.format(G(t, "borderTopWidth", r, !1, "0px") + " " + G(t, "borderTopStyle", r, !1, "solid") + " " + G(t, "borderTopColor", r, !1, "#000")), this.format(e), n, a)
            },
            color: !0,
            formatter: function(t) {
                var e = t.split(" ");
                return e[0] + " " + (e[1] || "solid") + " " + (t.match(he) || ["#000"])[0]
            }
        }),
        de("borderWidth", {
            parser: _e("borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth")
        }),
        de("float,cssFloat,styleFloat", {
            parser: function(t, e, i, s, r) {
                var n = t.style
                  , a = "cssFloat"in n ? "cssFloat" : "styleFloat";
                return new pe(n,a,0,0,r,-1,i,!1,0,n[a],e)
            }
        });
        var Ae = function(t) {
            var e, i = this.t, s = i.filter || G(this.data, "filter"), r = 0 | this.s + this.c * t;
            100 === r && (-1 === s.indexOf("atrix(") && -1 === s.indexOf("radient(") && -1 === s.indexOf("oader(") ? (i.removeAttribute("filter"),
            e = !G(this.data, "filter")) : (i.filter = s.replace(x, ""),
            e = !0)),
            e || (this.xn1 && (i.filter = s = s || "alpha(opacity=" + r + ")"),
            -1 === s.indexOf("opacity") ? 0 === r && this.xn1 || (i.filter = s + " alpha(opacity=" + r + ")") : i.filter = s.replace(T, "opacity=" + r))
        };
        de("opacity,alpha,autoAlpha", {
            defaultValue: "1",
            parser: function(t, e, i, s, n, a) {
                var o = parseFloat(G(t, "opacity", r, !1, "1"))
                  , h = t.style
                  , l = "autoAlpha" === i;
                return "string" == typeof e && "=" === e.charAt(1) && (e = ("-" === e.charAt(0) ? -1 : 1) * parseFloat(e.substr(2)) + o),
                l && 1 === o && "hidden" === G(t, "visibility", r) && 0 !== e && (o = 0),
                U ? n = new pe(h,"opacity",o,e - o,n) : (n = new pe(h,"opacity",100 * o,100 * (e - o),n),
                n.xn1 = l ? 1 : 0,
                h.zoom = 1,
                n.type = 2,
                n.b = "alpha(opacity=" + n.s + ")",
                n.e = "alpha(opacity=" + (n.s + n.c) + ")",
                n.data = t,
                n.plugin = a,
                n.setRatio = Ae),
                l && (n = new pe(h,"visibility",0,0,n,-1,null,!1,0,0 !== o ? "inherit" : "hidden",0 === e ? "hidden" : "inherit"),
                n.xs0 = "inherit",
                s._overwriteProps.push(n.n),
                s._overwriteProps.push(i)),
                n
            }
        });
        var Ce = function(t, e) {
            e && (t.removeProperty ? ("ms" === e.substr(0, 2) && (e = "M" + e.substr(1)),
            t.removeProperty(e.replace(P, "-$1").toLowerCase())) : t.removeAttribute(e))
        }
          , Oe = function(t) {
            if (this.t._gsClassPT = this,
            1 === t || 0 === t) {
                this.t.className = 0 === t ? this.b : this.e;
                for (var e = this.data, i = this.t.style; e; )
                    e.v ? i[e.p] = e.v : Ce(i, e.p),
                    e = e._next;
                1 === t && this.t._gsClassPT === this && (this.t._gsClassPT = null)
            } else
                this.t.className !== this.e && (this.t.className = this.e)
        };
        de("className", {
            parser: function(t, e, s, n, a, o, h) {
                var l, _, u, p, c, f = t.className, m = t.style.cssText;
                if (a = n._classNamePT = new pe(t,s,0,0,a,2),
                a.setRatio = Oe,
                a.pr = -11,
                i = !0,
                a.b = f,
                _ = Q(t, r),
                u = t._gsClassPT) {
                    for (p = {},
                    c = u.data; c; )
                        p[c.p] = 1,
                        c = c._next;
                    u.setRatio(1)
                }
                return t._gsClassPT = a,
                a.e = "=" !== e.charAt(1) ? e : f.replace(RegExp("\\s*\\b" + e.substr(2) + "\\b"), "") + ("+" === e.charAt(0) ? " " + e.substr(2) : ""),
                n._tween._duration && (t.className = a.e,
                l = H(t, _, Q(t), h, p),
                t.className = f,
                a.data = l.firstMPT,
                t.style.cssText = m,
                a = a.xfirst = n.parse(t, l.difs, a, o)),
                a
            }
        });
        var De = function(t) {
            if ((1 === t || 0 === t) && this.data._totalTime === this.data._totalDuration && "isFromStart" !== this.data.data) {
                var e, i, s, r, n = this.t.style, a = o.transform.parse;
                if ("all" === this.e)
                    n.cssText = "",
                    r = !0;
                else
                    for (e = this.e.split(","),
                    s = e.length; --s > -1; )
                        i = e[s],
                        o[i] && (o[i].parse === a ? r = !0 : i = "transformOrigin" === i ? we : o[i].p),
                        Ce(n, i);
                r && (Ce(n, ye),
                this.t._gsTransform && delete this.t._gsTransform)
            }
        };
        for (de("clearProps", {
            parser: function(t, e, s, r, n) {
                return n = new pe(t,s,0,0,n,2),
                n.setRatio = De,
                n.e = e,
                n.pr = -10,
                n.data = r._tween,
                i = !0,
                n
            }
        }),
        h = "bezier,throwProps,physicsProps,physics2D".split(","),
        fe = h.length; fe--; )
            ge(h[fe]);
        h = a.prototype,
        h._firstPT = null,
        h._onInitTween = function(t, e, o) {
            if (!t.nodeType)
                return !1;
            this._target = t,
            this._tween = o,
            this._vars = e,
            l = e.autoRound,
            i = !1,
            s = e.suffixMap || a.suffixMap,
            r = W(t, ""),
            n = this._overwriteProps;
            var h, p, f, m, d, g, v, y, T, x = t.style;
            if (_ && "" === x.zIndex && (h = G(t, "zIndex", r),
            ("auto" === h || "" === h) && (x.zIndex = 0)),
            "string" == typeof e && (m = x.cssText,
            h = Q(t, r),
            x.cssText = m + ";" + e,
            h = H(t, h, Q(t)).difs,
            !U && w.test(e) && (h.opacity = parseFloat(RegExp.$1)),
            e = h,
            x.cssText = m),
            this._firstPT = p = this.parse(t, e, null),
            this._transformType) {
                for (T = 3 === this._transformType,
                ye ? u && (_ = !0,
                "" === x.zIndex && (v = G(t, "zIndex", r),
                ("auto" === v || "" === v) && (x.zIndex = 0)),
                c && (x.WebkitBackfaceVisibility = this._vars.WebkitBackfaceVisibility || (T ? "visible" : "hidden"))) : x.zoom = 1,
                f = p; f && f._next; )
                    f = f._next;
                y = new pe(t,"transform",0,0,null,2),
                this._linkCSSP(y, null, f),
                y.setRatio = T && xe ? ke : ye ? Re : Se,
                y.data = this._transform || Pe(t, r, !0),
                n.pop()
            }
            if (i) {
                for (; p; ) {
                    for (g = p._next,
                    f = m; f && f.pr > p.pr; )
                        f = f._next;
                    (p._prev = f ? f._prev : d) ? p._prev._next = p : m = p,
                    (p._next = f) ? f._prev = p : d = p,
                    p = g
                }
                this._firstPT = m
            }
            return !0
        }
        ,
        h.parse = function(t, e, i, n) {
            var a, h, _, u, p, c, f, m, d, g, v = t.style;
            for (a in e)
                c = e[a],
                h = o[a],
                h ? i = h.parse(t, c, a, this, i, n, e) : (p = G(t, a, r) + "",
                d = "string" == typeof c,
                "color" === a || "fill" === a || "stroke" === a || -1 !== a.indexOf("Color") || d && b.test(c) ? (d || (c = oe(c),
                c = (c.length > 3 ? "rgba(" : "rgb(") + c.join(",") + ")"),
                i = ce(v, a, p, c, !0, "transparent", i, 0, n)) : !d || -1 === c.indexOf(" ") && -1 === c.indexOf(",") ? (_ = parseFloat(p),
                f = _ || 0 === _ ? p.substr((_ + "").length) : "",
                ("" === p || "auto" === p) && ("width" === a || "height" === a ? (_ = te(t, a, r),
                f = "px") : "left" === a || "top" === a ? (_ = Z(t, a, r),
                f = "px") : (_ = "opacity" !== a ? 0 : 1,
                f = "")),
                g = d && "=" === c.charAt(1),
                g ? (u = parseInt(c.charAt(0) + "1", 10),
                c = c.substr(2),
                u *= parseFloat(c),
                m = c.replace(y, "")) : (u = parseFloat(c),
                m = d ? c.substr((u + "").length) || "" : ""),
                "" === m && (m = a in s ? s[a] : f),
                c = u || 0 === u ? (g ? u + _ : u) + m : e[a],
                f !== m && "" !== m && (u || 0 === u) && _ && (_ = $(t, a, _, f),
                "%" === m ? (_ /= $(t, a, 100, "%") / 100,
                e.strictUnits !== !0 && (p = _ + "%")) : "em" === m ? _ /= $(t, a, 1, "em") : "px" !== m && (u = $(t, a, u, m),
                m = "px"),
                g && (u || 0 === u) && (c = u + _ + m)),
                g && (u += _),
                !_ && 0 !== _ || !u && 0 !== u ? void 0 !== v[a] && (c || "NaN" != c + "" && null != c) ? (i = new pe(v,a,u || _ || 0,0,i,-1,a,!1,0,p,c),
                i.xs0 = "none" !== c || "display" !== a && -1 === a.indexOf("Style") ? c : p) : j("invalid " + a + " tween value: " + e[a]) : (i = new pe(v,a,_,u - _,i,0,a,l !== !1 && ("px" === m || "zIndex" === a),0,p,c),
                i.xs0 = m)) : i = ce(v, a, p, c, !0, null, i, 0, n)),
                n && i && !i.plugin && (i.plugin = n);
            return i
        }
        ,
        h.setRatio = function(t) {
            var e, i, s, r = this._firstPT, n = 1e-6;
            if (1 !== t || this._tween._time !== this._tween._duration && 0 !== this._tween._time)
                if (t || this._tween._time !== this._tween._duration && 0 !== this._tween._time || this._tween._rawPrevTime === -1e-6)
                    for (; r; ) {
                        if (e = r.c * t + r.s,
                        r.r ? e = Math.round(e) : n > e && e > -n && (e = 0),
                        r.type)
                            if (1 === r.type)
                                if (s = r.l,
                                2 === s)
                                    r.t[r.p] = r.xs0 + e + r.xs1 + r.xn1 + r.xs2;
                                else if (3 === s)
                                    r.t[r.p] = r.xs0 + e + r.xs1 + r.xn1 + r.xs2 + r.xn2 + r.xs3;
                                else if (4 === s)
                                    r.t[r.p] = r.xs0 + e + r.xs1 + r.xn1 + r.xs2 + r.xn2 + r.xs3 + r.xn3 + r.xs4;
                                else if (5 === s)
                                    r.t[r.p] = r.xs0 + e + r.xs1 + r.xn1 + r.xs2 + r.xn2 + r.xs3 + r.xn3 + r.xs4 + r.xn4 + r.xs5;
                                else {
                                    for (i = r.xs0 + e + r.xs1,
                                    s = 1; r.l > s; s++)
                                        i += r["xn" + s] + r["xs" + (s + 1)];
                                    r.t[r.p] = i
                                }
                            else
                                -1 === r.type ? r.t[r.p] = r.xs0 : r.setRatio && r.setRatio(t);
                        else
                            r.t[r.p] = e + r.xs0;
                        r = r._next
                    }
                else
                    for (; r; )
                        2 !== r.type ? r.t[r.p] = r.b : r.setRatio(t),
                        r = r._next;
            else
                for (; r; )
                    2 !== r.type ? r.t[r.p] = r.e : r.setRatio(t),
                    r = r._next
        }
        ,
        h._enableTransforms = function(t) {
            this._transformType = t || 3 === this._transformType ? 3 : 2,
            this._transform = this._transform || Pe(this._target, r, !0)
        }
        ,
        h._linkCSSP = function(t, e, i, s) {
            return t && (e && (e._prev = t),
            t._next && (t._next._prev = t._prev),
            t._prev ? t._prev._next = t._next : this._firstPT === t && (this._firstPT = t._next,
            s = !0),
            i ? i._next = t : s || null !== this._firstPT || (this._firstPT = t),
            t._next = e,
            t._prev = i),
            t
        }
        ,
        h._kill = function(e) {
            var i, s, r, n = e;
            if (e.autoAlpha || e.alpha) {
                n = {};
                for (s in e)
                    n[s] = e[s];
                n.opacity = 1,
                n.autoAlpha && (n.visibility = 1)
            }
            return e.className && (i = this._classNamePT) && (r = i.xfirst,
            r && r._prev ? this._linkCSSP(r._prev, i._next, r._prev._prev) : r === this._firstPT && (this._firstPT = i._next),
            i._next && this._linkCSSP(i._next, i._next._next, r._prev),
            this._classNamePT = null),
            t.prototype._kill.call(this, n)
        }
        ;
        var Me = function(t, e, i) {
            var s, r, n, a;
            if (t.slice)
                for (r = t.length; --r > -1; )
                    Me(t[r], e, i);
            else
                for (s = t.childNodes,
                r = s.length; --r > -1; )
                    n = s[r],
                    a = n.type,
                    n.style && (e.push(Q(n)),
                    i && i.push(n)),
                    1 !== a && 9 !== a && 11 !== a || !n.childNodes.length || Me(n, e, i)
        };
        return a.cascadeTo = function(t, i, s) {
            var r, n, a, o = e.to(t, i, s), h = [o], l = [], _ = [], u = [], p = e._internals.reservedProps;
            for (t = o._targets || o.target,
            Me(t, l, u),
            o.render(i, !0),
            Me(t, _),
            o.render(0, !0),
            o._enabled(!0),
            r = u.length; --r > -1; )
                if (n = H(u[r], l[r], _[r]),
                n.firstMPT) {
                    n = n.difs;
                    for (a in s)
                        p[a] && (n[a] = s[a]);
                    h.push(e.to(u[r], i, n))
                }
            return h
        }
        ,
        t.activate([a]),
        a
    }, !0),
    function() {
        var t = window._gsDefine.plugin({
            propName: "roundProps",
            priority: -1,
            API: 2,
            init: function(t, e, i) {
                return this._tween = i,
                !0
            }
        })
          , e = t.prototype;
        e._onInitAllProps = function() {
            for (var t, e, i, s = this._tween, r = s.vars.roundProps instanceof Array ? s.vars.roundProps : s.vars.roundProps.split(","), n = r.length, a = {}, o = s._propLookup.roundProps; --n > -1; )
                a[r[n]] = 1;
            for (n = r.length; --n > -1; )
                for (t = r[n],
                e = s._firstPT; e; )
                    i = e._next,
                    e.pg ? e.t._roundProps(a, !0) : e.n === t && (this._add(e.t, t, e.s, e.c),
                    i && (i._prev = e._prev),
                    e._prev ? e._prev._next = i : s._firstPT === e && (s._firstPT = i),
                    e._next = e._prev = null,
                    s._propLookup[t] = o),
                    e = i;
            return !1
        }
        ,
        e._add = function(t, e, i, s) {
            this._addTween(t, e, i, i + s, e, !0),
            this._overwriteProps.push(e)
        }
    }(),
    window._gsDefine.plugin({
        propName: "attr",
        API: 2,
        version: "0.3.0",
        init: function(t, e, i) {
            var s, r, n;
            if ("function" != typeof t.setAttribute)
                return !1;
            this._target = t,
            this._proxy = {},
            this._start = {},
            this._end = {},
            this._endRatio = i.vars.runBackwards ? 0 : 1;
            for (s in e)
                this._start[s] = this._proxy[s] = r = t.getAttribute(s),
                this._end[s] = n = e[s],
                this._addTween(this._proxy, s, parseFloat(r), n, s),
                this._overwriteProps.push(s);
            return !0
        },
        set: function(t) {
            this._super.setRatio.call(this, t);
            for (var e, i = this._overwriteProps, s = i.length, r = 0 !== t && 1 !== t ? this._proxy : t === this._endRatio ? this._end : this._start; --s > -1; )
                e = i[s],
                this._target.setAttribute(e, r[e] + "")
        }
    }),
    window._gsDefine.plugin({
        propName: "directionalRotation",
        API: 2,
        version: "0.2.0",
        init: function(t, e) {
            "object" != typeof e && (e = {
                rotation: e
            }),
            this.finals = {};
            var i, s, r, n, a, o, h = e.useRadians === !0 ? 2 * Math.PI : 360, l = 1e-6;
            for (i in e)
                "useRadians" !== i && (o = (e[i] + "").split("_"),
                s = o[0],
                r = parseFloat("function" != typeof t[i] ? t[i] : t[i.indexOf("set") || "function" != typeof t["get" + i.substr(3)] ? i : "get" + i.substr(3)]()),
                n = this.finals[i] = "string" == typeof s && "=" === s.charAt(1) ? r + parseInt(s.charAt(0) + "1", 10) * Number(s.substr(2)) : Number(s) || 0,
                a = n - r,
                o.length && (s = o.join("_"),
                -1 !== s.indexOf("short") && (a %= h,
                a !== a % (h / 2) && (a = 0 > a ? a + h : a - h)),
                -1 !== s.indexOf("_cw") && 0 > a ? a = (a + 9999999999 * h) % h - (0 | a / h) * h : -1 !== s.indexOf("ccw") && a > 0 && (a = (a - 9999999999 * h) % h - (0 | a / h) * h)),
                (a > l || -l > a) && (this._addTween(t, i, r, r + a, i),
                this._overwriteProps.push(i)));
            return !0
        },
        set: function(t) {
            var e;
            if (1 !== t)
                this._super.setRatio.call(this, t);
            else
                for (e = this._firstPT; e; )
                    e.f ? e.t[e.p](this.finals[e.p]) : e.t[e.p] = this.finals[e.p],
                    e = e._next
        }
    })._autoCSS = !0,
    window._gsDefine("easing.Back", ["easing.Ease"], function(t) {
        var e, i, s, r = window.GreenSockGlobals || window, n = r.com.greensock, a = 2 * Math.PI, o = Math.PI / 2, h = n._class, l = function(e, i) {
            var s = h("easing." + e, function() {}, !0)
              , r = s.prototype = new t;
            return r.constructor = s,
            r.getRatio = i,
            s
        }, _ = t.register || function() {}
        , u = function(t, e, i, s) {
            var r = h("easing." + t, {
                easeOut: new e,
                easeIn: new i,
                easeInOut: new s
            }, !0);
            return _(r, t),
            r
        }, p = function(t, e, i) {
            this.t = t,
            this.v = e,
            i && (this.next = i,
            i.prev = this,
            this.c = i.v - e,
            this.gap = i.t - t)
        }, c = function(e, i) {
            var s = h("easing." + e, function(t) {
                this._p1 = t || 0 === t ? t : 1.70158,
                this._p2 = 1.525 * this._p1
            }, !0)
              , r = s.prototype = new t;
            return r.constructor = s,
            r.getRatio = i,
            r.config = function(t) {
                return new s(t)
            }
            ,
            s
        }, f = u("Back", c("BackOut", function(t) {
            return (t -= 1) * t * ((this._p1 + 1) * t + this._p1) + 1
        }), c("BackIn", function(t) {
            return t * t * ((this._p1 + 1) * t - this._p1)
        }), c("BackInOut", function(t) {
            return 1 > (t *= 2) ? .5 * t * t * ((this._p2 + 1) * t - this._p2) : .5 * ((t -= 2) * t * ((this._p2 + 1) * t + this._p2) + 2)
        })), m = h("easing.SlowMo", function(t, e, i) {
            e = e || 0 === e ? e : .7,
            null == t ? t = .7 : t > 1 && (t = 1),
            this._p = 1 !== t ? e : 0,
            this._p1 = (1 - t) / 2,
            this._p2 = t,
            this._p3 = this._p1 + this._p2,
            this._calcEnd = i === !0
        }, !0), d = m.prototype = new t;
        return d.constructor = m,
        d.getRatio = function(t) {
            var e = t + (.5 - t) * this._p;
            return this._p1 > t ? this._calcEnd ? 1 - (t = 1 - t / this._p1) * t : e - (t = 1 - t / this._p1) * t * t * t * e : t > this._p3 ? this._calcEnd ? 1 - (t = (t - this._p3) / this._p1) * t : e + (t - e) * (t = (t - this._p3) / this._p1) * t * t * t : this._calcEnd ? 1 : e
        }
        ,
        m.ease = new m(.7,.7),
        d.config = m.config = function(t, e, i) {
            return new m(t,e,i)
        }
        ,
        e = h("easing.SteppedEase", function(t) {
            t = t || 1,
            this._p1 = 1 / t,
            this._p2 = t + 1
        }, !0),
        d = e.prototype = new t,
        d.constructor = e,
        d.getRatio = function(t) {
            return 0 > t ? t = 0 : t >= 1 && (t = .999999999),
            (this._p2 * t >> 0) * this._p1
        }
        ,
        d.config = e.config = function(t) {
            return new e(t)
        }
        ,
        i = h("easing.RoughEase", function(e) {
            e = e || {};
            for (var i, s, r, n, a, o, h = e.taper || "none", l = [], _ = 0, u = 0 | (e.points || 20), c = u, f = e.randomize !== !1, m = e.clamp === !0, d = e.template instanceof t ? e.template : null, g = "number" == typeof e.strength ? .4 * e.strength : .4; --c > -1; )
                i = f ? Math.random() : 1 / u * c,
                s = d ? d.getRatio(i) : i,
                "none" === h ? r = g : "out" === h ? (n = 1 - i,
                r = n * n * g) : "in" === h ? r = i * i * g : .5 > i ? (n = 2 * i,
                r = .5 * n * n * g) : (n = 2 * (1 - i),
                r = .5 * n * n * g),
                f ? s += Math.random() * r - .5 * r : c % 2 ? s += .5 * r : s -= .5 * r,
                m && (s > 1 ? s = 1 : 0 > s && (s = 0)),
                l[_++] = {
                    x: i,
                    y: s
                };
            for (l.sort(function(t, e) {
                return t.x - e.x
            }),
            o = new p(1,1,null),
            c = u; --c > -1; )
                a = l[c],
                o = new p(a.x,a.y,o);
            this._prev = new p(0,0,0 !== o.t ? o : o.next)
        }, !0),
        d = i.prototype = new t,
        d.constructor = i,
        d.getRatio = function(t) {
            var e = this._prev;
            if (t > e.t) {
                for (; e.next && t >= e.t; )
                    e = e.next;
                e = e.prev
            } else
                for (; e.prev && e.t >= t; )
                    e = e.prev;
            return this._prev = e,
            e.v + (t - e.t) / e.gap * e.c
        }
        ,
        d.config = function(t) {
            return new i(t)
        }
        ,
        i.ease = new i,
        u("Bounce", l("BounceOut", function(t) {
            return 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
        }), l("BounceIn", function(t) {
            return 1 / 2.75 > (t = 1 - t) ? 1 - 7.5625 * t * t : 2 / 2.75 > t ? 1 - (7.5625 * (t -= 1.5 / 2.75) * t + .75) : 2.5 / 2.75 > t ? 1 - (7.5625 * (t -= 2.25 / 2.75) * t + .9375) : 1 - (7.5625 * (t -= 2.625 / 2.75) * t + .984375)
        }), l("BounceInOut", function(t) {
            var e = .5 > t;
            return t = e ? 1 - 2 * t : 2 * t - 1,
            t = 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375,
            e ? .5 * (1 - t) : .5 * t + .5
        })),
        u("Circ", l("CircOut", function(t) {
            return Math.sqrt(1 - (t -= 1) * t)
        }), l("CircIn", function(t) {
            return -(Math.sqrt(1 - t * t) - 1)
        }), l("CircInOut", function(t) {
            return 1 > (t *= 2) ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
        })),
        s = function(e, i, s) {
            var r = h("easing." + e, function(t, e) {
                this._p1 = t || 1,
                this._p2 = e || s,
                this._p3 = this._p2 / a * (Math.asin(1 / this._p1) || 0)
            }, !0)
              , n = r.prototype = new t;
            return n.constructor = r,
            n.getRatio = i,
            n.config = function(t, e) {
                return new r(t,e)
            }
            ,
            r
        }
        ,
        u("Elastic", s("ElasticOut", function(t) {
            return this._p1 * Math.pow(2, -10 * t) * Math.sin((t - this._p3) * a / this._p2) + 1
        }, .3), s("ElasticIn", function(t) {
            return -(this._p1 * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - this._p3) * a / this._p2))
        }, .3), s("ElasticInOut", function(t) {
            return 1 > (t *= 2) ? -.5 * this._p1 * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - this._p3) * a / this._p2) : .5 * this._p1 * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - this._p3) * a / this._p2) + 1
        }, .45)),
        u("Expo", l("ExpoOut", function(t) {
            return 1 - Math.pow(2, -10 * t)
        }), l("ExpoIn", function(t) {
            return Math.pow(2, 10 * (t - 1)) - .001
        }), l("ExpoInOut", function(t) {
            return 1 > (t *= 2) ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (2 - Math.pow(2, -10 * (t - 1)))
        })),
        u("Sine", l("SineOut", function(t) {
            return Math.sin(t * o)
        }), l("SineIn", function(t) {
            return -Math.cos(t * o) + 1
        }), l("SineInOut", function(t) {
            return -.5 * (Math.cos(Math.PI * t) - 1)
        })),
        h("easing.EaseLookup", {
            find: function(e) {
                return t.map[e]
            }
        }, !0),
        _(r.SlowMo, "SlowMo", "ease,"),
        _(i, "RoughEase", "ease,"),
        _(e, "SteppedEase", "ease,"),
        f
    }, !0)
}),
function(t) {
    "use strict";
    var e = t.GreenSockGlobals || t;
    if (!e.TweenLite) {
        var i, s, r, n, a, o = function(t) {
            var i, s = t.split("."), r = e;
            for (i = 0; s.length > i; i++)
                r[s[i]] = r = r[s[i]] || {};
            return r
        }, h = o("com.greensock"), l = 1e-10, _ = [].slice, u = function() {}, p = function() {
            var t = Object.prototype.toString
              , e = t.call([]);
            return function(i) {
                return null != i && (i instanceof Array || "object" == typeof i && !!i.push && t.call(i) === e)
            }
        }(), c = {}, f = function(i, s, r, n) {
            this.sc = c[i] ? c[i].sc : [],
            c[i] = this,
            this.gsClass = null,
            this.func = r;
            var a = [];
            this.check = function(h) {
                for (var l, _, u, p, m = s.length, d = m; --m > -1; )
                    (l = c[s[m]] || new f(s[m],[])).gsClass ? (a[m] = l.gsClass,
                    d--) : h && l.sc.push(this);
                if (0 === d && r)
                    for (_ = ("com.greensock." + i).split("."),
                    u = _.pop(),
                    p = o(_.join("."))[u] = this.gsClass = r.apply(r, a),
                    n && (e[u] = p,
                    "function" == typeof define && define.amd ? define((t.GreenSockAMDPath ? t.GreenSockAMDPath + "/" : "") + i.split(".").join("/"), [], function() {
                        return p
                    }) : "undefined" != typeof module && module.exports && (module.exports = p)),
                    m = 0; this.sc.length > m; m++)
                        this.sc[m].check()
            }
            ,
            this.check(!0)
        }, m = t._gsDefine = function(t, e, i, s) {
            return new f(t,e,i,s)
        }
        , d = h._class = function(t, e, i) {
            return e = e || function() {}
            ,
            m(t, [], function() {
                return e
            }, i),
            e
        }
        ;
        m.globals = e;
        var g = [0, 0, 1, 1]
          , v = []
          , y = d("easing.Ease", function(t, e, i, s) {
            this._func = t,
            this._type = i || 0,
            this._power = s || 0,
            this._params = e ? g.concat(e) : g
        }, !0)
          , T = y.map = {}
          , w = y.register = function(t, e, i, s) {
            for (var r, n, a, o, l = e.split(","), _ = l.length, u = (i || "easeIn,easeOut,easeInOut").split(","); --_ > -1; )
                for (n = l[_],
                r = s ? d("easing." + n, null, !0) : h.easing[n] || {},
                a = u.length; --a > -1; )
                    o = u[a],
                    T[n + "." + o] = T[o + n] = r[o] = t.getRatio ? t : t[o] || new t
        }
        ;
        for (r = y.prototype,
        r._calcEnd = !1,
        r.getRatio = function(t) {
            if (this._func)
                return this._params[0] = t,
                this._func.apply(null, this._params);
            var e = this._type
              , i = this._power
              , s = 1 === e ? 1 - t : 2 === e ? t : .5 > t ? 2 * t : 2 * (1 - t);
            return 1 === i ? s *= s : 2 === i ? s *= s * s : 3 === i ? s *= s * s * s : 4 === i && (s *= s * s * s * s),
            1 === e ? 1 - s : 2 === e ? s : .5 > t ? s / 2 : 1 - s / 2
        }
        ,
        i = ["Linear", "Quad", "Cubic", "Quart", "Quint,Strong"],
        s = i.length; --s > -1; )
            r = i[s] + ",Power" + s,
            w(new y(null,null,1,s), r, "easeOut", !0),
            w(new y(null,null,2,s), r, "easeIn" + (0 === s ? ",easeNone" : "")),
            w(new y(null,null,3,s), r, "easeInOut");
        T.linear = h.easing.Linear.easeIn,
        T.swing = h.easing.Quad.easeInOut;
        var x = d("events.EventDispatcher", function(t) {
            this._listeners = {},
            this._eventTarget = t || this
        });
        r = x.prototype,
        r.addEventListener = function(t, e, i, s, r) {
            r = r || 0;
            var o, h, l = this._listeners[t], _ = 0;
            for (null == l && (this._listeners[t] = l = []),
            h = l.length; --h > -1; )
                o = l[h],
                o.c === e && o.s === i ? l.splice(h, 1) : 0 === _ && r > o.pr && (_ = h + 1);
            l.splice(_, 0, {
                c: e,
                s: i,
                up: s,
                pr: r
            }),
            this !== n || a || n.wake()
        }
        ,
        r.removeEventListener = function(t, e) {
            var i, s = this._listeners[t];
            if (s)
                for (i = s.length; --i > -1; )
                    if (s[i].c === e)
                        return s.splice(i, 1),
                        void 0
        }
        ,
        r.dispatchEvent = function(t) {
            var e, i, s, r = this._listeners[t];
            if (r)
                for (e = r.length,
                i = this._eventTarget; --e > -1; )
                    s = r[e],
                    s.up ? s.c.call(s.s || i, {
                        type: t,
                        target: i
                    }) : s.c.call(s.s || i)
        }
        ;
        var b = t.requestAnimationFrame
          , P = t.cancelAnimationFrame
          , S = Date.now || function() {
            return (new Date).getTime()
        }
          , k = S();
        for (i = ["ms", "moz", "webkit", "o"],
        s = i.length; --s > -1 && !b; )
            b = t[i[s] + "RequestAnimationFrame"],
            P = t[i[s] + "CancelAnimationFrame"] || t[i[s] + "CancelRequestAnimationFrame"];
        d("Ticker", function(t, e) {
            var i, s, r, o, h, l = this, _ = S(), p = e !== !1 && b, c = function(t) {
                k = S(),
                l.time = (k - _) / 1e3;
                var e, n = l.time - h;
                (!i || n > 0 || t === !0) && (l.frame++,
                h += n + (n >= o ? .004 : o - n),
                e = !0),
                t !== !0 && (r = s(c)),
                e && l.dispatchEvent("tick")
            };
            x.call(l),
            l.time = l.frame = 0,
            l.tick = function() {
                c(!0)
            }
            ,
            l.sleep = function() {
                null != r && (p && P ? P(r) : clearTimeout(r),
                s = u,
                r = null,
                l === n && (a = !1))
            }
            ,
            l.wake = function() {
                null !== r && l.sleep(),
                s = 0 === i ? u : p && b ? b : function(t) {
                    return setTimeout(t, 0 | 1e3 * (h - l.time) + 1)
                }
                ,
                l === n && (a = !0),
                c(2)
            }
            ,
            l.fps = function(t) {
                return arguments.length ? (i = t,
                o = 1 / (i || 60),
                h = this.time + o,
                l.wake(),
                void 0) : i
            }
            ,
            l.useRAF = function(t) {
                return arguments.length ? (l.sleep(),
                p = t,
                l.fps(i),
                void 0) : p
            }
            ,
            l.fps(t),
            setTimeout(function() {
                p && (!r || 5 > l.frame) && l.useRAF(!1)
            }, 1500)
        }),
        r = h.Ticker.prototype = new h.events.EventDispatcher,
        r.constructor = h.Ticker;
        var R = d("core.Animation", function(t, e) {
            if (this.vars = e = e || {},
            this._duration = this._totalDuration = t || 0,
            this._delay = Number(e.delay) || 0,
            this._timeScale = 1,
            this._active = e.immediateRender === !0,
            this.data = e.data,
            this._reversed = e.reversed === !0,
            U) {
                a || n.wake();
                var i = this.vars.useFrames ? z : U;
                i.add(this, i._time),
                this.vars.paused && this.paused(!0)
            }
        });
        n = R.ticker = new h.Ticker,
        r = R.prototype,
        r._dirty = r._gc = r._initted = r._paused = !1,
        r._totalTime = r._time = 0,
        r._rawPrevTime = -1,
        r._next = r._last = r._onUpdate = r._timeline = r.timeline = null,
        r._paused = !1;
        var A = function() {
            a && S() - k > 2e3 && n.wake(),
            setTimeout(A, 2e3)
        };
        A(),
        r.play = function(t, e) {
            return null != t && this.seek(t, e),
            this.reversed(!1).paused(!1)
        }
        ,
        r.pause = function(t, e) {
            return null != t && this.seek(t, e),
            this.paused(!0)
        }
        ,
        r.resume = function(t, e) {
            return null != t && this.seek(t, e),
            this.paused(!1)
        }
        ,
        r.seek = function(t, e) {
            return this.totalTime(Number(t), e !== !1)
        }
        ,
        r.restart = function(t, e) {
            return this.reversed(!1).paused(!1).totalTime(t ? -this._delay : 0, e !== !1, !0)
        }
        ,
        r.reverse = function(t, e) {
            return null != t && this.seek(t || this.totalDuration(), e),
            this.reversed(!0).paused(!1)
        }
        ,
        r.render = function() {}
        ,
        r.invalidate = function() {
            return this
        }
        ,
        r.isActive = function() {
            var t, e = this._timeline, i = this._startTime;
            return !e || !this._gc && !this._paused && e.isActive() && (t = e.rawTime()) >= i && i + this.totalDuration() / this._timeScale > t
        }
        ,
        r._enabled = function(t, e) {
            return a || n.wake(),
            this._gc = !t,
            this._active = this.isActive(),
            e !== !0 && (t && !this.timeline ? this._timeline.add(this, this._startTime - this._delay) : !t && this.timeline && this._timeline._remove(this, !0)),
            !1
        }
        ,
        r._kill = function() {
            return this._enabled(!1, !1)
        }
        ,
        r.kill = function(t, e) {
            return this._kill(t, e),
            this
        }
        ,
        r._uncache = function(t) {
            for (var e = t ? this : this.timeline; e; )
                e._dirty = !0,
                e = e.timeline;
            return this
        }
        ,
        r._swapSelfInParams = function(t) {
            for (var e = t.length, i = t.concat(); --e > -1; )
                "{self}" === t[e] && (i[e] = this);
            return i
        }
        ,
        r.eventCallback = function(t, e, i, s) {
            if ("on" === (t || "").substr(0, 2)) {
                var r = this.vars;
                if (1 === arguments.length)
                    return r[t];
                null == e ? delete r[t] : (r[t] = e,
                r[t + "Params"] = p(i) && -1 !== i.join("").indexOf("{self}") ? this._swapSelfInParams(i) : i,
                r[t + "Scope"] = s),
                "onUpdate" === t && (this._onUpdate = e)
            }
            return this
        }
        ,
        r.delay = function(t) {
            return arguments.length ? (this._timeline.smoothChildTiming && this.startTime(this._startTime + t - this._delay),
            this._delay = t,
            this) : this._delay
        }
        ,
        r.duration = function(t) {
            return arguments.length ? (this._duration = this._totalDuration = t,
            this._uncache(!0),
            this._timeline.smoothChildTiming && this._time > 0 && this._time < this._duration && 0 !== t && this.totalTime(this._totalTime * (t / this._duration), !0),
            this) : (this._dirty = !1,
            this._duration)
        }
        ,
        r.totalDuration = function(t) {
            return this._dirty = !1,
            arguments.length ? this.duration(t) : this._totalDuration
        }
        ,
        r.time = function(t, e) {
            return arguments.length ? (this._dirty && this.totalDuration(),
            this.totalTime(t > this._duration ? this._duration : t, e)) : this._time
        }
        ,
        r.totalTime = function(t, e, i) {
            if (a || n.wake(),
            !arguments.length)
                return this._totalTime;
            if (this._timeline) {
                if (0 > t && !i && (t += this.totalDuration()),
                this._timeline.smoothChildTiming) {
                    this._dirty && this.totalDuration();
                    var s = this._totalDuration
                      , r = this._timeline;
                    if (t > s && !i && (t = s),
                    this._startTime = (this._paused ? this._pauseTime : r._time) - (this._reversed ? s - t : t) / this._timeScale,
                    r._dirty || this._uncache(!1),
                    r._timeline)
                        for (; r._timeline; )
                            r._timeline._time !== (r._startTime + r._totalTime) / r._timeScale && r.totalTime(r._totalTime, !0),
                            r = r._timeline
                }
                this._gc && this._enabled(!0, !1),
                (this._totalTime !== t || 0 === this._duration) && this.render(t, e, !1)
            }
            return this
        }
        ,
        r.progress = r.totalProgress = function(t, e) {
            return arguments.length ? this.totalTime(this.duration() * t, e) : this._time / this.duration()
        }
        ,
        r.startTime = function(t) {
            return arguments.length ? (t !== this._startTime && (this._startTime = t,
            this.timeline && this.timeline._sortChildren && this.timeline.add(this, t - this._delay)),
            this) : this._startTime
        }
        ,
        r.timeScale = function(t) {
            if (!arguments.length)
                return this._timeScale;
            if (t = t || l,
            this._timeline && this._timeline.smoothChildTiming) {
                var e = this._pauseTime
                  , i = e || 0 === e ? e : this._timeline.totalTime();
                this._startTime = i - (i - this._startTime) * this._timeScale / t
            }
            return this._timeScale = t,
            this._uncache(!1)
        }
        ,
        r.reversed = function(t) {
            return arguments.length ? (t != this._reversed && (this._reversed = t,
            this.totalTime(this._timeline && !this._timeline.smoothChildTiming ? this.totalDuration() - this._totalTime : this._totalTime, !0)),
            this) : this._reversed
        }
        ,
        r.paused = function(t) {
            if (!arguments.length)
                return this._paused;
            if (t != this._paused && this._timeline) {
                a || t || n.wake();
                var e = this._timeline
                  , i = e.rawTime()
                  , s = i - this._pauseTime;
                !t && e.smoothChildTiming && (this._startTime += s,
                this._uncache(!1)),
                this._pauseTime = t ? i : null,
                this._paused = t,
                this._active = this.isActive(),
                !t && 0 !== s && this._initted && this.duration() && this.render(e.smoothChildTiming ? this._totalTime : (i - this._startTime) / this._timeScale, !0, !0)
            }
            return this._gc && !t && this._enabled(!0, !1),
            this
        }
        ;
        var C = d("core.SimpleTimeline", function(t) {
            R.call(this, 0, t),
            this.autoRemoveChildren = this.smoothChildTiming = !0
        });
        r = C.prototype = new R,
        r.constructor = C,
        r.kill()._gc = !1,
        r._first = r._last = null,
        r._sortChildren = !1,
        r.add = r.insert = function(t, e) {
            var i, s;
            if (t._startTime = Number(e || 0) + t._delay,
            t._paused && this !== t._timeline && (t._pauseTime = t._startTime + (this.rawTime() - t._startTime) / t._timeScale),
            t.timeline && t.timeline._remove(t, !0),
            t.timeline = t._timeline = this,
            t._gc && t._enabled(!0, !0),
            i = this._last,
            this._sortChildren)
                for (s = t._startTime; i && i._startTime > s; )
                    i = i._prev;
            return i ? (t._next = i._next,
            i._next = t) : (t._next = this._first,
            this._first = t),
            t._next ? t._next._prev = t : this._last = t,
            t._prev = i,
            this._timeline && this._uncache(!0),
            this
        }
        ,
        r._remove = function(t, e) {
            return t.timeline === this && (e || t._enabled(!1, !0),
            t.timeline = null,
            t._prev ? t._prev._next = t._next : this._first === t && (this._first = t._next),
            t._next ? t._next._prev = t._prev : this._last === t && (this._last = t._prev),
            this._timeline && this._uncache(!0)),
            this
        }
        ,
        r.render = function(t, e, i) {
            var s, r = this._first;
            for (this._totalTime = this._time = this._rawPrevTime = t; r; )
                s = r._next,
                (r._active || t >= r._startTime && !r._paused) && (r._reversed ? r.render((r._dirty ? r.totalDuration() : r._totalDuration) - (t - r._startTime) * r._timeScale, e, i) : r.render((t - r._startTime) * r._timeScale, e, i)),
                r = s
        }
        ,
        r.rawTime = function() {
            return a || n.wake(),
            this._totalTime
        }
        ;
        var O = d("TweenLite", function(e, i, s) {
            if (R.call(this, i, s),
            this.render = O.prototype.render,
            null == e)
                throw "Cannot tween a null target.";
            this.target = e = "string" != typeof e ? e : O.selector(e) || e;
            var r, n, a, o = e.jquery || e.length && e !== t && e[0] && (e[0] === t || e[0].nodeType && e[0].style && !e.nodeType), h = this.vars.overwrite;
            if (this._overwrite = h = null == h ? X[O.defaultOverwrite] : "number" == typeof h ? h >> 0 : X[h],
            (o || e instanceof Array || e.push && p(e)) && "number" != typeof e[0])
                for (this._targets = a = _.call(e, 0),
                this._propLookup = [],
                this._siblings = [],
                r = 0; a.length > r; r++)
                    n = a[r],
                    n ? "string" != typeof n ? n.length && n !== t && n[0] && (n[0] === t || n[0].nodeType && n[0].style && !n.nodeType) ? (a.splice(r--, 1),
                    this._targets = a = a.concat(_.call(n, 0))) : (this._siblings[r] = Y(n, this, !1),
                    1 === h && this._siblings[r].length > 1 && j(n, this, null, 1, this._siblings[r])) : (n = a[r--] = O.selector(n),
                    "string" == typeof n && a.splice(r + 1, 1)) : a.splice(r--, 1);
            else
                this._propLookup = {},
                this._siblings = Y(e, this, !1),
                1 === h && this._siblings.length > 1 && j(e, this, null, 1, this._siblings);
            (this.vars.immediateRender || 0 === i && 0 === this._delay && this.vars.immediateRender !== !1) && this.render(-this._delay, !1, !0)
        }, !0)
          , D = function(e) {
            return e.length && e !== t && e[0] && (e[0] === t || e[0].nodeType && e[0].style && !e.nodeType)
        }
          , M = function(t, e) {
            var i, s = {};
            for (i in t)
                L[i] || i in e && "x" !== i && "y" !== i && "width" !== i && "height" !== i && "className" !== i && "border" !== i || !(!E[i] || E[i] && E[i]._autoCSS) || (s[i] = t[i],
                delete t[i]);
            t.css = s
        };
        r = O.prototype = new R,
        r.constructor = O,
        r.kill()._gc = !1,
        r.ratio = 0,
        r._firstPT = r._targets = r._overwrittenProps = r._startAt = null,
        r._notifyPluginsOfEnabled = !1,
        O.version = "1.11.8",
        O.defaultEase = r._ease = new y(null,null,1,1),
        O.defaultOverwrite = "auto",
        O.ticker = n,
        O.autoSleep = !0,
        O.selector = t.$ || t.jQuery || function(e) {
            return t.$ ? (O.selector = t.$,
            t.$(e)) : t.document ? t.document.getElementById("#" === e.charAt(0) ? e.substr(1) : e) : e
        }
        ;
        var I = O._internals = {
            isArray: p,
            isSelector: D
        }
          , E = O._plugins = {}
          , N = O._tweenLookup = {}
          , F = 0
          , L = I.reservedProps = {
            ease: 1,
            delay: 1,
            overwrite: 1,
            onComplete: 1,
            onCompleteParams: 1,
            onCompleteScope: 1,
            useFrames: 1,
            runBackwards: 1,
            startAt: 1,
            onUpdate: 1,
            onUpdateParams: 1,
            onUpdateScope: 1,
            onStart: 1,
            onStartParams: 1,
            onStartScope: 1,
            onReverseComplete: 1,
            onReverseCompleteParams: 1,
            onReverseCompleteScope: 1,
            onRepeat: 1,
            onRepeatParams: 1,
            onRepeatScope: 1,
            easeParams: 1,
            yoyo: 1,
            immediateRender: 1,
            repeat: 1,
            repeatDelay: 1,
            data: 1,
            paused: 1,
            reversed: 1,
            autoCSS: 1
        }
          , X = {
            none: 0,
            all: 1,
            auto: 2,
            concurrent: 3,
            allOnStart: 4,
            preexisting: 5,
            "true": 1,
            "false": 0
        }
          , z = R._rootFramesTimeline = new C
          , U = R._rootTimeline = new C;
        U._startTime = n.time,
        z._startTime = n.frame,
        U._active = z._active = !0,
        R._updateRoot = function() {
            if (U.render((n.time - U._startTime) * U._timeScale, !1, !1),
            z.render((n.frame - z._startTime) * z._timeScale, !1, !1),
            !(n.frame % 120)) {
                var t, e, i;
                for (i in N) {
                    for (e = N[i].tweens,
                    t = e.length; --t > -1; )
                        e[t]._gc && e.splice(t, 1);
                    0 === e.length && delete N[i]
                }
                if (i = U._first,
                (!i || i._paused) && O.autoSleep && !z._first && 1 === n._listeners.tick.length) {
                    for (; i && i._paused; )
                        i = i._next;
                    i || n.sleep()
                }
            }
        }
        ,
        n.addEventListener("tick", R._updateRoot);
        var Y = function(t, e, i) {
            var s, r, n = t._gsTweenID;
            if (N[n || (t._gsTweenID = n = "t" + F++)] || (N[n] = {
                target: t,
                tweens: []
            }),
            e && (s = N[n].tweens,
            s[r = s.length] = e,
            i))
                for (; --r > -1; )
                    s[r] === e && s.splice(r, 1);
            return N[n].tweens
        }
          , j = function(t, e, i, s, r) {
            var n, a, o, h;
            if (1 === s || s >= 4) {
                for (h = r.length,
                n = 0; h > n; n++)
                    if ((o = r[n]) !== e)
                        o._gc || o._enabled(!1, !1) && (a = !0);
                    else if (5 === s)
                        break;
                return a
            }
            var _, u = e._startTime + l, p = [], c = 0, f = 0 === e._duration;
            for (n = r.length; --n > -1; )
                (o = r[n]) === e || o._gc || o._paused || (o._timeline !== e._timeline ? (_ = _ || B(e, 0, f),
                0 === B(o, _, f) && (p[c++] = o)) : u >= o._startTime && o._startTime + o.totalDuration() / o._timeScale > u && ((f || !o._initted) && 2e-10 >= u - o._startTime || (p[c++] = o)));
            for (n = c; --n > -1; )
                o = p[n],
                2 === s && o._kill(i, t) && (a = !0),
                (2 !== s || !o._firstPT && o._initted) && o._enabled(!1, !1) && (a = !0);
            return a
        }
          , B = function(t, e, i) {
            for (var s = t._timeline, r = s._timeScale, n = t._startTime; s._timeline; ) {
                if (n += s._startTime,
                r *= s._timeScale,
                s._paused)
                    return -100;
                s = s._timeline
            }
            return n /= r,
            n > e ? n - e : i && n === e || !t._initted && 2 * l > n - e ? l : (n += t.totalDuration() / t._timeScale / r) > e + l ? 0 : n - e - l
        };
        r._init = function() {
            var t, e, i, s, r = this.vars, n = this._overwrittenProps, a = this._duration, o = r.immediateRender, h = r.ease;
            if (r.startAt) {
                if (this._startAt && this._startAt.render(-1, !0),
                r.startAt.overwrite = 0,
                r.startAt.immediateRender = !0,
                this._startAt = O.to(this.target, 0, r.startAt),
                o)
                    if (this._time > 0)
                        this._startAt = null;
                    else if (0 !== a)
                        return
            } else if (r.runBackwards && 0 !== a)
                if (this._startAt)
                    this._startAt.render(-1, !0),
                    this._startAt = null;
                else {
                    i = {};
                    for (s in r)
                        L[s] && "autoCSS" !== s || (i[s] = r[s]);
                    if (i.overwrite = 0,
                    i.data = "isFromStart",
                    this._startAt = O.to(this.target, 0, i),
                    r.immediateRender) {
                        if (0 === this._time)
                            return
                    } else
                        this._startAt.render(-1, !0)
                }
            if (this._ease = h ? h instanceof y ? r.easeParams instanceof Array ? h.config.apply(h, r.easeParams) : h : "function" == typeof h ? new y(h,r.easeParams) : T[h] || O.defaultEase : O.defaultEase,
            this._easeType = this._ease._type,
            this._easePower = this._ease._power,
            this._firstPT = null,
            this._targets)
                for (t = this._targets.length; --t > -1; )
                    this._initProps(this._targets[t], this._propLookup[t] = {}, this._siblings[t], n ? n[t] : null) && (e = !0);
            else
                e = this._initProps(this.target, this._propLookup, this._siblings, n);
            if (e && O._onPluginEvent("_onInitAllProps", this),
            n && (this._firstPT || "function" != typeof this.target && this._enabled(!1, !1)),
            r.runBackwards)
                for (i = this._firstPT; i; )
                    i.s += i.c,
                    i.c = -i.c,
                    i = i._next;
            this._onUpdate = r.onUpdate,
            this._initted = !0
        }
        ,
        r._initProps = function(e, i, s, r) {
            var n, a, o, h, l, _;
            if (null == e)
                return !1;
            this.vars.css || e.style && e !== t && e.nodeType && E.css && this.vars.autoCSS !== !1 && M(this.vars, e);
            for (n in this.vars) {
                if (_ = this.vars[n],
                L[n])
                    _ && (_ instanceof Array || _.push && p(_)) && -1 !== _.join("").indexOf("{self}") && (this.vars[n] = _ = this._swapSelfInParams(_, this));
                else if (E[n] && (h = new E[n])._onInitTween(e, this.vars[n], this)) {
                    for (this._firstPT = l = {
                        _next: this._firstPT,
                        t: h,
                        p: "setRatio",
                        s: 0,
                        c: 1,
                        f: !0,
                        n: n,
                        pg: !0,
                        pr: h._priority
                    },
                    a = h._overwriteProps.length; --a > -1; )
                        i[h._overwriteProps[a]] = this._firstPT;
                    (h._priority || h._onInitAllProps) && (o = !0),
                    (h._onDisable || h._onEnable) && (this._notifyPluginsOfEnabled = !0)
                } else
                    this._firstPT = i[n] = l = {
                        _next: this._firstPT,
                        t: e,
                        p: n,
                        f: "function" == typeof e[n],
                        n: n,
                        pg: !1,
                        pr: 0
                    },
                    l.s = l.f ? e[n.indexOf("set") || "function" != typeof e["get" + n.substr(3)] ? n : "get" + n.substr(3)]() : parseFloat(e[n]),
                    l.c = "string" == typeof _ && "=" === _.charAt(1) ? parseInt(_.charAt(0) + "1", 10) * Number(_.substr(2)) : Number(_) - l.s || 0;
                l && l._next && (l._next._prev = l)
            }
            return r && this._kill(r, e) ? this._initProps(e, i, s, r) : this._overwrite > 1 && this._firstPT && s.length > 1 && j(e, this, i, this._overwrite, s) ? (this._kill(i, e),
            this._initProps(e, i, s, r)) : o
        }
        ,
        r.render = function(t, e, i) {
            var s, r, n, a, o = this._time, h = this._duration;
            if (t >= h)
                this._totalTime = this._time = h,
                this.ratio = this._ease._calcEnd ? this._ease.getRatio(1) : 1,
                this._reversed || (s = !0,
                r = "onComplete"),
                0 === h && (a = this._rawPrevTime,
                this._startTime === this._timeline._duration && (t = 0),
                (0 === t || 0 > a || a === l) && a !== t && (i = !0,
                a > l && (r = "onReverseComplete")),
                this._rawPrevTime = a = !e || t || this._rawPrevTime === t ? t : l);
            else if (1e-7 > t)
                this._totalTime = this._time = 0,
                this.ratio = this._ease._calcEnd ? this._ease.getRatio(0) : 0,
                (0 !== o || 0 === h && this._rawPrevTime > 0 && this._rawPrevTime !== l) && (r = "onReverseComplete",
                s = this._reversed),
                0 > t ? (this._active = !1,
                0 === h && (this._rawPrevTime >= 0 && (i = !0),
                this._rawPrevTime = a = !e || t || this._rawPrevTime === t ? t : l)) : this._initted || (i = !0);
            else if (this._totalTime = this._time = t,
            this._easeType) {
                var _ = t / h
                  , u = this._easeType
                  , p = this._easePower;
                (1 === u || 3 === u && _ >= .5) && (_ = 1 - _),
                3 === u && (_ *= 2),
                1 === p ? _ *= _ : 2 === p ? _ *= _ * _ : 3 === p ? _ *= _ * _ * _ : 4 === p && (_ *= _ * _ * _ * _),
                this.ratio = 1 === u ? 1 - _ : 2 === u ? _ : .5 > t / h ? _ / 2 : 1 - _ / 2
            } else
                this.ratio = this._ease.getRatio(t / h);
            if (this._time !== o || i) {
                if (!this._initted) {
                    if (this._init(),
                    !this._initted || this._gc)
                        return;
                    this._time && !s ? this.ratio = this._ease.getRatio(this._time / h) : s && this._ease._calcEnd && (this.ratio = this._ease.getRatio(0 === this._time ? 0 : 1))
                }
                for (this._active || !this._paused && this._time !== o && t >= 0 && (this._active = !0),
                0 === o && (this._startAt && (t >= 0 ? this._startAt.render(t, e, i) : r || (r = "_dummyGS")),
                this.vars.onStart && (0 !== this._time || 0 === h) && (e || this.vars.onStart.apply(this.vars.onStartScope || this, this.vars.onStartParams || v))),
                n = this._firstPT; n; )
                    n.f ? n.t[n.p](n.c * this.ratio + n.s) : n.t[n.p] = n.c * this.ratio + n.s,
                    n = n._next;
                this._onUpdate && (0 > t && this._startAt && this._startTime && this._startAt.render(t, e, i),
                e || (this._time !== o || s) && this._onUpdate.apply(this.vars.onUpdateScope || this, this.vars.onUpdateParams || v)),
                r && (this._gc || (0 > t && this._startAt && !this._onUpdate && this._startTime && this._startAt.render(t, e, i),
                s && (this._timeline.autoRemoveChildren && this._enabled(!1, !1),
                this._active = !1),
                !e && this.vars[r] && this.vars[r].apply(this.vars[r + "Scope"] || this, this.vars[r + "Params"] || v),
                0 === h && this._rawPrevTime === l && a !== l && (this._rawPrevTime = 0)))
            }
        }
        ,
        r._kill = function(t, e) {
            if ("all" === t && (t = null),
            null == t && (null == e || e === this.target))
                return this._enabled(!1, !1);
            e = "string" != typeof e ? e || this._targets || this.target : O.selector(e) || e;
            var i, s, r, n, a, o, h, l;
            if ((p(e) || D(e)) && "number" != typeof e[0])
                for (i = e.length; --i > -1; )
                    this._kill(t, e[i]) && (o = !0);
            else {
                if (this._targets) {
                    for (i = this._targets.length; --i > -1; )
                        if (e === this._targets[i]) {
                            a = this._propLookup[i] || {},
                            this._overwrittenProps = this._overwrittenProps || [],
                            s = this._overwrittenProps[i] = t ? this._overwrittenProps[i] || {} : "all";
                            break
                        }
                } else {
                    if (e !== this.target)
                        return !1;
                    a = this._propLookup,
                    s = this._overwrittenProps = t ? this._overwrittenProps || {} : "all"
                }
                if (a) {
                    h = t || a,
                    l = t !== s && "all" !== s && t !== a && ("object" != typeof t || !t._tempKill);
                    for (r in h)
                        (n = a[r]) && (n.pg && n.t._kill(h) && (o = !0),
                        n.pg && 0 !== n.t._overwriteProps.length || (n._prev ? n._prev._next = n._next : n === this._firstPT && (this._firstPT = n._next),
                        n._next && (n._next._prev = n._prev),
                        n._next = n._prev = null),
                        delete a[r]),
                        l && (s[r] = 1);
                    !this._firstPT && this._initted && this._enabled(!1, !1)
                }
            }
            return o
        }
        ,
        r.invalidate = function() {
            return this._notifyPluginsOfEnabled && O._onPluginEvent("_onDisable", this),
            this._firstPT = null,
            this._overwrittenProps = null,
            this._onUpdate = null,
            this._startAt = null,
            this._initted = this._active = this._notifyPluginsOfEnabled = !1,
            this._propLookup = this._targets ? {} : [],
            this
        }
        ,
        r._enabled = function(t, e) {
            if (a || n.wake(),
            t && this._gc) {
                var i, s = this._targets;
                if (s)
                    for (i = s.length; --i > -1; )
                        this._siblings[i] = Y(s[i], this, !0);
                else
                    this._siblings = Y(this.target, this, !0)
            }
            return R.prototype._enabled.call(this, t, e),
            this._notifyPluginsOfEnabled && this._firstPT ? O._onPluginEvent(t ? "_onEnable" : "_onDisable", this) : !1
        }
        ,
        O.to = function(t, e, i) {
            return new O(t,e,i)
        }
        ,
        O.from = function(t, e, i) {
            return i.runBackwards = !0,
            i.immediateRender = 0 != i.immediateRender,
            new O(t,e,i)
        }
        ,
        O.fromTo = function(t, e, i, s) {
            return s.startAt = i,
            s.immediateRender = 0 != s.immediateRender && 0 != i.immediateRender,
            new O(t,e,s)
        }
        ,
        O.delayedCall = function(t, e, i, s, r) {
            return new O(e,0,{
                delay: t,
                onComplete: e,
                onCompleteParams: i,
                onCompleteScope: s,
                onReverseComplete: e,
                onReverseCompleteParams: i,
                onReverseCompleteScope: s,
                immediateRender: !1,
                useFrames: r,
                overwrite: 0
            })
        }
        ,
        O.set = function(t, e) {
            return new O(t,0,e)
        }
        ,
        O.getTweensOf = function(t, e) {
            if (null == t)
                return [];
            t = "string" != typeof t ? t : O.selector(t) || t;
            var i, s, r, n;
            if ((p(t) || D(t)) && "number" != typeof t[0]) {
                for (i = t.length,
                s = []; --i > -1; )
                    s = s.concat(O.getTweensOf(t[i], e));
                for (i = s.length; --i > -1; )
                    for (n = s[i],
                    r = i; --r > -1; )
                        n === s[r] && s.splice(i, 1)
            } else
                for (s = Y(t).concat(),
                i = s.length; --i > -1; )
                    (s[i]._gc || e && !s[i].isActive()) && s.splice(i, 1);
            return s
        }
        ,
        O.killTweensOf = O.killDelayedCallsTo = function(t, e, i) {
            "object" == typeof e && (i = e,
            e = !1);
            for (var s = O.getTweensOf(t, e), r = s.length; --r > -1; )
                s[r]._kill(i, t)
        }
        ;
        var q = d("plugins.TweenPlugin", function(t, e) {
            this._overwriteProps = (t || "").split(","),
            this._propName = this._overwriteProps[0],
            this._priority = e || 0,
            this._super = q.prototype
        }, !0);
        if (r = q.prototype,
        q.version = "1.10.1",
        q.API = 2,
        r._firstPT = null,
        r._addTween = function(t, e, i, s, r, n) {
            var a, o;
            return null != s && (a = "number" == typeof s || "=" !== s.charAt(1) ? Number(s) - i : parseInt(s.charAt(0) + "1", 10) * Number(s.substr(2))) ? (this._firstPT = o = {
                _next: this._firstPT,
                t: t,
                p: e,
                s: i,
                c: a,
                f: "function" == typeof t[e],
                n: r || e,
                r: n
            },
            o._next && (o._next._prev = o),
            o) : void 0
        }
        ,
        r.setRatio = function(t) {
            for (var e, i = this._firstPT, s = 1e-6; i; )
                e = i.c * t + i.s,
                i.r ? e = Math.round(e) : s > e && e > -s && (e = 0),
                i.f ? i.t[i.p](e) : i.t[i.p] = e,
                i = i._next
        }
        ,
        r._kill = function(t) {
            var e, i = this._overwriteProps, s = this._firstPT;
            if (null != t[this._propName])
                this._overwriteProps = [];
            else
                for (e = i.length; --e > -1; )
                    null != t[i[e]] && i.splice(e, 1);
            for (; s; )
                null != t[s.n] && (s._next && (s._next._prev = s._prev),
                s._prev ? (s._prev._next = s._next,
                s._prev = null) : this._firstPT === s && (this._firstPT = s._next)),
                s = s._next;
            return !1
        }
        ,
        r._roundProps = function(t, e) {
            for (var i = this._firstPT; i; )
                (t[this._propName] || null != i.n && t[i.n.split(this._propName + "_").join("")]) && (i.r = e),
                i = i._next
        }
        ,
        O._onPluginEvent = function(t, e) {
            var i, s, r, n, a, o = e._firstPT;
            if ("_onInitAllProps" === t) {
                for (; o; ) {
                    for (a = o._next,
                    s = r; s && s.pr > o.pr; )
                        s = s._next;
                    (o._prev = s ? s._prev : n) ? o._prev._next = o : r = o,
                    (o._next = s) ? s._prev = o : n = o,
                    o = a
                }
                o = e._firstPT = r
            }
            for (; o; )
                o.pg && "function" == typeof o.t[t] && o.t[t]() && (i = !0),
                o = o._next;
            return i
        }
        ,
        q.activate = function(t) {
            for (var e = t.length; --e > -1; )
                t[e].API === q.API && (E[(new t[e])._propName] = t[e]);
            return !0
        }
        ,
        m.plugin = function(t) {
            if (!(t && t.propName && t.init && t.API))
                throw "illegal plugin definition.";
            var e, i = t.propName, s = t.priority || 0, r = t.overwriteProps, n = {
                init: "_onInitTween",
                set: "setRatio",
                kill: "_kill",
                round: "_roundProps",
                initAll: "_onInitAllProps"
            }, a = d("plugins." + i.charAt(0).toUpperCase() + i.substr(1) + "Plugin", function() {
                q.call(this, i, s),
                this._overwriteProps = r || []
            }, t.global === !0), o = a.prototype = new q(i);
            o.constructor = a,
            a.API = t.API;
            for (e in n)
                "function" == typeof t[e] && (o[n[e]] = t[e]);
            return a.version = t.version,
            q.activate([a]),
            a
        }
        ,
        i = t._gsQueue) {
            for (s = 0; i.length > s; s++)
                i[s]();
            for (r in c)
                c[r].func || t.console.log("GSAP encountered missing dependency: com.greensock." + r)
        }
        a = !1
    }
}(window);


function Winwheel(a, b) {
    defaultOptions = {
        canvasId: "canvas",
        centerX: null,
        centerY: null,
        outerRadius: null,
        innerRadius: 0,
        numSegments: 1,
        drawMode: "code",
        rotationAngle: 0,
        textFontFamily: "Arial",
        textFontSize: 20,
        textFontWeight: "bold",
        textOrientation: "horizontal",
        textAlignment: "center",
        textDirection: "normal",
        textMargin: null,
        textFillStyle: "black",
        textStrokeStyle: null,
        textLineWidth: 1,
        fillStyle: "silver",
        strokeStyle: "black",
        lineWidth: 1,
        clearTheCanvas: !0,
        imageOverlay: !1,
        drawText: !0,
        pointerAngle: 0,
        wheelImage: null,
        imageDirection: "N"
    };
    for (var c in defaultOptions)
        this[c] = null != a && "undefined" !== typeof a[c] ? a[c] : defaultOptions[c];
    if (null != a)
        for (c in a)
            "undefined" === typeof this[c] && (this[c] = a[c]);
    this.canvasId ? (this.canvas = document.getElementById(this.canvasId)) ? (null == this.centerX && (this.centerX = this.canvas.width / 2),
    null == this.centerY && (this.centerY = this.canvas.height / 2),
    null == this.outerRadius && (this.outerRadius = this.canvas.width < this.canvas.height ? this.canvas.width / 2 - this.lineWidth : this.canvas.height / 2 - this.lineWidth),
    this.ctx = this.canvas.getContext("2d")) : this.ctx = this.canvas = null : this.ctx = this.cavnas = null;
    this.segments = Array(null);
    for (x = 1; x <= this.numSegments; x++)
        this.segments[x] = null != a && a.segments && "undefined" !== typeof a.segments[x - 1] ? new Segment(a.segments[x - 1]) : new Segment;
    this.updateSegmentSizes();
    null === this.textMargin && (this.textMargin = this.textFontSize / 1.7);
    this.animation = null != a && a.animation && "undefined" !== typeof a.animation ? new Animation(a.animation) : new Animation;
    null != a && a.pins && "undefined" !== typeof a.pins && (this.pins = new Pin(a.pins));
    "image" == this.drawMode || "segmentImage" == this.drawMode ? ("undefined" === typeof a.fillStyle && (this.fillStyle = null),
    "undefined" === typeof a.strokeStyle && (this.strokeStyle = "red"),
    "undefined" === typeof a.drawText && (this.drawText = !1),
    "undefined" === typeof a.lineWidth && (this.lineWidth = 1),
    "undefined" === typeof b && (b = !1)) : "undefined" === typeof b && (b = !0);
    this.pointerGuide = null != a && a.pointerGuide && "undefined" !== typeof a.pointerGuide ? new PointerGuide(a.pointerGuide) : new PointerGuide;
    if (1 == b)
        this.draw(this.clearTheCanvas);
    else if ("segmentImage" == this.drawMode)
        for (winwheelToDrawDuringAnimation = this,
        winhweelAlreadyDrawn = !1,
        y = 1; y <= this.numSegments; y++)
            null !== this.segments[y].image && (this.segments[y].imgData = new Image,
            this.segments[y].imgData.onload = winwheelLoadedImage,
            this.segments[y].imgData.src = this.segments[y].image)
}
Winwheel.prototype.updateSegmentSizes = function() {
    if (this.segments) {
        var a = 0
          , b = 0;
        for (x = 1; x <= this.numSegments; x++)
            null !== this.segments[x].size && (a += this.segments[x].size,
            b++);
        var c = 360 - a;
        a = 0;
        0 < c && (a = c / (this.numSegments - b));
        b = 0;
        for (x = 1; x <= this.numSegments; x++)
            this.segments[x].startAngle = b,
            b = this.segments[x].size ? b + this.segments[x].size : b + a,
            this.segments[x].endAngle = b
    }
}
;
Winwheel.prototype.clearCanvas = function() {
    this.ctx && this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)
}
;
Winwheel.prototype.draw = function(a) {
    this.ctx && ("undefined" !== typeof a ? 1 == a && this.clearCanvas() : this.clearCanvas(),
    "image" == this.drawMode ? (this.drawWheelImage(),
    1 == this.drawText && this.drawSegmentText(),
    1 == this.imageOverlay && this.drawSegments()) : "segmentImage" == this.drawMode ? (this.drawSegmentImages(),
    1 == this.drawText && this.drawSegmentText(),
    1 == this.imageOverlay && this.drawSegments()) : (this.drawSegments(),
    1 == this.drawText && this.drawSegmentText()),
    "undefined" !== typeof this.pins && 1 == this.pins.visible && this.drawPins(),
    1 == this.pointerGuide.display && this.drawPointerGuide())
}
;
Winwheel.prototype.drawPins = function() {
    if (this.pins && this.pins.number) {
        var a = 360 / this.pins.number;
        for (i = 1; i <= this.pins.number; i++)
            this.ctx.save(),
            this.ctx.strokeStyle = this.pins.strokeStyle,
            this.ctx.lineWidth = this.pins.lineWidth,
            this.ctx.fillStyle = this.pins.fillStyle,
            this.ctx.translate(this.centerX, this.centerY),
            this.ctx.rotate(this.degToRad(i * a + this.rotationAngle)),
            this.ctx.translate(-this.centerX, -this.centerY),
            this.ctx.beginPath(),
            this.ctx.arc(this.centerX, this.centerY - this.outerRadius + this.pins.outerRadius + this.pins.margin, this.pins.outerRadius, 0, 2 * Math.PI),
            this.pins.fillStyle && this.ctx.fill(),
            this.pins.strokeStyle && this.ctx.stroke(),
            this.ctx.restore()
    }
}
;
Winwheel.prototype.drawPointerGuide = function() {
    this.ctx && (this.ctx.save(),
    this.ctx.translate(this.centerX, this.centerY),
    this.ctx.rotate(this.degToRad(this.pointerAngle)),
    this.ctx.translate(-this.centerX, -this.centerY),
    this.ctx.strokeStyle = this.pointerGuide.strokeStyle,
    this.ctx.lineWidth = this.pointerGuide.lineWidth,
    this.ctx.beginPath(),
    this.ctx.moveTo(this.centerX, this.centerY),
    this.ctx.lineTo(this.centerX, -(this.outerRadius / 4)),
    this.ctx.stroke(),
    this.ctx.restore())
}
;
Winwheel.prototype.drawWheelImage = function() {
    if (null != this.wheelImage) {
        var a = this.centerX - this.wheelImage.height / 2
          , b = this.centerY - this.wheelImage.width / 2;
        this.ctx.save();
        this.ctx.translate(this.centerX, this.centerY);
        this.ctx.rotate(this.degToRad(this.rotationAngle));
        this.ctx.translate(-this.centerX, -this.centerY);
        this.ctx.drawImage(this.wheelImage, a, b);
        this.ctx.restore()
    }
}
;
Winwheel.prototype.drawSegmentImages = function() {
    if (this.ctx && this.segments)
        for (x = 1; x <= this.numSegments; x++)
            if (seg = this.segments[x],
            seg.imgData.height) {
                var a = null !== seg.imageDirection ? seg.imageDirection : this.imageDirection;
                if ("S" == a) {
                    a = this.centerX - seg.imgData.width / 2;
                    var b = this.centerY;
                    var c = seg.startAngle + 180 + (seg.endAngle - seg.startAngle) / 2
                } else
                    "E" == a ? (a = this.centerX,
                    b = this.centerY - seg.imgData.height / 2,
                    c = seg.startAngle + 270 + (seg.endAngle - seg.startAngle) / 2) : "W" == a ? (a = this.centerX - seg.imgData.width,
                    b = this.centerY - seg.imgData.height / 2,
                    c = seg.startAngle + 90 + (seg.endAngle - seg.startAngle) / 2) : (a = this.centerX - seg.imgData.width / 2,
                    b = this.centerY - seg.imgData.height,
                    c = seg.startAngle + (seg.endAngle - seg.startAngle) / 2);
                this.ctx.save();
                this.ctx.translate(this.centerX, this.centerY);
                this.ctx.rotate(this.degToRad(this.rotationAngle + c));
                this.ctx.translate(-this.centerX, -this.centerY);
                this.ctx.drawImage(seg.imgData, a, b);
                this.ctx.restore()
            } else
                console.log("Segment " + x + " imgData is not loaded")
}
;
Winwheel.prototype.drawSegments = function() {
    if (this.ctx && this.segments)
        for (x = 1; x <= this.numSegments; x++) {
            seg = this.segments[x];
            var a = null !== seg.fillStyle ? seg.fillStyle : this.fillStyle;
            this.ctx.fillStyle = a;
            this.ctx.lineWidth = null !== seg.lineWidth ? seg.lineWidth : this.lineWidth;
            var b = null !== seg.strokeStyle ? seg.strokeStyle : this.strokeStyle;
            if ((this.ctx.strokeStyle = b) || a)
                this.ctx.beginPath(),
                this.innerRadius || this.ctx.moveTo(this.centerX, this.centerY),
                this.ctx.arc(this.centerX, this.centerY, this.outerRadius, this.degToRad(seg.startAngle + this.rotationAngle - 90), this.degToRad(seg.endAngle + this.rotationAngle - 90), !1),
                this.innerRadius ? this.ctx.arc(this.centerX, this.centerY, this.innerRadius, this.degToRad(seg.endAngle + this.rotationAngle - 90), this.degToRad(seg.startAngle + this.rotationAngle - 90), !0) : this.ctx.lineTo(this.centerX, this.centerY),
                a && this.ctx.fill(),
                b && this.ctx.stroke()
        }
}
;
Winwheel.prototype.drawSegmentText = function() {
    if (this.ctx)
        for (x = 1; x <= this.numSegments; x++) {
            this.ctx.save();
            seg = this.segments[x];
            if (seg.text) {
                var a = null !== seg.textFontFamily ? seg.textFontFamily : this.textFontFamily;
                var b = null !== seg.textFontSize ? seg.textFontSize : this.textFontSize;
                var c = null !== seg.textFontWeight ? seg.textFontWeight : this.textFontWeight;
                var k = null !== seg.textOrientation ? seg.textOrientation : this.textOrientation;
                var e = null !== seg.textAlignment ? seg.textAlignment : this.textAlignment;
                var q = null !== seg.textDirection ? seg.textDirection : this.textDirection;
                var f = null !== seg.textMargin ? seg.textMargin : this.textMargin;
                var l = null !== seg.textFillStyle ? seg.textFillStyle : this.textFillStyle;
                var m = null !== seg.textStrokeStyle ? seg.textStrokeStyle : this.textStrokeStyle;
                var d = null !== seg.textLineWidth ? seg.textLineWidth : this.textLineWidth;
                var g = "";
                null != c && (g += c + " ");
                null != b && (g += b + "px ");
                null != a && (g += a);
                this.ctx.font = g;
                this.ctx.fillStyle = l;
                this.ctx.strokeStyle = m;
                this.ctx.lineWidth = d;
                a = seg.text.split("\n");
                c = 0 - a.length / 2 * b + b / 2;
                "curved" != k || "inner" != e && "outer" != e || (c = 0);
                for (i = 0; i < a.length; i++) {
                    if ("reversed" == q)
                        if ("horizontal" == k)
                            this.ctx.textAlign = "inner" == e ? "right" : "outer" == e ? "left" : "center",
                            this.ctx.textBaseline = "middle",
                            d = this.degToRad(seg.endAngle - (seg.endAngle - seg.startAngle) / 2 + this.rotationAngle - 90 - 180),
                            this.ctx.save(),
                            this.ctx.translate(this.centerX, this.centerY),
                            this.ctx.rotate(d),
                            this.ctx.translate(-this.centerX, -this.centerY),
                            "inner" == e ? (l && this.ctx.fillText(a[i], this.centerX - this.innerRadius - f, this.centerY + c),
                            m && this.ctx.strokeText(a[i], this.centerX - this.innerRadius - f, this.centerY + c)) : "outer" == e ? (l && this.ctx.fillText(a[i], this.centerX - this.outerRadius + f, this.centerY + c),
                            m && this.ctx.strokeText(a[i], this.centerX - this.outerRadius + f, this.centerY + c)) : (l && this.ctx.fillText(a[i], this.centerX - this.innerRadius - (this.outerRadius - this.innerRadius) / 2 - f, this.centerY + c),
                            m && this.ctx.strokeText(a[i], this.centerX - this.innerRadius - (this.outerRadius - this.innerRadius) / 2 - f, this.centerY + c)),
                            this.ctx.restore();
                        else if ("vertical" == k) {
                            this.ctx.textAlign = "center";
                            this.ctx.textBaseline = "inner" == e ? "top" : "outer" == e ? "bottom" : "middle";
                            d = seg.endAngle - (seg.endAngle - seg.startAngle) / 2 - 180;
                            d += this.rotationAngle;
                            this.ctx.save();
                            this.ctx.translate(this.centerX, this.centerY);
                            this.ctx.rotate(this.degToRad(d));
                            this.ctx.translate(-this.centerX, -this.centerY);
                            if ("outer" == e)
                                var h = this.centerY + this.outerRadius - f;
                            else
                                "inner" == e && (h = this.centerY + this.innerRadius + f);
                            g = b - b / 9;
                            if ("outer" == e)
                                for (d = a[i].length - 1; 0 <= d; d--)
                                    character = a[i].charAt(d),
                                    l && this.ctx.fillText(character, this.centerX + c, h),
                                    m && this.ctx.strokeText(character, this.centerX + c, h),
                                    h -= g;
                            else if ("inner" == e)
                                for (d = 0; d < a[i].length; d++)
                                    character = a[i].charAt(d),
                                    l && this.ctx.fillText(character, this.centerX + c, h),
                                    m && this.ctx.strokeText(character, this.centerX + c, h),
                                    h += g;
                            else if ("center" == e)
                                for (h = 0,
                                1 < a[i].length && (h = g * (a[i].length - 1) / 2),
                                h = this.centerY + this.innerRadius + (this.outerRadius - this.innerRadius) / 2 + h + f,
                                d = a[i].length - 1; 0 <= d; d--)
                                    character = a[i].charAt(d),
                                    l && this.ctx.fillText(character, this.centerX + c, h),
                                    m && this.ctx.strokeText(character, this.centerX + c, h),
                                    h -= g;
                            this.ctx.restore()
                        } else {
                            if ("curved" == k) {
                                g = 0;
                                "inner" == e ? (g = this.innerRadius + f,
                                this.ctx.textBaseline = "top") : "outer" == e ? (g = this.outerRadius - f,
                                this.ctx.textBaseline = "bottom",
                                g -= b * (a.length - 1)) : "center" == e && (g = this.innerRadius + f + (this.outerRadius - this.innerRadius) / 2,
                                this.ctx.textBaseline = "middle");
                                var p = 0;
                                if (1 < a[i].length) {
                                    this.ctx.textAlign = "left";
                                    p = b / 10 * 4;
                                    radiusPercent = 100 / g;
                                    p *= radiusPercent;
                                    totalArc = p * a[i].length;
                                    var n = seg.startAngle + ((seg.endAngle - seg.startAngle) / 2 - totalArc / 2)
                                } else
                                    n = seg.startAngle + (seg.endAngle - seg.startAngle) / 2,
                                    this.ctx.textAlign = "center";
                                n += this.rotationAngle;
                                n -= 180;
                                for (d = a[i].length; 0 <= d; d--)
                                    this.ctx.save(),
                                    character = a[i].charAt(d),
                                    this.ctx.translate(this.centerX, this.centerY),
                                    this.ctx.rotate(this.degToRad(n)),
                                    this.ctx.translate(-this.centerX, -this.centerY),
                                    m && this.ctx.strokeText(character, this.centerX, this.centerY + g + c),
                                    l && this.ctx.fillText(character, this.centerX, this.centerY + g + c),
                                    n += p,
                                    this.ctx.restore()
                            }
                        }
                    else if ("horizontal" == k)
                        this.ctx.textAlign = "inner" == e ? "left" : "outer" == e ? "right" : "center",
                        this.ctx.textBaseline = "middle",
                        d = this.degToRad(seg.endAngle - (seg.endAngle - seg.startAngle) / 2 + this.rotationAngle - 90),
                        this.ctx.save(),
                        this.ctx.translate(this.centerX, this.centerY),
                        this.ctx.rotate(d),
                        this.ctx.translate(-this.centerX, -this.centerY),
                        "inner" == e ? (l && this.ctx.fillText(a[i], this.centerX + this.innerRadius + f, this.centerY + c),
                        m && this.ctx.strokeText(a[i], this.centerX + this.innerRadius + f, this.centerY + c)) : "outer" == e ? (l && this.ctx.fillText(a[i], this.centerX + this.outerRadius - f, this.centerY + c),
                        m && this.ctx.strokeText(a[i], this.centerX + this.outerRadius - f, this.centerY + c)) : (l && this.ctx.fillText(a[i], this.centerX + this.innerRadius + (this.outerRadius - this.innerRadius) / 2 + f, this.centerY + c),
                        m && this.ctx.strokeText(a[i], this.centerX + this.innerRadius + (this.outerRadius - this.innerRadius) / 2 + f, this.centerY + c)),
                        this.ctx.restore();
                    else if ("vertical" == k) {
                        this.ctx.textAlign = "center";
                        this.ctx.textBaseline = "inner" == e ? "bottom" : "outer" == e ? "top" : "middle";
                        d = seg.endAngle - (seg.endAngle - seg.startAngle) / 2;
                        d += this.rotationAngle;
                        this.ctx.save();
                        this.ctx.translate(this.centerX, this.centerY);
                        this.ctx.rotate(this.degToRad(d));
                        this.ctx.translate(-this.centerX, -this.centerY);
                        "outer" == e ? h = this.centerY - this.outerRadius + f : "inner" == e && (h = this.centerY - this.innerRadius - f);
                        g = b - b / 9;
                        if ("outer" == e)
                            for (d = 0; d < a[i].length; d++)
                                character = a[i].charAt(d),
                                l && this.ctx.fillText(character, this.centerX + c, h),
                                m && this.ctx.strokeText(character, this.centerX + c, h),
                                h += g;
                        else if ("inner" == e)
                            for (d = a[i].length - 1; 0 <= d; d--)
                                character = a[i].charAt(d),
                                l && this.ctx.fillText(character, this.centerX + c, h),
                                m && this.ctx.strokeText(character, this.centerX + c, h),
                                h -= g;
                        else if ("center" == e)
                            for (h = 0,
                            1 < a[i].length && (h = g * (a[i].length - 1) / 2),
                            h = this.centerY - this.innerRadius - (this.outerRadius - this.innerRadius) / 2 - h - f,
                            d = 0; d < a[i].length; d++)
                                character = a[i].charAt(d),
                                l && this.ctx.fillText(character, this.centerX + c, h),
                                m && this.ctx.strokeText(character, this.centerX + c, h),
                                h += g;
                        this.ctx.restore()
                    } else if ("curved" == k)
                        for (g = 0,
                        "inner" == e ? (g = this.innerRadius + f,
                        this.ctx.textBaseline = "bottom",
                        g += b * (a.length - 1)) : "outer" == e ? (g = this.outerRadius - f,
                        this.ctx.textBaseline = "top") : "center" == e && (g = this.innerRadius + f + (this.outerRadius - this.innerRadius) / 2,
                        this.ctx.textBaseline = "middle"),
                        p = 0,
                        1 < a[i].length ? (this.ctx.textAlign = "left",
                        p = b / 10 * 4,
                        radiusPercent = 100 / g,
                        p *= radiusPercent,
                        totalArc = p * a[i].length,
                        n = seg.startAngle + ((seg.endAngle - seg.startAngle) / 2 - totalArc / 2)) : (n = seg.startAngle + (seg.endAngle - seg.startAngle) / 2,
                        this.ctx.textAlign = "center"),
                        n += this.rotationAngle,
                        d = 0; d < a[i].length; d++)
                            this.ctx.save(),
                            character = a[i].charAt(d),
                            this.ctx.translate(this.centerX, this.centerY),
                            this.ctx.rotate(this.degToRad(n)),
                            this.ctx.translate(-this.centerX, -this.centerY),
                            m && this.ctx.strokeText(character, this.centerX, this.centerY - g + c),
                            l && this.ctx.fillText(character, this.centerX, this.centerY - g + c),
                            n += p,
                            this.ctx.restore();
                    c += b
                }
            }
            this.ctx.restore()
        }
}
;
Winwheel.prototype.degToRad = function(a) {
    return .017453292519943295 * a
}
;
Winwheel.prototype.setCenter = function(a, b) {
    this.centerX = a;
    this.centerY = b
}
;
Winwheel.prototype.addSegment = function(a, b) {
    newSegment = new Segment(a);
    this.numSegments++;
    var c;
    if ("undefined" !== typeof b) {
        for (c = this.numSegments; c > b; c--)
            this.segments[c] = this.segments[c - 1];
        this.segments[b] = newSegment;
        c = b
    } else
        this.segments[this.numSegments] = newSegment,
        c = this.numSegments;
    this.updateSegmentSizes();
    return this.segments[c]
}
;
Winwheel.prototype.setCanvasId = function(a) {
    if (a) {
        if (this.canvasId = a,
        this.canvas = document.getElementById(this.canvasId))
            this.ctx = this.canvas.getContext("2d")
    } else
        this.canvas = this.ctx = this.canvasId = null
}
;
Winwheel.prototype.deleteSegment = function(a) {
    if (1 < this.numSegments) {
        if ("undefined" !== typeof a)
            for (; a < this.numSegments; a++)
                this.segments[a] = this.segments[a + 1];
        this.segments[this.numSegments] = void 0;
        this.numSegments--;
        this.updateSegmentSizes()
    }
}
;
Winwheel.prototype.windowToCanvas = function(a, b) {
    var c = this.canvas.getBoundingClientRect();
    return {
        x: Math.floor(a - this.canvas.width / c.width * c.left),
        y: Math.floor(b - this.canvas.height / c.height * c.top)
    }
}
;
Winwheel.prototype.getSegmentAt = function(a, b) {
    var c = null
      , k = this.getSegmentNumberAt(a, b);
    null !== k && (c = this.segments[k]);
    return c
}
;
Winwheel.prototype.getSegmentNumberAt = function(a, b) {
    var c = this.windowToCanvas(a, b);
    if (c.x > this.centerX) {
        var k = c.x - this.centerX;
        var e = "R"
    } else
        k = this.centerX - c.x,
        e = "L";
    if (c.y > this.centerY) {
        var q = c.y - this.centerY;
        var f = "B"
    } else
        q = this.centerY - c.y,
        f = "T";
    var l = 180 * Math.atan(q / k) / Math.PI;
    c = 0;
    k = Math.sqrt(q * q + k * k);
    "T" == f && "R" == e ? c = Math.round(90 - l) : "B" == f && "R" == e ? c = Math.round(l + 90) : "B" == f && "L" == e ? c = Math.round(90 - l + 180) : "T" == f && "L" == e && (c = Math.round(l + 270));
    0 != this.rotationAngle && (e = this.getRotationPosition(),
    c -= e,
    0 > c && (c = 360 - Math.abs(c)));
    e = null;
    for (a = 1; a <= this.numSegments; a++)
        if (c >= this.segments[a].startAngle && c <= this.segments[a].endAngle && k >= this.innerRadius && k <= this.outerRadius) {
            e = a;
            break
        }
    return e
}
;
Winwheel.prototype.getIndicatedSegment = function() {
    var a = this.getIndicatedSegmentNumber();
    return this.segments[a]
}
;
Winwheel.prototype.getIndicatedSegmentNumber = function() {
    var a = 0
      , b = this.getRotationPosition();
    b = Math.floor(this.pointerAngle - b);
    0 > b && (b = 360 - Math.abs(b));
    for (x = 1; x < this.segments.length; x++)
        if (b >= this.segments[x].startAngle && b <= this.segments[x].endAngle) {
            a = x;
            break
        }
    return a
}
;
Winwheel.prototype.getCurrentPinNumber = function() {
    var a = 0;
    if (this.pins) {
        var b = this.getRotationPosition();
        b = Math.floor(this.pointerAngle - b);
        0 > b && (b = 360 - Math.abs(b));
        var c = 360 / this.pins.number
          , k = 0;
        for (x = 0; x < this.pins.number; x++) {
            if (b >= k && b <= k + c) {
                a = x;
                break
            }
            k += c
        }
        "clockwise" == this.animation.direction && (a++,
        a > this.pins.number && (a = 0))
    }
    return a
}
;
Winwheel.prototype.getRotationPosition = function() {
    var a = this.rotationAngle;
    if (0 <= a) {
        if (360 < a) {
            var b = Math.floor(a / 360);
            a -= 360 * b
        }
    } else
        -360 > a && (b = Math.ceil(a / 360),
        a -= 360 * b),
        a = 360 + a;
    return a
}
;
Winwheel.prototype.startAnimation = function() {
    if (this.animation) {
        this.computeAnimation();
        winwheelToDrawDuringAnimation = this;
        var a = Array(null);
        a[this.animation.propertyName] = this.animation.propertyValue;
        a.yoyo = this.animation.yoyo;
        a.repeat = this.animation.repeat;
        a.ease = this.animation.easing;
        a.onUpdate = winwheelAnimationLoop;
        a.onComplete = winwheelStopAnimation;
        this.tween = TweenMax.to(this, this.animation.duration, a)
    }
}
;
Winwheel.prototype.stopAnimation = function(a) {
    winwheelToDrawDuringAnimation && (winwheelToDrawDuringAnimation.tween.kill(),
    winwheelStopAnimation(a));
    winwheelToDrawDuringAnimation = this
}
;
Winwheel.prototype.pauseAnimation = function() {
    this.tween && this.tween.pause()
}
;
Winwheel.prototype.resumeAnimation = function() {
    this.tween && this.tween.play()
}
;
Winwheel.prototype.computeAnimation = function() {
    this.animation && ("spinOngoing" == this.animation.type ? (this.animation.propertyName = "rotationAngle",
    null == this.animation.spins && (this.animation.spins = 5),
    null == this.animation.repeat && (this.animation.repeat = -1),
    null == this.animation.easing && (this.animation.easing = "Linear.easeNone"),
    null == this.animation.yoyo && (this.animation.yoyo = !1),
    this.animation.propertyValue = 360 * this.animation.spins,
    "anti-clockwise" == this.animation.direction && (this.animation.propertyValue = 0 - this.animation.propertyValue)) : "spinToStop" == this.animation.type ? (this.animation.propertyName = "rotationAngle",
    null == this.animation.spins && (this.animation.spins = 5),
    null == this.animation.repeat && (this.animation.repeat = 0),
    null == this.animation.easing && (this.animation.easing = "Power3.easeOut"),
    this.animation._stopAngle = null == this.animation.stopAngle ? Math.floor(359 * Math.random()) : 360 - this.animation.stopAngle + this.pointerAngle,
    null == this.animation.yoyo && (this.animation.yoyo = !1),
    this.animation.propertyValue = 360 * this.animation.spins,
    "anti-clockwise" == this.animation.direction ? (this.animation.propertyValue = 0 - this.animation.propertyValue,
    this.animation.propertyValue -= 360 - this.animation._stopAngle) : this.animation.propertyValue += this.animation._stopAngle) : "spinAndBack" == this.animation.type && (this.animation.propertyName = "rotationAngle",
    null == this.animation.spins && (this.animation.spins = 5),
    null == this.animation.repeat && (this.animation.repeat = 1),
    null == this.animation.easing && (this.animation.easing = "Power2.easeInOut"),
    null == this.animation.yoyo && (this.animation.yoyo = !0),
    this.animation._stopAngle = null == this.animation.stopAngle ? 0 : 360 - this.animation.stopAngle,
    this.animation.propertyValue = 360 * this.animation.spins,
    "anti-clockwise" == this.animation.direction ? (this.animation.propertyValue = 0 - this.animation.propertyValue,
    this.animation.propertyValue -= 360 - this.animation._stopAngle) : this.animation.propertyValue += this.animation._stopAngle))
}
;
Winwheel.prototype.getRandomForSegment = function(a) {
    var b = 0;
    if (a)
        if ("undefined" !== typeof this.segments[a]) {
            var c = this.segments[a].startAngle;
            a = this.segments[a].endAngle - c - 2;
            0 < a ? b = c + 1 + Math.floor(Math.random() * a) : console.log("Segment size is too small to safely get random angle inside it")
        } else
            console.log("Segment " + a + " undefined");
    else
        console.log("Segment number not specified");
    return b
}
;
function Pin(a) {
    defaultOptions = {
        visible: !0,
        number: 36,
        outerRadius: 3,
        fillStyle: "grey",
        strokeStyle: "black",
        lineWidth: 1,
        margin: 3
    };
    for (var b in defaultOptions)
        this[b] = null != a && "undefined" !== typeof a[b] ? a[b] : defaultOptions[b];
    if (null != a)
        for (b in a)
            "undefined" === typeof this[b] && (this[b] = a[b])
}
function Animation(a) {
    defaultOptions = {
        type: "spinOngoing",
        direction: "clockwise",
        propertyName: null,
        propertyValue: null,
        duration: 10,
        yoyo: !1,
        repeat: null,
        easing: null,
        stopAngle: null,
        spins: null,
        clearTheCanvas: null,
        callbackFinished: null,
        callbackBefore: null,
        callbackAfter: null,
        callbackSound: null,
        soundTrigger: "segment"
    };
    for (var b in defaultOptions)
        this[b] = null != a && "undefined" !== typeof a[b] ? a[b] : defaultOptions[b];
    if (null != a)
        for (b in a)
            "undefined" === typeof this[b] && (this[b] = a[b])
}
function Segment(a) {
    defaultOptions = {
        size: null,
        text: "",
        fillStyle: null,
        strokeStyle: null,
        lineWidth: null,
        textFontFamily: null,
        textFontSize: null,
        textFontWeight: null,
        textOrientation: null,
        textAlignment: null,
        textDirection: null,
        textMargin: null,
        textFillStyle: null,
        textStrokeStyle: null,
        textLineWidth: null,
        image: null,
        imageDirection: null,
        imgData: null
    };
    for (var b in defaultOptions)
        this[b] = null != a && "undefined" !== typeof a[b] ? a[b] : defaultOptions[b];
    if (null != a)
        for (b in a)
            "undefined" === typeof this[b] && (this[b] = a[b]);
    this.endAngle = this.startAngle = 0
}
Segment.prototype.changeImage = function(a, b) {
    this.image = a;
    this.imgData = null;
    b && (this.imageDirection = b);
    winhweelAlreadyDrawn = !1;
    this.imgData = new Image;
    this.imgData.onload = winwheelLoadedImage;
    this.imgData.src = this.image
}
;
function PointerGuide(a) {
    defaultOptions = {
        display: !1,
        strokeStyle: "red",
        lineWidth: 3
    };
    for (var b in defaultOptions)
        this[b] = null != a && "undefined" !== typeof a[b] ? a[b] : defaultOptions[b]
}
function winwheelPercentToDegrees(a) {
    var b = 0;
    0 < a && 100 >= a && (b = a / 100 * 360);
    return b
}
function winwheelAnimationLoop() {
    if (winwheelToDrawDuringAnimation) {
        0 != winwheelToDrawDuringAnimation.animation.clearTheCanvas && winwheelToDrawDuringAnimation.ctx.clearRect(0, 0, winwheelToDrawDuringAnimation.canvas.width, winwheelToDrawDuringAnimation.canvas.height);
        var a = winwheelToDrawDuringAnimation.animation.callbackBefore
          , b = winwheelToDrawDuringAnimation.animation.callbackAfter;
        null != a && ("function" === typeof a ? a() : eval(a));
        winwheelToDrawDuringAnimation.draw(!1);
        null != b && ("function" === typeof b ? b() : eval(b));
        winwheelToDrawDuringAnimation.animation.callbackSound && winwheelTriggerSound()
    }
}
function winwheelTriggerSound() {
    0 == winwheelToDrawDuringAnimation.hasOwnProperty("_lastSoundTriggerNumber") && (winwheelToDrawDuringAnimation._lastSoundTriggerNumber = 0);
    var a = winwheelToDrawDuringAnimation.animation.callbackSound;
    var b = "pin" == winwheelToDrawDuringAnimation.animation.soundTrigger ? winwheelToDrawDuringAnimation.getCurrentPinNumber() : winwheelToDrawDuringAnimation.getIndicatedSegmentNumber();
    b != winwheelToDrawDuringAnimation._lastSoundTriggerNumber && ("function" === typeof a ? a() : eval(a),
    winwheelToDrawDuringAnimation._lastSoundTriggerNumber = b)
}
var winwheelToDrawDuringAnimation = null;
function winwheelStopAnimation(a) {
    0 != a && (a = winwheelToDrawDuringAnimation.animation.callbackFinished,
    null != a && ("function" === typeof a ? a(winwheelToDrawDuringAnimation.getIndicatedSegment()) : eval(a)))
}
var winhweelAlreadyDrawn = !1;
function winwheelLoadedImage() {
    if (0 == winhweelAlreadyDrawn) {
        var a = 0;
        for (i = 1; i <= winwheelToDrawDuringAnimation.numSegments; i++)
            null != winwheelToDrawDuringAnimation.segments[i].imgData && winwheelToDrawDuringAnimation.segments[i].imgData.height && a++;
        a == winwheelToDrawDuringAnimation.numSegments && (winhweelAlreadyDrawn = !0,
        winwheelToDrawDuringAnimation.draw())
    }
}
;


        // Create new wheel object specifying the parameters at creation time.
        var theWheel = new Winwheel({
            'outerRadius'     : 150,        // Set outer radius so wheel fits inside the background.
            'innerRadius'     : 30,         // Make wheel hollow so segments don't go all way to center.
            'textFontSize'    : 17,         // Set default font size for the segments.
            'textOrientation' : 'horizontal', // Make text vertial so goes down from the outside of wheel.
            'textAlignment'   : 'outer',    // Align text to outside of wheel.
            'numSegments'     : 18,         // Specify number of segments.
            'segments'        :             // Define segments including colour and text.
            [                               // font size and test colour overridden on backrupt segments.
               {'fillStyle' : '#ee1c24', 'text' : 'InfluxData'},
               {'fillStyle' : '#3cb878', 'text' : 'DataDog'},
               {'fillStyle' : '#f6989d', 'text' : 'InfluxData'},
               {'fillStyle' : '#00aef0', 'text' : 'DataDog'},
               {'fillStyle' : '#f26522', 'text' : 'InfluxData'},
               {'fillStyle' : '#fff200', 'text' : 'DataDog'},
               {'fillStyle' : '#f6989d', 'text' : 'InfluxData'},
               {'fillStyle' : '#ee1c24', 'text' : 'DataDog'},
               {'fillStyle' : '#3cb878', 'text' : 'InfluxData'},
               {'fillStyle' : '#f26522', 'text' : 'DataDog'},
               {'fillStyle' : '#a186be', 'text' : 'InfluxData'},
               {'fillStyle' : '#fff200', 'text' : 'DataDog'},
               {'fillStyle' : '#00aef0', 'text' : 'InfluxData'},
               {'fillStyle' : '#ee1c24', 'text' : 'DataDog'},
               {'fillStyle' : '#f6989d', 'text' : 'InfluxData'},
               {'fillStyle' : '#f26522', 'text' : 'DataDog'},
               {'fillStyle' : '#3cb878', 'text' : 'InfluxData'},
               {'fillStyle' : '#fff200', 'text' : 'DataDog'},
            ],
            'animation' :           // Specify the animation to use.
            {
                'type'     : 'spinToStop',
                'duration' : 8,     // Duration in seconds.
                'spins'    : 3,     // Default number of complete spins.
                'callbackFinished' : alertPrize
            }
        });

        // Vars used by the code in this page to do power controls.
        var wheelPower    = 1;
        var wheelSpinning = false;

        // -------------------------------------------------------
        // Function to handle the onClick on the power buttons.
        // -------------------------------------------------------
        function powerSelected(powerLevel)
        {
            // Ensure that power can't be changed while wheel is spinning.
            if (wheelSpinning == false)
            {
                // Reset all to grey incase this is not the first time the user has selected the power.
                document.getElementById('pw1').className = "";
                document.getElementById('pw2').className = "";
                document.getElementById('pw3').className = "";

                // Now light up all cells below-and-including the one selected by changing the class.
                if (powerLevel >= 1)
                {
                    document.getElementById('pw1').className = "pw1";
                }

                if (powerLevel >= 2)
                {
                    document.getElementById('pw2').className = "pw2";
                }

                if (powerLevel >= 3)
                {
                    document.getElementById('pw3').className = "pw3";
                }

                // Set wheelPower var used when spin button is clicked.
                wheelPower = powerLevel;
            }
        }

        // -------------------------------------------------------
        // Click handler for spin button.
        // -------------------------------------------------------
        function startSpin()
        {
            // Ensure that spinning can't be clicked again while already running.
            if (wheelSpinning == false)
            {
                // Based on the power level selected adjust the number of spins for the wheel, the more times is has
                // to rotate with the duration of the animation the quicker the wheel spins.
                if (wheelPower == 1)
                {
                    theWheel.animation.spins = 3;
                }
                else if (wheelPower == 2)
                {
                    theWheel.animation.spins = 8;
                }
                else if (wheelPower == 3)
                {
                    theWheel.animation.spins = 15;
                }

                // Begin the spin animation by calling startAnimation on the wheel object.
                theWheel.startAnimation();

                // Set to true so that power can't be changed and spin button re-enabled during
                // the current animation. The user will have to reset before spinning again.
                wheelSpinning = true;
            }
        }

        // -------------------------------------------------------
        // Function for reset button.
        // -------------------------------------------------------
        function resetWheel()
        {
            theWheel.stopAnimation(false);  // Stop the animation, false as param so does not call callback function.
            theWheel.rotationAngle = 0;     // Re-set the wheel angle to 0 degrees.
            theWheel.draw();                // Call draw to render changes to the wheel.

            document.getElementById('pw1').className = "";  // Remove all colours from the power level indicators.
            document.getElementById('pw2').className = "";
            document.getElementById('pw3').className = "";

            wheelSpinning = false;          // Reset to false to power buttons and spin can be clicked again.
        }

        // -------------------------------------------------------
        // Called when the spin animation has finished by the callback feature of the wheel because I specified callback in the parameters.
        // -------------------------------------------------------
        function alertPrize(indicatedSegment)
        {
            // Just alert to the user what happened.
            // In a real project probably want to do something more interesting than this with the result.
            if (indicatedSegment.text == 'LOOSE TURN')
            {
                alert('Sorry but you loose a turn.');
            }
            else if (indicatedSegment.text == 'BANKRUPT')
            {
                alert('Oh no, you have gone BANKRUPT!');
            }
            else
            {
                alert("You have won " + indicatedSegment.text);
            }
          resetWheel()
        }

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.