diff --git a/README.md b/README.md
index 9b3cddc6..966de0ad 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
The AltspaceVR SDK can be used together with [three.js] to create holographic, multi-user web apps for virtual reality. When running inside [AltspaceVR](http://altvr.com/) they can be experienced with consumer VR hardware including the Oculus Rift DK2.
-**Latest Version: v0.9.1 -- [See Changes](https://github.com/AltspaceVR/AltspaceSDK/releases/tag/v0.9.1)**
+**Latest Version: v0.10.0 -- [See Changes](https://github.com/AltspaceVR/AltspaceSDK/releases/tag/v0.10.0)**
0;)u in n?n[s]=n[u]:delete n[s],s+=h,u+=h;return n}},{"./$.to-index":144,"./$.to-length":147,"./$.to-object":148}],74:[function(t,e,n){"use strict";var r=t("./$.to-object"),o=t("./$.to-index"),i=t("./$.to-length");e.exports=[].fill||function(t){for(var e=r(this),n=i(e.length),a=arguments,s=a.length,u=o(s>1?a[1]:void 0,n),c=s>2?a[2]:void 0,l=void 0===c?n:o(c,n);l>u;)e[u++]=t;return e}},{"./$.to-index":144,"./$.to-length":147,"./$.to-object":148}],75:[function(t,e,n){var r=t("./$.to-iobject"),o=t("./$.to-length"),i=t("./$.to-index");e.exports=function(t){return function(e,n,a){var s,u=r(e),c=o(u.length),l=i(a,c);if(t&&n!=n){for(;c>l;)if(s=u[l++],s!=s)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l;return!t&&-1}}},{"./$.to-index":144,"./$.to-iobject":146,"./$.to-length":147}],76:[function(t,e,n){var r=t("./$.ctx"),o=t("./$.iobject"),i=t("./$.to-object"),a=t("./$.to-length"),s=t("./$.array-species-create");e.exports=function(t){var e=1==t,n=2==t,u=3==t,c=4==t,l=6==t,f=5==t||l;return function(h,p,d){for(var g,v,b=i(h),m=o(b),y=r(p,d,3),w=a(m.length),$=0,x=e?s(h,w):n?s(h,0):void 0;w>$;$++)if((f||$ in m)&&(g=m[$],v=y(g,$,b),t))if(e)x[$]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return $;case 2:x.push(g)}else if(c)return!1;return l?-1:u||c?c:x}}},{"./$.array-species-create":77,"./$.ctx":85,"./$.iobject":102,"./$.to-length":147,"./$.to-object":148}],77:[function(t,e,n){var r=t("./$.is-object"),o=t("./$.is-array"),i=t("./$.wks")("species");e.exports=function(t,e){var n;return o(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{"./$.is-array":104,"./$.is-object":106,"./$.wks":151}],78:[function(t,e,n){arguments[4][17][0].apply(n,arguments)},{"./$.cof":79,"./$.wks":151,dup:17}],79:[function(t,e,n){arguments[4][18][0].apply(n,arguments)},{dup:18}],80:[function(t,e,n){arguments[4][19][0].apply(n,arguments)},{"./$":114,"./$.ctx":85,"./$.defined":86,"./$.descriptors":87,"./$.for-of":95,"./$.has":98,"./$.hide":99,"./$.is-object":106,"./$.iter-define":110,"./$.iter-step":112,"./$.redefine-all":128,"./$.set-species":133,"./$.strict-new":137,"./$.uid":150,dup:19}],81:[function(t,e,n){arguments[4][20][0].apply(n,arguments)},{"./$.classof":78,"./$.for-of":95,dup:20}],82:[function(t,e,n){"use strict";var r=t("./$.hide"),o=t("./$.redefine-all"),i=t("./$.an-object"),a=t("./$.is-object"),s=t("./$.strict-new"),u=t("./$.for-of"),c=t("./$.array-methods"),l=t("./$.has"),f=t("./$.uid")("weak"),h=Object.isExtensible||a,p=c(5),d=c(6),g=0,v=function(t){return t._l||(t._l=new b)},b=function(){this.a=[]},m=function(t,e){return p(t.a,function(t){return t[0]===e})};b.prototype={get:function(t){var e=m(this,t);return e?e[1]:void 0},has:function(t){return!!m(this,t)},set:function(t,e){var n=m(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=d(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,r){var i=t(function(t,o){s(t,i,e),t._i=g++,t._l=void 0,void 0!=o&&u(o,n,t[r],t)});return o(i.prototype,{"delete":function(t){return a(t)?h(t)?l(t,f)&&l(t[f],this._i)&&delete t[f][this._i]:v(this)["delete"](t):!1},has:function(t){return a(t)?h(t)?l(t,f)&&l(t[f],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return h(i(e))?(l(e,f)||r(e,f,{}),e[f][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:f}},{"./$.an-object":72,"./$.array-methods":76,"./$.for-of":95,"./$.has":98,"./$.hide":99,"./$.is-object":106,"./$.redefine-all":128,"./$.strict-new":137,"./$.uid":150}],83:[function(t,e,n){"use strict";var r=t("./$.global"),o=t("./$.export"),i=t("./$.redefine"),a=t("./$.redefine-all"),s=t("./$.for-of"),u=t("./$.strict-new"),c=t("./$.is-object"),l=t("./$.fails"),f=t("./$.iter-detect"),h=t("./$.set-to-string-tag");e.exports=function(t,e,n,p,d,g){var v=r[t],b=v,m=d?"set":"add",y=b&&b.prototype,w={},$=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return g&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return g&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof b&&(g||y.forEach&&!l(function(){(new b).entries().next()}))){var x,E=new b,j=E[m](g?{}:-0,1)!=E,k=l(function(){E.has(1)}),F=f(function(t){new b(t)});F||(b=e(function(e,n){u(e,b,t);var r=new v;return void 0!=n&&s(n,d,r[m],r),r}),b.prototype=y,y.constructor=b),g||E.forEach(function(t,e){x=1/e===-(1/0)}),(k||x)&&($("delete"),$("has"),d&&$("get")),(x||j)&&$(m),g&&y.clear&&delete y.clear}else b=p.getConstructor(e,t,d,m),a(b.prototype,n);return h(b,t),w[t]=b,o(o.G+o.W+o.F*(b!=v),w),g||p.setStrong(b,t,d),b}},{"./$.export":90,"./$.fails":92,"./$.for-of":95,"./$.global":97,"./$.is-object":106,"./$.iter-detect":111,"./$.redefine":129,"./$.redefine-all":128,"./$.set-to-string-tag":134,"./$.strict-new":137}],84:[function(t,e,n){arguments[4][22][0].apply(n,arguments)},{dup:22}],85:[function(t,e,n){arguments[4][23][0].apply(n,arguments)},{"./$.a-function":70,dup:23}],86:[function(t,e,n){arguments[4][24][0].apply(n,arguments)},{dup:24}],87:[function(t,e,n){arguments[4][25][0].apply(n,arguments)},{"./$.fails":92,dup:25}],88:[function(t,e,n){var r=t("./$.is-object"),o=t("./$.global").document,i=r(o)&&r(o.createElement);e.exports=function(t){return i?o.createElement(t):{}}},{"./$.global":97,"./$.is-object":106}],89:[function(t,e,n){arguments[4][26][0].apply(n,arguments)},{"./$":114,dup:26}],90:[function(t,e,n){var r=t("./$.global"),o=t("./$.core"),i=t("./$.hide"),a=t("./$.redefine"),s=t("./$.ctx"),u="prototype",c=function(t,e,n){var l,f,h,p,d=t&c.F,g=t&c.G,v=t&c.S,b=t&c.P,m=t&c.B,y=g?r:v?r[e]||(r[e]={}):(r[e]||{})[u],w=g?o:o[e]||(o[e]={}),$=w[u]||(w[u]={});g&&(n=e);for(l in n)f=!d&&y&&l in y,h=(f?y:n)[l],p=m&&f?s(h,r):b&&"function"==typeof h?s(Function.call,h):h,y&&!f&&a(y,l,h),w[l]!=h&&i(w,l,p),b&&$[l]!=h&&($[l]=h)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},{"./$.core":84,"./$.ctx":85,"./$.global":97,"./$.hide":99,"./$.redefine":129}],91:[function(t,e,n){var r=t("./$.wks")("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(o){}}return!0}},{"./$.wks":151}],92:[function(t,e,n){arguments[4][28][0].apply(n,arguments)},{dup:28}],93:[function(t,e,n){"use strict";var r=t("./$.hide"),o=t("./$.redefine"),i=t("./$.fails"),a=t("./$.defined"),s=t("./$.wks");e.exports=function(t,e,n){var u=s(t),c=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(o(String.prototype,t,n(a,u,c)),r(RegExp.prototype,u,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},{"./$.defined":86,"./$.fails":92,"./$.hide":99,"./$.redefine":129,"./$.wks":151}],94:[function(t,e,n){"use strict";var r=t("./$.an-object");e.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{"./$.an-object":72}],95:[function(t,e,n){arguments[4][29][0].apply(n,arguments)},{"./$.an-object":72,"./$.ctx":85,"./$.is-array-iter":103,"./$.iter-call":108,"./$.to-length":147,"./core.get-iterator-method":152,dup:29}],96:[function(t,e,n){arguments[4][30][0].apply(n,arguments)},{"./$":114,"./$.to-iobject":146,dup:30}],97:[function(t,e,n){arguments[4][31][0].apply(n,arguments)},{dup:31}],98:[function(t,e,n){arguments[4][32][0].apply(n,arguments)},{dup:32}],99:[function(t,e,n){arguments[4][33][0].apply(n,arguments)},{"./$":114,"./$.descriptors":87,"./$.property-desc":127,dup:33}],100:[function(t,e,n){e.exports=t("./$.global").document&&document.documentElement},{"./$.global":97}],101:[function(t,e,n){e.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],102:[function(t,e,n){arguments[4][34][0].apply(n,arguments)},{"./$.cof":79,dup:34}],103:[function(t,e,n){arguments[4][35][0].apply(n,arguments)},{"./$.iterators":113,"./$.wks":151,dup:35}],104:[function(t,e,n){arguments[4][36][0].apply(n,arguments)},{"./$.cof":79,dup:36}],105:[function(t,e,n){var r=t("./$.is-object"),o=Math.floor;e.exports=function(t){return!r(t)&&isFinite(t)&&o(t)===t}},{"./$.is-object":106}],106:[function(t,e,n){arguments[4][37][0].apply(n,arguments)},{dup:37}],107:[function(t,e,n){var r=t("./$.is-object"),o=t("./$.cof"),i=t("./$.wks")("match");e.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},{"./$.cof":79,"./$.is-object":106,"./$.wks":151}],108:[function(t,e,n){arguments[4][38][0].apply(n,arguments)},{"./$.an-object":72,dup:38}],109:[function(t,e,n){arguments[4][39][0].apply(n,arguments)},{"./$":114,"./$.hide":99,"./$.property-desc":127,"./$.set-to-string-tag":134,"./$.wks":151,dup:39}],110:[function(t,e,n){arguments[4][40][0].apply(n,arguments)},{"./$":114,"./$.export":90,"./$.has":98,"./$.hide":99,"./$.iter-create":109,"./$.iterators":113,"./$.library":116,"./$.redefine":129,"./$.set-to-string-tag":134,"./$.wks":151,dup:40}],111:[function(t,e,n){arguments[4][41][0].apply(n,arguments)},{"./$.wks":151,dup:41}],112:[function(t,e,n){arguments[4][42][0].apply(n,arguments)},{dup:42}],113:[function(t,e,n){arguments[4][43][0].apply(n,arguments)},{dup:43}],114:[function(t,e,n){arguments[4][44][0].apply(n,arguments)},{dup:44}],115:[function(t,e,n){arguments[4][45][0].apply(n,arguments)},{"./$":114,"./$.to-iobject":146,dup:45}],116:[function(t,e,n){e.exports=!1},{}],117:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],118:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],119:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],120:[function(t,e,n){var r,o,i,a=t("./$.global"),s=t("./$.task").set,u=a.MutationObserver||a.WebKitMutationObserver,c=a.process,l=a.Promise,f="process"==t("./$.cof")(c),h=function(){var t,e,n;for(f&&(t=c.domain)&&(c.domain=null,t.exit());r;)e=r.domain,n=r.fn,e&&e.enter(),n(),e&&e.exit(),r=r.next;o=void 0,t&&t.enter()};if(f)i=function(){c.nextTick(h)};else if(u){var p=1,d=document.createTextNode("");new u(h).observe(d,{characterData:!0}),i=function(){d.data=p=-p}}else i=l&&l.resolve?function(){l.resolve().then(h)}:function(){s.call(a,h)};e.exports=function(t){var e={fn:t,next:void 0,domain:f&&c.domain};o&&(o.next=e),r||(r=e,i()),o=e}},{"./$.cof":79,"./$.global":97,"./$.task":143}],121:[function(t,e,n){var r=t("./$"),o=t("./$.to-object"),i=t("./$.iobject");e.exports=t("./$.fails")(function(){var t=Object.assign,e={},n={},r=Symbol(),o="abcdefghijklmnopqrst";return e[r]=7,o.split("").forEach(function(t){n[t]=t}),7!=t({},e)[r]||Object.keys(t({},n)).join("")!=o})?function(t,e){for(var n=o(t),a=arguments,s=a.length,u=1,c=r.getKeys,l=r.getSymbols,f=r.isEnum;s>u;)for(var h,p=i(a[u++]),d=l?c(p).concat(l(p)):c(p),g=d.length,v=0;g>v;)f.call(p,h=d[v++])&&(n[h]=p[h]);return n}:Object.assign},{"./$":114,"./$.fails":92,"./$.iobject":102,"./$.to-object":148}],122:[function(t,e,n){var r=t("./$.export"),o=t("./$.core"),i=t("./$.fails");e.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*i(function(){n(1)}),"Object",a)}},{"./$.core":84,"./$.export":90,"./$.fails":92}],123:[function(t,e,n){var r=t("./$"),o=t("./$.to-iobject"),i=r.isEnum;e.exports=function(t){return function(e){for(var n,a=o(e),s=r.getKeys(a),u=s.length,c=0,l=[];u>c;)i.call(a,n=s[c++])&&l.push(t?[n,a[n]]:a[n]);return l}}},{"./$":114,"./$.to-iobject":146}],124:[function(t,e,n){var r=t("./$"),o=t("./$.an-object"),i=t("./$.global").Reflect;e.exports=i&&i.ownKeys||function(t){var e=r.getNames(o(t)),n=r.getSymbols;return n?e.concat(n(t)):e}},{"./$":114,"./$.an-object":72,"./$.global":97}],125:[function(t,e,n){"use strict";var r=t("./$.path"),o=t("./$.invoke"),i=t("./$.a-function");e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),a=0,s=r._,u=!1;e>a;)(n[a]=arguments[a++])===s&&(u=!0);return function(){var r,i=this,a=arguments,c=a.length,l=0,f=0;if(!u&&!c)return o(t,n,i);if(r=n.slice(),u)for(;e>l;l++)r[l]===s&&(r[l]=a[f++]);for(;c>f;)r.push(a[f++]);return o(t,r,i)}}},{"./$.a-function":70,"./$.invoke":101,"./$.path":126}],126:[function(t,e,n){e.exports=t("./$.global")},{"./$.global":97}],127:[function(t,e,n){arguments[4][47][0].apply(n,arguments)},{dup:47}],128:[function(t,e,n){arguments[4][48][0].apply(n,arguments)},{"./$.redefine":129,dup:48}],129:[function(t,e,n){var r=t("./$.global"),o=t("./$.hide"),i=t("./$.uid")("src"),a="toString",s=Function[a],u=(""+s).split(a);t("./$.core").inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,a){"function"==typeof n&&(n.hasOwnProperty(i)||o(n,i,t[e]?""+t[e]:u.join(String(e))),n.hasOwnProperty("name")||o(n,"name",e)),t===r?t[e]=n:(a||delete t[e],o(t,e,n))})(Function.prototype,a,function(){return"function"==typeof this&&this[i]||s.call(this)})},{"./$.core":84,"./$.global":97,"./$.hide":99,"./$.uid":150}],130:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,n)}}},{}],131:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],132:[function(t,e,n){var r=t("./$").getDesc,o=t("./$.is-object"),i=t("./$.an-object"),a=function(t,e){if(i(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,o){try{o=t("./$.ctx")(Function.call,r(Object.prototype,"__proto__").set,2),o(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return a(t,e),n?t.__proto__=e:o(t,e),t}}({},!1):void 0),check:a}},{"./$":114,"./$.an-object":72,"./$.ctx":85,"./$.is-object":106}],133:[function(t,e,n){"use strict";var r=t("./$.global"),o=t("./$"),i=t("./$.descriptors"),a=t("./$.wks")("species");e.exports=function(t){var e=r[t];i&&e&&!e[a]&&o.setDesc(e,a,{configurable:!0,get:function(){return this}})}},{"./$":114,"./$.descriptors":87,"./$.global":97,"./$.wks":151}],134:[function(t,e,n){arguments[4][51][0].apply(n,arguments)},{"./$":114,"./$.has":98,"./$.wks":151,dup:51}],135:[function(t,e,n){arguments[4][52][0].apply(n,arguments)},{"./$.global":97,dup:52}],136:[function(t,e,n){var r=t("./$.an-object"),o=t("./$.a-function"),i=t("./$.wks")("species");e.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[i])?e:o(n)}},{"./$.a-function":70,"./$.an-object":72,"./$.wks":151}],137:[function(t,e,n){arguments[4][53][0].apply(n,arguments)},{dup:53}],138:[function(t,e,n){arguments[4][54][0].apply(n,arguments)},{"./$.defined":86,"./$.to-integer":145,dup:54}],139:[function(t,e,n){var r=t("./$.is-regexp"),o=t("./$.defined");e.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(t))}},{"./$.defined":86,"./$.is-regexp":107}],140:[function(t,e,n){var r=t("./$.to-length"),o=t("./$.string-repeat"),i=t("./$.defined");e.exports=function(t,e,n,a){var s=String(i(t)),u=s.length,c=void 0===n?" ":String(n),l=r(e);if(u>=l)return s;""==c&&(c=" ");var f=l-u,h=o.call(c,Math.ceil(f/c.length));return h.length>f&&(h=h.slice(0,f)),a?h+s:s+h}},{"./$.defined":86,"./$.string-repeat":141,"./$.to-length":147}],141:[function(t,e,n){"use strict";var r=t("./$.to-integer"),o=t("./$.defined");e.exports=function(t){var e=String(o(this)),n="",i=r(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{"./$.defined":86,"./$.to-integer":145}],142:[function(t,e,n){var r=t("./$.export"),o=t("./$.defined"),i=t("./$.fails"),a=" \n\f\r \u2028\u2029\ufeff",s="["+a+"]",u="
",c=RegExp("^"+s+s+"*"),l=RegExp(s+s+"*$"),f=function(t,e){var n={};n[t]=e(h),r(r.P+r.F*i(function(){return!!a[t]()||u[t]()!=u}),"String",n)},h=f.trim=function(t,e){return t=String(o(t)),1&e&&(t=t.replace(c,"")),2&e&&(t=t.replace(l,"")),t};e.exports=f},{"./$.defined":86,"./$.export":90,"./$.fails":92}],143:[function(t,e,n){var r,o,i,a=t("./$.ctx"),s=t("./$.invoke"),u=t("./$.html"),c=t("./$.dom-create"),l=t("./$.global"),f=l.process,h=l.setImmediate,p=l.clearImmediate,d=l.MessageChannel,g=0,v={},b="onreadystatechange",m=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){m.call(t.data)};h&&p||(h=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++g]=function(){s("function"==typeof t?t:Function(t),e)},r(g),g},p=function(t){delete v[t]},"process"==t("./$.cof")(f)?r=function(t){f.nextTick(a(m,t,1))}:d?(o=new d,i=o.port2,o.port1.onmessage=y,r=a(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",y,!1)):r=b in c("script")?function(t){u.appendChild(c("script"))[b]=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(a(m,t,1),0)}),e.exports={set:h,clear:p}},{"./$.cof":79,"./$.ctx":85,"./$.dom-create":88,"./$.global":97,"./$.html":100,"./$.invoke":101}],144:[function(t,e,n){var r=t("./$.to-integer"),o=Math.max,i=Math.min;e.exports=function(t,e){return t=r(t),0>t?o(t+e,0):i(t,e)}},{"./$.to-integer":145}],145:[function(t,e,n){arguments[4][55][0].apply(n,arguments)},{dup:55}],146:[function(t,e,n){arguments[4][56][0].apply(n,arguments)},{"./$.defined":86,"./$.iobject":102,dup:56}],147:[function(t,e,n){arguments[4][57][0].apply(n,arguments)},{"./$.to-integer":145,dup:57}],148:[function(t,e,n){arguments[4][58][0].apply(n,arguments)},{"./$.defined":86,dup:58}],149:[function(t,e,n){var r=t("./$.is-object");e.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},{"./$.is-object":106}],150:[function(t,e,n){arguments[4][59][0].apply(n,arguments)},{dup:59}],151:[function(t,e,n){arguments[4][60][0].apply(n,arguments)},{"./$.global":97,"./$.shared":135,"./$.uid":150,dup:60}],152:[function(t,e,n){arguments[4][61][0].apply(n,arguments)},{"./$.classof":78,"./$.core":84,"./$.iterators":113,"./$.wks":151,dup:61}],153:[function(t,e,n){"use strict";var r,o=t("./$"),i=t("./$.export"),a=t("./$.descriptors"),s=t("./$.property-desc"),u=t("./$.html"),c=t("./$.dom-create"),l=t("./$.has"),f=t("./$.cof"),h=t("./$.invoke"),p=t("./$.fails"),d=t("./$.an-object"),g=t("./$.a-function"),v=t("./$.is-object"),b=t("./$.to-object"),m=t("./$.to-iobject"),y=t("./$.to-integer"),w=t("./$.to-index"),$=t("./$.to-length"),x=t("./$.iobject"),E=t("./$.uid")("__proto__"),j=t("./$.array-methods"),k=t("./$.array-includes")(!1),F=Object.prototype,S=Array.prototype,_=S.slice,A=S.join,O=o.setDesc,T=o.getDesc,M=o.setDescs,C={};a||(r=!p(function(){return 7!=O(c("div"),"a",{get:function(){return 7}}).a}),o.setDesc=function(t,e,n){if(r)try{return O(t,e,n)}catch(o){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(d(t)[e]=n.value),t},o.getDesc=function(t,e){if(r)try{return T(t,e)}catch(n){}return l(t,e)?s(!F.propertyIsEnumerable.call(t,e),t[e]):void 0},o.setDescs=M=function(t,e){d(t);for(var n,r=o.getKeys(e),i=r.length,a=0;i>a;)o.setDesc(t,n=r[a++],e[n]);return t}),i(i.S+i.F*!a,"Object",{getOwnPropertyDescriptor:o.getDesc,defineProperty:o.setDesc,defineProperties:M});var R="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),P=R.concat("length","prototype"),D=R.length,N=function(){var t,e=c("iframe"),n=D,r=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("i;)l(o,r=t[i++])&&(~k(a,r)||a.push(r));return a}},I=function(){};i(i.S,"Object",{getPrototypeOf:o.getProto=o.getProto||function(t){return t=b(t),l(t,E)?t[E]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?F:null},getOwnPropertyNames:o.getNames=o.getNames||L(P,P.length,!0),create:o.create=o.create||function(t,e){var n;return null!==t?(I.prototype=d(t),n=new I,I.prototype=null,n[E]=t):n=N(),void 0===e?n:M(n,e)},keys:o.getKeys=o.getKeys||L(R,D,!1)});var U=function(t,e,n){if(!(e in C)){for(var r=[],o=0;e>o;o++)r[o]="a["+o+"]";C[e]=Function("F,a","return new F("+r.join(",")+")")}return C[e](t,n)};i(i.P,"Function",{bind:function(t){var e=g(this),n=_.call(arguments,1),r=function(){var o=n.concat(_.call(arguments));return this instanceof r?U(e,o.length,o):h(e,o,t)};return v(e.prototype)&&(r.prototype=e.prototype),r}}),i(i.P+i.F*p(function(){u&&_.call(u)}),"Array",{slice:function(t,e){var n=$(this.length),r=f(this);if(e=void 0===e?n:e,"Array"==r)return _.call(this,t,e);for(var o=w(t,n),i=w(e,n),a=$(i-o),s=Array(a),u=0;a>u;u++)s[u]="String"==r?this.charAt(o+u):this[o+u];return s}}),i(i.P+i.F*(x!=Object),"Array",{join:function(t){return A.call(x(this),void 0===t?",":t)}}),i(i.S,"Array",{isArray:t("./$.is-array")
});var B=function(t){return function(e,n){g(e);var r=x(this),o=$(r.length),i=t?o-1:0,a=t?-1:1;if(arguments.length<2)for(;;){if(i in r){n=r[i],i+=a;break}if(i+=a,t?0>i:i>=o)throw TypeError("Reduce of empty array with no initial value")}for(;t?i>=0:o>i;i+=a)i in r&&(n=e(n,r[i],i,this));return n}},q=function(t){return function(e){return t(this,e,arguments[1])}};i(i.P,"Array",{forEach:o.each=o.each||q(j(0)),map:q(j(1)),filter:q(j(2)),some:q(j(3)),every:q(j(4)),reduce:B(!1),reduceRight:B(!0),indexOf:q(k),lastIndexOf:function(t,e){var n=m(this),r=$(n.length),o=r-1;for(arguments.length>1&&(o=Math.min(o,y(e))),0>o&&(o=$(r+o));o>=0;o--)if(o in n&&n[o]===t)return o;return-1}}),i(i.S,"Date",{now:function(){return+new Date}});var W=function(t){return t>9?t:"0"+t};i(i.P+i.F*(p(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!p(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(this))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=0>e?"-":e>9999?"+":"";return r+("00000"+Math.abs(e)).slice(r?-6:-4)+"-"+W(t.getUTCMonth()+1)+"-"+W(t.getUTCDate())+"T"+W(t.getUTCHours())+":"+W(t.getUTCMinutes())+":"+W(t.getUTCSeconds())+"."+(n>99?n:"0"+W(n))+"Z"}})},{"./$":114,"./$.a-function":70,"./$.an-object":72,"./$.array-includes":75,"./$.array-methods":76,"./$.cof":79,"./$.descriptors":87,"./$.dom-create":88,"./$.export":90,"./$.fails":92,"./$.has":98,"./$.html":100,"./$.invoke":101,"./$.iobject":102,"./$.is-array":104,"./$.is-object":106,"./$.property-desc":127,"./$.to-index":144,"./$.to-integer":145,"./$.to-iobject":146,"./$.to-length":147,"./$.to-object":148,"./$.uid":150}],154:[function(t,e,n){var r=t("./$.export");r(r.P,"Array",{copyWithin:t("./$.array-copy-within")}),t("./$.add-to-unscopables")("copyWithin")},{"./$.add-to-unscopables":71,"./$.array-copy-within":73,"./$.export":90}],155:[function(t,e,n){var r=t("./$.export");r(r.P,"Array",{fill:t("./$.array-fill")}),t("./$.add-to-unscopables")("fill")},{"./$.add-to-unscopables":71,"./$.array-fill":74,"./$.export":90}],156:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.array-methods")(6),i="findIndex",a=!0;i in[]&&Array(1)[i](function(){a=!1}),r(r.P+r.F*a,"Array",{findIndex:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),t("./$.add-to-unscopables")(i)},{"./$.add-to-unscopables":71,"./$.array-methods":76,"./$.export":90}],157:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.array-methods")(5),i="find",a=!0;i in[]&&Array(1)[i](function(){a=!1}),r(r.P+r.F*a,"Array",{find:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),t("./$.add-to-unscopables")(i)},{"./$.add-to-unscopables":71,"./$.array-methods":76,"./$.export":90}],158:[function(t,e,n){arguments[4][62][0].apply(n,arguments)},{"./$.ctx":85,"./$.export":90,"./$.is-array-iter":103,"./$.iter-call":108,"./$.iter-detect":111,"./$.to-length":147,"./$.to-object":148,"./core.get-iterator-method":152,dup:62}],159:[function(t,e,n){arguments[4][63][0].apply(n,arguments)},{"./$.add-to-unscopables":71,"./$.iter-define":110,"./$.iter-step":112,"./$.iterators":113,"./$.to-iobject":146,dup:63}],160:[function(t,e,n){"use strict";var r=t("./$.export");r(r.S+r.F*t("./$.fails")(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments,n=e.length,r=new("function"==typeof this?this:Array)(n);n>t;)r[t]=e[t++];return r.length=n,r}})},{"./$.export":90,"./$.fails":92}],161:[function(t,e,n){t("./$.set-species")("Array")},{"./$.set-species":133}],162:[function(t,e,n){"use strict";var r=t("./$"),o=t("./$.is-object"),i=t("./$.wks")("hasInstance"),a=Function.prototype;i in a||r.setDesc(a,i,{value:function(t){if("function"!=typeof this||!o(t))return!1;if(!o(this.prototype))return t instanceof this;for(;t=r.getProto(t);)if(this.prototype===t)return!0;return!1}})},{"./$":114,"./$.is-object":106,"./$.wks":151}],163:[function(t,e,n){var r=t("./$").setDesc,o=t("./$.property-desc"),i=t("./$.has"),a=Function.prototype,s=/^\s*function ([^ (]*)/,u="name";u in a||t("./$.descriptors")&&r(a,u,{configurable:!0,get:function(){var t=(""+this).match(s),e=t?t[1]:"";return i(this,u)||r(this,u,o(5,e)),e}})},{"./$":114,"./$.descriptors":87,"./$.has":98,"./$.property-desc":127}],164:[function(t,e,n){arguments[4][64][0].apply(n,arguments)},{"./$.collection":83,"./$.collection-strong":80,dup:64}],165:[function(t,e,n){var r=t("./$.export"),o=t("./$.math-log1p"),i=Math.sqrt,a=Math.acosh;r(r.S+r.F*!(a&&710==Math.floor(a(Number.MAX_VALUE))),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:o(t-1+i(t-1)*i(t+1))}})},{"./$.export":90,"./$.math-log1p":118}],166:[function(t,e,n){function r(t){return isFinite(t=+t)&&0!=t?0>t?-r(-t):Math.log(t+Math.sqrt(t*t+1)):t}var o=t("./$.export");o(o.S,"Math",{asinh:r})},{"./$.export":90}],167:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{"./$.export":90}],168:[function(t,e,n){var r=t("./$.export"),o=t("./$.math-sign");r(r.S,"Math",{cbrt:function(t){return o(t=+t)*Math.pow(Math.abs(t),1/3)}})},{"./$.export":90,"./$.math-sign":119}],169:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{"./$.export":90}],170:[function(t,e,n){var r=t("./$.export"),o=Math.exp;r(r.S,"Math",{cosh:function(t){return(o(t=+t)+o(-t))/2}})},{"./$.export":90}],171:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{expm1:t("./$.math-expm1")})},{"./$.export":90,"./$.math-expm1":117}],172:[function(t,e,n){var r=t("./$.export"),o=t("./$.math-sign"),i=Math.pow,a=i(2,-52),s=i(2,-23),u=i(2,127)*(2-s),c=i(2,-126),l=function(t){return t+1/a-1/a};r(r.S,"Math",{fround:function(t){var e,n,r=Math.abs(t),i=o(t);return c>r?i*l(r/c/s)*c*s:(e=(1+s/a)*r,n=e-(e-r),n>u||n!=n?i*(1/0):i*n)}})},{"./$.export":90,"./$.math-sign":119}],173:[function(t,e,n){var r=t("./$.export"),o=Math.abs;r(r.S,"Math",{hypot:function(t,e){for(var n,r,i=0,a=0,s=arguments,u=s.length,c=0;u>a;)n=o(s[a++]),n>c?(r=c/n,i=i*r*r+1,c=n):n>0?(r=n/c,i+=r*r):i+=n;return c===1/0?1/0:c*Math.sqrt(i)}})},{"./$.export":90}],174:[function(t,e,n){var r=t("./$.export"),o=Math.imul;r(r.S+r.F*t("./$.fails")(function(){return-5!=o(4294967295,5)||2!=o.length}),"Math",{imul:function(t,e){var n=65535,r=+t,o=+e,i=n&r,a=n&o;return 0|i*a+((n&r>>>16)*a+i*(n&o>>>16)<<16>>>0)}})},{"./$.export":90,"./$.fails":92}],175:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},{"./$.export":90}],176:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{log1p:t("./$.math-log1p")})},{"./$.export":90,"./$.math-log1p":118}],177:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{"./$.export":90}],178:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{sign:t("./$.math-sign")})},{"./$.export":90,"./$.math-sign":119}],179:[function(t,e,n){var r=t("./$.export"),o=t("./$.math-expm1"),i=Math.exp;r(r.S+r.F*t("./$.fails")(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(o(t)-o(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{"./$.export":90,"./$.fails":92,"./$.math-expm1":117}],180:[function(t,e,n){var r=t("./$.export"),o=t("./$.math-expm1"),i=Math.exp;r(r.S,"Math",{tanh:function(t){var e=o(t=+t),n=o(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{"./$.export":90,"./$.math-expm1":117}],181:[function(t,e,n){var r=t("./$.export");r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{"./$.export":90}],182:[function(t,e,n){"use strict";var r=t("./$"),o=t("./$.global"),i=t("./$.has"),a=t("./$.cof"),s=t("./$.to-primitive"),u=t("./$.fails"),c=t("./$.string-trim").trim,l="Number",f=o[l],h=f,p=f.prototype,d=a(r.create(p))==l,g="trim"in String.prototype,v=function(t){var e=s(t,!1);if("string"==typeof e&&e.length>2){e=g?e.trim():c(e,3);var n,r,o,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+e}for(var a,u=e.slice(2),l=0,f=u.length;f>l;l++)if(a=u.charCodeAt(l),48>a||a>o)return NaN;return parseInt(u,r)}}return+e};f(" 0o1")&&f("0b1")&&!f("+0x1")||(f=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof f&&(d?u(function(){p.valueOf.call(n)}):a(n)!=l)?new h(v(e)):v(e)},r.each.call(t("./$.descriptors")?r.getNames(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),function(t){i(h,t)&&!i(f,t)&&r.setDesc(f,t,r.getDesc(h,t))}),f.prototype=p,p.constructor=f,t("./$.redefine")(o,l,f))},{"./$":114,"./$.cof":79,"./$.descriptors":87,"./$.fails":92,"./$.global":97,"./$.has":98,"./$.redefine":129,"./$.string-trim":142,"./$.to-primitive":149}],183:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},{"./$.export":90}],184:[function(t,e,n){var r=t("./$.export"),o=t("./$.global").isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&o(t)}})},{"./$.export":90,"./$.global":97}],185:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{isInteger:t("./$.is-integer")})},{"./$.export":90,"./$.is-integer":105}],186:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{isNaN:function(t){return t!=t}})},{"./$.export":90}],187:[function(t,e,n){var r=t("./$.export"),o=t("./$.is-integer"),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return o(t)&&i(t)<=9007199254740991}})},{"./$.export":90,"./$.is-integer":105}],188:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{"./$.export":90}],189:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{"./$.export":90}],190:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{parseFloat:parseFloat})},{"./$.export":90}],191:[function(t,e,n){var r=t("./$.export");r(r.S,"Number",{parseInt:parseInt})},{"./$.export":90}],192:[function(t,e,n){var r=t("./$.export");r(r.S+r.F,"Object",{assign:t("./$.object-assign")})},{"./$.export":90,"./$.object-assign":121}],193:[function(t,e,n){var r=t("./$.is-object");t("./$.object-sap")("freeze",function(t){return function(e){return t&&r(e)?t(e):e}})},{"./$.is-object":106,"./$.object-sap":122}],194:[function(t,e,n){var r=t("./$.to-iobject");t("./$.object-sap")("getOwnPropertyDescriptor",function(t){return function(e,n){return t(r(e),n)}})},{"./$.object-sap":122,"./$.to-iobject":146}],195:[function(t,e,n){t("./$.object-sap")("getOwnPropertyNames",function(){return t("./$.get-names").get})},{"./$.get-names":96,"./$.object-sap":122}],196:[function(t,e,n){var r=t("./$.to-object");t("./$.object-sap")("getPrototypeOf",function(t){return function(e){return t(r(e))}})},{"./$.object-sap":122,"./$.to-object":148}],197:[function(t,e,n){var r=t("./$.is-object");t("./$.object-sap")("isExtensible",function(t){return function(e){return r(e)?t?t(e):!0:!1}})},{"./$.is-object":106,"./$.object-sap":122}],198:[function(t,e,n){var r=t("./$.is-object");t("./$.object-sap")("isFrozen",function(t){return function(e){return r(e)?t?t(e):!1:!0}})},{"./$.is-object":106,"./$.object-sap":122}],199:[function(t,e,n){var r=t("./$.is-object");t("./$.object-sap")("isSealed",function(t){return function(e){return r(e)?t?t(e):!1:!0}})},{"./$.is-object":106,"./$.object-sap":122}],200:[function(t,e,n){var r=t("./$.export");r(r.S,"Object",{is:t("./$.same-value")})},{"./$.export":90,"./$.same-value":131}],201:[function(t,e,n){var r=t("./$.to-object");t("./$.object-sap")("keys",function(t){return function(e){return t(r(e))}})},{"./$.object-sap":122,"./$.to-object":148}],202:[function(t,e,n){var r=t("./$.is-object");t("./$.object-sap")("preventExtensions",function(t){return function(e){return t&&r(e)?t(e):e}})},{"./$.is-object":106,"./$.object-sap":122}],203:[function(t,e,n){var r=t("./$.is-object");t("./$.object-sap")("seal",function(t){return function(e){return t&&r(e)?t(e):e}})},{"./$.is-object":106,"./$.object-sap":122}],204:[function(t,e,n){var r=t("./$.export");r(r.S,"Object",{setPrototypeOf:t("./$.set-proto").set})},{"./$.export":90,"./$.set-proto":132}],205:[function(t,e,n){"use strict";var r=t("./$.classof"),o={};o[t("./$.wks")("toStringTag")]="z",o+""!="[object z]"&&t("./$.redefine")(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},{"./$.classof":78,"./$.redefine":129,"./$.wks":151}],206:[function(t,e,n){"use strict";var r,o=t("./$"),i=t("./$.library"),a=t("./$.global"),s=t("./$.ctx"),u=t("./$.classof"),c=t("./$.export"),l=t("./$.is-object"),f=t("./$.an-object"),h=t("./$.a-function"),p=t("./$.strict-new"),d=t("./$.for-of"),g=t("./$.set-proto").set,v=t("./$.same-value"),b=t("./$.wks")("species"),m=t("./$.species-constructor"),y=t("./$.microtask"),w="Promise",$=a.process,x="process"==u($),E=a[w],j=function(t){var e=new E(function(){});return t&&(e.constructor=Object),E.resolve(e)===e},k=function(){function e(t){var n=new E(t);return g(n,e.prototype),n}var n=!1;try{if(n=E&&E.resolve&&j(),g(e,E),e.prototype=o.create(E.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(n=!1),n&&t("./$.descriptors")){var r=!1;E.resolve(o.setDesc({},"then",{get:function(){r=!0}})),n=r}}catch(i){n=!1}return n}(),F=function(t,e){return i&&t===E&&e===r?!0:v(t,e)},S=function(t){var e=f(t)[b];return void 0!=e?e:t},_=function(t){var e;return l(t)&&"function"==typeof(e=t.then)?e:!1},A=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r}),this.resolve=h(e),this.reject=h(n)},O=function(t){try{t()}catch(e){return{error:e}}},T=function(t,e){if(!t.n){t.n=!0;var n=t.c;y(function(){for(var r=t.v,o=1==t.s,i=0,s=function(e){var n,i,a=o?e.ok:e.fail,s=e.resolve,u=e.reject;try{a?(o||(t.h=!0),n=a===!0?r:a(r),n===e.promise?u(TypeError("Promise-chain cycle")):(i=_(n))?i.call(n,s,u):s(n)):u(r)}catch(c){u(c)}};n.length>i;)s(n[i++]);n.length=0,t.n=!1,e&&setTimeout(function(){var e,n,o=t.p;M(o)&&(x?$.emit("unhandledRejection",r,o):(e=a.onunhandledrejection)?e({promise:o,reason:r}):(n=a.console)&&n.error&&n.error("Unhandled promise rejection",r)),t.a=void 0},1)})}},M=function(t){var e,n=t._d,r=n.a||n.c,o=0;if(n.h)return!1;for(;r.length>o;)if(e=r[o++],e.fail||!M(e.promise))return!1;return!0},C=function(t){var e=this;e.d||(e.d=!0,e=e.r||e,e.v=t,e.s=2,e.a=e.c.slice(),T(e,!0))},R=function(t){var e,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===t)throw TypeError("Promise can't be resolved itself");(e=_(t))?y(function(){var r={r:n,d:!1};try{e.call(t,s(R,r,1),s(C,r,1))}catch(o){C.call(r,o)}}):(n.v=t,n.s=1,T(n,!1))}catch(r){C.call({r:n,d:!1},r)}}};k||(E=function(t){h(t);var e=this._d={p:p(this,E,w),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(s(R,e,1),s(C,e,1))}catch(n){C.call(e,n)}},t("./$.redefine-all")(E.prototype,{then:function(t,e){var n=new A(m(this,E)),r=n.promise,o=this._d;return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,o.c.push(n),o.a&&o.a.push(n),o.s&&T(o,!1),r},"catch":function(t){return this.then(void 0,t)}})),c(c.G+c.W+c.F*!k,{Promise:E}),t("./$.set-to-string-tag")(E,w),t("./$.set-species")(w),r=t("./$.core")[w],c(c.S+c.F*!k,w,{reject:function(t){var e=new A(this),n=e.reject;return n(t),e.promise}}),c(c.S+c.F*(!k||j(!0)),w,{resolve:function(t){if(t instanceof E&&F(t.constructor,this))return t;var e=new A(this),n=e.resolve;return n(t),e.promise}}),c(c.S+c.F*!(k&&t("./$.iter-detect")(function(t){E.all(t)["catch"](function(){})})),w,{all:function(t){var e=S(this),n=new A(e),r=n.resolve,i=n.reject,a=[],s=O(function(){d(t,!1,a.push,a);var n=a.length,s=Array(n);n?o.each.call(a,function(t,o){var a=!1;e.resolve(t).then(function(t){a||(a=!0,s[o]=t,--n||r(s))},i)}):r(s)});return s&&i(s.error),n.promise},race:function(t){var e=S(this),n=new A(e),r=n.reject,o=O(function(){d(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},{"./$":114,"./$.a-function":70,"./$.an-object":72,"./$.classof":78,"./$.core":84,"./$.ctx":85,"./$.descriptors":87,"./$.export":90,"./$.for-of":95,"./$.global":97,"./$.is-object":106,"./$.iter-detect":111,"./$.library":116,"./$.microtask":120,"./$.redefine-all":128,"./$.same-value":131,"./$.set-proto":132,"./$.set-species":133,"./$.set-to-string-tag":134,"./$.species-constructor":136,"./$.strict-new":137,"./$.wks":151}],207:[function(t,e,n){var r=t("./$.export"),o=Function.apply;r(r.S,"Reflect",{apply:function(t,e,n){return o.call(t,e,n)}})},{"./$.export":90}],208:[function(t,e,n){var r=t("./$"),o=t("./$.export"),i=t("./$.a-function"),a=t("./$.an-object"),s=t("./$.is-object"),u=Function.bind||t("./$.core").Function.prototype.bind;o(o.S+o.F*t("./$.fails")(function(){function t(){}return!(Reflect.construct(function(){},[],t)instanceof t)}),"Reflect",{construct:function(t,e){i(t);var n=arguments.length<3?t:i(arguments[2]);if(t==n){if(void 0!=e)switch(a(e).length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var o=[null];return o.push.apply(o,e),new(u.apply(t,o))}var c=n.prototype,l=r.create(s(c)?c:Object.prototype),f=Function.apply.call(t,l,e);return s(f)?f:l}})},{"./$":114,"./$.a-function":70,"./$.an-object":72,"./$.core":84,"./$.export":90,"./$.fails":92,"./$.is-object":106}],209:[function(t,e,n){var r=t("./$"),o=t("./$.export"),i=t("./$.an-object");o(o.S+o.F*t("./$.fails")(function(){Reflect.defineProperty(r.setDesc({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t);try{return r.setDesc(t,e,n),!0}catch(o){return!1}}})},{"./$":114,"./$.an-object":72,"./$.export":90,"./$.fails":92}],210:[function(t,e,n){var r=t("./$.export"),o=t("./$").getDesc,i=t("./$.an-object");r(r.S,"Reflect",{deleteProperty:function(t,e){var n=o(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{"./$":114,"./$.an-object":72,"./$.export":90}],211:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.an-object"),i=function(t){this._t=o(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t("./$.iter-create")(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),r(r.S,"Reflect",{enumerate:function(t){return new i(t)}})},{"./$.an-object":72,"./$.export":90,"./$.iter-create":109}],212:[function(t,e,n){var r=t("./$"),o=t("./$.export"),i=t("./$.an-object");o(o.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return r.getDesc(i(t),e)}})},{"./$":114,"./$.an-object":72,"./$.export":90}],213:[function(t,e,n){var r=t("./$.export"),o=t("./$").getProto,i=t("./$.an-object");r(r.S,"Reflect",{getPrototypeOf:function(t){return o(i(t))}})},{"./$":114,"./$.an-object":72,"./$.export":90}],214:[function(t,e,n){function r(t,e){var n,a,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(n=o.getDesc(t,e))?i(n,"value")?n.value:void 0!==n.get?n.get.call(c):void 0:s(a=o.getProto(t))?r(a,e,c):void 0}var o=t("./$"),i=t("./$.has"),a=t("./$.export"),s=t("./$.is-object"),u=t("./$.an-object");a(a.S,"Reflect",{get:r})},{"./$":114,"./$.an-object":72,"./$.export":90,"./$.has":98,"./$.is-object":106}],215:[function(t,e,n){var r=t("./$.export");r(r.S,"Reflect",{has:function(t,e){return e in t}})},{"./$.export":90}],216:[function(t,e,n){var r=t("./$.export"),o=t("./$.an-object"),i=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(t){return o(t),i?i(t):!0}})},{"./$.an-object":72,"./$.export":90}],217:[function(t,e,n){var r=t("./$.export");r(r.S,"Reflect",{ownKeys:t("./$.own-keys")})},{"./$.export":90,"./$.own-keys":124}],218:[function(t,e,n){var r=t("./$.export"),o=t("./$.an-object"),i=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(t){o(t);try{return i&&i(t),!0}catch(e){return!1}}})},{"./$.an-object":72,"./$.export":90}],219:[function(t,e,n){var r=t("./$.export"),o=t("./$.set-proto");o&&r(r.S,"Reflect",{setPrototypeOf:function(t,e){o.check(t,e);try{return o.set(t,e),!0}catch(n){return!1}}})},{"./$.export":90,"./$.set-proto":132}],220:[function(t,e,n){function r(t,e,n){var a,l,f=arguments.length<4?t:arguments[3],h=o.getDesc(u(t),e);if(!h){if(c(l=o.getProto(t)))return r(l,e,n,f);h=s(0)}return i(h,"value")?h.writable!==!1&&c(f)?(a=o.getDesc(f,e)||s(0),a.value=n,o.setDesc(f,e,a),!0):!1:void 0===h.set?!1:(h.set.call(f,n),!0)}var o=t("./$"),i=t("./$.has"),a=t("./$.export"),s=t("./$.property-desc"),u=t("./$.an-object"),c=t("./$.is-object");a(a.S,"Reflect",{set:r})},{"./$":114,"./$.an-object":72,"./$.export":90,"./$.has":98,"./$.is-object":106,"./$.property-desc":127}],221:[function(t,e,n){var r=t("./$"),o=t("./$.global"),i=t("./$.is-regexp"),a=t("./$.flags"),s=o.RegExp,u=s,c=s.prototype,l=/a/g,f=/a/g,h=new s(l)!==l;!t("./$.descriptors")||h&&!t("./$.fails")(function(){return f[t("./$.wks")("match")]=!1,s(l)!=l||s(f)==f||"/a/i"!=s(l,"i")})||(s=function(t,e){var n=i(t),r=void 0===e;return this instanceof s||!n||t.constructor!==s||!r?h?new u(n&&!r?t.source:t,e):u((n=t instanceof s)?t.source:t,n&&r?a.call(t):e):t},r.each.call(r.getNames(u),function(t){t in s||r.setDesc(s,t,{configurable:!0,get:function(){return u[t]},set:function(e){u[t]=e}})}),c.constructor=s,s.prototype=c,t("./$.redefine")(o,"RegExp",s)),t("./$.set-species")("RegExp")},{"./$":114,"./$.descriptors":87,"./$.fails":92,"./$.flags":94,"./$.global":97,"./$.is-regexp":107,"./$.redefine":129,"./$.set-species":133,"./$.wks":151}],222:[function(t,e,n){var r=t("./$");t("./$.descriptors")&&"g"!=/./g.flags&&r.setDesc(RegExp.prototype,"flags",{configurable:!0,get:t("./$.flags")})},{"./$":114,"./$.descriptors":87,"./$.flags":94}],223:[function(t,e,n){t("./$.fix-re-wks")("match",1,function(t,e){return function(n){"use strict";var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r):new RegExp(n)[e](String(r))}})},{"./$.fix-re-wks":93}],224:[function(t,e,n){t("./$.fix-re-wks")("replace",2,function(t,e,n){return function(r,o){"use strict";var i=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)}})},{"./$.fix-re-wks":93}],225:[function(t,e,n){t("./$.fix-re-wks")("search",1,function(t,e){return function(n){"use strict";var r=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,r):new RegExp(n)[e](String(r))}})},{"./$.fix-re-wks":93}],226:[function(t,e,n){t("./$.fix-re-wks")("split",2,function(t,e,n){return function(r,o){"use strict";var i=t(this),a=void 0==r?void 0:r[e];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)}})},{"./$.fix-re-wks":93}],227:[function(t,e,n){"use strict";var r=t("./$.collection-strong");t("./$.collection")("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t=0===t?0:t,t)}},r)},{"./$.collection":83,"./$.collection-strong":80}],228:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.string-at")(!1);r(r.P,"String",{codePointAt:function(t){return o(this,t)}})},{"./$.export":90,"./$.string-at":138}],229:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.to-length"),i=t("./$.string-context"),a="endsWith",s=""[a];r(r.P+r.F*t("./$.fails-is-regexp")(a),"String",{endsWith:function(t){var e=i(this,t,a),n=arguments,r=n.length>1?n[1]:void 0,u=o(e.length),c=void 0===r?u:Math.min(o(r),u),l=String(t);return s?s.call(e,l,c):e.slice(c-l.length,c)===l}})},{"./$.export":90,"./$.fails-is-regexp":91,"./$.string-context":139,"./$.to-length":147}],230:[function(t,e,n){var r=t("./$.export"),o=t("./$.to-index"),i=String.fromCharCode,a=String.fromCodePoint;r(r.S+r.F*(!!a&&1!=a.length),"String",{fromCodePoint:function(t){for(var e,n=[],r=arguments,a=r.length,s=0;a>s;){if(e=+r[s++],o(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{"./$.export":90,"./$.to-index":144}],231:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.string-context"),i="includes";r(r.P+r.F*t("./$.fails-is-regexp")(i),"String",{includes:function(t){return!!~o(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{"./$.export":90,"./$.fails-is-regexp":91,"./$.string-context":139}],232:[function(t,e,n){arguments[4][66][0].apply(n,arguments)},{"./$.iter-define":110,"./$.string-at":138,dup:66}],233:[function(t,e,n){var r=t("./$.export"),o=t("./$.to-iobject"),i=t("./$.to-length");r(r.S,"String",{raw:function(t){for(var e=o(t.raw),n=i(e.length),r=arguments,a=r.length,s=[],u=0;n>u;)s.push(String(e[u++])),a>u&&s.push(String(r[u]));return s.join("")}})},{"./$.export":90,"./$.to-iobject":146,"./$.to-length":147}],234:[function(t,e,n){var r=t("./$.export");r(r.P,"String",{repeat:t("./$.string-repeat")})},{"./$.export":90,"./$.string-repeat":141}],235:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.to-length"),i=t("./$.string-context"),a="startsWith",s=""[a];r(r.P+r.F*t("./$.fails-is-regexp")(a),"String",{startsWith:function(t){var e=i(this,t,a),n=arguments,r=o(Math.min(n.length>1?n[1]:void 0,e.length)),u=String(t);return s?s.call(e,u,r):e.slice(r,r+u.length)===u}})},{"./$.export":90,"./$.fails-is-regexp":91,"./$.string-context":139,"./$.to-length":147}],236:[function(t,e,n){"use strict";t("./$.string-trim")("trim",function(t){return function(){return t(this,3)}})},{"./$.string-trim":142}],237:[function(t,e,n){arguments[4][67][0].apply(n,arguments)},{"./$":114,"./$.an-object":72,"./$.descriptors":87,"./$.enum-keys":89,"./$.export":90,"./$.fails":92,"./$.get-names":96,"./$.global":97,"./$.has":98,"./$.is-array":104,"./$.keyof":115,"./$.library":116,"./$.property-desc":127,"./$.redefine":129,"./$.set-to-string-tag":134,"./$.shared":135,"./$.to-iobject":146,"./$.uid":150,"./$.wks":151,dup:67}],238:[function(t,e,n){"use strict";var r=t("./$"),o=t("./$.redefine"),i=t("./$.collection-weak"),a=t("./$.is-object"),s=t("./$.has"),u=i.frozenStore,c=i.WEAK,l=Object.isExtensible||a,f={},h=t("./$.collection")("WeakMap",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){if(a(t)){if(!l(t))return u(this).get(t);if(s(t,c))return t[c][this._i]}},set:function(t,e){return i.def(this,t,e)}},i,!0,!0);7!=(new h).set((Object.freeze||Object)(f),7).get(f)&&r.each.call(["delete","has","get","set"],function(t){var e=h.prototype,n=e[t];o(e,t,function(e,r){if(a(e)&&!l(e)){var o=u(this)[t](e,r);return"set"==t?this:o}return n.call(this,e,r)})})},{"./$":114,"./$.collection":83,"./$.collection-weak":82,"./$.has":98,"./$.is-object":106,"./$.redefine":129}],239:[function(t,e,n){"use strict";var r=t("./$.collection-weak");t("./$.collection")("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t,!0)}},r,!1,!0)},{"./$.collection":83,"./$.collection-weak":82}],240:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.array-includes")(!0);r(r.P,"Array",{includes:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0)}}),t("./$.add-to-unscopables")("includes")},{"./$.add-to-unscopables":71,"./$.array-includes":75,"./$.export":90}],241:[function(t,e,n){arguments[4][68][0].apply(n,arguments)},{"./$.collection-to-json":81,"./$.export":90,dup:68}],242:[function(t,e,n){var r=t("./$.export"),o=t("./$.object-to-array")(!0);r(r.S,"Object",{entries:function(t){return o(t)}})},{"./$.export":90,"./$.object-to-array":123}],243:[function(t,e,n){var r=t("./$"),o=t("./$.export"),i=t("./$.own-keys"),a=t("./$.to-iobject"),s=t("./$.property-desc");o(o.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,o=a(t),u=r.setDesc,c=r.getDesc,l=i(o),f={},h=0;l.length>h;)n=c(o,e=l[h++]),e in f?u(f,e,s(0,n)):f[e]=n;return f}})},{"./$":114,"./$.export":90,"./$.own-keys":124,"./$.property-desc":127,"./$.to-iobject":146}],244:[function(t,e,n){var r=t("./$.export"),o=t("./$.object-to-array")(!1);r(r.S,"Object",{values:function(t){return o(t)}})},{"./$.export":90,"./$.object-to-array":123}],245:[function(t,e,n){var r=t("./$.export"),o=t("./$.replacer")(/[\\^$*+?.()|[\]{}]/g,"\\$&");r(r.S,"RegExp",{escape:function(t){return o(t)}})},{"./$.export":90,"./$.replacer":130}],246:[function(t,e,n){var r=t("./$.export");r(r.P,"Set",{toJSON:t("./$.collection-to-json")("Set")})},{"./$.collection-to-json":81,"./$.export":90}],247:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.string-at")(!0);r(r.P,"String",{at:function(t){return o(this,t)}})},{"./$.export":90,"./$.string-at":138}],248:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.string-pad");r(r.P,"String",{padLeft:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{"./$.export":90,"./$.string-pad":140}],249:[function(t,e,n){"use strict";var r=t("./$.export"),o=t("./$.string-pad");r(r.P,"String",{padRight:function(t){return o(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},{"./$.export":90,"./$.string-pad":140}],250:[function(t,e,n){"use strict";t("./$.string-trim")("trimLeft",function(t){return function(){return t(this,1)}})},{"./$.string-trim":142}],251:[function(t,e,n){"use strict";t("./$.string-trim")("trimRight",function(t){return function(){return t(this,2)}})},{"./$.string-trim":142}],252:[function(t,e,n){var r=t("./$"),o=t("./$.export"),i=t("./$.ctx"),a=t("./$.core").Array||Array,s={},u=function(t,e){r.each.call(t.split(","),function(t){void 0==e&&t in a?s[t]=a[t]:t in[]&&(s[t]=i(Function.call,[][t],e))})};u("pop,reverse,shift,keys,values,entries",1),u("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),u("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),o(o.S,"Array",s)},{"./$":114,"./$.core":84,"./$.ctx":85,"./$.export":90}],253:[function(t,e,n){t("./es6.array.iterator");var r=t("./$.global"),o=t("./$.hide"),i=t("./$.iterators"),a=t("./$.wks")("iterator"),s=r.NodeList,u=r.HTMLCollection,c=s&&s.prototype,l=u&&u.prototype,f=i.NodeList=i.HTMLCollection=i.Array;c&&!c[a]&&o(c,a,f),l&&!l[a]&&o(l,a,f)},{"./$.global":97,"./$.hide":99,"./$.iterators":113,"./$.wks":151,"./es6.array.iterator":159}],254:[function(t,e,n){var r=t("./$.export"),o=t("./$.task");r(r.G+r.B,{setImmediate:o.set,clearImmediate:o.clear})},{"./$.export":90,"./$.task":143}],255:[function(t,e,n){var r=t("./$.global"),o=t("./$.export"),i=t("./$.invoke"),a=t("./$.partial"),s=r.navigator,u=!!s&&/MSIE .\./.test(s.userAgent),c=function(t){return u?function(e,n){return t(i(a,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),n)}:t};o(o.G+o.B+o.F*u,{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},{"./$.export":90,"./$.global":97,"./$.invoke":101,"./$.partial":125}],256:[function(t,e,n){t("./modules/es5"),t("./modules/es6.symbol"),t("./modules/es6.object.assign"),t("./modules/es6.object.is"),t("./modules/es6.object.set-prototype-of"),t("./modules/es6.object.to-string"),t("./modules/es6.object.freeze"),t("./modules/es6.object.seal"),t("./modules/es6.object.prevent-extensions"),t("./modules/es6.object.is-frozen"),t("./modules/es6.object.is-sealed"),t("./modules/es6.object.is-extensible"),t("./modules/es6.object.get-own-property-descriptor"),t("./modules/es6.object.get-prototype-of"),t("./modules/es6.object.keys"),t("./modules/es6.object.get-own-property-names"),t("./modules/es6.function.name"),t("./modules/es6.function.has-instance"),t("./modules/es6.number.constructor"),t("./modules/es6.number.epsilon"),t("./modules/es6.number.is-finite"),t("./modules/es6.number.is-integer"),t("./modules/es6.number.is-nan"),t("./modules/es6.number.is-safe-integer"),t("./modules/es6.number.max-safe-integer"),t("./modules/es6.number.min-safe-integer"),t("./modules/es6.number.parse-float"),t("./modules/es6.number.parse-int"),t("./modules/es6.math.acosh"),t("./modules/es6.math.asinh"),t("./modules/es6.math.atanh"),t("./modules/es6.math.cbrt"),t("./modules/es6.math.clz32"),t("./modules/es6.math.cosh"),t("./modules/es6.math.expm1"),
t("./modules/es6.math.fround"),t("./modules/es6.math.hypot"),t("./modules/es6.math.imul"),t("./modules/es6.math.log10"),t("./modules/es6.math.log1p"),t("./modules/es6.math.log2"),t("./modules/es6.math.sign"),t("./modules/es6.math.sinh"),t("./modules/es6.math.tanh"),t("./modules/es6.math.trunc"),t("./modules/es6.string.from-code-point"),t("./modules/es6.string.raw"),t("./modules/es6.string.trim"),t("./modules/es6.string.iterator"),t("./modules/es6.string.code-point-at"),t("./modules/es6.string.ends-with"),t("./modules/es6.string.includes"),t("./modules/es6.string.repeat"),t("./modules/es6.string.starts-with"),t("./modules/es6.array.from"),t("./modules/es6.array.of"),t("./modules/es6.array.iterator"),t("./modules/es6.array.species"),t("./modules/es6.array.copy-within"),t("./modules/es6.array.fill"),t("./modules/es6.array.find"),t("./modules/es6.array.find-index"),t("./modules/es6.regexp.constructor"),t("./modules/es6.regexp.flags"),t("./modules/es6.regexp.match"),t("./modules/es6.regexp.replace"),t("./modules/es6.regexp.search"),t("./modules/es6.regexp.split"),t("./modules/es6.promise"),t("./modules/es6.map"),t("./modules/es6.set"),t("./modules/es6.weak-map"),t("./modules/es6.weak-set"),t("./modules/es6.reflect.apply"),t("./modules/es6.reflect.construct"),t("./modules/es6.reflect.define-property"),t("./modules/es6.reflect.delete-property"),t("./modules/es6.reflect.enumerate"),t("./modules/es6.reflect.get"),t("./modules/es6.reflect.get-own-property-descriptor"),t("./modules/es6.reflect.get-prototype-of"),t("./modules/es6.reflect.has"),t("./modules/es6.reflect.is-extensible"),t("./modules/es6.reflect.own-keys"),t("./modules/es6.reflect.prevent-extensions"),t("./modules/es6.reflect.set"),t("./modules/es6.reflect.set-prototype-of"),t("./modules/es7.array.includes"),t("./modules/es7.string.at"),t("./modules/es7.string.pad-left"),t("./modules/es7.string.pad-right"),t("./modules/es7.string.trim-left"),t("./modules/es7.string.trim-right"),t("./modules/es7.regexp.escape"),t("./modules/es7.object.get-own-property-descriptors"),t("./modules/es7.object.values"),t("./modules/es7.object.entries"),t("./modules/es7.map.to-json"),t("./modules/es7.set.to-json"),t("./modules/js.array.statics"),t("./modules/web.timers"),t("./modules/web.immediate"),t("./modules/web.dom.iterable"),e.exports=t("./modules/$.core")},{"./modules/$.core":84,"./modules/es5":153,"./modules/es6.array.copy-within":154,"./modules/es6.array.fill":155,"./modules/es6.array.find":157,"./modules/es6.array.find-index":156,"./modules/es6.array.from":158,"./modules/es6.array.iterator":159,"./modules/es6.array.of":160,"./modules/es6.array.species":161,"./modules/es6.function.has-instance":162,"./modules/es6.function.name":163,"./modules/es6.map":164,"./modules/es6.math.acosh":165,"./modules/es6.math.asinh":166,"./modules/es6.math.atanh":167,"./modules/es6.math.cbrt":168,"./modules/es6.math.clz32":169,"./modules/es6.math.cosh":170,"./modules/es6.math.expm1":171,"./modules/es6.math.fround":172,"./modules/es6.math.hypot":173,"./modules/es6.math.imul":174,"./modules/es6.math.log10":175,"./modules/es6.math.log1p":176,"./modules/es6.math.log2":177,"./modules/es6.math.sign":178,"./modules/es6.math.sinh":179,"./modules/es6.math.tanh":180,"./modules/es6.math.trunc":181,"./modules/es6.number.constructor":182,"./modules/es6.number.epsilon":183,"./modules/es6.number.is-finite":184,"./modules/es6.number.is-integer":185,"./modules/es6.number.is-nan":186,"./modules/es6.number.is-safe-integer":187,"./modules/es6.number.max-safe-integer":188,"./modules/es6.number.min-safe-integer":189,"./modules/es6.number.parse-float":190,"./modules/es6.number.parse-int":191,"./modules/es6.object.assign":192,"./modules/es6.object.freeze":193,"./modules/es6.object.get-own-property-descriptor":194,"./modules/es6.object.get-own-property-names":195,"./modules/es6.object.get-prototype-of":196,"./modules/es6.object.is":200,"./modules/es6.object.is-extensible":197,"./modules/es6.object.is-frozen":198,"./modules/es6.object.is-sealed":199,"./modules/es6.object.keys":201,"./modules/es6.object.prevent-extensions":202,"./modules/es6.object.seal":203,"./modules/es6.object.set-prototype-of":204,"./modules/es6.object.to-string":205,"./modules/es6.promise":206,"./modules/es6.reflect.apply":207,"./modules/es6.reflect.construct":208,"./modules/es6.reflect.define-property":209,"./modules/es6.reflect.delete-property":210,"./modules/es6.reflect.enumerate":211,"./modules/es6.reflect.get":214,"./modules/es6.reflect.get-own-property-descriptor":212,"./modules/es6.reflect.get-prototype-of":213,"./modules/es6.reflect.has":215,"./modules/es6.reflect.is-extensible":216,"./modules/es6.reflect.own-keys":217,"./modules/es6.reflect.prevent-extensions":218,"./modules/es6.reflect.set":220,"./modules/es6.reflect.set-prototype-of":219,"./modules/es6.regexp.constructor":221,"./modules/es6.regexp.flags":222,"./modules/es6.regexp.match":223,"./modules/es6.regexp.replace":224,"./modules/es6.regexp.search":225,"./modules/es6.regexp.split":226,"./modules/es6.set":227,"./modules/es6.string.code-point-at":228,"./modules/es6.string.ends-with":229,"./modules/es6.string.from-code-point":230,"./modules/es6.string.includes":231,"./modules/es6.string.iterator":232,"./modules/es6.string.raw":233,"./modules/es6.string.repeat":234,"./modules/es6.string.starts-with":235,"./modules/es6.string.trim":236,"./modules/es6.symbol":237,"./modules/es6.weak-map":238,"./modules/es6.weak-set":239,"./modules/es7.array.includes":240,"./modules/es7.map.to-json":241,"./modules/es7.object.entries":242,"./modules/es7.object.get-own-property-descriptors":243,"./modules/es7.object.values":244,"./modules/es7.regexp.escape":245,"./modules/es7.set.to-json":246,"./modules/es7.string.at":247,"./modules/es7.string.pad-left":248,"./modules/es7.string.pad-right":249,"./modules/es7.string.trim-left":250,"./modules/es7.string.trim-right":251,"./modules/js.array.statics":252,"./modules/web.dom.iterable":253,"./modules/web.immediate":254,"./modules/web.timers":255}],257:[function(t,e,n){function r(){l=!1,s.length?c=s.concat(c):f=-1,c.length&&o()}function o(){if(!l){var t=setTimeout(r);l=!0;for(var e=c.length;e;){for(s=c,c=[];++f1)for(var n=1;n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return e("end");if(o.tryLoc<=this.prev){var a=m.call(o,"catchLoc"),s=m.call(o,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&m.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),p(n),F}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:g(t),resultName:e,nextLoc:n},F}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:257}],259:[function(t,e,n){"use strict";var r=t("babel-runtime/helpers/create-class")["default"],o=t("babel-runtime/helpers/class-call-check")["default"],i=t("babel-runtime/core-js/symbol")["default"],a=t("babel-runtime/core-js/map")["default"],s=t("babel-runtime/core-js/array/from")["default"];window.altspace||(window.altspace={}),window.altspace.utilities||(window.altspace.utilities={}),window.altspace.utilities.behaviors||(window.altspace.utilities.behaviors={}),t("babel/polyfill");var u=i("containerMax"),c=i("containerMin"),l=i("object3D"),f=i("boundingBox"),h=i("origMatrix"),p=i("origMatrixAutoUpdate"),d=i("parent"),g=i("enclosure"),v=new a,b=function(){function t(e){var n=e.my,r=void 0===n?{}:n,i=e.at;o(this,t),this.my=r,this.at=i}return r(t,[{key:"getAxisSettings",value:function(t,e,n,r){e=e||"center",e=/(\w+)([-+].+)?/.exec(e);var o=e[1],i=e[2],a=parseFloat(i)||0;return i&&i.endsWith("%")?a=a/100*(r[t]-n[t]):i&&i.endsWith("m")&&(console.log(a,this[g]),a*=this[g].pixelsPerMeter,console.log(a)),{position:o,offset:a}}},{key:"getAnchorOffset",value:function(t,e){var n=this[f].max,r=this[f].min,o=this.getAxisSettings(t,e,r,n),i=o.position,a=o.offset;if("max"===i)return-n[t]+a;if("min"===i)return-r[t]+a;if("center"===i)return a;throw new Error(e+" is an invalid layout position for "+t)}},{key:"doLayout",value:function(){var t=this;s("xyz").forEach(function(e){var n=t.getAxisSettings(e,t.at[e],t[c],t[u]),r=n.position,o=n.offset,i=t.getAnchorOffset(e,t.my[e]);if("max"===r)t[l].position[e]=t[u][e]+o+i;else if("min"===r)t[l].position[e]=t[c][e]+o+i;else{if("center"!==r)throw new Error(t.at[e]+" is an invalid layout position for "+e);t[l].position[e]=o+i}}),this[d]&&(this[d].matrix=this[h],this[d].updateMatrixWorld(!0),this[d].matrixAutoUpdate=this[p])}},{key:"awake",value:function(t){var e=this;this[l]=t,this[f]=(new THREE.Box3).setFromObject(this[l]),altspace.getEnclosure().then(function(t){if(e[g]=t,e[l].parent instanceof THREE.Scene){var n=e[g].innerWidth/2,r=e[g].innerHeight/2,o=e[g].innerDepth/2;e[u]=new THREE.Vector3(n,r,o),e[c]=new THREE.Vector3(-n,-r,-o),e.doLayout()}else{var i=e[l].getWorldScale();e[f].min.divide(i),e[f].max.divide(i),e[d]=e[l].parent,e[h]=e[d].matrix.clone(),e[p]=e[d].matrixAutoUpdate,e[d].matrixAutoUpdate=!1,e[d].matrix.identity();var a=void 0;v.has(e[d].uuid)?a=v.get(e[d].uuid):(e[d].remove(e[l]),a=(new THREE.Box3).setFromObject(e[d]),e[d].add(e[l]),v.set(e[d].uuid,a)),e[u]=a.max,e[c]=a.min,e.doLayout()}})}}]),t}();window.altspace.utilities.behaviors.Layout=b},{"babel-runtime/core-js/array/from":3,"babel-runtime/core-js/map":4,"babel-runtime/core-js/symbol":6,"babel-runtime/helpers/class-call-check":7,"babel-runtime/helpers/create-class":8,"babel/polyfill":9}]},{},[259]),function r(t,e,n){function o(a,s){if(!e[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=e[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return o(n?n:e)},l,l.exports,r,t,e,n)}return e[a].exports}for(var i="function"==typeof require&&require,a=0;ag;g++)e?d(a(f=t[g])[0],f[1]):d(t[g]);else for(h=p.call(t);!(f=h.next()).done;)o(h,d,f.value,e)}},{"./$.an-object":9,"./$.ctx":13,"./$.is-array-iter":26,"./$.iter-call":28,"./$.to-length":51,"./core.get-iterator-method":54}],20:[function(t,e,n){var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],21:[function(t,e,n){var r={}.hasOwnProperty;e.exports=function(t,e){return r.call(t,e)}},{}],22:[function(t,e,n){var r=t("./$"),o=t("./$.property-desc");e.exports=t("./$.descriptors")?function(t,e,n){return r.setDesc(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},{"./$":34,"./$.descriptors":15,"./$.property-desc":37}],23:[function(t,e,n){e.exports=t("./$.global").document&&document.documentElement},{"./$.global":20}],24:[function(t,e,n){e.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],25:[function(t,e,n){var r=t("./$.cof");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},{"./$.cof":11}],26:[function(t,e,n){var r=t("./$.iterators"),o=t("./$.wks")("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},{"./$.iterators":33,"./$.wks":53}],27:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],28:[function(t,e,n){var r=t("./$.an-object");e.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(i){var a=t["return"];throw void 0!==a&&r(a.call(t)),i}}},{"./$.an-object":9}],29:[function(t,e,n){"use strict";var r=t("./$"),o=t("./$.property-desc"),i=t("./$.set-to-string-tag"),a={};t("./$.hide")(a,t("./$.wks")("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=r.create(a,{next:o(1,n)}),i(t,e+" Iterator")}},{"./$":34,"./$.hide":22,"./$.property-desc":37,"./$.set-to-string-tag":43,"./$.wks":53}],30:[function(t,e,n){"use strict";var r=t("./$.library"),o=t("./$.export"),i=t("./$.redefine"),a=t("./$.hide"),s=t("./$.has"),u=t("./$.iterators"),c=t("./$.iter-create"),l=t("./$.set-to-string-tag"),f=t("./$").getProto,h=t("./$.wks")("iterator"),p=!([].keys&&"next"in[].keys()),d="@@iterator",g="keys",v="values",b=function(){return this};e.exports=function(t,e,n,m,y,w,$){c(n,e,m);var x,E,j=function(t){if(!p&&t in _)return _[t];switch(t){case g:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+" Iterator",F=y==v,S=!1,_=t.prototype,A=_[h]||_[d]||y&&_[y],O=A||j(y);if(A){var T=f(O.call(new t));l(T,k,!0),!r&&s(_,d)&&a(T,h,b),F&&A.name!==v&&(S=!0,O=function(){return A.call(this)})}if(r&&!$||!p&&!S&&_[h]||a(_,h,O),u[e]=O,u[k]=b,y)if(x={values:F?O:j(v),keys:w?O:j(g),entries:F?j("entries"):O},$)for(E in x)E in _||i(_,E,x[E]);else o(o.P+o.F*(p||S),e,x);return x}},{"./$":34,"./$.export":17,"./$.has":21,"./$.hide":22,"./$.iter-create":29,"./$.iterators":33,"./$.library":35,"./$.redefine":39,"./$.set-to-string-tag":43,"./$.wks":53}],31:[function(t,e,n){var r=t("./$.wks")("iterator"),o=!1;try{var i=[7][r]();i["return"]=function(){o=!0},Array.from(i,function(){throw 2})}catch(a){}e.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){n=!0},i[r]=function(){return a},t(i)}catch(s){}return n}},{"./$.wks":53}],32:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],33:[function(t,e,n){e.exports={}},{}],34:[function(t,e,n){var r=Object;e.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},{}],35:[function(t,e,n){e.exports=!0},{}],36:[function(t,e,n){var r,o,i,a=t("./$.global"),s=t("./$.task").set,u=a.MutationObserver||a.WebKitMutationObserver,c=a.process,l=a.Promise,f="process"==t("./$.cof")(c),h=function(){var t,e,n;for(f&&(t=c.domain)&&(c.domain=null,t.exit());r;)e=r.domain,n=r.fn,e&&e.enter(),n(),e&&e.exit(),r=r.next;o=void 0,t&&t.enter()};if(f)i=function(){c.nextTick(h)};else if(u){var p=1,d=document.createTextNode("");new u(h).observe(d,{characterData:!0}),i=function(){d.data=p=-p}}else i=l&&l.resolve?function(){l.resolve().then(h)}:function(){s.call(a,h)};e.exports=function(t){var e={fn:t,next:void 0,domain:f&&c.domain};o&&(o.next=e),r||(r=e,i()),o=e}},{"./$.cof":11,"./$.global":20,"./$.task":48}],37:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],38:[function(t,e,n){var r=t("./$.redefine");e.exports=function(t,e){for(var n in e)r(t,n,e[n]);return t}},{"./$.redefine":39}],39:[function(t,e,n){e.exports=t("./$.hide")},{"./$.hide":22}],40:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],41:[function(t,e,n){var r=t("./$").getDesc,o=t("./$.is-object"),i=t("./$.an-object"),a=function(t,e){if(i(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,o){try{o=t("./$.ctx")(Function.call,r(Object.prototype,"__proto__").set,2),o(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return a(t,e),n?t.__proto__=e:o(t,e),t}}({},!1):void 0),check:a}},{"./$":34,"./$.an-object":9,"./$.ctx":13,"./$.is-object":27}],42:[function(t,e,n){"use strict";var r=t("./$.core"),o=t("./$"),i=t("./$.descriptors"),a=t("./$.wks")("species");e.exports=function(t){var e=r[t];i&&e&&!e[a]&&o.setDesc(e,a,{configurable:!0,get:function(){return this}})}},{"./$":34,"./$.core":12,"./$.descriptors":15,"./$.wks":53}],43:[function(t,e,n){var r=t("./$").setDesc,o=t("./$.has"),i=t("./$.wks")("toStringTag");e.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},{"./$":34,"./$.has":21,"./$.wks":53}],44:[function(t,e,n){var r=t("./$.global"),o="__core-js_shared__",i=r[o]||(r[o]={});e.exports=function(t){return i[t]||(i[t]={})}},{"./$.global":20}],45:[function(t,e,n){var r=t("./$.an-object"),o=t("./$.a-function"),i=t("./$.wks")("species");e.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[i])?e:o(n)}},{"./$.a-function":7,"./$.an-object":9,"./$.wks":53}],46:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],47:[function(t,e,n){var r=t("./$.to-integer"),o=t("./$.defined");e.exports=function(t){return function(e,n){var i,a,s=String(o(e)),u=r(n),c=s.length;return 0>u||u>=c?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===c||(a=s.charCodeAt(u+1))<56320||a>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(a-56320)+65536)}}},{"./$.defined":14,"./$.to-integer":49}],48:[function(t,e,n){var r,o,i,a=t("./$.ctx"),s=t("./$.invoke"),u=t("./$.html"),c=t("./$.dom-create"),l=t("./$.global"),f=l.process,h=l.setImmediate,p=l.clearImmediate,d=l.MessageChannel,g=0,v={},b="onreadystatechange",m=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){m.call(t.data)};h&&p||(h=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++g]=function(){s("function"==typeof t?t:Function(t),e)},r(g),g},p=function(t){delete v[t]},"process"==t("./$.cof")(f)?r=function(t){f.nextTick(a(m,t,1))}:d?(o=new d,i=o.port2,o.port1.onmessage=y,r=a(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",y,!1)):r=b in c("script")?function(t){u.appendChild(c("script"))[b]=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(a(m,t,1),0)}),e.exports={set:h,clear:p}},{"./$.cof":11,"./$.ctx":13,"./$.dom-create":16,"./$.global":20,"./$.html":23,"./$.invoke":24}],49:[function(t,e,n){var r=Math.ceil,o=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?o:r)(t)}},{}],50:[function(t,e,n){var r=t("./$.iobject"),o=t("./$.defined");e.exports=function(t){return r(o(t))}},{"./$.defined":14,"./$.iobject":25}],51:[function(t,e,n){var r=t("./$.to-integer"),o=Math.min;e.exports=function(t){return t>0?o(r(t),9007199254740991):0}},{"./$.to-integer":49}],52:[function(t,e,n){var r=0,o=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+o).toString(36))}},{}],53:[function(t,e,n){var r=t("./$.shared")("wks"),o=t("./$.uid"),i=t("./$.global").Symbol;e.exports=function(t){return r[t]||(r[t]=i&&i[t]||(i||o)("Symbol."+t))}},{"./$.global":20,"./$.shared":44,"./$.uid":52}],54:[function(t,e,n){var r=t("./$.classof"),o=t("./$.wks")("iterator"),i=t("./$.iterators");e.exports=t("./$.core").getIteratorMethod=function(t){return void 0!=t?t[o]||t["@@iterator"]||i[r(t)]:void 0}},{"./$.classof":10,"./$.core":12,"./$.iterators":33,"./$.wks":53}],55:[function(t,e,n){"use strict";var r=t("./$.add-to-unscopables"),o=t("./$.iter-step"),i=t("./$.iterators"),a=t("./$.to-iobject");e.exports=t("./$.iter-define")(Array,"Array",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):"keys"==e?o(0,n):"values"==e?o(0,t[n]):o(0,[n,t[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},{"./$.add-to-unscopables":8,"./$.iter-define":30,"./$.iter-step":32,"./$.iterators":33,"./$.to-iobject":50}],56:[function(t,e,n){},{}],57:[function(t,e,n){"use strict";var r,o=t("./$"),i=t("./$.library"),a=t("./$.global"),s=t("./$.ctx"),u=t("./$.classof"),c=t("./$.export"),l=t("./$.is-object"),f=t("./$.an-object"),h=t("./$.a-function"),p=t("./$.strict-new"),d=t("./$.for-of"),g=t("./$.set-proto").set,v=t("./$.same-value"),b=t("./$.wks")("species"),m=t("./$.species-constructor"),y=t("./$.microtask"),w="Promise",$=a.process,x="process"==u($),E=a[w],j=function(t){var e=new E(function(){});return t&&(e.constructor=Object),E.resolve(e)===e},k=function(){function e(t){var n=new E(t);return g(n,e.prototype),n}var n=!1;try{if(n=E&&E.resolve&&j(),g(e,E),e.prototype=o.create(E.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(n=!1),n&&t("./$.descriptors")){var r=!1;E.resolve(o.setDesc({},"then",{get:function(){r=!0}})),n=r}}catch(i){n=!1}return n}(),F=function(t,e){return i&&t===E&&e===r?!0:v(t,e)},S=function(t){var e=f(t)[b];return void 0!=e?e:t},_=function(t){var e;return l(t)&&"function"==typeof(e=t.then)?e:!1},A=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r}),this.resolve=h(e),this.reject=h(n)},O=function(t){try{t()}catch(e){return{error:e}}},T=function(t,e){if(!t.n){t.n=!0;var n=t.c;y(function(){for(var r=t.v,o=1==t.s,i=0,s=function(e){var n,i,a=o?e.ok:e.fail,s=e.resolve,u=e.reject;try{a?(o||(t.h=!0),n=a===!0?r:a(r),n===e.promise?u(TypeError("Promise-chain cycle")):(i=_(n))?i.call(n,s,u):s(n)):u(r)}catch(c){u(c)}};n.length>i;)s(n[i++]);n.length=0,t.n=!1,e&&setTimeout(function(){var e,n,o=t.p;M(o)&&(x?$.emit("unhandledRejection",r,o):(e=a.onunhandledrejection)?e({promise:o,reason:r}):(n=a.console)&&n.error&&n.error("Unhandled promise rejection",r)),t.a=void 0},1)})}},M=function(t){var e,n=t._d,r=n.a||n.c,o=0;if(n.h)return!1;for(;r.length>o;)if(e=r[o++],e.fail||!M(e.promise))return!1;return!0},C=function(t){var e=this;e.d||(e.d=!0,e=e.r||e,e.v=t,e.s=2,e.a=e.c.slice(),T(e,!0))},R=function(t){var e,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===t)throw TypeError("Promise can't be resolved itself");(e=_(t))?y(function(){var r={r:n,d:!1};try{e.call(t,s(R,r,1),s(C,r,1))}catch(o){C.call(r,o)}}):(n.v=t,n.s=1,T(n,!1))}catch(r){C.call({r:n,d:!1},r)}}};k||(E=function(t){h(t);var e=this._d={p:p(this,E,w),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(s(R,e,1),s(C,e,1))}catch(n){C.call(e,n)}},t("./$.redefine-all")(E.prototype,{then:function(t,e){var n=new A(m(this,E)),r=n.promise,o=this._d;return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,o.c.push(n),
-o.a&&o.a.push(n),o.s&&T(o,!1),r},"catch":function(t){return this.then(void 0,t)}})),c(c.G+c.W+c.F*!k,{Promise:E}),t("./$.set-to-string-tag")(E,w),t("./$.set-species")(w),r=t("./$.core")[w],c(c.S+c.F*!k,w,{reject:function(t){var e=new A(this),n=e.reject;return n(t),e.promise}}),c(c.S+c.F*(!k||j(!0)),w,{resolve:function(t){if(t instanceof E&&F(t.constructor,this))return t;var e=new A(this),n=e.resolve;return n(t),e.promise}}),c(c.S+c.F*!(k&&t("./$.iter-detect")(function(t){E.all(t)["catch"](function(){})})),w,{all:function(t){var e=S(this),n=new A(e),r=n.resolve,i=n.reject,a=[],s=O(function(){d(t,!1,a.push,a);var n=a.length,s=Array(n);n?o.each.call(a,function(t,o){var a=!1;e.resolve(t).then(function(t){a||(a=!0,s[o]=t,--n||r(s))},i)}):r(s)});return s&&i(s.error),n.promise},race:function(t){var e=S(this),n=new A(e),r=n.reject,o=O(function(){d(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},{"./$":34,"./$.a-function":7,"./$.an-object":9,"./$.classof":10,"./$.core":12,"./$.ctx":13,"./$.descriptors":15,"./$.export":17,"./$.for-of":19,"./$.global":20,"./$.is-object":27,"./$.iter-detect":31,"./$.library":35,"./$.microtask":36,"./$.redefine-all":38,"./$.same-value":40,"./$.set-proto":41,"./$.set-species":42,"./$.set-to-string-tag":43,"./$.species-constructor":45,"./$.strict-new":46,"./$.wks":53}],58:[function(t,e,n){"use strict";var r=t("./$.string-at")(!0);t("./$.iter-define")(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},{"./$.iter-define":30,"./$.string-at":47}],59:[function(t,e,n){t("./es6.array.iterator");var r=t("./$.iterators");r.NodeList=r.HTMLCollection=r.Array},{"./$.iterators":33,"./es6.array.iterator":55}],60:[function(t,e,n){"use strict";function r(t){var e=function n(e,r){var o=altspace.getGamepads().find(function(e){return"steamvr"===e.mapping&&e.hand===t});o?(console.log("SteamVR input device found",o),e(o)):(console.log("SteamVR input device not found trying again in 500ms..."),setTimeout(n,500,e,r))};return new a(e)}var o=t("babel-runtime/helpers/create-class")["default"],i=t("babel-runtime/helpers/class-call-check")["default"],a=t("babel-runtime/core-js/promise")["default"],s=function(){function t(){i(this,t),this.type="SteamVRInput"}return o(t,[{key:"awake",value:function(){var e=this;this.leftControllerPromise=r(t.LEFT_CONTROLLER),this.rightControllerPromise=r(t.RIGHT_CONTROLLER),this.firstControllerPromise=a.race([this.leftControllerPromise,this.rightControllerPromise]),this.leftControllerPromise.then(function(t){e.leftController=t}),this.rightControllerPromise.then(function(t){e.rightController=t}),this.firstControllerPromise.then(function(n){e.firstController=n;var r=n.axes.map(function(){return!1}),o=n.buttons.map(function(){return!1});o[t.BUTTON_TRIGGER]=!0,o[t.BUTTON_TOUCHPAD]=!0,n.preventDefault(r,o)})}}]),t}();s.BUTTON_TRIGGER=0,s.BUTTON_GRIP=1,s.BUTTON_TOUCHPAD=2,s.BUTTON_DPAD_UP=3,s.BUTTON_DPAD_RIGHT=4,s.BUTTON_DPAD_DOWN=5,s.BUTTON_DPAD_LEFT=6,s.AXIS_TOUCHPAD_X=0,s.AXIS_TOUCHPAD_Y=1,s.FIRST_CONTROLLER="first",s.LEFT_CONTROLLER="left",s.RIGHT_CONTROLLER="right",window.altspace.utilities.behaviors.SteamVRInput=s},{"babel-runtime/core-js/promise":2,"babel-runtime/helpers/class-call-check":3,"babel-runtime/helpers/create-class":4}]},{},[60]),function o(t,e,n){function r(a,s){if(!e[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=e[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return r(n?n:e)},l,l.exports,o,t,e,n)}return e[a].exports}for(var i="function"==typeof require&&require,a=0;a=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},{"./$.iter-define":30,"./$.string-at":47}],59:[function(t,e,n){t("./es6.array.iterator");var r=t("./$.iterators");r.NodeList=r.HTMLCollection=r.Array},{"./$.iterators":33,"./es6.array.iterator":55}],60:[function(t,e,n){"use strict";function r(t){var e=function n(e,r){var o=altspace.getGamepads().find(function(e){return"steamvr"===e.mapping&&e.hand===t});o?(console.log("SteamVR input device found",o),e(o)):(console.log("SteamVR input device not found trying again in 500ms..."),setTimeout(n,500,e,r))};return new a(e)}var o=t("babel-runtime/helpers/create-class")["default"],i=t("babel-runtime/helpers/class-call-check")["default"],a=t("babel-runtime/core-js/promise")["default"],s=function(){function t(){i(this,t),this.type="SteamVRInput"}return o(t,[{key:"awake",value:function(){var e=this;this.leftControllerPromise=r(t.LEFT_CONTROLLER),this.rightControllerPromise=r(t.RIGHT_CONTROLLER),this.firstControllerPromise=a.race([this.leftControllerPromise,this.rightControllerPromise]),this.leftControllerPromise.then(function(t){e.leftController=t}),this.rightControllerPromise.then(function(t){e.rightController=t}),this.firstControllerPromise.then(function(n){e.firstController=n;var r=n.axes.map(function(){return!1}),o=n.buttons.map(function(){return!1});o[t.BUTTON_TRIGGER]=!0,o[t.BUTTON_TOUCHPAD]=!0,n.preventDefault(r,o)})}}]),t}();s.BUTTON_TRIGGER=0,s.BUTTON_GRIP=1,s.BUTTON_TOUCHPAD=2,s.BUTTON_DPAD_UP=3,s.BUTTON_DPAD_RIGHT=4,s.BUTTON_DPAD_DOWN=5,s.BUTTON_DPAD_LEFT=6,s.AXIS_TOUCHPAD_X=0,s.AXIS_TOUCHPAD_Y=1,s.FIRST_CONTROLLER="first",s.LEFT_CONTROLLER="left",s.RIGHT_CONTROLLER="right",window.altspace.utilities.behaviors.SteamVRInput=s},{"babel-runtime/core-js/promise":2,"babel-runtime/helpers/class-call-check":3,"babel-runtime/helpers/create-class":4}]},{},[60]),function o(t,e,n){function r(a,s){if(!e[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=e[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return r(n?n:e)},l,l.exports,o,t,e,n)}return e[a].exports}for(var i="function"==typeof require&&require,a=0;a\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\nmodule.exports = root;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(require,module,exports){\n(function (global){\n/**\n * lodash 4.1.2 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates an hash object.\n *\n * @private\n * @constructor\n * @returns {Object} Returns the new hash object.\n */\nfunction Hash() {}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(hash, key) {\n return hashHas(hash, key) && delete hash[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @param {Object} hash The hash to query.\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(hash, key) {\n if (nativeCreate) {\n var result = hash[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(hash, key) ? hash[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @param {Object} hash The hash to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(hash, key) {\n return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n */\nfunction hashSet(hash, key, value) {\n hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n}\n\n// Avoid inheriting from `Object.prototype` when possible.\nHash.prototype = nativeCreate ? nativeCreate(null) : objectProto;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction MapCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = values[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': Map ? new Map : [],\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapDelete(key) {\n var data = this.__data__;\n if (isKeyable(key)) {\n return hashDelete(typeof key == 'string' ? data.string : data.hash, key);\n }\n return Map ? data.map['delete'](key) : assocDelete(data.map, key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapGet(key) {\n var data = this.__data__;\n if (isKeyable(key)) {\n return hashGet(typeof key == 'string' ? data.string : data.hash, key);\n }\n return Map ? data.map.get(key) : assocGet(data.map, key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapHas(key) {\n var data = this.__data__;\n if (isKeyable(key)) {\n return hashHas(typeof key == 'string' ? data.string : data.hash, key);\n }\n return Map ? data.map.has(key) : assocHas(data.map, key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapSet(key, value) {\n var data = this.__data__;\n if (isKeyable(key)) {\n hashSet(typeof key == 'string' ? data.string : data.hash, key, value);\n } else if (Map) {\n data.map.set(key, value);\n } else {\n assocSet(data.map, key, value);\n }\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapClear;\nMapCache.prototype['delete'] = mapDelete;\nMapCache.prototype.get = mapGet;\nMapCache.prototype.has = mapHas;\nMapCache.prototype.set = mapSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction Stack(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = values[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = { 'array': [], 'map': null };\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n array = data.array;\n\n return array ? assocDelete(array, key) : data.map['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n var data = this.__data__,\n array = data.array;\n\n return array ? assocGet(array, key) : data.map.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n var data = this.__data__,\n array = data.array;\n\n return array ? assocHas(array, key) : data.map.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__,\n array = data.array;\n\n if (array) {\n if (array.length < (LARGE_ARRAY_SIZE - 1)) {\n assocSet(array, key, value);\n } else {\n data.array = null;\n data.map = new MapCache(array);\n }\n }\n var map = data.map;\n if (map) {\n map.set(key, value);\n }\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Removes `key` and its value from the associative array.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction assocDelete(array, key) {\n var index = assocIndexOf(array, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = array.length - 1;\n if (index == lastIndex) {\n array.pop();\n } else {\n splice.call(array, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the associative array value for `key`.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction assocGet(array, key) {\n var index = assocIndexOf(array, key);\n return index < 0 ? undefined : array[index][1];\n}\n\n/**\n * Checks if an associative array value for `key` exists.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction assocHas(array, key) {\n return assocIndexOf(array, key) > -1;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * Sets the associative array `key` to `value`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n */\nfunction assocSet(array, key, value) {\n var index = assocIndexOf(array, key);\n if (index < 0) {\n array.push([key, value]);\n } else {\n array[index][1] = value;\n }\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return type == 'number' || type == 'boolean' ||\n (type == 'string' && value != '__proto__') || value == null;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(funcToString.call(value));\n }\n return isObjectLike(value) &&\n (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = Stack;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],3:[function(require,module,exports){\n/**\n * lodash 4.1.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nvar Stack = require('lodash._stack'),\n keys = require('lodash.keys'),\n root = require('lodash._root');\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to an array.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Converts `set` to an array.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetPrototype = Object.getPrototypeOf;\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = DataView ? (DataView + '') : '',\n mapCtorString = Map ? funcToString.call(Map) : '',\n promiseCtorString = Promise ? funcToString.call(Promise) : '',\n setCtorString = Set ? funcToString.call(Set) : '',\n weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : '';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,\n // that are composed entirely of index properties, return `false` for\n // `hasOwnProperty` checks of them.\n return hasOwnProperty.call(object, key) ||\n (typeof object == 'object' && key in object && getPrototype(object) === null);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var index = -1,\n isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n isUnordered = bitmask & UNORDERED_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked) {\n return stacked == other;\n }\n var result = true;\n stack.set(array, other);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (isUnordered) {\n if (!arraySome(other, function(othValue) {\n return arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack);\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n // Coerce dates and booleans to numbers, dates to milliseconds and\n // booleans to `1` or `0` treating invalid dates coerced to `NaN` as\n // not equal.\n return +object == +other;\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case numberTag:\n // Treat `NaN` vs. `NaN` as equal.\n return (object != +object) ? other != +other : object == +other;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n stack.set(object, other);\n\n // Recursively compare objects (susceptible to call stack limits).\n return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : baseHas(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `[[Prototype]]` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {null|Object} Returns the `[[Prototype]]`.\n */\nfunction getPrototype(value) {\n return nativeGetPrototype(Object(value));\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction getTag(value) {\n return objectToString.call(value);\n}\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : null,\n ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @type {Function}\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent,\n * else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length,\n * else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(funcToString.call(value));\n }\n return isObjectLike(value) &&\n (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\nmodule.exports = isEqual;\n\n},{\"lodash._root\":1,\"lodash._stack\":2,\"lodash.keys\":4}],4:[function(require,module,exports){\n/**\n * lodash 4.0.6 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n stringTag = '[object String]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetPrototype = Object.getPrototypeOf,\n nativeKeys = Object.keys;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,\n // that are composed entirely of index properties, return `false` for\n // `hasOwnProperty` checks of them.\n return hasOwnProperty.call(object, key) ||\n (typeof object == 'object' && key in object && getPrototype(object) === null);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't skip the constructor\n * property of prototypes or treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n return nativeKeys(Object(object));\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a\n * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects\n * Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Gets the `[[Prototype]]` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {null|Object} Returns the `[[Prototype]]`.\n */\nfunction getPrototype(value) {\n return nativeGetPrototype(Object(value));\n}\n\n/**\n * Creates an array of index keys for `object` values of arrays,\n * `arguments` objects, and strings, otherwise `null` is returned.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array|null} Returns index keys, else `null`.\n */\nfunction indexKeys(object) {\n var length = object ? object.length : undefined;\n if (isLength(length) &&\n (isArray(object) || isString(object) || isArguments(object))) {\n return baseTimes(length, String);\n }\n return null;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @type {Function}\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value)) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length,\n * else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n var isProto = isPrototype(object);\n if (!(isProto || isArrayLike(object))) {\n return baseKeys(object);\n }\n var indexes = indexKeys(object),\n skipIndexes = !!indexes,\n result = indexes || [],\n length = result.length;\n\n for (var key in object) {\n if (baseHas(object, key) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length))) &&\n !(isProto && key == 'constructor')) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keys;\n\n},{}],5:[function(require,module,exports){\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The Object3DSync behavior syncs an object's transform and data. \r\n * **Note:** Object3DSync must be used in conjunction with \r\n * [SceneSync]{@link module:altspace/utilities/behaviors.SceneSync}\r\n *\r\n * @class Object3DSync\r\n * @param {Object} [config]\r\n * @param {Boolean} [config.position=false] Whether object's position should\r\n * be synced\r\n * @param {Boolean} [config.rotation=false] Whether object's rotation should\r\n * be synced\r\n * @param {Boolean} [config.scale=false] Whether object's scale should\r\n * be synced\r\n * @param {Boolean} [config.auto=false] Whether the object should be synced \r\n * automatically. Not currently recommended.\r\n * @param {Boolean} [config.world=false] Whether world coordiantes should\r\n * be sent when synchronizing position and rotation, instead of the\r\n * transformation relative to the object's parent. Use if synced object\r\n * is a child (e.g. of the tracking skeleton) only in the sender scene.\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\nwindow.altspace.utilities.behaviors.Object3DSync = function (config){\r\n\tconfig = config || {};\r\n\t/*if (config.position === undefined) config.position = true;\r\n\tif (config.rotation === undefined) config.rotation = true;\r\n\tif (config.scale === undefined) config.scale = true; */\r\n\tvar object3d;\r\n\tvar scene;\r\n\tvar ref;\r\n\tvar key;\r\n\tvar dataRef;\r\n\tvar ownerRef;\r\n\tvar transformRef;\r\n\r\n\tvar sceneSync;\r\n\tvar isMine = false;\r\n\r\n\tvar position = new THREE.Vector3();\r\n\tvar quaternion = new THREE.Quaternion(); \r\n\tvar scale = new THREE.Vector3();\r\n\tvar isEqual = require('lodash.isequal');\r\n\r\n\r\n\tfunction link(objectRef, sS) {\r\n\t\tref = objectRef;\r\n\t\tkey = ref.key();\r\n\t\ttransformRef = ref.child('batch');\r\n\t\tdataRef = ref.child('data');\r\n\t\townerRef = ref.child('owner');\r\n\t\tsceneSync = sS;\r\n\t}\r\n\r\n\t//TODO: lerp\r\n\tfunction setupReceive() {\r\n\t\ttransformRef.on('value', function (snapshot) {\r\n\r\n\t\t\tif (isMine) return;\r\n\r\n\t\t\tvar value = snapshot.val();\r\n\t\t\tif (!value) return;\r\n\r\n\t\t\tif (config.position) {\r\n\t\t\t\tobject3d.position.set(value.position.x, value.position.y, value.position.z);\r\n\t\t\t}\r\n\t\t\tif (config.rotation) {\r\n\t\t\t\tobject3d.quaternion.set(value.quaternion.x, value.quaternion.y, value.quaternion.z, value.quaternion.w);\r\n\t\t\t}\r\n\t\t\tif (config.scale) {\r\n\t\t\t\tobject3d.scale.set(value.scale.x, value.scale.y, value.scale.z);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\townerRef.on('value', function (snapshot) {\r\n\t\t\tvar newOwnerId = snapshot.val();\r\n\r\n\t\t\tvar gained = newOwnerId === sceneSync.clientId && !isMine;\r\n\t\t\tif (gained) object3d.dispatchEvent({ type: 'ownershipgained' });\r\n\r\n\t\t\tvar lost = newOwnerId !== sceneSync.clientId && isMine;\r\n\t\t\tif (lost) object3d.dispatchEvent({ type: 'ownershiplost' });\r\n\t\t\t\r\n\t\t\tisMine = newOwnerId === sceneSync.clientId;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction send() {\r\n\t\tif (!isMine) return;\r\n\r\n\t\tvar transform = {};\r\n\t\tif (config.world) {\r\n\t\t\tobject3d.updateMatrixWorld();//call before sending to avoid being a frame behind\r\n\t\t\tobject3d.matrixWorld.decompose(position, quaternion, scale); \r\n\t\t} else {\r\n\t\t\tposition = object3d.position;\r\n\t\t\tquaternion = object3d.quaternion;\r\n\t\t\tscale = object3d.scale;\r\n\t\t}\r\n\t\tif (config.position) {\r\n\t\t\ttransform.position = {\r\n\t\t\t\tx: position.x,\r\n\t\t\t\ty: position.y,\r\n\t\t\t\tz: position.z\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (config.rotation) {\r\n\t\t\ttransform.quaternion = {\r\n\t\t\t\tx: quaternion.x,\r\n\t\t\t\ty: quaternion.y,\r\n\t\t\t\tz: quaternion.z,\r\n\t\t\t\tw: quaternion.w\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (config.scale) {\r\n\t\t\ttransform.scale = {\r\n\t\t\t\tx: scale.x,\r\n\t\t\t\ty: scale.y,\r\n\t\t\t\tz: scale.z\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (Object.keys(transform).length > 0) {\r\n\t\t\tif (isEqual(transform, this.lastTransform)) { return; }\r\n\t\t\ttransformRef.set(transform);\r\n\t\t\tthis.lastTransform = transform;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\r\n\t\tsetupReceive();\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * Take ownership of this object. The client that instantiates an object owns it,\r\n\t * afterwards changes in ownership must be managed by the app. Manual modifications\r\n\t * to the Firebase ref's will not obey ownership status.\r\n\t * @instance\r\n\t * @method takeOwnership\r\n\t * @memberof module:altspace/utilities/behaviors.Object3DSync\r\n\t */\r\n\tfunction takeOwnership() {\r\n\t\townerRef.set(sceneSync.clientId);\r\n\t}\r\n\r\n\tvar exports = { awake: awake, update: update, type: 'Object3DSync', link: link, autoSend: send, takeOwnership: takeOwnership };\r\n\r\n\t/**\r\n\t * Firebase reference for the 'data' child location, can be used to store data related to\r\n\t * this object.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {Firebase} dataRef\r\n\t * @memberof module:altspace/utilities/behaviors.Object3DSync\r\n\t */\r\n\tObject.defineProperty(exports, 'dataRef', {\r\n\t\tget: function () {\r\n\t\t\treturn dataRef;\r\n\t\t}\r\n\t});\r\n\r\n\t/**\r\n\t * True if this object is currently owned by this client, false otherwise.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {boolean} isMine\r\n\t * @memberof module:altspace/utilities/behaviors.Object3DSync\r\n\t */\r\n\tObject.defineProperty(exports, 'isMine', {\r\n\t\tget: function () {\r\n\t\t\treturn isMine;\r\n\t\t}\r\n\t});\r\n\r\n\treturn exports;\r\n};\r\n\r\n//manual modifications to the ref's will not obey ownership status.\r\n\n},{\"lodash.isequal\":3}]},{},[5]);\n\n/*!Please JS v0.4.2, Jordan Checkman 2014, Checkman.io, MIT License, Have fun.*/\r\n!function(e,r,a){\"function\"==typeof define&&define.amd?define([],a):\"object\"==typeof exports?module.exports=a():r[e]=a()}(\"Please\",this,function(){\"use strict\";function e(){function e(e,r,a){var o=Math.random;return a instanceof l&&(o=a.random),Math.floor(o()*(r-e+1))+e}function r(e,r,a){var o=Math.random;return a instanceof l&&(o=a.random),o()*(r-e)+e}function a(e,r,a){return Math.max(r,Math.min(e,a))}function o(e,r){var a;switch(e){case\"hex\":for(a=0;a=128?\"dark\":\"light\"}function t(e){var r={};for(var a in e)e.hasOwnProperty(a)&&(r[a]=e[a]);return r}function l(e){function r(){o=(o+1)%256,n=(n+a[o])%256;var e=a[o];return a[o]=a[n],a[n]=e,a[(a[o]+a[n])%256]}for(var a=[],o=0,n=0,t=0;256>t;t++)a[t]=t;for(var l=0,F=0;256>l;l++){F=(F+a[l]+e.charCodeAt(l%e.length))%256;var s=a[l];a[l]=a[F],a[F]=s}this.random=function(){for(var e=0,a=0,o=1;8>e;e++)a+=r()*o,o*=256;return a/0x10000000000000000}}var F={},s={aliceblue:\"F0F8FF\",antiquewhite:\"FAEBD7\",aqua:\"00FFFF\",aquamarine:\"7FFFD4\",azure:\"F0FFFF\",beige:\"F5F5DC\",bisque:\"FFE4C4\",black:\"000000\",blanchedalmond:\"FFEBCD\",blue:\"0000FF\",blueviolet:\"8A2BE2\",brown:\"A52A2A\",burlywood:\"DEB887\",cadetblue:\"5F9EA0\",chartreuse:\"7FFF00\",chocolate:\"D2691E\",coral:\"FF7F50\",cornflowerblue:\"6495ED\",cornsilk:\"FFF8DC\",crimson:\"DC143C\",cyan:\"00FFFF\",darkblue:\"00008B\",darkcyan:\"008B8B\",darkgoldenrod:\"B8860B\",darkgray:\"A9A9A9\",darkgrey:\"A9A9A9\",darkgreen:\"006400\",darkkhaki:\"BDB76B\",darkmagenta:\"8B008B\",darkolivegreen:\"556B2F\",darkorange:\"FF8C00\",darkorchid:\"9932CC\",darkred:\"8B0000\",darksalmon:\"E9967A\",darkseagreen:\"8FBC8F\",darkslateblue:\"483D8B\",darkslategray:\"2F4F4F\",darkslategrey:\"2F4F4F\",darkturquoise:\"00CED1\",darkviolet:\"9400D3\",deeppink:\"FF1493\",deepskyblue:\"00BFFF\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1E90FF\",firebrick:\"B22222\",floralwhite:\"FFFAF0\",forestgreen:\"228B22\",fuchsia:\"FF00FF\",gainsboro:\"DCDCDC\",ghostwhite:\"F8F8FF\",gold:\"FFD700\",goldenrod:\"DAA520\",gray:\"808080\",grey:\"808080\",green:\"008000\",greenyellow:\"ADFF2F\",honeydew:\"F0FFF0\",hotpink:\"FF69B4\",indianred:\"CD5C5C\",indigo:\"4B0082\",ivory:\"FFFFF0\",khaki:\"F0E68C\",lavender:\"E6E6FA\",lavenderblush:\"FFF0F5\",lawngreen:\"7CFC00\",lemonchiffon:\"FFFACD\",lightblue:\"ADD8E6\",lightcoral:\"F08080\",lightcyan:\"E0FFFF\",lightgoldenrodyellow:\"FAFAD2\",lightgray:\"D3D3D3\",lightgrey:\"D3D3D3\",lightgreen:\"90EE90\",lightpink:\"FFB6C1\",lightsalmon:\"FFA07A\",lightseagreen:\"20B2AA\",lightskyblue:\"87CEFA\",lightslategray:\"778899\",lightslategrey:\"778899\",lightsteelblue:\"B0C4DE\",lightyellow:\"FFFFE0\",lime:\"00FF00\",limegreen:\"32CD32\",linen:\"FAF0E6\",magenta:\"FF00FF\",maroon:\"800000\",mediumaquamarine:\"66CDAA\",mediumblue:\"0000CD\",mediumorchid:\"BA55D3\",mediumpurple:\"9370D8\",mediumseagreen:\"3CB371\",mediumslateblue:\"7B68EE\",mediumspringgreen:\"00FA9A\",mediumturquoise:\"48D1CC\",mediumvioletred:\"C71585\",midnightblue:\"191970\",mintcream:\"F5FFFA\",mistyrose:\"FFE4E1\",moccasin:\"FFE4B5\",navajowhite:\"FFDEAD\",navy:\"000080\",oldlace:\"FDF5E6\",olive:\"808000\",olivedrab:\"6B8E23\",orange:\"FFA500\",orangered:\"FF4500\",orchid:\"DA70D6\",palegoldenrod:\"EEE8AA\",palegreen:\"98FB98\",paleturquoise:\"AFEEEE\",palevioletred:\"D87093\",papayawhip:\"FFEFD5\",peachpuff:\"FFDAB9\",peru:\"CD853F\",pink:\"FFC0CB\",plum:\"DDA0DD\",powderblue:\"B0E0E6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"FF0000\",rosybrown:\"BC8F8F\",royalblue:\"4169E1\",saddlebrown:\"8B4513\",salmon:\"FA8072\",sandybrown:\"F4A460\",seagreen:\"2E8B57\",seashell:\"FFF5EE\",sienna:\"A0522D\",silver:\"C0C0C0\",skyblue:\"87CEEB\",slateblue:\"6A5ACD\",slategray:\"708090\",slategrey:\"708090\",snow:\"FFFAFA\",springgreen:\"00FF7F\",steelblue:\"4682B4\",tan:\"D2B48C\",teal:\"008080\",thistle:\"D8BFD8\",tomato:\"FF6347\",turquoise:\"40E0D0\",violet:\"EE82EE\",wheat:\"F5DEB3\",white:\"FFFFFF\",whitesmoke:\"F5F5F5\",yellow:\"FFFF00\",yellowgreen:\"9ACD32\"},i=.618033988749895,u={hue:null,saturation:null,value:null,base_color:\"\",greyscale:!1,grayscale:!1,golden:!0,full_random:!1,colors_returned:1,format:\"hex\",seed:null},c={scheme_type:\"analogous\",format:\"hex\"},h={golden:!1,format:\"hex\"};return F.NAME_to_HEX=function(e){return e=e.toLowerCase(),e in s?s[e]:(console.error(\"Color name not recognized.\"),void 0)},F.NAME_to_RGB=function(e){return F.HEX_to_RGB(F.NAME_to_HEX(e))},F.NAME_to_HSV=function(e){return F.HEX_to_HSV(F.NAME_to_HEX(e))},F.HEX_to_RGB=function(e){var r=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;e=e.replace(r,function(e,r,a,o){return r+r+a+a+o+o});var a=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);return a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null},F.RGB_to_HEX=function(e){return\"#\"+((1<<24)+(e.r<<16)+(e.g<<8)+e.b).toString(16).slice(1)},F.HSV_to_RGB=function(e){var r,a,o,n,t,l,F,s,i=e.h,u=e.s,c=e.v;if(0===u)return{r:c,g:c,b:c};switch(i/=60,n=Math.floor(i),t=i-n,l=c*(1-u),F=c*(1-u*t),s=c*(1-u*(1-t)),n){case 0:r=c,a=s,o=l;break;case 1:r=F,a=c,o=l;break;case 2:r=l,a=c,o=s;break;case 3:r=l,a=F,o=c;break;case 4:r=s,a=l,o=c;break;case 5:r=c,a=l,o=F}return{r:Math.floor(255*r),g:Math.floor(255*a),b:Math.floor(255*o)}},F.RGB_to_HSV=function(e){var r=e.r/255,a=e.g/255,o=e.b/255,n=0,t=0,l=0,F=Math.min(r,Math.min(a,o)),s=Math.max(r,Math.max(a,o));if(F===s)return l=F,{h:0,s:0,v:l};var i=r===F?a-o:o===F?r-a:o-r,u=r===F?3:o===F?1:5;return n=60*(u-i/(s-F)),t=(s-F)/s,l=s,{h:n,s:t,v:l}},F.HSV_to_HEX=function(e){return F.RGB_to_HEX(F.HSV_to_RGB(e))},F.HEX_to_HSV=function(e){return F.RGB_to_HSV(F.HEX_to_RGB(e))},F.make_scheme=function(e,r){function n(e){return{h:e.h,s:e.s,v:e.v}}var l,F,s,i,u,h=t(c);if(null!==r)for(var d in r)r.hasOwnProperty(d)&&(h[d]=r[d]);var g=[e];switch(h.scheme_type.toLowerCase()){case\"monochromatic\":case\"mono\":for(u=1;2>=u;u++)l=n(e),s=l.s+.1*u,s=a(s,0,1),i=l.v+.1*u,i=a(i,0,1),l.s=s,l.v=i,g.push(l);for(u=1;2>=u;u++)l=n(e),s=l.s-.1*u,s=a(s,0,1),i=l.v-.1*u,i=a(i,0,1),l.s=s,l.v=i,g.push(l);break;case\"complementary\":case\"complement\":case\"comp\":l=n(e),l.h=(l.h+180)%360,g.push(l);break;case\"split-complementary\":case\"split-complement\":case\"split\":l=n(e),l.h=(l.h+165)%360,g.push(l),l=n(e),l.h=Math.abs((l.h-165)%360),g.push(l);break;case\"double-complementary\":case\"double-complement\":case\"double\":l=n(e),l.h=(l.h+180)%360,g.push(l),l.h=(l.h+30)%360,F=n(l),g.push(l),l.h=(l.h+180)%360,g.push(F);break;case\"analogous\":case\"ana\":for(u=1;5>=u;u++)l=n(e),l.h=(l.h+20*u)%360,g.push(l);break;case\"triadic\":case\"triad\":case\"tri\":for(u=1;3>u;u++)l=n(e),l.h=(l.h+120*u)%360,g.push(l);break;default:console.error(\"Color scheme not recognized.\")}return o(h.format.toLowerCase(),g),g},F.make_color=function(n){var s=[],c=t(u),h=null;if(null!==n)for(var d in n)n.hasOwnProperty(d)&&(c[d]=n[d]);var g=null;\"string\"==typeof c.seed&&(g=new l(c.seed)),c.base_color.length>0&&(h=c.base_color.match(/^#?([0-9a-f]{3})([0-9a-f]{3})?$/i)?F.HEX_to_HSV(c.base_color):F.NAME_to_HSV(c.base_color));for(var m=0;m\r\n */\r\n; var Url = (function() {\r\n\t\"use strict\";\r\n\r\n\tvar\r\n\t\t// mapping between what we want and element properties\r\n\t\tmap = {\r\n\t\t\tprotocol : 'protocol',\r\n\t\t\thost : 'hostname',\r\n\t\t\tport : 'port',\r\n\t\t\tpath : 'pathname',\r\n\t\t\tquery : 'search',\r\n\t\t\thash : 'hash'\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * default ports as defined by http://url.spec.whatwg.org/#default-port\r\n\t\t * We need them to fix IE behavior, @see https://github.com/Mikhus/jsurl/issues/2\r\n\t\t */\r\n\t\tdefaultPorts = {\r\n\t\t\t\"ftp\" : 21,\r\n\t\t\t\"gopher\" : 70,\r\n\t\t\t\"http\" : 80,\r\n\t\t\t\"https\" : 443,\r\n\t\t\t\"ws\" : 80,\r\n\t\t\t\"wss\" : 443\r\n\t\t},\r\n\r\n\t\tparse = function( self, url) {\r\n\t\t\tvar\r\n\t\t\t\td = document,\r\n\t\t\t\tlink = d.createElement( 'a'),\r\n\t\t\t\turl = url || d.location.href,\r\n\t\t\t\tauth = url.match( /\\/\\/(.*?)(?::(.*?))?@/) || []\r\n\t\t\t;\r\n\r\n\t\t\tlink.href = url;\r\n\r\n\t\t\tfor (var i in map) {\r\n\t\t\t\tself[i] = link[map[i]] || '';\r\n\t\t\t}\r\n\r\n\t\t\t// fix-up some parts\r\n\t\t\tself.protocol = self.protocol.replace( /:$/, '');\r\n\t\t\tself.query = self.query.replace( /^\\?/, '');\r\n\t\t\tself.hash = self.hash.replace( /^#/, '');\r\n\t\t\tself.user = auth[1] || '';\r\n\t\t\tself.pass = auth[2] || '';\r\n\t\t\tself.port = (defaultPorts[self.protocol] == self.port || self.port == 0) ? '' : self.port; // IE fix, Android browser fix\r\n\r\n\t\t\tif (!self.protocol && !/^([a-z]+:)?\\/\\//.test( url)) { // is IE and path is relative\r\n\t\t\t\tvar\r\n\t\t\t\t\tbase = new Url( d.location.href.match(/(.*\\/)/)[0]),\r\n\t\t\t\t\tbasePath = base.path.split( '/'),\r\n\t\t\t\t\tselfPath = self.path.split( '/')\r\n\t\t\t\t;\r\n\r\n\t\t\t\tbasePath.pop();\r\n\r\n\t\t\t\tfor (var i = 0, props = ['protocol','user','pass','host','port'], s = props.length; i < s; i++) {\r\n\t\t\t\t\tself[props[i]] = base[props[i]];\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (selfPath[0] == '..') { // skip all \"../\r\n\t\t\t\t\tbasePath.pop();\r\n\t\t\t\t\tselfPath.shift();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.path = (url.substring(0, 1) != '/' ? basePath.join( '/') : '') + '/' + selfPath.join( '/');\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\t// fix absolute URL's path in IE\r\n\t\t\t\tself.path = self.path.replace( /^\\/?/, '/');\r\n\t\t\t}\r\n\r\n\t\t\tparseQs( self);\r\n\t\t},\r\n\t\t\r\n\t\tdecode = function(s) {\r\n\t\t\ts = s.replace( /\\+/g, ' ');\r\n\r\n\t\t\ts = s.replace( /%([ef][0-9a-f])%([89ab][0-9a-f])%([89ab][0-9a-f])/gi,\r\n\t\t\t\tfunction( code, hex1, hex2, hex3) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tn1 = parseInt( hex1, 16) - 0xE0,\r\n\t\t\t\t\t\tn2 = parseInt( hex2, 16) - 0x80\r\n\t\t\t\t\t;\r\n\t\r\n\t\t\t\t\tif (n1 == 0 && n2 < 32) {\r\n\t\t\t\t\t\treturn code;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tn3 = parseInt( hex3, 16) - 0x80,\r\n\t\t\t\t\t\tn = (n1 << 12) + (n2 << 6) + n3\r\n\t\t\t\t\t;\r\n\t\r\n\t\t\t\t\tif (n > 0xFFFF) {\r\n\t\t\t\t\t\treturn code;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\treturn String.fromCharCode( n);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\ts = s.replace( /%([cd][0-9a-f])%([89ab][0-9a-f])/gi,\r\n\t\t\t\tfunction( code, hex1, hex2) {\r\n\t\t\t\t\tvar n1 = parseInt(hex1, 16) - 0xC0;\r\n\t\r\n\t\t\t\t\tif (n1 < 2) {\r\n\t\t\t\t\t\treturn code;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tvar n2 = parseInt(hex2, 16) - 0x80;\r\n\t\r\n\t\t\t\t\treturn String.fromCharCode( (n1 << 6) + n2);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\ts = s.replace( /%([0-7][0-9a-f])/gi,\r\n\t\t\t\tfunction( code, hex) {\r\n\t\t\t\t\treturn String.fromCharCode( parseInt(hex, 16));\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\treturn s;\r\n\t\t},\r\n\r\n\t\tparseQs = function( self) {\r\n\t\t\tvar qs = self.query;\r\n\r\n\t\t\tself.query = new (function( qs) {\r\n\t\t\t\tvar re = /([^=&]+)(=([^&]*))?/g, match;\r\n\r\n\t\t\t\twhile ((match = re.exec( qs))) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tkey = decodeURIComponent(match[1].replace(/\\+/g, ' ')),\r\n\t\t\t\t\t\tvalue = match[3] ? decode(match[3]) : ''\r\n\t\t\t\t\t;\r\n\r\n\t\t\t\t\tif (this[key] != null) {\r\n\t\t\t\t\t\tif (!(this[key] instanceof Array)) {\r\n\t\t\t\t\t\t\tthis[key] = [this[key]];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis[key].push( value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis[key] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.clear = function() {\r\n\t\t\t\t\tfor (key in this) {\r\n\t\t\t\t\t\tif (!(this[key] instanceof Function)) {\r\n\t\t\t\t\t\t\tdelete this[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis.toString = function() {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\ts = '',\r\n\t\t\t\t\t\te = encodeURIComponent\r\n\t\t\t\t\t;\r\n\r\n\t\t\t\t\tfor (var i in this) {\r\n\t\t\t\t\t\tif (this[i] instanceof Function) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this[i] instanceof Array) {\r\n\t\t\t\t\t\t\tvar len = this[i].length;\r\n\r\n\t\t\t\t\t\t\tif (len) {\r\n\t\t\t\t\t\t\t\tfor (var ii = 0; ii < len; ii++) {\r\n\t\t\t\t\t\t\t\t\ts += s ? '&' : '';\r\n\t\t\t\t\t\t\t\t\ts += e( i) + '=' + e( this[i][ii]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\telse { // parameter is an empty array, so treat as an empty argument\r\n\t\t\t\t\t\t\t\ts += (s ? '&' : '') + e( i) + '=';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ts += s ? '&' : '';\r\n\t\t\t\t\t\t\ts += e( i) + '=' + e( this[i]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn s;\r\n\t\t\t\t};\r\n\t\t\t})( qs);\r\n\t\t}\r\n\t;\r\n\r\n\treturn function( url) {\r\n\t\tthis.toString = function() {\r\n\t\t\treturn (\r\n\t\t\t\t(this.protocol && (this.protocol + '://')) +\r\n\t\t\t\t(this.user && (this.user + (this.pass && (':' + this.pass)) + '@')) +\r\n\t\t\t\t(this.host && this.host) +\r\n\t\t\t\t(this.port && (':' + this.port)) +\r\n\t\t\t\t(this.path && this.path) +\r\n\t\t\t\t(this.query.toString() && ('?' + this.query)) +\r\n\t\t\t\t(this.hash && ('#' + this.hash))\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tparse( this, url);\r\n\t};\r\n}());\r\n\n/*! @license Firebase v2.2.9\r\n License: https://www.firebase.com/terms/terms-of-service.html */\r\n(function() {var g,aa=this;function n(a){return void 0!==a}function ba(){}function ca(a){a.vb=function(){return a.uf?a.uf:a.uf=new a}}\r\nfunction da(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ea(a){return\"array\"==da(a)}function fa(a){var b=da(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length}function p(a){return\"string\"==typeof a}function ga(a){return\"number\"==typeof a}function ha(a){return\"function\"==da(a)}function ia(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b}function ja(a,b,c){return a.call.apply(a.bind,arguments)}\r\nfunction ka(a,b,c){if(!a)throw Error();if(2b?e+=\"000\":256>b?e+=\"00\":4096>b&&(e+=\"0\");return Ea[a]=e+b.toString(16)}),'\"')};function Ga(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^la()).toString(36)};var Ha;a:{var Ia=aa.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){Ha=Ja;break a}}Ha=\"\"};function Ka(){this.Wa=-1};function La(){this.Wa=-1;this.Wa=64;this.P=[];this.ne=[];this.Uf=[];this.Ld=[];this.Ld[0]=128;for(var a=1;ae;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.P[0];c=a.P[1];for(var h=a.P[2],k=a.P[3],l=a.P[4],m,e=0;80>e;e++)40>e?20>e?(f=k^c&(h^k),m=1518500249):(f=c^h^k,m=1859775393):60>e?(f=c&h|k&(c|h),m=2400959708):(f=c^h^k,m=3395469782),f=(b<<\r\n5|b>>>27)+f+l+m+d[e]&4294967295,l=k,k=h,h=(c<<30|c>>>2)&4294967295,c=b,b=f;a.P[0]=a.P[0]+b&4294967295;a.P[1]=a.P[1]+c&4294967295;a.P[2]=a.P[2]+h&4294967295;a.P[3]=a.P[3]+k&4294967295;a.P[4]=a.P[4]+l&4294967295}\r\nLa.prototype.update=function(a,b){if(null!=a){n(b)||(b=a.length);for(var c=b-this.Wa,d=0,e=this.ne,f=this.ac;dc?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:p(a)?a.charAt(c):a[c]}function Ua(a,b,c){for(var d=a.length,e=p(a)?a.split(\"\"):a,f=0;f=arguments.length?u.slice.call(a,b):u.slice.call(a,b,c)}\r\nfunction Xa(a,b){a.sort(b||Ya)}function Ya(a,b){return a>b?1:aparseFloat(a))?String(b):a})();var cb=null,db=null,eb=null;function fb(a,b){if(!fa(a))throw Error(\"encodeByteArray takes an array as a parameter\");gb();for(var c=b?db:cb,d=[],e=0;e>2,f=(f&3)<<4|k>>4,k=(k&15)<<2|m>>6,m=m&63;l||(m=64,h||(k=64));d.push(c[t],c[f],c[k],c[m])}return d.join(\"\")}\r\nfunction gb(){if(!cb){cb={};db={};eb={};for(var a=0;65>a;a++)cb[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a),db[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.\".charAt(a),eb[db[a]]=a,62<=a&&(eb[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a)]=a)}};var hb=hb||\"2.2.9\";function v(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function w(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]}function ib(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(c,a[c])}function jb(a){var b={};ib(a,function(a,d){b[a]=d});return b};function kb(a){var b=[];ib(a,function(a,d){ea(d)?Oa(d,function(d){b.push(encodeURIComponent(a)+\"=\"+encodeURIComponent(d))}):b.push(encodeURIComponent(a)+\"=\"+encodeURIComponent(d))});return b.length?\"&\"+b.join(\"&\"):\"\"}function lb(a){var b={};a=a.replace(/^\\?/,\"\").split(\"&\");Oa(a,function(a){a&&(a=a.split(\"=\"),b[a[0]]=a[1])});return b};function x(a,b,c,d){var e;dc&&(e=0===c?\"none\":\"no more than \"+c);if(e)throw Error(a+\" failed: Was called with \"+d+(1===d?\" argument.\":\" arguments.\")+\" Expects \"+e+\".\");}function z(a,b,c){var d=\"\";switch(b){case 1:d=c?\"first\":\"First\";break;case 2:d=c?\"second\":\"Second\";break;case 3:d=c?\"third\":\"Third\";break;case 4:d=c?\"fourth\":\"Fourth\";break;default:throw Error(\"errorPrefix called with argumentNumber > 4. Need to update it?\");}return a=a+\" failed: \"+(d+\" argument \")}\r\nfunction A(a,b,c,d){if((!d||n(c))&&!ha(c))throw Error(z(a,b,d)+\"must be a valid function.\");}function mb(a,b,c){if(n(c)&&(!ia(c)||null===c))throw Error(z(a,b,!0)+\"must be a valid context object.\");};function nb(a){return\"undefined\"!==typeof JSON&&n(JSON.parse)?JSON.parse(a):Aa(a)}function B(a){if(\"undefined\"!==typeof JSON&&n(JSON.stringify))a=JSON.stringify(a);else{var b=[];Ca(new Ba,a,b);a=b.join(\"\")}return a};function ob(){this.Wd=C}ob.prototype.j=function(a){return this.Wd.Y(a)};ob.prototype.toString=function(){return this.Wd.toString()};function pb(){}pb.prototype.qf=function(){return null};pb.prototype.ze=function(){return null};var qb=new pb;function rb(a,b,c){this.Rf=a;this.Ka=b;this.Kd=c}rb.prototype.qf=function(a){var b=this.Ka.Q;if(sb(b,a))return b.j().J(a);b=null!=this.Kd?new tb(this.Kd,!0,!1):this.Ka.C();return this.Rf.xc(a,b)};rb.prototype.ze=function(a,b,c){var d=null!=this.Kd?this.Kd:ub(this.Ka);a=this.Rf.oe(d,b,1,c,a);return 0===a.length?null:a[0]};function vb(){this.ub=[]}function wb(a,b){for(var c=null,d=0;db?c=c.left:0c?d=d.left:0e)a=this.Ge?a.left:a.right;else if(0===e){this.Qa.push(a);break}else this.Qa.push(a),a=this.Ge?a.right:a.left}\r\nfunction J(a){if(0===a.Qa.length)return null;var b=a.Qa.pop(),c;c=a.Ud?a.Ud(b.key,b.value):{key:b.key,value:b.value};if(a.Ge)for(b=b.left;!b.e();)a.Qa.push(b),b=b.right;else for(b=b.right;!b.e();)a.Qa.push(b),b=b.left;return c}function dc(a){if(0===a.Qa.length)return null;var b;b=a.Qa;b=b[b.length-1];return a.Ud?a.Ud(b.key,b.value):{key:b.key,value:b.value}}function ec(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:ac;this.right=null!=e?e:ac}g=ec.prototype;\r\ng.X=function(a,b,c,d,e){return new ec(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};g.count=function(){return this.left.count()+1+this.right.count()};g.e=function(){return!1};g.ia=function(a){return this.left.ia(a)||a(this.key,this.value)||this.right.ia(a)};function fc(a){return a.left.e()?a:fc(a.left)}g.Sc=function(){return fc(this).key};g.fc=function(){return this.right.e()?this.key:this.right.fc()};\r\ng.Oa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.X(null,null,null,e.left.Oa(a,b,c),null):0===d?e.X(null,b,null,null,null):e.X(null,null,null,null,e.right.Oa(a,b,c));return gc(e)};function hc(a){if(a.left.e())return ac;a.left.fa()||a.left.left.fa()||(a=ic(a));a=a.X(null,null,null,hc(a.left),null);return gc(a)}\r\ng.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.e()||c.left.fa()||c.left.left.fa()||(c=ic(c)),c=c.X(null,null,null,c.left.remove(a,b),null);else{c.left.fa()&&(c=jc(c));c.right.e()||c.right.fa()||c.right.left.fa()||(c=kc(c),c.left.left.fa()&&(c=jc(c),c=kc(c)));if(0===b(a,c.key)){if(c.right.e())return ac;d=fc(c.right);c=c.X(d.key,d.value,null,null,hc(c.right))}c=c.X(null,null,null,null,c.right.remove(a,b))}return gc(c)};g.fa=function(){return this.color};\r\nfunction gc(a){a.right.fa()&&!a.left.fa()&&(a=lc(a));a.left.fa()&&a.left.left.fa()&&(a=jc(a));a.left.fa()&&a.right.fa()&&(a=kc(a));return a}function ic(a){a=kc(a);a.right.left.fa()&&(a=a.X(null,null,null,null,jc(a.right)),a=lc(a),a=kc(a));return a}function lc(a){return a.right.X(null,null,a.color,a.X(null,null,!0,null,a.right.left),null)}function jc(a){return a.left.X(null,null,a.color,null,a.X(null,null,!0,a.left.right,null))}\r\nfunction kc(a){return a.X(null,null,!a.color,a.left.X(null,null,!a.left.color,null,null),a.right.X(null,null,!a.right.color,null,null))}function mc(){}g=mc.prototype;g.X=function(){return this};g.Oa=function(a,b){return new ec(a,b,null)};g.remove=function(){return this};g.count=function(){return 0};g.e=function(){return!0};g.ia=function(){return!1};g.Sc=function(){return null};g.fc=function(){return null};g.fa=function(){return!1};var ac=new mc;function nc(a,b){return a&&\"object\"===typeof a?(K(\".sv\"in a,\"Unexpected leaf node or priority contents\"),b[a[\".sv\"]]):a}function oc(a,b){var c=new pc;qc(a,new L(\"\"),function(a,e){c.nc(a,rc(e,b))});return c}function rc(a,b){var c=a.B().H(),c=nc(c,b),d;if(a.L()){var e=nc(a.Ca(),b);return e!==a.Ca()||c!==a.B().H()?new sc(e,M(c)):a}d=a;c!==a.B().H()&&(d=d.ga(new sc(c)));a.R(N,function(a,c){var e=rc(c,b);e!==c&&(d=d.O(a,e))});return d};function L(a,b){if(1==arguments.length){this.n=a.split(\"/\");for(var c=0,d=0;d=a.n.length?null:a.n[a.Z]}function tc(a){return a.n.length-a.Z}\r\nfunction H(a){var b=a.Z;b=this.n.length)return null;for(var a=[],b=this.Z;b=this.n.length};g.ca=function(a){if(tc(this)!==tc(a))return!1;for(var b=this.Z,c=a.Z;b<=this.n.length;b++,c++)if(this.n[b]!==a.n[c])return!1;return!0};\r\ng.contains=function(a){var b=this.Z,c=a.Z;if(tc(this)>tc(a))return!1;for(;b\");return a};var Fc=function(){var a=1;return function(){return a++}}();function K(a,b){if(!a)throw Gc(b);}function Gc(a){return Error(\"Firebase (\"+hb+\") INTERNAL ASSERT FAILED: \"+a)}\r\nfunction Hc(a){try{var b;if(\"undefined\"!==typeof atob)b=atob(a);else{gb();for(var c=eb,d=[],e=0;e>4);64!=k&&(d.push(h<<4&240|k>>2),64!=l&&d.push(k<<6&192|l))}if(8192>d.length)b=String.fromCharCode.apply(null,d);else{a=\"\";for(c=0;ca.ac?a.update(a.Ld,56-a.ac):a.update(a.Ld,a.Wa-(a.ac-56));for(var d=a.Wa-1;56<=d;d--)a.ne[d]=c&255,c/=256;Ma(a,a.ne);for(d=c=0;5>d;d++)for(var e=24;0<=e;e-=8)b[c]=a.P[d]>>e&255,++c;return fb(b)}\r\nfunction Kc(a){for(var b=\"\",c=0;ca?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function Xc(a,b){if(ea(a))for(var c=0;ca,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;--a)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;--a)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join(\"\");c=\"\";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&&\r\n(d=\"0\"+d),c+=d;return c.toLowerCase()}var Zc=/^-?\\d{1,10}$/;function Tc(a){return Zc.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function Db(a){try{a()}catch(b){setTimeout(function(){Q(\"Exception was thrown by user callback.\",b.stack||\"\");throw b;},Math.floor(0))}}function R(a,b){if(ha(a)){var c=Array.prototype.slice.call(arguments,1).slice();Db(function(){a.apply(null,c)})}};function Jc(a){for(var b=[],c=0,d=0;d=e&&(e-=55296,d++,K(de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b}function wc(a){for(var b=0,c=0;cd?b++:2048>d?b+=2:55296<=d&&56319>=d?(b+=4,c++):b+=3}return b};function $c(a){var b={},c={},d={},e=\"\";try{var f=a.split(\".\"),b=nb(Hc(f[0])||\"\"),c=nb(Hc(f[1])||\"\"),e=f[2],d=c.d||{};delete c.d}catch(h){}return{Xg:b,Bc:c,data:d,Og:e}}function ad(a){a=$c(a).Bc;return\"object\"===typeof a&&a.hasOwnProperty(\"iat\")?w(a,\"iat\"):null}function bd(a){a=$c(a);var b=a.Bc;return!!a.Og&&!!b&&\"object\"===typeof b&&b.hasOwnProperty(\"iat\")};function cd(a){this.V=a;this.g=a.o.g}function dd(a,b,c,d){var e=[],f=[];Oa(b,function(b){\"child_changed\"===b.type&&a.g.Ad(b.Le,b.Ja)&&f.push(new D(\"child_moved\",b.Ja,b.Xa))});ed(a,e,\"child_removed\",b,d,c);ed(a,e,\"child_added\",b,d,c);ed(a,e,\"child_moved\",f,d,c);ed(a,e,\"child_changed\",b,d,c);ed(a,e,Fb,b,d,c);return e}function ed(a,b,c,d,e,f){d=Pa(d,function(a){return a.type===c});Xa(d,q(a.fg,a));Oa(d,function(c){var d=fd(a,c,f);Oa(e,function(e){e.Kf(c.type)&&b.push(e.createEvent(d,a.V))})})}\r\nfunction fd(a,b,c){\"value\"!==b.type&&\"child_removed\"!==b.type&&(b.Qd=c.rf(b.Xa,b.Ja,a.g));return b}cd.prototype.fg=function(a,b){if(null==a.Xa||null==b.Xa)throw Gc(\"Should only compare child_ events.\");return this.g.compare(new F(a.Xa,a.Ja),new F(b.Xa,b.Ja))};function gd(){this.bb={}}\r\nfunction hd(a,b){var c=b.type,d=b.Xa;K(\"child_added\"==c||\"child_changed\"==c||\"child_removed\"==c,\"Only child changes supported for tracking\");K(\".priority\"!==d,\"Only non-priority child changes can be tracked.\");var e=w(a.bb,d);if(e){var f=e.type;if(\"child_added\"==c&&\"child_removed\"==f)a.bb[d]=new D(\"child_changed\",b.Ja,d,e.Ja);else if(\"child_removed\"==c&&\"child_added\"==f)delete a.bb[d];else if(\"child_removed\"==c&&\"child_changed\"==f)a.bb[d]=new D(\"child_removed\",e.Le,d);else if(\"child_changed\"==c&&\r\n\"child_added\"==f)a.bb[d]=new D(\"child_added\",b.Ja,d);else if(\"child_changed\"==c&&\"child_changed\"==f)a.bb[d]=new D(\"child_changed\",b.Ja,d,e.Le);else throw Gc(\"Illegal combination of changes: \"+b+\" occurred after \"+e);}else a.bb[d]=b};function id(a,b,c){this.Rb=a;this.qb=b;this.sb=c||null}g=id.prototype;g.Kf=function(a){return\"value\"===a};g.createEvent=function(a,b){var c=b.o.g;return new Gb(\"value\",this,new S(a.Ja,b.mc(),c))};g.Vb=function(a){var b=this.sb;if(\"cancel\"===a.Ae()){K(this.qb,\"Raising a cancel event on a listener with no cancel callback\");var c=this.qb;return function(){c.call(b,a.error)}}var d=this.Rb;return function(){d.call(b,a.$d)}};g.gf=function(a,b){return this.qb?new Hb(this,a,b):null};\r\ng.matches=function(a){return a instanceof id?a.Rb&&this.Rb?a.Rb===this.Rb&&a.sb===this.sb:!0:!1};g.tf=function(){return null!==this.Rb};function jd(a,b,c){this.ha=a;this.qb=b;this.sb=c}g=jd.prototype;g.Kf=function(a){a=\"children_added\"===a?\"child_added\":a;return(\"children_removed\"===a?\"child_removed\":a)in this.ha};g.gf=function(a,b){return this.qb?new Hb(this,a,b):null};\r\ng.createEvent=function(a,b){K(null!=a.Xa,\"Child events should have a childName.\");var c=b.mc().u(a.Xa);return new Gb(a.type,this,new S(a.Ja,c,b.o.g),a.Qd)};g.Vb=function(a){var b=this.sb;if(\"cancel\"===a.Ae()){K(this.qb,\"Raising a cancel event on a listener with no cancel callback\");var c=this.qb;return function(){c.call(b,a.error)}}var d=this.ha[a.ud];return function(){d.call(b,a.$d,a.Qd)}};\r\ng.matches=function(a){if(a instanceof jd){if(!this.ha||!a.ha)return!0;if(this.sb===a.sb){var b=pa(a.ha);if(b===pa(this.ha)){if(1===b){var b=qa(a.ha),c=qa(this.ha);return c===b&&(!a.ha[b]||!this.ha[c]||a.ha[b]===this.ha[c])}return oa(this.ha,function(b,c){return a.ha[c]===b})}}}return!1};g.tf=function(){return null!==this.ha};function kd(a){this.g=a}g=kd.prototype;g.K=function(a,b,c,d,e,f){K(a.Jc(this.g),\"A node must be indexed if only a child is updated\");e=a.J(b);if(e.Y(d).ca(c.Y(d))&&e.e()==c.e())return a;null!=f&&(c.e()?a.Da(b)?hd(f,new D(\"child_removed\",e,b)):K(a.L(),\"A child remove without an old child only makes sense on a leaf node\"):e.e()?hd(f,new D(\"child_added\",c,b)):hd(f,new D(\"child_changed\",c,b,e)));return a.L()&&c.e()?a:a.O(b,c).mb(this.g)};\r\ng.xa=function(a,b,c){null!=c&&(a.L()||a.R(N,function(a,e){b.Da(a)||hd(c,new D(\"child_removed\",e,a))}),b.L()||b.R(N,function(b,e){if(a.Da(b)){var f=a.J(b);f.ca(e)||hd(c,new D(\"child_changed\",e,b,f))}else hd(c,new D(\"child_added\",e,b))}));return b.mb(this.g)};g.ga=function(a,b){return a.e()?C:a.ga(b)};g.Na=function(){return!1};g.Wb=function(){return this};function ld(a){this.Ce=new kd(a.g);this.g=a.g;var b;a.ma?(b=md(a),b=a.g.Pc(nd(a),b)):b=a.g.Tc();this.ed=b;a.pa?(b=od(a),a=a.g.Pc(pd(a),b)):a=a.g.Qc();this.Gc=a}g=ld.prototype;g.matches=function(a){return 0>=this.g.compare(this.ed,a)&&0>=this.g.compare(a,this.Gc)};g.K=function(a,b,c,d,e,f){this.matches(new F(b,c))||(c=C);return this.Ce.K(a,b,c,d,e,f)};\r\ng.xa=function(a,b,c){b.L()&&(b=C);var d=b.mb(this.g),d=d.ga(C),e=this;b.R(N,function(a,b){e.matches(new F(a,b))||(d=d.O(a,C))});return this.Ce.xa(a,d,c)};g.ga=function(a){return a};g.Na=function(){return!0};g.Wb=function(){return this.Ce};function qd(a){this.sa=new ld(a);this.g=a.g;K(a.ja,\"Only valid if limit has been set\");this.ka=a.ka;this.Jb=!rd(a)}g=qd.prototype;g.K=function(a,b,c,d,e,f){this.sa.matches(new F(b,c))||(c=C);return a.J(b).ca(c)?a:a.Eb()=this.g.compare(this.sa.ed,f):0>=this.g.compare(f,this.sa.Gc))d=d.O(f.name,f.S),e++;else break}}else{d=b.mb(this.g);d=d.ga(C);var k,l,m;if(this.Jb){b=d.sf(this.g);k=this.sa.Gc;l=this.sa.ed;var t=td(this.g);m=function(a,b){return t(b,a)}}else b=d.Xb(this.g),k=this.sa.ed,\r\nl=this.sa.Gc,m=td(this.g);for(var e=0,y=!1;0=m(k,f)&&(y=!0),(h=y&&e=m(f,l))?e++:d=d.O(f.name,C)}return this.sa.Wb().xa(a,d,c)};g.ga=function(a){return a};g.Na=function(){return!0};g.Wb=function(){return this.sa.Wb()};\r\nfunction sd(a,b,c,d,e,f){var h;if(a.Jb){var k=td(a.g);h=function(a,b){return k(b,a)}}else h=td(a.g);K(b.Eb()==a.ka,\"\");var l=new F(c,d),m=a.Jb?ud(b,a.g):vd(b,a.g),t=a.sa.matches(l);if(b.Da(c)){for(var y=b.J(c),m=e.ze(a.g,m,a.Jb);null!=m&&(m.name==c||b.Da(m.name));)m=e.ze(a.g,m,a.Jb);e=null==m?1:h(m,l);if(t&&!d.e()&&0<=e)return null!=f&&hd(f,new D(\"child_changed\",d,c,y)),b.O(c,d);null!=f&&hd(f,new D(\"child_removed\",y,c));b=b.O(c,C);return null!=m&&a.sa.matches(m)?(null!=f&&hd(f,new D(\"child_added\",\r\nm.S,m.name)),b.O(m.name,m.S)):b}return d.e()?b:t&&0<=h(m,l)?(null!=f&&(hd(f,new D(\"child_removed\",m.S,m.name)),hd(f,new D(\"child_added\",d,c))),b.O(c,d).O(m.name,C)):b};function wd(a,b){this.ke=a;this.dg=b}function yd(a){this.U=a}\r\nyd.prototype.ab=function(a,b,c,d){var e=new gd,f;if(b.type===Xb)b.source.xe?c=zd(this,a,b.path,b.Ga,c,d,e):(K(b.source.pf,\"Unknown source.\"),f=b.source.bf,c=Ad(this,a,b.path,b.Ga,c,d,f,e));else if(b.type===Bd)b.source.xe?c=Cd(this,a,b.path,b.children,c,d,e):(K(b.source.pf,\"Unknown source.\"),f=b.source.bf,c=Dd(this,a,b.path,b.children,c,d,f,e));else if(b.type===Ed)if(b.Vd)if(b=b.path,null!=c.tc(b))c=a;else{f=new rb(c,a,d);d=a.Q.j();if(b.e()||\".priority\"===E(b))Ib(a.C())?b=c.za(ub(a)):(b=a.C().j(),\r\nK(b instanceof T,\"serverChildren would be complete if leaf node\"),b=c.yc(b)),b=this.U.xa(d,b,e);else{var h=E(b),k=c.xc(h,a.C());null==k&&sb(a.C(),h)&&(k=d.J(h));b=null!=k?this.U.K(d,h,k,H(b),f,e):a.Q.j().Da(h)?this.U.K(d,h,C,H(b),f,e):d;b.e()&&Ib(a.C())&&(d=c.za(ub(a)),d.L()&&(b=this.U.xa(b,d,e)))}d=Ib(a.C())||null!=c.tc(G);c=Fd(a,b,d,this.U.Na())}else c=Gd(this,a,b.path,b.Qb,c,d,e);else if(b.type===Zb)d=b.path,b=a.C(),f=b.j(),h=b.ea||d.e(),c=Hd(this,new Id(a.Q,new tb(f,h,b.Ub)),d,c,qb,e);else throw Gc(\"Unknown operation type: \"+\r\nb.type);e=ra(e.bb);d=c;b=d.Q;b.ea&&(f=b.j().L()||b.j().e(),h=Jd(a),(0b.compare(d,a);)J(c),d=dc(c);return c};g.sf=function(a){return this.$b(a.Qc(),a)};g.$b=function(a,b){var c=oe(this,b);if(c)return c.$b(a,function(a){return a});for(var c=this.m.$b(a.name,Sb),d=dc(c);null!=d&&0f.status){try{b=nb(f.responseText)}catch(c){Q(\"Failed to parse JSON response for \"+e+\": \"+f.responseText)}d(null,b)}else 401!==f.status&&404!==\r\nf.status&&Q(\"Got unsuccessful REST response for \"+e+\" Status: \"+f.status),d(f.status);d=null}};f.open(\"GET\",e,!0);f.send()};function Be(a,b){this.value=a;this.children=b||Ce}var Ce=new $b(function(a,b){return a===b?0:a=b&&bf(h,c.path)?d=!1:c.path.contains(h.path)&&(e=!0));f--}if(d){if(e)this.T=cf(this.na,df,G),this.Mc=0f.Mc,\"Stacking an older write on top of newer ones\");n(h)||(h=!0);f.na.push({path:b,Ga:c,kd:d,visible:h});h&&(f.T=Ue(f.T,b,c));f.Mc=d;return e?mf(a,new Wb(Pe,b,c)):[]}function nf(a,b,c,d){var e=a.jb;K(d>e.Mc,\"Stacking an older merge on top of newer ones\");e.na.push({path:b,children:c,kd:d,visible:!0});e.T=Ve(e.T,b,c);e.Mc=d;c=De(c);return mf(a,new xe(Pe,b,c))}\r\nfunction of(a,b,c){c=c||!1;var d=af(a.jb,b);if(a.jb.Rd(b)){var e=Nd;null!=d.Ga?e=e.set(G,!0):ib(d.children,function(a,b){e=e.set(new L(a),b)});return mf(a,new Oe(d.path,e,c))}return[]}function pf(a,b,c){c=De(c);return mf(a,new xe(Re,b,c))}function qf(a,b,c,d){d=rf(a,d);if(null!=d){var e=sf(d);d=e.path;e=e.Ib;b=O(d,b);c=new Wb(new Qe(!1,!0,e,!0),b,c);return tf(a,d,c)}return[]}\r\nfunction uf(a,b,c,d){if(d=rf(a,d)){var e=sf(d);d=e.path;e=e.Ib;b=O(d,b);c=De(c);c=new xe(new Qe(!1,!0,e,!0),b,c);return tf(a,d,c)}return[]}\r\nkf.prototype.Pb=function(a,b){var c=a.path,d=null,e=!1;Ke(this.ta,c,function(a,b){var f=O(a,c);d=b.gb(f);e=e||null!=gf(b);return!d});var f=this.ta.get(c);f?(e=e||null!=gf(f),d=d||f.gb(G)):(f=new ff,this.ta=this.ta.set(c,f));var h;null!=d?h=!0:(h=!1,d=C,Ne(this.ta.subtree(c),function(a,b){var c=b.gb(G);c&&(d=d.O(a,c))}));var k=null!=jf(f,a);if(!k&&!de(a.o)){var l=vf(a);K(!(l in this.lc),\"View does not exist, but we have a tag\");var m=wf++;this.lc[l]=m;this.af[\"_\"+m]=l}h=f.Pb(a,b,new ef(c,this.jb),\r\nd,h);k||e||(f=jf(f,a),h=h.concat(xf(this,a,f)));return h};\r\nkf.prototype.kb=function(a,b,c){var d=a.path,e=this.ta.get(d),f=[];if(e&&(\"default\"===a.va()||null!=jf(e,a))){f=e.kb(a,b,c);e.e()&&(this.ta=this.ta.remove(d));e=f.Ig;f=f.kg;b=-1!==Ua(e,function(a){return de(a.o)});var h=Ie(this.ta,d,function(a,b){return null!=gf(b)});if(b&&!h&&(d=this.ta.subtree(d),!d.e()))for(var d=yf(d),k=0;kf;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+=\"-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\".charAt(b[f]);K(20===c.length,\"nextPushId: Length should be 20.\");\r\nreturn c}}();function Of(){Lf.call(this,[\"online\"]);this.jc=!0;if(\"undefined\"!==typeof window&&\"undefined\"!==typeof window.addEventListener){var a=this;window.addEventListener(\"online\",function(){a.jc||(a.jc=!0,a.ge(\"online\",!0))},!1);window.addEventListener(\"offline\",function(){a.jc&&(a.jc=!1,a.ge(\"online\",!1))},!1)}}ma(Of,Lf);Of.prototype.Be=function(a){K(\"online\"===a,\"Unknown event type: \"+a);return[this.jc]};ca(Of);function Pf(){Lf.call(this,[\"visible\"]);var a,b;\"undefined\"!==typeof document&&\"undefined\"!==typeof document.addEventListener&&(\"undefined\"!==typeof document.hidden?(b=\"visibilitychange\",a=\"hidden\"):\"undefined\"!==typeof document.mozHidden?(b=\"mozvisibilitychange\",a=\"mozHidden\"):\"undefined\"!==typeof document.msHidden?(b=\"msvisibilitychange\",a=\"msHidden\"):\"undefined\"!==typeof document.webkitHidden&&(b=\"webkitvisibilitychange\",a=\"webkitHidden\"));this.Ob=!0;if(b){var c=this;document.addEventListener(b,\r\nfunction(){var b=!document[a];b!==c.Ob&&(c.Ob=b,c.ge(\"visible\",b))},!1)}}ma(Pf,Lf);Pf.prototype.Be=function(a){K(\"visible\"===a,\"Unknown event type: \"+a);return[this.Ob]};ca(Pf);var Qf=/[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/,Rf=/[\\[\\].#$\\u0000-\\u001F\\u007F]/,Sf=/^[a-zA-Z][a-zA-Z._\\-+]+$/;function Tf(a){return p(a)&&0!==a.length&&!Qf.test(a)}function Uf(a){return null===a||p(a)||ga(a)&&!Rc(a)||ia(a)&&v(a,\".sv\")}function Vf(a,b,c,d){d&&!n(b)||Wf(z(a,1,d),b,c)}\r\nfunction Wf(a,b,c){c instanceof L&&(c=new vc(c,a));if(!n(b))throw Error(a+\"contains undefined \"+yc(c));if(ha(b))throw Error(a+\"contains a function \"+yc(c)+\" with contents: \"+b.toString());if(Rc(b))throw Error(a+\"contains \"+b.toString()+\" \"+yc(c));if(p(b)&&b.length>10485760/3&&10485760=a}else if(-1=a;return!1};function tg(){var a=window.opener.frames,b;for(b=a.length-1;0<=b;b--)try{if(a[b].location.protocol===window.location.protocol&&a[b].location.host===window.location.host&&\"__winchan_relay_frame\"===a[b].name)return a[b]}catch(c){}return null}function ug(a,b,c){a.attachEvent?a.attachEvent(\"on\"+b,c):a.addEventListener&&a.addEventListener(b,c,!1)}function vg(a,b,c){a.detachEvent?a.detachEvent(\"on\"+b,c):a.removeEventListener&&a.removeEventListener(b,c,!1)}\r\nfunction wg(a){/^https?:\\/\\//.test(a)||(a=window.location.href);var b=/^(https?:\\/\\/[\\-_a-zA-Z\\.0-9:]+)/.exec(a);return b?b[1]:a}function xg(a){var b=\"\";try{a=a.replace(\"#\",\"\");var c=lb(a);c&&v(c,\"__firebase_request_key\")&&(b=w(c,\"__firebase_request_key\"))}catch(d){}return b}function yg(){var a=Qc(kg);return a.scheme+\"://\"+a.host+\"/v2\"}function zg(a){return yg()+\"/\"+a+\"/auth/channel\"};function Ag(a){var b=this;this.Ac=a;this.de=\"*\";sg(8)?this.Rc=this.zd=tg():(this.Rc=window.opener,this.zd=window);if(!b.Rc)throw\"Unable to find relay frame\";ug(this.zd,\"message\",q(this.ic,this));ug(this.zd,\"message\",q(this.Bf,this));try{Bg(this,{a:\"ready\"})}catch(c){ug(this.Rc,\"load\",function(){Bg(b,{a:\"ready\"})})}ug(window,\"unload\",q(this.zg,this))}function Bg(a,b){b=B(b);sg(8)?a.Rc.doPost(b,a.de):a.Rc.postMessage(b,a.de)}\r\nAg.prototype.ic=function(a){var b=this,c;try{c=nb(a.data)}catch(d){}c&&\"request\"===c.a&&(vg(window,\"message\",this.ic),this.de=a.origin,this.Ac&&setTimeout(function(){b.Ac(b.de,c.d,function(a,c){b.bg=!c;b.Ac=void 0;Bg(b,{a:\"response\",d:a,forceKeepWindowOpen:c})})},0))};Ag.prototype.zg=function(){try{vg(this.zd,\"message\",this.Bf)}catch(a){}this.Ac&&(Bg(this,{a:\"error\",d:\"unknown closed window\"}),this.Ac=void 0);try{window.close()}catch(b){}};Ag.prototype.Bf=function(a){if(this.bg&&\"die\"===a.data)try{window.close()}catch(b){}};function Cg(a){this.pc=Ga()+Ga()+Ga();this.Ef=a}Cg.prototype.open=function(a,b){P.set(\"redirect_request_id\",this.pc);P.set(\"redirect_request_id\",this.pc);b.requestId=this.pc;b.redirectTo=b.redirectTo||window.location.href;a+=(/\\?/.test(a)?\"\":\"?\")+kb(b);window.location=a};Cg.isAvailable=function(){return!rg()&&!qg()};Cg.prototype.Cc=function(){return\"redirect\"};var Dg={NETWORK_ERROR:\"Unable to contact the Firebase server.\",SERVER_ERROR:\"An unknown server error occurred.\",TRANSPORT_UNAVAILABLE:\"There are no login transports available for the requested method.\",REQUEST_INTERRUPTED:\"The browser redirected the page before the login request could complete.\",USER_CANCELLED:\"The user cancelled authentication.\"};function Eg(a){var b=Error(w(Dg,a),a);b.code=a;return b};function Fg(a){var b;(b=!a.window_features)||(b=pg(),b=-1!==b.indexOf(\"Fennec/\")||-1!==b.indexOf(\"Firefox/\")&&-1!==b.indexOf(\"Android\"));b&&(a.window_features=void 0);a.window_name||(a.window_name=\"_blank\");this.options=a}\r\nFg.prototype.open=function(a,b,c){function d(a){h&&(document.body.removeChild(h),h=void 0);t&&(t=clearInterval(t));vg(window,\"message\",e);vg(window,\"unload\",d);if(m&&!a)try{m.close()}catch(b){k.postMessage(\"die\",l)}m=k=void 0}function e(a){if(a.origin===l)try{var b=nb(a.data);\"ready\"===b.a?k.postMessage(y,l):\"error\"===b.a?(d(!1),c&&(c(b.d),c=null)):\"response\"===b.a&&(d(b.forceKeepWindowOpen),c&&(c(null,b.d),c=null))}catch(e){}}var f=sg(8),h,k;if(!this.options.relay_url)return c(Error(\"invalid arguments: origin of url and relay_url must match\"));\r\nvar l=wg(a);if(l!==wg(this.options.relay_url))c&&setTimeout(function(){c(Error(\"invalid arguments: origin of url and relay_url must match\"))},0);else{f&&(h=document.createElement(\"iframe\"),h.setAttribute(\"src\",this.options.relay_url),h.style.display=\"none\",h.setAttribute(\"name\",\"__winchan_relay_frame\"),document.body.appendChild(h),k=h.contentWindow);a+=(/\\?/.test(a)?\"\":\"?\")+kb(b);var m=window.open(a,this.options.window_name,this.options.window_features);k||(k=m);var t=setInterval(function(){m&&m.closed&&\r\n(d(!1),c&&(c(Eg(\"USER_CANCELLED\")),c=null))},500),y=B({a:\"request\",d:b});ug(window,\"unload\",d);ug(window,\"message\",e)}};\r\nFg.isAvailable=function(){var a;if(a=\"postMessage\"in window&&!rg())(a=qg()||\"undefined\"!==typeof navigator&&(!!pg().match(/Windows Phone/)||!!window.Windows&&/^ms-appx:/.test(location.href)))||(a=pg(),a=\"undefined\"!==typeof navigator&&\"undefined\"!==typeof window&&!!(a.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i)||a.match(/CriOS/)||a.match(/Twitter for iPhone/)||a.match(/FBAN\\/FBIOS/)||window.navigator.standalone)),a=!a;return a&&!pg().match(/PhantomJS/)};Fg.prototype.Cc=function(){return\"popup\"};function Gg(a){a.method||(a.method=\"GET\");a.headers||(a.headers={});a.headers.content_type||(a.headers.content_type=\"application/json\");a.headers.content_type=a.headers.content_type.toLowerCase();this.options=a}\r\nGg.prototype.open=function(a,b,c){function d(){c&&(c(Eg(\"REQUEST_INTERRUPTED\")),c=null)}var e=new XMLHttpRequest,f=this.options.method.toUpperCase(),h;ug(window,\"beforeunload\",d);e.onreadystatechange=function(){if(c&&4===e.readyState){var a;if(200<=e.status&&300>e.status){try{a=nb(e.responseText)}catch(b){}c(null,a)}else 500<=e.status&&600>e.status?c(Eg(\"SERVER_ERROR\")):c(Eg(\"NETWORK_ERROR\"));c=null;vg(window,\"beforeunload\",d)}};if(\"GET\"===f)a+=(/\\?/.test(a)?\"\":\"?\")+kb(b),h=null;else{var k=this.options.headers.content_type;\r\n\"application/json\"===k&&(h=B(b));\"application/x-www-form-urlencoded\"===k&&(h=kb(b))}e.open(f,a,!0);a={\"X-Requested-With\":\"XMLHttpRequest\",Accept:\"application/json;text/plain\"};za(a,this.options.headers);for(var l in a)e.setRequestHeader(l,a[l]);e.send(h)};Gg.isAvailable=function(){var a;if(a=!!window.XMLHttpRequest)a=pg(),a=!(a.match(/MSIE/)||a.match(/Trident/))||sg(10);return a};Gg.prototype.Cc=function(){return\"json\"};function Hg(a){this.pc=Ga()+Ga()+Ga();this.Ef=a}\r\nHg.prototype.open=function(a,b,c){function d(){c&&(c(Eg(\"USER_CANCELLED\")),c=null)}var e=this,f=Qc(kg),h;b.requestId=this.pc;b.redirectTo=f.scheme+\"://\"+f.host+\"/blank/page.html\";a+=/\\?/.test(a)?\"\":\"?\";a+=kb(b);(h=window.open(a,\"_blank\",\"location=no\"))&&ha(h.addEventListener)?(h.addEventListener(\"loadstart\",function(a){var b;if(b=a&&a.url)a:{try{var m=document.createElement(\"a\");m.href=a.url;b=m.host===f.host&&\"/blank/page.html\"===m.pathname;break a}catch(t){}b=!1}b&&(a=xg(a.url),h.removeEventListener(\"exit\",\r\nd),h.close(),a=new lg(null,null,{requestId:e.pc,requestKey:a}),e.Ef.requestWithCredential(\"/auth/session\",a,c),c=null)}),h.addEventListener(\"exit\",d)):c(Eg(\"TRANSPORT_UNAVAILABLE\"))};Hg.isAvailable=function(){return qg()};Hg.prototype.Cc=function(){return\"redirect\"};function Ig(a){a.callback_parameter||(a.callback_parameter=\"callback\");this.options=a;window.__firebase_auth_jsonp=window.__firebase_auth_jsonp||{}}\r\nIg.prototype.open=function(a,b,c){function d(){c&&(c(Eg(\"REQUEST_INTERRUPTED\")),c=null)}function e(){setTimeout(function(){window.__firebase_auth_jsonp[f]=void 0;wa(window.__firebase_auth_jsonp)&&(window.__firebase_auth_jsonp=void 0);try{var a=document.getElementById(f);a&&a.parentNode.removeChild(a)}catch(b){}},1);vg(window,\"beforeunload\",d)}var f=\"fn\"+(new Date).getTime()+Math.floor(99999*Math.random());b[this.options.callback_parameter]=\"__firebase_auth_jsonp.\"+f;a+=(/\\?/.test(a)?\"\":\"?\")+kb(b);\r\nug(window,\"beforeunload\",d);window.__firebase_auth_jsonp[f]=function(a){c&&(c(null,a),c=null);e()};Jg(f,a,c)};\r\nfunction Jg(a,b,c){setTimeout(function(){try{var d=document.createElement(\"script\");d.type=\"text/javascript\";d.id=a;d.async=!0;d.src=b;d.onerror=function(){var b=document.getElementById(a);null!==b&&b.parentNode.removeChild(b);c&&c(Eg(\"NETWORK_ERROR\"))};var e=document.getElementsByTagName(\"head\");(e&&0!=e.length?e[0]:document.documentElement).appendChild(d)}catch(f){c&&c(Eg(\"NETWORK_ERROR\"))}},0)}Ig.isAvailable=function(){return\"undefined\"!==typeof document&&null!=document.createElement};\r\nIg.prototype.Cc=function(){return\"json\"};function Kg(a,b,c,d){Lf.call(this,[\"auth_status\"]);this.F=a;this.ef=b;this.Tg=c;this.Me=d;this.sc=new og(a,[Cc,P]);this.nb=null;this.Te=!1;Lg(this)}ma(Kg,Lf);g=Kg.prototype;g.ye=function(){return this.nb||null};function Lg(a){P.get(\"redirect_request_id\")&&Mg(a);var b=a.sc.get();b&&b.token?(Ng(a,b),a.ef(b.token,function(c,d){Og(a,c,d,!1,b.token,b)},function(b,d){Pg(a,\"resumeSession()\",b,d)})):Ng(a,null)}\r\nfunction Qg(a,b,c,d,e,f){\"firebaseio-demo.com\"===a.F.domain&&Q(\"Firebase authentication is not supported on demo Firebases (*.firebaseio-demo.com). To secure your Firebase, create a production Firebase at https://www.firebase.com.\");a.ef(b,function(f,k){Og(a,f,k,!0,b,c,d||{},e)},function(b,c){Pg(a,\"auth()\",b,c,f)})}function Rg(a,b){a.sc.clear();Ng(a,null);a.Tg(function(a,d){if(\"ok\"===a)R(b,null);else{var e=(a||\"error\").toUpperCase(),f=e;d&&(f+=\": \"+d);f=Error(f);f.code=e;R(b,f)}})}\r\nfunction Og(a,b,c,d,e,f,h,k){\"ok\"===b?(d&&(b=c.auth,f.auth=b,f.expires=c.expires,f.token=bd(e)?e:\"\",c=null,b&&v(b,\"uid\")?c=w(b,\"uid\"):v(f,\"uid\")&&(c=w(f,\"uid\")),f.uid=c,c=\"custom\",b&&v(b,\"provider\")?c=w(b,\"provider\"):v(f,\"provider\")&&(c=w(f,\"provider\")),f.provider=c,a.sc.clear(),bd(e)&&(h=h||{},c=Cc,\"sessionOnly\"===h.remember&&(c=P),\"none\"!==h.remember&&a.sc.set(f,c)),Ng(a,f)),R(k,null,f)):(a.sc.clear(),Ng(a,null),f=a=(b||\"error\").toUpperCase(),c&&(f+=\": \"+c),f=Error(f),f.code=a,R(k,f))}\r\nfunction Pg(a,b,c,d,e){Q(b+\" was canceled: \"+d);a.sc.clear();Ng(a,null);a=Error(d);a.code=c.toUpperCase();R(e,a)}function Sg(a,b,c,d,e){Tg(a);c=new lg(d||{},{},c||{});Ug(a,[Gg,Ig],\"/auth/\"+b,c,e)}\r\nfunction Vg(a,b,c,d){Tg(a);var e=[Fg,Hg];c=ng(c);\"anonymous\"===b||\"password\"===b?setTimeout(function(){R(d,Eg(\"TRANSPORT_UNAVAILABLE\"))},0):(c.fe.window_features=\"menubar=yes,modal=yes,alwaysRaised=yeslocation=yes,resizable=yes,scrollbars=yes,status=yes,height=625,width=625,top=\"+(\"object\"===typeof screen?.5*(screen.height-625):0)+\",left=\"+(\"object\"===typeof screen?.5*(screen.width-625):0),c.fe.relay_url=zg(a.F.Db),c.fe.requestWithCredential=q(a.qc,a),Ug(a,e,\"/auth/\"+b,c,d))}\r\nfunction Mg(a){var b=P.get(\"redirect_request_id\");if(b){var c=P.get(\"redirect_client_options\");P.remove(\"redirect_request_id\");P.remove(\"redirect_client_options\");var d=[Gg,Ig],b={requestId:b,requestKey:xg(document.location.hash)},c=new lg(c,{},b);a.Te=!0;try{document.location.hash=document.location.hash.replace(/&__firebase_request_key=([a-zA-z0-9]*)/,\"\")}catch(e){}Ug(a,d,\"/auth/session\",c,function(){this.Te=!1}.bind(a))}}\r\ng.te=function(a,b){Tg(this);var c=ng(a);c.$a._method=\"POST\";this.qc(\"/users\",c,function(a,c){a?R(b,a):R(b,a,c)})};g.Ue=function(a,b){var c=this;Tg(this);var d=\"/users/\"+encodeURIComponent(a.email),e=ng(a);e.$a._method=\"DELETE\";this.qc(d,e,function(a,d){!a&&d&&d.uid&&c.nb&&c.nb.uid&&c.nb.uid===d.uid&&Rg(c);R(b,a)})};g.qe=function(a,b){Tg(this);var c=\"/users/\"+encodeURIComponent(a.email)+\"/password\",d=ng(a);d.$a._method=\"PUT\";d.$a.password=a.newPassword;this.qc(c,d,function(a){R(b,a)})};\r\ng.pe=function(a,b){Tg(this);var c=\"/users/\"+encodeURIComponent(a.oldEmail)+\"/email\",d=ng(a);d.$a._method=\"PUT\";d.$a.email=a.newEmail;d.$a.password=a.password;this.qc(c,d,function(a){R(b,a)})};g.We=function(a,b){Tg(this);var c=\"/users/\"+encodeURIComponent(a.email)+\"/password\",d=ng(a);d.$a._method=\"POST\";this.qc(c,d,function(a){R(b,a)})};g.qc=function(a,b,c){Wg(this,[Gg,Ig],a,b,c)};\r\nfunction Ug(a,b,c,d,e){Wg(a,b,c,d,function(b,c){!b&&c&&c.token&&c.uid?Qg(a,c.token,c,d.od,function(a,b){a?R(e,a):R(e,null,b)}):R(e,b||Eg(\"UNKNOWN_ERROR\"))})}\r\nfunction Wg(a,b,c,d,e){b=Pa(b,function(a){return\"function\"===typeof a.isAvailable&&a.isAvailable()});0===b.length?setTimeout(function(){R(e,Eg(\"TRANSPORT_UNAVAILABLE\"))},0):(b=new (b.shift())(d.fe),d=jb(d.$a),d.v=\"js-\"+hb,d.transport=b.Cc(),d.suppress_status_codes=!0,a=yg()+\"/\"+a.F.Db+c,b.open(a,d,function(a,b){if(a)R(e,a);else if(b&&b.error){var c=Error(b.error.message);c.code=b.error.code;c.details=b.error.details;R(e,c)}else R(e,null,b)}))}\r\nfunction Ng(a,b){var c=null!==a.nb||null!==b;a.nb=b;c&&a.ge(\"auth_status\",b);a.Me(null!==b)}g.Be=function(a){K(\"auth_status\"===a,'initial event must be of type \"auth_status\"');return this.Te?null:[this.nb]};function Tg(a){var b=a.F;if(\"firebaseio.com\"!==b.domain&&\"firebaseio-demo.com\"!==b.domain&&\"auth.firebase.com\"===kg)throw Error(\"This custom Firebase server ('\"+a.F.domain+\"') does not support delegated login.\");};function Xg(a){this.ic=a;this.Nd=[];this.Sb=0;this.re=-1;this.Gb=null}function Yg(a,b,c){a.re=b;a.Gb=c;a.redocument.domain=\"'+document.domain+'\";\\x3c/script>');a=\"\"+a+\"\";try{this.Ea.fb.open(),this.Ea.fb.write(a),this.Ea.fb.close()}catch(f){Cb(\"frame writing exception\"),f.stack&&Cb(f.stack),Cb(f)}}\r\nch.prototype.close=function(){this.me=!1;if(this.Ea){this.Ea.fb.body.innerHTML=\"\";var a=this;setTimeout(function(){null!==a.Ea&&(document.body.removeChild(a.Ea),a.Ea=null)},Math.floor(0))}var b=this.ib;b&&(this.ib=null,b())};\r\nfunction fh(a){if(a.me&&a.Xd&&a.Qe.count()<(0=a.ad[0].kf.length+30+c.length){var e=a.ad.shift(),c=c+\"&seg\"+d+\"=\"+e.Kg+\"&ts\"+d+\"=\"+e.Sg+\"&d\"+d+\"=\"+e.kf;d++}else break;gh(a,b+c,a.ue);return!0}return!1}function gh(a,b,c){function d(){a.Qe.remove(c);fh(a)}a.Qe.add(c,1);var e=setTimeout(d,Math.floor(25E3));eh(a,b,function(){clearTimeout(e);d()})}\r\nfunction eh(a,b,c){setTimeout(function(){try{if(a.Xd){var d=a.Ea.fb.createElement(\"script\");d.type=\"text/javascript\";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&\"loaded\"!==a&&\"complete\"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){Cb(\"Long-poll script failed to load: \"+b);a.Xd=!1;a.close()};a.Ea.fb.body.appendChild(d)}}catch(e){}},Math.floor(1))};var hh=null;\"undefined\"!==typeof MozWebSocket?hh=MozWebSocket:\"undefined\"!==typeof WebSocket&&(hh=WebSocket);function ih(a,b,c){this.se=a;this.f=Nc(this.se);this.frames=this.Kc=null;this.ob=this.pb=this.cf=0;this.Va=Qb(b);this.eb=(b.lb?\"wss://\":\"ws://\")+b.Pa+\"/.ws?v=5\";\"undefined\"!==typeof location&&location.href&&-1!==location.href.indexOf(\"firebaseio.com\")&&(this.eb+=\"&r=f\");b.host!==b.Pa&&(this.eb=this.eb+\"&ns=\"+b.Db);c&&(this.eb=this.eb+\"&s=\"+c)}var jh;\r\nih.prototype.open=function(a,b){this.ib=b;this.xg=a;this.f(\"Websocket connecting to \"+this.eb);this.Hc=!1;Cc.set(\"previous_websocket_failure\",!0);try{this.ua=new hh(this.eb)}catch(c){this.f(\"Error instantiating WebSocket.\");var d=c.message||c.data;d&&this.f(d);this.hb();return}var e=this;this.ua.onopen=function(){e.f(\"Websocket connected.\");e.Hc=!0};this.ua.onclose=function(){e.f(\"Websocket connection was disconnected.\");e.ua=null;e.hb()};this.ua.onmessage=function(a){if(null!==e.ua)if(a=a.data,e.ob+=\r\na.length,Nb(e.Va,\"bytes_received\",a.length),kh(e),null!==e.frames)lh(e,a);else{a:{K(null===e.frames,\"We already have a frame buffer\");if(6>=a.length){var b=Number(a);if(!isNaN(b)){e.cf=b;e.frames=[];a=null;break a}}e.cf=1;e.frames=[]}null!==a&&lh(e,a)}};this.ua.onerror=function(a){e.f(\"WebSocket error. Closing connection.\");(a=a.message||a.data)&&e.f(a);e.hb()}};ih.prototype.start=function(){};\r\nih.isAvailable=function(){var a=!1;if(\"undefined\"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\\.[0-9]{0,})/);b&&1parseFloat(b[1])&&(a=!0)}return!a&&null!==hh&&!jh};ih.responsesRequiredToBeHealthy=2;ih.healthyTimeout=3E4;g=ih.prototype;g.Ed=function(){Cc.remove(\"previous_websocket_failure\")};function lh(a,b){a.frames.push(b);if(a.frames.length==a.cf){var c=a.frames.join(\"\");a.frames=null;c=nb(c);a.xg(c)}}\r\ng.send=function(a){kh(this);a=B(a);this.pb+=a.length;Nb(this.Va,\"bytes_sent\",a.length);a=Wc(a,16384);1=a.Mf?(a.f(\"Secondary connection is healthy.\"),a.Bb=!0,a.D.Ed(),a.D.start(),a.f(\"sending client ack on secondary\"),a.D.send({t:\"c\",d:{t:\"a\",d:{}}}),a.f(\"Ending transmission on primary\"),a.I.send({t:\"c\",d:{t:\"n\",d:{}}}),a.hd=a.D,wh(a)):(a.f(\"sending ping on secondary.\"),a.D.send({t:\"c\",d:{t:\"p\",d:{}}}))}qh.prototype.Id=function(a){yh(this);this.ic(a)};function yh(a){a.Bb||(a.Se--,0>=a.Se&&(a.f(\"Primary connection is healthy.\"),a.Bb=!0,a.I.Ed()))}\r\nfunction vh(a,b){a.D=new b(\"c:\"+a.id+\":\"+a.ff++,a.F,a.Zd);a.Mf=b.responsesRequiredToBeHealthy||0;a.D.open(sh(a,a.D),th(a,a.D));setTimeout(function(){a.D&&(a.f(\"Timed out trying to upgrade.\"),a.D.close())},Math.floor(6E4))}function uh(a,b,c){a.f(\"Realtime connection established.\");a.I=b;a.Ua=1;a.Wc&&(a.Wc(c),a.Wc=null);0===a.Se?(a.f(\"Primary connection is healthy.\"),a.Bb=!0):setTimeout(function(){zh(a)},Math.floor(5E3))}\r\nfunction zh(a){a.Bb||1!==a.Ua||(a.f(\"sending ping on primary.\"),Bh(a,{t:\"c\",d:{t:\"p\",d:{}}}))}function Bh(a,b){if(1!==a.Ua)throw\"Connection is not connected\";a.hd.send(b)}qh.prototype.close=function(){2!==this.Ua&&(this.f(\"Closing realtime connection.\"),this.Ua=2,xh(this),this.la&&(this.la(),this.la=null))};function xh(a){a.f(\"Shutting down all connections\");a.I&&(a.I.close(),a.I=null);a.D&&(a.D.close(),a.D=null);a.yd&&(clearTimeout(a.yd),a.yd=null)};function Ch(a,b,c,d){this.id=Dh++;this.f=Nc(\"p:\"+this.id+\":\");this.xf=this.Fe=!1;this.$={};this.qa=[];this.Yc=0;this.Vc=[];this.oa=!1;this.Za=1E3;this.Fd=3E5;this.Hb=b;this.Uc=c;this.Pe=d;this.F=a;this.tb=this.Aa=this.Ia=this.Xe=null;this.Ob=!1;this.Td={};this.Jg=0;this.nf=!0;this.Lc=this.He=null;Eh(this,0);Pf.vb().Fb(\"visible\",this.Ag,this);-1===a.host.indexOf(\"fblocal\")&&Of.vb().Fb(\"online\",this.yg,this)}var Dh=0,Fh=0;g=Ch.prototype;\r\ng.Fa=function(a,b,c){var d=++this.Jg;a={r:d,a:a,b:b};this.f(B(a));K(this.oa,\"sendRequest call when we're not connected not allowed.\");this.Ia.Fa(a);c&&(this.Td[d]=c)};g.yf=function(a,b,c,d){var e=a.va(),f=a.path.toString();this.f(\"Listen called for \"+f+\" \"+e);this.$[f]=this.$[f]||{};K(!this.$[f][e],\"listen() called twice for same path/queryId.\");a={G:d,xd:b,Gg:a,tag:c};this.$[f][e]=a;this.oa&&Gh(this,a)};\r\nfunction Gh(a,b){var c=b.Gg,d=c.path.toString(),e=c.va();a.f(\"Listen on \"+d+\" for \"+e);var f={p:d};b.tag&&(f.q=ce(c.o),f.t=b.tag);f.h=b.xd();a.Fa(\"q\",f,function(f){var k=f.d,l=f.s;if(k&&\"object\"===typeof k&&v(k,\"w\")){var m=w(k,\"w\");ea(m)&&0<=Na(m,\"no_index\")&&Q(\"Using an unspecified index. Consider adding \"+('\".indexOn\": \"'+c.o.g.toString()+'\"')+\" at \"+c.path.toString()+\" to your security rules for better performance\")}(a.$[d]&&a.$[d][e])===b&&(a.f(\"listen response\",f),\"ok\"!==l&&Hh(a,d,e),b.G&&b.G(l,\r\nk))})}g.N=function(a,b,c){this.Aa={gg:a,of:!1,zc:b,md:c};this.f(\"Authenticating using credential: \"+a);Ih(this);(b=40==a.length)||(a=$c(a).Bc,b=\"object\"===typeof a&&!0===w(a,\"admin\"));b&&(this.f(\"Admin auth credential detected. Reducing max reconnect time.\"),this.Fd=3E4)};g.he=function(a){delete this.Aa;this.oa&&this.Fa(\"unauth\",{},function(b){a(b.s,b.d)})};\r\nfunction Ih(a){var b=a.Aa;a.oa&&b&&a.Fa(\"auth\",{cred:b.gg},function(c){var d=c.s;c=c.d||\"error\";\"ok\"!==d&&a.Aa===b&&delete a.Aa;b.of?\"ok\"!==d&&b.md&&b.md(d,c):(b.of=!0,b.zc&&b.zc(d,c))})}g.Pf=function(a,b){var c=a.path.toString(),d=a.va();this.f(\"Unlisten called for \"+c+\" \"+d);if(Hh(this,c,d)&&this.oa){var e=ce(a.o);this.f(\"Unlisten on \"+c+\" for \"+d);c={p:c};b&&(c.q=e,c.t=b);this.Fa(\"n\",c)}};g.Ne=function(a,b,c){this.oa?Jh(this,\"o\",a,b,c):this.Vc.push({$c:a,action:\"o\",data:b,G:c})};\r\ng.Cf=function(a,b,c){this.oa?Jh(this,\"om\",a,b,c):this.Vc.push({$c:a,action:\"om\",data:b,G:c})};g.Jd=function(a,b){this.oa?Jh(this,\"oc\",a,null,b):this.Vc.push({$c:a,action:\"oc\",data:null,G:b})};function Jh(a,b,c,d,e){c={p:c,d:d};a.f(\"onDisconnect \"+b,c);a.Fa(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}g.put=function(a,b,c,d){Kh(this,\"p\",a,b,c,d)};g.zf=function(a,b,c,d){Kh(this,\"m\",a,b,c,d)};\r\nfunction Kh(a,b,c,d,e,f){d={p:c,d:d};n(f)&&(d.h=f);a.qa.push({action:b,Jf:d,G:e});a.Yc++;b=a.qa.length-1;a.oa?Lh(a,b):a.f(\"Buffering put: \"+c)}function Lh(a,b){var c=a.qa[b].action,d=a.qa[b].Jf,e=a.qa[b].G;a.qa[b].Hg=a.oa;a.Fa(c,d,function(d){a.f(c+\" response\",d);delete a.qa[b];a.Yc--;0===a.Yc&&(a.qa=[]);e&&e(d.s,d.d)})}g.Ve=function(a){this.oa&&(a={c:a},this.f(\"reportStats\",a),this.Fa(\"s\",a,function(a){\"ok\"!==a.s&&this.f(\"reportStats\",\"Error sending stats: \"+a.d)}))};\r\ng.Id=function(a){if(\"r\"in a){this.f(\"from server: \"+B(a));var b=a.r,c=this.Td[b];c&&(delete this.Td[b],c(a.b))}else{if(\"error\"in a)throw\"A server-side error has occurred: \"+a.error;\"a\"in a&&(b=a.a,c=a.b,this.f(\"handleServerMessage\",b,c),\"d\"===b?this.Hb(c.p,c.d,!1,c.t):\"m\"===b?this.Hb(c.p,c.d,!0,c.t):\"c\"===b?Mh(this,c.p,c.q):\"ac\"===b?(a=c.s,b=c.d,c=this.Aa,delete this.Aa,c&&c.md&&c.md(a,b)):\"sd\"===b?this.Xe?this.Xe(c):\"msg\"in c&&\"undefined\"!==typeof console&&console.log(\"FIREBASE: \"+c.msg.replace(\"\\n\",\r\n\"\\nFIREBASE: \")):Oc(\"Unrecognized action received from server: \"+B(b)+\"\\nAre you using the latest client?\"))}};g.Wc=function(a){this.f(\"connection ready\");this.oa=!0;this.Lc=(new Date).getTime();this.Pe({serverTimeOffset:a-(new Date).getTime()});this.nf&&(a={},a[\"sdk.js.\"+hb.replace(/\\./g,\"-\")]=1,qg()&&(a[\"framework.cordova\"]=1),this.Ve(a));Nh(this);this.nf=!1;this.Uc(!0)};\r\nfunction Eh(a,b){K(!a.Ia,\"Scheduling a connect when we're already connected/ing?\");a.tb&&clearTimeout(a.tb);a.tb=setTimeout(function(){a.tb=null;Oh(a)},Math.floor(b))}g.Ag=function(a){a&&!this.Ob&&this.Za===this.Fd&&(this.f(\"Window became visible. Reducing delay.\"),this.Za=1E3,this.Ia||Eh(this,0));this.Ob=a};g.yg=function(a){a?(this.f(\"Browser went online.\"),this.Za=1E3,this.Ia||Eh(this,0)):(this.f(\"Browser went offline. Killing connection.\"),this.Ia&&this.Ia.close())};\r\ng.Df=function(){this.f(\"data client disconnected\");this.oa=!1;this.Ia=null;for(var a=0;a=a)throw Error(\"Query.limit: First argument must be a positive integer.\");if(this.o.ja)throw Error(\"Query.limit: Limit was already set (by another call to limit, limitToFirst, orlimitToLast.\");var b=this.o.Ie(a);li(b);return new Y(this.k,this.path,b,this.kc)};\r\ng.Je=function(a){x(\"Query.limitToFirst\",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error(\"Query.limitToFirst: First argument must be a positive integer.\");if(this.o.ja)throw Error(\"Query.limitToFirst: Limit was already set (by another call to limit, limitToFirst, or limitToLast).\");return new Y(this.k,this.path,this.o.Je(a),this.kc)};\r\ng.Ke=function(a){x(\"Query.limitToLast\",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error(\"Query.limitToLast: First argument must be a positive integer.\");if(this.o.ja)throw Error(\"Query.limitToLast: Limit was already set (by another call to limit, limitToFirst, or limitToLast).\");return new Y(this.k,this.path,this.o.Ke(a),this.kc)};\r\ng.Cg=function(a){x(\"Query.orderByChild\",1,1,arguments.length);if(\"$key\"===a)throw Error('Query.orderByChild: \"$key\" is invalid. Use Query.orderByKey() instead.');if(\"$priority\"===a)throw Error('Query.orderByChild: \"$priority\" is invalid. Use Query.orderByPriority() instead.');if(\"$value\"===a)throw Error('Query.orderByChild: \"$value\" is invalid. Use Query.orderByValue() instead.');$f(\"Query.orderByChild\",1,a,!1);mi(this,\"Query.orderByChild\");var b=be(this.o,new Sd(a));ki(b);return new Y(this.k,\r\nthis.path,b,!0)};g.Dg=function(){x(\"Query.orderByKey\",0,0,arguments.length);mi(this,\"Query.orderByKey\");var a=be(this.o,Od);ki(a);return new Y(this.k,this.path,a,!0)};g.Eg=function(){x(\"Query.orderByPriority\",0,0,arguments.length);mi(this,\"Query.orderByPriority\");var a=be(this.o,N);ki(a);return new Y(this.k,this.path,a,!0)};g.Fg=function(){x(\"Query.orderByValue\",0,0,arguments.length);mi(this,\"Query.orderByValue\");var a=be(this.o,Yd);ki(a);return new Y(this.k,this.path,a,!0)};\r\ng.ae=function(a,b){x(\"Query.startAt\",0,2,arguments.length);Vf(\"Query.startAt\",a,this.path,!0);$f(\"Query.startAt\",2,b,!0);var c=this.o.ae(a,b);li(c);ki(c);if(this.o.ma)throw Error(\"Query.startAt: Starting point was already set (by another call to startAt or equalTo).\");n(a)||(b=a=null);return new Y(this.k,this.path,c,this.kc)};\r\ng.td=function(a,b){x(\"Query.endAt\",0,2,arguments.length);Vf(\"Query.endAt\",a,this.path,!0);$f(\"Query.endAt\",2,b,!0);var c=this.o.td(a,b);li(c);ki(c);if(this.o.pa)throw Error(\"Query.endAt: Ending point was already set (by another call to endAt or equalTo).\");return new Y(this.k,this.path,c,this.kc)};\r\ng.ig=function(a,b){x(\"Query.equalTo\",1,2,arguments.length);Vf(\"Query.equalTo\",a,this.path,!1);$f(\"Query.equalTo\",2,b,!0);if(this.o.ma)throw Error(\"Query.equalTo: Starting point was already set (by another call to endAt or equalTo).\");if(this.o.pa)throw Error(\"Query.equalTo: Ending point was already set (by another call to endAt or equalTo).\");return this.ae(a,b).td(a,b)};\r\ng.toString=function(){x(\"Query.toString\",0,0,arguments.length);for(var a=this.path,b=\"\",c=a.Z;c.firebaseio.com instead\");c&&\"undefined\"!=c||Pc(\"Cannot parse Firebase url. Please use https://.firebaseio.com\");d.lb||\"undefined\"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf(\"https:\")&&Q(\"Insecure Firebase access from a secure page. Please use https in calls to new Firebase().\");\r\nc=new Dc(d.host,d.lb,c,\"ws\"===d.scheme||\"wss\"===d.scheme);d=new L(d.$c);e=d.toString();var f;!(f=!p(c.host)||0===c.host.length||!Tf(c.Db))&&(f=0!==e.length)&&(e&&(e=e.replace(/^\\/*\\.info(\\/|$)/,\"/\")),f=!(p(e)&&0!==e.length&&!Rf.test(e)));if(f)throw Error(z(\"new Firebase\",1,!1)+'must be a valid firebase URL and the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');if(b)if(b instanceof W)e=b;else if(p(b))e=W.vb(),c.Od=b;else throw Error(\"Expected a valid Firebase.Context for second argument to new Firebase()\");\r\nelse e=W.vb();f=c.toString();var h=w(e.oc,f);h||(h=new Qh(c,e.Qf),e.oc[f]=h);c=h}Y.call(this,c,d,$d,!1)}ma(U,Y);var oi=U,pi=[\"Firebase\"],qi=aa;pi[0]in qi||!qi.execScript||qi.execScript(\"var \"+pi[0]);for(var ri;pi.length&&(ri=pi.shift());)!pi.length&&n(oi)?qi[ri]=oi:qi=qi[ri]?qi[ri]:qi[ri]={};U.goOffline=function(){x(\"Firebase.goOffline\",0,0,arguments.length);W.vb().zb()};U.goOnline=function(){x(\"Firebase.goOnline\",0,0,arguments.length);W.vb().rc()};\r\nfunction Mc(a,b){K(!b||!0===a||!1===a,\"Can't turn on custom loggers persistently.\");!0===a?(\"undefined\"!==typeof console&&(\"function\"===typeof console.log?Bb=q(console.log,console):\"object\"===typeof console.log&&(Bb=function(a){console.log(a)})),b&&P.set(\"logging_enabled\",!0)):a?Bb=a:(Bb=null,P.remove(\"logging_enabled\"))}U.enableLogging=Mc;U.ServerValue={TIMESTAMP:{\".sv\":\"timestamp\"}};U.SDK_VERSION=hb;U.INTERNAL=V;U.Context=W;U.TEST_ACCESS=Z;\r\nU.prototype.name=function(){Q(\"Firebase.name() being deprecated. Please use Firebase.key() instead.\");x(\"Firebase.name\",0,0,arguments.length);return this.key()};U.prototype.name=U.prototype.name;U.prototype.key=function(){x(\"Firebase.key\",0,0,arguments.length);return this.path.e()?null:uc(this.path)};U.prototype.key=U.prototype.key;\r\nU.prototype.u=function(a){x(\"Firebase.child\",1,1,arguments.length);if(ga(a))a=String(a);else if(!(a instanceof L))if(null===E(this.path)){var b=a;b&&(b=b.replace(/^\\/*\\.info(\\/|$)/,\"/\"));ag(\"Firebase.child\",b)}else ag(\"Firebase.child\",a);return new U(this.k,this.path.u(a))};U.prototype.child=U.prototype.u;U.prototype.parent=function(){x(\"Firebase.parent\",0,0,arguments.length);var a=this.path.parent();return null===a?null:new U(this.k,a)};U.prototype.parent=U.prototype.parent;\r\nU.prototype.root=function(){x(\"Firebase.ref\",0,0,arguments.length);for(var a=this;null!==a.parent();)a=a.parent();return a};U.prototype.root=U.prototype.root;U.prototype.set=function(a,b){x(\"Firebase.set\",1,2,arguments.length);bg(\"Firebase.set\",this.path);Vf(\"Firebase.set\",a,this.path,!1);A(\"Firebase.set\",2,b,!0);this.k.Kb(this.path,a,null,b||null)};U.prototype.set=U.prototype.set;\r\nU.prototype.update=function(a,b){x(\"Firebase.update\",1,2,arguments.length);bg(\"Firebase.update\",this.path);if(ea(a)){for(var c={},d=0;d' + name.toUpperCase() + '
';\r\n\t\t\tinfo.appendChild(nameEl);\r\n\r\n\t\t\tif (inTile) {\r\n\t\t\t\tvar errorMsg = 'VR mode does not support preview tiles. Stopping code execution.';\r\n\t\t\t\tconsole.log('ERROR: ' + errorMsg);\r\n\t\t\t\tthrow new Error(errorMsg);\r\n\t\t\t}\r\n\r\n\t\t\tif (!inVR) {\r\n\r\n\t\t\t\tvar launchEl = document.createElement(\"span\");\r\n\t\t\t\tlaunchEl.className = \"altspace-vr-notice\";\r\n\t\t\t\tlaunchEl.innerHTML = 'View
';\r\n\t\t\t\tinfo.insertBefore(launchEl, nameEl);\r\n\r\n\t\t\t\tvar notice = document.createElement(\"span\");\r\n\t\t\t\tnotice.className = \"altspace-vr-notice\";\r\n\t\t\t\tnotice.innerHTML = 'in AltspaceVR
';\r\n\t\t\t\tinfo.appendChild(notice);\r\n\r\n\r\n\t\t\t\tvar errorMsg = 'Not in VR mode. Stopping code execution.';\r\n\t\t\t\tif (inTile) {\r\n\t\t\t\t\tconsole.log('ERROR: ' + errorMsg);//thrown error message not displayed in console when inTile, log it\r\n\t\t\t\t}\r\n\t\t\t\tthrow new Error(errorMsg);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the name to be used by ensureInVR() \r\n\t * @method setName\r\n\t * @param {String} name\r\n\t * @memberof module:altspace/utilities/codePen\r\n\t */\r\n\tfunction setName(n) {//TODO: A better method for this would be awesome\r\n\t\tname = n;\r\n\t}\r\n\r\n\tfunction getParsedUrl() {\r\n\t\tvar canonicalElement = document.querySelector('link[rel=canonical]');\r\n\t\tvar fullUrl = canonicalElement ? canonicalElement.href : window.location.href;\r\n\t\treturn new Url(fullUrl);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns the pen ID, useful for setting the sync instanceId.\r\n\t * @method getPenId\r\n\t * @return {String}\r\n\t * @memberof module:altspace/utilities/codePen\r\n\t */\r\n\tfunction getPenId() {\r\n\t\tvar url = getParsedUrl();\r\n\t\tvar splitPath = url.path.split('/');\r\n\t\tvar id = splitPath[splitPath.length - 1];\r\n\t\treturn id;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the pen author ID, useful for setting the sync authorId.\r\n\t * @method getAuthorId\r\n\t * @return {String}\r\n\t * @memberof module:altspace/utilities/codePen\r\n\t */\r\n\tfunction getAuthorId() {\r\n\t\tvar url = getParsedUrl();\r\n\t\tvar splitPath = url.path.split('/');\r\n\t\tvar isTeam = splitPath[1] == 'team';\r\n\t\tvar id = isTeam ? 'team-' + splitPath[2] : splitPath[1];\r\n\t\treturn id;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinTile: inTile,\r\n\t\tinVR: inVR,\r\n\t\tinCodePen: inCodePen,\r\n\t\tensureInVR: ensureInVR,\r\n\t\tsetName: setName,\r\n\t\tgetPenId: getPenId,\r\n\t\tgetAuthorId: getAuthorId,\r\n\t\tprintDebugInfo: printDebugInfo\r\n\t};\r\n}());\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\n\r\n/**\r\n * @module altspace/utilities\r\n */\r\n\r\n/**\r\n * Simluation is a helper class that lets you quickly setup a three.js app with support for AltspaceVR. It creates a basic scene for you and starts the render and behavior loop.\r\n *\r\n * If all of your application logic is in behaviors, you do not need to create any additional requestAnimationFrame loops.\r\n *\r\n * It also automatically uses the WebGL renderer when running in a \r\n * desktop browser and emulates cursor events with mouse clicks.\r\n * @class Simulation\r\n * @param {Object} [config] Optional parameters.\r\n * @param {Boolean} [config.auto=true] Automatically start the render loop.\r\n * @memberof module:altspace/utilities\r\n */\r\naltspace.utilities.Simulation = function (config) {\r\n\tconfig = config || {};\r\n\tif (config.auto === undefined) config.auto = true;\r\n\r\n\tvar exports = {};\r\n\tvar scene = new THREE.Scene();\r\n\tvar renderer;\r\n\tvar camera;\r\n\r\n\tsetup();\r\n\r\n\tfunction loop() {\r\n\t\twindow.requestAnimationFrame(loop);\r\n\r\n\t\tif (scene.updateAllBehaviors)\r\n\t\t\tscene.updateAllBehaviors();\r\n\r\n\t\trenderer.render(scene, camera);\r\n\t}\r\n\r\n\tfunction setup() {\r\n\t\tfunction setupAltspace() {\r\n\t\t\trenderer = altspace.getThreeJSRenderer();\r\n\t\t\tcamera = new THREE.PerspectiveCamera(); // TODO: change from shim to symbolic\r\n\t\t\taltspace.getThreeJSTrackingSkeleton(function (s) {//TODO: this should have a non-promise version\r\n\t\t\t\tvar skeleton = s;\r\n\t\t\t\tskeleton.getJoint('Eye').add(camera);// add our virtual camera to the center eye so that it looks normal to other behaviors\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction setupWebGL() {\r\n\t\t\trenderer = new THREE.WebGLRenderer({antialias: true});\r\n\t\t\tcamera = new THREE.PerspectiveCamera();\r\n\t\t\tcamera.position.z = 500;\r\n\r\n\t\t\tvar resizeRender = function () {\r\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\r\n\t\t\t\tcamera.updateProjectionMatrix();\r\n\t\t\t\trenderer.setSize(window.innerWidth, window.innerHeight);\r\n\t\t\t};\r\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", function (event) {\r\n\t\t\t\tdocument.body.style.margin = '0px';\r\n\t\t\t\tdocument.body.style.overflow = 'hidden';\r\n\t\t\t\trenderer.setClearColor('#035F72');\r\n\t\t\t\tvar container = document.createElement('div');\r\n\t\t\t\tdocument.body.appendChild(container);\r\n\t\t\t\tcontainer.appendChild(renderer.domElement);\r\n\t\t\t});\r\n\t\t\twindow.addEventListener('resize', resizeRender);\r\n\t\t\tresizeRender();\r\n\t\t\tcamera.fov = 45;\r\n\t\t\tcamera.near = 1;\r\n\t\t\tcamera.far = 2000;\r\n\t\t\tscene.add(camera);\r\n\t\t\tscene.add(new THREE.AmbientLight('white'));\r\n\r\n\t\t\tvar shouldShimCursor = altspace && altspace.utilities && altspace.utilities.shims && altspace.utilities.shims.cursor;\r\n\t\t\tif (shouldShimCursor) altspace.utilities.shims.cursor.init(scene, camera);\r\n\t\t}\r\n\r\n\t\tif (altspace && altspace.inClient) {\r\n\t\t\tsetupAltspace();\r\n\t\t} else {\r\n\t\t\tsetupWebGL();\r\n\t\t}\r\n\t}\r\n\r\n\tif (config.auto) window.requestAnimationFrame(loop);\r\n\r\n\r\n\t/**\r\n\t * The simulation scene.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {THREE.Scene} scene\r\n\t * @memberof module:altspace/utilities.Simulation\r\n\t */\r\n\tObject.defineProperty(exports, 'scene', {\r\n\t\tget: function () {\r\n\t\t\treturn scene;\r\n\t\t}\r\n\t})\r\n\r\n\t/**\r\n\t * The renderer being used.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {(THREE.WebGLRenderer|AltRenderer)} renderer\r\n\t * @memberof module:altspace/utilities.Simulation\r\n\t */\r\n\tObject.defineProperty(exports, 'renderer', {\r\n\t\tget: function () {\r\n\t\t\treturn renderer;\r\n\t\t}\r\n\t})\r\n\r\n\t/**\r\n\t * The camera being used by the WebGL renderer.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {Three.Camera} camera\r\n\t * @memberof module:altspace/utilities.Simulation\r\n\t */\r\n\tObject.defineProperty(exports, 'camera', {\r\n\t\tget: function () {\r\n\t\t\treturn camera;\r\n\t\t},\r\n\t\tset: function (value) {\r\n\t\t\tcamera = value;\r\n\t\t}\r\n\t})\r\n\treturn exports;\r\n}\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\n\r\n\r\naltspace.utilities.multiloader = (function(){\r\n\tvar loader;\r\n\tvar TRACE;\r\n\tvar baseUrl = '';\r\n\tvar crossOrigin = '';//assigned to THREE.MTLLoader.crossOrigin\r\n\r\n\tfunction LoadRequest(){\r\n\t\t//To create loadRequst: new MultiLoader.LoadRequest()\r\n\r\n\t\tvar objUrls = [];//Paths to model geometry file, in Wavefront OBJ format.\r\n\t\tvar mtlUrls = [];//Paths to model materials file, in Wavefront MTL format.\r\n\t\tvar objects = [];//objects[i] is result of loader.load(objUrl[i], mtlUrl[i])\r\n\t\tvar error;//String indicating loading error with at least one file.\r\n\t\tvar objectsLoaded = 0;//Used internally to determine when loading complete.\r\n\r\n\t\treturn {\r\n\t\t\tobjUrls: objUrls,\r\n\t\t\tmtlUrls: mtlUrls,\r\n\t\t\tobjects: objects,\r\n\t\t\terror: error,\r\n\t\t\tobjectsLoaded: objectsLoaded\r\n\t\t};\r\n\r\n\t}//end of LoadRequest\r\n\r\n\tfunction init(params){\r\n\t\tvar p = params || {};\r\n\t\tTRACE = p.TRACE || false;\r\n\t\tif (p.crossOrigin) crossOrigin = p.crossOrigin;\r\n\t\tif (p.baseUrl) baseUrl = p.baseUrl;\r\n\t\tif (baseUrl.slice(-1) !== '/') baseUrl += '/';\r\n\r\n\t\tloader = new altspace.utilities.shims.OBJMTLLoader();\r\n\t\tloader.crossOrigin = crossOrigin;\r\n\t\tif (TRACE) console.log('MultiLoader initialized with params', params);\r\n\t}\r\n\r\n\tfunction load(loadRequest, onComplete){\r\n\t\tvar req = loadRequest;\r\n\t\tvar start = Date.now();\r\n\t\tif (!req || !req instanceof LoadRequest){\r\n\t\t\tthrow new Error('MultiLoader.load expects first arg of type LoadRequest');\r\n\t\t}\r\n\t\tif (!onComplete || typeof(onComplete) !== 'function'){\r\n\t\t\tthrow new Error('MultiLoader.load expects second arg of type function');\r\n\t\t}\r\n\t\tif (!req.objUrls || !req.mtlUrls || req.objUrls.length !== req.mtlUrls.length){\r\n\t\t\tthrow new Error('MultiLoader.load called with bad LoadRequest');\r\n\t\t}\r\n\t\tvar reqCount = req.objUrls.length;\r\n\t\tif (TRACE) console.log('Loading models...')\r\n\t\tfor (var i=0; i < reqCount; i++){\r\n\t\t\tvar loadModel = function(req, i){//We need i in the closure to store result.\r\n\t\t\t\tvar objUrl = baseUrl + req.objUrls[i];\r\n\t\t\t\tvar mtlUrl = baseUrl + req.mtlUrls[i];\r\n\t\t\t\tif (TRACE) console.log('Loading obj:'+objUrl+', mtl:'+mtlUrl);\r\n\t\t\t\tloader.load(objUrl, mtlUrl, function(object3d){//onLoaded\r\n\t\t\t\t\treq.objects[i] = object3d;\r\n\t\t\t\t\treq.objectsLoaded++;\r\n\t\t\t\t\tif(req.objectsLoaded === reqCount){\r\n\t\t\t\t\t\tvar elapsed = ((Date.now()-start)/1000.0).toFixed(2);\r\n\t\t\t\t\t\tif (TRACE) console.log('Loaded '+reqCount+' models in '+elapsed+' seconds');\r\n\t\t\t\t\t\tonComplete();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, onProgress, function(){//onError \r\n\t\t\t\t\tvar url = xhr.target.responseURL || '';\r\n\t\t\t\t\treq.error = 'Error loading file '+url;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\tloadModel(req, i);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onProgress(xhr){\r\n\t\tif (xhr.lengthComputable && xhr.target.responseURL) {\r\n\t\t\t//Skip progress log if no xhr url, meaning it's a local file.\r\n\t\t\tvar percentComplete = xhr.loaded / xhr.total * 100;\r\n\t\t\tvar filename = xhr.target.responseURL.split('/').pop();\r\n\t\t\tif (TRACE) console.log('...'+filename+' '+Math.round(percentComplete,2)+'% downloaded');\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t\tload: load,\r\n\t\tLoadRequest: LoadRequest,\r\n\t};\r\n\r\n}());\r\n\n/**\r\n * @author gavanwilhite / http://gavanwilhite.com\r\n */\r\n\r\n/**\r\n * The AltspaceDK includes a Behaviors shim that adds Behavior capabilities to \r\n * Three.js.\r\n * It adds methods to Three.js' Scene and Object3D classes which allow you to \r\n * add, remove, retrieve and use Behaviors.\r\n *\r\n * @namespace THREE\r\n */\r\n\r\n/**\r\n * The AltspaceSDK adds Behavior capabilites to Three.js' Scene class.\r\n * @class Scene\r\n * @memberof THREE\r\n */\r\n\r\n/**\r\n * Update the behaviors of all the objects in this Scene.\r\n * @instance\r\n * @method updateAllBehaviors \r\n * @memberof THREE.Scene\r\n */\r\nTHREE.Scene.prototype.updateAllBehaviors = function () {\r\n\r\n\tvar now = performance.now();\r\n\tvar lastNow = this.__lastNow || now;\r\n\r\n\tvar deltaTime = now - lastNow;\r\n\r\n\tvar self = this;\r\n\r\n\t//gather objects first so that behaviors can change the hierarchy during traversal without incident\r\n\tvar objectsWithBehaviors = [];\r\n\r\n\tthis.traverse(function (object3d) {\r\n\r\n\t\tif (object3d.__behaviorList) {\r\n\t\t\tobjectsWithBehaviors.push(object3d);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tfor (var i = 0, max = objectsWithBehaviors.length; i < max; i++) {\r\n\t\tobject3d = objectsWithBehaviors[i];\r\n\t\tobject3d.updateBehaviors(deltaTime, self);\r\n\t}\r\n\r\n\tthis.__lastNow = now;\r\n\r\n}\r\n\r\n/**\r\n * The AltspaceSDK adds Behavior capabilites to Three.js' Object3D class.\r\n * @class Object3D\r\n * @memberof THREE\r\n */\r\n\r\n/**\r\n * Adds the given behavior to this object.\r\n * @instance\r\n * @method addBehavior \r\n * @param {Behavior} behavior Behavior to add.\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.addBehavior = function()\r\n{\r\n\tthis.__behaviorList = this.__behaviorList || [];\r\n\tArray.prototype.push.apply(this.__behaviorList, arguments);\r\n}\r\n\r\n/**\r\n * Adds the given behaviors to this object.\r\n * @instance\r\n * @method addBehaviors\r\n * @param {...Behavior} behavior Behavior to add.\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.addBehaviors = function()\r\n{\r\n\tthis.__behaviorList = this.__behaviorList || [];\r\n\tArray.prototype.push.apply(this.__behaviorList, arguments);\r\n}\r\n\r\n/**\r\n * Removes the given behavior from this object. The behavior is disposed if\r\n * possible.\r\n * @instance\r\n * @method removeBehavior \r\n * @param {...Behavior} behavior Behavior to remove.\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.removeBehavior = function(behavior)\r\n{\r\n\tvar i = this.__behaviorList.indexOf(behavior);\r\n\tif (i !== -1) {\r\n\t\tthis.__behaviorList.splice(i, 1);\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.dispose) behavior.dispose.call(behavior, this);\r\n\r\n\t\t} catch (error) {\r\n\t\t\t\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Removes all behaviors from this object. The behaviors are disposed if\r\n * possible.\r\n * @instance\r\n * @method removeAllBehaviors\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.removeAllBehaviors = function ()\r\n{\r\n\tif (!this.__behaviorList || this.__behaviorList.length === 0) return null;\r\n\r\n\tfor (var i = 0, max = this.__behaviorList.length; i < max; i++) {\r\n\t\tvar behavior = this.__behaviorList[i];\r\n\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.dispose) behavior.dispose.call(behavior, this);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Retrieve a behavior by type.\r\n * @instance\r\n * @method getBehaviorByType\r\n * @param {String} type \r\n * @returns {Behavior}\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.getBehaviorByType = function(type) {\r\n\tif (!this.__behaviorList || this.__behaviorList.length === 0) return null;\r\n\r\n\tfor (var i = 0, max = this.__behaviorList.length; i < max; i++) {\r\n\t\tif (this.__behaviorList[i].type === type)\r\n\t\t\treturn this.__behaviorList[i];\r\n\t}\r\n}\r\n\r\n/**\r\n * Update behaviors on this object.\r\n * @instance\r\n * @method updateBehaviors\r\n * @param {Number} deltaTime Elapsed time in milliseconds\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.updateBehaviors = function(deltaTime, scene) {\r\n\r\n\tif (!this.__behaviorList || this.__behaviorList.length === 0) return;\r\n\r\n\tvar toInit = [];\r\n\tvar toUpdate = this.__behaviorList.slice(); // prevent mutation of the behavior list during this loop\r\n\r\n\tfor (var i = 0, max = this.__behaviorList.length; i < max; i++) {\r\n\r\n\t\tvar behavior = this.__behaviorList[i];\r\n\t\tif (!behavior.__isInitialized) toInit.push(behavior);\r\n\r\n\t}\r\n\r\n\t//Awake\r\n\tfor (var i = 0, max = toInit.length; i < max; i++) {\r\n\r\n\t\tvar behavior = toInit[i];\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.awake) behavior.awake.call(behavior, this, scene);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//Start\r\n\tfor (var i = 0, max = toInit.length; i < max; i++) {\r\n\r\n\t\tvar behavior = toInit[i];\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.start) behavior.start.call(behavior);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\t\tbehavior.__isInitialized = true;\r\n\r\n\t}\r\n\r\n\t//Update\r\n\tfor (var i = 0, max = toUpdate.length; i < max; i++) {\r\n\r\n\t\tvar behavior = toUpdate[i];\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.update) behavior.update.call(behavior, deltaTime);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n\r\n\r\n\naltspace = window.altspace || {};\r\naltspace.utilities = altspace.utilities || {};\r\naltspace.utilities.shims = altspace.utilities.shims || {};\r\n/**\r\n * Detects mouse move/up/down events, raycasts to find intersected objects, \r\n * then dispatches cursor move/up/down/enter/leave events that mimics \r\n * Altspace events.\r\n * @module altspace/utilities/shims/cursor\r\n */\r\naltspace.utilities.shims.cursor = (function () {\r\n\t//TODO: Support non-full window apps\r\n\r\n\tvar scene;\r\n\tvar camera;\r\n\tvar domElem;\r\n\r\n\tvar overObject;\r\n\r\n\tvar raycaster = new THREE.Raycaster();\r\n\r\n\t/**\r\n\t * Initializes the cursor module \r\n\t * @static\r\n\t * @method init\r\n\t * @param {THREE.Scene} scene\r\n\t * @param {THREE.Camera} camera - Camera used for raycasting.\r\n\t * @param {Object} [options] - An options object\r\n\t * @param {THREE.WebGLRenderer} [options.renderer] - If supplied, applies cursor movement to render target \r\n\t *\tinstead of entire client\r\n\t * @memberof module:altspace/utilities/shims/cursor\r\n\t */\r\n\tfunction init(_scene, _camera, _params) {\r\n\t\tif (!_scene || !_scene instanceof THREE.Scene) {\r\n\t\t\tthrow new TypeError('Requires THREE.Scene argument');\r\n\t\t}\r\n\t\tif (!_camera || !_camera instanceof THREE.Camera) {\r\n\t\t\tthrow new TypeError('Requires THREE.Camera argument');\r\n\t\t}\r\n\t\tscene = _scene;\r\n\t\tcamera = _camera;\r\n\r\n\t\tp = _params || {};\r\n\t\tdomElem = p.renderer && p.renderer.domElement || window;\r\n\r\n\t\tdomElem.addEventListener('mousedown', mouseDown, false)\r\n\t\tdomElem.addEventListener('mouseup', mouseUp, false)\r\n\t\tdomElem.addEventListener('mousemove', mouseMove, false)\r\n\t}\r\n\r\n\tfunction mouseDown(event) {\r\n\r\n\t\tvar intersection = findIntersection(event);\r\n\t\tif (!intersection || !intersection.point) return;\r\n\r\n\t\tvar cursorEvent = createCursorEvent('cursordown', intersection);\r\n\t\tintersection.object.dispatchEvent(cursorEvent);\r\n\t}\r\n\r\n\tfunction mouseUp(event) {\r\n\t\tvar intersection = findIntersection(event);\r\n\r\n\t\tvar cursorEvent = createCursorEvent('cursorup', intersection);\r\n\r\n\t\tif (intersection) {\r\n\t\t\tintersection.object.dispatchEvent(cursorEvent);\r\n\t\t} else {\r\n\t\t\tscene.dispatchEvent(cursorEvent);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction mouseMove(event) {\r\n\t\tvar intersection = findIntersection(event);\r\n\r\n\t\tvar cursorEvent = createCursorEvent('cursormove', intersection);//TODO improve and don't fire only on scene\r\n\t\tscene.dispatchEvent(cursorEvent);\r\n\r\n\t\tvar object = intersection ? intersection.object : null;\r\n\t\tif (overObject != object) {\r\n\t\t\tif (overObject) {\r\n\t\t\t\tcursorEvent = createCursorEvent('cursorleave', intersection);\r\n\t\t\t\toverObject.dispatchEvent(cursorEvent);\r\n\t\t\t}\r\n\r\n\t\t\tif (object) {\r\n\t\t\t\tcursorEvent = createCursorEvent('cursorenter', intersection);\r\n\t\t\t\tobject.dispatchEvent(cursorEvent);\r\n\t\t\t}\r\n\r\n\t\t\toverObject = object;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction createCursorEvent(type, intersection) {\r\n\t\treturn {\r\n\t\t\ttype: type,\r\n\t\t\tbubbles: true,\r\n\t\t\ttarget: intersection ? intersection.object : null,\r\n\t\t\tray: {\r\n\t\t\t\torigin: raycaster.ray.origin.clone(),\r\n\t\t\t\tdirection: raycaster.ray.direction.clone()\r\n\t\t\t},\r\n\t\t\tpoint: intersection ? intersection.point.clone() : null\r\n\t\t}\r\n\t}\r\n\r\n\tfunction findIntersection(mouseEvent) {\r\n\t\tvar mouse = new THREE.Vector2();\r\n\t\tmouse.x = (mouseEvent.offsetX / (domElem.width || domElem.innerWidth)) * 2 - 1;\r\n\t\tmouse.y = -(mouseEvent.offsetY / (domElem.height || domElem.innerHeight)) * 2 + 1;\r\n\r\n\t\traycaster.setFromCamera(mouse, camera);\r\n\r\n\t\tvar intersections = raycaster.intersectObjects(scene.children, true);\r\n\t\treturn intersections.length > 0 ? intersections[0] : null;\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t};\r\n\r\n}());\r\n\r\n\n/**\r\n * The Altspace SDK adds event bubbling to Three.js' events system.\r\n * Simply include the SDK in your app and add a bubbling property to your event to take advantage of this feature.\r\n * \r\n * AltspaceVR cursor events always make use of this bubbling shim.\r\n *\r\n * @example\r\n * var parent = new THREE.Object3D();\r\n * parent.addEventListener('custom', function () {\r\n * console.log('received custom event');\r\n * });\r\n * var child = new THREE.Object3D();\r\n * parent.add(child);\r\n * child.dispatchEvent({type: 'custom', bubbles: true});\r\n * // Console log shows 'received custom event'\r\n *\r\n * @module altspace/utilities/shims/bubbling\r\n */\r\n( function() {\r\n\r\n\tif (!THREE) return;\r\n\r\n\tif (window.altspace && window.altspace.inAltspace) return;\r\n\r\n\tTHREE.EventDispatcher.prototype.dispatchEvent = dispatchEvent;\r\n\tTHREE.Object3D.prototype.dispatchEvent = dispatchEvent;\r\n\r\n\tfunction dispatchEvent( event ) {\r\n\r\n\t\tvar shouldStopPropagation;\r\n\t\tvar shouldStopPropagationImmediately;\r\n\r\n\t\tif ( event.bubbles ) {\r\n\r\n\t\t\tevent.currentTarget = this;\r\n\r\n\t\t\tevent.stopPropagation = function () {\r\n\r\n\t\t\t\tshouldStopPropagation = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tevent.stopImmediatePropagation = function () {\r\n\r\n\t\t\t\tshouldStopPropagationImmediately = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( this._listeners ) {\r\n\r\n\t\t\tvar listeners = this._listeners;\r\n\t\t\tvar listenerArray = listeners[ event.type ];\r\n\r\n\t\t\tif ( listenerArray ) {\r\n\r\n\t\t\t\tevent.target = event.target || this;\r\n\r\n\t\t\t\tvar array = [];\r\n\t\t\t\tvar length = listenerArray.length;\r\n\r\n\t\t\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\t\tarray[ i ] = listenerArray[ i ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\t\tarray[ i ].call( this, event );\r\n\r\n\t\t\t\t\tif ( shouldStopPropagationImmediately ) return;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\tif ( event.bubbles && this.parent && this.parent.dispatchEvent && ! shouldStopPropagation ) {\r\n\r\n\t\t\tdispatchEvent.call( this.parent, event );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n}() );\r\n\n/**\r\n * @module altspace/utilities/behaviors\r\n */\r\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The Bob behavior adds a bobbing animation to an object\r\n *\r\n * @class Bob\r\n * @param {Object} [config]\r\n * @param {Boolean} [config.shouldRotate=true] Whether the animation should include\r\n * rotation.\r\n * @param {Boolean} [config.shouldMove=true] Whether the animation should\r\n * include movement.\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\naltspace.utilities.behaviors.Bob = function (config) {\r\n\tvar object3d;\r\n\r\n\tconfig = config || {};\r\n\r\n\tif (config.shouldRotate === undefined) config.shouldRotate = true;\r\n\tif (config.shouldMove === undefined) config.shouldMove = true;\r\n\r\n\tvar offsetPosition;\r\n\tvar lastBobPosition = new THREE.Vector3();\r\n\t//TODO: Rotation\r\n\r\n\tvar nowOffset = Math.random() * 10000;\r\n\r\n\tfunction awake(o) {\r\n\t\tobject3d = o;\r\n\t\toffsetPosition = object3d.position.clone();\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tvar nowInt = Math.floor(performance.now()) + nowOffset;\r\n\r\n\t\tif (config.shouldMove) {\r\n\t\t\tif (!lastBobPosition.equals(object3d.position)) offsetPosition.copy(object3d.position);\r\n\r\n\t\t\tobject3d.position.y = offsetPosition.y + Math.sin(nowInt / 800) * 3;\r\n\t\t\tobject3d.position.x = offsetPosition.x + Math.sin(nowInt / 500) * 5;\r\n\t\t\tlastBobPosition.copy(object3d.position);\r\n\t\t}\r\n\r\n\t\tif (config.shouldRotate) {\r\n\t\t\tobject3d.rotation.x = Math.sin(nowInt / 500) / 15;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { awake: awake, update: update };\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * A behavior that changes the color of an object when the cursor interacts with it.\r\n * @class ButtonStateStyle\r\n * @param {Object} [config] Optional parameters.\r\n * @param {THREE.Color} [config.originalColor] Base material color.\r\n * @param {Number} [config.overBrightness=1.5] Material brightness when cursor\r\n *\tis over button.\r\n * @param {Number} [config.downBrightness=0.5] Material brightness when cursor\r\n *\tis clicked.\r\n * @memberof module:altspace/utilities/behaviors\r\n */\r\naltspace.utilities.behaviors.ButtonStateStyle = function (config) {\r\n\tvar object3d;\r\n\tvar scene;\r\n\tvar originalColor;\r\n\tvar modifiedColor = new THREE.Color();\r\n\r\n\tconfig = config || {};\r\n\tvar overBrightness = config.overBrightness || 1.5;\r\n\tvar downBrightness = config.downBrightness || 0.5;\r\n\r\n\tfunction changeBrightness(brightness) {\r\n\t\tmodifiedColor.set(originalColor);\r\n\t\tmodifiedColor.multiplyScalar(brightness);\r\n\t\tmodifiedColor.r = THREE.Math.clamp(modifiedColor.r, 0, 1);\r\n\t\tmodifiedColor.g = THREE.Math.clamp(modifiedColor.g, 0, 1);\r\n\t\tmodifiedColor.b = THREE.Math.clamp(modifiedColor.b, 0, 1);\r\n\t\tobject3d.material.color = modifiedColor;\r\n\t}\r\n\r\n\tfunction cursorLeave() {\r\n\t\tobject3d.removeEventListener('cursorleave', cursorLeave);\r\n\t\tchangeBrightness(1.0);\r\n\t}\r\n\r\n\tfunction cursorEnter() {\r\n\t\tchangeBrightness(overBrightness);\r\n\t\tobject3d.addEventListener('cursorleave', cursorLeave);\r\n\t}\r\n\r\n\tfunction cursorUp(event) {\r\n\t\tscene.removeEventListener('cursorup', cursorUp);\r\n\t\tobject3d.addEventListener('cursorenter', cursorEnter);\r\n\t\tif (event.target === object3d) {\r\n\t\t\tchangeBrightness(overBrightness);\r\n\t\t\tobject3d.addEventListener('cursorleave', cursorLeave);\r\n\t\t} else {\r\n\t\t\tchangeBrightness(1.0);\r\n\t\t}\r\n\t}\r\n\tfunction cursorDown() {\r\n\t\tscene.addEventListener('cursorup', cursorUp);\r\n\t\tobject3d.removeEventListener('cursorleave', cursorLeave);\r\n\t\tobject3d.removeEventListener('cursorenter', cursorEnter);\r\n\t\tchangeBrightness(downBrightness);\r\n\t}\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\toriginalColor = config.originalColor || object3d.material.color;\r\n\t\tobject3d.addEventListener('cursorenter', cursorEnter);\r\n\t\tobject3d.addEventListener('cursordown', cursorDown);\r\n\t}\r\n\r\n\tfunction dispose() {\r\n\t\tobject3d.removeEventListener('cursorenter', cursorEnter);\r\n\t\tobject3d.removeEventListener('cursorleave', cursorLeave);\r\n\t\tobject3d.removeEventListener('cursorup', cursorUp);\r\n\t\tobject3d.removeEventListener('cursordown', cursorDown);\r\n\t}\r\n\r\n\treturn { awake: awake, dispose: dispose, type: 'ButtonStateStyle' };\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n//idea: API for symbolic camera from altspace? altspace.getThreeJSCenterCamera();\r\n//idea: offset (drag from bottom of piece). Workaround if you reparent\r\n\r\n//TODO: GSAP Draggable\r\n/**\r\n * A behavior that makes an object draggable along a plane.\r\n * @class Drag\r\n * @param {Object} [config] Specify the axes along which the object can be \r\n * dragged.\r\n * E.g. To constraint th object to an XY plane: `{x: true, y: true}` \r\n * Each axis can also be an object specifying the minimum and maximum limits\r\n * of the constraint. E.g. `{x: {min: -10, max: 20}, y: true}` \r\n * **Note:** Currently you must specify exactly two axes.\r\n * @memberof module:altspace/utilities/behaviors\r\n */\r\naltspace.utilities.behaviors.Drag = function (config) {\r\n\t//space: view, local, world, sphere\r\n\t//gridSnap, cursorSnap\r\n\t//config: x: true, y: true, z: false, defaultDistance: 1000\r\n\r\n\tconfig = config || {};\r\n\r\n\tif (config.space === undefined) config.space = 'world';//TODO others\r\n\tif (config.x === undefined) config.x = false;\r\n\tif (config.y === undefined) config.y = false;\r\n\tif (config.z === undefined) config.z = false;\r\n\tif (config.cursorSnap === undefined) config.cursorSnap = true;//TODO false\r\n\r\n\tvar inX = !!config.x;\r\n\tvar inY = !!config.y;\r\n\tvar inZ = !!config.z;\r\n\tvar min = new THREE.Vector3(\r\n\t\tconfig.x.min !== undefined ? config.x.min : Number.NEGATIVE_INFINITY,\r\n\t\tconfig.y.min !== undefined ? config.y.min : Number.NEGATIVE_INFINITY,\r\n\t\tconfig.z.min !== undefined ? config.z.min : Number.NEGATIVE_INFINITY\r\n\t);\r\n\tvar max = new THREE.Vector3(\r\n\t\tconfig.x.max !== undefined ? config.x.max : Number.POSITIVE_INFINITY,\r\n\t\tconfig.y.max !== undefined ? config.y.max : Number.POSITIVE_INFINITY,\r\n\t\tconfig.z.max !== undefined ? config.z.max : Number.POSITIVE_INFINITY\r\n\t);\r\n\r\n\tvar object3d;\r\n\tvar scene;\r\n\tvar sync;\r\n\tvar intersector;\r\n\tvar dragOffset = new THREE.Vector3();\r\n\tvar raycaster = new THREE.Raycaster();\r\n\traycaster.linePrecision = 3;\r\n\r\n\t//if (THREE.REVISION !== '72') throw new Error('Drag requires three.js revision 72'); //TODO: Do we need a revision check?\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\tsync = object3d.getBehaviorByType('Object3DSync');\r\n\t\tmakeIntersector();\r\n\t\tscene.add(intersector);//TODO: see if I can remove it from the scene. Might not req 72.\r\n\t}\r\n\r\n\tfunction makeIntersector() {\r\n\t\tvar extent = 10000;\r\n\t\tvar plane = new THREE.PlaneGeometry(extent, extent);\r\n\r\n\t\tfunction makeXY() {\r\n\t\t\tplane.rotateY(Math.PI);\r\n\t\t}\r\n\t\tfunction makeXZ() {\r\n\t\t\tplane.rotateX(Math.PI / 2);\r\n\t\t}\r\n\t\tfunction makeYZ() {\r\n\t\t\tplane.rotateY(Math.PI / 2);\r\n\t\t}\r\n\t\tfunction makeViewAligned() {\r\n\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\r\n\t\tvar axisCount = inX + inY + inZ; // implicit cast to integers\r\n\r\n\t\tif (axisCount === 3) {\r\n\r\n\t\t\tthrow new Error('Arbitrary dragging currently unsupported. Please lock at least one axis.');\r\n\r\n\t\t} else if (axisCount === 2) {\r\n\r\n\t\t\tif (inX && inY) {\r\n\t\t\t\tmakeXY();\r\n\t\t\t} else if (inX && inZ) {\r\n\t\t\t\tmakeXZ();\r\n\t\t\t} else if (inY && inZ) {\r\n\t\t\t\tmakeYZ();\r\n\t\t\t}\r\n\r\n\t\t} else if (axisCount === 1) {\r\n\r\n\t\t\tthrow new Error('Single axis dragging currently unsupported.');\r\n\t\t\t//TODO: make possible, possibly via view-aligned plane \r\n\r\n\t\t} else {\r\n\t\t\tthrow new Error('Invalid axis configuration');\r\n\t\t}\r\n\t\tvar material = new THREE.MeshBasicMaterial({ color: 'purple' });\r\n\t\tmaterial.side = THREE.DoubleSide;\r\n\t\tintersector = new THREE.Mesh(plane, material);\r\n\t\tintersector.visible = false;// ensures other raycasters don't hit our intersector\r\n\t\tintersector.material.visible = false;// ensures we never see flicker during temp visibility\r\n\t}\r\n\r\n\tfunction getWorldPosition(obj) {\r\n\t\tobj.updateMatrixWorld();\r\n\t\tvar vec = new THREE.Vector3();\r\n\t\tvec.setFromMatrixPosition(obj.matrixWorld);\r\n\t\treturn vec;\r\n\t}\r\n\r\n\tfunction vec2str(vec) {\r\n\t\tfunction shortNum(num) {\r\n\t\t\treturn Math.floor(num * 100) / 100;\r\n\t\t}\r\n\t\treturn 'x: ' + shortNum(vec.x) + ', y: ' + shortNum(vec.y) + ', z: ' + shortNum(vec.z);\r\n\t}\r\n\r\n\tfunction startDrag(event) {\r\n\t\tscene.addEventListener('cursorup', stopDrag);\r\n\t\tscene.addEventListener('cursormove', moveDrag);\r\n\r\n\t\t//Remember difference between center of object and drag point. \r\n\t\t//Otherwise, object appears to 'jump' when selected, moving so its\r\n\t\t//center is directly until the cursor. We allow drag on edge of object.\r\n\t\traycaster.set(event.ray.origin, event.ray.direction);\r\n\t\tvar hit = raycaster.intersectObject(object3d, true)[0];\r\n\t\tif (!hit) return;\r\n\t\tvar dragPoint = hit.point.clone();\r\n\t\tvar objectCenterPoint = getWorldPosition(object3d).clone();\r\n\t\tdragOffset.copy(dragPoint).sub(objectCenterPoint);\r\n\r\n\t\t//Move to drag point (not object center), where raycast hits the object.\r\n\t\tintersector.position.copy(dragPoint);\r\n\t\tintersector.updateMatrixWorld();// necessary for raycast, TODO: Make GH issue\r\n\t}\r\n\r\n\tfunction moveDrag(event) {\r\n\r\n\t\tif (sync && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t//find intersection\r\n\t\tintersector.visible = true;// allow our intersector to be intersected\r\n\t\traycaster.set(event.ray.origin, event.ray.direction);\r\n\t\tvar intersection = raycaster.intersectObject(intersector, true)[0];\r\n\t\tintersector.visible = false;// disallow our intersector to be intersected\r\n\r\n\t\tif (!intersection) return;\r\n\r\n\t\t//New position is intersection point minus offset. Need offset since\r\n\t\t//user probably won't click on exact center of object to drag it.\r\n\t\tvar targetWorldPosition = new THREE.Vector3();\r\n\t\ttargetWorldPosition.copy(intersection.point).sub(dragOffset);\r\n\t\t//But maintain the original y position of the object.\r\n\t\ttargetWorldPosition.y = getWorldPosition(object3d).y;\r\n\r\n\t\t//constrain target position\r\n\t\ttargetWorldPosition.clamp(min, max);\r\n\r\n\t\t//move object\r\n\t\tobject3d.parent.updateMatrixWorld();\r\n\t\tvar targetLocalPosition = object3d.parent.worldToLocal(targetWorldPosition);//TODO: Test with nested objects\r\n\t\tobject3d.position.set(\r\n\t\t\tconfig.x ? targetLocalPosition.x : object3d.position.x,\r\n\t\t\tconfig.y ? targetLocalPosition.y : object3d.position.y,\r\n\t\t\tconfig.z ? targetLocalPosition.z : object3d.position.z\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tfunction stopDrag() {\r\n\t\tscene.removeEventListener('cursorup', stopDrag);\r\n\t\tscene.removeEventListener('cursormove', moveDrag);\r\n\t}\r\n\r\n\tfunction start() {\r\n\t\tobject3d.addEventListener('cursordown', startDrag);\r\n\t}\r\n\r\n\treturn { awake: awake, start: start };\r\n};\r\n\n/**\r\n * @module altspace/utilities/behaviors\r\n */\r\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * Allows an object to be moved, rotated, and scaled using a gamepad controller.\r\n * Left stick left / right and up / down moves object in the X-Y plane.\r\n * Clicking left stick enters left alt mode, where movement is in X-Z plane.\r\n * Clicking left stick again exits left alt mode.\r\n * Right stick left / right rotates object clockwise / counterclockwise (y axis).\r\n * Rifht stick up / down rotates object away forwards / backwards (x axis).\r\n * Clicking right stick enters right alt mode, where left / right tumbles object (z axis).\r\n * Clicking right stick again exits right alt mode.\r\n * D-pad up / down scales object.\r\n * Back / reset button resets object to its original position and rotation.\r\n *\r\n * @param {Boolean} [config.position=true] Whether object's position can be changed.\r\n * @param {Boolean} [config.rotation=true] Whether object's rotation can be changed.\r\n * @param {Boolean} [config.scale=true] Whether object's scale can be changed.\r\n *\r\n * @class GamepadControls\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\naltspace.utilities.behaviors.GamepadControls = function (config) {\r\n\tvar object3d;\r\n\tvar gamepad;\r\n\tvar scene;\r\n\tvar sync;\r\n\r\n\tvar isAltModeR= false;\r\n\tvar isAltModeL= false;\r\n\tvar prevAltButtonR = false;\r\n\tvar prevAltButtonL = false;\r\n\tvar isInitialized = false;\r\n\r\n\tvar originalObj;//used to reset\r\n\tvar tolerance = 0.2;//ignore stick deadzone\r\n\r\n\tconfig = config || {};\r\n\tif (config.position === undefined) config.position = true;\r\n\tif (config.rotation === undefined) config.rotation = true;\r\n\tif (config.scale === undefined) config.scale = true;\r\n\r\n\tfunction awake(o, s) {\r\n\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\tsync = object3d.getBehaviorByType('Object3DSync');\r\n\t\toriginalObj = object3d.clone();\r\n\t\tgamepad = getGamepad();\r\n\t\tif (gamepad) {\r\n\t\t\tconsole.log('Gamepad detected: ' + gamepad.id);\r\n\t\t} else {\r\n\t\t\tvar intervalID = setInterval(function() {\r\n\t\t\t\tgamepad = getGamepad();\r\n\t\t\t\tif (gamepad) {\r\n\t\t\t\t\tconsole.log('Gamepad connected: ' + gamepad.id);\r\n\t\t\t\t\tclearInterval(intervalID);\r\n\t\t\t\t}\r\n\t\t\t}, 500);\r\n\t\t}\r\n\r\n\t\tscene.addEventListener('cursordown', function(e) {\r\n\t\t\t//preventDefault only works when app has focus, so call after initial click\r\n\t\t\tif (gamepad && !isInitialized) {\r\n\t\t\t\tpreventDefault(gamepad);\r\n\t\t\t\tisInitialized = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tfunction getGamepad() {\r\n\t\tif (altspace && altspace.inClient) {\r\n\t\t\tgamepads = altspace.getGamepads();\r\n\t\t} else {\r\n\t\t\t//Gamepad API works in Chrome and Firefox browsers only\r\n\t\t\t//https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API\r\n\t\t\tgamepads = navigator.getGamepads();\r\n\t\t}\r\n\t\tif (gamepads.length > 0) {\r\n\t\t\tfor (var i=0; i < gamepads.length; i++) {\r\n\t\t\t\tvar g = gamepads[i];\r\n\t\t\t\tif (g && g.axes && g.axes.length === 4 && g.buttons && g.buttons.length === 16) {\r\n\t\t\t\t\tif (altspace && altspace.inClient) preventDefault(g);\r\n\t\t\t\t\treturn g;//return first valid gamepad\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tfunction preventDefault(g) {\r\n\t\tvar axes = [];\r\n\t\tvar buttons = [];\r\n\t\tfor (var i=0; i > g.buttons; i++) buttons[i] = false;\r\n\t\tfor (var i=0; i > g.axes; i++) axes[i] = false;\r\n\t\tif (config.position) {\r\n\t\t\taxes[0] = true;\r\n\t\t\taxes[1] = true;\r\n\t\t\tbuttons[10] = true;\r\n\t\t}\r\n\t\tif (config.rotation) {\r\n\t\t\taxes[2] = true;\r\n\t\t\taxes[3] = true;\r\n\t\t\tbuttons[11] = true;\r\n\t\t}\r\n\t\tif (config.scale) {\r\n\t\t\tbuttons[12] = true;\r\n\t\t\tbuttons[13] = true;\r\n\t\t}\r\n\t\tbuttons[8] = true;\r\n\t\tg.preventDefault(axes, buttons);\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tif ((!altspace || !altspace.inClient) && window.chrome && gamepad) {\r\n\t\t\tgamepad = getGamepad();//On Chrome, need to poll for updates.\r\n\t\t}\r\n\t\tif (!gamepad) return;\r\n\r\n\t\t//For axis and button numbers see: https://w3c.github.io/gamepad/ \r\n\t\tvar isResetButton = gamepad.buttons[8].pressed;//reset / back button\r\n\t\tif (isResetButton) {\r\n\t\t\tif (!sync.isMine) sync.takeOwnership();\r\n\t\t\tobject3d.position.copy(originalObj.position);\r\n\t\t\tobject3d.rotation.copy(originalObj.rotation);\r\n\t\t\tobject3d.scale.copy(originalObj.scale);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (config.position) {\r\n\t\t\tvar isAltButtonL = gamepad.buttons[10].pressed;//left stick button\r\n\t\t\tif (prevAltButtonL && !isAltButtonL) isAltModeL = !isAltModeL;//button released\r\n\t\t\tprevAltButtonL = isAltButtonL;\r\n\r\n\t\t\tvar leftStickX = gamepad.axes[0];//left / right\r\n\t\t\tvar leftStickY = gamepad.axes[1];//up / down\r\n\r\n\t\t\tvar isMove = Math.abs(leftStickX) > tolerance || Math.abs(leftStickY) > tolerance;\r\n\t\t\tif (isMove && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t\tvar moveDistance = 200 * (deltaTime/1000);// 200 units per second\r\n\t\t\tif (!isAltModeL && Math.abs(leftStickX) > tolerance) {\r\n\t\t\t\tobject3d.position.x += moveDistance * leftStickX;\r\n\t\t\t}\r\n\t\t\tif (!isAltModeL && Math.abs(leftStickY) > tolerance) {\r\n\t\t\t\tobject3d.position.z += moveDistance * leftStickY;\r\n\t\t\t}\r\n\t\t\tif (isAltModeL && Math.abs(leftStickX) > tolerance) {\r\n\t\t\t\tobject3d.position.x += moveDistance * leftStickX;\r\n\t\t\t}\r\n\t\t\tif (isAltModeL && Math.abs(leftStickY) > tolerance) {\r\n\t\t\t\tobject3d.position.y += moveDistance * -leftStickY;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (config.rotation) {\r\n\t\t\tvar isAltButtonR = gamepad.buttons[11].pressed;//right stick button\r\n\t\t\tif (prevAltButtonR && !isAltButtonR) isAltModeR = !isAltModeR;//button released\r\n\t\t\tprevAltButtonR = isAltButtonR;\r\n\r\n\t\t\tvar rightStickX = gamepad.axes[2];//left / right\r\n\t\t\tvar rightStickY = gamepad.axes[3];//up / down\r\n\r\n\t\t\tvar isRotate = Math.abs(rightStickX) > tolerance || Math.abs(rightStickY) > tolerance;\r\n\t\t\tif (isRotate && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t\tvar rotateAngle = Math.PI * (deltaTime/1000);// 180 degrees per second\r\n\t\t\tif (!isAltModeR && Math.abs(rightStickX) > tolerance) {\r\n\t\t\t\tobject3d.rotation.y += rotateAngle * rightStickX;\r\n\t\t\t}\r\n\t\t\tif (!isAltModeR && Math.abs(rightStickY) > tolerance) {\r\n\t\t\t\tobject3d.rotation.x += rotateAngle * rightStickY;\r\n\t\t\t}\r\n\t\t\tif (isAltModeR && Math.abs(rightStickX) > tolerance) {\r\n\t\t\t\tobject3d.rotation.z += rotateAngle * -rightStickX;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (config.scale) {\r\n\t\t\tvar scaleChange = 10 * (deltaTime/1000);// 10 units per second\r\n\t\t\tvar dpadUp = gamepad.buttons[12].pressed;//d-pad up\r\n\t\t\tvar dpadDown = gamepad.buttons[13].pressed;//d-pad down\r\n\r\n\t\t\tvar isScale = gamepad.buttons[12].pressed || gamepad.buttons[13].pressed;\r\n\t\t\tif (isScale && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t\tvar prev = object3d.scale;\r\n\t\t\tvar v3 = new THREE.Vector3(1, 1, 1);\r\n\t\t\tv3.multiplyScalar(scaleChange);\r\n\t\t\tif (dpadUp) object3d.scale.add(v3);\r\n\t\t\tif (dpadDown) {\r\n\t\t\t\tif (prev.x > v3.x && prev.y > v3.y && prev.z > v3.z) {//Don't go negative.\r\n\t\t\t\t\tobject3d.scale.sub(v3);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn { awake: awake, update: update };\r\n};\r\n\r\n\n//Change color of an object when cursor hovers over it.\r\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * Changes the color of an object when cursor hovers over it.\r\n * @class HoverColor\r\n * @param {Object} [config] Optional parameters.\r\n * @param {String} [config.event='cursorenter'] Specify the name of event which\r\n * triggers the color change. Default is 'cursorenter' for a hover effect.\r\n * @param {THREE.Color} [config.color=THREE.Color('yellow')] A THREE.Color value that will be applied to the object's\r\n * material.\r\n * @memberof module:altspace/utilities/behaviors\r\n */\r\naltspace.utilities.behaviors.HoverColor = function(config){\r\n\r\n\tconfig = config || {};\r\n\r\n\t//Default is to trigger color change on cursorenter/cursorleave events,\r\n\t//also support triggering on cursordown/cursorup events.\r\n\tif (config.event === undefined) config.event = 'cursorenter';\r\n\tif (config.event !== 'cursorenter' && config.event !== 'cursordown') {\r\n\t\tthrow Error('Expected config.event \"cursorenter\" or \"cursordown\"');\r\n\t}\r\n\tif (config.color === undefined) config.color = new THREE.Color('yellow');\r\n\r\n\tvar object3d;\r\n\tvar cursordownObject;\r\n\tvar cursorenterObject;\r\n\tvar scene;\r\n\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\tobject3d.addEventListener('cursordown', cursordown);\r\n\t\tscene.addEventListener('cursorup', cursorupScene);\r\n\t\tif (config.event === 'cursorenter') {\r\n\t\t\tobject3d.addEventListener('cursorenter', cursorenter);\r\n\t\t\tobject3d.addEventListener('cursorleave', cursorleave);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cursordown(event){\r\n\t\tcursordownObject = object3d;\r\n\t\tif (config.event === 'cursordown' ){\r\n\t\t\tsetColor(cursordownObject);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cursorenter(event){\r\n\t\t//ignore hover events if a different object is selected,\r\n\t\t//for example during a drag we don't want to change highlight\r\n\t\tif (cursordownObject && cursordownObject !== object3d){\r\n\t\t\treturn;\r\n\t\t} \r\n\t\tif (cursorenterObject){\r\n\t\t\tunsetcolor(cursorenterObject);\r\n\t\t}\r\n\t\tcursorenterObject = object3d;\r\n\t\tsetColor(object3d);\r\n\t}\r\n\r\n\tfunction cursorleave(event){\r\n\t\tif (cursorenterObject === object3d){\r\n\t\t\tcursorenterObject = null;\r\n\t\t\tunsetColor(object3d);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cursorupScene(event){\r\n\t\tif (config.event === 'cursordown' && cursordownObject ){\r\n\t\t\tunsetColor(cursordownObject);\r\n\t\t}\r\n\t\tcursordownObject = null;\r\n\t}\r\n\r\n\tfunction setColor(o){\r\n\t\tif (o.material && o.material.color){\r\n\t\t\to.userData.origColor = o.material.color;\r\n\t\t\to.material.color = config.color; \r\n\t\t\t//Not strictly needed but seems to make updating faster in Altspace.\r\n\t\t\tif (o.material) o.material.needsUpdate = true;\r\n\t\t} \r\n\t\tfor (var i = 0; i < o.children.length; i++){\r\n\t\t\tsetColor(o.children[i], config.color);//recursively apply to children\r\n\t\t}\r\n\t}\r\n\r\n\tfunction unsetColor(o){\r\n\t\tif (o.material && o.material.color){\r\n\t\t\tif (!o.userData.origColor){\r\n\t\t\t\tconsole.error('Cannot unsetColor, no userData.origColor for object', o);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\to.material.color = o.userData.origColor;\r\n\t\t\tif (o.material) o.material.needsUpdate = true;\r\n\t\t} \r\n\t\tfor (var i = 0; i < o.children.length; i++){\r\n\t\t\tunsetColor(o.children[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tawake: awake,\r\n\t\t//no update method, event-driven\r\n\t};\r\n\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The SceneSync behavior manages the synchronization of an entire scene.\r\n *\r\n * @class SceneSync\r\n * @param {Firebase} syncInstance\r\n * @param {Object} [config]\r\n * @param {Object} [config.instantiators] A dictionary of instantiation \r\n * callbacks by syncType. Instantiators are called on every client whenever an instantiation call is made. Instantiators are passed an initialization\r\n * data object and the syncType. They should return an Object3D with an \r\n * Object3DSync behavior.\r\n * @param {Object} [config.destroyers] (Optional) A dictionary of destroy \r\n * callbacks by syncType. Destroyers are called on every client whenever an destroy call is made. If no destroyer is provided, a default one will be use\r\n * which will remove the object from its parent and dispose its geometry, material, and texture. \r\n * If you return true from a custom destroyer, the default destroyer will also be called.\r\n * @param {Function} [config.ready] A callback that is called after \r\n * checking to see if the instance has already been initialized. The callback is passed a boolean that \r\n * is true if this is the first callback that has been called for this sync instance.\r\n * This is primarily useful for setting up any objects that should only be created once for an instance, and is not necessary otherwise.\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\nwindow.altspace.utilities.behaviors.SceneSync = function (instanceRef, config) {\r\n\tvar sceneRef = instanceRef.child('scene');\r\n\tvar clientsRef = instanceRef.child('clients');\r\n\r\n\tconfig = config || {};\r\n\tvar instantiators = config.instantiators || {};\r\n\tvar destroyers = config.destroyers || {};\r\n\r\n\tvar autoSendRateMS = 100;\r\n\r\n\tvar syncBehaviors = [];\r\n\tvar objectForKey = {};\r\n\tvar keyForUuid = {};\r\n\r\n\tvar clientId;\r\n\t// there should always be one master client in the room. For now it will be the longest person online.\r\n\tvar masterClientId;\r\n\r\n\tfunction autoSendAll() {\r\n\t\tfor (var i = 0, max = syncBehaviors.length; i < max; i++) {\r\n\t\t\tsyncBehaviors[i].autoSend();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction awake(o, s) {\r\n\t\tsetInterval(autoSendAll, autoSendRateMS);\r\n\r\n\t\tvar scene = s;\r\n\r\n\t\t// temporary way of having unique identifiers for each client\r\n\t\tclientId = scene.uuid;\r\n\t\tclientsRef.on(\"value\", function (snapshot) {\r\n\t\t\tvar clientIds = snapshot.val();\r\n\r\n\t\t\tif (!clientIds) return;\r\n\r\n\t\t\tmasterClientKey = Object.keys(clientIds)[0];\r\n\t\t\tmasterClientId = clientIds[masterClientKey];\r\n\t\t});\r\n\t\t// add our client ID to the list of connected clients, \r\n\t\t// but have it be automatically removed by firebase if we disconnect for any reason\r\n\t\tclientsRef.push(clientId).onDisconnect().remove();\r\n\r\n\t\tinstanceRef.child('initialized').once('value', function (snapshot) {\r\n\t\t\tvar shouldInitialize = !snapshot.val();\r\n\t\t\tsnapshot.ref().set(true);\r\n\t\t\tif (config.ready) {\r\n\t\t\t\tconfig.ready(shouldInitialize);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tsceneRef.on('child_added', onInstantiate.bind(this));\r\n\t\tsceneRef.on('child_removed', onDestroy.bind(this));\r\n\t}\r\n\r\n\t/**\r\n\t * Instantiate an object by syncType.\r\n\t * @instance\r\n\t * @method instantiate\r\n\t * @param {String} syncType Type of object to instantiate.\r\n\t * @param {Object} initData An object containing initialization data, passed\r\n\t * to the instantiator.\r\n\t * @param {Boolean} destroyOnDisconnect If the object should be destroyed\r\n\t * across all synced instance when the instantiating instance disconnects.\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tfunction instantiate(syncType, initData, destroyOnDisconnect) {\r\n\t\tinitData = initData || {};\r\n\t\tvar objectRef = sceneRef.push({ syncType: syncType, initData: initData },\r\n\t\t\tfunction (error) { if (error) throw Error('Failed to save to Firebase', error) }\r\n\t\t);\r\n\t\tif (destroyOnDisconnect) {\r\n\t\t\tobjectRef.onDisconnect().remove();//send remvoe_child to remote clients\r\n\t\t}\r\n\t\t//instantiation done, local child_added callback happens syncronously with push\r\n\t\tvar object = objectForKey[objectRef.key()];\r\n\t\tobject.getBehaviorByType('Object3DSync').takeOwnership();\r\n\t\treturn object;\r\n\t}\r\n\r\n\tfunction onInstantiate(snapshot) {\r\n\r\n\t\tvar data = snapshot.val();\r\n\t\tvar key = snapshot.key();\r\n\r\n\t\tvar instantiator = instantiators[data.syncType];\r\n\r\n\t\tif (!instantiator) {\r\n\t\t\tconsole.warn('No instantiator found for syncType: ' + data.syncType);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar object3d = instantiator(data.initData, data.syncType);\r\n\t\tif (!object3d) {\r\n\t\t\tconsole.error(data.syncType + '.create must return an Object3D');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tobjectForKey[key] = object3d;\r\n\t\tkeyForUuid[object3d.uuid] = key;\r\n\r\n\t\tvar syncBehavior = object3d.getBehaviorByType('Object3DSync');\r\n\t\tif (!syncBehavior) {\r\n\t\t\tconsole.error(data.syncType + ' instantiator must return an Object3D with an Object3DSync behavior');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsyncBehaviors.push(syncBehavior);\r\n\t\tsyncBehavior.link(snapshot.ref(), this);\r\n\t}\r\n\r\n\t/**\r\n\t * Destroy a synced object across instances.\r\n\t * @instance\r\n\t * @method destroy\r\n\t * @param {Object} object3d The object to destroy.\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tfunction destroy(object3d) {\r\n\t\tvar key = keyForUuid[object3d.uuid];\r\n\t\tif (!key) {\r\n\t\t\tconsole.warn('Failed to find key for object3d to be destroyed', object3d);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsceneRef.child(key).remove(function (error) {\r\n\t\t\tif (error) console.warn('Failed to remove from Firebase', error);\r\n\t\t});\r\n\t\tsceneRef.child(key).off();//detach all callbacks\r\n\t}\r\n\r\n\tfunction onDestroy(snapshot) {\r\n\t\tvar data = snapshot.val();\r\n\t\tvar key = snapshot.key();\r\n\t\tvar object3d = objectForKey[key];\r\n\t\tif (!object3d) {\r\n\t\t\tconsole.warn('Failed to find object matching deleted key', key);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar syncType = data.syncType;\r\n\t\tif (!syncType) {\r\n\t\t\tconsole.warn('No syncType found for object being destroyed', object3d);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfunction defaultDestroyer(object3d) {\r\n\r\n\t\t\t// remove all behaviors including this one\r\n\t\t\tobject3d.removeAllBehaviors();\r\n\r\n\t\t\t// remove from scene or parent\r\n\t\t\tif (object3d.parent) {\r\n\t\t\t\tobject3d.parent.remove(object3d);\r\n\t\t\t}\r\n\r\n\t\t\tif (object3d.geometry) {\r\n\t\t\t\tobject3d.geometry.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (object3d.material) {\r\n\t\t\t\tif (object3d.material.map) {\r\n\t\t\t\t\tobject3d.material.map.dispose();\r\n\t\t\t\t}\r\n\t\t\t\tobject3d.material.dispose();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar customDestroyer = destroyers[syncType]\r\n\t\tvar shouldDefaultDestroy = !customDestroyer;\r\n\r\n\t\tif (customDestroyer) {\r\n\r\n\t\t\t// returning true from a destroyer will additionally invoke the default destroyer\r\n\t\t\tshouldDefaultDestroy = customDestroyer(object3d);\r\n\t\t}\r\n\r\n\t\tif (shouldDefaultDestroy) defaultDestroyer(object3d);\r\n\r\n\t\t//remove from our local bookkeeping\r\n\t\tdelete objectForKey[key];\r\n\t\tdelete keyForUuid[object3d.uuid];\r\n\t}\r\n\r\n\tvar exports = {\r\n\t\tawake: awake,\r\n\t\tinstantiate: instantiate,\r\n\t\tdestroy: destroy,\r\n\t\ttype: 'SceneSync'\r\n\t};\r\n\r\n\t/**\r\n\t * Interval at which an object's position/rotation/scale data is sent to Firebase,\r\n\t * in milliseconds.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {number} autoSendRateMS\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'autoSendRateMS', {\r\n\t\tget: function () { return autoSendRateMS; }\r\n\t});\r\n\r\n\t/**\r\n\t * True if this client is the master, false otherwise. Master is generally the client that \r\n\t * has been in the room the longest.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {boolean} isMasterClient\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'isMasterClient', {\r\n\t\tget: function () { return masterClientId === clientId; }\r\n\t});\r\n\r\n\t/**\r\n\t * UUID of the current client. \r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {string} clientId\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'clientId', {\r\n\t\tget: function () { return clientId; }\r\n\t});\r\n\r\n\t/**\r\n\t * Firebase reference for the 'clients' child location. Can be used by app to listen\r\n\t * to clients entering and leaving the room (but generally should not be modified by apps).\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {Firebase} clientsRef\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'clientsRef', {\r\n\t\tget: function () { return clientsRef; }\r\n\t});\r\n\treturn exports;\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The Spin behavior adds a spinning animation to an object.\r\n *\r\n * @class Spin\r\n * @param {Object} [config]\r\n * @param {Number} [config.speed=0.0001] Rotation speed in radians per \r\n * millisecond\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\naltspace.utilities.behaviors.Spin = function (config) {\r\n\r\n\tconfig = config || {};\r\n\r\n\tif (config.speed === undefined) config.speed = 0.0001;\r\n\r\n\tvar object3d;\r\n\r\n\tfunction awake(o) {\r\n\t\tobject3d = o;\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tobject3d.rotation.y += config.speed * deltaTime;\r\n\t}\r\n\r\n\treturn { awake: awake, update: update };\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\naltspace.utilities.behaviors.TouchpadRotate = function (config) {\r\n\tconfig = config || {};\r\n\r\n\tvar object3d;\r\n\tvar scene;\r\n\r\n\tvar startingRotation;\r\n\r\n\tvar activelyRotating = false;\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\r\n\t\taltspace.addEventListener('touchpadup', onTouchpadUp);\r\n\t\taltspace.addEventListener('touchpaddown', onTouchpadDown);\r\n\t\taltspace.addEventListener('touchpadmove', onTouchpadMove);\r\n\t}\r\n\r\n\tfunction onTouchpadUp(event) {\r\n\t\tactivelyRotating = false;\r\n\t}\r\n\r\n\tfunction onTouchpadDown(event) {\r\n\t\tactivelyRotating = true;\r\n\t\tstartingRotation = object3d.rotation.clone();\r\n\t}\r\n\r\n\tvar lastDisplacementX = 0;\r\n\r\n\tvar runningCount = 5;\r\n\tvar runningAverageVelocityX = 0;\r\n\r\n\tfunction onTouchpadMove(event) {\r\n\t\tvar deltaX = event.displacementX - lastDisplacementX;\r\n\t\tobject3d.rotation.set(startingRotation.x, startingRotation.y + event.displacementX / 300, startingRotation.z);\r\n\r\n\t\trunningAverageVelocityX = ((runningAverageVelocityX * runningCount) + deltaX / 300) / (runningCount + 1);\r\n\t\tlastDisplacementX = event.displacementX;\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tif (!activelyRotating && Math.abs(runningAverageVelocityX) > 0.01) {\r\n\t\t\tobject3d.rotation.y += runningAverageVelocityX;\r\n\t\t\trunningAverageVelocityX *= 0.97;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction start() {\r\n\t}\r\n\r\n\treturn { awake: awake, start: start, update: update };\r\n};\r\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 ? arguments[1] : undefined, 3)\n , entry;\n while(entry = entry ? entry.n : this._f){\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while(entry && entry.r)entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key){\n return !!getEntry(this, key);\n }\n });\n if(DESCRIPTORS)$.setDesc(C.prototype, 'size', {\n get: function(){\n return defined(this[SIZE]);\n }\n });\n return C;\n },\n def: function(that, key, value){\n var entry = getEntry(that, key)\n , prev, index;\n // change existing entry\n if(entry){\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if(!that._f)that._f = entry;\n if(prev)prev.n = entry;\n that[SIZE]++;\n // add to index\n if(index !== 'F')that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function(C, NAME, IS_MAP){\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function(iterated, kind){\n this._t = iterated; // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function(){\n var that = this\n , kind = that._k\n , entry = that._l;\n // revert to the last existing entry\n while(entry && entry.r)entry = entry.p;\n // get next entry\n if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if(kind == 'keys' )return step(0, entry.k);\n if(kind == 'values')return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n},{\"./$\":44,\"./$.ctx\":23,\"./$.defined\":24,\"./$.descriptors\":25,\"./$.for-of\":29,\"./$.has\":32,\"./$.hide\":33,\"./$.is-object\":37,\"./$.iter-define\":40,\"./$.iter-step\":42,\"./$.redefine-all\":48,\"./$.set-species\":50,\"./$.strict-new\":53,\"./$.uid\":59}],20:[function(require,module,exports){\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar forOf = require('./$.for-of')\n , classof = require('./$.classof');\nmodule.exports = function(NAME){\n return function toJSON(){\n if(classof(this) != NAME)throw TypeError(NAME + \"#toJSON isn't generic\");\n var arr = [];\n forOf(this, false, arr.push, arr);\n return arr;\n };\n};\n},{\"./$.classof\":17,\"./$.for-of\":29}],21:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , global = require('./$.global')\n , $export = require('./$.export')\n , fails = require('./$.fails')\n , hide = require('./$.hide')\n , redefineAll = require('./$.redefine-all')\n , forOf = require('./$.for-of')\n , strictNew = require('./$.strict-new')\n , isObject = require('./$.is-object')\n , setToStringTag = require('./$.set-to-string-tag')\n , DESCRIPTORS = require('./$.descriptors');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n var Base = global[NAME]\n , C = Base\n , ADDER = IS_MAP ? 'set' : 'add'\n , proto = C && C.prototype\n , O = {};\n if(!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n new C().entries().next();\n }))){\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n } else {\n C = wrapper(function(target, iterable){\n strictNew(target, C, NAME);\n target._c = new Base;\n if(iterable != undefined)forOf(iterable, IS_MAP, target[ADDER], target);\n });\n $.each.call('add,clear,delete,forEach,get,has,set,keys,values,entries'.split(','),function(KEY){\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if(KEY in proto && !(IS_WEAK && KEY == 'clear'))hide(C.prototype, KEY, function(a, b){\n if(!IS_ADDER && IS_WEAK && !isObject(a))return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n if('size' in proto)$.setDesc(C.prototype, 'size', {\n get: function(){\n return this._c.size;\n }\n });\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F, O);\n\n if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n},{\"./$\":44,\"./$.descriptors\":25,\"./$.export\":27,\"./$.fails\":28,\"./$.for-of\":29,\"./$.global\":31,\"./$.hide\":33,\"./$.is-object\":37,\"./$.redefine-all\":48,\"./$.set-to-string-tag\":51,\"./$.strict-new\":53}],22:[function(require,module,exports){\nvar core = module.exports = {version: '1.2.6'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n},{}],23:[function(require,module,exports){\n// optional / simple context binding\nvar aFunction = require('./$.a-function');\nmodule.exports = function(fn, that, length){\n aFunction(fn);\n if(that === undefined)return fn;\n switch(length){\n case 1: return function(a){\n return fn.call(that, a);\n };\n case 2: return function(a, b){\n return fn.call(that, a, b);\n };\n case 3: return function(a, b, c){\n return fn.call(that, a, b, c);\n };\n }\n return function(/* ...args */){\n return fn.apply(that, arguments);\n };\n};\n},{\"./$.a-function\":14}],24:[function(require,module,exports){\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n if(it == undefined)throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n},{}],25:[function(require,module,exports){\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./$.fails')(function(){\n return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n},{\"./$.fails\":28}],26:[function(require,module,exports){\n// all enumerable object keys, includes symbols\nvar $ = require('./$');\nmodule.exports = function(it){\n var keys = $.getKeys(it)\n , getSymbols = $.getSymbols;\n if(getSymbols){\n var symbols = getSymbols(it)\n , isEnum = $.isEnum\n , i = 0\n , key;\n while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key);\n }\n return keys;\n};\n},{\"./$\":44}],27:[function(require,module,exports){\nvar global = require('./$.global')\n , core = require('./$.core')\n , ctx = require('./$.ctx')\n , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n var IS_FORCED = type & $export.F\n , IS_GLOBAL = type & $export.G\n , IS_STATIC = type & $export.S\n , IS_PROTO = type & $export.P\n , IS_BIND = type & $export.B\n , IS_WRAP = type & $export.W\n , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n , key, own, out;\n if(IS_GLOBAL)source = name;\n for(key in source){\n // contains in native\n own = !IS_FORCED && target && key in target;\n if(own && key in exports)continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function(C){\n var F = function(param){\n return this instanceof C ? new C(param) : C(param);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\nmodule.exports = $export;\n},{\"./$.core\":22,\"./$.ctx\":23,\"./$.global\":31}],28:[function(require,module,exports){\nmodule.exports = function(exec){\n try {\n return !!exec();\n } catch(e){\n return true;\n }\n};\n},{}],29:[function(require,module,exports){\nvar ctx = require('./$.ctx')\n , call = require('./$.iter-call')\n , isArrayIter = require('./$.is-array-iter')\n , anObject = require('./$.an-object')\n , toLength = require('./$.to-length')\n , getIterFn = require('./core.get-iterator-method');\nmodule.exports = function(iterable, entries, fn, that){\n var iterFn = getIterFn(iterable)\n , f = ctx(fn, that, entries ? 2 : 1)\n , index = 0\n , length, step, iterator;\n if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n call(iterator, f, step.value, entries);\n }\n};\n},{\"./$.an-object\":16,\"./$.ctx\":23,\"./$.is-array-iter\":35,\"./$.iter-call\":38,\"./$.to-length\":57,\"./core.get-iterator-method\":61}],30:[function(require,module,exports){\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./$.to-iobject')\n , getNames = require('./$').getNames\n , toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n try {\n return getNames(it);\n } catch(e){\n return windowNames.slice();\n }\n};\n\nmodule.exports.get = function getOwnPropertyNames(it){\n if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it);\n return getNames(toIObject(it));\n};\n},{\"./$\":44,\"./$.to-iobject\":56}],31:[function(require,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n},{}],32:[function(require,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n return hasOwnProperty.call(it, key);\n};\n},{}],33:[function(require,module,exports){\nvar $ = require('./$')\n , createDesc = require('./$.property-desc');\nmodule.exports = require('./$.descriptors') ? function(object, key, value){\n return $.setDesc(object, key, createDesc(1, value));\n} : function(object, key, value){\n object[key] = value;\n return object;\n};\n},{\"./$\":44,\"./$.descriptors\":25,\"./$.property-desc\":47}],34:[function(require,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./$.cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n},{\"./$.cof\":18}],35:[function(require,module,exports){\n// check on default Array iterator\nvar Iterators = require('./$.iterators')\n , ITERATOR = require('./$.wks')('iterator')\n , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n},{\"./$.iterators\":43,\"./$.wks\":60}],36:[function(require,module,exports){\n// 7.2.2 IsArray(argument)\nvar cof = require('./$.cof');\nmodule.exports = Array.isArray || function(arg){\n return cof(arg) == 'Array';\n};\n},{\"./$.cof\":18}],37:[function(require,module,exports){\nmodule.exports = function(it){\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n},{}],38:[function(require,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = require('./$.an-object');\nmodule.exports = function(iterator, fn, value, entries){\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch(e){\n var ret = iterator['return'];\n if(ret !== undefined)anObject(ret.call(iterator));\n throw e;\n }\n};\n},{\"./$.an-object\":16}],39:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , descriptor = require('./$.property-desc')\n , setToStringTag = require('./$.set-to-string-tag')\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./$.hide')(IteratorPrototype, require('./$.wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n},{\"./$\":44,\"./$.hide\":33,\"./$.property-desc\":47,\"./$.set-to-string-tag\":51,\"./$.wks\":60}],40:[function(require,module,exports){\n'use strict';\nvar LIBRARY = require('./$.library')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , hide = require('./$.hide')\n , has = require('./$.has')\n , Iterators = require('./$.iterators')\n , $iterCreate = require('./$.iter-create')\n , setToStringTag = require('./$.set-to-string-tag')\n , getProto = require('./$').getProto\n , ITERATOR = require('./$.wks')('iterator')\n , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n , FF_ITERATOR = '@@iterator'\n , KEYS = 'keys'\n , VALUES = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n $iterCreate(Constructor, NAME, next);\n var getMethod = function(kind){\n if(!BUGGY && kind in proto)return proto[kind];\n switch(kind){\n case KEYS: return function keys(){ return new Constructor(this, kind); };\n case VALUES: return function values(){ return new Constructor(this, kind); };\n } return function entries(){ return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator'\n , DEF_VALUES = DEFAULT == VALUES\n , VALUES_BUG = false\n , proto = Base.prototype\n , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n , $default = $native || getMethod(DEFAULT)\n , methods, key;\n // Fix native\n if($native){\n var IteratorPrototype = getProto($default.call(new Base));\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // FF fix\n if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n // fix Array#{values, @@iterator}.name in V8 / FF\n if(DEF_VALUES && $native.name !== VALUES){\n VALUES_BUG = true;\n $default = function values(){ return $native.call(this); };\n }\n }\n // Define iterator\n if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if(DEFAULT){\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: !DEF_VALUES ? $default : getMethod('entries')\n };\n if(FORCED)for(key in methods){\n if(!(key in proto))redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n},{\"./$\":44,\"./$.export\":27,\"./$.has\":32,\"./$.hide\":33,\"./$.iter-create\":39,\"./$.iterators\":43,\"./$.library\":46,\"./$.redefine\":49,\"./$.set-to-string-tag\":51,\"./$.wks\":60}],41:[function(require,module,exports){\nvar ITERATOR = require('./$.wks')('iterator')\n , SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function(){ SAFE_CLOSING = true; };\n Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n if(!skipClosing && !SAFE_CLOSING)return false;\n var safe = false;\n try {\n var arr = [7]\n , iter = arr[ITERATOR]();\n iter.next = function(){ safe = true; };\n arr[ITERATOR] = function(){ return iter; };\n exec(arr);\n } catch(e){ /* empty */ }\n return safe;\n};\n},{\"./$.wks\":60}],42:[function(require,module,exports){\nmodule.exports = function(done, value){\n return {value: value, done: !!done};\n};\n},{}],43:[function(require,module,exports){\nmodule.exports = {};\n},{}],44:[function(require,module,exports){\nvar $Object = Object;\nmodule.exports = {\n create: $Object.create,\n getProto: $Object.getPrototypeOf,\n isEnum: {}.propertyIsEnumerable,\n getDesc: $Object.getOwnPropertyDescriptor,\n setDesc: $Object.defineProperty,\n setDescs: $Object.defineProperties,\n getKeys: $Object.keys,\n getNames: $Object.getOwnPropertyNames,\n getSymbols: $Object.getOwnPropertySymbols,\n each: [].forEach\n};\n},{}],45:[function(require,module,exports){\nvar $ = require('./$')\n , toIObject = require('./$.to-iobject');\nmodule.exports = function(object, el){\n var O = toIObject(object)\n , keys = $.getKeys(O)\n , length = keys.length\n , index = 0\n , key;\n while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n},{\"./$\":44,\"./$.to-iobject\":56}],46:[function(require,module,exports){\nmodule.exports = true;\n},{}],47:[function(require,module,exports){\nmodule.exports = function(bitmap, value){\n return {\n enumerable : !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable : !(bitmap & 4),\n value : value\n };\n};\n},{}],48:[function(require,module,exports){\nvar redefine = require('./$.redefine');\nmodule.exports = function(target, src){\n for(var key in src)redefine(target, key, src[key]);\n return target;\n};\n},{\"./$.redefine\":49}],49:[function(require,module,exports){\nmodule.exports = require('./$.hide');\n},{\"./$.hide\":33}],50:[function(require,module,exports){\n'use strict';\nvar core = require('./$.core')\n , $ = require('./$')\n , DESCRIPTORS = require('./$.descriptors')\n , SPECIES = require('./$.wks')('species');\n\nmodule.exports = function(KEY){\n var C = core[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};\n},{\"./$\":44,\"./$.core\":22,\"./$.descriptors\":25,\"./$.wks\":60}],51:[function(require,module,exports){\nvar def = require('./$').setDesc\n , has = require('./$.has')\n , TAG = require('./$.wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n},{\"./$\":44,\"./$.has\":32,\"./$.wks\":60}],52:[function(require,module,exports){\nvar global = require('./$.global')\n , SHARED = '__core-js_shared__'\n , store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n return store[key] || (store[key] = {});\n};\n},{\"./$.global\":31}],53:[function(require,module,exports){\nmodule.exports = function(it, Constructor, name){\n if(!(it instanceof Constructor))throw TypeError(name + \": use the 'new' operator!\");\n return it;\n};\n},{}],54:[function(require,module,exports){\nvar toInteger = require('./$.to-integer')\n , defined = require('./$.defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n},{\"./$.defined\":24,\"./$.to-integer\":55}],55:[function(require,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil\n , floor = Math.floor;\nmodule.exports = function(it){\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n},{}],56:[function(require,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./$.iobject')\n , defined = require('./$.defined');\nmodule.exports = function(it){\n return IObject(defined(it));\n};\n},{\"./$.defined\":24,\"./$.iobject\":34}],57:[function(require,module,exports){\n// 7.1.15 ToLength\nvar toInteger = require('./$.to-integer')\n , min = Math.min;\nmodule.exports = function(it){\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n},{\"./$.to-integer\":55}],58:[function(require,module,exports){\n// 7.1.13 ToObject(argument)\nvar defined = require('./$.defined');\nmodule.exports = function(it){\n return Object(defined(it));\n};\n},{\"./$.defined\":24}],59:[function(require,module,exports){\nvar id = 0\n , px = Math.random();\nmodule.exports = function(key){\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n},{}],60:[function(require,module,exports){\nvar store = require('./$.shared')('wks')\n , uid = require('./$.uid')\n , Symbol = require('./$.global').Symbol;\nmodule.exports = function(name){\n return store[name] || (store[name] =\n Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));\n};\n},{\"./$.global\":31,\"./$.shared\":52,\"./$.uid\":59}],61:[function(require,module,exports){\nvar classof = require('./$.classof')\n , ITERATOR = require('./$.wks')('iterator')\n , Iterators = require('./$.iterators');\nmodule.exports = require('./$.core').getIteratorMethod = function(it){\n if(it != undefined)return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n},{\"./$.classof\":17,\"./$.core\":22,\"./$.iterators\":43,\"./$.wks\":60}],62:[function(require,module,exports){\n'use strict';\nvar ctx = require('./$.ctx')\n , $export = require('./$.export')\n , toObject = require('./$.to-object')\n , call = require('./$.iter-call')\n , isArrayIter = require('./$.is-array-iter')\n , toLength = require('./$.to-length')\n , getIterFn = require('./core.get-iterator-method');\n$export($export.S + $export.F * !require('./$.iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n var O = toObject(arrayLike)\n , C = typeof this == 'function' ? this : Array\n , $$ = arguments\n , $$len = $$.length\n , mapfn = $$len > 1 ? $$[1] : undefined\n , mapping = mapfn !== undefined\n , index = 0\n , iterFn = getIterFn(O)\n , length, result, step, iterator;\n if(mapping)mapfn = ctx(mapfn, $$len > 2 ? $$[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n result[index] = mapping ? call(iterator, mapfn, [step.value, index], true) : step.value;\n }\n } else {\n length = toLength(O.length);\n for(result = new C(length); length > index; index++){\n result[index] = mapping ? mapfn(O[index], index) : O[index];\n }\n }\n result.length = index;\n return result;\n }\n});\n\n},{\"./$.ctx\":23,\"./$.export\":27,\"./$.is-array-iter\":35,\"./$.iter-call\":38,\"./$.iter-detect\":41,\"./$.to-length\":57,\"./$.to-object\":58,\"./core.get-iterator-method\":61}],63:[function(require,module,exports){\n'use strict';\nvar addToUnscopables = require('./$.add-to-unscopables')\n , step = require('./$.iter-step')\n , Iterators = require('./$.iterators')\n , toIObject = require('./$.to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./$.iter-define')(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n},{\"./$.add-to-unscopables\":15,\"./$.iter-define\":40,\"./$.iter-step\":42,\"./$.iterators\":43,\"./$.to-iobject\":56}],64:[function(require,module,exports){\n'use strict';\nvar strong = require('./$.collection-strong');\n\n// 23.1 Map Objects\nrequire('./$.collection')('Map', function(get){\n return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key){\n var entry = strong.getEntry(this, key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value){\n return strong.def(this, key === 0 ? 0 : key, value);\n }\n}, strong, true);\n},{\"./$.collection\":21,\"./$.collection-strong\":19}],65:[function(require,module,exports){\n\n},{}],66:[function(require,module,exports){\n'use strict';\nvar $at = require('./$.string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./$.iter-define')(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});\n},{\"./$.iter-define\":40,\"./$.string-at\":54}],67:[function(require,module,exports){\n'use strict';\n// ECMAScript 6 symbols shim\nvar $ = require('./$')\n , global = require('./$.global')\n , has = require('./$.has')\n , DESCRIPTORS = require('./$.descriptors')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , $fails = require('./$.fails')\n , shared = require('./$.shared')\n , setToStringTag = require('./$.set-to-string-tag')\n , uid = require('./$.uid')\n , wks = require('./$.wks')\n , keyOf = require('./$.keyof')\n , $names = require('./$.get-names')\n , enumKeys = require('./$.enum-keys')\n , isArray = require('./$.is-array')\n , anObject = require('./$.an-object')\n , toIObject = require('./$.to-iobject')\n , createDesc = require('./$.property-desc')\n , getDesc = $.getDesc\n , setDesc = $.setDesc\n , _create = $.create\n , getNames = $names.get\n , $Symbol = global.Symbol\n , $JSON = global.JSON\n , _stringify = $JSON && $JSON.stringify\n , setter = false\n , HIDDEN = wks('_hidden')\n , isEnum = $.isEnum\n , SymbolRegistry = shared('symbol-registry')\n , AllSymbols = shared('symbols')\n , useNative = typeof $Symbol == 'function'\n , ObjectProto = Object.prototype;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n return _create(setDesc({}, 'a', {\n get: function(){ return setDesc(this, 'a', {value: 7}).a; }\n })).a != 7;\n}) ? function(it, key, D){\n var protoDesc = getDesc(ObjectProto, key);\n if(protoDesc)delete ObjectProto[key];\n setDesc(it, key, D);\n if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc);\n} : setDesc;\n\nvar wrap = function(tag){\n var sym = AllSymbols[tag] = _create($Symbol.prototype);\n sym._k = tag;\n DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, {\n configurable: true,\n set: function(value){\n if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n }\n });\n return sym;\n};\n\nvar isSymbol = function(it){\n return typeof it == 'symbol';\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n if(D && has(AllSymbols, key)){\n if(!D.enumerable){\n if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n D = _create(D, {enumerable: createDesc(0, false)});\n } return setSymbolDesc(it, key, D);\n } return setDesc(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n anObject(it);\n var keys = enumKeys(P = toIObject(P))\n , i = 0\n , l = keys.length\n , key;\n while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P){\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n var E = isEnum.call(this, key);\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key]\n ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n var D = getDesc(it = toIObject(it), key);\n if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n var names = getNames(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key);\n return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n var names = getNames(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);\n return result;\n};\nvar $stringify = function stringify(it){\n if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n var args = [it]\n , i = 1\n , $$ = arguments\n , replacer, $replacer;\n while($$.length > i)args.push($$[i++]);\n replacer = args[1];\n if(typeof replacer == 'function')$replacer = replacer;\n if($replacer || !isArray(replacer))replacer = function(key, value){\n if($replacer)value = $replacer.call(this, key, value);\n if(!isSymbol(value))return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n};\nvar buggyJSON = $fails(function(){\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n});\n\n// 19.4.1.1 Symbol([description])\nif(!useNative){\n $Symbol = function Symbol(){\n if(isSymbol(this))throw TypeError('Symbol is not a constructor');\n return wrap(uid(arguments.length > 0 ? arguments[0] : undefined));\n };\n redefine($Symbol.prototype, 'toString', function toString(){\n return this._k;\n });\n\n isSymbol = function(it){\n return it instanceof $Symbol;\n };\n\n $.create = $create;\n $.isEnum = $propertyIsEnumerable;\n $.getDesc = $getOwnPropertyDescriptor;\n $.setDesc = $defineProperty;\n $.setDescs = $defineProperties;\n $.getNames = $names.get = $getOwnPropertyNames;\n $.getSymbols = $getOwnPropertySymbols;\n\n if(DESCRIPTORS && !require('./$.library')){\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n}\n\nvar symbolStatics = {\n // 19.4.2.1 Symbol.for(key)\n 'for': function(key){\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(key){\n return keyOf(SymbolRegistry, key);\n },\n useSetter: function(){ setter = true; },\n useSimple: function(){ setter = false; }\n};\n// 19.4.2.2 Symbol.hasInstance\n// 19.4.2.3 Symbol.isConcatSpreadable\n// 19.4.2.4 Symbol.iterator\n// 19.4.2.6 Symbol.match\n// 19.4.2.8 Symbol.replace\n// 19.4.2.9 Symbol.search\n// 19.4.2.10 Symbol.species\n// 19.4.2.11 Symbol.split\n// 19.4.2.12 Symbol.toPrimitive\n// 19.4.2.13 Symbol.toStringTag\n// 19.4.2.14 Symbol.unscopables\n$.each.call((\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,' +\n 'species,split,toPrimitive,toStringTag,unscopables'\n).split(','), function(it){\n var sym = wks(it);\n symbolStatics[it] = useNative ? sym : wrap(sym);\n});\n\nsetter = true;\n\n$export($export.G + $export.W, {Symbol: $Symbol});\n\n$export($export.S, 'Symbol', symbolStatics);\n\n$export($export.S + $export.F * !useNative, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify});\n\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n},{\"./$\":44,\"./$.an-object\":16,\"./$.descriptors\":25,\"./$.enum-keys\":26,\"./$.export\":27,\"./$.fails\":28,\"./$.get-names\":30,\"./$.global\":31,\"./$.has\":32,\"./$.is-array\":36,\"./$.keyof\":45,\"./$.library\":46,\"./$.property-desc\":47,\"./$.redefine\":49,\"./$.set-to-string-tag\":51,\"./$.shared\":52,\"./$.to-iobject\":56,\"./$.uid\":59,\"./$.wks\":60}],68:[function(require,module,exports){\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./$.export');\n\n$export($export.P, 'Map', {toJSON: require('./$.collection-to-json')('Map')});\n},{\"./$.collection-to-json\":20,\"./$.export\":27}],69:[function(require,module,exports){\nrequire('./es6.array.iterator');\nvar Iterators = require('./$.iterators');\nIterators.NodeList = Iterators.HTMLCollection = Iterators.Array;\n},{\"./$.iterators\":43,\"./es6.array.iterator\":63}],70:[function(require,module,exports){\narguments[4][14][0].apply(exports,arguments)\n},{\"dup\":14}],71:[function(require,module,exports){\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./$.wks')('unscopables')\n , ArrayProto = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)require('./$.hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n ArrayProto[UNSCOPABLES][key] = true;\n};\n},{\"./$.hide\":99,\"./$.wks\":151}],72:[function(require,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"./$.is-object\":106,\"dup\":16}],73:[function(require,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./$.to-object')\n , toIndex = require('./$.to-index')\n , toLength = require('./$.to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n var O = toObject(this)\n , len = toLength(O.length)\n , to = toIndex(target, len)\n , from = toIndex(start, len)\n , $$ = arguments\n , end = $$.length > 2 ? $$[2] : undefined\n , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n , inc = 1;\n if(from < to && to < from + count){\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while(count-- > 0){\n if(from in O)O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n},{\"./$.to-index\":144,\"./$.to-length\":147,\"./$.to-object\":148}],74:[function(require,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./$.to-object')\n , toIndex = require('./$.to-index')\n , toLength = require('./$.to-length');\nmodule.exports = [].fill || function fill(value /*, start = 0, end = @length */){\n var O = toObject(this)\n , length = toLength(O.length)\n , $$ = arguments\n , $$len = $$.length\n , index = toIndex($$len > 1 ? $$[1] : undefined, length)\n , end = $$len > 2 ? $$[2] : undefined\n , endPos = end === undefined ? length : toIndex(end, length);\n while(endPos > index)O[index++] = value;\n return O;\n};\n},{\"./$.to-index\":144,\"./$.to-length\":147,\"./$.to-object\":148}],75:[function(require,module,exports){\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./$.to-iobject')\n , toLength = require('./$.to-length')\n , toIndex = require('./$.to-index');\nmodule.exports = function(IS_INCLUDES){\n return function($this, el, fromIndex){\n var O = toIObject($this)\n , length = toLength(O.length)\n , index = toIndex(fromIndex, length)\n , value;\n // Array#includes uses SameValueZero equality algorithm\n if(IS_INCLUDES && el != el)while(length > index){\n value = O[index++];\n if(value != value)return true;\n // Array#toIndex ignores holes, Array#includes - not\n } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n if(O[index] === el)return IS_INCLUDES || index;\n } return !IS_INCLUDES && -1;\n };\n};\n},{\"./$.to-index\":144,\"./$.to-iobject\":146,\"./$.to-length\":147}],76:[function(require,module,exports){\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./$.ctx')\n , IObject = require('./$.iobject')\n , toObject = require('./$.to-object')\n , toLength = require('./$.to-length')\n , asc = require('./$.array-species-create');\nmodule.exports = function(TYPE){\n var IS_MAP = TYPE == 1\n , IS_FILTER = TYPE == 2\n , IS_SOME = TYPE == 3\n , IS_EVERY = TYPE == 4\n , IS_FIND_INDEX = TYPE == 6\n , NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function($this, callbackfn, that){\n var O = toObject($this)\n , self = IObject(O)\n , f = ctx(callbackfn, that, 3)\n , length = toLength(self.length)\n , index = 0\n , result = IS_MAP ? asc($this, length) : IS_FILTER ? asc($this, 0) : undefined\n , val, res;\n for(;length > index; index++)if(NO_HOLES || index in self){\n val = self[index];\n res = f(val, index, O);\n if(TYPE){\n if(IS_MAP)result[index] = res; // map\n else if(res)switch(TYPE){\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if(IS_EVERY)return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n},{\"./$.array-species-create\":77,\"./$.ctx\":85,\"./$.iobject\":102,\"./$.to-length\":147,\"./$.to-object\":148}],77:[function(require,module,exports){\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar isObject = require('./$.is-object')\n , isArray = require('./$.is-array')\n , SPECIES = require('./$.wks')('species');\nmodule.exports = function(original, length){\n var C;\n if(isArray(original)){\n C = original.constructor;\n // cross-realm fallback\n if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\n if(isObject(C)){\n C = C[SPECIES];\n if(C === null)C = undefined;\n }\n } return new (C === undefined ? Array : C)(length);\n};\n},{\"./$.is-array\":104,\"./$.is-object\":106,\"./$.wks\":151}],78:[function(require,module,exports){\narguments[4][17][0].apply(exports,arguments)\n},{\"./$.cof\":79,\"./$.wks\":151,\"dup\":17}],79:[function(require,module,exports){\narguments[4][18][0].apply(exports,arguments)\n},{\"dup\":18}],80:[function(require,module,exports){\narguments[4][19][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.ctx\":85,\"./$.defined\":86,\"./$.descriptors\":87,\"./$.for-of\":95,\"./$.has\":98,\"./$.hide\":99,\"./$.is-object\":106,\"./$.iter-define\":110,\"./$.iter-step\":112,\"./$.redefine-all\":128,\"./$.set-species\":133,\"./$.strict-new\":137,\"./$.uid\":150,\"dup\":19}],81:[function(require,module,exports){\narguments[4][20][0].apply(exports,arguments)\n},{\"./$.classof\":78,\"./$.for-of\":95,\"dup\":20}],82:[function(require,module,exports){\n'use strict';\nvar hide = require('./$.hide')\n , redefineAll = require('./$.redefine-all')\n , anObject = require('./$.an-object')\n , isObject = require('./$.is-object')\n , strictNew = require('./$.strict-new')\n , forOf = require('./$.for-of')\n , createArrayMethod = require('./$.array-methods')\n , $has = require('./$.has')\n , WEAK = require('./$.uid')('weak')\n , isExtensible = Object.isExtensible || isObject\n , arrayFind = createArrayMethod(5)\n , arrayFindIndex = createArrayMethod(6)\n , id = 0;\n\n// fallback for frozen keys\nvar frozenStore = function(that){\n return that._l || (that._l = new FrozenStore);\n};\nvar FrozenStore = function(){\n this.a = [];\n};\nvar findFrozen = function(store, key){\n return arrayFind(store.a, function(it){\n return it[0] === key;\n });\n};\nFrozenStore.prototype = {\n get: function(key){\n var entry = findFrozen(this, key);\n if(entry)return entry[1];\n },\n has: function(key){\n return !!findFrozen(this, key);\n },\n set: function(key, value){\n var entry = findFrozen(this, key);\n if(entry)entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function(key){\n var index = arrayFindIndex(this.a, function(it){\n return it[0] === key;\n });\n if(~index)this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n var C = wrapper(function(that, iterable){\n strictNew(that, C, NAME);\n that._i = id++; // collection id\n that._l = undefined; // leak store for frozen objects\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function(key){\n if(!isObject(key))return false;\n if(!isExtensible(key))return frozenStore(this)['delete'](key);\n return $has(key, WEAK) && $has(key[WEAK], this._i) && delete key[WEAK][this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key){\n if(!isObject(key))return false;\n if(!isExtensible(key))return frozenStore(this).has(key);\n return $has(key, WEAK) && $has(key[WEAK], this._i);\n }\n });\n return C;\n },\n def: function(that, key, value){\n if(!isExtensible(anObject(key))){\n frozenStore(that).set(key, value);\n } else {\n $has(key, WEAK) || hide(key, WEAK, {});\n key[WEAK][that._i] = value;\n } return that;\n },\n frozenStore: frozenStore,\n WEAK: WEAK\n};\n},{\"./$.an-object\":72,\"./$.array-methods\":76,\"./$.for-of\":95,\"./$.has\":98,\"./$.hide\":99,\"./$.is-object\":106,\"./$.redefine-all\":128,\"./$.strict-new\":137,\"./$.uid\":150}],83:[function(require,module,exports){\n'use strict';\nvar global = require('./$.global')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , redefineAll = require('./$.redefine-all')\n , forOf = require('./$.for-of')\n , strictNew = require('./$.strict-new')\n , isObject = require('./$.is-object')\n , fails = require('./$.fails')\n , $iterDetect = require('./$.iter-detect')\n , setToStringTag = require('./$.set-to-string-tag');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n var Base = global[NAME]\n , C = Base\n , ADDER = IS_MAP ? 'set' : 'add'\n , proto = C && C.prototype\n , O = {};\n var fixMethod = function(KEY){\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function(a){\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a){\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a){\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n new C().entries().next();\n }))){\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n } else {\n var instance = new C\n // early implementations not supports chaining\n , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n , BUGGY_ZERO;\n if(!ACCEPT_ITERABLES){ \n C = wrapper(function(target, iterable){\n strictNew(target, C, NAME);\n var that = new Base;\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n IS_WEAK || instance.forEach(function(val, key){\n BUGGY_ZERO = 1 / key === -Infinity;\n });\n if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n // weak collections should not contains .clear method\n if(IS_WEAK && proto.clear)delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n},{\"./$.export\":90,\"./$.fails\":92,\"./$.for-of\":95,\"./$.global\":97,\"./$.is-object\":106,\"./$.iter-detect\":111,\"./$.redefine\":129,\"./$.redefine-all\":128,\"./$.set-to-string-tag\":134,\"./$.strict-new\":137}],84:[function(require,module,exports){\narguments[4][22][0].apply(exports,arguments)\n},{\"dup\":22}],85:[function(require,module,exports){\narguments[4][23][0].apply(exports,arguments)\n},{\"./$.a-function\":70,\"dup\":23}],86:[function(require,module,exports){\narguments[4][24][0].apply(exports,arguments)\n},{\"dup\":24}],87:[function(require,module,exports){\narguments[4][25][0].apply(exports,arguments)\n},{\"./$.fails\":92,\"dup\":25}],88:[function(require,module,exports){\nvar isObject = require('./$.is-object')\n , document = require('./$.global').document\n // in old IE typeof document.createElement is 'object'\n , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n return is ? document.createElement(it) : {};\n};\n},{\"./$.global\":97,\"./$.is-object\":106}],89:[function(require,module,exports){\narguments[4][26][0].apply(exports,arguments)\n},{\"./$\":114,\"dup\":26}],90:[function(require,module,exports){\nvar global = require('./$.global')\n , core = require('./$.core')\n , hide = require('./$.hide')\n , redefine = require('./$.redefine')\n , ctx = require('./$.ctx')\n , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n var IS_FORCED = type & $export.F\n , IS_GLOBAL = type & $export.G\n , IS_STATIC = type & $export.S\n , IS_PROTO = type & $export.P\n , IS_BIND = type & $export.B\n , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n , key, own, out, exp;\n if(IS_GLOBAL)source = name;\n for(key in source){\n // contains in native\n own = !IS_FORCED && target && key in target;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if(target && !own)redefine(target, key, out);\n // export\n if(exports[key] != out)hide(exports, key, exp);\n if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\nmodule.exports = $export;\n},{\"./$.core\":84,\"./$.ctx\":85,\"./$.global\":97,\"./$.hide\":99,\"./$.redefine\":129}],91:[function(require,module,exports){\nvar MATCH = require('./$.wks')('match');\nmodule.exports = function(KEY){\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch(e){\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch(f){ /* empty */ }\n } return true;\n};\n},{\"./$.wks\":151}],92:[function(require,module,exports){\narguments[4][28][0].apply(exports,arguments)\n},{\"dup\":28}],93:[function(require,module,exports){\n'use strict';\nvar hide = require('./$.hide')\n , redefine = require('./$.redefine')\n , fails = require('./$.fails')\n , defined = require('./$.defined')\n , wks = require('./$.wks');\n\nmodule.exports = function(KEY, length, exec){\n var SYMBOL = wks(KEY)\n , original = ''[KEY];\n if(fails(function(){\n var O = {};\n O[SYMBOL] = function(){ return 7; };\n return ''[KEY](O) != 7;\n })){\n redefine(String.prototype, KEY, exec(defined, SYMBOL, original));\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function(string, arg){ return original.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function(string){ return original.call(string, this); }\n );\n }\n};\n},{\"./$.defined\":86,\"./$.fails\":92,\"./$.hide\":99,\"./$.redefine\":129,\"./$.wks\":151}],94:[function(require,module,exports){\n'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./$.an-object');\nmodule.exports = function(){\n var that = anObject(this)\n , result = '';\n if(that.global) result += 'g';\n if(that.ignoreCase) result += 'i';\n if(that.multiline) result += 'm';\n if(that.unicode) result += 'u';\n if(that.sticky) result += 'y';\n return result;\n};\n},{\"./$.an-object\":72}],95:[function(require,module,exports){\narguments[4][29][0].apply(exports,arguments)\n},{\"./$.an-object\":72,\"./$.ctx\":85,\"./$.is-array-iter\":103,\"./$.iter-call\":108,\"./$.to-length\":147,\"./core.get-iterator-method\":152,\"dup\":29}],96:[function(require,module,exports){\narguments[4][30][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.to-iobject\":146,\"dup\":30}],97:[function(require,module,exports){\narguments[4][31][0].apply(exports,arguments)\n},{\"dup\":31}],98:[function(require,module,exports){\narguments[4][32][0].apply(exports,arguments)\n},{\"dup\":32}],99:[function(require,module,exports){\narguments[4][33][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.property-desc\":127,\"dup\":33}],100:[function(require,module,exports){\nmodule.exports = require('./$.global').document && document.documentElement;\n},{\"./$.global\":97}],101:[function(require,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n var un = that === undefined;\n switch(args.length){\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n},{}],102:[function(require,module,exports){\narguments[4][34][0].apply(exports,arguments)\n},{\"./$.cof\":79,\"dup\":34}],103:[function(require,module,exports){\narguments[4][35][0].apply(exports,arguments)\n},{\"./$.iterators\":113,\"./$.wks\":151,\"dup\":35}],104:[function(require,module,exports){\narguments[4][36][0].apply(exports,arguments)\n},{\"./$.cof\":79,\"dup\":36}],105:[function(require,module,exports){\n// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./$.is-object')\n , floor = Math.floor;\nmodule.exports = function isInteger(it){\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n},{\"./$.is-object\":106}],106:[function(require,module,exports){\narguments[4][37][0].apply(exports,arguments)\n},{\"dup\":37}],107:[function(require,module,exports){\n// 7.2.8 IsRegExp(argument)\nvar isObject = require('./$.is-object')\n , cof = require('./$.cof')\n , MATCH = require('./$.wks')('match');\nmodule.exports = function(it){\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n},{\"./$.cof\":79,\"./$.is-object\":106,\"./$.wks\":151}],108:[function(require,module,exports){\narguments[4][38][0].apply(exports,arguments)\n},{\"./$.an-object\":72,\"dup\":38}],109:[function(require,module,exports){\narguments[4][39][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.hide\":99,\"./$.property-desc\":127,\"./$.set-to-string-tag\":134,\"./$.wks\":151,\"dup\":39}],110:[function(require,module,exports){\narguments[4][40][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.export\":90,\"./$.has\":98,\"./$.hide\":99,\"./$.iter-create\":109,\"./$.iterators\":113,\"./$.library\":116,\"./$.redefine\":129,\"./$.set-to-string-tag\":134,\"./$.wks\":151,\"dup\":40}],111:[function(require,module,exports){\narguments[4][41][0].apply(exports,arguments)\n},{\"./$.wks\":151,\"dup\":41}],112:[function(require,module,exports){\narguments[4][42][0].apply(exports,arguments)\n},{\"dup\":42}],113:[function(require,module,exports){\narguments[4][43][0].apply(exports,arguments)\n},{\"dup\":43}],114:[function(require,module,exports){\narguments[4][44][0].apply(exports,arguments)\n},{\"dup\":44}],115:[function(require,module,exports){\narguments[4][45][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.to-iobject\":146,\"dup\":45}],116:[function(require,module,exports){\nmodule.exports = false;\n},{}],117:[function(require,module,exports){\n// 20.2.2.14 Math.expm1(x)\nmodule.exports = Math.expm1 || function expm1(x){\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n};\n},{}],118:[function(require,module,exports){\n// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n},{}],119:[function(require,module,exports){\n// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n},{}],120:[function(require,module,exports){\nvar global = require('./$.global')\n , macrotask = require('./$.task').set\n , Observer = global.MutationObserver || global.WebKitMutationObserver\n , process = global.process\n , Promise = global.Promise\n , isNode = require('./$.cof')(process) == 'process'\n , head, last, notify;\n\nvar flush = function(){\n var parent, domain, fn;\n if(isNode && (parent = process.domain)){\n process.domain = null;\n parent.exit();\n }\n while(head){\n domain = head.domain;\n fn = head.fn;\n if(domain)domain.enter();\n fn(); // <- currently we use it only for Promise - try / catch not required\n if(domain)domain.exit();\n head = head.next;\n } last = undefined;\n if(parent)parent.enter();\n};\n\n// Node.js\nif(isNode){\n notify = function(){\n process.nextTick(flush);\n };\n// browsers with MutationObserver\n} else if(Observer){\n var toggle = 1\n , node = document.createTextNode('');\n new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n notify = function(){\n node.data = toggle = -toggle;\n };\n// environments with maybe non-completely correct, but existent Promise\n} else if(Promise && Promise.resolve){\n notify = function(){\n Promise.resolve().then(flush);\n };\n// for other environments - macrotask based on:\n// - setImmediate\n// - MessageChannel\n// - window.postMessag\n// - onreadystatechange\n// - setTimeout\n} else {\n notify = function(){\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n}\n\nmodule.exports = function asap(fn){\n var task = {fn: fn, next: undefined, domain: isNode && process.domain};\n if(last)last.next = task;\n if(!head){\n head = task;\n notify();\n } last = task;\n};\n},{\"./$.cof\":79,\"./$.global\":97,\"./$.task\":143}],121:[function(require,module,exports){\n// 19.1.2.1 Object.assign(target, source, ...)\nvar $ = require('./$')\n , toObject = require('./$.to-object')\n , IObject = require('./$.iobject');\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = require('./$.fails')(function(){\n var a = Object.assign\n , A = {}\n , B = {}\n , S = Symbol()\n , K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function(k){ B[k] = k; });\n return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n var T = toObject(target)\n , $$ = arguments\n , $$len = $$.length\n , index = 1\n , getKeys = $.getKeys\n , getSymbols = $.getSymbols\n , isEnum = $.isEnum;\n while($$len > index){\n var S = IObject($$[index++])\n , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n , length = keys.length\n , j = 0\n , key;\n while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n }\n return T;\n} : Object.assign;\n},{\"./$\":114,\"./$.fails\":92,\"./$.iobject\":102,\"./$.to-object\":148}],122:[function(require,module,exports){\n// most Object methods by ES6 should accept primitives\nvar $export = require('./$.export')\n , core = require('./$.core')\n , fails = require('./$.fails');\nmodule.exports = function(KEY, exec){\n var fn = (core.Object || {})[KEY] || Object[KEY]\n , exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n},{\"./$.core\":84,\"./$.export\":90,\"./$.fails\":92}],123:[function(require,module,exports){\nvar $ = require('./$')\n , toIObject = require('./$.to-iobject')\n , isEnum = $.isEnum;\nmodule.exports = function(isEntries){\n return function(it){\n var O = toIObject(it)\n , keys = $.getKeys(O)\n , length = keys.length\n , i = 0\n , result = []\n , key;\n while(length > i)if(isEnum.call(O, key = keys[i++])){\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n},{\"./$\":114,\"./$.to-iobject\":146}],124:[function(require,module,exports){\n// all object keys, includes non-enumerable and symbols\nvar $ = require('./$')\n , anObject = require('./$.an-object')\n , Reflect = require('./$.global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n var keys = $.getNames(anObject(it))\n , getSymbols = $.getSymbols;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n},{\"./$\":114,\"./$.an-object\":72,\"./$.global\":97}],125:[function(require,module,exports){\n'use strict';\nvar path = require('./$.path')\n , invoke = require('./$.invoke')\n , aFunction = require('./$.a-function');\nmodule.exports = function(/* ...pargs */){\n var fn = aFunction(this)\n , length = arguments.length\n , pargs = Array(length)\n , i = 0\n , _ = path._\n , holder = false;\n while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;\n return function(/* ...args */){\n var that = this\n , $$ = arguments\n , $$len = $$.length\n , j = 0, k = 0, args;\n if(!holder && !$$len)return invoke(fn, pargs, that);\n args = pargs.slice();\n if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++];\n while($$len > k)args.push($$[k++]);\n return invoke(fn, args, that);\n };\n};\n},{\"./$.a-function\":70,\"./$.invoke\":101,\"./$.path\":126}],126:[function(require,module,exports){\nmodule.exports = require('./$.global');\n},{\"./$.global\":97}],127:[function(require,module,exports){\narguments[4][47][0].apply(exports,arguments)\n},{\"dup\":47}],128:[function(require,module,exports){\narguments[4][48][0].apply(exports,arguments)\n},{\"./$.redefine\":129,\"dup\":48}],129:[function(require,module,exports){\n// add fake Function#toString\n// for correct work wrapped methods / constructors with methods like LoDash isNative\nvar global = require('./$.global')\n , hide = require('./$.hide')\n , SRC = require('./$.uid')('src')\n , TO_STRING = 'toString'\n , $toString = Function[TO_STRING]\n , TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./$.core').inspectSource = function(it){\n return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n if(typeof val == 'function'){\n val.hasOwnProperty(SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n val.hasOwnProperty('name') || hide(val, 'name', key);\n }\n if(O === global){\n O[key] = val;\n } else {\n if(!safe)delete O[key];\n hide(O, key, val);\n }\n})(Function.prototype, TO_STRING, function toString(){\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n},{\"./$.core\":84,\"./$.global\":97,\"./$.hide\":99,\"./$.uid\":150}],130:[function(require,module,exports){\nmodule.exports = function(regExp, replace){\n var replacer = replace === Object(replace) ? function(part){\n return replace[part];\n } : replace;\n return function(it){\n return String(it).replace(regExp, replacer);\n };\n};\n},{}],131:[function(require,module,exports){\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n},{}],132:[function(require,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar getDesc = require('./$').getDesc\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object');\nvar check = function(O, proto){\n anObject(O);\n if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function(test, buggy, set){\n try {\n set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch(e){ buggy = true; }\n return function setPrototypeOf(O, proto){\n check(O, proto);\n if(buggy)O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n},{\"./$\":114,\"./$.an-object\":72,\"./$.ctx\":85,\"./$.is-object\":106}],133:[function(require,module,exports){\n'use strict';\nvar global = require('./$.global')\n , $ = require('./$')\n , DESCRIPTORS = require('./$.descriptors')\n , SPECIES = require('./$.wks')('species');\n\nmodule.exports = function(KEY){\n var C = global[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.global\":97,\"./$.wks\":151}],134:[function(require,module,exports){\narguments[4][51][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.has\":98,\"./$.wks\":151,\"dup\":51}],135:[function(require,module,exports){\narguments[4][52][0].apply(exports,arguments)\n},{\"./$.global\":97,\"dup\":52}],136:[function(require,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , SPECIES = require('./$.wks')('species');\nmodule.exports = function(O, D){\n var C = anObject(O).constructor, S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n},{\"./$.a-function\":70,\"./$.an-object\":72,\"./$.wks\":151}],137:[function(require,module,exports){\narguments[4][53][0].apply(exports,arguments)\n},{\"dup\":53}],138:[function(require,module,exports){\narguments[4][54][0].apply(exports,arguments)\n},{\"./$.defined\":86,\"./$.to-integer\":145,\"dup\":54}],139:[function(require,module,exports){\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./$.is-regexp')\n , defined = require('./$.defined');\n\nmodule.exports = function(that, searchString, NAME){\n if(isRegExp(searchString))throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n},{\"./$.defined\":86,\"./$.is-regexp\":107}],140:[function(require,module,exports){\n// https://github.com/ljharb/proposal-string-pad-left-right\nvar toLength = require('./$.to-length')\n , repeat = require('./$.string-repeat')\n , defined = require('./$.defined');\n\nmodule.exports = function(that, maxLength, fillString, left){\n var S = String(defined(that))\n , stringLength = S.length\n , fillStr = fillString === undefined ? ' ' : String(fillString)\n , intMaxLength = toLength(maxLength);\n if(intMaxLength <= stringLength)return S;\n if(fillStr == '')fillStr = ' ';\n var fillLen = intMaxLength - stringLength\n , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n},{\"./$.defined\":86,\"./$.string-repeat\":141,\"./$.to-length\":147}],141:[function(require,module,exports){\n'use strict';\nvar toInteger = require('./$.to-integer')\n , defined = require('./$.defined');\n\nmodule.exports = function repeat(count){\n var str = String(defined(this))\n , res = ''\n , n = toInteger(count);\n if(n < 0 || n == Infinity)throw RangeError(\"Count can't be negative\");\n for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n return res;\n};\n},{\"./$.defined\":86,\"./$.to-integer\":145}],142:[function(require,module,exports){\nvar $export = require('./$.export')\n , defined = require('./$.defined')\n , fails = require('./$.fails')\n , spaces = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF'\n , space = '[' + spaces + ']'\n , non = '\\u200b\\u0085'\n , ltrim = RegExp('^' + space + space + '*')\n , rtrim = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec){\n var exp = {};\n exp[KEY] = exec(trim);\n $export($export.P + $export.F * fails(function(){\n return !!spaces[KEY]() || non[KEY]() != non;\n }), 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n string = String(defined(string));\n if(TYPE & 1)string = string.replace(ltrim, '');\n if(TYPE & 2)string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n},{\"./$.defined\":86,\"./$.export\":90,\"./$.fails\":92}],143:[function(require,module,exports){\nvar ctx = require('./$.ctx')\n , invoke = require('./$.invoke')\n , html = require('./$.html')\n , cel = require('./$.dom-create')\n , global = require('./$.global')\n , process = global.process\n , setTask = global.setImmediate\n , clearTask = global.clearImmediate\n , MessageChannel = global.MessageChannel\n , counter = 0\n , queue = {}\n , ONREADYSTATECHANGE = 'onreadystatechange'\n , defer, channel, port;\nvar run = function(){\n var id = +this;\n if(queue.hasOwnProperty(id)){\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listner = function(event){\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n setTask = function setImmediate(fn){\n var args = [], i = 1;\n while(arguments.length > i)args.push(arguments[i++]);\n queue[++counter] = function(){\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id){\n delete queue[id];\n };\n // Node.js 0.8-\n if(require('./$.cof')(process) == 'process'){\n defer = function(id){\n process.nextTick(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if(MessageChannel){\n channel = new MessageChannel;\n port = channel.port2;\n channel.port1.onmessage = listner;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n defer = function(id){\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listner, false);\n // IE8-\n } else if(ONREADYSTATECHANGE in cel('script')){\n defer = function(id){\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function(id){\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n},{\"./$.cof\":79,\"./$.ctx\":85,\"./$.dom-create\":88,\"./$.global\":97,\"./$.html\":100,\"./$.invoke\":101}],144:[function(require,module,exports){\nvar toInteger = require('./$.to-integer')\n , max = Math.max\n , min = Math.min;\nmodule.exports = function(index, length){\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n},{\"./$.to-integer\":145}],145:[function(require,module,exports){\narguments[4][55][0].apply(exports,arguments)\n},{\"dup\":55}],146:[function(require,module,exports){\narguments[4][56][0].apply(exports,arguments)\n},{\"./$.defined\":86,\"./$.iobject\":102,\"dup\":56}],147:[function(require,module,exports){\narguments[4][57][0].apply(exports,arguments)\n},{\"./$.to-integer\":145,\"dup\":57}],148:[function(require,module,exports){\narguments[4][58][0].apply(exports,arguments)\n},{\"./$.defined\":86,\"dup\":58}],149:[function(require,module,exports){\n// 7.1.1 ToPrimitive(input [, PreferredType])\r\nvar isObject = require('./$.is-object');\r\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\r\n// and the second argument - flag - preferred type is a string\r\nmodule.exports = function(it, S){\r\n if(!isObject(it))return it;\r\n var fn, val;\r\n if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\r\n if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\r\n if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\r\n throw TypeError(\"Can't convert object to primitive value\");\r\n};\n},{\"./$.is-object\":106}],150:[function(require,module,exports){\narguments[4][59][0].apply(exports,arguments)\n},{\"dup\":59}],151:[function(require,module,exports){\narguments[4][60][0].apply(exports,arguments)\n},{\"./$.global\":97,\"./$.shared\":135,\"./$.uid\":150,\"dup\":60}],152:[function(require,module,exports){\narguments[4][61][0].apply(exports,arguments)\n},{\"./$.classof\":78,\"./$.core\":84,\"./$.iterators\":113,\"./$.wks\":151,\"dup\":61}],153:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , $export = require('./$.export')\n , DESCRIPTORS = require('./$.descriptors')\n , createDesc = require('./$.property-desc')\n , html = require('./$.html')\n , cel = require('./$.dom-create')\n , has = require('./$.has')\n , cof = require('./$.cof')\n , invoke = require('./$.invoke')\n , fails = require('./$.fails')\n , anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , isObject = require('./$.is-object')\n , toObject = require('./$.to-object')\n , toIObject = require('./$.to-iobject')\n , toInteger = require('./$.to-integer')\n , toIndex = require('./$.to-index')\n , toLength = require('./$.to-length')\n , IObject = require('./$.iobject')\n , IE_PROTO = require('./$.uid')('__proto__')\n , createArrayMethod = require('./$.array-methods')\n , arrayIndexOf = require('./$.array-includes')(false)\n , ObjectProto = Object.prototype\n , ArrayProto = Array.prototype\n , arraySlice = ArrayProto.slice\n , arrayJoin = ArrayProto.join\n , defineProperty = $.setDesc\n , getOwnDescriptor = $.getDesc\n , defineProperties = $.setDescs\n , factories = {}\n , IE8_DOM_DEFINE;\n\nif(!DESCRIPTORS){\n IE8_DOM_DEFINE = !fails(function(){\n return defineProperty(cel('div'), 'a', {get: function(){ return 7; }}).a != 7;\n });\n $.setDesc = function(O, P, Attributes){\n if(IE8_DOM_DEFINE)try {\n return defineProperty(O, P, Attributes);\n } catch(e){ /* empty */ }\n if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n if('value' in Attributes)anObject(O)[P] = Attributes.value;\n return O;\n };\n $.getDesc = function(O, P){\n if(IE8_DOM_DEFINE)try {\n return getOwnDescriptor(O, P);\n } catch(e){ /* empty */ }\n if(has(O, P))return createDesc(!ObjectProto.propertyIsEnumerable.call(O, P), O[P]);\n };\n $.setDescs = defineProperties = function(O, Properties){\n anObject(O);\n var keys = $.getKeys(Properties)\n , length = keys.length\n , i = 0\n , P;\n while(length > i)$.setDesc(O, P = keys[i++], Properties[P]);\n return O;\n };\n}\n$export($export.S + $export.F * !DESCRIPTORS, 'Object', {\n // 19.1.2.6 / 15.2.3.3 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $.getDesc,\n // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n defineProperty: $.setDesc,\n // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n defineProperties: defineProperties\n});\n\n // IE 8- don't enum bug keys\nvar keys1 = ('constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,' +\n 'toLocaleString,toString,valueOf').split(',')\n // Additional keys for getOwnPropertyNames\n , keys2 = keys1.concat('length', 'prototype')\n , keysLen1 = keys1.length;\n\n// Create object with `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n // Thrash, waste and sodomy: IE GC bug\n var iframe = cel('iframe')\n , i = keysLen1\n , gt = '>'\n , iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(' i)if(has(O, key = names[i++])){\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n };\n};\nvar Empty = function(){};\n$export($export.S, 'Object', {\n // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n getPrototypeOf: $.getProto = $.getProto || function(O){\n O = toObject(O);\n if(has(O, IE_PROTO))return O[IE_PROTO];\n if(typeof O.constructor == 'function' && O instanceof O.constructor){\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n },\n // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $.getNames = $.getNames || createGetKeys(keys2, keys2.length, true),\n // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n create: $.create = $.create || function(O, /*?*/Properties){\n var result;\n if(O !== null){\n Empty.prototype = anObject(O);\n result = new Empty();\n Empty.prototype = null;\n // add \"__proto__\" for Object.getPrototypeOf shim\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : defineProperties(result, Properties);\n },\n // 19.1.2.14 / 15.2.3.14 Object.keys(O)\n keys: $.getKeys = $.getKeys || createGetKeys(keys1, keysLen1, false)\n});\n\nvar construct = function(F, len, args){\n if(!(len in factories)){\n for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n }\n return factories[len](F, args);\n};\n\n// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\n$export($export.P, 'Function', {\n bind: function bind(that /*, args... */){\n var fn = aFunction(this)\n , partArgs = arraySlice.call(arguments, 1);\n var bound = function(/* args... */){\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if(isObject(fn.prototype))bound.prototype = fn.prototype;\n return bound;\n }\n});\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * fails(function(){\n if(html)arraySlice.call(html);\n}), 'Array', {\n slice: function(begin, end){\n var len = toLength(this.length)\n , klass = cof(this);\n end = end === undefined ? len : end;\n if(klass == 'Array')return arraySlice.call(this, begin, end);\n var start = toIndex(begin, len)\n , upTo = toIndex(end, len)\n , size = toLength(upTo - start)\n , cloned = Array(size)\n , i = 0;\n for(; i < size; i++)cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n$export($export.P + $export.F * (IObject != Object), 'Array', {\n join: function join(separator){\n return arrayJoin.call(IObject(this), separator === undefined ? ',' : separator);\n }\n});\n\n// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\n$export($export.S, 'Array', {isArray: require('./$.is-array')});\n\nvar createArrayReduce = function(isRight){\n return function(callbackfn, memo){\n aFunction(callbackfn);\n var O = IObject(this)\n , length = toLength(O.length)\n , index = isRight ? length - 1 : 0\n , i = isRight ? -1 : 1;\n if(arguments.length < 2)for(;;){\n if(index in O){\n memo = O[index];\n index += i;\n break;\n }\n index += i;\n if(isRight ? index < 0 : length <= index){\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for(;isRight ? index >= 0 : length > index; index += i)if(index in O){\n memo = callbackfn(memo, O[index], index, this);\n }\n return memo;\n };\n};\n\nvar methodize = function($fn){\n return function(arg1/*, arg2 = undefined */){\n return $fn(this, arg1, arguments[1]);\n };\n};\n\n$export($export.P, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: $.each = $.each || methodize(createArrayMethod(0)),\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: methodize(createArrayMethod(1)),\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: methodize(createArrayMethod(2)),\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: methodize(createArrayMethod(3)),\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: methodize(createArrayMethod(4)),\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: createArrayReduce(false),\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: createArrayReduce(true),\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: methodize(arrayIndexOf),\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function(el, fromIndex /* = @[*-1] */){\n var O = toIObject(this)\n , length = toLength(O.length)\n , index = length - 1;\n if(arguments.length > 1)index = Math.min(index, toInteger(fromIndex));\n if(index < 0)index = toLength(length + index);\n for(;index >= 0; index--)if(index in O)if(O[index] === el)return index;\n return -1;\n }\n});\n\n// 20.3.3.1 / 15.9.4.4 Date.now()\n$export($export.S, 'Date', {now: function(){ return +new Date; }});\n\nvar lz = function(num){\n return num > 9 ? num : '0' + num;\n};\n\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (fails(function(){\n return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\n}) || !fails(function(){\n new Date(NaN).toISOString();\n})), 'Date', {\n toISOString: function toISOString(){\n if(!isFinite(this))throw RangeError('Invalid time value');\n var d = this\n , y = d.getUTCFullYear()\n , m = d.getUTCMilliseconds()\n , s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n }\n});\n},{\"./$\":114,\"./$.a-function\":70,\"./$.an-object\":72,\"./$.array-includes\":75,\"./$.array-methods\":76,\"./$.cof\":79,\"./$.descriptors\":87,\"./$.dom-create\":88,\"./$.export\":90,\"./$.fails\":92,\"./$.has\":98,\"./$.html\":100,\"./$.invoke\":101,\"./$.iobject\":102,\"./$.is-array\":104,\"./$.is-object\":106,\"./$.property-desc\":127,\"./$.to-index\":144,\"./$.to-integer\":145,\"./$.to-iobject\":146,\"./$.to-length\":147,\"./$.to-object\":148,\"./$.uid\":150}],154:[function(require,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./$.export');\n\n$export($export.P, 'Array', {copyWithin: require('./$.array-copy-within')});\n\nrequire('./$.add-to-unscopables')('copyWithin');\n},{\"./$.add-to-unscopables\":71,\"./$.array-copy-within\":73,\"./$.export\":90}],155:[function(require,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./$.export');\n\n$export($export.P, 'Array', {fill: require('./$.array-fill')});\n\nrequire('./$.add-to-unscopables')('fill');\n},{\"./$.add-to-unscopables\":71,\"./$.array-fill\":74,\"./$.export\":90}],156:[function(require,module,exports){\n'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./$.export')\n , $find = require('./$.array-methods')(6)\n , KEY = 'findIndex'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./$.add-to-unscopables')(KEY);\n},{\"./$.add-to-unscopables\":71,\"./$.array-methods\":76,\"./$.export\":90}],157:[function(require,module,exports){\n'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./$.export')\n , $find = require('./$.array-methods')(5)\n , KEY = 'find'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./$.add-to-unscopables')(KEY);\n},{\"./$.add-to-unscopables\":71,\"./$.array-methods\":76,\"./$.export\":90}],158:[function(require,module,exports){\narguments[4][62][0].apply(exports,arguments)\n},{\"./$.ctx\":85,\"./$.export\":90,\"./$.is-array-iter\":103,\"./$.iter-call\":108,\"./$.iter-detect\":111,\"./$.to-length\":147,\"./$.to-object\":148,\"./core.get-iterator-method\":152,\"dup\":62}],159:[function(require,module,exports){\narguments[4][63][0].apply(exports,arguments)\n},{\"./$.add-to-unscopables\":71,\"./$.iter-define\":110,\"./$.iter-step\":112,\"./$.iterators\":113,\"./$.to-iobject\":146,\"dup\":63}],160:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./$.fails')(function(){\n function F(){}\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */){\n var index = 0\n , $$ = arguments\n , $$len = $$.length\n , result = new (typeof this == 'function' ? this : Array)($$len);\n while($$len > index)result[index] = $$[index++];\n result.length = $$len;\n return result;\n }\n});\n},{\"./$.export\":90,\"./$.fails\":92}],161:[function(require,module,exports){\nrequire('./$.set-species')('Array');\n},{\"./$.set-species\":133}],162:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , isObject = require('./$.is-object')\n , HAS_INSTANCE = require('./$.wks')('hasInstance')\n , FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))$.setDesc(FunctionProto, HAS_INSTANCE, {value: function(O){\n if(typeof this != 'function' || !isObject(O))return false;\n if(!isObject(this.prototype))return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while(O = $.getProto(O))if(this.prototype === O)return true;\n return false;\n}});\n},{\"./$\":114,\"./$.is-object\":106,\"./$.wks\":151}],163:[function(require,module,exports){\nvar setDesc = require('./$').setDesc\n , createDesc = require('./$.property-desc')\n , has = require('./$.has')\n , FProto = Function.prototype\n , nameRE = /^\\s*function ([^ (]*)/\n , NAME = 'name';\n// 19.2.4.2 name\nNAME in FProto || require('./$.descriptors') && setDesc(FProto, NAME, {\n configurable: true,\n get: function(){\n var match = ('' + this).match(nameRE)\n , name = match ? match[1] : '';\n has(this, NAME) || setDesc(this, NAME, createDesc(5, name));\n return name;\n }\n});\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.has\":98,\"./$.property-desc\":127}],164:[function(require,module,exports){\narguments[4][64][0].apply(exports,arguments)\n},{\"./$.collection\":83,\"./$.collection-strong\":80,\"dup\":64}],165:[function(require,module,exports){\n// 20.2.2.3 Math.acosh(x)\nvar $export = require('./$.export')\n , log1p = require('./$.math-log1p')\n , sqrt = Math.sqrt\n , $acosh = Math.acosh;\n\n// V8 bug https://code.google.com/p/v8/issues/detail?id=3509\n$export($export.S + $export.F * !($acosh && Math.floor($acosh(Number.MAX_VALUE)) == 710), 'Math', {\n acosh: function acosh(x){\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n},{\"./$.export\":90,\"./$.math-log1p\":118}],166:[function(require,module,exports){\n// 20.2.2.5 Math.asinh(x)\nvar $export = require('./$.export');\n\nfunction asinh(x){\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n$export($export.S, 'Math', {asinh: asinh});\n},{\"./$.export\":90}],167:[function(require,module,exports){\n// 20.2.2.7 Math.atanh(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n atanh: function atanh(x){\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n},{\"./$.export\":90}],168:[function(require,module,exports){\n// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./$.export')\n , sign = require('./$.math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x){\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n},{\"./$.export\":90,\"./$.math-sign\":119}],169:[function(require,module,exports){\n// 20.2.2.11 Math.clz32(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x){\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n},{\"./$.export\":90}],170:[function(require,module,exports){\n// 20.2.2.12 Math.cosh(x)\nvar $export = require('./$.export')\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x){\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n},{\"./$.export\":90}],171:[function(require,module,exports){\n// 20.2.2.14 Math.expm1(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {expm1: require('./$.math-expm1')});\n},{\"./$.export\":90,\"./$.math-expm1\":117}],172:[function(require,module,exports){\n// 20.2.2.16 Math.fround(x)\nvar $export = require('./$.export')\n , sign = require('./$.math-sign')\n , pow = Math.pow\n , EPSILON = pow(2, -52)\n , EPSILON32 = pow(2, -23)\n , MAX32 = pow(2, 127) * (2 - EPSILON32)\n , MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n fround: function fround(x){\n var $abs = Math.abs(x)\n , $sign = sign(x)\n , a, result;\n if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n if(result > MAX32 || result != result)return $sign * Infinity;\n return $sign * result;\n }\n});\n},{\"./$.export\":90,\"./$.math-sign\":119}],173:[function(require,module,exports){\n// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./$.export')\n , abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n var sum = 0\n , i = 0\n , $$ = arguments\n , $$len = $$.length\n , larg = 0\n , arg, div;\n while(i < $$len){\n arg = abs($$[i++]);\n if(larg < arg){\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if(arg > 0){\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n},{\"./$.export\":90}],174:[function(require,module,exports){\n// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./$.export')\n , $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./$.fails')(function(){\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y){\n var UINT16 = 0xffff\n , xn = +x\n , yn = +y\n , xl = UINT16 & xn\n , yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n},{\"./$.export\":90,\"./$.fails\":92}],175:[function(require,module,exports){\n// 20.2.2.21 Math.log10(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n log10: function log10(x){\n return Math.log(x) / Math.LN10;\n }\n});\n},{\"./$.export\":90}],176:[function(require,module,exports){\n// 20.2.2.20 Math.log1p(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {log1p: require('./$.math-log1p')});\n},{\"./$.export\":90,\"./$.math-log1p\":118}],177:[function(require,module,exports){\n// 20.2.2.22 Math.log2(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n log2: function log2(x){\n return Math.log(x) / Math.LN2;\n }\n});\n},{\"./$.export\":90}],178:[function(require,module,exports){\n// 20.2.2.28 Math.sign(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {sign: require('./$.math-sign')});\n},{\"./$.export\":90,\"./$.math-sign\":119}],179:[function(require,module,exports){\n// 20.2.2.30 Math.sinh(x)\nvar $export = require('./$.export')\n , expm1 = require('./$.math-expm1')\n , exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./$.fails')(function(){\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x){\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n},{\"./$.export\":90,\"./$.fails\":92,\"./$.math-expm1\":117}],180:[function(require,module,exports){\n// 20.2.2.33 Math.tanh(x)\nvar $export = require('./$.export')\n , expm1 = require('./$.math-expm1')\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x){\n var a = expm1(x = +x)\n , b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n},{\"./$.export\":90,\"./$.math-expm1\":117}],181:[function(require,module,exports){\n// 20.2.2.34 Math.trunc(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it){\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n},{\"./$.export\":90}],182:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , global = require('./$.global')\n , has = require('./$.has')\n , cof = require('./$.cof')\n , toPrimitive = require('./$.to-primitive')\n , fails = require('./$.fails')\n , $trim = require('./$.string-trim').trim\n , NUMBER = 'Number'\n , $Number = global[NUMBER]\n , Base = $Number\n , proto = $Number.prototype\n // Opera ~12 has broken Object#toString\n , BROKEN_COF = cof($.create(proto)) == NUMBER\n , TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n var it = toPrimitive(argument, false);\n if(typeof it == 'string' && it.length > 2){\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0)\n , third, radix, maxCode;\n if(first === 43 || first === 45){\n third = it.charCodeAt(2);\n if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if(first === 48){\n switch(it.charCodeAt(1)){\n case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default : return +it;\n }\n for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if(code < 48 || code > maxCode)return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n $Number = function Number(value){\n var it = arguments.length < 1 ? 0 : value\n , that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? new Base(toNumber(it)) : toNumber(it);\n };\n $.each.call(require('./$.descriptors') ? $.getNames(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), function(key){\n if(has(Base, key) && !has($Number, key)){\n $.setDesc($Number, key, $.getDesc(Base, key));\n }\n });\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./$.redefine')(global, NUMBER, $Number);\n}\n},{\"./$\":114,\"./$.cof\":79,\"./$.descriptors\":87,\"./$.fails\":92,\"./$.global\":97,\"./$.has\":98,\"./$.redefine\":129,\"./$.string-trim\":142,\"./$.to-primitive\":149}],183:[function(require,module,exports){\n// 20.1.2.1 Number.EPSILON\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});\n},{\"./$.export\":90}],184:[function(require,module,exports){\n// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./$.export')\n , _isFinite = require('./$.global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it){\n return typeof it == 'number' && _isFinite(it);\n }\n});\n},{\"./$.export\":90,\"./$.global\":97}],185:[function(require,module,exports){\n// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {isInteger: require('./$.is-integer')});\n},{\"./$.export\":90,\"./$.is-integer\":105}],186:[function(require,module,exports){\n// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number){\n return number != number;\n }\n});\n},{\"./$.export\":90}],187:[function(require,module,exports){\n// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./$.export')\n , isInteger = require('./$.is-integer')\n , abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number){\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n},{\"./$.export\":90,\"./$.is-integer\":105}],188:[function(require,module,exports){\n// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});\n},{\"./$.export\":90}],189:[function(require,module,exports){\n// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});\n},{\"./$.export\":90}],190:[function(require,module,exports){\n// 20.1.2.12 Number.parseFloat(string)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {parseFloat: parseFloat});\n},{\"./$.export\":90}],191:[function(require,module,exports){\n// 20.1.2.13 Number.parseInt(string, radix)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {parseInt: parseInt});\n},{\"./$.export\":90}],192:[function(require,module,exports){\n// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./$.export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./$.object-assign')});\n},{\"./$.export\":90,\"./$.object-assign\":121}],193:[function(require,module,exports){\n// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('freeze', function($freeze){\n return function freeze(it){\n return $freeze && isObject(it) ? $freeze(it) : it;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],194:[function(require,module,exports){\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./$.to-iobject');\n\nrequire('./$.object-sap')('getOwnPropertyDescriptor', function($getOwnPropertyDescriptor){\n return function getOwnPropertyDescriptor(it, key){\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n},{\"./$.object-sap\":122,\"./$.to-iobject\":146}],195:[function(require,module,exports){\n// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./$.object-sap')('getOwnPropertyNames', function(){\n return require('./$.get-names').get;\n});\n},{\"./$.get-names\":96,\"./$.object-sap\":122}],196:[function(require,module,exports){\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./$.to-object');\n\nrequire('./$.object-sap')('getPrototypeOf', function($getPrototypeOf){\n return function getPrototypeOf(it){\n return $getPrototypeOf(toObject(it));\n };\n});\n},{\"./$.object-sap\":122,\"./$.to-object\":148}],197:[function(require,module,exports){\n// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('isExtensible', function($isExtensible){\n return function isExtensible(it){\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],198:[function(require,module,exports){\n// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('isFrozen', function($isFrozen){\n return function isFrozen(it){\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],199:[function(require,module,exports){\n// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('isSealed', function($isSealed){\n return function isSealed(it){\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],200:[function(require,module,exports){\n// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./$.export');\n$export($export.S, 'Object', {is: require('./$.same-value')});\n},{\"./$.export\":90,\"./$.same-value\":131}],201:[function(require,module,exports){\n// 19.1.2.14 Object.keys(O)\nvar toObject = require('./$.to-object');\n\nrequire('./$.object-sap')('keys', function($keys){\n return function keys(it){\n return $keys(toObject(it));\n };\n});\n},{\"./$.object-sap\":122,\"./$.to-object\":148}],202:[function(require,module,exports){\n// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('preventExtensions', function($preventExtensions){\n return function preventExtensions(it){\n return $preventExtensions && isObject(it) ? $preventExtensions(it) : it;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],203:[function(require,module,exports){\n// 19.1.2.17 Object.seal(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('seal', function($seal){\n return function seal(it){\n return $seal && isObject(it) ? $seal(it) : it;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],204:[function(require,module,exports){\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./$.export');\n$export($export.S, 'Object', {setPrototypeOf: require('./$.set-proto').set});\n},{\"./$.export\":90,\"./$.set-proto\":132}],205:[function(require,module,exports){\n'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./$.classof')\n , test = {};\ntest[require('./$.wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n require('./$.redefine')(Object.prototype, 'toString', function toString(){\n return '[object ' + classof(this) + ']';\n }, true);\n}\n},{\"./$.classof\":78,\"./$.redefine\":129,\"./$.wks\":151}],206:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , LIBRARY = require('./$.library')\n , global = require('./$.global')\n , ctx = require('./$.ctx')\n , classof = require('./$.classof')\n , $export = require('./$.export')\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , strictNew = require('./$.strict-new')\n , forOf = require('./$.for-of')\n , setProto = require('./$.set-proto').set\n , same = require('./$.same-value')\n , SPECIES = require('./$.wks')('species')\n , speciesConstructor = require('./$.species-constructor')\n , asap = require('./$.microtask')\n , PROMISE = 'Promise'\n , process = global.process\n , isNode = classof(process) == 'process'\n , P = global[PROMISE]\n , Wrapper;\n\nvar testResolve = function(sub){\n var test = new P(function(){});\n if(sub)test.constructor = Object;\n return P.resolve(test) === test;\n};\n\nvar USE_NATIVE = function(){\n var works = false;\n function P2(x){\n var self = new P(x);\n setProto(self, P2.prototype);\n return self;\n }\n try {\n works = P && P.resolve && testResolve();\n setProto(P2, P);\n P2.prototype = $.create(P.prototype, {constructor: {value: P2}});\n // actual Firefox has broken subclass support, test that\n if(!(P2.resolve(5).then(function(){}) instanceof P2)){\n works = false;\n }\n // actual V8 bug, https://code.google.com/p/v8/issues/detail?id=4162\n if(works && require('./$.descriptors')){\n var thenableThenGotten = false;\n P.resolve($.setDesc({}, 'then', {\n get: function(){ thenableThenGotten = true; }\n }));\n works = thenableThenGotten;\n }\n } catch(e){ works = false; }\n return works;\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n // library wrapper special case\n if(LIBRARY && a === P && b === Wrapper)return true;\n return same(a, b);\n};\nvar getConstructor = function(C){\n var S = anObject(C)[SPECIES];\n return S != undefined ? S : C;\n};\nvar isThenable = function(it){\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar PromiseCapability = function(C){\n var resolve, reject;\n this.promise = new C(function($$resolve, $$reject){\n if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve),\n this.reject = aFunction(reject)\n};\nvar perform = function(exec){\n try {\n exec();\n } catch(e){\n return {error: e};\n }\n};\nvar notify = function(record, isReject){\n if(record.n)return;\n record.n = true;\n var chain = record.c;\n asap(function(){\n var value = record.v\n , ok = record.s == 1\n , i = 0;\n var run = function(reaction){\n var handler = ok ? reaction.ok : reaction.fail\n , resolve = reaction.resolve\n , reject = reaction.reject\n , result, then;\n try {\n if(handler){\n if(!ok)record.h = true;\n result = handler === true ? value : handler(value);\n if(result === reaction.promise){\n reject(TypeError('Promise-chain cycle'));\n } else if(then = isThenable(result)){\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch(e){\n reject(e);\n }\n };\n while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n chain.length = 0;\n record.n = false;\n if(isReject)setTimeout(function(){\n var promise = record.p\n , handler, console;\n if(isUnhandled(promise)){\n if(isNode){\n process.emit('unhandledRejection', value, promise);\n } else if(handler = global.onunhandledrejection){\n handler({promise: promise, reason: value});\n } else if((console = global.console) && console.error){\n console.error('Unhandled promise rejection', value);\n }\n } record.a = undefined;\n }, 1);\n });\n};\nvar isUnhandled = function(promise){\n var record = promise._d\n , chain = record.a || record.c\n , i = 0\n , reaction;\n if(record.h)return false;\n while(chain.length > i){\n reaction = chain[i++];\n if(reaction.fail || !isUnhandled(reaction.promise))return false;\n } return true;\n};\nvar $reject = function(value){\n var record = this;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n record.v = value;\n record.s = 2;\n record.a = record.c.slice();\n notify(record, true);\n};\nvar $resolve = function(value){\n var record = this\n , then;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n try {\n if(record.p === value)throw TypeError(\"Promise can't be resolved itself\");\n if(then = isThenable(value)){\n asap(function(){\n var wrapper = {r: record, d: false}; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch(e){\n $reject.call(wrapper, e);\n }\n });\n } else {\n record.v = value;\n record.s = 1;\n notify(record, false);\n }\n } catch(e){\n $reject.call({r: record, d: false}, e); // wrap\n }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n // 25.4.3.1 Promise(executor)\n P = function Promise(executor){\n aFunction(executor);\n var record = this._d = {\n p: strictNew(this, P, PROMISE), // <- promise\n c: [], // <- awaiting reactions\n a: undefined, // <- checked in isUnhandled reactions\n s: 0, // <- state\n d: false, // <- done\n v: undefined, // <- value\n h: false, // <- handled rejection\n n: false // <- notify\n };\n try {\n executor(ctx($resolve, record, 1), ctx($reject, record, 1));\n } catch(err){\n $reject.call(record, err);\n }\n };\n require('./$.redefine-all')(P.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected){\n var reaction = new PromiseCapability(speciesConstructor(this, P))\n , promise = reaction.promise\n , record = this._d;\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n record.c.push(reaction);\n if(record.a)record.a.push(reaction);\n if(record.s)notify(record, false);\n return promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function(onRejected){\n return this.then(undefined, onRejected);\n }\n });\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: P});\nrequire('./$.set-to-string-tag')(P, PROMISE);\nrequire('./$.set-species')(PROMISE);\nWrapper = require('./$.core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r){\n var capability = new PromiseCapability(this)\n , $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (!USE_NATIVE || testResolve(true)), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x){\n // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n if(x instanceof P && sameConstructor(x.constructor, this))return x;\n var capability = new PromiseCapability(this)\n , $$resolve = capability.resolve;\n $$resolve(x);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./$.iter-detect')(function(iter){\n P.all(iter)['catch'](function(){});\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , resolve = capability.resolve\n , reject = capability.reject\n , values = [];\n var abrupt = perform(function(){\n forOf(iterable, false, values.push, values);\n var remaining = values.length\n , results = Array(remaining);\n if(remaining)$.each.call(values, function(promise, index){\n var alreadyCalled = false;\n C.resolve(promise).then(function(value){\n if(alreadyCalled)return;\n alreadyCalled = true;\n results[index] = value;\n --remaining || resolve(results);\n }, reject);\n });\n else resolve(results);\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , reject = capability.reject;\n var abrupt = perform(function(){\n forOf(iterable, false, function(promise){\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n }\n});\n},{\"./$\":114,\"./$.a-function\":70,\"./$.an-object\":72,\"./$.classof\":78,\"./$.core\":84,\"./$.ctx\":85,\"./$.descriptors\":87,\"./$.export\":90,\"./$.for-of\":95,\"./$.global\":97,\"./$.is-object\":106,\"./$.iter-detect\":111,\"./$.library\":116,\"./$.microtask\":120,\"./$.redefine-all\":128,\"./$.same-value\":131,\"./$.set-proto\":132,\"./$.set-species\":133,\"./$.set-to-string-tag\":134,\"./$.species-constructor\":136,\"./$.strict-new\":137,\"./$.wks\":151}],207:[function(require,module,exports){\n// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./$.export')\n , _apply = Function.apply;\n\n$export($export.S, 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList){\n return _apply.call(target, thisArgument, argumentsList);\n }\n});\n},{\"./$.export\":90}],208:[function(require,module,exports){\n// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $ = require('./$')\n , $export = require('./$.export')\n , aFunction = require('./$.a-function')\n , anObject = require('./$.an-object')\n , isObject = require('./$.is-object')\n , bind = Function.bind || require('./$.core').Function.prototype.bind;\n\n// MS Edge supports only 2 arguments\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n$export($export.S + $export.F * require('./$.fails')(function(){\n function F(){}\n return !(Reflect.construct(function(){}, [], F) instanceof F);\n}), 'Reflect', {\n construct: function construct(Target, args /*, newTarget*/){\n aFunction(Target);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if(Target == newTarget){\n // w/o altered newTarget, optimization for 0-4 arguments\n if(args != undefined)switch(anObject(args).length){\n case 0: return new Target;\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args));\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype\n , instance = $.create(isObject(proto) ? proto : Object.prototype)\n , result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n},{\"./$\":114,\"./$.a-function\":70,\"./$.an-object\":72,\"./$.core\":84,\"./$.export\":90,\"./$.fails\":92,\"./$.is-object\":106}],209:[function(require,module,exports){\n// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar $ = require('./$')\n , $export = require('./$.export')\n , anObject = require('./$.an-object');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./$.fails')(function(){\n Reflect.defineProperty($.setDesc({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes){\n anObject(target);\n try {\n $.setDesc(target, propertyKey, attributes);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90,\"./$.fails\":92}],210:[function(require,module,exports){\n// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./$.export')\n , getDesc = require('./$').getDesc\n , anObject = require('./$.an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey){\n var desc = getDesc(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90}],211:[function(require,module,exports){\n'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./$.export')\n , anObject = require('./$.an-object');\nvar Enumerate = function(iterated){\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = [] // keys\n , key;\n for(key in iterated)keys.push(key);\n};\nrequire('./$.iter-create')(Enumerate, 'Object', function(){\n var that = this\n , keys = that._k\n , key;\n do {\n if(that._i >= keys.length)return {value: undefined, done: true};\n } while(!((key = keys[that._i++]) in that._t));\n return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target){\n return new Enumerate(target);\n }\n});\n},{\"./$.an-object\":72,\"./$.export\":90,\"./$.iter-create\":109}],212:[function(require,module,exports){\n// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar $ = require('./$')\n , $export = require('./$.export')\n , anObject = require('./$.an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n return $.getDesc(anObject(target), propertyKey);\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90}],213:[function(require,module,exports){\n// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./$.export')\n , getProto = require('./$').getProto\n , anObject = require('./$.an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target){\n return getProto(anObject(target));\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90}],214:[function(require,module,exports){\n// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar $ = require('./$')\n , has = require('./$.has')\n , $export = require('./$.export')\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n var receiver = arguments.length < 3 ? target : arguments[2]\n , desc, proto;\n if(anObject(target) === receiver)return target[propertyKey];\n if(desc = $.getDesc(target, propertyKey))return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if(isObject(proto = $.getProto(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90,\"./$.has\":98,\"./$.is-object\":106}],215:[function(require,module,exports){\n// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./$.export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey){\n return propertyKey in target;\n }\n});\n},{\"./$.export\":90}],216:[function(require,module,exports){\n// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./$.export')\n , anObject = require('./$.an-object')\n , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target){\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n},{\"./$.an-object\":72,\"./$.export\":90}],217:[function(require,module,exports){\n// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./$.export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./$.own-keys')});\n},{\"./$.export\":90,\"./$.own-keys\":124}],218:[function(require,module,exports){\n// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./$.export')\n , anObject = require('./$.an-object')\n , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target){\n anObject(target);\n try {\n if($preventExtensions)$preventExtensions(target);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n},{\"./$.an-object\":72,\"./$.export\":90}],219:[function(require,module,exports){\n// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./$.export')\n , setProto = require('./$.set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto){\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n},{\"./$.export\":90,\"./$.set-proto\":132}],220:[function(require,module,exports){\n// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar $ = require('./$')\n , has = require('./$.has')\n , $export = require('./$.export')\n , createDesc = require('./$.property-desc')\n , anObject = require('./$.an-object')\n , isObject = require('./$.is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n var receiver = arguments.length < 4 ? target : arguments[3]\n , ownDesc = $.getDesc(anObject(target), propertyKey)\n , existingDescriptor, proto;\n if(!ownDesc){\n if(isObject(proto = $.getProto(target))){\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if(has(ownDesc, 'value')){\n if(ownDesc.writable === false || !isObject(receiver))return false;\n existingDescriptor = $.getDesc(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n $.setDesc(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90,\"./$.has\":98,\"./$.is-object\":106,\"./$.property-desc\":127}],221:[function(require,module,exports){\nvar $ = require('./$')\n , global = require('./$.global')\n , isRegExp = require('./$.is-regexp')\n , $flags = require('./$.flags')\n , $RegExp = global.RegExp\n , Base = $RegExp\n , proto = $RegExp.prototype\n , re1 = /a/g\n , re2 = /a/g\n // \"new\" creates a new object, old webkit buggy here\n , CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif(require('./$.descriptors') && (!CORRECT_NEW || require('./$.fails')(function(){\n re2[require('./$.wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n $RegExp = function RegExp(p, f){\n var piRE = isRegExp(p)\n , fiU = f === undefined;\n return !(this instanceof $RegExp) && piRE && p.constructor === $RegExp && fiU ? p\n : CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f);\n };\n $.each.call($.getNames(Base), function(key){\n key in $RegExp || $.setDesc($RegExp, key, {\n configurable: true,\n get: function(){ return Base[key]; },\n set: function(it){ Base[key] = it; }\n });\n });\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./$.redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./$.set-species')('RegExp');\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.fails\":92,\"./$.flags\":94,\"./$.global\":97,\"./$.is-regexp\":107,\"./$.redefine\":129,\"./$.set-species\":133,\"./$.wks\":151}],222:[function(require,module,exports){\n// 21.2.5.3 get RegExp.prototype.flags()\nvar $ = require('./$');\nif(require('./$.descriptors') && /./g.flags != 'g')$.setDesc(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./$.flags')\n});\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.flags\":94}],223:[function(require,module,exports){\n// @@match logic\nrequire('./$.fix-re-wks')('match', 1, function(defined, MATCH){\n // 21.1.3.11 String.prototype.match(regexp)\n return function match(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n };\n});\n},{\"./$.fix-re-wks\":93}],224:[function(require,module,exports){\n// @@replace logic\nrequire('./$.fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return function replace(searchValue, replaceValue){\n 'use strict';\n var O = defined(this)\n , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n };\n});\n},{\"./$.fix-re-wks\":93}],225:[function(require,module,exports){\n// @@search logic\nrequire('./$.fix-re-wks')('search', 1, function(defined, SEARCH){\n // 21.1.3.15 String.prototype.search(regexp)\n return function search(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n };\n});\n},{\"./$.fix-re-wks\":93}],226:[function(require,module,exports){\n// @@split logic\nrequire('./$.fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n // 21.1.3.17 String.prototype.split(separator, limit)\n return function split(separator, limit){\n 'use strict';\n var O = defined(this)\n , fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined\n ? fn.call(separator, O, limit)\n : $split.call(String(O), separator, limit);\n };\n});\n},{\"./$.fix-re-wks\":93}],227:[function(require,module,exports){\n'use strict';\nvar strong = require('./$.collection-strong');\n\n// 23.2 Set Objects\nrequire('./$.collection')('Set', function(get){\n return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value){\n return strong.def(this, value = value === 0 ? 0 : value, value);\n }\n}, strong);\n},{\"./$.collection\":83,\"./$.collection-strong\":80}],228:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $at = require('./$.string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos){\n return $at(this, pos);\n }\n});\n},{\"./$.export\":90,\"./$.string-at\":138}],229:[function(require,module,exports){\n// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./$.export')\n , toLength = require('./$.to-length')\n , context = require('./$.string-context')\n , ENDS_WITH = 'endsWith'\n , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./$.fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /*, endPosition = @length */){\n var that = context(this, searchString, ENDS_WITH)\n , $$ = arguments\n , endPosition = $$.length > 1 ? $$[1] : undefined\n , len = toLength(that.length)\n , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n , search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n},{\"./$.export\":90,\"./$.fails-is-regexp\":91,\"./$.string-context\":139,\"./$.to-length\":147}],230:[function(require,module,exports){\nvar $export = require('./$.export')\n , toIndex = require('./$.to-index')\n , fromCharCode = String.fromCharCode\n , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n var res = []\n , $$ = arguments\n , $$len = $$.length\n , i = 0\n , code;\n while($$len > i){\n code = +$$[i++];\n if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n},{\"./$.export\":90,\"./$.to-index\":144}],231:[function(require,module,exports){\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./$.export')\n , context = require('./$.string-context')\n , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./$.fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /*, position = 0 */){\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n},{\"./$.export\":90,\"./$.fails-is-regexp\":91,\"./$.string-context\":139}],232:[function(require,module,exports){\narguments[4][66][0].apply(exports,arguments)\n},{\"./$.iter-define\":110,\"./$.string-at\":138,\"dup\":66}],233:[function(require,module,exports){\nvar $export = require('./$.export')\n , toIObject = require('./$.to-iobject')\n , toLength = require('./$.to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite){\n var tpl = toIObject(callSite.raw)\n , len = toLength(tpl.length)\n , $$ = arguments\n , $$len = $$.length\n , res = []\n , i = 0;\n while(len > i){\n res.push(String(tpl[i++]));\n if(i < $$len)res.push(String($$[i]));\n } return res.join('');\n }\n});\n},{\"./$.export\":90,\"./$.to-iobject\":146,\"./$.to-length\":147}],234:[function(require,module,exports){\nvar $export = require('./$.export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./$.string-repeat')\n});\n},{\"./$.export\":90,\"./$.string-repeat\":141}],235:[function(require,module,exports){\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./$.export')\n , toLength = require('./$.to-length')\n , context = require('./$.string-context')\n , STARTS_WITH = 'startsWith'\n , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./$.fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /*, position = 0 */){\n var that = context(this, searchString, STARTS_WITH)\n , $$ = arguments\n , index = toLength(Math.min($$.length > 1 ? $$[1] : undefined, that.length))\n , search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n},{\"./$.export\":90,\"./$.fails-is-regexp\":91,\"./$.string-context\":139,\"./$.to-length\":147}],236:[function(require,module,exports){\n'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./$.string-trim')('trim', function($trim){\n return function trim(){\n return $trim(this, 3);\n };\n});\n},{\"./$.string-trim\":142}],237:[function(require,module,exports){\narguments[4][67][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.an-object\":72,\"./$.descriptors\":87,\"./$.enum-keys\":89,\"./$.export\":90,\"./$.fails\":92,\"./$.get-names\":96,\"./$.global\":97,\"./$.has\":98,\"./$.is-array\":104,\"./$.keyof\":115,\"./$.library\":116,\"./$.property-desc\":127,\"./$.redefine\":129,\"./$.set-to-string-tag\":134,\"./$.shared\":135,\"./$.to-iobject\":146,\"./$.uid\":150,\"./$.wks\":151,\"dup\":67}],238:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , redefine = require('./$.redefine')\n , weak = require('./$.collection-weak')\n , isObject = require('./$.is-object')\n , has = require('./$.has')\n , frozenStore = weak.frozenStore\n , WEAK = weak.WEAK\n , isExtensible = Object.isExtensible || isObject\n , tmp = {};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = require('./$.collection')('WeakMap', function(get){\n return function WeakMap(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key){\n if(isObject(key)){\n if(!isExtensible(key))return frozenStore(this).get(key);\n if(has(key, WEAK))return key[WEAK][this._i];\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value){\n return weak.def(this, key, value);\n }\n}, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n $.each.call(['delete', 'has', 'get', 'set'], function(key){\n var proto = $WeakMap.prototype\n , method = proto[key];\n redefine(proto, key, function(a, b){\n // store frozen objects on leaky map\n if(isObject(a) && !isExtensible(a)){\n var result = frozenStore(this)[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n},{\"./$\":114,\"./$.collection\":83,\"./$.collection-weak\":82,\"./$.has\":98,\"./$.is-object\":106,\"./$.redefine\":129}],239:[function(require,module,exports){\n'use strict';\nvar weak = require('./$.collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./$.collection')('WeakSet', function(get){\n return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value){\n return weak.def(this, value, true);\n }\n}, weak, false, true);\n},{\"./$.collection\":83,\"./$.collection-weak\":82}],240:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $includes = require('./$.array-includes')(true);\n\n$export($export.P, 'Array', {\n // https://github.com/domenic/Array.prototype.includes\n includes: function includes(el /*, fromIndex = 0 */){\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./$.add-to-unscopables')('includes');\n},{\"./$.add-to-unscopables\":71,\"./$.array-includes\":75,\"./$.export\":90}],241:[function(require,module,exports){\narguments[4][68][0].apply(exports,arguments)\n},{\"./$.collection-to-json\":81,\"./$.export\":90,\"dup\":68}],242:[function(require,module,exports){\n// http://goo.gl/XkBrjD\nvar $export = require('./$.export')\n , $entries = require('./$.object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it){\n return $entries(it);\n }\n});\n},{\"./$.export\":90,\"./$.object-to-array\":123}],243:[function(require,module,exports){\n// https://gist.github.com/WebReflection/9353781\nvar $ = require('./$')\n , $export = require('./$.export')\n , ownKeys = require('./$.own-keys')\n , toIObject = require('./$.to-iobject')\n , createDesc = require('./$.property-desc');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){\n var O = toIObject(object)\n , setDesc = $.setDesc\n , getDesc = $.getDesc\n , keys = ownKeys(O)\n , result = {}\n , i = 0\n , key, D;\n while(keys.length > i){\n D = getDesc(O, key = keys[i++]);\n if(key in result)setDesc(result, key, createDesc(0, D));\n else result[key] = D;\n } return result;\n }\n});\n},{\"./$\":114,\"./$.export\":90,\"./$.own-keys\":124,\"./$.property-desc\":127,\"./$.to-iobject\":146}],244:[function(require,module,exports){\n// http://goo.gl/XkBrjD\nvar $export = require('./$.export')\n , $values = require('./$.object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it){\n return $values(it);\n }\n});\n},{\"./$.export\":90,\"./$.object-to-array\":123}],245:[function(require,module,exports){\n// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./$.export')\n , $re = require('./$.replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});\n\n},{\"./$.export\":90,\"./$.replacer\":130}],246:[function(require,module,exports){\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./$.export');\n\n$export($export.P, 'Set', {toJSON: require('./$.collection-to-json')('Set')});\n},{\"./$.collection-to-json\":81,\"./$.export\":90}],247:[function(require,module,exports){\n'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./$.export')\n , $at = require('./$.string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos){\n return $at(this, pos);\n }\n});\n},{\"./$.export\":90,\"./$.string-at\":138}],248:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $pad = require('./$.string-pad');\n\n$export($export.P, 'String', {\n padLeft: function padLeft(maxLength /*, fillString = ' ' */){\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n},{\"./$.export\":90,\"./$.string-pad\":140}],249:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $pad = require('./$.string-pad');\n\n$export($export.P, 'String', {\n padRight: function padRight(maxLength /*, fillString = ' ' */){\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n},{\"./$.export\":90,\"./$.string-pad\":140}],250:[function(require,module,exports){\n'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./$.string-trim')('trimLeft', function($trim){\n return function trimLeft(){\n return $trim(this, 1);\n };\n});\n},{\"./$.string-trim\":142}],251:[function(require,module,exports){\n'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./$.string-trim')('trimRight', function($trim){\n return function trimRight(){\n return $trim(this, 2);\n };\n});\n},{\"./$.string-trim\":142}],252:[function(require,module,exports){\n// JavaScript 1.6 / Strawman array statics shim\nvar $ = require('./$')\n , $export = require('./$.export')\n , $ctx = require('./$.ctx')\n , $Array = require('./$.core').Array || Array\n , statics = {};\nvar setStatics = function(keys, length){\n $.each.call(keys.split(','), function(key){\n if(length == undefined && key in $Array)statics[key] = $Array[key];\n else if(key in [])statics[key] = $ctx(Function.call, [][key], length);\n });\n};\nsetStatics('pop,reverse,shift,keys,values,entries', 1);\nsetStatics('indexOf,every,some,forEach,map,filter,find,findIndex,includes', 3);\nsetStatics('join,slice,concat,push,splice,unshift,sort,lastIndexOf,' +\n 'reduce,reduceRight,copyWithin,fill');\n$export($export.S, 'Array', statics);\n},{\"./$\":114,\"./$.core\":84,\"./$.ctx\":85,\"./$.export\":90}],253:[function(require,module,exports){\nrequire('./es6.array.iterator');\nvar global = require('./$.global')\n , hide = require('./$.hide')\n , Iterators = require('./$.iterators')\n , ITERATOR = require('./$.wks')('iterator')\n , NL = global.NodeList\n , HTC = global.HTMLCollection\n , NLProto = NL && NL.prototype\n , HTCProto = HTC && HTC.prototype\n , ArrayValues = Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array;\nif(NLProto && !NLProto[ITERATOR])hide(NLProto, ITERATOR, ArrayValues);\nif(HTCProto && !HTCProto[ITERATOR])hide(HTCProto, ITERATOR, ArrayValues);\n},{\"./$.global\":97,\"./$.hide\":99,\"./$.iterators\":113,\"./$.wks\":151,\"./es6.array.iterator\":159}],254:[function(require,module,exports){\nvar $export = require('./$.export')\n , $task = require('./$.task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n},{\"./$.export\":90,\"./$.task\":143}],255:[function(require,module,exports){\n// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./$.global')\n , $export = require('./$.export')\n , invoke = require('./$.invoke')\n , partial = require('./$.partial')\n , navigator = global.navigator\n , MSIE = !!navigator && /MSIE .\\./.test(navigator.userAgent); // <- dirty ie9- check\nvar wrap = function(set){\n return MSIE ? function(fn, time /*, ...args */){\n return set(invoke(\n partial,\n [].slice.call(arguments, 2),\n typeof fn == 'function' ? fn : Function(fn)\n ), time);\n } : set;\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n},{\"./$.export\":90,\"./$.global\":97,\"./$.invoke\":101,\"./$.partial\":125}],256:[function(require,module,exports){\nrequire('./modules/es5');\nrequire('./modules/es6.symbol');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-left');\nrequire('./modules/es7.string.pad-right');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.regexp.escape');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/js.array.statics');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/$.core');\n},{\"./modules/$.core\":84,\"./modules/es5\":153,\"./modules/es6.array.copy-within\":154,\"./modules/es6.array.fill\":155,\"./modules/es6.array.find\":157,\"./modules/es6.array.find-index\":156,\"./modules/es6.array.from\":158,\"./modules/es6.array.iterator\":159,\"./modules/es6.array.of\":160,\"./modules/es6.array.species\":161,\"./modules/es6.function.has-instance\":162,\"./modules/es6.function.name\":163,\"./modules/es6.map\":164,\"./modules/es6.math.acosh\":165,\"./modules/es6.math.asinh\":166,\"./modules/es6.math.atanh\":167,\"./modules/es6.math.cbrt\":168,\"./modules/es6.math.clz32\":169,\"./modules/es6.math.cosh\":170,\"./modules/es6.math.expm1\":171,\"./modules/es6.math.fround\":172,\"./modules/es6.math.hypot\":173,\"./modules/es6.math.imul\":174,\"./modules/es6.math.log10\":175,\"./modules/es6.math.log1p\":176,\"./modules/es6.math.log2\":177,\"./modules/es6.math.sign\":178,\"./modules/es6.math.sinh\":179,\"./modules/es6.math.tanh\":180,\"./modules/es6.math.trunc\":181,\"./modules/es6.number.constructor\":182,\"./modules/es6.number.epsilon\":183,\"./modules/es6.number.is-finite\":184,\"./modules/es6.number.is-integer\":185,\"./modules/es6.number.is-nan\":186,\"./modules/es6.number.is-safe-integer\":187,\"./modules/es6.number.max-safe-integer\":188,\"./modules/es6.number.min-safe-integer\":189,\"./modules/es6.number.parse-float\":190,\"./modules/es6.number.parse-int\":191,\"./modules/es6.object.assign\":192,\"./modules/es6.object.freeze\":193,\"./modules/es6.object.get-own-property-descriptor\":194,\"./modules/es6.object.get-own-property-names\":195,\"./modules/es6.object.get-prototype-of\":196,\"./modules/es6.object.is\":200,\"./modules/es6.object.is-extensible\":197,\"./modules/es6.object.is-frozen\":198,\"./modules/es6.object.is-sealed\":199,\"./modules/es6.object.keys\":201,\"./modules/es6.object.prevent-extensions\":202,\"./modules/es6.object.seal\":203,\"./modules/es6.object.set-prototype-of\":204,\"./modules/es6.object.to-string\":205,\"./modules/es6.promise\":206,\"./modules/es6.reflect.apply\":207,\"./modules/es6.reflect.construct\":208,\"./modules/es6.reflect.define-property\":209,\"./modules/es6.reflect.delete-property\":210,\"./modules/es6.reflect.enumerate\":211,\"./modules/es6.reflect.get\":214,\"./modules/es6.reflect.get-own-property-descriptor\":212,\"./modules/es6.reflect.get-prototype-of\":213,\"./modules/es6.reflect.has\":215,\"./modules/es6.reflect.is-extensible\":216,\"./modules/es6.reflect.own-keys\":217,\"./modules/es6.reflect.prevent-extensions\":218,\"./modules/es6.reflect.set\":220,\"./modules/es6.reflect.set-prototype-of\":219,\"./modules/es6.regexp.constructor\":221,\"./modules/es6.regexp.flags\":222,\"./modules/es6.regexp.match\":223,\"./modules/es6.regexp.replace\":224,\"./modules/es6.regexp.search\":225,\"./modules/es6.regexp.split\":226,\"./modules/es6.set\":227,\"./modules/es6.string.code-point-at\":228,\"./modules/es6.string.ends-with\":229,\"./modules/es6.string.from-code-point\":230,\"./modules/es6.string.includes\":231,\"./modules/es6.string.iterator\":232,\"./modules/es6.string.raw\":233,\"./modules/es6.string.repeat\":234,\"./modules/es6.string.starts-with\":235,\"./modules/es6.string.trim\":236,\"./modules/es6.symbol\":237,\"./modules/es6.weak-map\":238,\"./modules/es6.weak-set\":239,\"./modules/es7.array.includes\":240,\"./modules/es7.map.to-json\":241,\"./modules/es7.object.entries\":242,\"./modules/es7.object.get-own-property-descriptors\":243,\"./modules/es7.object.values\":244,\"./modules/es7.regexp.escape\":245,\"./modules/es7.set.to-json\":246,\"./modules/es7.string.at\":247,\"./modules/es7.string.pad-left\":248,\"./modules/es7.string.pad-right\":249,\"./modules/es7.string.trim-left\":250,\"./modules/es7.string.trim-right\":251,\"./modules/js.array.statics\":252,\"./modules/web.dom.iterable\":253,\"./modules/web.immediate\":254,\"./modules/web.timers\":255}],257:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],258:[function(require,module,exports){\n(function (process,global){\n/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":257}],259:[function(require,module,exports){\n'use strict';\n\nvar _createClass = require('babel-runtime/helpers/create-class')['default'];\n\nvar _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];\n\nvar _Symbol = require('babel-runtime/core-js/symbol')['default'];\n\nvar _Map = require('babel-runtime/core-js/map')['default'];\n\nvar _Array$from = require('babel-runtime/core-js/array/from')['default'];\n\nif (!window.altspace) {\n\twindow.altspace = {};\n}\nif (!window.altspace.utilities) {\n\twindow.altspace.utilities = {};\n}\nif (!window.altspace.utilities.behaviors) {\n\twindow.altspace.utilities.behaviors = {};\n}\n\nrequire('babel/polyfill');\nvar containerMax = _Symbol('containerMax'),\n containerMin = _Symbol('containerMin'),\n object3D = _Symbol('object3D'),\n boundingBox = _Symbol('boundingBox'),\n origMatrix = _Symbol('origMatrix'),\n origMatrixAutoUpdate = _Symbol('origMatrixAutoUpdate'),\n parent = _Symbol('parent'),\n enclosure = _Symbol('enclosure'),\n origParentBoundingBoxes = new _Map();\n\n/**\r\n * The Layout behavior allows you to position objects easily. You can \r\n * position an object relative to its parent (either the Scene or a \r\n * another object) by using a position specifier for each of the axes.\r\n * The position specifier can be one of 'min', 'center' or 'max'. The default\r\n * specifier is 'center'. You can also add a modifier to the position in pixels\r\n * ('min+5'), a percentage ('min+10%') or meters ('min+1m'). Finally, you can \r\n * choose the location of the anchor on the object you are trying to position \r\n * by using the 'my' parameter.\r\n * You must specify at least one axis on the 'at' parameter.\r\n *\r\n * @example\r\n * // Position the top of the cube at 1.5 meters above the bottom of its parent.\r\n * cube.addBehavior(new altpsace.utilities.behaviors.Layout({\r\n *\t my: {y: 'max'}, \r\n *\t at: {y: 'min+1.5m'}\r\n * });\r\n *\r\n * @class Layout\r\n * @memberof module:altspace/utilities/behaviors\r\n * @param {Object} config\r\n * @param {Object} config.at An object containing the axes and position \r\n * specifiers. At least one axis must be specificed. E.g. `{x: 'min', y: 'max-5%'}`\r\n * @param {Object} [config.my] An object containing the axes and position\r\n * specifiers for the layout anchor.\r\n **/\n\nvar Layout = (function () {\n\tfunction Layout(_ref) {\n\t\tvar _ref$my = _ref.my;\n\t\tvar my = _ref$my === undefined ? {} : _ref$my;\n\t\tvar at = _ref.at;\n\n\t\t_classCallCheck(this, Layout);\n\n\t\tthis.my = my;\n\t\tthis.at = at;\n\t}\n\n\t// TODO-BP Ideally these would be private methods.\n\n\t_createClass(Layout, [{\n\t\tkey: 'getAxisSettings',\n\t\tvalue: function getAxisSettings(axis, axisValue, min, max) {\n\t\t\taxisValue = axisValue || 'center';\n\t\t\taxisValue = /(\\w+)([-+].+)?/.exec(axisValue);\n\t\t\tvar position = axisValue[1];\n\t\t\tvar offsetSetting = axisValue[2];\n\t\t\tvar offset = parseFloat(offsetSetting) || 0;\n\t\t\tif (offsetSetting && offsetSetting.endsWith('%')) {\n\t\t\t\toffset = offset / 100 * (max[axis] - min[axis]);\n\t\t\t} else if (offsetSetting && offsetSetting.endsWith('m')) {\n\t\t\t\tconsole.log(offset, this[enclosure]);\n\t\t\t\toffset = offset * this[enclosure].pixelsPerMeter;\n\t\t\t\tconsole.log(offset);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tposition: position,\n\t\t\t\toffset: offset\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: 'getAnchorOffset',\n\t\tvalue: function getAnchorOffset(axis, axisValue) {\n\t\t\tvar max = this[boundingBox].max;\n\t\t\tvar min = this[boundingBox].min;\n\n\t\t\tvar _getAxisSettings = this.getAxisSettings(axis, axisValue, min, max);\n\n\t\t\tvar position = _getAxisSettings.position;\n\t\t\tvar offset = _getAxisSettings.offset;\n\n\t\t\tif (position === 'max') {\n\t\t\t\treturn -max[axis] + offset;\n\t\t\t} else if (position === 'min') {\n\t\t\t\treturn -min[axis] + offset;\n\t\t\t} else if (position === 'center') {\n\t\t\t\treturn offset;\n\t\t\t} else {\n\t\t\t\tthrow new Error(axisValue + ' is an invalid layout position for ' + axis);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'doLayout',\n\t\tvalue: function doLayout() {\n\t\t\tvar _this = this;\n\n\t\t\t_Array$from('xyz').forEach(function (axis) {\n\t\t\t\tvar _getAxisSettings2 = _this.getAxisSettings(axis, _this.at[axis], _this[containerMin], _this[containerMax]);\n\n\t\t\t\tvar position = _getAxisSettings2.position;\n\t\t\t\tvar offset = _getAxisSettings2.offset;\n\n\t\t\t\tvar anchorOffset = _this.getAnchorOffset(axis, _this.my[axis]);\n\t\t\t\tif (position === 'max') {\n\t\t\t\t\t_this[object3D].position[axis] = _this[containerMax][axis] + offset + anchorOffset;\n\t\t\t\t} else if (position === 'min') {\n\t\t\t\t\t_this[object3D].position[axis] = _this[containerMin][axis] + offset + anchorOffset;\n\t\t\t\t} else if (position === 'center') {\n\t\t\t\t\t_this[object3D].position[axis] = offset + anchorOffset;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(_this.at[axis] + ' is an invalid layout position for ' + axis);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this[parent]) {\n\t\t\t\t// Restore the original parent transform\n\t\t\t\tthis[parent].matrix = this[origMatrix];\n\t\t\t\tthis[parent].updateMatrixWorld(true);\n\t\t\t\tthis[parent].matrixAutoUpdate = this[origMatrixAutoUpdate];\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'awake',\n\t\tvalue: function awake(_object3D) {\n\t\t\tvar _this2 = this;\n\n\t\t\tthis[object3D] = _object3D;\n\t\t\tthis[boundingBox] = new THREE.Box3().setFromObject(this[object3D]);\n\n\t\t\t// TODO Listen for resize events on the enclosure\n\t\t\taltspace.getEnclosure().then(function (_enclosure) {\n\t\t\t\t_this2[enclosure] = _enclosure;\n\t\t\t\tif (_this2[object3D].parent instanceof THREE.Scene) {\n\t\t\t\t\tvar hw = _this2[enclosure].innerWidth / 2,\n\t\t\t\t\t hh = _this2[enclosure].innerHeight / 2,\n\t\t\t\t\t hd = _this2[enclosure].innerDepth / 2;\n\t\t\t\t\t_this2[containerMax] = new THREE.Vector3(hw, hh, hd);\n\t\t\t\t\t_this2[containerMin] = new THREE.Vector3(-hw, -hh, -hd);\n\t\t\t\t\t_this2.doLayout();\n\t\t\t\t} else {\n\t\t\t\t\tvar objWorldScale = _this2[object3D].getWorldScale();\n\t\t\t\t\t_this2[boundingBox].min.divide(objWorldScale);\n\t\t\t\t\t_this2[boundingBox].max.divide(objWorldScale);\n\n\t\t\t\t\t_this2[parent] = _this2[object3D].parent;\n\n\t\t\t\t\t_this2[origMatrix] = _this2[parent].matrix.clone();\n\t\t\t\t\t_this2[origMatrixAutoUpdate] = _this2[parent].matrixAutoUpdate;\n\n\t\t\t\t\t// We want to use the un-transormed anchor of the parent.\n\t\t\t\t\t// Reset the parent matrix so that we can get the original bounding box.\n\t\t\t\t\t_this2[parent].matrixAutoUpdate = false;\n\t\t\t\t\t_this2[parent].matrix.identity();\n\n\t\t\t\t\tvar parentBoundingBox = undefined;\n\t\t\t\t\tif (origParentBoundingBoxes.has(_this2[parent].uuid)) {\n\t\t\t\t\t\tparentBoundingBox = origParentBoundingBoxes.get(_this2[parent].uuid);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this2[parent].remove(_this2[object3D]);\n\t\t\t\t\t\tparentBoundingBox = new THREE.Box3().setFromObject(_this2[parent]);\n\t\t\t\t\t\t_this2[parent].add(_this2[object3D]);\n\t\t\t\t\t\torigParentBoundingBoxes.set(_this2[parent].uuid, parentBoundingBox);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this2[containerMax] = parentBoundingBox.max;\n\t\t\t\t\t_this2[containerMin] = parentBoundingBox.min;\n\t\t\t\t\t_this2.doLayout();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn Layout;\n})();\n\nwindow.altspace.utilities.behaviors.Layout = Layout;\n},{\"babel-runtime/core-js/array/from\":3,\"babel-runtime/core-js/map\":4,\"babel-runtime/core-js/symbol\":6,\"babel-runtime/helpers/class-call-check\":7,\"babel-runtime/helpers/create-class\":8,\"babel/polyfill\":9}]},{},[259]);\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o index; index++){\n entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n call(iterator, f, step.value, entries);\n }\n};\n},{\"./$.an-object\":9,\"./$.ctx\":13,\"./$.is-array-iter\":26,\"./$.iter-call\":28,\"./$.to-length\":51,\"./core.get-iterator-method\":54}],20:[function(require,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n},{}],21:[function(require,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n return hasOwnProperty.call(it, key);\n};\n},{}],22:[function(require,module,exports){\nvar $ = require('./$')\n , createDesc = require('./$.property-desc');\nmodule.exports = require('./$.descriptors') ? function(object, key, value){\n return $.setDesc(object, key, createDesc(1, value));\n} : function(object, key, value){\n object[key] = value;\n return object;\n};\n},{\"./$\":34,\"./$.descriptors\":15,\"./$.property-desc\":37}],23:[function(require,module,exports){\nmodule.exports = require('./$.global').document && document.documentElement;\n},{\"./$.global\":20}],24:[function(require,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n var un = that === undefined;\n switch(args.length){\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n},{}],25:[function(require,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./$.cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n},{\"./$.cof\":11}],26:[function(require,module,exports){\n// check on default Array iterator\nvar Iterators = require('./$.iterators')\n , ITERATOR = require('./$.wks')('iterator')\n , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n},{\"./$.iterators\":33,\"./$.wks\":53}],27:[function(require,module,exports){\nmodule.exports = function(it){\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n},{}],28:[function(require,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = require('./$.an-object');\nmodule.exports = function(iterator, fn, value, entries){\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch(e){\n var ret = iterator['return'];\n if(ret !== undefined)anObject(ret.call(iterator));\n throw e;\n }\n};\n},{\"./$.an-object\":9}],29:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , descriptor = require('./$.property-desc')\n , setToStringTag = require('./$.set-to-string-tag')\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./$.hide')(IteratorPrototype, require('./$.wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n},{\"./$\":34,\"./$.hide\":22,\"./$.property-desc\":37,\"./$.set-to-string-tag\":43,\"./$.wks\":53}],30:[function(require,module,exports){\n'use strict';\nvar LIBRARY = require('./$.library')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , hide = require('./$.hide')\n , has = require('./$.has')\n , Iterators = require('./$.iterators')\n , $iterCreate = require('./$.iter-create')\n , setToStringTag = require('./$.set-to-string-tag')\n , getProto = require('./$').getProto\n , ITERATOR = require('./$.wks')('iterator')\n , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n , FF_ITERATOR = '@@iterator'\n , KEYS = 'keys'\n , VALUES = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n $iterCreate(Constructor, NAME, next);\n var getMethod = function(kind){\n if(!BUGGY && kind in proto)return proto[kind];\n switch(kind){\n case KEYS: return function keys(){ return new Constructor(this, kind); };\n case VALUES: return function values(){ return new Constructor(this, kind); };\n } return function entries(){ return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator'\n , DEF_VALUES = DEFAULT == VALUES\n , VALUES_BUG = false\n , proto = Base.prototype\n , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n , $default = $native || getMethod(DEFAULT)\n , methods, key;\n // Fix native\n if($native){\n var IteratorPrototype = getProto($default.call(new Base));\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // FF fix\n if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n // fix Array#{values, @@iterator}.name in V8 / FF\n if(DEF_VALUES && $native.name !== VALUES){\n VALUES_BUG = true;\n $default = function values(){ return $native.call(this); };\n }\n }\n // Define iterator\n if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if(DEFAULT){\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: !DEF_VALUES ? $default : getMethod('entries')\n };\n if(FORCED)for(key in methods){\n if(!(key in proto))redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n},{\"./$\":34,\"./$.export\":17,\"./$.has\":21,\"./$.hide\":22,\"./$.iter-create\":29,\"./$.iterators\":33,\"./$.library\":35,\"./$.redefine\":39,\"./$.set-to-string-tag\":43,\"./$.wks\":53}],31:[function(require,module,exports){\nvar ITERATOR = require('./$.wks')('iterator')\n , SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function(){ SAFE_CLOSING = true; };\n Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n if(!skipClosing && !SAFE_CLOSING)return false;\n var safe = false;\n try {\n var arr = [7]\n , iter = arr[ITERATOR]();\n iter.next = function(){ safe = true; };\n arr[ITERATOR] = function(){ return iter; };\n exec(arr);\n } catch(e){ /* empty */ }\n return safe;\n};\n},{\"./$.wks\":53}],32:[function(require,module,exports){\nmodule.exports = function(done, value){\n return {value: value, done: !!done};\n};\n},{}],33:[function(require,module,exports){\nmodule.exports = {};\n},{}],34:[function(require,module,exports){\nvar $Object = Object;\nmodule.exports = {\n create: $Object.create,\n getProto: $Object.getPrototypeOf,\n isEnum: {}.propertyIsEnumerable,\n getDesc: $Object.getOwnPropertyDescriptor,\n setDesc: $Object.defineProperty,\n setDescs: $Object.defineProperties,\n getKeys: $Object.keys,\n getNames: $Object.getOwnPropertyNames,\n getSymbols: $Object.getOwnPropertySymbols,\n each: [].forEach\n};\n},{}],35:[function(require,module,exports){\nmodule.exports = true;\n},{}],36:[function(require,module,exports){\nvar global = require('./$.global')\n , macrotask = require('./$.task').set\n , Observer = global.MutationObserver || global.WebKitMutationObserver\n , process = global.process\n , Promise = global.Promise\n , isNode = require('./$.cof')(process) == 'process'\n , head, last, notify;\n\nvar flush = function(){\n var parent, domain, fn;\n if(isNode && (parent = process.domain)){\n process.domain = null;\n parent.exit();\n }\n while(head){\n domain = head.domain;\n fn = head.fn;\n if(domain)domain.enter();\n fn(); // <- currently we use it only for Promise - try / catch not required\n if(domain)domain.exit();\n head = head.next;\n } last = undefined;\n if(parent)parent.enter();\n};\n\n// Node.js\nif(isNode){\n notify = function(){\n process.nextTick(flush);\n };\n// browsers with MutationObserver\n} else if(Observer){\n var toggle = 1\n , node = document.createTextNode('');\n new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n notify = function(){\n node.data = toggle = -toggle;\n };\n// environments with maybe non-completely correct, but existent Promise\n} else if(Promise && Promise.resolve){\n notify = function(){\n Promise.resolve().then(flush);\n };\n// for other environments - macrotask based on:\n// - setImmediate\n// - MessageChannel\n// - window.postMessag\n// - onreadystatechange\n// - setTimeout\n} else {\n notify = function(){\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n}\n\nmodule.exports = function asap(fn){\n var task = {fn: fn, next: undefined, domain: isNode && process.domain};\n if(last)last.next = task;\n if(!head){\n head = task;\n notify();\n } last = task;\n};\n},{\"./$.cof\":11,\"./$.global\":20,\"./$.task\":48}],37:[function(require,module,exports){\nmodule.exports = function(bitmap, value){\n return {\n enumerable : !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable : !(bitmap & 4),\n value : value\n };\n};\n},{}],38:[function(require,module,exports){\nvar redefine = require('./$.redefine');\nmodule.exports = function(target, src){\n for(var key in src)redefine(target, key, src[key]);\n return target;\n};\n},{\"./$.redefine\":39}],39:[function(require,module,exports){\nmodule.exports = require('./$.hide');\n},{\"./$.hide\":22}],40:[function(require,module,exports){\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n},{}],41:[function(require,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar getDesc = require('./$').getDesc\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object');\nvar check = function(O, proto){\n anObject(O);\n if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function(test, buggy, set){\n try {\n set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch(e){ buggy = true; }\n return function setPrototypeOf(O, proto){\n check(O, proto);\n if(buggy)O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n},{\"./$\":34,\"./$.an-object\":9,\"./$.ctx\":13,\"./$.is-object\":27}],42:[function(require,module,exports){\n'use strict';\nvar core = require('./$.core')\n , $ = require('./$')\n , DESCRIPTORS = require('./$.descriptors')\n , SPECIES = require('./$.wks')('species');\n\nmodule.exports = function(KEY){\n var C = core[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};\n},{\"./$\":34,\"./$.core\":12,\"./$.descriptors\":15,\"./$.wks\":53}],43:[function(require,module,exports){\nvar def = require('./$').setDesc\n , has = require('./$.has')\n , TAG = require('./$.wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n},{\"./$\":34,\"./$.has\":21,\"./$.wks\":53}],44:[function(require,module,exports){\nvar global = require('./$.global')\n , SHARED = '__core-js_shared__'\n , store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n return store[key] || (store[key] = {});\n};\n},{\"./$.global\":20}],45:[function(require,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , SPECIES = require('./$.wks')('species');\nmodule.exports = function(O, D){\n var C = anObject(O).constructor, S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n},{\"./$.a-function\":7,\"./$.an-object\":9,\"./$.wks\":53}],46:[function(require,module,exports){\nmodule.exports = function(it, Constructor, name){\n if(!(it instanceof Constructor))throw TypeError(name + \": use the 'new' operator!\");\n return it;\n};\n},{}],47:[function(require,module,exports){\nvar toInteger = require('./$.to-integer')\n , defined = require('./$.defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n},{\"./$.defined\":14,\"./$.to-integer\":49}],48:[function(require,module,exports){\nvar ctx = require('./$.ctx')\n , invoke = require('./$.invoke')\n , html = require('./$.html')\n , cel = require('./$.dom-create')\n , global = require('./$.global')\n , process = global.process\n , setTask = global.setImmediate\n , clearTask = global.clearImmediate\n , MessageChannel = global.MessageChannel\n , counter = 0\n , queue = {}\n , ONREADYSTATECHANGE = 'onreadystatechange'\n , defer, channel, port;\nvar run = function(){\n var id = +this;\n if(queue.hasOwnProperty(id)){\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listner = function(event){\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n setTask = function setImmediate(fn){\n var args = [], i = 1;\n while(arguments.length > i)args.push(arguments[i++]);\n queue[++counter] = function(){\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id){\n delete queue[id];\n };\n // Node.js 0.8-\n if(require('./$.cof')(process) == 'process'){\n defer = function(id){\n process.nextTick(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if(MessageChannel){\n channel = new MessageChannel;\n port = channel.port2;\n channel.port1.onmessage = listner;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n defer = function(id){\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listner, false);\n // IE8-\n } else if(ONREADYSTATECHANGE in cel('script')){\n defer = function(id){\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function(id){\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n},{\"./$.cof\":11,\"./$.ctx\":13,\"./$.dom-create\":16,\"./$.global\":20,\"./$.html\":23,\"./$.invoke\":24}],49:[function(require,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil\n , floor = Math.floor;\nmodule.exports = function(it){\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n},{}],50:[function(require,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./$.iobject')\n , defined = require('./$.defined');\nmodule.exports = function(it){\n return IObject(defined(it));\n};\n},{\"./$.defined\":14,\"./$.iobject\":25}],51:[function(require,module,exports){\n// 7.1.15 ToLength\nvar toInteger = require('./$.to-integer')\n , min = Math.min;\nmodule.exports = function(it){\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n},{\"./$.to-integer\":49}],52:[function(require,module,exports){\nvar id = 0\n , px = Math.random();\nmodule.exports = function(key){\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n},{}],53:[function(require,module,exports){\nvar store = require('./$.shared')('wks')\n , uid = require('./$.uid')\n , Symbol = require('./$.global').Symbol;\nmodule.exports = function(name){\n return store[name] || (store[name] =\n Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));\n};\n},{\"./$.global\":20,\"./$.shared\":44,\"./$.uid\":52}],54:[function(require,module,exports){\nvar classof = require('./$.classof')\n , ITERATOR = require('./$.wks')('iterator')\n , Iterators = require('./$.iterators');\nmodule.exports = require('./$.core').getIteratorMethod = function(it){\n if(it != undefined)return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n},{\"./$.classof\":10,\"./$.core\":12,\"./$.iterators\":33,\"./$.wks\":53}],55:[function(require,module,exports){\n'use strict';\nvar addToUnscopables = require('./$.add-to-unscopables')\n , step = require('./$.iter-step')\n , Iterators = require('./$.iterators')\n , toIObject = require('./$.to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./$.iter-define')(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n},{\"./$.add-to-unscopables\":8,\"./$.iter-define\":30,\"./$.iter-step\":32,\"./$.iterators\":33,\"./$.to-iobject\":50}],56:[function(require,module,exports){\n\n},{}],57:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , LIBRARY = require('./$.library')\n , global = require('./$.global')\n , ctx = require('./$.ctx')\n , classof = require('./$.classof')\n , $export = require('./$.export')\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , strictNew = require('./$.strict-new')\n , forOf = require('./$.for-of')\n , setProto = require('./$.set-proto').set\n , same = require('./$.same-value')\n , SPECIES = require('./$.wks')('species')\n , speciesConstructor = require('./$.species-constructor')\n , asap = require('./$.microtask')\n , PROMISE = 'Promise'\n , process = global.process\n , isNode = classof(process) == 'process'\n , P = global[PROMISE]\n , Wrapper;\n\nvar testResolve = function(sub){\n var test = new P(function(){});\n if(sub)test.constructor = Object;\n return P.resolve(test) === test;\n};\n\nvar USE_NATIVE = function(){\n var works = false;\n function P2(x){\n var self = new P(x);\n setProto(self, P2.prototype);\n return self;\n }\n try {\n works = P && P.resolve && testResolve();\n setProto(P2, P);\n P2.prototype = $.create(P.prototype, {constructor: {value: P2}});\n // actual Firefox has broken subclass support, test that\n if(!(P2.resolve(5).then(function(){}) instanceof P2)){\n works = false;\n }\n // actual V8 bug, https://code.google.com/p/v8/issues/detail?id=4162\n if(works && require('./$.descriptors')){\n var thenableThenGotten = false;\n P.resolve($.setDesc({}, 'then', {\n get: function(){ thenableThenGotten = true; }\n }));\n works = thenableThenGotten;\n }\n } catch(e){ works = false; }\n return works;\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n // library wrapper special case\n if(LIBRARY && a === P && b === Wrapper)return true;\n return same(a, b);\n};\nvar getConstructor = function(C){\n var S = anObject(C)[SPECIES];\n return S != undefined ? S : C;\n};\nvar isThenable = function(it){\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar PromiseCapability = function(C){\n var resolve, reject;\n this.promise = new C(function($$resolve, $$reject){\n if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve),\n this.reject = aFunction(reject)\n};\nvar perform = function(exec){\n try {\n exec();\n } catch(e){\n return {error: e};\n }\n};\nvar notify = function(record, isReject){\n if(record.n)return;\n record.n = true;\n var chain = record.c;\n asap(function(){\n var value = record.v\n , ok = record.s == 1\n , i = 0;\n var run = function(reaction){\n var handler = ok ? reaction.ok : reaction.fail\n , resolve = reaction.resolve\n , reject = reaction.reject\n , result, then;\n try {\n if(handler){\n if(!ok)record.h = true;\n result = handler === true ? value : handler(value);\n if(result === reaction.promise){\n reject(TypeError('Promise-chain cycle'));\n } else if(then = isThenable(result)){\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch(e){\n reject(e);\n }\n };\n while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n chain.length = 0;\n record.n = false;\n if(isReject)setTimeout(function(){\n var promise = record.p\n , handler, console;\n if(isUnhandled(promise)){\n if(isNode){\n process.emit('unhandledRejection', value, promise);\n } else if(handler = global.onunhandledrejection){\n handler({promise: promise, reason: value});\n } else if((console = global.console) && console.error){\n console.error('Unhandled promise rejection', value);\n }\n } record.a = undefined;\n }, 1);\n });\n};\nvar isUnhandled = function(promise){\n var record = promise._d\n , chain = record.a || record.c\n , i = 0\n , reaction;\n if(record.h)return false;\n while(chain.length > i){\n reaction = chain[i++];\n if(reaction.fail || !isUnhandled(reaction.promise))return false;\n } return true;\n};\nvar $reject = function(value){\n var record = this;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n record.v = value;\n record.s = 2;\n record.a = record.c.slice();\n notify(record, true);\n};\nvar $resolve = function(value){\n var record = this\n , then;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n try {\n if(record.p === value)throw TypeError(\"Promise can't be resolved itself\");\n if(then = isThenable(value)){\n asap(function(){\n var wrapper = {r: record, d: false}; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch(e){\n $reject.call(wrapper, e);\n }\n });\n } else {\n record.v = value;\n record.s = 1;\n notify(record, false);\n }\n } catch(e){\n $reject.call({r: record, d: false}, e); // wrap\n }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n // 25.4.3.1 Promise(executor)\n P = function Promise(executor){\n aFunction(executor);\n var record = this._d = {\n p: strictNew(this, P, PROMISE), // <- promise\n c: [], // <- awaiting reactions\n a: undefined, // <- checked in isUnhandled reactions\n s: 0, // <- state\n d: false, // <- done\n v: undefined, // <- value\n h: false, // <- handled rejection\n n: false // <- notify\n };\n try {\n executor(ctx($resolve, record, 1), ctx($reject, record, 1));\n } catch(err){\n $reject.call(record, err);\n }\n };\n require('./$.redefine-all')(P.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected){\n var reaction = new PromiseCapability(speciesConstructor(this, P))\n , promise = reaction.promise\n , record = this._d;\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n record.c.push(reaction);\n if(record.a)record.a.push(reaction);\n if(record.s)notify(record, false);\n return promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function(onRejected){\n return this.then(undefined, onRejected);\n }\n });\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: P});\nrequire('./$.set-to-string-tag')(P, PROMISE);\nrequire('./$.set-species')(PROMISE);\nWrapper = require('./$.core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r){\n var capability = new PromiseCapability(this)\n , $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (!USE_NATIVE || testResolve(true)), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x){\n // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n if(x instanceof P && sameConstructor(x.constructor, this))return x;\n var capability = new PromiseCapability(this)\n , $$resolve = capability.resolve;\n $$resolve(x);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./$.iter-detect')(function(iter){\n P.all(iter)['catch'](function(){});\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , resolve = capability.resolve\n , reject = capability.reject\n , values = [];\n var abrupt = perform(function(){\n forOf(iterable, false, values.push, values);\n var remaining = values.length\n , results = Array(remaining);\n if(remaining)$.each.call(values, function(promise, index){\n var alreadyCalled = false;\n C.resolve(promise).then(function(value){\n if(alreadyCalled)return;\n alreadyCalled = true;\n results[index] = value;\n --remaining || resolve(results);\n }, reject);\n });\n else resolve(results);\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , reject = capability.reject;\n var abrupt = perform(function(){\n forOf(iterable, false, function(promise){\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n }\n});\n},{\"./$\":34,\"./$.a-function\":7,\"./$.an-object\":9,\"./$.classof\":10,\"./$.core\":12,\"./$.ctx\":13,\"./$.descriptors\":15,\"./$.export\":17,\"./$.for-of\":19,\"./$.global\":20,\"./$.is-object\":27,\"./$.iter-detect\":31,\"./$.library\":35,\"./$.microtask\":36,\"./$.redefine-all\":38,\"./$.same-value\":40,\"./$.set-proto\":41,\"./$.set-species\":42,\"./$.set-to-string-tag\":43,\"./$.species-constructor\":45,\"./$.strict-new\":46,\"./$.wks\":53}],58:[function(require,module,exports){\n'use strict';\nvar $at = require('./$.string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./$.iter-define')(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});\n},{\"./$.iter-define\":30,\"./$.string-at\":47}],59:[function(require,module,exports){\nrequire('./es6.array.iterator');\nvar Iterators = require('./$.iterators');\nIterators.NodeList = Iterators.HTMLCollection = Iterators.Array;\n},{\"./$.iterators\":33,\"./es6.array.iterator\":55}],60:[function(require,module,exports){\n'use strict';\n\n// Returns a Promise that resovles static when a steamvr controller is found\n\nvar _createClass = require('babel-runtime/helpers/create-class')['default'];\n\nvar _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];\n\nvar _Promise = require('babel-runtime/core-js/promise')['default'];\n\nfunction getController(hand) {\n\tvar findGamepad = function findGamepad(resolve, reject) {\n\t\tvar gamepad = altspace.getGamepads().find(function (g) {\n\t\t\treturn g.mapping === 'steamvr' && g.hand === hand;\n\t\t});\n\t\tif (gamepad) {\n\t\t\tconsole.log(\"SteamVR input device found\", gamepad);\n\t\t\tresolve(gamepad);\n\t\t} else {\n\t\t\tconsole.log(\"SteamVR input device not found trying again in 500ms...\");\n\t\t\tsetTimeout(findGamepad, 500, resolve, reject);\n\t\t}\n\t};\n\n\treturn new _Promise(findGamepad);\n}\n\n/**\r\n * The SteamVRInput behavior manages SteamVR input devices. It should be added\r\n * to the ThreeJS scene and is required to use [SteamVRTrackedObject]{@link module:altspace/utilities/behaviors.SteamVRTrackedObject}\r\n *\r\n * @class SteamVRInput\r\n * @memberof module:altspace/utilities/behaviors\r\n *\r\n * @prop {Gamepad} leftController the left SteamVR [Gamepad]{@link module:altspace~Gamepad} or undefined if one has not yet been found\r\n * @prop {Gamepad} rightController the right SteamVR [Gamepad]{@link module:altspace~Gamepad} or undefined if one has not yet been found\r\n * @prop {Gamepad} firstController the first SteamVR [Gamepad]{@link module:altspace~Gamepad} or undefined if none have yet been found\r\n *\r\n * @prop {Promise} leftControllerPromise a promise that resolves once the left SteamVR input device is found\r\n * @prop {Promise} rightControllerPromise a promise that resolves once the right SteamVR input device is found\r\n * @prop {Promise} firstControllerPromise a promise that resolves once any SteamVR input device is found\r\n */\n\nvar SteamVRInputBehavior = (function () {\n\tfunction SteamVRInputBehavior() {\n\t\t_classCallCheck(this, SteamVRInputBehavior);\n\n\t\tthis.type = 'SteamVRInput';\n\t}\n\n\t_createClass(SteamVRInputBehavior, [{\n\t\tkey: 'awake',\n\t\tvalue: function awake() {\n\t\t\tvar _this = this;\n\n\t\t\tthis.leftControllerPromise = getController(SteamVRInputBehavior.LEFT_CONTROLLER);\n\t\t\tthis.rightControllerPromise = getController(SteamVRInputBehavior.RIGHT_CONTROLLER);\n\t\t\tthis.firstControllerPromise = _Promise.race([this.leftControllerPromise, this.rightControllerPromise]);\n\n\t\t\tthis.leftControllerPromise.then(function (controller) {\n\t\t\t\t_this.leftController = controller;\n\t\t\t});\n\t\t\tthis.rightControllerPromise.then(function (controller) {\n\t\t\t\t_this.rightController = controller;\n\t\t\t});\n\t\t\tthis.firstControllerPromise.then(function (controller) {\n\t\t\t\t_this.firstController = controller;\n\n\t\t\t\tvar blockedAxes = controller.axes.map(function () {\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tvar blockedButtons = controller.buttons.map(function () {\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\tblockedButtons[SteamVRInputBehavior.BUTTON_TRIGGER] = true;\n\t\t\t\tblockedButtons[SteamVRInputBehavior.BUTTON_TOUCHPAD] = true;\n\n\t\t\t\tcontroller.preventDefault(blockedAxes, blockedButtons);\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn SteamVRInputBehavior;\n})();\n\nSteamVRInputBehavior.BUTTON_TRIGGER = 0;\nSteamVRInputBehavior.BUTTON_GRIP = 1;\nSteamVRInputBehavior.BUTTON_TOUCHPAD = 2;\nSteamVRInputBehavior.BUTTON_DPAD_UP = 3;\nSteamVRInputBehavior.BUTTON_DPAD_RIGHT = 4;\nSteamVRInputBehavior.BUTTON_DPAD_DOWN = 5;\nSteamVRInputBehavior.BUTTON_DPAD_LEFT = 6;\n\nSteamVRInputBehavior.AXIS_TOUCHPAD_X = 0;\nSteamVRInputBehavior.AXIS_TOUCHPAD_Y = 1;\n\nSteamVRInputBehavior.FIRST_CONTROLLER = 'first';\nSteamVRInputBehavior.LEFT_CONTROLLER = 'left';\nSteamVRInputBehavior.RIGHT_CONTROLLER = 'right';\n\nwindow.altspace.utilities.behaviors.SteamVRInput = SteamVRInputBehavior;\n},{\"babel-runtime/core-js/promise\":2,\"babel-runtime/helpers/class-call-check\":3,\"babel-runtime/helpers/create-class\":4}]},{},[60]);\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\nmodule.exports = root;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],2:[function(require,module,exports){\n(function (global){\n/**\n * lodash 4.1.2 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates an hash object.\n *\n * @private\n * @constructor\n * @returns {Object} Returns the new hash object.\n */\nfunction Hash() {}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(hash, key) {\n return hashHas(hash, key) && delete hash[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @param {Object} hash The hash to query.\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(hash, key) {\n if (nativeCreate) {\n var result = hash[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(hash, key) ? hash[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @param {Object} hash The hash to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(hash, key) {\n return nativeCreate ? hash[key] !== undefined : hasOwnProperty.call(hash, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n */\nfunction hashSet(hash, key, value) {\n hash[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n}\n\n// Avoid inheriting from `Object.prototype` when possible.\nHash.prototype = nativeCreate ? nativeCreate(null) : objectProto;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction MapCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = values[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': Map ? new Map : [],\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapDelete(key) {\n var data = this.__data__;\n if (isKeyable(key)) {\n return hashDelete(typeof key == 'string' ? data.string : data.hash, key);\n }\n return Map ? data.map['delete'](key) : assocDelete(data.map, key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapGet(key) {\n var data = this.__data__;\n if (isKeyable(key)) {\n return hashGet(typeof key == 'string' ? data.string : data.hash, key);\n }\n return Map ? data.map.get(key) : assocGet(data.map, key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapHas(key) {\n var data = this.__data__;\n if (isKeyable(key)) {\n return hashHas(typeof key == 'string' ? data.string : data.hash, key);\n }\n return Map ? data.map.has(key) : assocHas(data.map, key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapSet(key, value) {\n var data = this.__data__;\n if (isKeyable(key)) {\n hashSet(typeof key == 'string' ? data.string : data.hash, key, value);\n } else if (Map) {\n data.map.set(key, value);\n } else {\n assocSet(data.map, key, value);\n }\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapClear;\nMapCache.prototype['delete'] = mapDelete;\nMapCache.prototype.get = mapGet;\nMapCache.prototype.has = mapHas;\nMapCache.prototype.set = mapSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction Stack(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = values[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = { 'array': [], 'map': null };\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n array = data.array;\n\n return array ? assocDelete(array, key) : data.map['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n var data = this.__data__,\n array = data.array;\n\n return array ? assocGet(array, key) : data.map.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n var data = this.__data__,\n array = data.array;\n\n return array ? assocHas(array, key) : data.map.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__,\n array = data.array;\n\n if (array) {\n if (array.length < (LARGE_ARRAY_SIZE - 1)) {\n assocSet(array, key, value);\n } else {\n data.array = null;\n data.map = new MapCache(array);\n }\n }\n var map = data.map;\n if (map) {\n map.set(key, value);\n }\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Removes `key` and its value from the associative array.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction assocDelete(array, key) {\n var index = assocIndexOf(array, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = array.length - 1;\n if (index == lastIndex) {\n array.pop();\n } else {\n splice.call(array, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the associative array value for `key`.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction assocGet(array, key) {\n var index = assocIndexOf(array, key);\n return index < 0 ? undefined : array[index][1];\n}\n\n/**\n * Checks if an associative array value for `key` exists.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction assocHas(array, key) {\n return assocIndexOf(array, key) > -1;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * Sets the associative array `key` to `value`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n */\nfunction assocSet(array, key, value) {\n var index = assocIndexOf(array, key);\n if (index < 0) {\n array.push([key, value]);\n } else {\n array[index][1] = value;\n }\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return type == 'number' || type == 'boolean' ||\n (type == 'string' && value != '__proto__') || value == null;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(funcToString.call(value));\n }\n return isObjectLike(value) &&\n (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = Stack;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],3:[function(require,module,exports){\n/**\n * lodash 4.1.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nvar Stack = require('lodash._stack'),\n keys = require('lodash.keys'),\n root = require('lodash._root');\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns). */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to an array.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Converts `set` to an array.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetPrototype = Object.getPrototypeOf;\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = DataView ? (DataView + '') : '',\n mapCtorString = Map ? funcToString.call(Map) : '',\n promiseCtorString = Promise ? funcToString.call(Promise) : '',\n setCtorString = Set ? funcToString.call(Set) : '',\n weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : '';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,\n // that are composed entirely of index properties, return `false` for\n // `hasOwnProperty` checks of them.\n return hasOwnProperty.call(object, key) ||\n (typeof object == 'object' && key in object && getPrototype(object) === null);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var index = -1,\n isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n isUnordered = bitmask & UNORDERED_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked) {\n return stacked == other;\n }\n var result = true;\n stack.set(array, other);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (isUnordered) {\n if (!arraySome(other, function(othValue) {\n return arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack);\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n // Coerce dates and booleans to numbers, dates to milliseconds and\n // booleans to `1` or `0` treating invalid dates coerced to `NaN` as\n // not equal.\n return +object == +other;\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case numberTag:\n // Treat `NaN` vs. `NaN` as equal.\n return (object != +object) ? other != +other : object == +other;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n stack.set(object, other);\n\n // Recursively compare objects (susceptible to call stack limits).\n return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : baseHas(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `[[Prototype]]` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {null|Object} Returns the `[[Prototype]]`.\n */\nfunction getPrototype(value) {\n return nativeGetPrototype(Object(value));\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction getTag(value) {\n return objectToString.call(value);\n}\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : null,\n ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @type {Function}\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent,\n * else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length,\n * else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(funcToString.call(value));\n }\n return isObjectLike(value) &&\n (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\nmodule.exports = isEqual;\n\n},{\"lodash._root\":1,\"lodash._stack\":2,\"lodash.keys\":4}],4:[function(require,module,exports){\n/**\n * lodash 4.0.6 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n stringTag = '[object String]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetPrototype = Object.getPrototypeOf,\n nativeKeys = Object.keys;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,\n // that are composed entirely of index properties, return `false` for\n // `hasOwnProperty` checks of them.\n return hasOwnProperty.call(object, key) ||\n (typeof object == 'object' && key in object && getPrototype(object) === null);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't skip the constructor\n * property of prototypes or treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n return nativeKeys(Object(object));\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a\n * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects\n * Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Gets the `[[Prototype]]` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {null|Object} Returns the `[[Prototype]]`.\n */\nfunction getPrototype(value) {\n return nativeGetPrototype(Object(value));\n}\n\n/**\n * Creates an array of index keys for `object` values of arrays,\n * `arguments` objects, and strings, otherwise `null` is returned.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array|null} Returns index keys, else `null`.\n */\nfunction indexKeys(object) {\n var length = object ? object.length : undefined;\n if (isLength(length) &&\n (isArray(object) || isString(object) || isArguments(object))) {\n return baseTimes(length, String);\n }\n return null;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @type {Function}\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value)) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length,\n * else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n var isProto = isPrototype(object);\n if (!(isProto || isArrayLike(object))) {\n return baseKeys(object);\n }\n var indexes = indexKeys(object),\n skipIndexes = !!indexes,\n result = indexes || [],\n length = result.length;\n\n for (var key in object) {\n if (baseHas(object, key) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length))) &&\n !(isProto && key == 'constructor')) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keys;\n\n},{}],5:[function(require,module,exports){\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The Object3DSync behavior syncs an object's transform and data. \r\n * **Note:** Object3DSync must be used in conjunction with \r\n * [SceneSync]{@link module:altspace/utilities/behaviors.SceneSync}\r\n *\r\n * @class Object3DSync\r\n * @param {Object} [config]\r\n * @param {Boolean} [config.position=false] Whether object's position should\r\n * be synced\r\n * @param {Boolean} [config.rotation=false] Whether object's rotation should\r\n * be synced\r\n * @param {Boolean} [config.scale=false] Whether object's scale should\r\n * be synced\r\n * @param {Boolean} [config.auto=false] Whether the object should be synced \r\n * automatically. Not currently recommended.\r\n * @param {Boolean} [config.world=false] Whether world coordiantes should\r\n * be sent when synchronizing position and rotation, instead of the\r\n * transformation relative to the object's parent. Use if synced object\r\n * is a child (e.g. of the tracking skeleton) only in the sender scene.\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\nwindow.altspace.utilities.behaviors.Object3DSync = function (config){\r\n\tconfig = config || {};\r\n\t/*if (config.position === undefined) config.position = true;\r\n\tif (config.rotation === undefined) config.rotation = true;\r\n\tif (config.scale === undefined) config.scale = true; */\r\n\tvar object3d;\r\n\tvar scene;\r\n\tvar ref;\r\n\tvar key;\r\n\tvar dataRef;\r\n\tvar ownerRef;\r\n\tvar transformRef;\r\n\r\n\tvar sceneSync;\r\n\tvar isMine = false;\r\n\r\n\tvar position = new THREE.Vector3();\r\n\tvar quaternion = new THREE.Quaternion(); \r\n\tvar scale = new THREE.Vector3();\r\n\tvar isEqual = require('lodash.isequal');\r\n\r\n\r\n\tfunction link(objectRef, sS) {\r\n\t\tref = objectRef;\r\n\t\tkey = ref.key();\r\n\t\ttransformRef = ref.child('batch');\r\n\t\tdataRef = ref.child('data');\r\n\t\townerRef = ref.child('owner');\r\n\t\tsceneSync = sS;\r\n\t}\r\n\r\n\t//TODO: lerp\r\n\tfunction setupReceive() {\r\n\t\ttransformRef.on('value', function (snapshot) {\r\n\r\n\t\t\tif (isMine) return;\r\n\r\n\t\t\tvar value = snapshot.val();\r\n\t\t\tif (!value) return;\r\n\r\n\t\t\tif (config.position) {\r\n\t\t\t\tobject3d.position.set(value.position.x, value.position.y, value.position.z);\r\n\t\t\t}\r\n\t\t\tif (config.rotation) {\r\n\t\t\t\tobject3d.quaternion.set(value.quaternion.x, value.quaternion.y, value.quaternion.z, value.quaternion.w);\r\n\t\t\t}\r\n\t\t\tif (config.scale) {\r\n\t\t\t\tobject3d.scale.set(value.scale.x, value.scale.y, value.scale.z);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\townerRef.on('value', function (snapshot) {\r\n\t\t\tvar newOwnerId = snapshot.val();\r\n\r\n\t\t\tvar gained = newOwnerId === sceneSync.clientId && !isMine;\r\n\t\t\tif (gained) object3d.dispatchEvent({ type: 'ownershipgained' });\r\n\r\n\t\t\tvar lost = newOwnerId !== sceneSync.clientId && isMine;\r\n\t\t\tif (lost) object3d.dispatchEvent({ type: 'ownershiplost' });\r\n\t\t\t\r\n\t\t\tisMine = newOwnerId === sceneSync.clientId;\r\n\t\t});\r\n\t}\r\n\r\n\tfunction send() {\r\n\t\tif (!isMine) return;\r\n\r\n\t\tvar transform = {};\r\n\t\tif (config.world) {\r\n\t\t\tobject3d.updateMatrixWorld();//call before sending to avoid being a frame behind\r\n\t\t\tobject3d.matrixWorld.decompose(position, quaternion, scale); \r\n\t\t} else {\r\n\t\t\tposition = object3d.position;\r\n\t\t\tquaternion = object3d.quaternion;\r\n\t\t\tscale = object3d.scale;\r\n\t\t}\r\n\t\tif (config.position) {\r\n\t\t\ttransform.position = {\r\n\t\t\t\tx: position.x,\r\n\t\t\t\ty: position.y,\r\n\t\t\t\tz: position.z\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (config.rotation) {\r\n\t\t\ttransform.quaternion = {\r\n\t\t\t\tx: quaternion.x,\r\n\t\t\t\ty: quaternion.y,\r\n\t\t\t\tz: quaternion.z,\r\n\t\t\t\tw: quaternion.w\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (config.scale) {\r\n\t\t\ttransform.scale = {\r\n\t\t\t\tx: scale.x,\r\n\t\t\t\ty: scale.y,\r\n\t\t\t\tz: scale.z\r\n\t\t\t};\r\n\t\t}\r\n\t\tif (Object.keys(transform).length > 0) {\r\n\t\t\tif (isEqual(transform, this.lastTransform)) { return; }\r\n\t\t\ttransformRef.set(transform);\r\n\t\t\tthis.lastTransform = transform;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\r\n\t\tsetupReceive();\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * Take ownership of this object. The client that instantiates an object owns it,\r\n\t * afterwards changes in ownership must be managed by the app. Manual modifications\r\n\t * to the Firebase ref's will not obey ownership status.\r\n\t * @instance\r\n\t * @method takeOwnership\r\n\t * @memberof module:altspace/utilities/behaviors.Object3DSync\r\n\t */\r\n\tfunction takeOwnership() {\r\n\t\townerRef.set(sceneSync.clientId);\r\n\t}\r\n\r\n\tvar exports = { awake: awake, update: update, type: 'Object3DSync', link: link, autoSend: send, takeOwnership: takeOwnership };\r\n\r\n\t/**\r\n\t * Firebase reference for the 'data' child location, can be used to store data related to\r\n\t * this object.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {Firebase} dataRef\r\n\t * @memberof module:altspace/utilities/behaviors.Object3DSync\r\n\t */\r\n\tObject.defineProperty(exports, 'dataRef', {\r\n\t\tget: function () {\r\n\t\t\treturn dataRef;\r\n\t\t}\r\n\t});\r\n\r\n\t/**\r\n\t * True if this object is currently owned by this client, false otherwise.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {boolean} isMine\r\n\t * @memberof module:altspace/utilities/behaviors.Object3DSync\r\n\t */\r\n\tObject.defineProperty(exports, 'isMine', {\r\n\t\tget: function () {\r\n\t\t\treturn isMine;\r\n\t\t}\r\n\t});\r\n\r\n\treturn exports;\r\n};\r\n\r\n//manual modifications to the ref's will not obey ownership status.\r\n\n},{\"lodash.isequal\":3}]},{},[5]);\n\n/*!Please JS v0.4.2, Jordan Checkman 2014, Checkman.io, MIT License, Have fun.*/\r\n!function(e,r,a){\"function\"==typeof define&&define.amd?define([],a):\"object\"==typeof exports?module.exports=a():r[e]=a()}(\"Please\",this,function(){\"use strict\";function e(){function e(e,r,a){var o=Math.random;return a instanceof l&&(o=a.random),Math.floor(o()*(r-e+1))+e}function r(e,r,a){var o=Math.random;return a instanceof l&&(o=a.random),o()*(r-e)+e}function a(e,r,a){return Math.max(r,Math.min(e,a))}function o(e,r){var a;switch(e){case\"hex\":for(a=0;a=128?\"dark\":\"light\"}function t(e){var r={};for(var a in e)e.hasOwnProperty(a)&&(r[a]=e[a]);return r}function l(e){function r(){o=(o+1)%256,n=(n+a[o])%256;var e=a[o];return a[o]=a[n],a[n]=e,a[(a[o]+a[n])%256]}for(var a=[],o=0,n=0,t=0;256>t;t++)a[t]=t;for(var l=0,F=0;256>l;l++){F=(F+a[l]+e.charCodeAt(l%e.length))%256;var s=a[l];a[l]=a[F],a[F]=s}this.random=function(){for(var e=0,a=0,o=1;8>e;e++)a+=r()*o,o*=256;return a/0x10000000000000000}}var F={},s={aliceblue:\"F0F8FF\",antiquewhite:\"FAEBD7\",aqua:\"00FFFF\",aquamarine:\"7FFFD4\",azure:\"F0FFFF\",beige:\"F5F5DC\",bisque:\"FFE4C4\",black:\"000000\",blanchedalmond:\"FFEBCD\",blue:\"0000FF\",blueviolet:\"8A2BE2\",brown:\"A52A2A\",burlywood:\"DEB887\",cadetblue:\"5F9EA0\",chartreuse:\"7FFF00\",chocolate:\"D2691E\",coral:\"FF7F50\",cornflowerblue:\"6495ED\",cornsilk:\"FFF8DC\",crimson:\"DC143C\",cyan:\"00FFFF\",darkblue:\"00008B\",darkcyan:\"008B8B\",darkgoldenrod:\"B8860B\",darkgray:\"A9A9A9\",darkgrey:\"A9A9A9\",darkgreen:\"006400\",darkkhaki:\"BDB76B\",darkmagenta:\"8B008B\",darkolivegreen:\"556B2F\",darkorange:\"FF8C00\",darkorchid:\"9932CC\",darkred:\"8B0000\",darksalmon:\"E9967A\",darkseagreen:\"8FBC8F\",darkslateblue:\"483D8B\",darkslategray:\"2F4F4F\",darkslategrey:\"2F4F4F\",darkturquoise:\"00CED1\",darkviolet:\"9400D3\",deeppink:\"FF1493\",deepskyblue:\"00BFFF\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1E90FF\",firebrick:\"B22222\",floralwhite:\"FFFAF0\",forestgreen:\"228B22\",fuchsia:\"FF00FF\",gainsboro:\"DCDCDC\",ghostwhite:\"F8F8FF\",gold:\"FFD700\",goldenrod:\"DAA520\",gray:\"808080\",grey:\"808080\",green:\"008000\",greenyellow:\"ADFF2F\",honeydew:\"F0FFF0\",hotpink:\"FF69B4\",indianred:\"CD5C5C\",indigo:\"4B0082\",ivory:\"FFFFF0\",khaki:\"F0E68C\",lavender:\"E6E6FA\",lavenderblush:\"FFF0F5\",lawngreen:\"7CFC00\",lemonchiffon:\"FFFACD\",lightblue:\"ADD8E6\",lightcoral:\"F08080\",lightcyan:\"E0FFFF\",lightgoldenrodyellow:\"FAFAD2\",lightgray:\"D3D3D3\",lightgrey:\"D3D3D3\",lightgreen:\"90EE90\",lightpink:\"FFB6C1\",lightsalmon:\"FFA07A\",lightseagreen:\"20B2AA\",lightskyblue:\"87CEFA\",lightslategray:\"778899\",lightslategrey:\"778899\",lightsteelblue:\"B0C4DE\",lightyellow:\"FFFFE0\",lime:\"00FF00\",limegreen:\"32CD32\",linen:\"FAF0E6\",magenta:\"FF00FF\",maroon:\"800000\",mediumaquamarine:\"66CDAA\",mediumblue:\"0000CD\",mediumorchid:\"BA55D3\",mediumpurple:\"9370D8\",mediumseagreen:\"3CB371\",mediumslateblue:\"7B68EE\",mediumspringgreen:\"00FA9A\",mediumturquoise:\"48D1CC\",mediumvioletred:\"C71585\",midnightblue:\"191970\",mintcream:\"F5FFFA\",mistyrose:\"FFE4E1\",moccasin:\"FFE4B5\",navajowhite:\"FFDEAD\",navy:\"000080\",oldlace:\"FDF5E6\",olive:\"808000\",olivedrab:\"6B8E23\",orange:\"FFA500\",orangered:\"FF4500\",orchid:\"DA70D6\",palegoldenrod:\"EEE8AA\",palegreen:\"98FB98\",paleturquoise:\"AFEEEE\",palevioletred:\"D87093\",papayawhip:\"FFEFD5\",peachpuff:\"FFDAB9\",peru:\"CD853F\",pink:\"FFC0CB\",plum:\"DDA0DD\",powderblue:\"B0E0E6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"FF0000\",rosybrown:\"BC8F8F\",royalblue:\"4169E1\",saddlebrown:\"8B4513\",salmon:\"FA8072\",sandybrown:\"F4A460\",seagreen:\"2E8B57\",seashell:\"FFF5EE\",sienna:\"A0522D\",silver:\"C0C0C0\",skyblue:\"87CEEB\",slateblue:\"6A5ACD\",slategray:\"708090\",slategrey:\"708090\",snow:\"FFFAFA\",springgreen:\"00FF7F\",steelblue:\"4682B4\",tan:\"D2B48C\",teal:\"008080\",thistle:\"D8BFD8\",tomato:\"FF6347\",turquoise:\"40E0D0\",violet:\"EE82EE\",wheat:\"F5DEB3\",white:\"FFFFFF\",whitesmoke:\"F5F5F5\",yellow:\"FFFF00\",yellowgreen:\"9ACD32\"},i=.618033988749895,u={hue:null,saturation:null,value:null,base_color:\"\",greyscale:!1,grayscale:!1,golden:!0,full_random:!1,colors_returned:1,format:\"hex\",seed:null},c={scheme_type:\"analogous\",format:\"hex\"},h={golden:!1,format:\"hex\"};return F.NAME_to_HEX=function(e){return e=e.toLowerCase(),e in s?s[e]:(console.error(\"Color name not recognized.\"),void 0)},F.NAME_to_RGB=function(e){return F.HEX_to_RGB(F.NAME_to_HEX(e))},F.NAME_to_HSV=function(e){return F.HEX_to_HSV(F.NAME_to_HEX(e))},F.HEX_to_RGB=function(e){var r=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;e=e.replace(r,function(e,r,a,o){return r+r+a+a+o+o});var a=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(e);return a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null},F.RGB_to_HEX=function(e){return\"#\"+((1<<24)+(e.r<<16)+(e.g<<8)+e.b).toString(16).slice(1)},F.HSV_to_RGB=function(e){var r,a,o,n,t,l,F,s,i=e.h,u=e.s,c=e.v;if(0===u)return{r:c,g:c,b:c};switch(i/=60,n=Math.floor(i),t=i-n,l=c*(1-u),F=c*(1-u*t),s=c*(1-u*(1-t)),n){case 0:r=c,a=s,o=l;break;case 1:r=F,a=c,o=l;break;case 2:r=l,a=c,o=s;break;case 3:r=l,a=F,o=c;break;case 4:r=s,a=l,o=c;break;case 5:r=c,a=l,o=F}return{r:Math.floor(255*r),g:Math.floor(255*a),b:Math.floor(255*o)}},F.RGB_to_HSV=function(e){var r=e.r/255,a=e.g/255,o=e.b/255,n=0,t=0,l=0,F=Math.min(r,Math.min(a,o)),s=Math.max(r,Math.max(a,o));if(F===s)return l=F,{h:0,s:0,v:l};var i=r===F?a-o:o===F?r-a:o-r,u=r===F?3:o===F?1:5;return n=60*(u-i/(s-F)),t=(s-F)/s,l=s,{h:n,s:t,v:l}},F.HSV_to_HEX=function(e){return F.RGB_to_HEX(F.HSV_to_RGB(e))},F.HEX_to_HSV=function(e){return F.RGB_to_HSV(F.HEX_to_RGB(e))},F.make_scheme=function(e,r){function n(e){return{h:e.h,s:e.s,v:e.v}}var l,F,s,i,u,h=t(c);if(null!==r)for(var d in r)r.hasOwnProperty(d)&&(h[d]=r[d]);var g=[e];switch(h.scheme_type.toLowerCase()){case\"monochromatic\":case\"mono\":for(u=1;2>=u;u++)l=n(e),s=l.s+.1*u,s=a(s,0,1),i=l.v+.1*u,i=a(i,0,1),l.s=s,l.v=i,g.push(l);for(u=1;2>=u;u++)l=n(e),s=l.s-.1*u,s=a(s,0,1),i=l.v-.1*u,i=a(i,0,1),l.s=s,l.v=i,g.push(l);break;case\"complementary\":case\"complement\":case\"comp\":l=n(e),l.h=(l.h+180)%360,g.push(l);break;case\"split-complementary\":case\"split-complement\":case\"split\":l=n(e),l.h=(l.h+165)%360,g.push(l),l=n(e),l.h=Math.abs((l.h-165)%360),g.push(l);break;case\"double-complementary\":case\"double-complement\":case\"double\":l=n(e),l.h=(l.h+180)%360,g.push(l),l.h=(l.h+30)%360,F=n(l),g.push(l),l.h=(l.h+180)%360,g.push(F);break;case\"analogous\":case\"ana\":for(u=1;5>=u;u++)l=n(e),l.h=(l.h+20*u)%360,g.push(l);break;case\"triadic\":case\"triad\":case\"tri\":for(u=1;3>u;u++)l=n(e),l.h=(l.h+120*u)%360,g.push(l);break;default:console.error(\"Color scheme not recognized.\")}return o(h.format.toLowerCase(),g),g},F.make_color=function(n){var s=[],c=t(u),h=null;if(null!==n)for(var d in n)n.hasOwnProperty(d)&&(c[d]=n[d]);var g=null;\"string\"==typeof c.seed&&(g=new l(c.seed)),c.base_color.length>0&&(h=c.base_color.match(/^#?([0-9a-f]{3})([0-9a-f]{3})?$/i)?F.HEX_to_HSV(c.base_color):F.NAME_to_HSV(c.base_color));for(var m=0;m\r\n */\r\n; var Url = (function() {\r\n\t\"use strict\";\r\n\r\n\tvar\r\n\t\t// mapping between what we want and element properties\r\n\t\tmap = {\r\n\t\t\tprotocol : 'protocol',\r\n\t\t\thost : 'hostname',\r\n\t\t\tport : 'port',\r\n\t\t\tpath : 'pathname',\r\n\t\t\tquery : 'search',\r\n\t\t\thash : 'hash'\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * default ports as defined by http://url.spec.whatwg.org/#default-port\r\n\t\t * We need them to fix IE behavior, @see https://github.com/Mikhus/jsurl/issues/2\r\n\t\t */\r\n\t\tdefaultPorts = {\r\n\t\t\t\"ftp\" : 21,\r\n\t\t\t\"gopher\" : 70,\r\n\t\t\t\"http\" : 80,\r\n\t\t\t\"https\" : 443,\r\n\t\t\t\"ws\" : 80,\r\n\t\t\t\"wss\" : 443\r\n\t\t},\r\n\r\n\t\tparse = function( self, url) {\r\n\t\t\tvar\r\n\t\t\t\td = document,\r\n\t\t\t\tlink = d.createElement( 'a'),\r\n\t\t\t\turl = url || d.location.href,\r\n\t\t\t\tauth = url.match( /\\/\\/(.*?)(?::(.*?))?@/) || []\r\n\t\t\t;\r\n\r\n\t\t\tlink.href = url;\r\n\r\n\t\t\tfor (var i in map) {\r\n\t\t\t\tself[i] = link[map[i]] || '';\r\n\t\t\t}\r\n\r\n\t\t\t// fix-up some parts\r\n\t\t\tself.protocol = self.protocol.replace( /:$/, '');\r\n\t\t\tself.query = self.query.replace( /^\\?/, '');\r\n\t\t\tself.hash = self.hash.replace( /^#/, '');\r\n\t\t\tself.user = auth[1] || '';\r\n\t\t\tself.pass = auth[2] || '';\r\n\t\t\tself.port = (defaultPorts[self.protocol] == self.port || self.port == 0) ? '' : self.port; // IE fix, Android browser fix\r\n\r\n\t\t\tif (!self.protocol && !/^([a-z]+:)?\\/\\//.test( url)) { // is IE and path is relative\r\n\t\t\t\tvar\r\n\t\t\t\t\tbase = new Url( d.location.href.match(/(.*\\/)/)[0]),\r\n\t\t\t\t\tbasePath = base.path.split( '/'),\r\n\t\t\t\t\tselfPath = self.path.split( '/')\r\n\t\t\t\t;\r\n\r\n\t\t\t\tbasePath.pop();\r\n\r\n\t\t\t\tfor (var i = 0, props = ['protocol','user','pass','host','port'], s = props.length; i < s; i++) {\r\n\t\t\t\t\tself[props[i]] = base[props[i]];\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (selfPath[0] == '..') { // skip all \"../\r\n\t\t\t\t\tbasePath.pop();\r\n\t\t\t\t\tselfPath.shift();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.path = (url.substring(0, 1) != '/' ? basePath.join( '/') : '') + '/' + selfPath.join( '/');\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\t// fix absolute URL's path in IE\r\n\t\t\t\tself.path = self.path.replace( /^\\/?/, '/');\r\n\t\t\t}\r\n\r\n\t\t\tparseQs( self);\r\n\t\t},\r\n\t\t\r\n\t\tdecode = function(s) {\r\n\t\t\ts = s.replace( /\\+/g, ' ');\r\n\r\n\t\t\ts = s.replace( /%([ef][0-9a-f])%([89ab][0-9a-f])%([89ab][0-9a-f])/gi,\r\n\t\t\t\tfunction( code, hex1, hex2, hex3) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tn1 = parseInt( hex1, 16) - 0xE0,\r\n\t\t\t\t\t\tn2 = parseInt( hex2, 16) - 0x80\r\n\t\t\t\t\t;\r\n\t\r\n\t\t\t\t\tif (n1 == 0 && n2 < 32) {\r\n\t\t\t\t\t\treturn code;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tn3 = parseInt( hex3, 16) - 0x80,\r\n\t\t\t\t\t\tn = (n1 << 12) + (n2 << 6) + n3\r\n\t\t\t\t\t;\r\n\t\r\n\t\t\t\t\tif (n > 0xFFFF) {\r\n\t\t\t\t\t\treturn code;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\treturn String.fromCharCode( n);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\ts = s.replace( /%([cd][0-9a-f])%([89ab][0-9a-f])/gi,\r\n\t\t\t\tfunction( code, hex1, hex2) {\r\n\t\t\t\t\tvar n1 = parseInt(hex1, 16) - 0xC0;\r\n\t\r\n\t\t\t\t\tif (n1 < 2) {\r\n\t\t\t\t\t\treturn code;\r\n\t\t\t\t\t}\r\n\t\r\n\t\t\t\t\tvar n2 = parseInt(hex2, 16) - 0x80;\r\n\t\r\n\t\t\t\t\treturn String.fromCharCode( (n1 << 6) + n2);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\ts = s.replace( /%([0-7][0-9a-f])/gi,\r\n\t\t\t\tfunction( code, hex) {\r\n\t\t\t\t\treturn String.fromCharCode( parseInt(hex, 16));\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n\t\t\treturn s;\r\n\t\t},\r\n\r\n\t\tparseQs = function( self) {\r\n\t\t\tvar qs = self.query;\r\n\r\n\t\t\tself.query = new (function( qs) {\r\n\t\t\t\tvar re = /([^=&]+)(=([^&]*))?/g, match;\r\n\r\n\t\t\t\twhile ((match = re.exec( qs))) {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\tkey = decodeURIComponent(match[1].replace(/\\+/g, ' ')),\r\n\t\t\t\t\t\tvalue = match[3] ? decode(match[3]) : ''\r\n\t\t\t\t\t;\r\n\r\n\t\t\t\t\tif (this[key] != null) {\r\n\t\t\t\t\t\tif (!(this[key] instanceof Array)) {\r\n\t\t\t\t\t\t\tthis[key] = [this[key]];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tthis[key].push( value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis[key] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.clear = function() {\r\n\t\t\t\t\tfor (key in this) {\r\n\t\t\t\t\t\tif (!(this[key] instanceof Function)) {\r\n\t\t\t\t\t\t\tdelete this[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis.toString = function() {\r\n\t\t\t\t\tvar\r\n\t\t\t\t\t\ts = '',\r\n\t\t\t\t\t\te = encodeURIComponent\r\n\t\t\t\t\t;\r\n\r\n\t\t\t\t\tfor (var i in this) {\r\n\t\t\t\t\t\tif (this[i] instanceof Function) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this[i] instanceof Array) {\r\n\t\t\t\t\t\t\tvar len = this[i].length;\r\n\r\n\t\t\t\t\t\t\tif (len) {\r\n\t\t\t\t\t\t\t\tfor (var ii = 0; ii < len; ii++) {\r\n\t\t\t\t\t\t\t\t\ts += s ? '&' : '';\r\n\t\t\t\t\t\t\t\t\ts += e( i) + '=' + e( this[i][ii]);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\telse { // parameter is an empty array, so treat as an empty argument\r\n\t\t\t\t\t\t\t\ts += (s ? '&' : '') + e( i) + '=';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ts += s ? '&' : '';\r\n\t\t\t\t\t\t\ts += e( i) + '=' + e( this[i]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn s;\r\n\t\t\t\t};\r\n\t\t\t})( qs);\r\n\t\t}\r\n\t;\r\n\r\n\treturn function( url) {\r\n\t\tthis.toString = function() {\r\n\t\t\treturn (\r\n\t\t\t\t(this.protocol && (this.protocol + '://')) +\r\n\t\t\t\t(this.user && (this.user + (this.pass && (':' + this.pass)) + '@')) +\r\n\t\t\t\t(this.host && this.host) +\r\n\t\t\t\t(this.port && (':' + this.port)) +\r\n\t\t\t\t(this.path && this.path) +\r\n\t\t\t\t(this.query.toString() && ('?' + this.query)) +\r\n\t\t\t\t(this.hash && ('#' + this.hash))\r\n\t\t\t);\r\n\t\t};\r\n\r\n\t\tparse( this, url);\r\n\t};\r\n}());\r\n\n/*! @license Firebase v2.2.9\r\n License: https://www.firebase.com/terms/terms-of-service.html */\r\n(function() {var g,aa=this;function n(a){return void 0!==a}function ba(){}function ca(a){a.vb=function(){return a.uf?a.uf:a.uf=new a}}\r\nfunction da(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\r\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ea(a){return\"array\"==da(a)}function fa(a){var b=da(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length}function p(a){return\"string\"==typeof a}function ga(a){return\"number\"==typeof a}function ha(a){return\"function\"==da(a)}function ia(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b}function ja(a,b,c){return a.call.apply(a.bind,arguments)}\r\nfunction ka(a,b,c){if(!a)throw Error();if(2b?e+=\"000\":256>b?e+=\"00\":4096>b&&(e+=\"0\");return Ea[a]=e+b.toString(16)}),'\"')};function Ga(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^la()).toString(36)};var Ha;a:{var Ia=aa.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){Ha=Ja;break a}}Ha=\"\"};function Ka(){this.Wa=-1};function La(){this.Wa=-1;this.Wa=64;this.P=[];this.ne=[];this.Uf=[];this.Ld=[];this.Ld[0]=128;for(var a=1;ae;e++)d[e]=b.charCodeAt(c)<<24|b.charCodeAt(c+1)<<16|b.charCodeAt(c+2)<<8|b.charCodeAt(c+3),c+=4;else for(e=0;16>e;e++)d[e]=b[c]<<24|b[c+1]<<16|b[c+2]<<8|b[c+3],c+=4;for(e=16;80>e;e++){var f=d[e-3]^d[e-8]^d[e-14]^d[e-16];d[e]=(f<<1|f>>>31)&4294967295}b=a.P[0];c=a.P[1];for(var h=a.P[2],k=a.P[3],l=a.P[4],m,e=0;80>e;e++)40>e?20>e?(f=k^c&(h^k),m=1518500249):(f=c^h^k,m=1859775393):60>e?(f=c&h|k&(c|h),m=2400959708):(f=c^h^k,m=3395469782),f=(b<<\r\n5|b>>>27)+f+l+m+d[e]&4294967295,l=k,k=h,h=(c<<30|c>>>2)&4294967295,c=b,b=f;a.P[0]=a.P[0]+b&4294967295;a.P[1]=a.P[1]+c&4294967295;a.P[2]=a.P[2]+h&4294967295;a.P[3]=a.P[3]+k&4294967295;a.P[4]=a.P[4]+l&4294967295}\r\nLa.prototype.update=function(a,b){if(null!=a){n(b)||(b=a.length);for(var c=b-this.Wa,d=0,e=this.ne,f=this.ac;dc?Math.max(0,a.length+c):c;if(p(a))return p(b)&&1==b.length?a.indexOf(b,c):-1;for(;cc?null:p(a)?a.charAt(c):a[c]}function Ua(a,b,c){for(var d=a.length,e=p(a)?a.split(\"\"):a,f=0;f=arguments.length?u.slice.call(a,b):u.slice.call(a,b,c)}\r\nfunction Xa(a,b){a.sort(b||Ya)}function Ya(a,b){return a>b?1:aparseFloat(a))?String(b):a})();var cb=null,db=null,eb=null;function fb(a,b){if(!fa(a))throw Error(\"encodeByteArray takes an array as a parameter\");gb();for(var c=b?db:cb,d=[],e=0;e>2,f=(f&3)<<4|k>>4,k=(k&15)<<2|m>>6,m=m&63;l||(m=64,h||(k=64));d.push(c[t],c[f],c[k],c[m])}return d.join(\"\")}\r\nfunction gb(){if(!cb){cb={};db={};eb={};for(var a=0;65>a;a++)cb[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a),db[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.\".charAt(a),eb[db[a]]=a,62<=a&&(eb[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a)]=a)}};var hb=hb||\"2.2.9\";function v(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function w(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]}function ib(a,b){for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b(c,a[c])}function jb(a){var b={};ib(a,function(a,d){b[a]=d});return b};function kb(a){var b=[];ib(a,function(a,d){ea(d)?Oa(d,function(d){b.push(encodeURIComponent(a)+\"=\"+encodeURIComponent(d))}):b.push(encodeURIComponent(a)+\"=\"+encodeURIComponent(d))});return b.length?\"&\"+b.join(\"&\"):\"\"}function lb(a){var b={};a=a.replace(/^\\?/,\"\").split(\"&\");Oa(a,function(a){a&&(a=a.split(\"=\"),b[a[0]]=a[1])});return b};function x(a,b,c,d){var e;dc&&(e=0===c?\"none\":\"no more than \"+c);if(e)throw Error(a+\" failed: Was called with \"+d+(1===d?\" argument.\":\" arguments.\")+\" Expects \"+e+\".\");}function z(a,b,c){var d=\"\";switch(b){case 1:d=c?\"first\":\"First\";break;case 2:d=c?\"second\":\"Second\";break;case 3:d=c?\"third\":\"Third\";break;case 4:d=c?\"fourth\":\"Fourth\";break;default:throw Error(\"errorPrefix called with argumentNumber > 4. Need to update it?\");}return a=a+\" failed: \"+(d+\" argument \")}\r\nfunction A(a,b,c,d){if((!d||n(c))&&!ha(c))throw Error(z(a,b,d)+\"must be a valid function.\");}function mb(a,b,c){if(n(c)&&(!ia(c)||null===c))throw Error(z(a,b,!0)+\"must be a valid context object.\");};function nb(a){return\"undefined\"!==typeof JSON&&n(JSON.parse)?JSON.parse(a):Aa(a)}function B(a){if(\"undefined\"!==typeof JSON&&n(JSON.stringify))a=JSON.stringify(a);else{var b=[];Ca(new Ba,a,b);a=b.join(\"\")}return a};function ob(){this.Wd=C}ob.prototype.j=function(a){return this.Wd.Y(a)};ob.prototype.toString=function(){return this.Wd.toString()};function pb(){}pb.prototype.qf=function(){return null};pb.prototype.ze=function(){return null};var qb=new pb;function rb(a,b,c){this.Rf=a;this.Ka=b;this.Kd=c}rb.prototype.qf=function(a){var b=this.Ka.Q;if(sb(b,a))return b.j().J(a);b=null!=this.Kd?new tb(this.Kd,!0,!1):this.Ka.C();return this.Rf.xc(a,b)};rb.prototype.ze=function(a,b,c){var d=null!=this.Kd?this.Kd:ub(this.Ka);a=this.Rf.oe(d,b,1,c,a);return 0===a.length?null:a[0]};function vb(){this.ub=[]}function wb(a,b){for(var c=null,d=0;db?c=c.left:0c?d=d.left:0e)a=this.Ge?a.left:a.right;else if(0===e){this.Qa.push(a);break}else this.Qa.push(a),a=this.Ge?a.right:a.left}\r\nfunction J(a){if(0===a.Qa.length)return null;var b=a.Qa.pop(),c;c=a.Ud?a.Ud(b.key,b.value):{key:b.key,value:b.value};if(a.Ge)for(b=b.left;!b.e();)a.Qa.push(b),b=b.right;else for(b=b.right;!b.e();)a.Qa.push(b),b=b.left;return c}function dc(a){if(0===a.Qa.length)return null;var b;b=a.Qa;b=b[b.length-1];return a.Ud?a.Ud(b.key,b.value):{key:b.key,value:b.value}}function ec(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:ac;this.right=null!=e?e:ac}g=ec.prototype;\r\ng.X=function(a,b,c,d,e){return new ec(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};g.count=function(){return this.left.count()+1+this.right.count()};g.e=function(){return!1};g.ia=function(a){return this.left.ia(a)||a(this.key,this.value)||this.right.ia(a)};function fc(a){return a.left.e()?a:fc(a.left)}g.Sc=function(){return fc(this).key};g.fc=function(){return this.right.e()?this.key:this.right.fc()};\r\ng.Oa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.X(null,null,null,e.left.Oa(a,b,c),null):0===d?e.X(null,b,null,null,null):e.X(null,null,null,null,e.right.Oa(a,b,c));return gc(e)};function hc(a){if(a.left.e())return ac;a.left.fa()||a.left.left.fa()||(a=ic(a));a=a.X(null,null,null,hc(a.left),null);return gc(a)}\r\ng.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.e()||c.left.fa()||c.left.left.fa()||(c=ic(c)),c=c.X(null,null,null,c.left.remove(a,b),null);else{c.left.fa()&&(c=jc(c));c.right.e()||c.right.fa()||c.right.left.fa()||(c=kc(c),c.left.left.fa()&&(c=jc(c),c=kc(c)));if(0===b(a,c.key)){if(c.right.e())return ac;d=fc(c.right);c=c.X(d.key,d.value,null,null,hc(c.right))}c=c.X(null,null,null,null,c.right.remove(a,b))}return gc(c)};g.fa=function(){return this.color};\r\nfunction gc(a){a.right.fa()&&!a.left.fa()&&(a=lc(a));a.left.fa()&&a.left.left.fa()&&(a=jc(a));a.left.fa()&&a.right.fa()&&(a=kc(a));return a}function ic(a){a=kc(a);a.right.left.fa()&&(a=a.X(null,null,null,null,jc(a.right)),a=lc(a),a=kc(a));return a}function lc(a){return a.right.X(null,null,a.color,a.X(null,null,!0,null,a.right.left),null)}function jc(a){return a.left.X(null,null,a.color,null,a.X(null,null,!0,a.left.right,null))}\r\nfunction kc(a){return a.X(null,null,!a.color,a.left.X(null,null,!a.left.color,null,null),a.right.X(null,null,!a.right.color,null,null))}function mc(){}g=mc.prototype;g.X=function(){return this};g.Oa=function(a,b){return new ec(a,b,null)};g.remove=function(){return this};g.count=function(){return 0};g.e=function(){return!0};g.ia=function(){return!1};g.Sc=function(){return null};g.fc=function(){return null};g.fa=function(){return!1};var ac=new mc;function nc(a,b){return a&&\"object\"===typeof a?(K(\".sv\"in a,\"Unexpected leaf node or priority contents\"),b[a[\".sv\"]]):a}function oc(a,b){var c=new pc;qc(a,new L(\"\"),function(a,e){c.nc(a,rc(e,b))});return c}function rc(a,b){var c=a.B().H(),c=nc(c,b),d;if(a.L()){var e=nc(a.Ca(),b);return e!==a.Ca()||c!==a.B().H()?new sc(e,M(c)):a}d=a;c!==a.B().H()&&(d=d.ga(new sc(c)));a.R(N,function(a,c){var e=rc(c,b);e!==c&&(d=d.O(a,e))});return d};function L(a,b){if(1==arguments.length){this.n=a.split(\"/\");for(var c=0,d=0;d=a.n.length?null:a.n[a.Z]}function tc(a){return a.n.length-a.Z}\r\nfunction H(a){var b=a.Z;b=this.n.length)return null;for(var a=[],b=this.Z;b=this.n.length};g.ca=function(a){if(tc(this)!==tc(a))return!1;for(var b=this.Z,c=a.Z;b<=this.n.length;b++,c++)if(this.n[b]!==a.n[c])return!1;return!0};\r\ng.contains=function(a){var b=this.Z,c=a.Z;if(tc(this)>tc(a))return!1;for(;b\");return a};var Fc=function(){var a=1;return function(){return a++}}();function K(a,b){if(!a)throw Gc(b);}function Gc(a){return Error(\"Firebase (\"+hb+\") INTERNAL ASSERT FAILED: \"+a)}\r\nfunction Hc(a){try{var b;if(\"undefined\"!==typeof atob)b=atob(a);else{gb();for(var c=eb,d=[],e=0;e>4);64!=k&&(d.push(h<<4&240|k>>2),64!=l&&d.push(k<<6&192|l))}if(8192>d.length)b=String.fromCharCode.apply(null,d);else{a=\"\";for(c=0;ca.ac?a.update(a.Ld,56-a.ac):a.update(a.Ld,a.Wa-(a.ac-56));for(var d=a.Wa-1;56<=d;d--)a.ne[d]=c&255,c/=256;Ma(a,a.ne);for(d=c=0;5>d;d++)for(var e=24;0<=e;e-=8)b[c]=a.P[d]>>e&255,++c;return fb(b)}\r\nfunction Kc(a){for(var b=\"\",c=0;ca?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function Xc(a,b){if(ea(a))for(var c=0;ca,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;--a)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;--a)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join(\"\");c=\"\";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&&\r\n(d=\"0\"+d),c+=d;return c.toLowerCase()}var Zc=/^-?\\d{1,10}$/;function Tc(a){return Zc.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}function Db(a){try{a()}catch(b){setTimeout(function(){Q(\"Exception was thrown by user callback.\",b.stack||\"\");throw b;},Math.floor(0))}}function R(a,b){if(ha(a)){var c=Array.prototype.slice.call(arguments,1).slice();Db(function(){a.apply(null,c)})}};function Jc(a){for(var b=[],c=0,d=0;d=e&&(e-=55296,d++,K(de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b}function wc(a){for(var b=0,c=0;cd?b++:2048>d?b+=2:55296<=d&&56319>=d?(b+=4,c++):b+=3}return b};function $c(a){var b={},c={},d={},e=\"\";try{var f=a.split(\".\"),b=nb(Hc(f[0])||\"\"),c=nb(Hc(f[1])||\"\"),e=f[2],d=c.d||{};delete c.d}catch(h){}return{Xg:b,Bc:c,data:d,Og:e}}function ad(a){a=$c(a).Bc;return\"object\"===typeof a&&a.hasOwnProperty(\"iat\")?w(a,\"iat\"):null}function bd(a){a=$c(a);var b=a.Bc;return!!a.Og&&!!b&&\"object\"===typeof b&&b.hasOwnProperty(\"iat\")};function cd(a){this.V=a;this.g=a.o.g}function dd(a,b,c,d){var e=[],f=[];Oa(b,function(b){\"child_changed\"===b.type&&a.g.Ad(b.Le,b.Ja)&&f.push(new D(\"child_moved\",b.Ja,b.Xa))});ed(a,e,\"child_removed\",b,d,c);ed(a,e,\"child_added\",b,d,c);ed(a,e,\"child_moved\",f,d,c);ed(a,e,\"child_changed\",b,d,c);ed(a,e,Fb,b,d,c);return e}function ed(a,b,c,d,e,f){d=Pa(d,function(a){return a.type===c});Xa(d,q(a.fg,a));Oa(d,function(c){var d=fd(a,c,f);Oa(e,function(e){e.Kf(c.type)&&b.push(e.createEvent(d,a.V))})})}\r\nfunction fd(a,b,c){\"value\"!==b.type&&\"child_removed\"!==b.type&&(b.Qd=c.rf(b.Xa,b.Ja,a.g));return b}cd.prototype.fg=function(a,b){if(null==a.Xa||null==b.Xa)throw Gc(\"Should only compare child_ events.\");return this.g.compare(new F(a.Xa,a.Ja),new F(b.Xa,b.Ja))};function gd(){this.bb={}}\r\nfunction hd(a,b){var c=b.type,d=b.Xa;K(\"child_added\"==c||\"child_changed\"==c||\"child_removed\"==c,\"Only child changes supported for tracking\");K(\".priority\"!==d,\"Only non-priority child changes can be tracked.\");var e=w(a.bb,d);if(e){var f=e.type;if(\"child_added\"==c&&\"child_removed\"==f)a.bb[d]=new D(\"child_changed\",b.Ja,d,e.Ja);else if(\"child_removed\"==c&&\"child_added\"==f)delete a.bb[d];else if(\"child_removed\"==c&&\"child_changed\"==f)a.bb[d]=new D(\"child_removed\",e.Le,d);else if(\"child_changed\"==c&&\r\n\"child_added\"==f)a.bb[d]=new D(\"child_added\",b.Ja,d);else if(\"child_changed\"==c&&\"child_changed\"==f)a.bb[d]=new D(\"child_changed\",b.Ja,d,e.Le);else throw Gc(\"Illegal combination of changes: \"+b+\" occurred after \"+e);}else a.bb[d]=b};function id(a,b,c){this.Rb=a;this.qb=b;this.sb=c||null}g=id.prototype;g.Kf=function(a){return\"value\"===a};g.createEvent=function(a,b){var c=b.o.g;return new Gb(\"value\",this,new S(a.Ja,b.mc(),c))};g.Vb=function(a){var b=this.sb;if(\"cancel\"===a.Ae()){K(this.qb,\"Raising a cancel event on a listener with no cancel callback\");var c=this.qb;return function(){c.call(b,a.error)}}var d=this.Rb;return function(){d.call(b,a.$d)}};g.gf=function(a,b){return this.qb?new Hb(this,a,b):null};\r\ng.matches=function(a){return a instanceof id?a.Rb&&this.Rb?a.Rb===this.Rb&&a.sb===this.sb:!0:!1};g.tf=function(){return null!==this.Rb};function jd(a,b,c){this.ha=a;this.qb=b;this.sb=c}g=jd.prototype;g.Kf=function(a){a=\"children_added\"===a?\"child_added\":a;return(\"children_removed\"===a?\"child_removed\":a)in this.ha};g.gf=function(a,b){return this.qb?new Hb(this,a,b):null};\r\ng.createEvent=function(a,b){K(null!=a.Xa,\"Child events should have a childName.\");var c=b.mc().u(a.Xa);return new Gb(a.type,this,new S(a.Ja,c,b.o.g),a.Qd)};g.Vb=function(a){var b=this.sb;if(\"cancel\"===a.Ae()){K(this.qb,\"Raising a cancel event on a listener with no cancel callback\");var c=this.qb;return function(){c.call(b,a.error)}}var d=this.ha[a.ud];return function(){d.call(b,a.$d,a.Qd)}};\r\ng.matches=function(a){if(a instanceof jd){if(!this.ha||!a.ha)return!0;if(this.sb===a.sb){var b=pa(a.ha);if(b===pa(this.ha)){if(1===b){var b=qa(a.ha),c=qa(this.ha);return c===b&&(!a.ha[b]||!this.ha[c]||a.ha[b]===this.ha[c])}return oa(this.ha,function(b,c){return a.ha[c]===b})}}}return!1};g.tf=function(){return null!==this.ha};function kd(a){this.g=a}g=kd.prototype;g.K=function(a,b,c,d,e,f){K(a.Jc(this.g),\"A node must be indexed if only a child is updated\");e=a.J(b);if(e.Y(d).ca(c.Y(d))&&e.e()==c.e())return a;null!=f&&(c.e()?a.Da(b)?hd(f,new D(\"child_removed\",e,b)):K(a.L(),\"A child remove without an old child only makes sense on a leaf node\"):e.e()?hd(f,new D(\"child_added\",c,b)):hd(f,new D(\"child_changed\",c,b,e)));return a.L()&&c.e()?a:a.O(b,c).mb(this.g)};\r\ng.xa=function(a,b,c){null!=c&&(a.L()||a.R(N,function(a,e){b.Da(a)||hd(c,new D(\"child_removed\",e,a))}),b.L()||b.R(N,function(b,e){if(a.Da(b)){var f=a.J(b);f.ca(e)||hd(c,new D(\"child_changed\",e,b,f))}else hd(c,new D(\"child_added\",e,b))}));return b.mb(this.g)};g.ga=function(a,b){return a.e()?C:a.ga(b)};g.Na=function(){return!1};g.Wb=function(){return this};function ld(a){this.Ce=new kd(a.g);this.g=a.g;var b;a.ma?(b=md(a),b=a.g.Pc(nd(a),b)):b=a.g.Tc();this.ed=b;a.pa?(b=od(a),a=a.g.Pc(pd(a),b)):a=a.g.Qc();this.Gc=a}g=ld.prototype;g.matches=function(a){return 0>=this.g.compare(this.ed,a)&&0>=this.g.compare(a,this.Gc)};g.K=function(a,b,c,d,e,f){this.matches(new F(b,c))||(c=C);return this.Ce.K(a,b,c,d,e,f)};\r\ng.xa=function(a,b,c){b.L()&&(b=C);var d=b.mb(this.g),d=d.ga(C),e=this;b.R(N,function(a,b){e.matches(new F(a,b))||(d=d.O(a,C))});return this.Ce.xa(a,d,c)};g.ga=function(a){return a};g.Na=function(){return!0};g.Wb=function(){return this.Ce};function qd(a){this.sa=new ld(a);this.g=a.g;K(a.ja,\"Only valid if limit has been set\");this.ka=a.ka;this.Jb=!rd(a)}g=qd.prototype;g.K=function(a,b,c,d,e,f){this.sa.matches(new F(b,c))||(c=C);return a.J(b).ca(c)?a:a.Eb()=this.g.compare(this.sa.ed,f):0>=this.g.compare(f,this.sa.Gc))d=d.O(f.name,f.S),e++;else break}}else{d=b.mb(this.g);d=d.ga(C);var k,l,m;if(this.Jb){b=d.sf(this.g);k=this.sa.Gc;l=this.sa.ed;var t=td(this.g);m=function(a,b){return t(b,a)}}else b=d.Xb(this.g),k=this.sa.ed,\r\nl=this.sa.Gc,m=td(this.g);for(var e=0,y=!1;0=m(k,f)&&(y=!0),(h=y&&e=m(f,l))?e++:d=d.O(f.name,C)}return this.sa.Wb().xa(a,d,c)};g.ga=function(a){return a};g.Na=function(){return!0};g.Wb=function(){return this.sa.Wb()};\r\nfunction sd(a,b,c,d,e,f){var h;if(a.Jb){var k=td(a.g);h=function(a,b){return k(b,a)}}else h=td(a.g);K(b.Eb()==a.ka,\"\");var l=new F(c,d),m=a.Jb?ud(b,a.g):vd(b,a.g),t=a.sa.matches(l);if(b.Da(c)){for(var y=b.J(c),m=e.ze(a.g,m,a.Jb);null!=m&&(m.name==c||b.Da(m.name));)m=e.ze(a.g,m,a.Jb);e=null==m?1:h(m,l);if(t&&!d.e()&&0<=e)return null!=f&&hd(f,new D(\"child_changed\",d,c,y)),b.O(c,d);null!=f&&hd(f,new D(\"child_removed\",y,c));b=b.O(c,C);return null!=m&&a.sa.matches(m)?(null!=f&&hd(f,new D(\"child_added\",\r\nm.S,m.name)),b.O(m.name,m.S)):b}return d.e()?b:t&&0<=h(m,l)?(null!=f&&(hd(f,new D(\"child_removed\",m.S,m.name)),hd(f,new D(\"child_added\",d,c))),b.O(c,d).O(m.name,C)):b};function wd(a,b){this.ke=a;this.dg=b}function yd(a){this.U=a}\r\nyd.prototype.ab=function(a,b,c,d){var e=new gd,f;if(b.type===Xb)b.source.xe?c=zd(this,a,b.path,b.Ga,c,d,e):(K(b.source.pf,\"Unknown source.\"),f=b.source.bf,c=Ad(this,a,b.path,b.Ga,c,d,f,e));else if(b.type===Bd)b.source.xe?c=Cd(this,a,b.path,b.children,c,d,e):(K(b.source.pf,\"Unknown source.\"),f=b.source.bf,c=Dd(this,a,b.path,b.children,c,d,f,e));else if(b.type===Ed)if(b.Vd)if(b=b.path,null!=c.tc(b))c=a;else{f=new rb(c,a,d);d=a.Q.j();if(b.e()||\".priority\"===E(b))Ib(a.C())?b=c.za(ub(a)):(b=a.C().j(),\r\nK(b instanceof T,\"serverChildren would be complete if leaf node\"),b=c.yc(b)),b=this.U.xa(d,b,e);else{var h=E(b),k=c.xc(h,a.C());null==k&&sb(a.C(),h)&&(k=d.J(h));b=null!=k?this.U.K(d,h,k,H(b),f,e):a.Q.j().Da(h)?this.U.K(d,h,C,H(b),f,e):d;b.e()&&Ib(a.C())&&(d=c.za(ub(a)),d.L()&&(b=this.U.xa(b,d,e)))}d=Ib(a.C())||null!=c.tc(G);c=Fd(a,b,d,this.U.Na())}else c=Gd(this,a,b.path,b.Qb,c,d,e);else if(b.type===Zb)d=b.path,b=a.C(),f=b.j(),h=b.ea||d.e(),c=Hd(this,new Id(a.Q,new tb(f,h,b.Ub)),d,c,qb,e);else throw Gc(\"Unknown operation type: \"+\r\nb.type);e=ra(e.bb);d=c;b=d.Q;b.ea&&(f=b.j().L()||b.j().e(),h=Jd(a),(0b.compare(d,a);)J(c),d=dc(c);return c};g.sf=function(a){return this.$b(a.Qc(),a)};g.$b=function(a,b){var c=oe(this,b);if(c)return c.$b(a,function(a){return a});for(var c=this.m.$b(a.name,Sb),d=dc(c);null!=d&&0f.status){try{b=nb(f.responseText)}catch(c){Q(\"Failed to parse JSON response for \"+e+\": \"+f.responseText)}d(null,b)}else 401!==f.status&&404!==\r\nf.status&&Q(\"Got unsuccessful REST response for \"+e+\" Status: \"+f.status),d(f.status);d=null}};f.open(\"GET\",e,!0);f.send()};function Be(a,b){this.value=a;this.children=b||Ce}var Ce=new $b(function(a,b){return a===b?0:a=b&&bf(h,c.path)?d=!1:c.path.contains(h.path)&&(e=!0));f--}if(d){if(e)this.T=cf(this.na,df,G),this.Mc=0f.Mc,\"Stacking an older write on top of newer ones\");n(h)||(h=!0);f.na.push({path:b,Ga:c,kd:d,visible:h});h&&(f.T=Ue(f.T,b,c));f.Mc=d;return e?mf(a,new Wb(Pe,b,c)):[]}function nf(a,b,c,d){var e=a.jb;K(d>e.Mc,\"Stacking an older merge on top of newer ones\");e.na.push({path:b,children:c,kd:d,visible:!0});e.T=Ve(e.T,b,c);e.Mc=d;c=De(c);return mf(a,new xe(Pe,b,c))}\r\nfunction of(a,b,c){c=c||!1;var d=af(a.jb,b);if(a.jb.Rd(b)){var e=Nd;null!=d.Ga?e=e.set(G,!0):ib(d.children,function(a,b){e=e.set(new L(a),b)});return mf(a,new Oe(d.path,e,c))}return[]}function pf(a,b,c){c=De(c);return mf(a,new xe(Re,b,c))}function qf(a,b,c,d){d=rf(a,d);if(null!=d){var e=sf(d);d=e.path;e=e.Ib;b=O(d,b);c=new Wb(new Qe(!1,!0,e,!0),b,c);return tf(a,d,c)}return[]}\r\nfunction uf(a,b,c,d){if(d=rf(a,d)){var e=sf(d);d=e.path;e=e.Ib;b=O(d,b);c=De(c);c=new xe(new Qe(!1,!0,e,!0),b,c);return tf(a,d,c)}return[]}\r\nkf.prototype.Pb=function(a,b){var c=a.path,d=null,e=!1;Ke(this.ta,c,function(a,b){var f=O(a,c);d=b.gb(f);e=e||null!=gf(b);return!d});var f=this.ta.get(c);f?(e=e||null!=gf(f),d=d||f.gb(G)):(f=new ff,this.ta=this.ta.set(c,f));var h;null!=d?h=!0:(h=!1,d=C,Ne(this.ta.subtree(c),function(a,b){var c=b.gb(G);c&&(d=d.O(a,c))}));var k=null!=jf(f,a);if(!k&&!de(a.o)){var l=vf(a);K(!(l in this.lc),\"View does not exist, but we have a tag\");var m=wf++;this.lc[l]=m;this.af[\"_\"+m]=l}h=f.Pb(a,b,new ef(c,this.jb),\r\nd,h);k||e||(f=jf(f,a),h=h.concat(xf(this,a,f)));return h};\r\nkf.prototype.kb=function(a,b,c){var d=a.path,e=this.ta.get(d),f=[];if(e&&(\"default\"===a.va()||null!=jf(e,a))){f=e.kb(a,b,c);e.e()&&(this.ta=this.ta.remove(d));e=f.Ig;f=f.kg;b=-1!==Ua(e,function(a){return de(a.o)});var h=Ie(this.ta,d,function(a,b){return null!=gf(b)});if(b&&!h&&(d=this.ta.subtree(d),!d.e()))for(var d=yf(d),k=0;kf;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+=\"-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\".charAt(b[f]);K(20===c.length,\"nextPushId: Length should be 20.\");\r\nreturn c}}();function Of(){Lf.call(this,[\"online\"]);this.jc=!0;if(\"undefined\"!==typeof window&&\"undefined\"!==typeof window.addEventListener){var a=this;window.addEventListener(\"online\",function(){a.jc||(a.jc=!0,a.ge(\"online\",!0))},!1);window.addEventListener(\"offline\",function(){a.jc&&(a.jc=!1,a.ge(\"online\",!1))},!1)}}ma(Of,Lf);Of.prototype.Be=function(a){K(\"online\"===a,\"Unknown event type: \"+a);return[this.jc]};ca(Of);function Pf(){Lf.call(this,[\"visible\"]);var a,b;\"undefined\"!==typeof document&&\"undefined\"!==typeof document.addEventListener&&(\"undefined\"!==typeof document.hidden?(b=\"visibilitychange\",a=\"hidden\"):\"undefined\"!==typeof document.mozHidden?(b=\"mozvisibilitychange\",a=\"mozHidden\"):\"undefined\"!==typeof document.msHidden?(b=\"msvisibilitychange\",a=\"msHidden\"):\"undefined\"!==typeof document.webkitHidden&&(b=\"webkitvisibilitychange\",a=\"webkitHidden\"));this.Ob=!0;if(b){var c=this;document.addEventListener(b,\r\nfunction(){var b=!document[a];b!==c.Ob&&(c.Ob=b,c.ge(\"visible\",b))},!1)}}ma(Pf,Lf);Pf.prototype.Be=function(a){K(\"visible\"===a,\"Unknown event type: \"+a);return[this.Ob]};ca(Pf);var Qf=/[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/,Rf=/[\\[\\].#$\\u0000-\\u001F\\u007F]/,Sf=/^[a-zA-Z][a-zA-Z._\\-+]+$/;function Tf(a){return p(a)&&0!==a.length&&!Qf.test(a)}function Uf(a){return null===a||p(a)||ga(a)&&!Rc(a)||ia(a)&&v(a,\".sv\")}function Vf(a,b,c,d){d&&!n(b)||Wf(z(a,1,d),b,c)}\r\nfunction Wf(a,b,c){c instanceof L&&(c=new vc(c,a));if(!n(b))throw Error(a+\"contains undefined \"+yc(c));if(ha(b))throw Error(a+\"contains a function \"+yc(c)+\" with contents: \"+b.toString());if(Rc(b))throw Error(a+\"contains \"+b.toString()+\" \"+yc(c));if(p(b)&&b.length>10485760/3&&10485760=a}else if(-1=a;return!1};function tg(){var a=window.opener.frames,b;for(b=a.length-1;0<=b;b--)try{if(a[b].location.protocol===window.location.protocol&&a[b].location.host===window.location.host&&\"__winchan_relay_frame\"===a[b].name)return a[b]}catch(c){}return null}function ug(a,b,c){a.attachEvent?a.attachEvent(\"on\"+b,c):a.addEventListener&&a.addEventListener(b,c,!1)}function vg(a,b,c){a.detachEvent?a.detachEvent(\"on\"+b,c):a.removeEventListener&&a.removeEventListener(b,c,!1)}\r\nfunction wg(a){/^https?:\\/\\//.test(a)||(a=window.location.href);var b=/^(https?:\\/\\/[\\-_a-zA-Z\\.0-9:]+)/.exec(a);return b?b[1]:a}function xg(a){var b=\"\";try{a=a.replace(\"#\",\"\");var c=lb(a);c&&v(c,\"__firebase_request_key\")&&(b=w(c,\"__firebase_request_key\"))}catch(d){}return b}function yg(){var a=Qc(kg);return a.scheme+\"://\"+a.host+\"/v2\"}function zg(a){return yg()+\"/\"+a+\"/auth/channel\"};function Ag(a){var b=this;this.Ac=a;this.de=\"*\";sg(8)?this.Rc=this.zd=tg():(this.Rc=window.opener,this.zd=window);if(!b.Rc)throw\"Unable to find relay frame\";ug(this.zd,\"message\",q(this.ic,this));ug(this.zd,\"message\",q(this.Bf,this));try{Bg(this,{a:\"ready\"})}catch(c){ug(this.Rc,\"load\",function(){Bg(b,{a:\"ready\"})})}ug(window,\"unload\",q(this.zg,this))}function Bg(a,b){b=B(b);sg(8)?a.Rc.doPost(b,a.de):a.Rc.postMessage(b,a.de)}\r\nAg.prototype.ic=function(a){var b=this,c;try{c=nb(a.data)}catch(d){}c&&\"request\"===c.a&&(vg(window,\"message\",this.ic),this.de=a.origin,this.Ac&&setTimeout(function(){b.Ac(b.de,c.d,function(a,c){b.bg=!c;b.Ac=void 0;Bg(b,{a:\"response\",d:a,forceKeepWindowOpen:c})})},0))};Ag.prototype.zg=function(){try{vg(this.zd,\"message\",this.Bf)}catch(a){}this.Ac&&(Bg(this,{a:\"error\",d:\"unknown closed window\"}),this.Ac=void 0);try{window.close()}catch(b){}};Ag.prototype.Bf=function(a){if(this.bg&&\"die\"===a.data)try{window.close()}catch(b){}};function Cg(a){this.pc=Ga()+Ga()+Ga();this.Ef=a}Cg.prototype.open=function(a,b){P.set(\"redirect_request_id\",this.pc);P.set(\"redirect_request_id\",this.pc);b.requestId=this.pc;b.redirectTo=b.redirectTo||window.location.href;a+=(/\\?/.test(a)?\"\":\"?\")+kb(b);window.location=a};Cg.isAvailable=function(){return!rg()&&!qg()};Cg.prototype.Cc=function(){return\"redirect\"};var Dg={NETWORK_ERROR:\"Unable to contact the Firebase server.\",SERVER_ERROR:\"An unknown server error occurred.\",TRANSPORT_UNAVAILABLE:\"There are no login transports available for the requested method.\",REQUEST_INTERRUPTED:\"The browser redirected the page before the login request could complete.\",USER_CANCELLED:\"The user cancelled authentication.\"};function Eg(a){var b=Error(w(Dg,a),a);b.code=a;return b};function Fg(a){var b;(b=!a.window_features)||(b=pg(),b=-1!==b.indexOf(\"Fennec/\")||-1!==b.indexOf(\"Firefox/\")&&-1!==b.indexOf(\"Android\"));b&&(a.window_features=void 0);a.window_name||(a.window_name=\"_blank\");this.options=a}\r\nFg.prototype.open=function(a,b,c){function d(a){h&&(document.body.removeChild(h),h=void 0);t&&(t=clearInterval(t));vg(window,\"message\",e);vg(window,\"unload\",d);if(m&&!a)try{m.close()}catch(b){k.postMessage(\"die\",l)}m=k=void 0}function e(a){if(a.origin===l)try{var b=nb(a.data);\"ready\"===b.a?k.postMessage(y,l):\"error\"===b.a?(d(!1),c&&(c(b.d),c=null)):\"response\"===b.a&&(d(b.forceKeepWindowOpen),c&&(c(null,b.d),c=null))}catch(e){}}var f=sg(8),h,k;if(!this.options.relay_url)return c(Error(\"invalid arguments: origin of url and relay_url must match\"));\r\nvar l=wg(a);if(l!==wg(this.options.relay_url))c&&setTimeout(function(){c(Error(\"invalid arguments: origin of url and relay_url must match\"))},0);else{f&&(h=document.createElement(\"iframe\"),h.setAttribute(\"src\",this.options.relay_url),h.style.display=\"none\",h.setAttribute(\"name\",\"__winchan_relay_frame\"),document.body.appendChild(h),k=h.contentWindow);a+=(/\\?/.test(a)?\"\":\"?\")+kb(b);var m=window.open(a,this.options.window_name,this.options.window_features);k||(k=m);var t=setInterval(function(){m&&m.closed&&\r\n(d(!1),c&&(c(Eg(\"USER_CANCELLED\")),c=null))},500),y=B({a:\"request\",d:b});ug(window,\"unload\",d);ug(window,\"message\",e)}};\r\nFg.isAvailable=function(){var a;if(a=\"postMessage\"in window&&!rg())(a=qg()||\"undefined\"!==typeof navigator&&(!!pg().match(/Windows Phone/)||!!window.Windows&&/^ms-appx:/.test(location.href)))||(a=pg(),a=\"undefined\"!==typeof navigator&&\"undefined\"!==typeof window&&!!(a.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i)||a.match(/CriOS/)||a.match(/Twitter for iPhone/)||a.match(/FBAN\\/FBIOS/)||window.navigator.standalone)),a=!a;return a&&!pg().match(/PhantomJS/)};Fg.prototype.Cc=function(){return\"popup\"};function Gg(a){a.method||(a.method=\"GET\");a.headers||(a.headers={});a.headers.content_type||(a.headers.content_type=\"application/json\");a.headers.content_type=a.headers.content_type.toLowerCase();this.options=a}\r\nGg.prototype.open=function(a,b,c){function d(){c&&(c(Eg(\"REQUEST_INTERRUPTED\")),c=null)}var e=new XMLHttpRequest,f=this.options.method.toUpperCase(),h;ug(window,\"beforeunload\",d);e.onreadystatechange=function(){if(c&&4===e.readyState){var a;if(200<=e.status&&300>e.status){try{a=nb(e.responseText)}catch(b){}c(null,a)}else 500<=e.status&&600>e.status?c(Eg(\"SERVER_ERROR\")):c(Eg(\"NETWORK_ERROR\"));c=null;vg(window,\"beforeunload\",d)}};if(\"GET\"===f)a+=(/\\?/.test(a)?\"\":\"?\")+kb(b),h=null;else{var k=this.options.headers.content_type;\r\n\"application/json\"===k&&(h=B(b));\"application/x-www-form-urlencoded\"===k&&(h=kb(b))}e.open(f,a,!0);a={\"X-Requested-With\":\"XMLHttpRequest\",Accept:\"application/json;text/plain\"};za(a,this.options.headers);for(var l in a)e.setRequestHeader(l,a[l]);e.send(h)};Gg.isAvailable=function(){var a;if(a=!!window.XMLHttpRequest)a=pg(),a=!(a.match(/MSIE/)||a.match(/Trident/))||sg(10);return a};Gg.prototype.Cc=function(){return\"json\"};function Hg(a){this.pc=Ga()+Ga()+Ga();this.Ef=a}\r\nHg.prototype.open=function(a,b,c){function d(){c&&(c(Eg(\"USER_CANCELLED\")),c=null)}var e=this,f=Qc(kg),h;b.requestId=this.pc;b.redirectTo=f.scheme+\"://\"+f.host+\"/blank/page.html\";a+=/\\?/.test(a)?\"\":\"?\";a+=kb(b);(h=window.open(a,\"_blank\",\"location=no\"))&&ha(h.addEventListener)?(h.addEventListener(\"loadstart\",function(a){var b;if(b=a&&a.url)a:{try{var m=document.createElement(\"a\");m.href=a.url;b=m.host===f.host&&\"/blank/page.html\"===m.pathname;break a}catch(t){}b=!1}b&&(a=xg(a.url),h.removeEventListener(\"exit\",\r\nd),h.close(),a=new lg(null,null,{requestId:e.pc,requestKey:a}),e.Ef.requestWithCredential(\"/auth/session\",a,c),c=null)}),h.addEventListener(\"exit\",d)):c(Eg(\"TRANSPORT_UNAVAILABLE\"))};Hg.isAvailable=function(){return qg()};Hg.prototype.Cc=function(){return\"redirect\"};function Ig(a){a.callback_parameter||(a.callback_parameter=\"callback\");this.options=a;window.__firebase_auth_jsonp=window.__firebase_auth_jsonp||{}}\r\nIg.prototype.open=function(a,b,c){function d(){c&&(c(Eg(\"REQUEST_INTERRUPTED\")),c=null)}function e(){setTimeout(function(){window.__firebase_auth_jsonp[f]=void 0;wa(window.__firebase_auth_jsonp)&&(window.__firebase_auth_jsonp=void 0);try{var a=document.getElementById(f);a&&a.parentNode.removeChild(a)}catch(b){}},1);vg(window,\"beforeunload\",d)}var f=\"fn\"+(new Date).getTime()+Math.floor(99999*Math.random());b[this.options.callback_parameter]=\"__firebase_auth_jsonp.\"+f;a+=(/\\?/.test(a)?\"\":\"?\")+kb(b);\r\nug(window,\"beforeunload\",d);window.__firebase_auth_jsonp[f]=function(a){c&&(c(null,a),c=null);e()};Jg(f,a,c)};\r\nfunction Jg(a,b,c){setTimeout(function(){try{var d=document.createElement(\"script\");d.type=\"text/javascript\";d.id=a;d.async=!0;d.src=b;d.onerror=function(){var b=document.getElementById(a);null!==b&&b.parentNode.removeChild(b);c&&c(Eg(\"NETWORK_ERROR\"))};var e=document.getElementsByTagName(\"head\");(e&&0!=e.length?e[0]:document.documentElement).appendChild(d)}catch(f){c&&c(Eg(\"NETWORK_ERROR\"))}},0)}Ig.isAvailable=function(){return\"undefined\"!==typeof document&&null!=document.createElement};\r\nIg.prototype.Cc=function(){return\"json\"};function Kg(a,b,c,d){Lf.call(this,[\"auth_status\"]);this.F=a;this.ef=b;this.Tg=c;this.Me=d;this.sc=new og(a,[Cc,P]);this.nb=null;this.Te=!1;Lg(this)}ma(Kg,Lf);g=Kg.prototype;g.ye=function(){return this.nb||null};function Lg(a){P.get(\"redirect_request_id\")&&Mg(a);var b=a.sc.get();b&&b.token?(Ng(a,b),a.ef(b.token,function(c,d){Og(a,c,d,!1,b.token,b)},function(b,d){Pg(a,\"resumeSession()\",b,d)})):Ng(a,null)}\r\nfunction Qg(a,b,c,d,e,f){\"firebaseio-demo.com\"===a.F.domain&&Q(\"Firebase authentication is not supported on demo Firebases (*.firebaseio-demo.com). To secure your Firebase, create a production Firebase at https://www.firebase.com.\");a.ef(b,function(f,k){Og(a,f,k,!0,b,c,d||{},e)},function(b,c){Pg(a,\"auth()\",b,c,f)})}function Rg(a,b){a.sc.clear();Ng(a,null);a.Tg(function(a,d){if(\"ok\"===a)R(b,null);else{var e=(a||\"error\").toUpperCase(),f=e;d&&(f+=\": \"+d);f=Error(f);f.code=e;R(b,f)}})}\r\nfunction Og(a,b,c,d,e,f,h,k){\"ok\"===b?(d&&(b=c.auth,f.auth=b,f.expires=c.expires,f.token=bd(e)?e:\"\",c=null,b&&v(b,\"uid\")?c=w(b,\"uid\"):v(f,\"uid\")&&(c=w(f,\"uid\")),f.uid=c,c=\"custom\",b&&v(b,\"provider\")?c=w(b,\"provider\"):v(f,\"provider\")&&(c=w(f,\"provider\")),f.provider=c,a.sc.clear(),bd(e)&&(h=h||{},c=Cc,\"sessionOnly\"===h.remember&&(c=P),\"none\"!==h.remember&&a.sc.set(f,c)),Ng(a,f)),R(k,null,f)):(a.sc.clear(),Ng(a,null),f=a=(b||\"error\").toUpperCase(),c&&(f+=\": \"+c),f=Error(f),f.code=a,R(k,f))}\r\nfunction Pg(a,b,c,d,e){Q(b+\" was canceled: \"+d);a.sc.clear();Ng(a,null);a=Error(d);a.code=c.toUpperCase();R(e,a)}function Sg(a,b,c,d,e){Tg(a);c=new lg(d||{},{},c||{});Ug(a,[Gg,Ig],\"/auth/\"+b,c,e)}\r\nfunction Vg(a,b,c,d){Tg(a);var e=[Fg,Hg];c=ng(c);\"anonymous\"===b||\"password\"===b?setTimeout(function(){R(d,Eg(\"TRANSPORT_UNAVAILABLE\"))},0):(c.fe.window_features=\"menubar=yes,modal=yes,alwaysRaised=yeslocation=yes,resizable=yes,scrollbars=yes,status=yes,height=625,width=625,top=\"+(\"object\"===typeof screen?.5*(screen.height-625):0)+\",left=\"+(\"object\"===typeof screen?.5*(screen.width-625):0),c.fe.relay_url=zg(a.F.Db),c.fe.requestWithCredential=q(a.qc,a),Ug(a,e,\"/auth/\"+b,c,d))}\r\nfunction Mg(a){var b=P.get(\"redirect_request_id\");if(b){var c=P.get(\"redirect_client_options\");P.remove(\"redirect_request_id\");P.remove(\"redirect_client_options\");var d=[Gg,Ig],b={requestId:b,requestKey:xg(document.location.hash)},c=new lg(c,{},b);a.Te=!0;try{document.location.hash=document.location.hash.replace(/&__firebase_request_key=([a-zA-z0-9]*)/,\"\")}catch(e){}Ug(a,d,\"/auth/session\",c,function(){this.Te=!1}.bind(a))}}\r\ng.te=function(a,b){Tg(this);var c=ng(a);c.$a._method=\"POST\";this.qc(\"/users\",c,function(a,c){a?R(b,a):R(b,a,c)})};g.Ue=function(a,b){var c=this;Tg(this);var d=\"/users/\"+encodeURIComponent(a.email),e=ng(a);e.$a._method=\"DELETE\";this.qc(d,e,function(a,d){!a&&d&&d.uid&&c.nb&&c.nb.uid&&c.nb.uid===d.uid&&Rg(c);R(b,a)})};g.qe=function(a,b){Tg(this);var c=\"/users/\"+encodeURIComponent(a.email)+\"/password\",d=ng(a);d.$a._method=\"PUT\";d.$a.password=a.newPassword;this.qc(c,d,function(a){R(b,a)})};\r\ng.pe=function(a,b){Tg(this);var c=\"/users/\"+encodeURIComponent(a.oldEmail)+\"/email\",d=ng(a);d.$a._method=\"PUT\";d.$a.email=a.newEmail;d.$a.password=a.password;this.qc(c,d,function(a){R(b,a)})};g.We=function(a,b){Tg(this);var c=\"/users/\"+encodeURIComponent(a.email)+\"/password\",d=ng(a);d.$a._method=\"POST\";this.qc(c,d,function(a){R(b,a)})};g.qc=function(a,b,c){Wg(this,[Gg,Ig],a,b,c)};\r\nfunction Ug(a,b,c,d,e){Wg(a,b,c,d,function(b,c){!b&&c&&c.token&&c.uid?Qg(a,c.token,c,d.od,function(a,b){a?R(e,a):R(e,null,b)}):R(e,b||Eg(\"UNKNOWN_ERROR\"))})}\r\nfunction Wg(a,b,c,d,e){b=Pa(b,function(a){return\"function\"===typeof a.isAvailable&&a.isAvailable()});0===b.length?setTimeout(function(){R(e,Eg(\"TRANSPORT_UNAVAILABLE\"))},0):(b=new (b.shift())(d.fe),d=jb(d.$a),d.v=\"js-\"+hb,d.transport=b.Cc(),d.suppress_status_codes=!0,a=yg()+\"/\"+a.F.Db+c,b.open(a,d,function(a,b){if(a)R(e,a);else if(b&&b.error){var c=Error(b.error.message);c.code=b.error.code;c.details=b.error.details;R(e,c)}else R(e,null,b)}))}\r\nfunction Ng(a,b){var c=null!==a.nb||null!==b;a.nb=b;c&&a.ge(\"auth_status\",b);a.Me(null!==b)}g.Be=function(a){K(\"auth_status\"===a,'initial event must be of type \"auth_status\"');return this.Te?null:[this.nb]};function Tg(a){var b=a.F;if(\"firebaseio.com\"!==b.domain&&\"firebaseio-demo.com\"!==b.domain&&\"auth.firebase.com\"===kg)throw Error(\"This custom Firebase server ('\"+a.F.domain+\"') does not support delegated login.\");};function Xg(a){this.ic=a;this.Nd=[];this.Sb=0;this.re=-1;this.Gb=null}function Yg(a,b,c){a.re=b;a.Gb=c;a.redocument.domain=\"'+document.domain+'\";\\x3c/script>');a=\"\"+a+\"\";try{this.Ea.fb.open(),this.Ea.fb.write(a),this.Ea.fb.close()}catch(f){Cb(\"frame writing exception\"),f.stack&&Cb(f.stack),Cb(f)}}\r\nch.prototype.close=function(){this.me=!1;if(this.Ea){this.Ea.fb.body.innerHTML=\"\";var a=this;setTimeout(function(){null!==a.Ea&&(document.body.removeChild(a.Ea),a.Ea=null)},Math.floor(0))}var b=this.ib;b&&(this.ib=null,b())};\r\nfunction fh(a){if(a.me&&a.Xd&&a.Qe.count()<(0=a.ad[0].kf.length+30+c.length){var e=a.ad.shift(),c=c+\"&seg\"+d+\"=\"+e.Kg+\"&ts\"+d+\"=\"+e.Sg+\"&d\"+d+\"=\"+e.kf;d++}else break;gh(a,b+c,a.ue);return!0}return!1}function gh(a,b,c){function d(){a.Qe.remove(c);fh(a)}a.Qe.add(c,1);var e=setTimeout(d,Math.floor(25E3));eh(a,b,function(){clearTimeout(e);d()})}\r\nfunction eh(a,b,c){setTimeout(function(){try{if(a.Xd){var d=a.Ea.fb.createElement(\"script\");d.type=\"text/javascript\";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&\"loaded\"!==a&&\"complete\"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){Cb(\"Long-poll script failed to load: \"+b);a.Xd=!1;a.close()};a.Ea.fb.body.appendChild(d)}}catch(e){}},Math.floor(1))};var hh=null;\"undefined\"!==typeof MozWebSocket?hh=MozWebSocket:\"undefined\"!==typeof WebSocket&&(hh=WebSocket);function ih(a,b,c){this.se=a;this.f=Nc(this.se);this.frames=this.Kc=null;this.ob=this.pb=this.cf=0;this.Va=Qb(b);this.eb=(b.lb?\"wss://\":\"ws://\")+b.Pa+\"/.ws?v=5\";\"undefined\"!==typeof location&&location.href&&-1!==location.href.indexOf(\"firebaseio.com\")&&(this.eb+=\"&r=f\");b.host!==b.Pa&&(this.eb=this.eb+\"&ns=\"+b.Db);c&&(this.eb=this.eb+\"&s=\"+c)}var jh;\r\nih.prototype.open=function(a,b){this.ib=b;this.xg=a;this.f(\"Websocket connecting to \"+this.eb);this.Hc=!1;Cc.set(\"previous_websocket_failure\",!0);try{this.ua=new hh(this.eb)}catch(c){this.f(\"Error instantiating WebSocket.\");var d=c.message||c.data;d&&this.f(d);this.hb();return}var e=this;this.ua.onopen=function(){e.f(\"Websocket connected.\");e.Hc=!0};this.ua.onclose=function(){e.f(\"Websocket connection was disconnected.\");e.ua=null;e.hb()};this.ua.onmessage=function(a){if(null!==e.ua)if(a=a.data,e.ob+=\r\na.length,Nb(e.Va,\"bytes_received\",a.length),kh(e),null!==e.frames)lh(e,a);else{a:{K(null===e.frames,\"We already have a frame buffer\");if(6>=a.length){var b=Number(a);if(!isNaN(b)){e.cf=b;e.frames=[];a=null;break a}}e.cf=1;e.frames=[]}null!==a&&lh(e,a)}};this.ua.onerror=function(a){e.f(\"WebSocket error. Closing connection.\");(a=a.message||a.data)&&e.f(a);e.hb()}};ih.prototype.start=function(){};\r\nih.isAvailable=function(){var a=!1;if(\"undefined\"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\\.[0-9]{0,})/);b&&1parseFloat(b[1])&&(a=!0)}return!a&&null!==hh&&!jh};ih.responsesRequiredToBeHealthy=2;ih.healthyTimeout=3E4;g=ih.prototype;g.Ed=function(){Cc.remove(\"previous_websocket_failure\")};function lh(a,b){a.frames.push(b);if(a.frames.length==a.cf){var c=a.frames.join(\"\");a.frames=null;c=nb(c);a.xg(c)}}\r\ng.send=function(a){kh(this);a=B(a);this.pb+=a.length;Nb(this.Va,\"bytes_sent\",a.length);a=Wc(a,16384);1=a.Mf?(a.f(\"Secondary connection is healthy.\"),a.Bb=!0,a.D.Ed(),a.D.start(),a.f(\"sending client ack on secondary\"),a.D.send({t:\"c\",d:{t:\"a\",d:{}}}),a.f(\"Ending transmission on primary\"),a.I.send({t:\"c\",d:{t:\"n\",d:{}}}),a.hd=a.D,wh(a)):(a.f(\"sending ping on secondary.\"),a.D.send({t:\"c\",d:{t:\"p\",d:{}}}))}qh.prototype.Id=function(a){yh(this);this.ic(a)};function yh(a){a.Bb||(a.Se--,0>=a.Se&&(a.f(\"Primary connection is healthy.\"),a.Bb=!0,a.I.Ed()))}\r\nfunction vh(a,b){a.D=new b(\"c:\"+a.id+\":\"+a.ff++,a.F,a.Zd);a.Mf=b.responsesRequiredToBeHealthy||0;a.D.open(sh(a,a.D),th(a,a.D));setTimeout(function(){a.D&&(a.f(\"Timed out trying to upgrade.\"),a.D.close())},Math.floor(6E4))}function uh(a,b,c){a.f(\"Realtime connection established.\");a.I=b;a.Ua=1;a.Wc&&(a.Wc(c),a.Wc=null);0===a.Se?(a.f(\"Primary connection is healthy.\"),a.Bb=!0):setTimeout(function(){zh(a)},Math.floor(5E3))}\r\nfunction zh(a){a.Bb||1!==a.Ua||(a.f(\"sending ping on primary.\"),Bh(a,{t:\"c\",d:{t:\"p\",d:{}}}))}function Bh(a,b){if(1!==a.Ua)throw\"Connection is not connected\";a.hd.send(b)}qh.prototype.close=function(){2!==this.Ua&&(this.f(\"Closing realtime connection.\"),this.Ua=2,xh(this),this.la&&(this.la(),this.la=null))};function xh(a){a.f(\"Shutting down all connections\");a.I&&(a.I.close(),a.I=null);a.D&&(a.D.close(),a.D=null);a.yd&&(clearTimeout(a.yd),a.yd=null)};function Ch(a,b,c,d){this.id=Dh++;this.f=Nc(\"p:\"+this.id+\":\");this.xf=this.Fe=!1;this.$={};this.qa=[];this.Yc=0;this.Vc=[];this.oa=!1;this.Za=1E3;this.Fd=3E5;this.Hb=b;this.Uc=c;this.Pe=d;this.F=a;this.tb=this.Aa=this.Ia=this.Xe=null;this.Ob=!1;this.Td={};this.Jg=0;this.nf=!0;this.Lc=this.He=null;Eh(this,0);Pf.vb().Fb(\"visible\",this.Ag,this);-1===a.host.indexOf(\"fblocal\")&&Of.vb().Fb(\"online\",this.yg,this)}var Dh=0,Fh=0;g=Ch.prototype;\r\ng.Fa=function(a,b,c){var d=++this.Jg;a={r:d,a:a,b:b};this.f(B(a));K(this.oa,\"sendRequest call when we're not connected not allowed.\");this.Ia.Fa(a);c&&(this.Td[d]=c)};g.yf=function(a,b,c,d){var e=a.va(),f=a.path.toString();this.f(\"Listen called for \"+f+\" \"+e);this.$[f]=this.$[f]||{};K(!this.$[f][e],\"listen() called twice for same path/queryId.\");a={G:d,xd:b,Gg:a,tag:c};this.$[f][e]=a;this.oa&&Gh(this,a)};\r\nfunction Gh(a,b){var c=b.Gg,d=c.path.toString(),e=c.va();a.f(\"Listen on \"+d+\" for \"+e);var f={p:d};b.tag&&(f.q=ce(c.o),f.t=b.tag);f.h=b.xd();a.Fa(\"q\",f,function(f){var k=f.d,l=f.s;if(k&&\"object\"===typeof k&&v(k,\"w\")){var m=w(k,\"w\");ea(m)&&0<=Na(m,\"no_index\")&&Q(\"Using an unspecified index. Consider adding \"+('\".indexOn\": \"'+c.o.g.toString()+'\"')+\" at \"+c.path.toString()+\" to your security rules for better performance\")}(a.$[d]&&a.$[d][e])===b&&(a.f(\"listen response\",f),\"ok\"!==l&&Hh(a,d,e),b.G&&b.G(l,\r\nk))})}g.N=function(a,b,c){this.Aa={gg:a,of:!1,zc:b,md:c};this.f(\"Authenticating using credential: \"+a);Ih(this);(b=40==a.length)||(a=$c(a).Bc,b=\"object\"===typeof a&&!0===w(a,\"admin\"));b&&(this.f(\"Admin auth credential detected. Reducing max reconnect time.\"),this.Fd=3E4)};g.he=function(a){delete this.Aa;this.oa&&this.Fa(\"unauth\",{},function(b){a(b.s,b.d)})};\r\nfunction Ih(a){var b=a.Aa;a.oa&&b&&a.Fa(\"auth\",{cred:b.gg},function(c){var d=c.s;c=c.d||\"error\";\"ok\"!==d&&a.Aa===b&&delete a.Aa;b.of?\"ok\"!==d&&b.md&&b.md(d,c):(b.of=!0,b.zc&&b.zc(d,c))})}g.Pf=function(a,b){var c=a.path.toString(),d=a.va();this.f(\"Unlisten called for \"+c+\" \"+d);if(Hh(this,c,d)&&this.oa){var e=ce(a.o);this.f(\"Unlisten on \"+c+\" for \"+d);c={p:c};b&&(c.q=e,c.t=b);this.Fa(\"n\",c)}};g.Ne=function(a,b,c){this.oa?Jh(this,\"o\",a,b,c):this.Vc.push({$c:a,action:\"o\",data:b,G:c})};\r\ng.Cf=function(a,b,c){this.oa?Jh(this,\"om\",a,b,c):this.Vc.push({$c:a,action:\"om\",data:b,G:c})};g.Jd=function(a,b){this.oa?Jh(this,\"oc\",a,null,b):this.Vc.push({$c:a,action:\"oc\",data:null,G:b})};function Jh(a,b,c,d,e){c={p:c,d:d};a.f(\"onDisconnect \"+b,c);a.Fa(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}g.put=function(a,b,c,d){Kh(this,\"p\",a,b,c,d)};g.zf=function(a,b,c,d){Kh(this,\"m\",a,b,c,d)};\r\nfunction Kh(a,b,c,d,e,f){d={p:c,d:d};n(f)&&(d.h=f);a.qa.push({action:b,Jf:d,G:e});a.Yc++;b=a.qa.length-1;a.oa?Lh(a,b):a.f(\"Buffering put: \"+c)}function Lh(a,b){var c=a.qa[b].action,d=a.qa[b].Jf,e=a.qa[b].G;a.qa[b].Hg=a.oa;a.Fa(c,d,function(d){a.f(c+\" response\",d);delete a.qa[b];a.Yc--;0===a.Yc&&(a.qa=[]);e&&e(d.s,d.d)})}g.Ve=function(a){this.oa&&(a={c:a},this.f(\"reportStats\",a),this.Fa(\"s\",a,function(a){\"ok\"!==a.s&&this.f(\"reportStats\",\"Error sending stats: \"+a.d)}))};\r\ng.Id=function(a){if(\"r\"in a){this.f(\"from server: \"+B(a));var b=a.r,c=this.Td[b];c&&(delete this.Td[b],c(a.b))}else{if(\"error\"in a)throw\"A server-side error has occurred: \"+a.error;\"a\"in a&&(b=a.a,c=a.b,this.f(\"handleServerMessage\",b,c),\"d\"===b?this.Hb(c.p,c.d,!1,c.t):\"m\"===b?this.Hb(c.p,c.d,!0,c.t):\"c\"===b?Mh(this,c.p,c.q):\"ac\"===b?(a=c.s,b=c.d,c=this.Aa,delete this.Aa,c&&c.md&&c.md(a,b)):\"sd\"===b?this.Xe?this.Xe(c):\"msg\"in c&&\"undefined\"!==typeof console&&console.log(\"FIREBASE: \"+c.msg.replace(\"\\n\",\r\n\"\\nFIREBASE: \")):Oc(\"Unrecognized action received from server: \"+B(b)+\"\\nAre you using the latest client?\"))}};g.Wc=function(a){this.f(\"connection ready\");this.oa=!0;this.Lc=(new Date).getTime();this.Pe({serverTimeOffset:a-(new Date).getTime()});this.nf&&(a={},a[\"sdk.js.\"+hb.replace(/\\./g,\"-\")]=1,qg()&&(a[\"framework.cordova\"]=1),this.Ve(a));Nh(this);this.nf=!1;this.Uc(!0)};\r\nfunction Eh(a,b){K(!a.Ia,\"Scheduling a connect when we're already connected/ing?\");a.tb&&clearTimeout(a.tb);a.tb=setTimeout(function(){a.tb=null;Oh(a)},Math.floor(b))}g.Ag=function(a){a&&!this.Ob&&this.Za===this.Fd&&(this.f(\"Window became visible. Reducing delay.\"),this.Za=1E3,this.Ia||Eh(this,0));this.Ob=a};g.yg=function(a){a?(this.f(\"Browser went online.\"),this.Za=1E3,this.Ia||Eh(this,0)):(this.f(\"Browser went offline. Killing connection.\"),this.Ia&&this.Ia.close())};\r\ng.Df=function(){this.f(\"data client disconnected\");this.oa=!1;this.Ia=null;for(var a=0;a=a)throw Error(\"Query.limit: First argument must be a positive integer.\");if(this.o.ja)throw Error(\"Query.limit: Limit was already set (by another call to limit, limitToFirst, orlimitToLast.\");var b=this.o.Ie(a);li(b);return new Y(this.k,this.path,b,this.kc)};\r\ng.Je=function(a){x(\"Query.limitToFirst\",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error(\"Query.limitToFirst: First argument must be a positive integer.\");if(this.o.ja)throw Error(\"Query.limitToFirst: Limit was already set (by another call to limit, limitToFirst, or limitToLast).\");return new Y(this.k,this.path,this.o.Je(a),this.kc)};\r\ng.Ke=function(a){x(\"Query.limitToLast\",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw Error(\"Query.limitToLast: First argument must be a positive integer.\");if(this.o.ja)throw Error(\"Query.limitToLast: Limit was already set (by another call to limit, limitToFirst, or limitToLast).\");return new Y(this.k,this.path,this.o.Ke(a),this.kc)};\r\ng.Cg=function(a){x(\"Query.orderByChild\",1,1,arguments.length);if(\"$key\"===a)throw Error('Query.orderByChild: \"$key\" is invalid. Use Query.orderByKey() instead.');if(\"$priority\"===a)throw Error('Query.orderByChild: \"$priority\" is invalid. Use Query.orderByPriority() instead.');if(\"$value\"===a)throw Error('Query.orderByChild: \"$value\" is invalid. Use Query.orderByValue() instead.');$f(\"Query.orderByChild\",1,a,!1);mi(this,\"Query.orderByChild\");var b=be(this.o,new Sd(a));ki(b);return new Y(this.k,\r\nthis.path,b,!0)};g.Dg=function(){x(\"Query.orderByKey\",0,0,arguments.length);mi(this,\"Query.orderByKey\");var a=be(this.o,Od);ki(a);return new Y(this.k,this.path,a,!0)};g.Eg=function(){x(\"Query.orderByPriority\",0,0,arguments.length);mi(this,\"Query.orderByPriority\");var a=be(this.o,N);ki(a);return new Y(this.k,this.path,a,!0)};g.Fg=function(){x(\"Query.orderByValue\",0,0,arguments.length);mi(this,\"Query.orderByValue\");var a=be(this.o,Yd);ki(a);return new Y(this.k,this.path,a,!0)};\r\ng.ae=function(a,b){x(\"Query.startAt\",0,2,arguments.length);Vf(\"Query.startAt\",a,this.path,!0);$f(\"Query.startAt\",2,b,!0);var c=this.o.ae(a,b);li(c);ki(c);if(this.o.ma)throw Error(\"Query.startAt: Starting point was already set (by another call to startAt or equalTo).\");n(a)||(b=a=null);return new Y(this.k,this.path,c,this.kc)};\r\ng.td=function(a,b){x(\"Query.endAt\",0,2,arguments.length);Vf(\"Query.endAt\",a,this.path,!0);$f(\"Query.endAt\",2,b,!0);var c=this.o.td(a,b);li(c);ki(c);if(this.o.pa)throw Error(\"Query.endAt: Ending point was already set (by another call to endAt or equalTo).\");return new Y(this.k,this.path,c,this.kc)};\r\ng.ig=function(a,b){x(\"Query.equalTo\",1,2,arguments.length);Vf(\"Query.equalTo\",a,this.path,!1);$f(\"Query.equalTo\",2,b,!0);if(this.o.ma)throw Error(\"Query.equalTo: Starting point was already set (by another call to endAt or equalTo).\");if(this.o.pa)throw Error(\"Query.equalTo: Ending point was already set (by another call to endAt or equalTo).\");return this.ae(a,b).td(a,b)};\r\ng.toString=function(){x(\"Query.toString\",0,0,arguments.length);for(var a=this.path,b=\"\",c=a.Z;c.firebaseio.com instead\");c&&\"undefined\"!=c||Pc(\"Cannot parse Firebase url. Please use https://.firebaseio.com\");d.lb||\"undefined\"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf(\"https:\")&&Q(\"Insecure Firebase access from a secure page. Please use https in calls to new Firebase().\");\r\nc=new Dc(d.host,d.lb,c,\"ws\"===d.scheme||\"wss\"===d.scheme);d=new L(d.$c);e=d.toString();var f;!(f=!p(c.host)||0===c.host.length||!Tf(c.Db))&&(f=0!==e.length)&&(e&&(e=e.replace(/^\\/*\\.info(\\/|$)/,\"/\")),f=!(p(e)&&0!==e.length&&!Rf.test(e)));if(f)throw Error(z(\"new Firebase\",1,!1)+'must be a valid firebase URL and the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');if(b)if(b instanceof W)e=b;else if(p(b))e=W.vb(),c.Od=b;else throw Error(\"Expected a valid Firebase.Context for second argument to new Firebase()\");\r\nelse e=W.vb();f=c.toString();var h=w(e.oc,f);h||(h=new Qh(c,e.Qf),e.oc[f]=h);c=h}Y.call(this,c,d,$d,!1)}ma(U,Y);var oi=U,pi=[\"Firebase\"],qi=aa;pi[0]in qi||!qi.execScript||qi.execScript(\"var \"+pi[0]);for(var ri;pi.length&&(ri=pi.shift());)!pi.length&&n(oi)?qi[ri]=oi:qi=qi[ri]?qi[ri]:qi[ri]={};U.goOffline=function(){x(\"Firebase.goOffline\",0,0,arguments.length);W.vb().zb()};U.goOnline=function(){x(\"Firebase.goOnline\",0,0,arguments.length);W.vb().rc()};\r\nfunction Mc(a,b){K(!b||!0===a||!1===a,\"Can't turn on custom loggers persistently.\");!0===a?(\"undefined\"!==typeof console&&(\"function\"===typeof console.log?Bb=q(console.log,console):\"object\"===typeof console.log&&(Bb=function(a){console.log(a)})),b&&P.set(\"logging_enabled\",!0)):a?Bb=a:(Bb=null,P.remove(\"logging_enabled\"))}U.enableLogging=Mc;U.ServerValue={TIMESTAMP:{\".sv\":\"timestamp\"}};U.SDK_VERSION=hb;U.INTERNAL=V;U.Context=W;U.TEST_ACCESS=Z;\r\nU.prototype.name=function(){Q(\"Firebase.name() being deprecated. Please use Firebase.key() instead.\");x(\"Firebase.name\",0,0,arguments.length);return this.key()};U.prototype.name=U.prototype.name;U.prototype.key=function(){x(\"Firebase.key\",0,0,arguments.length);return this.path.e()?null:uc(this.path)};U.prototype.key=U.prototype.key;\r\nU.prototype.u=function(a){x(\"Firebase.child\",1,1,arguments.length);if(ga(a))a=String(a);else if(!(a instanceof L))if(null===E(this.path)){var b=a;b&&(b=b.replace(/^\\/*\\.info(\\/|$)/,\"/\"));ag(\"Firebase.child\",b)}else ag(\"Firebase.child\",a);return new U(this.k,this.path.u(a))};U.prototype.child=U.prototype.u;U.prototype.parent=function(){x(\"Firebase.parent\",0,0,arguments.length);var a=this.path.parent();return null===a?null:new U(this.k,a)};U.prototype.parent=U.prototype.parent;\r\nU.prototype.root=function(){x(\"Firebase.ref\",0,0,arguments.length);for(var a=this;null!==a.parent();)a=a.parent();return a};U.prototype.root=U.prototype.root;U.prototype.set=function(a,b){x(\"Firebase.set\",1,2,arguments.length);bg(\"Firebase.set\",this.path);Vf(\"Firebase.set\",a,this.path,!1);A(\"Firebase.set\",2,b,!0);this.k.Kb(this.path,a,null,b||null)};U.prototype.set=U.prototype.set;\r\nU.prototype.update=function(a,b){x(\"Firebase.update\",1,2,arguments.length);bg(\"Firebase.update\",this.path);if(ea(a)){for(var c={},d=0;d' + name.toUpperCase() + '';\r\n\t\t\tinfo.appendChild(nameEl);\r\n\r\n\t\t\tif (inTile) {\r\n\t\t\t\tvar errorMsg = 'VR mode does not support preview tiles. Stopping code execution.';\r\n\t\t\t\tconsole.log('ERROR: ' + errorMsg);\r\n\t\t\t\tthrow new Error(errorMsg);\r\n\t\t\t}\r\n\r\n\t\t\tif (!inVR) {\r\n\r\n\t\t\t\tvar launchEl = document.createElement(\"span\");\r\n\t\t\t\tlaunchEl.className = \"altspace-vr-notice\";\r\n\t\t\t\tlaunchEl.innerHTML = 'View
';\r\n\t\t\t\tinfo.insertBefore(launchEl, nameEl);\r\n\r\n\t\t\t\tvar notice = document.createElement(\"span\");\r\n\t\t\t\tnotice.className = \"altspace-vr-notice\";\r\n\t\t\t\tnotice.innerHTML = 'in AltspaceVR
';\r\n\t\t\t\tinfo.appendChild(notice);\r\n\r\n\r\n\t\t\t\tvar errorMsg = 'Not in VR mode. Stopping code execution.';\r\n\t\t\t\tif (inTile) {\r\n\t\t\t\t\tconsole.log('ERROR: ' + errorMsg);//thrown error message not displayed in console when inTile, log it\r\n\t\t\t\t}\r\n\t\t\t\tthrow new Error(errorMsg);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the name to be used by ensureInVR() \r\n\t * @method setName\r\n\t * @param {String} name\r\n\t * @memberof module:altspace/utilities/codePen\r\n\t */\r\n\tfunction setName(n) {//TODO: A better method for this would be awesome\r\n\t\tname = n;\r\n\t}\r\n\r\n\tfunction getParsedUrl() {\r\n\t\tvar canonicalElement = document.querySelector('link[rel=canonical]');\r\n\t\tvar fullUrl = canonicalElement ? canonicalElement.href : window.location.href;\r\n\t\treturn new Url(fullUrl);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns the pen ID, useful for setting the sync instanceId.\r\n\t * @method getPenId\r\n\t * @return {String}\r\n\t * @memberof module:altspace/utilities/codePen\r\n\t */\r\n\tfunction getPenId() {\r\n\t\tvar url = getParsedUrl();\r\n\t\tvar splitPath = url.path.split('/');\r\n\t\tvar id = splitPath[splitPath.length - 1];\r\n\t\treturn id;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the pen author ID, useful for setting the sync authorId.\r\n\t * @method getAuthorId\r\n\t * @return {String}\r\n\t * @memberof module:altspace/utilities/codePen\r\n\t */\r\n\tfunction getAuthorId() {\r\n\t\tvar url = getParsedUrl();\r\n\t\tvar splitPath = url.path.split('/');\r\n\t\tvar isTeam = splitPath[1] == 'team';\r\n\t\tvar id = isTeam ? 'team-' + splitPath[2] : splitPath[1];\r\n\t\treturn id;\r\n\t}\r\n\r\n\treturn {\r\n\t\tinTile: inTile,\r\n\t\tinVR: inVR,\r\n\t\tinCodePen: inCodePen,\r\n\t\tensureInVR: ensureInVR,\r\n\t\tsetName: setName,\r\n\t\tgetPenId: getPenId,\r\n\t\tgetAuthorId: getAuthorId,\r\n\t\tprintDebugInfo: printDebugInfo\r\n\t};\r\n}());\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\n\r\n/**\r\n * @module altspace/utilities\r\n */\r\n\r\n/**\r\n * Simluation is a helper class that lets you quickly setup a three.js app with support for AltspaceVR. It creates a basic scene for you and starts the render and behavior loop.\r\n *\r\n * If all of your application logic is in behaviors, you do not need to create any additional requestAnimationFrame loops.\r\n *\r\n * It also automatically uses the WebGL renderer when running in a \r\n * desktop browser and emulates cursor events with mouse clicks.\r\n * @class Simulation\r\n * @param {Object} [config] Optional parameters.\r\n * @param {Boolean} [config.auto=true] Automatically start the render loop.\r\n * @memberof module:altspace/utilities\r\n */\r\naltspace.utilities.Simulation = function (config) {\r\n\tconfig = config || {};\r\n\tif (config.auto === undefined) config.auto = true;\r\n\r\n\tvar exports = {};\r\n\tvar scene = new THREE.Scene();\r\n\tvar renderer;\r\n\tvar camera;\r\n\r\n\tsetup();\r\n\r\n\tfunction loop() {\r\n\t\twindow.requestAnimationFrame(loop);\r\n\r\n\t\tif (scene.updateAllBehaviors)\r\n\t\t\tscene.updateAllBehaviors();\r\n\r\n\t\trenderer.render(scene, camera);\r\n\t}\r\n\r\n\tfunction setup() {\r\n\t\tfunction setupAltspace() {\r\n\t\t\trenderer = altspace.getThreeJSRenderer();\r\n\t\t\tcamera = new THREE.PerspectiveCamera(); // TODO: change from shim to symbolic\r\n\t\t\taltspace.getThreeJSTrackingSkeleton(function (s) {//TODO: this should have a non-promise version\r\n\t\t\t\tvar skeleton = s;\r\n\t\t\t\tskeleton.getJoint('Eye').add(camera);// add our virtual camera to the center eye so that it looks normal to other behaviors\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction setupWebGL() {\r\n\t\t\trenderer = new THREE.WebGLRenderer({antialias: true});\r\n\t\t\tcamera = new THREE.PerspectiveCamera();\r\n\t\t\tcamera.position.z = 500;\r\n\r\n\t\t\tvar resizeRender = function () {\r\n\t\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\r\n\t\t\t\tcamera.updateProjectionMatrix();\r\n\t\t\t\trenderer.setSize(window.innerWidth, window.innerHeight);\r\n\t\t\t};\r\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", function (event) {\r\n\t\t\t\tdocument.body.style.margin = '0px';\r\n\t\t\t\tdocument.body.style.overflow = 'hidden';\r\n\t\t\t\trenderer.setClearColor('#035F72');\r\n\t\t\t\tvar container = document.createElement('div');\r\n\t\t\t\tdocument.body.appendChild(container);\r\n\t\t\t\tcontainer.appendChild(renderer.domElement);\r\n\t\t\t});\r\n\t\t\twindow.addEventListener('resize', resizeRender);\r\n\t\t\tresizeRender();\r\n\t\t\tcamera.fov = 45;\r\n\t\t\tcamera.near = 1;\r\n\t\t\tcamera.far = 2000;\r\n\t\t\tscene.add(camera);\r\n\t\t\tscene.add(new THREE.AmbientLight('white'));\r\n\r\n\t\t\tvar shouldShimCursor = altspace && altspace.utilities && altspace.utilities.shims && altspace.utilities.shims.cursor;\r\n\t\t\tif (shouldShimCursor) altspace.utilities.shims.cursor.init(scene, camera);\r\n\t\t}\r\n\r\n\t\tif (altspace && altspace.inClient) {\r\n\t\t\tsetupAltspace();\r\n\t\t} else {\r\n\t\t\tsetupWebGL();\r\n\t\t}\r\n\t}\r\n\r\n\tif (config.auto) window.requestAnimationFrame(loop);\r\n\r\n\r\n\t/**\r\n\t * The simulation scene.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {THREE.Scene} scene\r\n\t * @memberof module:altspace/utilities.Simulation\r\n\t */\r\n\tObject.defineProperty(exports, 'scene', {\r\n\t\tget: function () {\r\n\t\t\treturn scene;\r\n\t\t}\r\n\t})\r\n\r\n\t/**\r\n\t * The renderer being used.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {(THREE.WebGLRenderer|AltRenderer)} renderer\r\n\t * @memberof module:altspace/utilities.Simulation\r\n\t */\r\n\tObject.defineProperty(exports, 'renderer', {\r\n\t\tget: function () {\r\n\t\t\treturn renderer;\r\n\t\t}\r\n\t})\r\n\r\n\t/**\r\n\t * The camera being used by the WebGL renderer.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {Three.Camera} camera\r\n\t * @memberof module:altspace/utilities.Simulation\r\n\t */\r\n\tObject.defineProperty(exports, 'camera', {\r\n\t\tget: function () {\r\n\t\t\treturn camera;\r\n\t\t},\r\n\t\tset: function (value) {\r\n\t\t\tcamera = value;\r\n\t\t}\r\n\t})\r\n\treturn exports;\r\n}\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\n\r\n\r\naltspace.utilities.multiloader = (function(){\r\n\tvar loader;\r\n\tvar TRACE;\r\n\tvar baseUrl = '';\r\n\tvar crossOrigin = '';//assigned to THREE.MTLLoader.crossOrigin\r\n\r\n\tfunction LoadRequest(){\r\n\t\t//To create loadRequst: new MultiLoader.LoadRequest()\r\n\r\n\t\tvar objUrls = [];//Paths to model geometry file, in Wavefront OBJ format.\r\n\t\tvar mtlUrls = [];//Paths to model materials file, in Wavefront MTL format.\r\n\t\tvar objects = [];//objects[i] is result of loader.load(objUrl[i], mtlUrl[i])\r\n\t\tvar error;//String indicating loading error with at least one file.\r\n\t\tvar objectsLoaded = 0;//Used internally to determine when loading complete.\r\n\r\n\t\treturn {\r\n\t\t\tobjUrls: objUrls,\r\n\t\t\tmtlUrls: mtlUrls,\r\n\t\t\tobjects: objects,\r\n\t\t\terror: error,\r\n\t\t\tobjectsLoaded: objectsLoaded\r\n\t\t};\r\n\r\n\t}//end of LoadRequest\r\n\r\n\tfunction init(params){\r\n\t\tvar p = params || {};\r\n\t\tTRACE = p.TRACE || false;\r\n\t\tif (p.crossOrigin) crossOrigin = p.crossOrigin;\r\n\t\tif (p.baseUrl) baseUrl = p.baseUrl;\r\n\t\tif (baseUrl.slice(-1) !== '/') baseUrl += '/';\r\n\r\n\t\tloader = new altspace.utilities.shims.OBJMTLLoader();\r\n\t\tloader.crossOrigin = crossOrigin;\r\n\t\tif (TRACE) console.log('MultiLoader initialized with params', params);\r\n\t}\r\n\r\n\tfunction load(loadRequest, onComplete){\r\n\t\tvar req = loadRequest;\r\n\t\tvar start = Date.now();\r\n\t\tif (!req || !req instanceof LoadRequest){\r\n\t\t\tthrow new Error('MultiLoader.load expects first arg of type LoadRequest');\r\n\t\t}\r\n\t\tif (!onComplete || typeof(onComplete) !== 'function'){\r\n\t\t\tthrow new Error('MultiLoader.load expects second arg of type function');\r\n\t\t}\r\n\t\tif (!req.objUrls || !req.mtlUrls || req.objUrls.length !== req.mtlUrls.length){\r\n\t\t\tthrow new Error('MultiLoader.load called with bad LoadRequest');\r\n\t\t}\r\n\t\tvar reqCount = req.objUrls.length;\r\n\t\tif (TRACE) console.log('Loading models...')\r\n\t\tfor (var i=0; i < reqCount; i++){\r\n\t\t\tvar loadModel = function(req, i){//We need i in the closure to store result.\r\n\t\t\t\tvar objUrl = baseUrl + req.objUrls[i];\r\n\t\t\t\tvar mtlUrl = baseUrl + req.mtlUrls[i];\r\n\t\t\t\tif (TRACE) console.log('Loading obj:'+objUrl+', mtl:'+mtlUrl);\r\n\t\t\t\tloader.load(objUrl, mtlUrl, function(object3d){//onLoaded\r\n\t\t\t\t\treq.objects[i] = object3d;\r\n\t\t\t\t\treq.objectsLoaded++;\r\n\t\t\t\t\tif(req.objectsLoaded === reqCount){\r\n\t\t\t\t\t\tvar elapsed = ((Date.now()-start)/1000.0).toFixed(2);\r\n\t\t\t\t\t\tif (TRACE) console.log('Loaded '+reqCount+' models in '+elapsed+' seconds');\r\n\t\t\t\t\t\tonComplete();\r\n\t\t\t\t\t}\r\n\t\t\t\t}, onProgress, function(){//onError \r\n\t\t\t\t\tvar url = xhr.target.responseURL || '';\r\n\t\t\t\t\treq.error = 'Error loading file '+url;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\tloadModel(req, i);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction onProgress(xhr){\r\n\t\tif (xhr.lengthComputable && xhr.target.responseURL) {\r\n\t\t\t//Skip progress log if no xhr url, meaning it's a local file.\r\n\t\t\tvar percentComplete = xhr.loaded / xhr.total * 100;\r\n\t\t\tvar filename = xhr.target.responseURL.split('/').pop();\r\n\t\t\tif (TRACE) console.log('...'+filename+' '+Math.round(percentComplete,2)+'% downloaded');\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t\tload: load,\r\n\t\tLoadRequest: LoadRequest,\r\n\t};\r\n\r\n}());\r\n\n/**\r\n * @author gavanwilhite / http://gavanwilhite.com\r\n */\r\n\r\n/**\r\n * The AltspaceDK includes a Behaviors shim that adds Behavior capabilities to \r\n * Three.js.\r\n * It adds methods to Three.js' Scene and Object3D classes which allow you to \r\n * add, remove, retrieve and use Behaviors.\r\n *\r\n * @namespace THREE\r\n */\r\n\r\n/**\r\n * The AltspaceSDK adds Behavior capabilites to Three.js' Scene class.\r\n * @class Scene\r\n * @memberof THREE\r\n */\r\n\r\n/**\r\n * Update the behaviors of all the objects in this Scene.\r\n * @instance\r\n * @method updateAllBehaviors \r\n * @memberof THREE.Scene\r\n */\r\nTHREE.Scene.prototype.updateAllBehaviors = function () {\r\n\r\n\tvar now = performance.now();\r\n\tvar lastNow = this.__lastNow || now;\r\n\r\n\tvar deltaTime = now - lastNow;\r\n\r\n\tvar self = this;\r\n\r\n\t//gather objects first so that behaviors can change the hierarchy during traversal without incident\r\n\tvar objectsWithBehaviors = [];\r\n\r\n\tthis.traverse(function (object3d) {\r\n\r\n\t\tif (object3d.__behaviorList) {\r\n\t\t\tobjectsWithBehaviors.push(object3d);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tfor (var i = 0, max = objectsWithBehaviors.length; i < max; i++) {\r\n\t\tobject3d = objectsWithBehaviors[i];\r\n\t\tobject3d.updateBehaviors(deltaTime, self);\r\n\t}\r\n\r\n\tthis.__lastNow = now;\r\n\r\n}\r\n\r\n/**\r\n * The AltspaceSDK adds Behavior capabilites to Three.js' Object3D class.\r\n * @class Object3D\r\n * @memberof THREE\r\n */\r\n\r\n/**\r\n * Adds the given behavior to this object.\r\n * @instance\r\n * @method addBehavior \r\n * @param {Behavior} behavior Behavior to add.\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.addBehavior = function()\r\n{\r\n\tthis.__behaviorList = this.__behaviorList || [];\r\n\tArray.prototype.push.apply(this.__behaviorList, arguments);\r\n}\r\n\r\n/**\r\n * Adds the given behaviors to this object.\r\n * @instance\r\n * @method addBehaviors\r\n * @param {...Behavior} behavior Behavior to add.\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.addBehaviors = function()\r\n{\r\n\tthis.__behaviorList = this.__behaviorList || [];\r\n\tArray.prototype.push.apply(this.__behaviorList, arguments);\r\n}\r\n\r\n/**\r\n * Removes the given behavior from this object. The behavior is disposed if\r\n * possible.\r\n * @instance\r\n * @method removeBehavior \r\n * @param {...Behavior} behavior Behavior to remove.\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.removeBehavior = function(behavior)\r\n{\r\n\tvar i = this.__behaviorList.indexOf(behavior);\r\n\tif (i !== -1) {\r\n\t\tthis.__behaviorList.splice(i, 1);\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.dispose) behavior.dispose.call(behavior, this);\r\n\r\n\t\t} catch (error) {\r\n\t\t\t\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Removes all behaviors from this object. The behaviors are disposed if\r\n * possible.\r\n * @instance\r\n * @method removeAllBehaviors\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.removeAllBehaviors = function ()\r\n{\r\n\tif (!this.__behaviorList || this.__behaviorList.length === 0) return null;\r\n\r\n\tfor (var i = 0, max = this.__behaviorList.length; i < max; i++) {\r\n\t\tvar behavior = this.__behaviorList[i];\r\n\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.dispose) behavior.dispose.call(behavior, this);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Retrieve a behavior by type.\r\n * @instance\r\n * @method getBehaviorByType\r\n * @param {String} type \r\n * @returns {Behavior}\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.getBehaviorByType = function(type) {\r\n\tif (!this.__behaviorList || this.__behaviorList.length === 0) return null;\r\n\r\n\tfor (var i = 0, max = this.__behaviorList.length; i < max; i++) {\r\n\t\tif (this.__behaviorList[i].type === type)\r\n\t\t\treturn this.__behaviorList[i];\r\n\t}\r\n}\r\n\r\n/**\r\n * Update behaviors on this object.\r\n * @instance\r\n * @method updateBehaviors\r\n * @param {Number} deltaTime Elapsed time in milliseconds\r\n * @memberof THREE.Object3D\r\n */\r\nTHREE.Object3D.prototype.updateBehaviors = function(deltaTime, scene) {\r\n\r\n\tif (!this.__behaviorList || this.__behaviorList.length === 0) return;\r\n\r\n\tvar toInit = [];\r\n\tvar toUpdate = this.__behaviorList.slice(); // prevent mutation of the behavior list during this loop\r\n\r\n\tfor (var i = 0, max = this.__behaviorList.length; i < max; i++) {\r\n\r\n\t\tvar behavior = this.__behaviorList[i];\r\n\t\tif (!behavior.__isInitialized) toInit.push(behavior);\r\n\r\n\t}\r\n\r\n\t//Awake\r\n\tfor (var i = 0, max = toInit.length; i < max; i++) {\r\n\r\n\t\tvar behavior = toInit[i];\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.awake) behavior.awake.call(behavior, this, scene);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//Start\r\n\tfor (var i = 0, max = toInit.length; i < max; i++) {\r\n\r\n\t\tvar behavior = toInit[i];\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.start) behavior.start.call(behavior);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\t\tbehavior.__isInitialized = true;\r\n\r\n\t}\r\n\r\n\t//Update\r\n\tfor (var i = 0, max = toUpdate.length; i < max; i++) {\r\n\r\n\t\tvar behavior = toUpdate[i];\r\n\t\ttry {\r\n\r\n\t\t\tif (behavior.update) behavior.update.call(behavior, deltaTime);\r\n\r\n\t\t} catch (error) {\r\n\r\n\t\t\tconsole.group();\r\n\t\t\t(console.error || console.log).call(console, error.stack || error);\r\n\t\t\tconsole.log('[Behavior]');\r\n\t\t\tconsole.log(behavior);\r\n\t\t\tconsole.log('[Object3D]');\r\n\t\t\tconsole.log(this);\r\n\t\t\tconsole.groupEnd();\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n\r\n\r\n\naltspace = window.altspace || {};\r\naltspace.utilities = altspace.utilities || {};\r\naltspace.utilities.shims = altspace.utilities.shims || {};\r\n/**\r\n * Detects mouse move/up/down events, raycasts to find intersected objects, \r\n * then dispatches cursor move/up/down/enter/leave events that mimics \r\n * Altspace events.\r\n * @module altspace/utilities/shims/cursor\r\n */\r\naltspace.utilities.shims.cursor = (function () {\r\n\t//TODO: Support non-full window apps\r\n\r\n\tvar scene;\r\n\tvar camera;\r\n\tvar domElem;\r\n\r\n\tvar overObject;\r\n\r\n\tvar raycaster = new THREE.Raycaster();\r\n\r\n\t/**\r\n\t * Initializes the cursor module \r\n\t * @static\r\n\t * @method init\r\n\t * @param {THREE.Scene} scene\r\n\t * @param {THREE.Camera} camera - Camera used for raycasting.\r\n\t * @param {Object} [options] - An options object\r\n\t * @param {THREE.WebGLRenderer} [options.renderer] - If supplied, applies cursor movement to render target \r\n\t *\tinstead of entire client\r\n\t * @memberof module:altspace/utilities/shims/cursor\r\n\t */\r\n\tfunction init(_scene, _camera, _params) {\r\n\t\tif (!_scene || !_scene instanceof THREE.Scene) {\r\n\t\t\tthrow new TypeError('Requires THREE.Scene argument');\r\n\t\t}\r\n\t\tif (!_camera || !_camera instanceof THREE.Camera) {\r\n\t\t\tthrow new TypeError('Requires THREE.Camera argument');\r\n\t\t}\r\n\t\tscene = _scene;\r\n\t\tcamera = _camera;\r\n\r\n\t\tp = _params || {};\r\n\t\tdomElem = p.renderer && p.renderer.domElement || window;\r\n\r\n\t\tdomElem.addEventListener('mousedown', mouseDown, false)\r\n\t\tdomElem.addEventListener('mouseup', mouseUp, false)\r\n\t\tdomElem.addEventListener('mousemove', mouseMove, false)\r\n\t}\r\n\r\n\tfunction mouseDown(event) {\r\n\r\n\t\tvar intersection = findIntersection(event);\r\n\t\tif (!intersection || !intersection.point) return;\r\n\r\n\t\tvar cursorEvent = createCursorEvent('cursordown', intersection);\r\n\t\tintersection.object.dispatchEvent(cursorEvent);\r\n\t}\r\n\r\n\tfunction mouseUp(event) {\r\n\t\tvar intersection = findIntersection(event);\r\n\r\n\t\tvar cursorEvent = createCursorEvent('cursorup', intersection);\r\n\r\n\t\tif (intersection) {\r\n\t\t\tintersection.object.dispatchEvent(cursorEvent);\r\n\t\t} else {\r\n\t\t\tscene.dispatchEvent(cursorEvent);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction mouseMove(event) {\r\n\t\tvar intersection = findIntersection(event);\r\n\r\n\t\tvar cursorEvent = createCursorEvent('cursormove', intersection);//TODO improve and don't fire only on scene\r\n\t\tscene.dispatchEvent(cursorEvent);\r\n\r\n\t\tvar object = intersection ? intersection.object : null;\r\n\t\tif (overObject != object) {\r\n\t\t\tif (overObject) {\r\n\t\t\t\tcursorEvent = createCursorEvent('cursorleave', intersection);\r\n\t\t\t\toverObject.dispatchEvent(cursorEvent);\r\n\t\t\t}\r\n\r\n\t\t\tif (object) {\r\n\t\t\t\tcursorEvent = createCursorEvent('cursorenter', intersection);\r\n\t\t\t\tobject.dispatchEvent(cursorEvent);\r\n\t\t\t}\r\n\r\n\t\t\toverObject = object;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction createCursorEvent(type, intersection) {\r\n\t\treturn {\r\n\t\t\ttype: type,\r\n\t\t\tbubbles: true,\r\n\t\t\ttarget: intersection ? intersection.object : null,\r\n\t\t\tray: {\r\n\t\t\t\torigin: raycaster.ray.origin.clone(),\r\n\t\t\t\tdirection: raycaster.ray.direction.clone()\r\n\t\t\t},\r\n\t\t\tpoint: intersection ? intersection.point.clone() : null\r\n\t\t}\r\n\t}\r\n\r\n\tfunction findIntersection(mouseEvent) {\r\n\t\tvar mouse = new THREE.Vector2();\r\n\t\tmouse.x = (mouseEvent.offsetX / (domElem.width || domElem.innerWidth)) * 2 - 1;\r\n\t\tmouse.y = -(mouseEvent.offsetY / (domElem.height || domElem.innerHeight)) * 2 + 1;\r\n\r\n\t\traycaster.setFromCamera(mouse, camera);\r\n\r\n\t\tvar intersections = raycaster.intersectObjects(scene.children, true);\r\n\t\treturn intersections.length > 0 ? intersections[0] : null;\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\tinit: init,\r\n\t};\r\n\r\n}());\r\n\r\n\n/**\r\n * The Altspace SDK adds event bubbling to Three.js' events system.\r\n * Simply include the SDK in your app and add a bubbling property to your event to take advantage of this feature.\r\n * \r\n * AltspaceVR cursor events always make use of this bubbling shim.\r\n *\r\n * @example\r\n * var parent = new THREE.Object3D();\r\n * parent.addEventListener('custom', function () {\r\n * console.log('received custom event');\r\n * });\r\n * var child = new THREE.Object3D();\r\n * parent.add(child);\r\n * child.dispatchEvent({type: 'custom', bubbles: true});\r\n * // Console log shows 'received custom event'\r\n *\r\n * @module altspace/utilities/shims/bubbling\r\n */\r\n( function() {\r\n\r\n\tif (!THREE) return;\r\n\r\n\tif (window.altspace && window.altspace.inAltspace) return;\r\n\r\n\tTHREE.EventDispatcher.prototype.dispatchEvent = dispatchEvent;\r\n\tTHREE.Object3D.prototype.dispatchEvent = dispatchEvent;\r\n\r\n\tfunction dispatchEvent( event ) {\r\n\r\n\t\tvar shouldStopPropagation;\r\n\t\tvar shouldStopPropagationImmediately;\r\n\r\n\t\tif ( event.bubbles ) {\r\n\r\n\t\t\tevent.currentTarget = this;\r\n\r\n\t\t\tevent.stopPropagation = function () {\r\n\r\n\t\t\t\tshouldStopPropagation = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tevent.stopImmediatePropagation = function () {\r\n\r\n\t\t\t\tshouldStopPropagationImmediately = true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( this._listeners ) {\r\n\r\n\t\t\tvar listeners = this._listeners;\r\n\t\t\tvar listenerArray = listeners[ event.type ];\r\n\r\n\t\t\tif ( listenerArray ) {\r\n\r\n\t\t\t\tevent.target = event.target || this;\r\n\r\n\t\t\t\tvar array = [];\r\n\t\t\t\tvar length = listenerArray.length;\r\n\r\n\t\t\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\t\tarray[ i ] = listenerArray[ i ];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor ( var i = 0; i < length; i ++ ) {\r\n\r\n\t\t\t\t\tarray[ i ].call( this, event );\r\n\r\n\t\t\t\t\tif ( shouldStopPropagationImmediately ) return;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t\tif ( event.bubbles && this.parent && this.parent.dispatchEvent && ! shouldStopPropagation ) {\r\n\r\n\t\t\tdispatchEvent.call( this.parent, event );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n}() );\r\n\n/**\r\n * @module altspace/utilities/behaviors\r\n */\r\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The Bob behavior adds a bobbing animation to an object\r\n *\r\n * @class Bob\r\n * @param {Object} [config]\r\n * @param {Boolean} [config.shouldRotate=true] Whether the animation should include\r\n * rotation.\r\n * @param {Boolean} [config.shouldMove=true] Whether the animation should\r\n * include movement.\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\naltspace.utilities.behaviors.Bob = function (config) {\r\n\tvar object3d;\r\n\r\n\tconfig = config || {};\r\n\r\n\tif (config.shouldRotate === undefined) config.shouldRotate = true;\r\n\tif (config.shouldMove === undefined) config.shouldMove = true;\r\n\r\n\tvar offsetPosition;\r\n\tvar lastBobPosition = new THREE.Vector3();\r\n\t//TODO: Rotation\r\n\r\n\tvar nowOffset = Math.random() * 10000;\r\n\r\n\tfunction awake(o) {\r\n\t\tobject3d = o;\r\n\t\toffsetPosition = object3d.position.clone();\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tvar nowInt = Math.floor(performance.now()) + nowOffset;\r\n\r\n\t\tif (config.shouldMove) {\r\n\t\t\tif (!lastBobPosition.equals(object3d.position)) offsetPosition.copy(object3d.position);\r\n\r\n\t\t\tobject3d.position.y = offsetPosition.y + Math.sin(nowInt / 800) * 3;\r\n\t\t\tobject3d.position.x = offsetPosition.x + Math.sin(nowInt / 500) * 5;\r\n\t\t\tlastBobPosition.copy(object3d.position);\r\n\t\t}\r\n\r\n\t\tif (config.shouldRotate) {\r\n\t\t\tobject3d.rotation.x = Math.sin(nowInt / 500) / 15;\r\n\t\t}\r\n\t}\r\n\r\n\treturn { awake: awake, update: update };\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * A behavior that changes the color of an object when the cursor interacts with it.\r\n * @class ButtonStateStyle\r\n * @param {Object} [config] Optional parameters.\r\n * @param {THREE.Color} [config.originalColor] Base material color.\r\n * @param {Number} [config.overBrightness=1.5] Material brightness when cursor\r\n *\tis over button.\r\n * @param {Number} [config.downBrightness=0.5] Material brightness when cursor\r\n *\tis clicked.\r\n * @memberof module:altspace/utilities/behaviors\r\n */\r\naltspace.utilities.behaviors.ButtonStateStyle = function (config) {\r\n\tvar object3d;\r\n\tvar scene;\r\n\tvar originalColor;\r\n\tvar modifiedColor = new THREE.Color();\r\n\r\n\tconfig = config || {};\r\n\tvar overBrightness = config.overBrightness || 1.5;\r\n\tvar downBrightness = config.downBrightness || 0.5;\r\n\r\n\tfunction changeBrightness(brightness) {\r\n\t\tmodifiedColor.set(originalColor);\r\n\t\tmodifiedColor.multiplyScalar(brightness);\r\n\t\tmodifiedColor.r = THREE.Math.clamp(modifiedColor.r, 0, 1);\r\n\t\tmodifiedColor.g = THREE.Math.clamp(modifiedColor.g, 0, 1);\r\n\t\tmodifiedColor.b = THREE.Math.clamp(modifiedColor.b, 0, 1);\r\n\t\tobject3d.material.color = modifiedColor;\r\n\t}\r\n\r\n\tfunction cursorLeave() {\r\n\t\tobject3d.removeEventListener('cursorleave', cursorLeave);\r\n\t\tchangeBrightness(1.0);\r\n\t}\r\n\r\n\tfunction cursorEnter() {\r\n\t\tchangeBrightness(overBrightness);\r\n\t\tobject3d.addEventListener('cursorleave', cursorLeave);\r\n\t}\r\n\r\n\tfunction cursorUp(event) {\r\n\t\tscene.removeEventListener('cursorup', cursorUp);\r\n\t\tobject3d.addEventListener('cursorenter', cursorEnter);\r\n\t\tif (event.target === object3d) {\r\n\t\t\tchangeBrightness(overBrightness);\r\n\t\t\tobject3d.addEventListener('cursorleave', cursorLeave);\r\n\t\t} else {\r\n\t\t\tchangeBrightness(1.0);\r\n\t\t}\r\n\t}\r\n\tfunction cursorDown() {\r\n\t\tscene.addEventListener('cursorup', cursorUp);\r\n\t\tobject3d.removeEventListener('cursorleave', cursorLeave);\r\n\t\tobject3d.removeEventListener('cursorenter', cursorEnter);\r\n\t\tchangeBrightness(downBrightness);\r\n\t}\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\toriginalColor = config.originalColor || object3d.material.color;\r\n\t\tobject3d.addEventListener('cursorenter', cursorEnter);\r\n\t\tobject3d.addEventListener('cursordown', cursorDown);\r\n\t}\r\n\r\n\tfunction dispose() {\r\n\t\tobject3d.removeEventListener('cursorenter', cursorEnter);\r\n\t\tobject3d.removeEventListener('cursorleave', cursorLeave);\r\n\t\tobject3d.removeEventListener('cursorup', cursorUp);\r\n\t\tobject3d.removeEventListener('cursordown', cursorDown);\r\n\t}\r\n\r\n\treturn { awake: awake, dispose: dispose, type: 'ButtonStateStyle' };\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n//idea: API for symbolic camera from altspace? altspace.getThreeJSCenterCamera();\r\n//idea: offset (drag from bottom of piece). Workaround if you reparent\r\n\r\n//TODO: GSAP Draggable\r\n/**\r\n * A behavior that makes an object draggable along a plane.\r\n * @class Drag\r\n * @param {Object} [config] Specify the axes along which the object can be \r\n * dragged.\r\n * E.g. To constraint th object to an XY plane: `{x: true, y: true}` \r\n * Each axis can also be an object specifying the minimum and maximum limits\r\n * of the constraint. E.g. `{x: {min: -10, max: 20}, y: true}` \r\n * **Note:** Currently you must specify exactly two axes.\r\n * @memberof module:altspace/utilities/behaviors\r\n */\r\naltspace.utilities.behaviors.Drag = function (config) {\r\n\t//space: view, local, world, sphere\r\n\t//gridSnap, cursorSnap\r\n\t//config: x: true, y: true, z: false, defaultDistance: 1000\r\n\r\n\tconfig = config || {};\r\n\r\n\tif (config.space === undefined) config.space = 'world';//TODO others\r\n\tif (config.x === undefined) config.x = false;\r\n\tif (config.y === undefined) config.y = false;\r\n\tif (config.z === undefined) config.z = false;\r\n\tif (config.cursorSnap === undefined) config.cursorSnap = true;//TODO false\r\n\r\n\tvar inX = !!config.x;\r\n\tvar inY = !!config.y;\r\n\tvar inZ = !!config.z;\r\n\tvar min = new THREE.Vector3(\r\n\t\tconfig.x.min !== undefined ? config.x.min : Number.NEGATIVE_INFINITY,\r\n\t\tconfig.y.min !== undefined ? config.y.min : Number.NEGATIVE_INFINITY,\r\n\t\tconfig.z.min !== undefined ? config.z.min : Number.NEGATIVE_INFINITY\r\n\t);\r\n\tvar max = new THREE.Vector3(\r\n\t\tconfig.x.max !== undefined ? config.x.max : Number.POSITIVE_INFINITY,\r\n\t\tconfig.y.max !== undefined ? config.y.max : Number.POSITIVE_INFINITY,\r\n\t\tconfig.z.max !== undefined ? config.z.max : Number.POSITIVE_INFINITY\r\n\t);\r\n\r\n\tvar object3d;\r\n\tvar scene;\r\n\tvar sync;\r\n\tvar intersector;\r\n\tvar dragOffset = new THREE.Vector3();\r\n\tvar raycaster = new THREE.Raycaster();\r\n\traycaster.linePrecision = 3;\r\n\r\n\t//if (THREE.REVISION !== '72') throw new Error('Drag requires three.js revision 72'); //TODO: Do we need a revision check?\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\tsync = object3d.getBehaviorByType('Object3DSync');\r\n\t\tmakeIntersector();\r\n\t\tscene.add(intersector);//TODO: see if I can remove it from the scene. Might not req 72.\r\n\t}\r\n\r\n\tfunction makeIntersector() {\r\n\t\tvar extent = 10000;\r\n\t\tvar plane = new THREE.PlaneGeometry(extent, extent);\r\n\r\n\t\tfunction makeXY() {\r\n\t\t\tplane.rotateY(Math.PI);\r\n\t\t}\r\n\t\tfunction makeXZ() {\r\n\t\t\tplane.rotateX(Math.PI / 2);\r\n\t\t}\r\n\t\tfunction makeYZ() {\r\n\t\t\tplane.rotateY(Math.PI / 2);\r\n\t\t}\r\n\t\tfunction makeViewAligned() {\r\n\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\r\n\t\tvar axisCount = inX + inY + inZ; // implicit cast to integers\r\n\r\n\t\tif (axisCount === 3) {\r\n\r\n\t\t\tthrow new Error('Arbitrary dragging currently unsupported. Please lock at least one axis.');\r\n\r\n\t\t} else if (axisCount === 2) {\r\n\r\n\t\t\tif (inX && inY) {\r\n\t\t\t\tmakeXY();\r\n\t\t\t} else if (inX && inZ) {\r\n\t\t\t\tmakeXZ();\r\n\t\t\t} else if (inY && inZ) {\r\n\t\t\t\tmakeYZ();\r\n\t\t\t}\r\n\r\n\t\t} else if (axisCount === 1) {\r\n\r\n\t\t\tthrow new Error('Single axis dragging currently unsupported.');\r\n\t\t\t//TODO: make possible, possibly via view-aligned plane \r\n\r\n\t\t} else {\r\n\t\t\tthrow new Error('Invalid axis configuration');\r\n\t\t}\r\n\t\tvar material = new THREE.MeshBasicMaterial({ color: 'purple' });\r\n\t\tmaterial.side = THREE.DoubleSide;\r\n\t\tintersector = new THREE.Mesh(plane, material);\r\n\t\tintersector.visible = false;// ensures other raycasters don't hit our intersector\r\n\t\tintersector.material.visible = false;// ensures we never see flicker during temp visibility\r\n\t}\r\n\r\n\tfunction getWorldPosition(obj) {\r\n\t\tobj.updateMatrixWorld();\r\n\t\tvar vec = new THREE.Vector3();\r\n\t\tvec.setFromMatrixPosition(obj.matrixWorld);\r\n\t\treturn vec;\r\n\t}\r\n\r\n\tfunction vec2str(vec) {\r\n\t\tfunction shortNum(num) {\r\n\t\t\treturn Math.floor(num * 100) / 100;\r\n\t\t}\r\n\t\treturn 'x: ' + shortNum(vec.x) + ', y: ' + shortNum(vec.y) + ', z: ' + shortNum(vec.z);\r\n\t}\r\n\r\n\tfunction startDrag(event) {\r\n\t\tscene.addEventListener('cursorup', stopDrag);\r\n\t\tscene.addEventListener('cursormove', moveDrag);\r\n\r\n\t\t//Remember difference between center of object and drag point. \r\n\t\t//Otherwise, object appears to 'jump' when selected, moving so its\r\n\t\t//center is directly until the cursor. We allow drag on edge of object.\r\n\t\traycaster.set(event.ray.origin, event.ray.direction);\r\n\t\tvar hit = raycaster.intersectObject(object3d, true)[0];\r\n\t\tif (!hit) return;\r\n\t\tvar dragPoint = hit.point.clone();\r\n\t\tvar objectCenterPoint = getWorldPosition(object3d).clone();\r\n\t\tdragOffset.copy(dragPoint).sub(objectCenterPoint);\r\n\r\n\t\t//Move to drag point (not object center), where raycast hits the object.\r\n\t\tintersector.position.copy(dragPoint);\r\n\t\tintersector.updateMatrixWorld();// necessary for raycast, TODO: Make GH issue\r\n\t}\r\n\r\n\tfunction moveDrag(event) {\r\n\r\n\t\tif (sync && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t//find intersection\r\n\t\tintersector.visible = true;// allow our intersector to be intersected\r\n\t\traycaster.set(event.ray.origin, event.ray.direction);\r\n\t\tvar intersection = raycaster.intersectObject(intersector, true)[0];\r\n\t\tintersector.visible = false;// disallow our intersector to be intersected\r\n\r\n\t\tif (!intersection) return;\r\n\r\n\t\t//New position is intersection point minus offset. Need offset since\r\n\t\t//user probably won't click on exact center of object to drag it.\r\n\t\tvar targetWorldPosition = new THREE.Vector3();\r\n\t\ttargetWorldPosition.copy(intersection.point).sub(dragOffset);\r\n\t\t//But maintain the original y position of the object.\r\n\t\ttargetWorldPosition.y = getWorldPosition(object3d).y;\r\n\r\n\t\t//constrain target position\r\n\t\ttargetWorldPosition.clamp(min, max);\r\n\r\n\t\t//move object\r\n\t\tobject3d.parent.updateMatrixWorld();\r\n\t\tvar targetLocalPosition = object3d.parent.worldToLocal(targetWorldPosition);//TODO: Test with nested objects\r\n\t\tobject3d.position.set(\r\n\t\t\tconfig.x ? targetLocalPosition.x : object3d.position.x,\r\n\t\t\tconfig.y ? targetLocalPosition.y : object3d.position.y,\r\n\t\t\tconfig.z ? targetLocalPosition.z : object3d.position.z\r\n\t\t);\r\n\r\n\t}\r\n\r\n\tfunction stopDrag() {\r\n\t\tscene.removeEventListener('cursorup', stopDrag);\r\n\t\tscene.removeEventListener('cursormove', moveDrag);\r\n\t}\r\n\r\n\tfunction start() {\r\n\t\tobject3d.addEventListener('cursordown', startDrag);\r\n\t}\r\n\r\n\treturn { awake: awake, start: start };\r\n};\r\n\n/**\r\n * @module altspace/utilities/behaviors\r\n */\r\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * Allows an object to be moved, rotated, and scaled using a gamepad controller.\r\n * Left stick left / right and up / down moves object in the X-Y plane.\r\n * Clicking left stick enters left alt mode, where movement is in X-Z plane.\r\n * Clicking left stick again exits left alt mode.\r\n * Right stick left / right rotates object clockwise / counterclockwise (y axis).\r\n * Rifht stick up / down rotates object away forwards / backwards (x axis).\r\n * Clicking right stick enters right alt mode, where left / right tumbles object (z axis).\r\n * Clicking right stick again exits right alt mode.\r\n * D-pad up / down scales object.\r\n * Back / reset button resets object to its original position and rotation.\r\n *\r\n * @param {Boolean} [config.position=true] Whether object's position can be changed.\r\n * @param {Boolean} [config.rotation=true] Whether object's rotation can be changed.\r\n * @param {Boolean} [config.scale=true] Whether object's scale can be changed.\r\n *\r\n * @class GamepadControls\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\naltspace.utilities.behaviors.GamepadControls = function (config) {\r\n\tvar object3d;\r\n\tvar gamepad;\r\n\tvar scene;\r\n\tvar sync;\r\n\r\n\tvar isAltModeR= false;\r\n\tvar isAltModeL= false;\r\n\tvar prevAltButtonR = false;\r\n\tvar prevAltButtonL = false;\r\n\tvar isInitialized = false;\r\n\r\n\tvar originalObj;//used to reset\r\n\tvar tolerance = 0.2;//ignore stick deadzone\r\n\r\n\tconfig = config || {};\r\n\tif (config.position === undefined) config.position = true;\r\n\tif (config.rotation === undefined) config.rotation = true;\r\n\tif (config.scale === undefined) config.scale = true;\r\n\r\n\tfunction awake(o, s) {\r\n\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\tsync = object3d.getBehaviorByType('Object3DSync');\r\n\t\toriginalObj = object3d.clone();\r\n\t\tgamepad = getGamepad();\r\n\t\tif (gamepad) {\r\n\t\t\tconsole.log('Gamepad detected: ' + gamepad.id);\r\n\t\t} else {\r\n\t\t\tvar intervalID = setInterval(function() {\r\n\t\t\t\tgamepad = getGamepad();\r\n\t\t\t\tif (gamepad) {\r\n\t\t\t\t\tconsole.log('Gamepad connected: ' + gamepad.id);\r\n\t\t\t\t\tclearInterval(intervalID);\r\n\t\t\t\t}\r\n\t\t\t}, 500);\r\n\t\t}\r\n\r\n\t\tscene.addEventListener('cursordown', function(e) {\r\n\t\t\t//preventDefault only works when app has focus, so call after initial click\r\n\t\t\tif (gamepad && !isInitialized) {\r\n\t\t\t\tpreventDefault(gamepad);\r\n\t\t\t\tisInitialized = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tfunction getGamepad() {\r\n\t\tif (altspace && altspace.inClient) {\r\n\t\t\tgamepads = altspace.getGamepads();\r\n\t\t} else {\r\n\t\t\t//Gamepad API works in Chrome and Firefox browsers only\r\n\t\t\t//https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API\r\n\t\t\tgamepads = navigator.getGamepads();\r\n\t\t}\r\n\t\tif (gamepads.length > 0) {\r\n\t\t\tfor (var i=0; i < gamepads.length; i++) {\r\n\t\t\t\tvar g = gamepads[i];\r\n\t\t\t\tif (g && g.axes && g.axes.length === 4 && g.buttons && g.buttons.length === 16) {\r\n\t\t\t\t\tif (altspace && altspace.inClient) preventDefault(g);\r\n\t\t\t\t\treturn g;//return first valid gamepad\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tfunction preventDefault(g) {\r\n\t\tvar axes = [];\r\n\t\tvar buttons = [];\r\n\t\tfor (var i=0; i > g.buttons; i++) buttons[i] = false;\r\n\t\tfor (var i=0; i > g.axes; i++) axes[i] = false;\r\n\t\tif (config.position) {\r\n\t\t\taxes[0] = true;\r\n\t\t\taxes[1] = true;\r\n\t\t\tbuttons[10] = true;\r\n\t\t}\r\n\t\tif (config.rotation) {\r\n\t\t\taxes[2] = true;\r\n\t\t\taxes[3] = true;\r\n\t\t\tbuttons[11] = true;\r\n\t\t}\r\n\t\tif (config.scale) {\r\n\t\t\tbuttons[12] = true;\r\n\t\t\tbuttons[13] = true;\r\n\t\t}\r\n\t\tbuttons[8] = true;\r\n\t\tg.preventDefault(axes, buttons);\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tif ((!altspace || !altspace.inClient) && window.chrome && gamepad) {\r\n\t\t\tgamepad = getGamepad();//On Chrome, need to poll for updates.\r\n\t\t}\r\n\t\tif (!gamepad) return;\r\n\r\n\t\t//For axis and button numbers see: https://w3c.github.io/gamepad/ \r\n\t\tvar isResetButton = gamepad.buttons[8].pressed;//reset / back button\r\n\t\tif (isResetButton) {\r\n\t\t\tif (!sync.isMine) sync.takeOwnership();\r\n\t\t\tobject3d.position.copy(originalObj.position);\r\n\t\t\tobject3d.rotation.copy(originalObj.rotation);\r\n\t\t\tobject3d.scale.copy(originalObj.scale);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (config.position) {\r\n\t\t\tvar isAltButtonL = gamepad.buttons[10].pressed;//left stick button\r\n\t\t\tif (prevAltButtonL && !isAltButtonL) isAltModeL = !isAltModeL;//button released\r\n\t\t\tprevAltButtonL = isAltButtonL;\r\n\r\n\t\t\tvar leftStickX = gamepad.axes[0];//left / right\r\n\t\t\tvar leftStickY = gamepad.axes[1];//up / down\r\n\r\n\t\t\tvar isMove = Math.abs(leftStickX) > tolerance || Math.abs(leftStickY) > tolerance;\r\n\t\t\tif (isMove && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t\tvar moveDistance = 200 * (deltaTime/1000);// 200 units per second\r\n\t\t\tif (!isAltModeL && Math.abs(leftStickX) > tolerance) {\r\n\t\t\t\tobject3d.position.x += moveDistance * leftStickX;\r\n\t\t\t}\r\n\t\t\tif (!isAltModeL && Math.abs(leftStickY) > tolerance) {\r\n\t\t\t\tobject3d.position.z += moveDistance * leftStickY;\r\n\t\t\t}\r\n\t\t\tif (isAltModeL && Math.abs(leftStickX) > tolerance) {\r\n\t\t\t\tobject3d.position.x += moveDistance * leftStickX;\r\n\t\t\t}\r\n\t\t\tif (isAltModeL && Math.abs(leftStickY) > tolerance) {\r\n\t\t\t\tobject3d.position.y += moveDistance * -leftStickY;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (config.rotation) {\r\n\t\t\tvar isAltButtonR = gamepad.buttons[11].pressed;//right stick button\r\n\t\t\tif (prevAltButtonR && !isAltButtonR) isAltModeR = !isAltModeR;//button released\r\n\t\t\tprevAltButtonR = isAltButtonR;\r\n\r\n\t\t\tvar rightStickX = gamepad.axes[2];//left / right\r\n\t\t\tvar rightStickY = gamepad.axes[3];//up / down\r\n\r\n\t\t\tvar isRotate = Math.abs(rightStickX) > tolerance || Math.abs(rightStickY) > tolerance;\r\n\t\t\tif (isRotate && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t\tvar rotateAngle = Math.PI * (deltaTime/1000);// 180 degrees per second\r\n\t\t\tif (!isAltModeR && Math.abs(rightStickX) > tolerance) {\r\n\t\t\t\tobject3d.rotation.y += rotateAngle * rightStickX;\r\n\t\t\t}\r\n\t\t\tif (!isAltModeR && Math.abs(rightStickY) > tolerance) {\r\n\t\t\t\tobject3d.rotation.x += rotateAngle * rightStickY;\r\n\t\t\t}\r\n\t\t\tif (isAltModeR && Math.abs(rightStickX) > tolerance) {\r\n\t\t\t\tobject3d.rotation.z += rotateAngle * -rightStickX;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (config.scale) {\r\n\t\t\tvar scaleChange = 10 * (deltaTime/1000);// 10 units per second\r\n\t\t\tvar dpadUp = gamepad.buttons[12].pressed;//d-pad up\r\n\t\t\tvar dpadDown = gamepad.buttons[13].pressed;//d-pad down\r\n\r\n\t\t\tvar isScale = gamepad.buttons[12].pressed || gamepad.buttons[13].pressed;\r\n\t\t\tif (isScale && !sync.isMine) sync.takeOwnership();\r\n\r\n\t\t\tvar prev = object3d.scale;\r\n\t\t\tvar v3 = new THREE.Vector3(1, 1, 1);\r\n\t\t\tv3.multiplyScalar(scaleChange);\r\n\t\t\tif (dpadUp) object3d.scale.add(v3);\r\n\t\t\tif (dpadDown) {\r\n\t\t\t\tif (prev.x > v3.x && prev.y > v3.y && prev.z > v3.z) {//Don't go negative.\r\n\t\t\t\t\tobject3d.scale.sub(v3);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\treturn { awake: awake, update: update };\r\n};\r\n\r\n\n//Change color of an object when cursor hovers over it.\r\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * Changes the color of an object when cursor hovers over it.\r\n * @class HoverColor\r\n * @param {Object} [config] Optional parameters.\r\n * @param {String} [config.event='cursorenter'] Specify the name of event which\r\n * triggers the color change. Default is 'cursorenter' for a hover effect.\r\n * @param {THREE.Color} [config.color=THREE.Color('yellow')] A THREE.Color value that will be applied to the object's\r\n * material.\r\n * @memberof module:altspace/utilities/behaviors\r\n */\r\naltspace.utilities.behaviors.HoverColor = function(config){\r\n\r\n\tconfig = config || {};\r\n\r\n\t//Default is to trigger color change on cursorenter/cursorleave events,\r\n\t//also support triggering on cursordown/cursorup events.\r\n\tif (config.event === undefined) config.event = 'cursorenter';\r\n\tif (config.event !== 'cursorenter' && config.event !== 'cursordown') {\r\n\t\tthrow Error('Expected config.event \"cursorenter\" or \"cursordown\"');\r\n\t}\r\n\tif (config.color === undefined) config.color = new THREE.Color('yellow');\r\n\r\n\tvar object3d;\r\n\tvar cursordownObject;\r\n\tvar cursorenterObject;\r\n\tvar scene;\r\n\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\t\tobject3d.addEventListener('cursordown', cursordown);\r\n\t\tscene.addEventListener('cursorup', cursorupScene);\r\n\t\tif (config.event === 'cursorenter') {\r\n\t\t\tobject3d.addEventListener('cursorenter', cursorenter);\r\n\t\t\tobject3d.addEventListener('cursorleave', cursorleave);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cursordown(event){\r\n\t\tcursordownObject = object3d;\r\n\t\tif (config.event === 'cursordown' ){\r\n\t\t\tsetColor(cursordownObject);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cursorenter(event){\r\n\t\t//ignore hover events if a different object is selected,\r\n\t\t//for example during a drag we don't want to change highlight\r\n\t\tif (cursordownObject && cursordownObject !== object3d){\r\n\t\t\treturn;\r\n\t\t} \r\n\t\tif (cursorenterObject){\r\n\t\t\tunsetcolor(cursorenterObject);\r\n\t\t}\r\n\t\tcursorenterObject = object3d;\r\n\t\tsetColor(object3d);\r\n\t}\r\n\r\n\tfunction cursorleave(event){\r\n\t\tif (cursorenterObject === object3d){\r\n\t\t\tcursorenterObject = null;\r\n\t\t\tunsetColor(object3d);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cursorupScene(event){\r\n\t\tif (config.event === 'cursordown' && cursordownObject ){\r\n\t\t\tunsetColor(cursordownObject);\r\n\t\t}\r\n\t\tcursordownObject = null;\r\n\t}\r\n\r\n\tfunction setColor(o){\r\n\t\tif (o.material && o.material.color){\r\n\t\t\to.userData.origColor = o.material.color;\r\n\t\t\to.material.color = config.color; \r\n\t\t\t//Not strictly needed but seems to make updating faster in Altspace.\r\n\t\t\tif (o.material) o.material.needsUpdate = true;\r\n\t\t} \r\n\t\tfor (var i = 0; i < o.children.length; i++){\r\n\t\t\tsetColor(o.children[i], config.color);//recursively apply to children\r\n\t\t}\r\n\t}\r\n\r\n\tfunction unsetColor(o){\r\n\t\tif (o.material && o.material.color){\r\n\t\t\tif (!o.userData.origColor){\r\n\t\t\t\tconsole.error('Cannot unsetColor, no userData.origColor for object', o);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\to.material.color = o.userData.origColor;\r\n\t\t\tif (o.material) o.material.needsUpdate = true;\r\n\t\t} \r\n\t\tfor (var i = 0; i < o.children.length; i++){\r\n\t\t\tunsetColor(o.children[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tawake: awake,\r\n\t\t//no update method, event-driven\r\n\t};\r\n\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The SceneSync behavior manages the synchronization of an entire scene.\r\n *\r\n * @class SceneSync\r\n * @param {Firebase} syncInstance\r\n * @param {Object} [config]\r\n * @param {Object} [config.instantiators] A dictionary of instantiation \r\n * callbacks by syncType. Instantiators are called on every client whenever an instantiation call is made. Instantiators are passed an initialization\r\n * data object and the syncType. They should return an Object3D with an \r\n * Object3DSync behavior.\r\n * @param {Object} [config.destroyers] (Optional) A dictionary of destroy \r\n * callbacks by syncType. Destroyers are called on every client whenever an destroy call is made. If no destroyer is provided, a default one will be use\r\n * which will remove the object from its parent and dispose its geometry, material, and texture. \r\n * If you return true from a custom destroyer, the default destroyer will also be called.\r\n * @param {Function} [config.ready] A callback that is called after \r\n * checking to see if the instance has already been initialized. The callback is passed a boolean that \r\n * is true if this is the first callback that has been called for this sync instance.\r\n * This is primarily useful for setting up any objects that should only be created once for an instance, and is not necessary otherwise.\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\nwindow.altspace.utilities.behaviors.SceneSync = function (instanceRef, config) {\r\n\tvar sceneRef = instanceRef.child('scene');\r\n\tvar clientsRef = instanceRef.child('clients');\r\n\r\n\tconfig = config || {};\r\n\tvar instantiators = config.instantiators || {};\r\n\tvar destroyers = config.destroyers || {};\r\n\r\n\tvar autoSendRateMS = 100;\r\n\r\n\tvar syncBehaviors = [];\r\n\tvar objectForKey = {};\r\n\tvar keyForUuid = {};\r\n\r\n\tvar clientId;\r\n\t// there should always be one master client in the room. For now it will be the longest person online.\r\n\tvar masterClientId;\r\n\r\n\tfunction autoSendAll() {\r\n\t\tfor (var i = 0, max = syncBehaviors.length; i < max; i++) {\r\n\t\t\tsyncBehaviors[i].autoSend();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction awake(o, s) {\r\n\t\tsetInterval(autoSendAll, autoSendRateMS);\r\n\r\n\t\tvar scene = s;\r\n\r\n\t\t// temporary way of having unique identifiers for each client\r\n\t\tclientId = scene.uuid;\r\n\t\tclientsRef.on(\"value\", function (snapshot) {\r\n\t\t\tvar clientIds = snapshot.val();\r\n\r\n\t\t\tif (!clientIds) return;\r\n\r\n\t\t\tmasterClientKey = Object.keys(clientIds)[0];\r\n\t\t\tmasterClientId = clientIds[masterClientKey];\r\n\t\t});\r\n\t\t// add our client ID to the list of connected clients, \r\n\t\t// but have it be automatically removed by firebase if we disconnect for any reason\r\n\t\tclientsRef.push(clientId).onDisconnect().remove();\r\n\r\n\t\tinstanceRef.child('initialized').once('value', function (snapshot) {\r\n\t\t\tvar shouldInitialize = !snapshot.val();\r\n\t\t\tsnapshot.ref().set(true);\r\n\t\t\tif (config.ready) {\r\n\t\t\t\tconfig.ready(shouldInitialize);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\r\n\t\tsceneRef.on('child_added', onInstantiate.bind(this));\r\n\t\tsceneRef.on('child_removed', onDestroy.bind(this));\r\n\t}\r\n\r\n\t/**\r\n\t * Instantiate an object by syncType.\r\n\t * @instance\r\n\t * @method instantiate\r\n\t * @param {String} syncType Type of object to instantiate.\r\n\t * @param {Object} initData An object containing initialization data, passed\r\n\t * to the instantiator.\r\n\t * @param {Boolean} destroyOnDisconnect If the object should be destroyed\r\n\t * across all synced instance when the instantiating instance disconnects.\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tfunction instantiate(syncType, initData, destroyOnDisconnect) {\r\n\t\tinitData = initData || {};\r\n\t\tvar objectRef = sceneRef.push({ syncType: syncType, initData: initData },\r\n\t\t\tfunction (error) { if (error) throw Error('Failed to save to Firebase', error) }\r\n\t\t);\r\n\t\tif (destroyOnDisconnect) {\r\n\t\t\tobjectRef.onDisconnect().remove();//send remvoe_child to remote clients\r\n\t\t}\r\n\t\t//instantiation done, local child_added callback happens syncronously with push\r\n\t\tvar object = objectForKey[objectRef.key()];\r\n\t\tobject.getBehaviorByType('Object3DSync').takeOwnership();\r\n\t\treturn object;\r\n\t}\r\n\r\n\tfunction onInstantiate(snapshot) {\r\n\r\n\t\tvar data = snapshot.val();\r\n\t\tvar key = snapshot.key();\r\n\r\n\t\tvar instantiator = instantiators[data.syncType];\r\n\r\n\t\tif (!instantiator) {\r\n\t\t\tconsole.warn('No instantiator found for syncType: ' + data.syncType);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar object3d = instantiator(data.initData, data.syncType);\r\n\t\tif (!object3d) {\r\n\t\t\tconsole.error(data.syncType + '.create must return an Object3D');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tobjectForKey[key] = object3d;\r\n\t\tkeyForUuid[object3d.uuid] = key;\r\n\r\n\t\tvar syncBehavior = object3d.getBehaviorByType('Object3DSync');\r\n\t\tif (!syncBehavior) {\r\n\t\t\tconsole.error(data.syncType + ' instantiator must return an Object3D with an Object3DSync behavior');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsyncBehaviors.push(syncBehavior);\r\n\t\tsyncBehavior.link(snapshot.ref(), this);\r\n\t}\r\n\r\n\t/**\r\n\t * Destroy a synced object across instances.\r\n\t * @instance\r\n\t * @method destroy\r\n\t * @param {Object} object3d The object to destroy.\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tfunction destroy(object3d) {\r\n\t\tvar key = keyForUuid[object3d.uuid];\r\n\t\tif (!key) {\r\n\t\t\tconsole.warn('Failed to find key for object3d to be destroyed', object3d);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsceneRef.child(key).remove(function (error) {\r\n\t\t\tif (error) console.warn('Failed to remove from Firebase', error);\r\n\t\t});\r\n\t\tsceneRef.child(key).off();//detach all callbacks\r\n\t}\r\n\r\n\tfunction onDestroy(snapshot) {\r\n\t\tvar data = snapshot.val();\r\n\t\tvar key = snapshot.key();\r\n\t\tvar object3d = objectForKey[key];\r\n\t\tif (!object3d) {\r\n\t\t\tconsole.warn('Failed to find object matching deleted key', key);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar syncType = data.syncType;\r\n\t\tif (!syncType) {\r\n\t\t\tconsole.warn('No syncType found for object being destroyed', object3d);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfunction defaultDestroyer(object3d) {\r\n\r\n\t\t\t// remove all behaviors including this one\r\n\t\t\tobject3d.removeAllBehaviors();\r\n\r\n\t\t\t// remove from scene or parent\r\n\t\t\tif (object3d.parent) {\r\n\t\t\t\tobject3d.parent.remove(object3d);\r\n\t\t\t}\r\n\r\n\t\t\tif (object3d.geometry) {\r\n\t\t\t\tobject3d.geometry.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (object3d.material) {\r\n\t\t\t\tif (object3d.material.map) {\r\n\t\t\t\t\tobject3d.material.map.dispose();\r\n\t\t\t\t}\r\n\t\t\t\tobject3d.material.dispose();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar customDestroyer = destroyers[syncType]\r\n\t\tvar shouldDefaultDestroy = !customDestroyer;\r\n\r\n\t\tif (customDestroyer) {\r\n\r\n\t\t\t// returning true from a destroyer will additionally invoke the default destroyer\r\n\t\t\tshouldDefaultDestroy = customDestroyer(object3d);\r\n\t\t}\r\n\r\n\t\tif (shouldDefaultDestroy) defaultDestroyer(object3d);\r\n\r\n\t\t//remove from our local bookkeeping\r\n\t\tdelete objectForKey[key];\r\n\t\tdelete keyForUuid[object3d.uuid];\r\n\t}\r\n\r\n\tvar exports = {\r\n\t\tawake: awake,\r\n\t\tinstantiate: instantiate,\r\n\t\tdestroy: destroy,\r\n\t\ttype: 'SceneSync'\r\n\t};\r\n\r\n\t/**\r\n\t * Interval at which an object's position/rotation/scale data is sent to Firebase,\r\n\t * in milliseconds.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {number} autoSendRateMS\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'autoSendRateMS', {\r\n\t\tget: function () { return autoSendRateMS; }\r\n\t});\r\n\r\n\t/**\r\n\t * True if this client is the master, false otherwise. Master is generally the client that \r\n\t * has been in the room the longest.\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {boolean} isMasterClient\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'isMasterClient', {\r\n\t\tget: function () { return masterClientId === clientId; }\r\n\t});\r\n\r\n\t/**\r\n\t * UUID of the current client. \r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {string} clientId\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'clientId', {\r\n\t\tget: function () { return clientId; }\r\n\t});\r\n\r\n\t/**\r\n\t * Firebase reference for the 'clients' child location. Can be used by app to listen\r\n\t * to clients entering and leaving the room (but generally should not be modified by apps).\r\n\t * @readonly\r\n\t * @instance\r\n\t * @member {Firebase} clientsRef\r\n\t * @memberof module:altspace/utilities/behaviors.SceneSync\r\n\t */\r\n\tObject.defineProperty(exports, 'clientsRef', {\r\n\t\tget: function () { return clientsRef; }\r\n\t});\r\n\treturn exports;\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\n/**\r\n * The Spin behavior adds a spinning animation to an object.\r\n *\r\n * @class Spin\r\n * @param {Object} [config]\r\n * @param {Number} [config.speed=0.0001] Rotation speed in radians per \r\n * millisecond\r\n * @memberof module:altspace/utilities/behaviors\r\n **/\r\naltspace.utilities.behaviors.Spin = function (config) {\r\n\r\n\tconfig = config || {};\r\n\r\n\tif (config.speed === undefined) config.speed = 0.0001;\r\n\r\n\tvar object3d;\r\n\r\n\tfunction awake(o) {\r\n\t\tobject3d = o;\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tobject3d.rotation.y += config.speed * deltaTime;\r\n\t}\r\n\r\n\treturn { awake: awake, update: update };\r\n};\r\n\nwindow.altspace = window.altspace || {};\r\nwindow.altspace.utilities = window.altspace.utilities || {};\r\nwindow.altspace.utilities.behaviors = window.altspace.utilities.behaviors || {};\r\n\r\naltspace.utilities.behaviors.TouchpadRotate = function (config) {\r\n\tconfig = config || {};\r\n\r\n\tvar object3d;\r\n\tvar scene;\r\n\r\n\tvar startingRotation;\r\n\r\n\tvar activelyRotating = false;\r\n\r\n\tfunction awake(o, s) {\r\n\t\tobject3d = o;\r\n\t\tscene = s;\r\n\r\n\t\taltspace.addEventListener('touchpadup', onTouchpadUp);\r\n\t\taltspace.addEventListener('touchpaddown', onTouchpadDown);\r\n\t\taltspace.addEventListener('touchpadmove', onTouchpadMove);\r\n\t}\r\n\r\n\tfunction onTouchpadUp(event) {\r\n\t\tactivelyRotating = false;\r\n\t}\r\n\r\n\tfunction onTouchpadDown(event) {\r\n\t\tactivelyRotating = true;\r\n\t\tstartingRotation = object3d.rotation.clone();\r\n\t}\r\n\r\n\tvar lastDisplacementX = 0;\r\n\r\n\tvar runningCount = 5;\r\n\tvar runningAverageVelocityX = 0;\r\n\r\n\tfunction onTouchpadMove(event) {\r\n\t\tvar deltaX = event.displacementX - lastDisplacementX;\r\n\t\tobject3d.rotation.set(startingRotation.x, startingRotation.y + event.displacementX / 300, startingRotation.z);\r\n\r\n\t\trunningAverageVelocityX = ((runningAverageVelocityX * runningCount) + deltaX / 300) / (runningCount + 1);\r\n\t\tlastDisplacementX = event.displacementX;\r\n\t}\r\n\r\n\tfunction update(deltaTime) {\r\n\t\tif (!activelyRotating && Math.abs(runningAverageVelocityX) > 0.01) {\r\n\t\t\tobject3d.rotation.y += runningAverageVelocityX;\r\n\t\t\trunningAverageVelocityX *= 0.97;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction start() {\r\n\t}\r\n\r\n\treturn { awake: awake, start: start, update: update };\r\n};\r\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 ? arguments[1] : undefined, 3)\n , entry;\n while(entry = entry ? entry.n : this._f){\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while(entry && entry.r)entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key){\n return !!getEntry(this, key);\n }\n });\n if(DESCRIPTORS)$.setDesc(C.prototype, 'size', {\n get: function(){\n return defined(this[SIZE]);\n }\n });\n return C;\n },\n def: function(that, key, value){\n var entry = getEntry(that, key)\n , prev, index;\n // change existing entry\n if(entry){\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if(!that._f)that._f = entry;\n if(prev)prev.n = entry;\n that[SIZE]++;\n // add to index\n if(index !== 'F')that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function(C, NAME, IS_MAP){\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function(iterated, kind){\n this._t = iterated; // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function(){\n var that = this\n , kind = that._k\n , entry = that._l;\n // revert to the last existing entry\n while(entry && entry.r)entry = entry.p;\n // get next entry\n if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if(kind == 'keys' )return step(0, entry.k);\n if(kind == 'values')return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n},{\"./$\":44,\"./$.ctx\":23,\"./$.defined\":24,\"./$.descriptors\":25,\"./$.for-of\":29,\"./$.has\":32,\"./$.hide\":33,\"./$.is-object\":37,\"./$.iter-define\":40,\"./$.iter-step\":42,\"./$.redefine-all\":48,\"./$.set-species\":50,\"./$.strict-new\":53,\"./$.uid\":59}],20:[function(require,module,exports){\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar forOf = require('./$.for-of')\n , classof = require('./$.classof');\nmodule.exports = function(NAME){\n return function toJSON(){\n if(classof(this) != NAME)throw TypeError(NAME + \"#toJSON isn't generic\");\n var arr = [];\n forOf(this, false, arr.push, arr);\n return arr;\n };\n};\n},{\"./$.classof\":17,\"./$.for-of\":29}],21:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , global = require('./$.global')\n , $export = require('./$.export')\n , fails = require('./$.fails')\n , hide = require('./$.hide')\n , redefineAll = require('./$.redefine-all')\n , forOf = require('./$.for-of')\n , strictNew = require('./$.strict-new')\n , isObject = require('./$.is-object')\n , setToStringTag = require('./$.set-to-string-tag')\n , DESCRIPTORS = require('./$.descriptors');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n var Base = global[NAME]\n , C = Base\n , ADDER = IS_MAP ? 'set' : 'add'\n , proto = C && C.prototype\n , O = {};\n if(!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n new C().entries().next();\n }))){\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n } else {\n C = wrapper(function(target, iterable){\n strictNew(target, C, NAME);\n target._c = new Base;\n if(iterable != undefined)forOf(iterable, IS_MAP, target[ADDER], target);\n });\n $.each.call('add,clear,delete,forEach,get,has,set,keys,values,entries'.split(','),function(KEY){\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if(KEY in proto && !(IS_WEAK && KEY == 'clear'))hide(C.prototype, KEY, function(a, b){\n if(!IS_ADDER && IS_WEAK && !isObject(a))return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n if('size' in proto)$.setDesc(C.prototype, 'size', {\n get: function(){\n return this._c.size;\n }\n });\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F, O);\n\n if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n},{\"./$\":44,\"./$.descriptors\":25,\"./$.export\":27,\"./$.fails\":28,\"./$.for-of\":29,\"./$.global\":31,\"./$.hide\":33,\"./$.is-object\":37,\"./$.redefine-all\":48,\"./$.set-to-string-tag\":51,\"./$.strict-new\":53}],22:[function(require,module,exports){\nvar core = module.exports = {version: '1.2.6'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n},{}],23:[function(require,module,exports){\n// optional / simple context binding\nvar aFunction = require('./$.a-function');\nmodule.exports = function(fn, that, length){\n aFunction(fn);\n if(that === undefined)return fn;\n switch(length){\n case 1: return function(a){\n return fn.call(that, a);\n };\n case 2: return function(a, b){\n return fn.call(that, a, b);\n };\n case 3: return function(a, b, c){\n return fn.call(that, a, b, c);\n };\n }\n return function(/* ...args */){\n return fn.apply(that, arguments);\n };\n};\n},{\"./$.a-function\":14}],24:[function(require,module,exports){\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n if(it == undefined)throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n},{}],25:[function(require,module,exports){\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./$.fails')(function(){\n return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n},{\"./$.fails\":28}],26:[function(require,module,exports){\n// all enumerable object keys, includes symbols\nvar $ = require('./$');\nmodule.exports = function(it){\n var keys = $.getKeys(it)\n , getSymbols = $.getSymbols;\n if(getSymbols){\n var symbols = getSymbols(it)\n , isEnum = $.isEnum\n , i = 0\n , key;\n while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key);\n }\n return keys;\n};\n},{\"./$\":44}],27:[function(require,module,exports){\nvar global = require('./$.global')\n , core = require('./$.core')\n , ctx = require('./$.ctx')\n , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n var IS_FORCED = type & $export.F\n , IS_GLOBAL = type & $export.G\n , IS_STATIC = type & $export.S\n , IS_PROTO = type & $export.P\n , IS_BIND = type & $export.B\n , IS_WRAP = type & $export.W\n , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n , key, own, out;\n if(IS_GLOBAL)source = name;\n for(key in source){\n // contains in native\n own = !IS_FORCED && target && key in target;\n if(own && key in exports)continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function(C){\n var F = function(param){\n return this instanceof C ? new C(param) : C(param);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\nmodule.exports = $export;\n},{\"./$.core\":22,\"./$.ctx\":23,\"./$.global\":31}],28:[function(require,module,exports){\nmodule.exports = function(exec){\n try {\n return !!exec();\n } catch(e){\n return true;\n }\n};\n},{}],29:[function(require,module,exports){\nvar ctx = require('./$.ctx')\n , call = require('./$.iter-call')\n , isArrayIter = require('./$.is-array-iter')\n , anObject = require('./$.an-object')\n , toLength = require('./$.to-length')\n , getIterFn = require('./core.get-iterator-method');\nmodule.exports = function(iterable, entries, fn, that){\n var iterFn = getIterFn(iterable)\n , f = ctx(fn, that, entries ? 2 : 1)\n , index = 0\n , length, step, iterator;\n if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n call(iterator, f, step.value, entries);\n }\n};\n},{\"./$.an-object\":16,\"./$.ctx\":23,\"./$.is-array-iter\":35,\"./$.iter-call\":38,\"./$.to-length\":57,\"./core.get-iterator-method\":61}],30:[function(require,module,exports){\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./$.to-iobject')\n , getNames = require('./$').getNames\n , toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n try {\n return getNames(it);\n } catch(e){\n return windowNames.slice();\n }\n};\n\nmodule.exports.get = function getOwnPropertyNames(it){\n if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it);\n return getNames(toIObject(it));\n};\n},{\"./$\":44,\"./$.to-iobject\":56}],31:[function(require,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n},{}],32:[function(require,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n return hasOwnProperty.call(it, key);\n};\n},{}],33:[function(require,module,exports){\nvar $ = require('./$')\n , createDesc = require('./$.property-desc');\nmodule.exports = require('./$.descriptors') ? function(object, key, value){\n return $.setDesc(object, key, createDesc(1, value));\n} : function(object, key, value){\n object[key] = value;\n return object;\n};\n},{\"./$\":44,\"./$.descriptors\":25,\"./$.property-desc\":47}],34:[function(require,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./$.cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n},{\"./$.cof\":18}],35:[function(require,module,exports){\n// check on default Array iterator\nvar Iterators = require('./$.iterators')\n , ITERATOR = require('./$.wks')('iterator')\n , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n},{\"./$.iterators\":43,\"./$.wks\":60}],36:[function(require,module,exports){\n// 7.2.2 IsArray(argument)\nvar cof = require('./$.cof');\nmodule.exports = Array.isArray || function(arg){\n return cof(arg) == 'Array';\n};\n},{\"./$.cof\":18}],37:[function(require,module,exports){\nmodule.exports = function(it){\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n},{}],38:[function(require,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = require('./$.an-object');\nmodule.exports = function(iterator, fn, value, entries){\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch(e){\n var ret = iterator['return'];\n if(ret !== undefined)anObject(ret.call(iterator));\n throw e;\n }\n};\n},{\"./$.an-object\":16}],39:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , descriptor = require('./$.property-desc')\n , setToStringTag = require('./$.set-to-string-tag')\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./$.hide')(IteratorPrototype, require('./$.wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n},{\"./$\":44,\"./$.hide\":33,\"./$.property-desc\":47,\"./$.set-to-string-tag\":51,\"./$.wks\":60}],40:[function(require,module,exports){\n'use strict';\nvar LIBRARY = require('./$.library')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , hide = require('./$.hide')\n , has = require('./$.has')\n , Iterators = require('./$.iterators')\n , $iterCreate = require('./$.iter-create')\n , setToStringTag = require('./$.set-to-string-tag')\n , getProto = require('./$').getProto\n , ITERATOR = require('./$.wks')('iterator')\n , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n , FF_ITERATOR = '@@iterator'\n , KEYS = 'keys'\n , VALUES = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n $iterCreate(Constructor, NAME, next);\n var getMethod = function(kind){\n if(!BUGGY && kind in proto)return proto[kind];\n switch(kind){\n case KEYS: return function keys(){ return new Constructor(this, kind); };\n case VALUES: return function values(){ return new Constructor(this, kind); };\n } return function entries(){ return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator'\n , DEF_VALUES = DEFAULT == VALUES\n , VALUES_BUG = false\n , proto = Base.prototype\n , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n , $default = $native || getMethod(DEFAULT)\n , methods, key;\n // Fix native\n if($native){\n var IteratorPrototype = getProto($default.call(new Base));\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // FF fix\n if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n // fix Array#{values, @@iterator}.name in V8 / FF\n if(DEF_VALUES && $native.name !== VALUES){\n VALUES_BUG = true;\n $default = function values(){ return $native.call(this); };\n }\n }\n // Define iterator\n if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if(DEFAULT){\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: !DEF_VALUES ? $default : getMethod('entries')\n };\n if(FORCED)for(key in methods){\n if(!(key in proto))redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n},{\"./$\":44,\"./$.export\":27,\"./$.has\":32,\"./$.hide\":33,\"./$.iter-create\":39,\"./$.iterators\":43,\"./$.library\":46,\"./$.redefine\":49,\"./$.set-to-string-tag\":51,\"./$.wks\":60}],41:[function(require,module,exports){\nvar ITERATOR = require('./$.wks')('iterator')\n , SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function(){ SAFE_CLOSING = true; };\n Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n if(!skipClosing && !SAFE_CLOSING)return false;\n var safe = false;\n try {\n var arr = [7]\n , iter = arr[ITERATOR]();\n iter.next = function(){ safe = true; };\n arr[ITERATOR] = function(){ return iter; };\n exec(arr);\n } catch(e){ /* empty */ }\n return safe;\n};\n},{\"./$.wks\":60}],42:[function(require,module,exports){\nmodule.exports = function(done, value){\n return {value: value, done: !!done};\n};\n},{}],43:[function(require,module,exports){\nmodule.exports = {};\n},{}],44:[function(require,module,exports){\nvar $Object = Object;\nmodule.exports = {\n create: $Object.create,\n getProto: $Object.getPrototypeOf,\n isEnum: {}.propertyIsEnumerable,\n getDesc: $Object.getOwnPropertyDescriptor,\n setDesc: $Object.defineProperty,\n setDescs: $Object.defineProperties,\n getKeys: $Object.keys,\n getNames: $Object.getOwnPropertyNames,\n getSymbols: $Object.getOwnPropertySymbols,\n each: [].forEach\n};\n},{}],45:[function(require,module,exports){\nvar $ = require('./$')\n , toIObject = require('./$.to-iobject');\nmodule.exports = function(object, el){\n var O = toIObject(object)\n , keys = $.getKeys(O)\n , length = keys.length\n , index = 0\n , key;\n while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n},{\"./$\":44,\"./$.to-iobject\":56}],46:[function(require,module,exports){\nmodule.exports = true;\n},{}],47:[function(require,module,exports){\nmodule.exports = function(bitmap, value){\n return {\n enumerable : !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable : !(bitmap & 4),\n value : value\n };\n};\n},{}],48:[function(require,module,exports){\nvar redefine = require('./$.redefine');\nmodule.exports = function(target, src){\n for(var key in src)redefine(target, key, src[key]);\n return target;\n};\n},{\"./$.redefine\":49}],49:[function(require,module,exports){\nmodule.exports = require('./$.hide');\n},{\"./$.hide\":33}],50:[function(require,module,exports){\n'use strict';\nvar core = require('./$.core')\n , $ = require('./$')\n , DESCRIPTORS = require('./$.descriptors')\n , SPECIES = require('./$.wks')('species');\n\nmodule.exports = function(KEY){\n var C = core[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};\n},{\"./$\":44,\"./$.core\":22,\"./$.descriptors\":25,\"./$.wks\":60}],51:[function(require,module,exports){\nvar def = require('./$').setDesc\n , has = require('./$.has')\n , TAG = require('./$.wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n},{\"./$\":44,\"./$.has\":32,\"./$.wks\":60}],52:[function(require,module,exports){\nvar global = require('./$.global')\n , SHARED = '__core-js_shared__'\n , store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n return store[key] || (store[key] = {});\n};\n},{\"./$.global\":31}],53:[function(require,module,exports){\nmodule.exports = function(it, Constructor, name){\n if(!(it instanceof Constructor))throw TypeError(name + \": use the 'new' operator!\");\n return it;\n};\n},{}],54:[function(require,module,exports){\nvar toInteger = require('./$.to-integer')\n , defined = require('./$.defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n},{\"./$.defined\":24,\"./$.to-integer\":55}],55:[function(require,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil\n , floor = Math.floor;\nmodule.exports = function(it){\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n},{}],56:[function(require,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./$.iobject')\n , defined = require('./$.defined');\nmodule.exports = function(it){\n return IObject(defined(it));\n};\n},{\"./$.defined\":24,\"./$.iobject\":34}],57:[function(require,module,exports){\n// 7.1.15 ToLength\nvar toInteger = require('./$.to-integer')\n , min = Math.min;\nmodule.exports = function(it){\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n},{\"./$.to-integer\":55}],58:[function(require,module,exports){\n// 7.1.13 ToObject(argument)\nvar defined = require('./$.defined');\nmodule.exports = function(it){\n return Object(defined(it));\n};\n},{\"./$.defined\":24}],59:[function(require,module,exports){\nvar id = 0\n , px = Math.random();\nmodule.exports = function(key){\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n},{}],60:[function(require,module,exports){\nvar store = require('./$.shared')('wks')\n , uid = require('./$.uid')\n , Symbol = require('./$.global').Symbol;\nmodule.exports = function(name){\n return store[name] || (store[name] =\n Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));\n};\n},{\"./$.global\":31,\"./$.shared\":52,\"./$.uid\":59}],61:[function(require,module,exports){\nvar classof = require('./$.classof')\n , ITERATOR = require('./$.wks')('iterator')\n , Iterators = require('./$.iterators');\nmodule.exports = require('./$.core').getIteratorMethod = function(it){\n if(it != undefined)return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n},{\"./$.classof\":17,\"./$.core\":22,\"./$.iterators\":43,\"./$.wks\":60}],62:[function(require,module,exports){\n'use strict';\nvar ctx = require('./$.ctx')\n , $export = require('./$.export')\n , toObject = require('./$.to-object')\n , call = require('./$.iter-call')\n , isArrayIter = require('./$.is-array-iter')\n , toLength = require('./$.to-length')\n , getIterFn = require('./core.get-iterator-method');\n$export($export.S + $export.F * !require('./$.iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n var O = toObject(arrayLike)\n , C = typeof this == 'function' ? this : Array\n , $$ = arguments\n , $$len = $$.length\n , mapfn = $$len > 1 ? $$[1] : undefined\n , mapping = mapfn !== undefined\n , index = 0\n , iterFn = getIterFn(O)\n , length, result, step, iterator;\n if(mapping)mapfn = ctx(mapfn, $$len > 2 ? $$[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n result[index] = mapping ? call(iterator, mapfn, [step.value, index], true) : step.value;\n }\n } else {\n length = toLength(O.length);\n for(result = new C(length); length > index; index++){\n result[index] = mapping ? mapfn(O[index], index) : O[index];\n }\n }\n result.length = index;\n return result;\n }\n});\n\n},{\"./$.ctx\":23,\"./$.export\":27,\"./$.is-array-iter\":35,\"./$.iter-call\":38,\"./$.iter-detect\":41,\"./$.to-length\":57,\"./$.to-object\":58,\"./core.get-iterator-method\":61}],63:[function(require,module,exports){\n'use strict';\nvar addToUnscopables = require('./$.add-to-unscopables')\n , step = require('./$.iter-step')\n , Iterators = require('./$.iterators')\n , toIObject = require('./$.to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./$.iter-define')(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n},{\"./$.add-to-unscopables\":15,\"./$.iter-define\":40,\"./$.iter-step\":42,\"./$.iterators\":43,\"./$.to-iobject\":56}],64:[function(require,module,exports){\n'use strict';\nvar strong = require('./$.collection-strong');\n\n// 23.1 Map Objects\nrequire('./$.collection')('Map', function(get){\n return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key){\n var entry = strong.getEntry(this, key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value){\n return strong.def(this, key === 0 ? 0 : key, value);\n }\n}, strong, true);\n},{\"./$.collection\":21,\"./$.collection-strong\":19}],65:[function(require,module,exports){\n\n},{}],66:[function(require,module,exports){\n'use strict';\nvar $at = require('./$.string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./$.iter-define')(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});\n},{\"./$.iter-define\":40,\"./$.string-at\":54}],67:[function(require,module,exports){\n'use strict';\n// ECMAScript 6 symbols shim\nvar $ = require('./$')\n , global = require('./$.global')\n , has = require('./$.has')\n , DESCRIPTORS = require('./$.descriptors')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , $fails = require('./$.fails')\n , shared = require('./$.shared')\n , setToStringTag = require('./$.set-to-string-tag')\n , uid = require('./$.uid')\n , wks = require('./$.wks')\n , keyOf = require('./$.keyof')\n , $names = require('./$.get-names')\n , enumKeys = require('./$.enum-keys')\n , isArray = require('./$.is-array')\n , anObject = require('./$.an-object')\n , toIObject = require('./$.to-iobject')\n , createDesc = require('./$.property-desc')\n , getDesc = $.getDesc\n , setDesc = $.setDesc\n , _create = $.create\n , getNames = $names.get\n , $Symbol = global.Symbol\n , $JSON = global.JSON\n , _stringify = $JSON && $JSON.stringify\n , setter = false\n , HIDDEN = wks('_hidden')\n , isEnum = $.isEnum\n , SymbolRegistry = shared('symbol-registry')\n , AllSymbols = shared('symbols')\n , useNative = typeof $Symbol == 'function'\n , ObjectProto = Object.prototype;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n return _create(setDesc({}, 'a', {\n get: function(){ return setDesc(this, 'a', {value: 7}).a; }\n })).a != 7;\n}) ? function(it, key, D){\n var protoDesc = getDesc(ObjectProto, key);\n if(protoDesc)delete ObjectProto[key];\n setDesc(it, key, D);\n if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc);\n} : setDesc;\n\nvar wrap = function(tag){\n var sym = AllSymbols[tag] = _create($Symbol.prototype);\n sym._k = tag;\n DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, {\n configurable: true,\n set: function(value){\n if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n }\n });\n return sym;\n};\n\nvar isSymbol = function(it){\n return typeof it == 'symbol';\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n if(D && has(AllSymbols, key)){\n if(!D.enumerable){\n if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n D = _create(D, {enumerable: createDesc(0, false)});\n } return setSymbolDesc(it, key, D);\n } return setDesc(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n anObject(it);\n var keys = enumKeys(P = toIObject(P))\n , i = 0\n , l = keys.length\n , key;\n while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P){\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n var E = isEnum.call(this, key);\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key]\n ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n var D = getDesc(it = toIObject(it), key);\n if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n var names = getNames(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key);\n return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n var names = getNames(toIObject(it))\n , result = []\n , i = 0\n , key;\n while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);\n return result;\n};\nvar $stringify = function stringify(it){\n if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n var args = [it]\n , i = 1\n , $$ = arguments\n , replacer, $replacer;\n while($$.length > i)args.push($$[i++]);\n replacer = args[1];\n if(typeof replacer == 'function')$replacer = replacer;\n if($replacer || !isArray(replacer))replacer = function(key, value){\n if($replacer)value = $replacer.call(this, key, value);\n if(!isSymbol(value))return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n};\nvar buggyJSON = $fails(function(){\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n});\n\n// 19.4.1.1 Symbol([description])\nif(!useNative){\n $Symbol = function Symbol(){\n if(isSymbol(this))throw TypeError('Symbol is not a constructor');\n return wrap(uid(arguments.length > 0 ? arguments[0] : undefined));\n };\n redefine($Symbol.prototype, 'toString', function toString(){\n return this._k;\n });\n\n isSymbol = function(it){\n return it instanceof $Symbol;\n };\n\n $.create = $create;\n $.isEnum = $propertyIsEnumerable;\n $.getDesc = $getOwnPropertyDescriptor;\n $.setDesc = $defineProperty;\n $.setDescs = $defineProperties;\n $.getNames = $names.get = $getOwnPropertyNames;\n $.getSymbols = $getOwnPropertySymbols;\n\n if(DESCRIPTORS && !require('./$.library')){\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n}\n\nvar symbolStatics = {\n // 19.4.2.1 Symbol.for(key)\n 'for': function(key){\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(key){\n return keyOf(SymbolRegistry, key);\n },\n useSetter: function(){ setter = true; },\n useSimple: function(){ setter = false; }\n};\n// 19.4.2.2 Symbol.hasInstance\n// 19.4.2.3 Symbol.isConcatSpreadable\n// 19.4.2.4 Symbol.iterator\n// 19.4.2.6 Symbol.match\n// 19.4.2.8 Symbol.replace\n// 19.4.2.9 Symbol.search\n// 19.4.2.10 Symbol.species\n// 19.4.2.11 Symbol.split\n// 19.4.2.12 Symbol.toPrimitive\n// 19.4.2.13 Symbol.toStringTag\n// 19.4.2.14 Symbol.unscopables\n$.each.call((\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,' +\n 'species,split,toPrimitive,toStringTag,unscopables'\n).split(','), function(it){\n var sym = wks(it);\n symbolStatics[it] = useNative ? sym : wrap(sym);\n});\n\nsetter = true;\n\n$export($export.G + $export.W, {Symbol: $Symbol});\n\n$export($export.S, 'Symbol', symbolStatics);\n\n$export($export.S + $export.F * !useNative, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify});\n\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n},{\"./$\":44,\"./$.an-object\":16,\"./$.descriptors\":25,\"./$.enum-keys\":26,\"./$.export\":27,\"./$.fails\":28,\"./$.get-names\":30,\"./$.global\":31,\"./$.has\":32,\"./$.is-array\":36,\"./$.keyof\":45,\"./$.library\":46,\"./$.property-desc\":47,\"./$.redefine\":49,\"./$.set-to-string-tag\":51,\"./$.shared\":52,\"./$.to-iobject\":56,\"./$.uid\":59,\"./$.wks\":60}],68:[function(require,module,exports){\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./$.export');\n\n$export($export.P, 'Map', {toJSON: require('./$.collection-to-json')('Map')});\n},{\"./$.collection-to-json\":20,\"./$.export\":27}],69:[function(require,module,exports){\nrequire('./es6.array.iterator');\nvar Iterators = require('./$.iterators');\nIterators.NodeList = Iterators.HTMLCollection = Iterators.Array;\n},{\"./$.iterators\":43,\"./es6.array.iterator\":63}],70:[function(require,module,exports){\narguments[4][14][0].apply(exports,arguments)\n},{\"dup\":14}],71:[function(require,module,exports){\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./$.wks')('unscopables')\n , ArrayProto = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)require('./$.hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n ArrayProto[UNSCOPABLES][key] = true;\n};\n},{\"./$.hide\":99,\"./$.wks\":151}],72:[function(require,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"./$.is-object\":106,\"dup\":16}],73:[function(require,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./$.to-object')\n , toIndex = require('./$.to-index')\n , toLength = require('./$.to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n var O = toObject(this)\n , len = toLength(O.length)\n , to = toIndex(target, len)\n , from = toIndex(start, len)\n , $$ = arguments\n , end = $$.length > 2 ? $$[2] : undefined\n , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n , inc = 1;\n if(from < to && to < from + count){\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while(count-- > 0){\n if(from in O)O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n},{\"./$.to-index\":144,\"./$.to-length\":147,\"./$.to-object\":148}],74:[function(require,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./$.to-object')\n , toIndex = require('./$.to-index')\n , toLength = require('./$.to-length');\nmodule.exports = [].fill || function fill(value /*, start = 0, end = @length */){\n var O = toObject(this)\n , length = toLength(O.length)\n , $$ = arguments\n , $$len = $$.length\n , index = toIndex($$len > 1 ? $$[1] : undefined, length)\n , end = $$len > 2 ? $$[2] : undefined\n , endPos = end === undefined ? length : toIndex(end, length);\n while(endPos > index)O[index++] = value;\n return O;\n};\n},{\"./$.to-index\":144,\"./$.to-length\":147,\"./$.to-object\":148}],75:[function(require,module,exports){\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./$.to-iobject')\n , toLength = require('./$.to-length')\n , toIndex = require('./$.to-index');\nmodule.exports = function(IS_INCLUDES){\n return function($this, el, fromIndex){\n var O = toIObject($this)\n , length = toLength(O.length)\n , index = toIndex(fromIndex, length)\n , value;\n // Array#includes uses SameValueZero equality algorithm\n if(IS_INCLUDES && el != el)while(length > index){\n value = O[index++];\n if(value != value)return true;\n // Array#toIndex ignores holes, Array#includes - not\n } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n if(O[index] === el)return IS_INCLUDES || index;\n } return !IS_INCLUDES && -1;\n };\n};\n},{\"./$.to-index\":144,\"./$.to-iobject\":146,\"./$.to-length\":147}],76:[function(require,module,exports){\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./$.ctx')\n , IObject = require('./$.iobject')\n , toObject = require('./$.to-object')\n , toLength = require('./$.to-length')\n , asc = require('./$.array-species-create');\nmodule.exports = function(TYPE){\n var IS_MAP = TYPE == 1\n , IS_FILTER = TYPE == 2\n , IS_SOME = TYPE == 3\n , IS_EVERY = TYPE == 4\n , IS_FIND_INDEX = TYPE == 6\n , NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function($this, callbackfn, that){\n var O = toObject($this)\n , self = IObject(O)\n , f = ctx(callbackfn, that, 3)\n , length = toLength(self.length)\n , index = 0\n , result = IS_MAP ? asc($this, length) : IS_FILTER ? asc($this, 0) : undefined\n , val, res;\n for(;length > index; index++)if(NO_HOLES || index in self){\n val = self[index];\n res = f(val, index, O);\n if(TYPE){\n if(IS_MAP)result[index] = res; // map\n else if(res)switch(TYPE){\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if(IS_EVERY)return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n},{\"./$.array-species-create\":77,\"./$.ctx\":85,\"./$.iobject\":102,\"./$.to-length\":147,\"./$.to-object\":148}],77:[function(require,module,exports){\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar isObject = require('./$.is-object')\n , isArray = require('./$.is-array')\n , SPECIES = require('./$.wks')('species');\nmodule.exports = function(original, length){\n var C;\n if(isArray(original)){\n C = original.constructor;\n // cross-realm fallback\n if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\n if(isObject(C)){\n C = C[SPECIES];\n if(C === null)C = undefined;\n }\n } return new (C === undefined ? Array : C)(length);\n};\n},{\"./$.is-array\":104,\"./$.is-object\":106,\"./$.wks\":151}],78:[function(require,module,exports){\narguments[4][17][0].apply(exports,arguments)\n},{\"./$.cof\":79,\"./$.wks\":151,\"dup\":17}],79:[function(require,module,exports){\narguments[4][18][0].apply(exports,arguments)\n},{\"dup\":18}],80:[function(require,module,exports){\narguments[4][19][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.ctx\":85,\"./$.defined\":86,\"./$.descriptors\":87,\"./$.for-of\":95,\"./$.has\":98,\"./$.hide\":99,\"./$.is-object\":106,\"./$.iter-define\":110,\"./$.iter-step\":112,\"./$.redefine-all\":128,\"./$.set-species\":133,\"./$.strict-new\":137,\"./$.uid\":150,\"dup\":19}],81:[function(require,module,exports){\narguments[4][20][0].apply(exports,arguments)\n},{\"./$.classof\":78,\"./$.for-of\":95,\"dup\":20}],82:[function(require,module,exports){\n'use strict';\nvar hide = require('./$.hide')\n , redefineAll = require('./$.redefine-all')\n , anObject = require('./$.an-object')\n , isObject = require('./$.is-object')\n , strictNew = require('./$.strict-new')\n , forOf = require('./$.for-of')\n , createArrayMethod = require('./$.array-methods')\n , $has = require('./$.has')\n , WEAK = require('./$.uid')('weak')\n , isExtensible = Object.isExtensible || isObject\n , arrayFind = createArrayMethod(5)\n , arrayFindIndex = createArrayMethod(6)\n , id = 0;\n\n// fallback for frozen keys\nvar frozenStore = function(that){\n return that._l || (that._l = new FrozenStore);\n};\nvar FrozenStore = function(){\n this.a = [];\n};\nvar findFrozen = function(store, key){\n return arrayFind(store.a, function(it){\n return it[0] === key;\n });\n};\nFrozenStore.prototype = {\n get: function(key){\n var entry = findFrozen(this, key);\n if(entry)return entry[1];\n },\n has: function(key){\n return !!findFrozen(this, key);\n },\n set: function(key, value){\n var entry = findFrozen(this, key);\n if(entry)entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function(key){\n var index = arrayFindIndex(this.a, function(it){\n return it[0] === key;\n });\n if(~index)this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n var C = wrapper(function(that, iterable){\n strictNew(that, C, NAME);\n that._i = id++; // collection id\n that._l = undefined; // leak store for frozen objects\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function(key){\n if(!isObject(key))return false;\n if(!isExtensible(key))return frozenStore(this)['delete'](key);\n return $has(key, WEAK) && $has(key[WEAK], this._i) && delete key[WEAK][this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key){\n if(!isObject(key))return false;\n if(!isExtensible(key))return frozenStore(this).has(key);\n return $has(key, WEAK) && $has(key[WEAK], this._i);\n }\n });\n return C;\n },\n def: function(that, key, value){\n if(!isExtensible(anObject(key))){\n frozenStore(that).set(key, value);\n } else {\n $has(key, WEAK) || hide(key, WEAK, {});\n key[WEAK][that._i] = value;\n } return that;\n },\n frozenStore: frozenStore,\n WEAK: WEAK\n};\n},{\"./$.an-object\":72,\"./$.array-methods\":76,\"./$.for-of\":95,\"./$.has\":98,\"./$.hide\":99,\"./$.is-object\":106,\"./$.redefine-all\":128,\"./$.strict-new\":137,\"./$.uid\":150}],83:[function(require,module,exports){\n'use strict';\nvar global = require('./$.global')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , redefineAll = require('./$.redefine-all')\n , forOf = require('./$.for-of')\n , strictNew = require('./$.strict-new')\n , isObject = require('./$.is-object')\n , fails = require('./$.fails')\n , $iterDetect = require('./$.iter-detect')\n , setToStringTag = require('./$.set-to-string-tag');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n var Base = global[NAME]\n , C = Base\n , ADDER = IS_MAP ? 'set' : 'add'\n , proto = C && C.prototype\n , O = {};\n var fixMethod = function(KEY){\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function(a){\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a){\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a){\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n new C().entries().next();\n }))){\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n } else {\n var instance = new C\n // early implementations not supports chaining\n , HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n , ACCEPT_ITERABLES = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n , BUGGY_ZERO;\n if(!ACCEPT_ITERABLES){ \n C = wrapper(function(target, iterable){\n strictNew(target, C, NAME);\n var that = new Base;\n if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n IS_WEAK || instance.forEach(function(val, key){\n BUGGY_ZERO = 1 / key === -Infinity;\n });\n if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n // weak collections should not contains .clear method\n if(IS_WEAK && proto.clear)delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n},{\"./$.export\":90,\"./$.fails\":92,\"./$.for-of\":95,\"./$.global\":97,\"./$.is-object\":106,\"./$.iter-detect\":111,\"./$.redefine\":129,\"./$.redefine-all\":128,\"./$.set-to-string-tag\":134,\"./$.strict-new\":137}],84:[function(require,module,exports){\narguments[4][22][0].apply(exports,arguments)\n},{\"dup\":22}],85:[function(require,module,exports){\narguments[4][23][0].apply(exports,arguments)\n},{\"./$.a-function\":70,\"dup\":23}],86:[function(require,module,exports){\narguments[4][24][0].apply(exports,arguments)\n},{\"dup\":24}],87:[function(require,module,exports){\narguments[4][25][0].apply(exports,arguments)\n},{\"./$.fails\":92,\"dup\":25}],88:[function(require,module,exports){\nvar isObject = require('./$.is-object')\n , document = require('./$.global').document\n // in old IE typeof document.createElement is 'object'\n , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n return is ? document.createElement(it) : {};\n};\n},{\"./$.global\":97,\"./$.is-object\":106}],89:[function(require,module,exports){\narguments[4][26][0].apply(exports,arguments)\n},{\"./$\":114,\"dup\":26}],90:[function(require,module,exports){\nvar global = require('./$.global')\n , core = require('./$.core')\n , hide = require('./$.hide')\n , redefine = require('./$.redefine')\n , ctx = require('./$.ctx')\n , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n var IS_FORCED = type & $export.F\n , IS_GLOBAL = type & $export.G\n , IS_STATIC = type & $export.S\n , IS_PROTO = type & $export.P\n , IS_BIND = type & $export.B\n , target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n , exports = IS_GLOBAL ? core : core[name] || (core[name] = {})\n , expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n , key, own, out, exp;\n if(IS_GLOBAL)source = name;\n for(key in source){\n // contains in native\n own = !IS_FORCED && target && key in target;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if(target && !own)redefine(target, key, out);\n // export\n if(exports[key] != out)hide(exports, key, exp);\n if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\nmodule.exports = $export;\n},{\"./$.core\":84,\"./$.ctx\":85,\"./$.global\":97,\"./$.hide\":99,\"./$.redefine\":129}],91:[function(require,module,exports){\nvar MATCH = require('./$.wks')('match');\nmodule.exports = function(KEY){\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch(e){\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch(f){ /* empty */ }\n } return true;\n};\n},{\"./$.wks\":151}],92:[function(require,module,exports){\narguments[4][28][0].apply(exports,arguments)\n},{\"dup\":28}],93:[function(require,module,exports){\n'use strict';\nvar hide = require('./$.hide')\n , redefine = require('./$.redefine')\n , fails = require('./$.fails')\n , defined = require('./$.defined')\n , wks = require('./$.wks');\n\nmodule.exports = function(KEY, length, exec){\n var SYMBOL = wks(KEY)\n , original = ''[KEY];\n if(fails(function(){\n var O = {};\n O[SYMBOL] = function(){ return 7; };\n return ''[KEY](O) != 7;\n })){\n redefine(String.prototype, KEY, exec(defined, SYMBOL, original));\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function(string, arg){ return original.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function(string){ return original.call(string, this); }\n );\n }\n};\n},{\"./$.defined\":86,\"./$.fails\":92,\"./$.hide\":99,\"./$.redefine\":129,\"./$.wks\":151}],94:[function(require,module,exports){\n'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./$.an-object');\nmodule.exports = function(){\n var that = anObject(this)\n , result = '';\n if(that.global) result += 'g';\n if(that.ignoreCase) result += 'i';\n if(that.multiline) result += 'm';\n if(that.unicode) result += 'u';\n if(that.sticky) result += 'y';\n return result;\n};\n},{\"./$.an-object\":72}],95:[function(require,module,exports){\narguments[4][29][0].apply(exports,arguments)\n},{\"./$.an-object\":72,\"./$.ctx\":85,\"./$.is-array-iter\":103,\"./$.iter-call\":108,\"./$.to-length\":147,\"./core.get-iterator-method\":152,\"dup\":29}],96:[function(require,module,exports){\narguments[4][30][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.to-iobject\":146,\"dup\":30}],97:[function(require,module,exports){\narguments[4][31][0].apply(exports,arguments)\n},{\"dup\":31}],98:[function(require,module,exports){\narguments[4][32][0].apply(exports,arguments)\n},{\"dup\":32}],99:[function(require,module,exports){\narguments[4][33][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.property-desc\":127,\"dup\":33}],100:[function(require,module,exports){\nmodule.exports = require('./$.global').document && document.documentElement;\n},{\"./$.global\":97}],101:[function(require,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n var un = that === undefined;\n switch(args.length){\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n},{}],102:[function(require,module,exports){\narguments[4][34][0].apply(exports,arguments)\n},{\"./$.cof\":79,\"dup\":34}],103:[function(require,module,exports){\narguments[4][35][0].apply(exports,arguments)\n},{\"./$.iterators\":113,\"./$.wks\":151,\"dup\":35}],104:[function(require,module,exports){\narguments[4][36][0].apply(exports,arguments)\n},{\"./$.cof\":79,\"dup\":36}],105:[function(require,module,exports){\n// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./$.is-object')\n , floor = Math.floor;\nmodule.exports = function isInteger(it){\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n},{\"./$.is-object\":106}],106:[function(require,module,exports){\narguments[4][37][0].apply(exports,arguments)\n},{\"dup\":37}],107:[function(require,module,exports){\n// 7.2.8 IsRegExp(argument)\nvar isObject = require('./$.is-object')\n , cof = require('./$.cof')\n , MATCH = require('./$.wks')('match');\nmodule.exports = function(it){\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n},{\"./$.cof\":79,\"./$.is-object\":106,\"./$.wks\":151}],108:[function(require,module,exports){\narguments[4][38][0].apply(exports,arguments)\n},{\"./$.an-object\":72,\"dup\":38}],109:[function(require,module,exports){\narguments[4][39][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.hide\":99,\"./$.property-desc\":127,\"./$.set-to-string-tag\":134,\"./$.wks\":151,\"dup\":39}],110:[function(require,module,exports){\narguments[4][40][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.export\":90,\"./$.has\":98,\"./$.hide\":99,\"./$.iter-create\":109,\"./$.iterators\":113,\"./$.library\":116,\"./$.redefine\":129,\"./$.set-to-string-tag\":134,\"./$.wks\":151,\"dup\":40}],111:[function(require,module,exports){\narguments[4][41][0].apply(exports,arguments)\n},{\"./$.wks\":151,\"dup\":41}],112:[function(require,module,exports){\narguments[4][42][0].apply(exports,arguments)\n},{\"dup\":42}],113:[function(require,module,exports){\narguments[4][43][0].apply(exports,arguments)\n},{\"dup\":43}],114:[function(require,module,exports){\narguments[4][44][0].apply(exports,arguments)\n},{\"dup\":44}],115:[function(require,module,exports){\narguments[4][45][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.to-iobject\":146,\"dup\":45}],116:[function(require,module,exports){\nmodule.exports = false;\n},{}],117:[function(require,module,exports){\n// 20.2.2.14 Math.expm1(x)\nmodule.exports = Math.expm1 || function expm1(x){\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n};\n},{}],118:[function(require,module,exports){\n// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n},{}],119:[function(require,module,exports){\n// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n},{}],120:[function(require,module,exports){\nvar global = require('./$.global')\n , macrotask = require('./$.task').set\n , Observer = global.MutationObserver || global.WebKitMutationObserver\n , process = global.process\n , Promise = global.Promise\n , isNode = require('./$.cof')(process) == 'process'\n , head, last, notify;\n\nvar flush = function(){\n var parent, domain, fn;\n if(isNode && (parent = process.domain)){\n process.domain = null;\n parent.exit();\n }\n while(head){\n domain = head.domain;\n fn = head.fn;\n if(domain)domain.enter();\n fn(); // <- currently we use it only for Promise - try / catch not required\n if(domain)domain.exit();\n head = head.next;\n } last = undefined;\n if(parent)parent.enter();\n};\n\n// Node.js\nif(isNode){\n notify = function(){\n process.nextTick(flush);\n };\n// browsers with MutationObserver\n} else if(Observer){\n var toggle = 1\n , node = document.createTextNode('');\n new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n notify = function(){\n node.data = toggle = -toggle;\n };\n// environments with maybe non-completely correct, but existent Promise\n} else if(Promise && Promise.resolve){\n notify = function(){\n Promise.resolve().then(flush);\n };\n// for other environments - macrotask based on:\n// - setImmediate\n// - MessageChannel\n// - window.postMessag\n// - onreadystatechange\n// - setTimeout\n} else {\n notify = function(){\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n}\n\nmodule.exports = function asap(fn){\n var task = {fn: fn, next: undefined, domain: isNode && process.domain};\n if(last)last.next = task;\n if(!head){\n head = task;\n notify();\n } last = task;\n};\n},{\"./$.cof\":79,\"./$.global\":97,\"./$.task\":143}],121:[function(require,module,exports){\n// 19.1.2.1 Object.assign(target, source, ...)\nvar $ = require('./$')\n , toObject = require('./$.to-object')\n , IObject = require('./$.iobject');\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = require('./$.fails')(function(){\n var a = Object.assign\n , A = {}\n , B = {}\n , S = Symbol()\n , K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function(k){ B[k] = k; });\n return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n var T = toObject(target)\n , $$ = arguments\n , $$len = $$.length\n , index = 1\n , getKeys = $.getKeys\n , getSymbols = $.getSymbols\n , isEnum = $.isEnum;\n while($$len > index){\n var S = IObject($$[index++])\n , keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n , length = keys.length\n , j = 0\n , key;\n while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n }\n return T;\n} : Object.assign;\n},{\"./$\":114,\"./$.fails\":92,\"./$.iobject\":102,\"./$.to-object\":148}],122:[function(require,module,exports){\n// most Object methods by ES6 should accept primitives\nvar $export = require('./$.export')\n , core = require('./$.core')\n , fails = require('./$.fails');\nmodule.exports = function(KEY, exec){\n var fn = (core.Object || {})[KEY] || Object[KEY]\n , exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n},{\"./$.core\":84,\"./$.export\":90,\"./$.fails\":92}],123:[function(require,module,exports){\nvar $ = require('./$')\n , toIObject = require('./$.to-iobject')\n , isEnum = $.isEnum;\nmodule.exports = function(isEntries){\n return function(it){\n var O = toIObject(it)\n , keys = $.getKeys(O)\n , length = keys.length\n , i = 0\n , result = []\n , key;\n while(length > i)if(isEnum.call(O, key = keys[i++])){\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n},{\"./$\":114,\"./$.to-iobject\":146}],124:[function(require,module,exports){\n// all object keys, includes non-enumerable and symbols\nvar $ = require('./$')\n , anObject = require('./$.an-object')\n , Reflect = require('./$.global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n var keys = $.getNames(anObject(it))\n , getSymbols = $.getSymbols;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n},{\"./$\":114,\"./$.an-object\":72,\"./$.global\":97}],125:[function(require,module,exports){\n'use strict';\nvar path = require('./$.path')\n , invoke = require('./$.invoke')\n , aFunction = require('./$.a-function');\nmodule.exports = function(/* ...pargs */){\n var fn = aFunction(this)\n , length = arguments.length\n , pargs = Array(length)\n , i = 0\n , _ = path._\n , holder = false;\n while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;\n return function(/* ...args */){\n var that = this\n , $$ = arguments\n , $$len = $$.length\n , j = 0, k = 0, args;\n if(!holder && !$$len)return invoke(fn, pargs, that);\n args = pargs.slice();\n if(holder)for(;length > j; j++)if(args[j] === _)args[j] = $$[k++];\n while($$len > k)args.push($$[k++]);\n return invoke(fn, args, that);\n };\n};\n},{\"./$.a-function\":70,\"./$.invoke\":101,\"./$.path\":126}],126:[function(require,module,exports){\nmodule.exports = require('./$.global');\n},{\"./$.global\":97}],127:[function(require,module,exports){\narguments[4][47][0].apply(exports,arguments)\n},{\"dup\":47}],128:[function(require,module,exports){\narguments[4][48][0].apply(exports,arguments)\n},{\"./$.redefine\":129,\"dup\":48}],129:[function(require,module,exports){\n// add fake Function#toString\n// for correct work wrapped methods / constructors with methods like LoDash isNative\nvar global = require('./$.global')\n , hide = require('./$.hide')\n , SRC = require('./$.uid')('src')\n , TO_STRING = 'toString'\n , $toString = Function[TO_STRING]\n , TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./$.core').inspectSource = function(it){\n return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n if(typeof val == 'function'){\n val.hasOwnProperty(SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n val.hasOwnProperty('name') || hide(val, 'name', key);\n }\n if(O === global){\n O[key] = val;\n } else {\n if(!safe)delete O[key];\n hide(O, key, val);\n }\n})(Function.prototype, TO_STRING, function toString(){\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n},{\"./$.core\":84,\"./$.global\":97,\"./$.hide\":99,\"./$.uid\":150}],130:[function(require,module,exports){\nmodule.exports = function(regExp, replace){\n var replacer = replace === Object(replace) ? function(part){\n return replace[part];\n } : replace;\n return function(it){\n return String(it).replace(regExp, replacer);\n };\n};\n},{}],131:[function(require,module,exports){\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n},{}],132:[function(require,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar getDesc = require('./$').getDesc\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object');\nvar check = function(O, proto){\n anObject(O);\n if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function(test, buggy, set){\n try {\n set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch(e){ buggy = true; }\n return function setPrototypeOf(O, proto){\n check(O, proto);\n if(buggy)O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n},{\"./$\":114,\"./$.an-object\":72,\"./$.ctx\":85,\"./$.is-object\":106}],133:[function(require,module,exports){\n'use strict';\nvar global = require('./$.global')\n , $ = require('./$')\n , DESCRIPTORS = require('./$.descriptors')\n , SPECIES = require('./$.wks')('species');\n\nmodule.exports = function(KEY){\n var C = global[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.global\":97,\"./$.wks\":151}],134:[function(require,module,exports){\narguments[4][51][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.has\":98,\"./$.wks\":151,\"dup\":51}],135:[function(require,module,exports){\narguments[4][52][0].apply(exports,arguments)\n},{\"./$.global\":97,\"dup\":52}],136:[function(require,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , SPECIES = require('./$.wks')('species');\nmodule.exports = function(O, D){\n var C = anObject(O).constructor, S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n},{\"./$.a-function\":70,\"./$.an-object\":72,\"./$.wks\":151}],137:[function(require,module,exports){\narguments[4][53][0].apply(exports,arguments)\n},{\"dup\":53}],138:[function(require,module,exports){\narguments[4][54][0].apply(exports,arguments)\n},{\"./$.defined\":86,\"./$.to-integer\":145,\"dup\":54}],139:[function(require,module,exports){\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./$.is-regexp')\n , defined = require('./$.defined');\n\nmodule.exports = function(that, searchString, NAME){\n if(isRegExp(searchString))throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n},{\"./$.defined\":86,\"./$.is-regexp\":107}],140:[function(require,module,exports){\n// https://github.com/ljharb/proposal-string-pad-left-right\nvar toLength = require('./$.to-length')\n , repeat = require('./$.string-repeat')\n , defined = require('./$.defined');\n\nmodule.exports = function(that, maxLength, fillString, left){\n var S = String(defined(that))\n , stringLength = S.length\n , fillStr = fillString === undefined ? ' ' : String(fillString)\n , intMaxLength = toLength(maxLength);\n if(intMaxLength <= stringLength)return S;\n if(fillStr == '')fillStr = ' ';\n var fillLen = intMaxLength - stringLength\n , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n},{\"./$.defined\":86,\"./$.string-repeat\":141,\"./$.to-length\":147}],141:[function(require,module,exports){\n'use strict';\nvar toInteger = require('./$.to-integer')\n , defined = require('./$.defined');\n\nmodule.exports = function repeat(count){\n var str = String(defined(this))\n , res = ''\n , n = toInteger(count);\n if(n < 0 || n == Infinity)throw RangeError(\"Count can't be negative\");\n for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n return res;\n};\n},{\"./$.defined\":86,\"./$.to-integer\":145}],142:[function(require,module,exports){\nvar $export = require('./$.export')\n , defined = require('./$.defined')\n , fails = require('./$.fails')\n , spaces = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF'\n , space = '[' + spaces + ']'\n , non = '\\u200b\\u0085'\n , ltrim = RegExp('^' + space + space + '*')\n , rtrim = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec){\n var exp = {};\n exp[KEY] = exec(trim);\n $export($export.P + $export.F * fails(function(){\n return !!spaces[KEY]() || non[KEY]() != non;\n }), 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n string = String(defined(string));\n if(TYPE & 1)string = string.replace(ltrim, '');\n if(TYPE & 2)string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n},{\"./$.defined\":86,\"./$.export\":90,\"./$.fails\":92}],143:[function(require,module,exports){\nvar ctx = require('./$.ctx')\n , invoke = require('./$.invoke')\n , html = require('./$.html')\n , cel = require('./$.dom-create')\n , global = require('./$.global')\n , process = global.process\n , setTask = global.setImmediate\n , clearTask = global.clearImmediate\n , MessageChannel = global.MessageChannel\n , counter = 0\n , queue = {}\n , ONREADYSTATECHANGE = 'onreadystatechange'\n , defer, channel, port;\nvar run = function(){\n var id = +this;\n if(queue.hasOwnProperty(id)){\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listner = function(event){\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n setTask = function setImmediate(fn){\n var args = [], i = 1;\n while(arguments.length > i)args.push(arguments[i++]);\n queue[++counter] = function(){\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id){\n delete queue[id];\n };\n // Node.js 0.8-\n if(require('./$.cof')(process) == 'process'){\n defer = function(id){\n process.nextTick(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if(MessageChannel){\n channel = new MessageChannel;\n port = channel.port2;\n channel.port1.onmessage = listner;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n defer = function(id){\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listner, false);\n // IE8-\n } else if(ONREADYSTATECHANGE in cel('script')){\n defer = function(id){\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function(id){\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n},{\"./$.cof\":79,\"./$.ctx\":85,\"./$.dom-create\":88,\"./$.global\":97,\"./$.html\":100,\"./$.invoke\":101}],144:[function(require,module,exports){\nvar toInteger = require('./$.to-integer')\n , max = Math.max\n , min = Math.min;\nmodule.exports = function(index, length){\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n},{\"./$.to-integer\":145}],145:[function(require,module,exports){\narguments[4][55][0].apply(exports,arguments)\n},{\"dup\":55}],146:[function(require,module,exports){\narguments[4][56][0].apply(exports,arguments)\n},{\"./$.defined\":86,\"./$.iobject\":102,\"dup\":56}],147:[function(require,module,exports){\narguments[4][57][0].apply(exports,arguments)\n},{\"./$.to-integer\":145,\"dup\":57}],148:[function(require,module,exports){\narguments[4][58][0].apply(exports,arguments)\n},{\"./$.defined\":86,\"dup\":58}],149:[function(require,module,exports){\n// 7.1.1 ToPrimitive(input [, PreferredType])\r\nvar isObject = require('./$.is-object');\r\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\r\n// and the second argument - flag - preferred type is a string\r\nmodule.exports = function(it, S){\r\n if(!isObject(it))return it;\r\n var fn, val;\r\n if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\r\n if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\r\n if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\r\n throw TypeError(\"Can't convert object to primitive value\");\r\n};\n},{\"./$.is-object\":106}],150:[function(require,module,exports){\narguments[4][59][0].apply(exports,arguments)\n},{\"dup\":59}],151:[function(require,module,exports){\narguments[4][60][0].apply(exports,arguments)\n},{\"./$.global\":97,\"./$.shared\":135,\"./$.uid\":150,\"dup\":60}],152:[function(require,module,exports){\narguments[4][61][0].apply(exports,arguments)\n},{\"./$.classof\":78,\"./$.core\":84,\"./$.iterators\":113,\"./$.wks\":151,\"dup\":61}],153:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , $export = require('./$.export')\n , DESCRIPTORS = require('./$.descriptors')\n , createDesc = require('./$.property-desc')\n , html = require('./$.html')\n , cel = require('./$.dom-create')\n , has = require('./$.has')\n , cof = require('./$.cof')\n , invoke = require('./$.invoke')\n , fails = require('./$.fails')\n , anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , isObject = require('./$.is-object')\n , toObject = require('./$.to-object')\n , toIObject = require('./$.to-iobject')\n , toInteger = require('./$.to-integer')\n , toIndex = require('./$.to-index')\n , toLength = require('./$.to-length')\n , IObject = require('./$.iobject')\n , IE_PROTO = require('./$.uid')('__proto__')\n , createArrayMethod = require('./$.array-methods')\n , arrayIndexOf = require('./$.array-includes')(false)\n , ObjectProto = Object.prototype\n , ArrayProto = Array.prototype\n , arraySlice = ArrayProto.slice\n , arrayJoin = ArrayProto.join\n , defineProperty = $.setDesc\n , getOwnDescriptor = $.getDesc\n , defineProperties = $.setDescs\n , factories = {}\n , IE8_DOM_DEFINE;\n\nif(!DESCRIPTORS){\n IE8_DOM_DEFINE = !fails(function(){\n return defineProperty(cel('div'), 'a', {get: function(){ return 7; }}).a != 7;\n });\n $.setDesc = function(O, P, Attributes){\n if(IE8_DOM_DEFINE)try {\n return defineProperty(O, P, Attributes);\n } catch(e){ /* empty */ }\n if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n if('value' in Attributes)anObject(O)[P] = Attributes.value;\n return O;\n };\n $.getDesc = function(O, P){\n if(IE8_DOM_DEFINE)try {\n return getOwnDescriptor(O, P);\n } catch(e){ /* empty */ }\n if(has(O, P))return createDesc(!ObjectProto.propertyIsEnumerable.call(O, P), O[P]);\n };\n $.setDescs = defineProperties = function(O, Properties){\n anObject(O);\n var keys = $.getKeys(Properties)\n , length = keys.length\n , i = 0\n , P;\n while(length > i)$.setDesc(O, P = keys[i++], Properties[P]);\n return O;\n };\n}\n$export($export.S + $export.F * !DESCRIPTORS, 'Object', {\n // 19.1.2.6 / 15.2.3.3 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $.getDesc,\n // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n defineProperty: $.setDesc,\n // 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n defineProperties: defineProperties\n});\n\n // IE 8- don't enum bug keys\nvar keys1 = ('constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,' +\n 'toLocaleString,toString,valueOf').split(',')\n // Additional keys for getOwnPropertyNames\n , keys2 = keys1.concat('length', 'prototype')\n , keysLen1 = keys1.length;\n\n// Create object with `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n // Thrash, waste and sodomy: IE GC bug\n var iframe = cel('iframe')\n , i = keysLen1\n , gt = '>'\n , iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(' i)if(has(O, key = names[i++])){\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n };\n};\nvar Empty = function(){};\n$export($export.S, 'Object', {\n // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n getPrototypeOf: $.getProto = $.getProto || function(O){\n O = toObject(O);\n if(has(O, IE_PROTO))return O[IE_PROTO];\n if(typeof O.constructor == 'function' && O instanceof O.constructor){\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n },\n // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $.getNames = $.getNames || createGetKeys(keys2, keys2.length, true),\n // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n create: $.create = $.create || function(O, /*?*/Properties){\n var result;\n if(O !== null){\n Empty.prototype = anObject(O);\n result = new Empty();\n Empty.prototype = null;\n // add \"__proto__\" for Object.getPrototypeOf shim\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : defineProperties(result, Properties);\n },\n // 19.1.2.14 / 15.2.3.14 Object.keys(O)\n keys: $.getKeys = $.getKeys || createGetKeys(keys1, keysLen1, false)\n});\n\nvar construct = function(F, len, args){\n if(!(len in factories)){\n for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n }\n return factories[len](F, args);\n};\n\n// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\n$export($export.P, 'Function', {\n bind: function bind(that /*, args... */){\n var fn = aFunction(this)\n , partArgs = arraySlice.call(arguments, 1);\n var bound = function(/* args... */){\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if(isObject(fn.prototype))bound.prototype = fn.prototype;\n return bound;\n }\n});\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * fails(function(){\n if(html)arraySlice.call(html);\n}), 'Array', {\n slice: function(begin, end){\n var len = toLength(this.length)\n , klass = cof(this);\n end = end === undefined ? len : end;\n if(klass == 'Array')return arraySlice.call(this, begin, end);\n var start = toIndex(begin, len)\n , upTo = toIndex(end, len)\n , size = toLength(upTo - start)\n , cloned = Array(size)\n , i = 0;\n for(; i < size; i++)cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n$export($export.P + $export.F * (IObject != Object), 'Array', {\n join: function join(separator){\n return arrayJoin.call(IObject(this), separator === undefined ? ',' : separator);\n }\n});\n\n// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\n$export($export.S, 'Array', {isArray: require('./$.is-array')});\n\nvar createArrayReduce = function(isRight){\n return function(callbackfn, memo){\n aFunction(callbackfn);\n var O = IObject(this)\n , length = toLength(O.length)\n , index = isRight ? length - 1 : 0\n , i = isRight ? -1 : 1;\n if(arguments.length < 2)for(;;){\n if(index in O){\n memo = O[index];\n index += i;\n break;\n }\n index += i;\n if(isRight ? index < 0 : length <= index){\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for(;isRight ? index >= 0 : length > index; index += i)if(index in O){\n memo = callbackfn(memo, O[index], index, this);\n }\n return memo;\n };\n};\n\nvar methodize = function($fn){\n return function(arg1/*, arg2 = undefined */){\n return $fn(this, arg1, arguments[1]);\n };\n};\n\n$export($export.P, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: $.each = $.each || methodize(createArrayMethod(0)),\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: methodize(createArrayMethod(1)),\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: methodize(createArrayMethod(2)),\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: methodize(createArrayMethod(3)),\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: methodize(createArrayMethod(4)),\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: createArrayReduce(false),\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: createArrayReduce(true),\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: methodize(arrayIndexOf),\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function(el, fromIndex /* = @[*-1] */){\n var O = toIObject(this)\n , length = toLength(O.length)\n , index = length - 1;\n if(arguments.length > 1)index = Math.min(index, toInteger(fromIndex));\n if(index < 0)index = toLength(length + index);\n for(;index >= 0; index--)if(index in O)if(O[index] === el)return index;\n return -1;\n }\n});\n\n// 20.3.3.1 / 15.9.4.4 Date.now()\n$export($export.S, 'Date', {now: function(){ return +new Date; }});\n\nvar lz = function(num){\n return num > 9 ? num : '0' + num;\n};\n\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (fails(function(){\n return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\n}) || !fails(function(){\n new Date(NaN).toISOString();\n})), 'Date', {\n toISOString: function toISOString(){\n if(!isFinite(this))throw RangeError('Invalid time value');\n var d = this\n , y = d.getUTCFullYear()\n , m = d.getUTCMilliseconds()\n , s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n }\n});\n},{\"./$\":114,\"./$.a-function\":70,\"./$.an-object\":72,\"./$.array-includes\":75,\"./$.array-methods\":76,\"./$.cof\":79,\"./$.descriptors\":87,\"./$.dom-create\":88,\"./$.export\":90,\"./$.fails\":92,\"./$.has\":98,\"./$.html\":100,\"./$.invoke\":101,\"./$.iobject\":102,\"./$.is-array\":104,\"./$.is-object\":106,\"./$.property-desc\":127,\"./$.to-index\":144,\"./$.to-integer\":145,\"./$.to-iobject\":146,\"./$.to-length\":147,\"./$.to-object\":148,\"./$.uid\":150}],154:[function(require,module,exports){\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./$.export');\n\n$export($export.P, 'Array', {copyWithin: require('./$.array-copy-within')});\n\nrequire('./$.add-to-unscopables')('copyWithin');\n},{\"./$.add-to-unscopables\":71,\"./$.array-copy-within\":73,\"./$.export\":90}],155:[function(require,module,exports){\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./$.export');\n\n$export($export.P, 'Array', {fill: require('./$.array-fill')});\n\nrequire('./$.add-to-unscopables')('fill');\n},{\"./$.add-to-unscopables\":71,\"./$.array-fill\":74,\"./$.export\":90}],156:[function(require,module,exports){\n'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./$.export')\n , $find = require('./$.array-methods')(6)\n , KEY = 'findIndex'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./$.add-to-unscopables')(KEY);\n},{\"./$.add-to-unscopables\":71,\"./$.array-methods\":76,\"./$.export\":90}],157:[function(require,module,exports){\n'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./$.export')\n , $find = require('./$.array-methods')(5)\n , KEY = 'find'\n , forced = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn/*, that = undefined */){\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./$.add-to-unscopables')(KEY);\n},{\"./$.add-to-unscopables\":71,\"./$.array-methods\":76,\"./$.export\":90}],158:[function(require,module,exports){\narguments[4][62][0].apply(exports,arguments)\n},{\"./$.ctx\":85,\"./$.export\":90,\"./$.is-array-iter\":103,\"./$.iter-call\":108,\"./$.iter-detect\":111,\"./$.to-length\":147,\"./$.to-object\":148,\"./core.get-iterator-method\":152,\"dup\":62}],159:[function(require,module,exports){\narguments[4][63][0].apply(exports,arguments)\n},{\"./$.add-to-unscopables\":71,\"./$.iter-define\":110,\"./$.iter-step\":112,\"./$.iterators\":113,\"./$.to-iobject\":146,\"dup\":63}],160:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./$.fails')(function(){\n function F(){}\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */){\n var index = 0\n , $$ = arguments\n , $$len = $$.length\n , result = new (typeof this == 'function' ? this : Array)($$len);\n while($$len > index)result[index] = $$[index++];\n result.length = $$len;\n return result;\n }\n});\n},{\"./$.export\":90,\"./$.fails\":92}],161:[function(require,module,exports){\nrequire('./$.set-species')('Array');\n},{\"./$.set-species\":133}],162:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , isObject = require('./$.is-object')\n , HAS_INSTANCE = require('./$.wks')('hasInstance')\n , FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))$.setDesc(FunctionProto, HAS_INSTANCE, {value: function(O){\n if(typeof this != 'function' || !isObject(O))return false;\n if(!isObject(this.prototype))return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while(O = $.getProto(O))if(this.prototype === O)return true;\n return false;\n}});\n},{\"./$\":114,\"./$.is-object\":106,\"./$.wks\":151}],163:[function(require,module,exports){\nvar setDesc = require('./$').setDesc\n , createDesc = require('./$.property-desc')\n , has = require('./$.has')\n , FProto = Function.prototype\n , nameRE = /^\\s*function ([^ (]*)/\n , NAME = 'name';\n// 19.2.4.2 name\nNAME in FProto || require('./$.descriptors') && setDesc(FProto, NAME, {\n configurable: true,\n get: function(){\n var match = ('' + this).match(nameRE)\n , name = match ? match[1] : '';\n has(this, NAME) || setDesc(this, NAME, createDesc(5, name));\n return name;\n }\n});\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.has\":98,\"./$.property-desc\":127}],164:[function(require,module,exports){\narguments[4][64][0].apply(exports,arguments)\n},{\"./$.collection\":83,\"./$.collection-strong\":80,\"dup\":64}],165:[function(require,module,exports){\n// 20.2.2.3 Math.acosh(x)\nvar $export = require('./$.export')\n , log1p = require('./$.math-log1p')\n , sqrt = Math.sqrt\n , $acosh = Math.acosh;\n\n// V8 bug https://code.google.com/p/v8/issues/detail?id=3509\n$export($export.S + $export.F * !($acosh && Math.floor($acosh(Number.MAX_VALUE)) == 710), 'Math', {\n acosh: function acosh(x){\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n},{\"./$.export\":90,\"./$.math-log1p\":118}],166:[function(require,module,exports){\n// 20.2.2.5 Math.asinh(x)\nvar $export = require('./$.export');\n\nfunction asinh(x){\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n$export($export.S, 'Math', {asinh: asinh});\n},{\"./$.export\":90}],167:[function(require,module,exports){\n// 20.2.2.7 Math.atanh(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n atanh: function atanh(x){\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n},{\"./$.export\":90}],168:[function(require,module,exports){\n// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./$.export')\n , sign = require('./$.math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x){\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n},{\"./$.export\":90,\"./$.math-sign\":119}],169:[function(require,module,exports){\n// 20.2.2.11 Math.clz32(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x){\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n},{\"./$.export\":90}],170:[function(require,module,exports){\n// 20.2.2.12 Math.cosh(x)\nvar $export = require('./$.export')\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x){\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n},{\"./$.export\":90}],171:[function(require,module,exports){\n// 20.2.2.14 Math.expm1(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {expm1: require('./$.math-expm1')});\n},{\"./$.export\":90,\"./$.math-expm1\":117}],172:[function(require,module,exports){\n// 20.2.2.16 Math.fround(x)\nvar $export = require('./$.export')\n , sign = require('./$.math-sign')\n , pow = Math.pow\n , EPSILON = pow(2, -52)\n , EPSILON32 = pow(2, -23)\n , MAX32 = pow(2, 127) * (2 - EPSILON32)\n , MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n fround: function fround(x){\n var $abs = Math.abs(x)\n , $sign = sign(x)\n , a, result;\n if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n if(result > MAX32 || result != result)return $sign * Infinity;\n return $sign * result;\n }\n});\n},{\"./$.export\":90,\"./$.math-sign\":119}],173:[function(require,module,exports){\n// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./$.export')\n , abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n var sum = 0\n , i = 0\n , $$ = arguments\n , $$len = $$.length\n , larg = 0\n , arg, div;\n while(i < $$len){\n arg = abs($$[i++]);\n if(larg < arg){\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if(arg > 0){\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n},{\"./$.export\":90}],174:[function(require,module,exports){\n// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./$.export')\n , $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./$.fails')(function(){\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y){\n var UINT16 = 0xffff\n , xn = +x\n , yn = +y\n , xl = UINT16 & xn\n , yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n},{\"./$.export\":90,\"./$.fails\":92}],175:[function(require,module,exports){\n// 20.2.2.21 Math.log10(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n log10: function log10(x){\n return Math.log(x) / Math.LN10;\n }\n});\n},{\"./$.export\":90}],176:[function(require,module,exports){\n// 20.2.2.20 Math.log1p(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {log1p: require('./$.math-log1p')});\n},{\"./$.export\":90,\"./$.math-log1p\":118}],177:[function(require,module,exports){\n// 20.2.2.22 Math.log2(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n log2: function log2(x){\n return Math.log(x) / Math.LN2;\n }\n});\n},{\"./$.export\":90}],178:[function(require,module,exports){\n// 20.2.2.28 Math.sign(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {sign: require('./$.math-sign')});\n},{\"./$.export\":90,\"./$.math-sign\":119}],179:[function(require,module,exports){\n// 20.2.2.30 Math.sinh(x)\nvar $export = require('./$.export')\n , expm1 = require('./$.math-expm1')\n , exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./$.fails')(function(){\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x){\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n},{\"./$.export\":90,\"./$.fails\":92,\"./$.math-expm1\":117}],180:[function(require,module,exports){\n// 20.2.2.33 Math.tanh(x)\nvar $export = require('./$.export')\n , expm1 = require('./$.math-expm1')\n , exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x){\n var a = expm1(x = +x)\n , b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n},{\"./$.export\":90,\"./$.math-expm1\":117}],181:[function(require,module,exports){\n// 20.2.2.34 Math.trunc(x)\nvar $export = require('./$.export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it){\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n},{\"./$.export\":90}],182:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , global = require('./$.global')\n , has = require('./$.has')\n , cof = require('./$.cof')\n , toPrimitive = require('./$.to-primitive')\n , fails = require('./$.fails')\n , $trim = require('./$.string-trim').trim\n , NUMBER = 'Number'\n , $Number = global[NUMBER]\n , Base = $Number\n , proto = $Number.prototype\n // Opera ~12 has broken Object#toString\n , BROKEN_COF = cof($.create(proto)) == NUMBER\n , TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n var it = toPrimitive(argument, false);\n if(typeof it == 'string' && it.length > 2){\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0)\n , third, radix, maxCode;\n if(first === 43 || first === 45){\n third = it.charCodeAt(2);\n if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if(first === 48){\n switch(it.charCodeAt(1)){\n case 66 : case 98 : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default : return +it;\n }\n for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if(code < 48 || code > maxCode)return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n $Number = function Number(value){\n var it = arguments.length < 1 ? 0 : value\n , that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? new Base(toNumber(it)) : toNumber(it);\n };\n $.each.call(require('./$.descriptors') ? $.getNames(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), function(key){\n if(has(Base, key) && !has($Number, key)){\n $.setDesc($Number, key, $.getDesc(Base, key));\n }\n });\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./$.redefine')(global, NUMBER, $Number);\n}\n},{\"./$\":114,\"./$.cof\":79,\"./$.descriptors\":87,\"./$.fails\":92,\"./$.global\":97,\"./$.has\":98,\"./$.redefine\":129,\"./$.string-trim\":142,\"./$.to-primitive\":149}],183:[function(require,module,exports){\n// 20.1.2.1 Number.EPSILON\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});\n},{\"./$.export\":90}],184:[function(require,module,exports){\n// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./$.export')\n , _isFinite = require('./$.global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it){\n return typeof it == 'number' && _isFinite(it);\n }\n});\n},{\"./$.export\":90,\"./$.global\":97}],185:[function(require,module,exports){\n// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {isInteger: require('./$.is-integer')});\n},{\"./$.export\":90,\"./$.is-integer\":105}],186:[function(require,module,exports){\n// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number){\n return number != number;\n }\n});\n},{\"./$.export\":90}],187:[function(require,module,exports){\n// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./$.export')\n , isInteger = require('./$.is-integer')\n , abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number){\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n},{\"./$.export\":90,\"./$.is-integer\":105}],188:[function(require,module,exports){\n// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});\n},{\"./$.export\":90}],189:[function(require,module,exports){\n// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});\n},{\"./$.export\":90}],190:[function(require,module,exports){\n// 20.1.2.12 Number.parseFloat(string)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {parseFloat: parseFloat});\n},{\"./$.export\":90}],191:[function(require,module,exports){\n// 20.1.2.13 Number.parseInt(string, radix)\nvar $export = require('./$.export');\n\n$export($export.S, 'Number', {parseInt: parseInt});\n},{\"./$.export\":90}],192:[function(require,module,exports){\n// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./$.export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./$.object-assign')});\n},{\"./$.export\":90,\"./$.object-assign\":121}],193:[function(require,module,exports){\n// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('freeze', function($freeze){\n return function freeze(it){\n return $freeze && isObject(it) ? $freeze(it) : it;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],194:[function(require,module,exports){\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./$.to-iobject');\n\nrequire('./$.object-sap')('getOwnPropertyDescriptor', function($getOwnPropertyDescriptor){\n return function getOwnPropertyDescriptor(it, key){\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n},{\"./$.object-sap\":122,\"./$.to-iobject\":146}],195:[function(require,module,exports){\n// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./$.object-sap')('getOwnPropertyNames', function(){\n return require('./$.get-names').get;\n});\n},{\"./$.get-names\":96,\"./$.object-sap\":122}],196:[function(require,module,exports){\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./$.to-object');\n\nrequire('./$.object-sap')('getPrototypeOf', function($getPrototypeOf){\n return function getPrototypeOf(it){\n return $getPrototypeOf(toObject(it));\n };\n});\n},{\"./$.object-sap\":122,\"./$.to-object\":148}],197:[function(require,module,exports){\n// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('isExtensible', function($isExtensible){\n return function isExtensible(it){\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],198:[function(require,module,exports){\n// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('isFrozen', function($isFrozen){\n return function isFrozen(it){\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],199:[function(require,module,exports){\n// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('isSealed', function($isSealed){\n return function isSealed(it){\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],200:[function(require,module,exports){\n// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./$.export');\n$export($export.S, 'Object', {is: require('./$.same-value')});\n},{\"./$.export\":90,\"./$.same-value\":131}],201:[function(require,module,exports){\n// 19.1.2.14 Object.keys(O)\nvar toObject = require('./$.to-object');\n\nrequire('./$.object-sap')('keys', function($keys){\n return function keys(it){\n return $keys(toObject(it));\n };\n});\n},{\"./$.object-sap\":122,\"./$.to-object\":148}],202:[function(require,module,exports){\n// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('preventExtensions', function($preventExtensions){\n return function preventExtensions(it){\n return $preventExtensions && isObject(it) ? $preventExtensions(it) : it;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],203:[function(require,module,exports){\n// 19.1.2.17 Object.seal(O)\nvar isObject = require('./$.is-object');\n\nrequire('./$.object-sap')('seal', function($seal){\n return function seal(it){\n return $seal && isObject(it) ? $seal(it) : it;\n };\n});\n},{\"./$.is-object\":106,\"./$.object-sap\":122}],204:[function(require,module,exports){\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./$.export');\n$export($export.S, 'Object', {setPrototypeOf: require('./$.set-proto').set});\n},{\"./$.export\":90,\"./$.set-proto\":132}],205:[function(require,module,exports){\n'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./$.classof')\n , test = {};\ntest[require('./$.wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n require('./$.redefine')(Object.prototype, 'toString', function toString(){\n return '[object ' + classof(this) + ']';\n }, true);\n}\n},{\"./$.classof\":78,\"./$.redefine\":129,\"./$.wks\":151}],206:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , LIBRARY = require('./$.library')\n , global = require('./$.global')\n , ctx = require('./$.ctx')\n , classof = require('./$.classof')\n , $export = require('./$.export')\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , strictNew = require('./$.strict-new')\n , forOf = require('./$.for-of')\n , setProto = require('./$.set-proto').set\n , same = require('./$.same-value')\n , SPECIES = require('./$.wks')('species')\n , speciesConstructor = require('./$.species-constructor')\n , asap = require('./$.microtask')\n , PROMISE = 'Promise'\n , process = global.process\n , isNode = classof(process) == 'process'\n , P = global[PROMISE]\n , Wrapper;\n\nvar testResolve = function(sub){\n var test = new P(function(){});\n if(sub)test.constructor = Object;\n return P.resolve(test) === test;\n};\n\nvar USE_NATIVE = function(){\n var works = false;\n function P2(x){\n var self = new P(x);\n setProto(self, P2.prototype);\n return self;\n }\n try {\n works = P && P.resolve && testResolve();\n setProto(P2, P);\n P2.prototype = $.create(P.prototype, {constructor: {value: P2}});\n // actual Firefox has broken subclass support, test that\n if(!(P2.resolve(5).then(function(){}) instanceof P2)){\n works = false;\n }\n // actual V8 bug, https://code.google.com/p/v8/issues/detail?id=4162\n if(works && require('./$.descriptors')){\n var thenableThenGotten = false;\n P.resolve($.setDesc({}, 'then', {\n get: function(){ thenableThenGotten = true; }\n }));\n works = thenableThenGotten;\n }\n } catch(e){ works = false; }\n return works;\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n // library wrapper special case\n if(LIBRARY && a === P && b === Wrapper)return true;\n return same(a, b);\n};\nvar getConstructor = function(C){\n var S = anObject(C)[SPECIES];\n return S != undefined ? S : C;\n};\nvar isThenable = function(it){\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar PromiseCapability = function(C){\n var resolve, reject;\n this.promise = new C(function($$resolve, $$reject){\n if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve),\n this.reject = aFunction(reject)\n};\nvar perform = function(exec){\n try {\n exec();\n } catch(e){\n return {error: e};\n }\n};\nvar notify = function(record, isReject){\n if(record.n)return;\n record.n = true;\n var chain = record.c;\n asap(function(){\n var value = record.v\n , ok = record.s == 1\n , i = 0;\n var run = function(reaction){\n var handler = ok ? reaction.ok : reaction.fail\n , resolve = reaction.resolve\n , reject = reaction.reject\n , result, then;\n try {\n if(handler){\n if(!ok)record.h = true;\n result = handler === true ? value : handler(value);\n if(result === reaction.promise){\n reject(TypeError('Promise-chain cycle'));\n } else if(then = isThenable(result)){\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch(e){\n reject(e);\n }\n };\n while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n chain.length = 0;\n record.n = false;\n if(isReject)setTimeout(function(){\n var promise = record.p\n , handler, console;\n if(isUnhandled(promise)){\n if(isNode){\n process.emit('unhandledRejection', value, promise);\n } else if(handler = global.onunhandledrejection){\n handler({promise: promise, reason: value});\n } else if((console = global.console) && console.error){\n console.error('Unhandled promise rejection', value);\n }\n } record.a = undefined;\n }, 1);\n });\n};\nvar isUnhandled = function(promise){\n var record = promise._d\n , chain = record.a || record.c\n , i = 0\n , reaction;\n if(record.h)return false;\n while(chain.length > i){\n reaction = chain[i++];\n if(reaction.fail || !isUnhandled(reaction.promise))return false;\n } return true;\n};\nvar $reject = function(value){\n var record = this;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n record.v = value;\n record.s = 2;\n record.a = record.c.slice();\n notify(record, true);\n};\nvar $resolve = function(value){\n var record = this\n , then;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n try {\n if(record.p === value)throw TypeError(\"Promise can't be resolved itself\");\n if(then = isThenable(value)){\n asap(function(){\n var wrapper = {r: record, d: false}; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch(e){\n $reject.call(wrapper, e);\n }\n });\n } else {\n record.v = value;\n record.s = 1;\n notify(record, false);\n }\n } catch(e){\n $reject.call({r: record, d: false}, e); // wrap\n }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n // 25.4.3.1 Promise(executor)\n P = function Promise(executor){\n aFunction(executor);\n var record = this._d = {\n p: strictNew(this, P, PROMISE), // <- promise\n c: [], // <- awaiting reactions\n a: undefined, // <- checked in isUnhandled reactions\n s: 0, // <- state\n d: false, // <- done\n v: undefined, // <- value\n h: false, // <- handled rejection\n n: false // <- notify\n };\n try {\n executor(ctx($resolve, record, 1), ctx($reject, record, 1));\n } catch(err){\n $reject.call(record, err);\n }\n };\n require('./$.redefine-all')(P.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected){\n var reaction = new PromiseCapability(speciesConstructor(this, P))\n , promise = reaction.promise\n , record = this._d;\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n record.c.push(reaction);\n if(record.a)record.a.push(reaction);\n if(record.s)notify(record, false);\n return promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function(onRejected){\n return this.then(undefined, onRejected);\n }\n });\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: P});\nrequire('./$.set-to-string-tag')(P, PROMISE);\nrequire('./$.set-species')(PROMISE);\nWrapper = require('./$.core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r){\n var capability = new PromiseCapability(this)\n , $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (!USE_NATIVE || testResolve(true)), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x){\n // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n if(x instanceof P && sameConstructor(x.constructor, this))return x;\n var capability = new PromiseCapability(this)\n , $$resolve = capability.resolve;\n $$resolve(x);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./$.iter-detect')(function(iter){\n P.all(iter)['catch'](function(){});\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , resolve = capability.resolve\n , reject = capability.reject\n , values = [];\n var abrupt = perform(function(){\n forOf(iterable, false, values.push, values);\n var remaining = values.length\n , results = Array(remaining);\n if(remaining)$.each.call(values, function(promise, index){\n var alreadyCalled = false;\n C.resolve(promise).then(function(value){\n if(alreadyCalled)return;\n alreadyCalled = true;\n results[index] = value;\n --remaining || resolve(results);\n }, reject);\n });\n else resolve(results);\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , reject = capability.reject;\n var abrupt = perform(function(){\n forOf(iterable, false, function(promise){\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n }\n});\n},{\"./$\":114,\"./$.a-function\":70,\"./$.an-object\":72,\"./$.classof\":78,\"./$.core\":84,\"./$.ctx\":85,\"./$.descriptors\":87,\"./$.export\":90,\"./$.for-of\":95,\"./$.global\":97,\"./$.is-object\":106,\"./$.iter-detect\":111,\"./$.library\":116,\"./$.microtask\":120,\"./$.redefine-all\":128,\"./$.same-value\":131,\"./$.set-proto\":132,\"./$.set-species\":133,\"./$.set-to-string-tag\":134,\"./$.species-constructor\":136,\"./$.strict-new\":137,\"./$.wks\":151}],207:[function(require,module,exports){\n// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./$.export')\n , _apply = Function.apply;\n\n$export($export.S, 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList){\n return _apply.call(target, thisArgument, argumentsList);\n }\n});\n},{\"./$.export\":90}],208:[function(require,module,exports){\n// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $ = require('./$')\n , $export = require('./$.export')\n , aFunction = require('./$.a-function')\n , anObject = require('./$.an-object')\n , isObject = require('./$.is-object')\n , bind = Function.bind || require('./$.core').Function.prototype.bind;\n\n// MS Edge supports only 2 arguments\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n$export($export.S + $export.F * require('./$.fails')(function(){\n function F(){}\n return !(Reflect.construct(function(){}, [], F) instanceof F);\n}), 'Reflect', {\n construct: function construct(Target, args /*, newTarget*/){\n aFunction(Target);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if(Target == newTarget){\n // w/o altered newTarget, optimization for 0-4 arguments\n if(args != undefined)switch(anObject(args).length){\n case 0: return new Target;\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args));\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype\n , instance = $.create(isObject(proto) ? proto : Object.prototype)\n , result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n},{\"./$\":114,\"./$.a-function\":70,\"./$.an-object\":72,\"./$.core\":84,\"./$.export\":90,\"./$.fails\":92,\"./$.is-object\":106}],209:[function(require,module,exports){\n// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar $ = require('./$')\n , $export = require('./$.export')\n , anObject = require('./$.an-object');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./$.fails')(function(){\n Reflect.defineProperty($.setDesc({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes){\n anObject(target);\n try {\n $.setDesc(target, propertyKey, attributes);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90,\"./$.fails\":92}],210:[function(require,module,exports){\n// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./$.export')\n , getDesc = require('./$').getDesc\n , anObject = require('./$.an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey){\n var desc = getDesc(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90}],211:[function(require,module,exports){\n'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./$.export')\n , anObject = require('./$.an-object');\nvar Enumerate = function(iterated){\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = [] // keys\n , key;\n for(key in iterated)keys.push(key);\n};\nrequire('./$.iter-create')(Enumerate, 'Object', function(){\n var that = this\n , keys = that._k\n , key;\n do {\n if(that._i >= keys.length)return {value: undefined, done: true};\n } while(!((key = keys[that._i++]) in that._t));\n return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target){\n return new Enumerate(target);\n }\n});\n},{\"./$.an-object\":72,\"./$.export\":90,\"./$.iter-create\":109}],212:[function(require,module,exports){\n// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar $ = require('./$')\n , $export = require('./$.export')\n , anObject = require('./$.an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n return $.getDesc(anObject(target), propertyKey);\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90}],213:[function(require,module,exports){\n// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./$.export')\n , getProto = require('./$').getProto\n , anObject = require('./$.an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target){\n return getProto(anObject(target));\n }\n});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90}],214:[function(require,module,exports){\n// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar $ = require('./$')\n , has = require('./$.has')\n , $export = require('./$.export')\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n var receiver = arguments.length < 3 ? target : arguments[2]\n , desc, proto;\n if(anObject(target) === receiver)return target[propertyKey];\n if(desc = $.getDesc(target, propertyKey))return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if(isObject(proto = $.getProto(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90,\"./$.has\":98,\"./$.is-object\":106}],215:[function(require,module,exports){\n// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./$.export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey){\n return propertyKey in target;\n }\n});\n},{\"./$.export\":90}],216:[function(require,module,exports){\n// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./$.export')\n , anObject = require('./$.an-object')\n , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target){\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n},{\"./$.an-object\":72,\"./$.export\":90}],217:[function(require,module,exports){\n// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./$.export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./$.own-keys')});\n},{\"./$.export\":90,\"./$.own-keys\":124}],218:[function(require,module,exports){\n// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./$.export')\n , anObject = require('./$.an-object')\n , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target){\n anObject(target);\n try {\n if($preventExtensions)$preventExtensions(target);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n},{\"./$.an-object\":72,\"./$.export\":90}],219:[function(require,module,exports){\n// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./$.export')\n , setProto = require('./$.set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto){\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch(e){\n return false;\n }\n }\n});\n},{\"./$.export\":90,\"./$.set-proto\":132}],220:[function(require,module,exports){\n// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar $ = require('./$')\n , has = require('./$.has')\n , $export = require('./$.export')\n , createDesc = require('./$.property-desc')\n , anObject = require('./$.an-object')\n , isObject = require('./$.is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n var receiver = arguments.length < 4 ? target : arguments[3]\n , ownDesc = $.getDesc(anObject(target), propertyKey)\n , existingDescriptor, proto;\n if(!ownDesc){\n if(isObject(proto = $.getProto(target))){\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if(has(ownDesc, 'value')){\n if(ownDesc.writable === false || !isObject(receiver))return false;\n existingDescriptor = $.getDesc(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n $.setDesc(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});\n},{\"./$\":114,\"./$.an-object\":72,\"./$.export\":90,\"./$.has\":98,\"./$.is-object\":106,\"./$.property-desc\":127}],221:[function(require,module,exports){\nvar $ = require('./$')\n , global = require('./$.global')\n , isRegExp = require('./$.is-regexp')\n , $flags = require('./$.flags')\n , $RegExp = global.RegExp\n , Base = $RegExp\n , proto = $RegExp.prototype\n , re1 = /a/g\n , re2 = /a/g\n // \"new\" creates a new object, old webkit buggy here\n , CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif(require('./$.descriptors') && (!CORRECT_NEW || require('./$.fails')(function(){\n re2[require('./$.wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n $RegExp = function RegExp(p, f){\n var piRE = isRegExp(p)\n , fiU = f === undefined;\n return !(this instanceof $RegExp) && piRE && p.constructor === $RegExp && fiU ? p\n : CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f);\n };\n $.each.call($.getNames(Base), function(key){\n key in $RegExp || $.setDesc($RegExp, key, {\n configurable: true,\n get: function(){ return Base[key]; },\n set: function(it){ Base[key] = it; }\n });\n });\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./$.redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./$.set-species')('RegExp');\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.fails\":92,\"./$.flags\":94,\"./$.global\":97,\"./$.is-regexp\":107,\"./$.redefine\":129,\"./$.set-species\":133,\"./$.wks\":151}],222:[function(require,module,exports){\n// 21.2.5.3 get RegExp.prototype.flags()\nvar $ = require('./$');\nif(require('./$.descriptors') && /./g.flags != 'g')$.setDesc(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./$.flags')\n});\n},{\"./$\":114,\"./$.descriptors\":87,\"./$.flags\":94}],223:[function(require,module,exports){\n// @@match logic\nrequire('./$.fix-re-wks')('match', 1, function(defined, MATCH){\n // 21.1.3.11 String.prototype.match(regexp)\n return function match(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n };\n});\n},{\"./$.fix-re-wks\":93}],224:[function(require,module,exports){\n// @@replace logic\nrequire('./$.fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return function replace(searchValue, replaceValue){\n 'use strict';\n var O = defined(this)\n , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n };\n});\n},{\"./$.fix-re-wks\":93}],225:[function(require,module,exports){\n// @@search logic\nrequire('./$.fix-re-wks')('search', 1, function(defined, SEARCH){\n // 21.1.3.15 String.prototype.search(regexp)\n return function search(regexp){\n 'use strict';\n var O = defined(this)\n , fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n };\n});\n},{\"./$.fix-re-wks\":93}],226:[function(require,module,exports){\n// @@split logic\nrequire('./$.fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n // 21.1.3.17 String.prototype.split(separator, limit)\n return function split(separator, limit){\n 'use strict';\n var O = defined(this)\n , fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined\n ? fn.call(separator, O, limit)\n : $split.call(String(O), separator, limit);\n };\n});\n},{\"./$.fix-re-wks\":93}],227:[function(require,module,exports){\n'use strict';\nvar strong = require('./$.collection-strong');\n\n// 23.2 Set Objects\nrequire('./$.collection')('Set', function(get){\n return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value){\n return strong.def(this, value = value === 0 ? 0 : value, value);\n }\n}, strong);\n},{\"./$.collection\":83,\"./$.collection-strong\":80}],228:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $at = require('./$.string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos){\n return $at(this, pos);\n }\n});\n},{\"./$.export\":90,\"./$.string-at\":138}],229:[function(require,module,exports){\n// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./$.export')\n , toLength = require('./$.to-length')\n , context = require('./$.string-context')\n , ENDS_WITH = 'endsWith'\n , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./$.fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /*, endPosition = @length */){\n var that = context(this, searchString, ENDS_WITH)\n , $$ = arguments\n , endPosition = $$.length > 1 ? $$[1] : undefined\n , len = toLength(that.length)\n , end = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n , search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n},{\"./$.export\":90,\"./$.fails-is-regexp\":91,\"./$.string-context\":139,\"./$.to-length\":147}],230:[function(require,module,exports){\nvar $export = require('./$.export')\n , toIndex = require('./$.to-index')\n , fromCharCode = String.fromCharCode\n , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n var res = []\n , $$ = arguments\n , $$len = $$.length\n , i = 0\n , code;\n while($$len > i){\n code = +$$[i++];\n if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n},{\"./$.export\":90,\"./$.to-index\":144}],231:[function(require,module,exports){\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./$.export')\n , context = require('./$.string-context')\n , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./$.fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /*, position = 0 */){\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n},{\"./$.export\":90,\"./$.fails-is-regexp\":91,\"./$.string-context\":139}],232:[function(require,module,exports){\narguments[4][66][0].apply(exports,arguments)\n},{\"./$.iter-define\":110,\"./$.string-at\":138,\"dup\":66}],233:[function(require,module,exports){\nvar $export = require('./$.export')\n , toIObject = require('./$.to-iobject')\n , toLength = require('./$.to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite){\n var tpl = toIObject(callSite.raw)\n , len = toLength(tpl.length)\n , $$ = arguments\n , $$len = $$.length\n , res = []\n , i = 0;\n while(len > i){\n res.push(String(tpl[i++]));\n if(i < $$len)res.push(String($$[i]));\n } return res.join('');\n }\n});\n},{\"./$.export\":90,\"./$.to-iobject\":146,\"./$.to-length\":147}],234:[function(require,module,exports){\nvar $export = require('./$.export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./$.string-repeat')\n});\n},{\"./$.export\":90,\"./$.string-repeat\":141}],235:[function(require,module,exports){\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./$.export')\n , toLength = require('./$.to-length')\n , context = require('./$.string-context')\n , STARTS_WITH = 'startsWith'\n , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./$.fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /*, position = 0 */){\n var that = context(this, searchString, STARTS_WITH)\n , $$ = arguments\n , index = toLength(Math.min($$.length > 1 ? $$[1] : undefined, that.length))\n , search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n},{\"./$.export\":90,\"./$.fails-is-regexp\":91,\"./$.string-context\":139,\"./$.to-length\":147}],236:[function(require,module,exports){\n'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./$.string-trim')('trim', function($trim){\n return function trim(){\n return $trim(this, 3);\n };\n});\n},{\"./$.string-trim\":142}],237:[function(require,module,exports){\narguments[4][67][0].apply(exports,arguments)\n},{\"./$\":114,\"./$.an-object\":72,\"./$.descriptors\":87,\"./$.enum-keys\":89,\"./$.export\":90,\"./$.fails\":92,\"./$.get-names\":96,\"./$.global\":97,\"./$.has\":98,\"./$.is-array\":104,\"./$.keyof\":115,\"./$.library\":116,\"./$.property-desc\":127,\"./$.redefine\":129,\"./$.set-to-string-tag\":134,\"./$.shared\":135,\"./$.to-iobject\":146,\"./$.uid\":150,\"./$.wks\":151,\"dup\":67}],238:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , redefine = require('./$.redefine')\n , weak = require('./$.collection-weak')\n , isObject = require('./$.is-object')\n , has = require('./$.has')\n , frozenStore = weak.frozenStore\n , WEAK = weak.WEAK\n , isExtensible = Object.isExtensible || isObject\n , tmp = {};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = require('./$.collection')('WeakMap', function(get){\n return function WeakMap(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key){\n if(isObject(key)){\n if(!isExtensible(key))return frozenStore(this).get(key);\n if(has(key, WEAK))return key[WEAK][this._i];\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value){\n return weak.def(this, key, value);\n }\n}, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n $.each.call(['delete', 'has', 'get', 'set'], function(key){\n var proto = $WeakMap.prototype\n , method = proto[key];\n redefine(proto, key, function(a, b){\n // store frozen objects on leaky map\n if(isObject(a) && !isExtensible(a)){\n var result = frozenStore(this)[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n},{\"./$\":114,\"./$.collection\":83,\"./$.collection-weak\":82,\"./$.has\":98,\"./$.is-object\":106,\"./$.redefine\":129}],239:[function(require,module,exports){\n'use strict';\nvar weak = require('./$.collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./$.collection')('WeakSet', function(get){\n return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value){\n return weak.def(this, value, true);\n }\n}, weak, false, true);\n},{\"./$.collection\":83,\"./$.collection-weak\":82}],240:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $includes = require('./$.array-includes')(true);\n\n$export($export.P, 'Array', {\n // https://github.com/domenic/Array.prototype.includes\n includes: function includes(el /*, fromIndex = 0 */){\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./$.add-to-unscopables')('includes');\n},{\"./$.add-to-unscopables\":71,\"./$.array-includes\":75,\"./$.export\":90}],241:[function(require,module,exports){\narguments[4][68][0].apply(exports,arguments)\n},{\"./$.collection-to-json\":81,\"./$.export\":90,\"dup\":68}],242:[function(require,module,exports){\n// http://goo.gl/XkBrjD\nvar $export = require('./$.export')\n , $entries = require('./$.object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it){\n return $entries(it);\n }\n});\n},{\"./$.export\":90,\"./$.object-to-array\":123}],243:[function(require,module,exports){\n// https://gist.github.com/WebReflection/9353781\nvar $ = require('./$')\n , $export = require('./$.export')\n , ownKeys = require('./$.own-keys')\n , toIObject = require('./$.to-iobject')\n , createDesc = require('./$.property-desc');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){\n var O = toIObject(object)\n , setDesc = $.setDesc\n , getDesc = $.getDesc\n , keys = ownKeys(O)\n , result = {}\n , i = 0\n , key, D;\n while(keys.length > i){\n D = getDesc(O, key = keys[i++]);\n if(key in result)setDesc(result, key, createDesc(0, D));\n else result[key] = D;\n } return result;\n }\n});\n},{\"./$\":114,\"./$.export\":90,\"./$.own-keys\":124,\"./$.property-desc\":127,\"./$.to-iobject\":146}],244:[function(require,module,exports){\n// http://goo.gl/XkBrjD\nvar $export = require('./$.export')\n , $values = require('./$.object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it){\n return $values(it);\n }\n});\n},{\"./$.export\":90,\"./$.object-to-array\":123}],245:[function(require,module,exports){\n// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./$.export')\n , $re = require('./$.replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});\n\n},{\"./$.export\":90,\"./$.replacer\":130}],246:[function(require,module,exports){\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./$.export');\n\n$export($export.P, 'Set', {toJSON: require('./$.collection-to-json')('Set')});\n},{\"./$.collection-to-json\":81,\"./$.export\":90}],247:[function(require,module,exports){\n'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./$.export')\n , $at = require('./$.string-at')(true);\n\n$export($export.P, 'String', {\n at: function at(pos){\n return $at(this, pos);\n }\n});\n},{\"./$.export\":90,\"./$.string-at\":138}],248:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $pad = require('./$.string-pad');\n\n$export($export.P, 'String', {\n padLeft: function padLeft(maxLength /*, fillString = ' ' */){\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n},{\"./$.export\":90,\"./$.string-pad\":140}],249:[function(require,module,exports){\n'use strict';\nvar $export = require('./$.export')\n , $pad = require('./$.string-pad');\n\n$export($export.P, 'String', {\n padRight: function padRight(maxLength /*, fillString = ' ' */){\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n},{\"./$.export\":90,\"./$.string-pad\":140}],250:[function(require,module,exports){\n'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./$.string-trim')('trimLeft', function($trim){\n return function trimLeft(){\n return $trim(this, 1);\n };\n});\n},{\"./$.string-trim\":142}],251:[function(require,module,exports){\n'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./$.string-trim')('trimRight', function($trim){\n return function trimRight(){\n return $trim(this, 2);\n };\n});\n},{\"./$.string-trim\":142}],252:[function(require,module,exports){\n// JavaScript 1.6 / Strawman array statics shim\nvar $ = require('./$')\n , $export = require('./$.export')\n , $ctx = require('./$.ctx')\n , $Array = require('./$.core').Array || Array\n , statics = {};\nvar setStatics = function(keys, length){\n $.each.call(keys.split(','), function(key){\n if(length == undefined && key in $Array)statics[key] = $Array[key];\n else if(key in [])statics[key] = $ctx(Function.call, [][key], length);\n });\n};\nsetStatics('pop,reverse,shift,keys,values,entries', 1);\nsetStatics('indexOf,every,some,forEach,map,filter,find,findIndex,includes', 3);\nsetStatics('join,slice,concat,push,splice,unshift,sort,lastIndexOf,' +\n 'reduce,reduceRight,copyWithin,fill');\n$export($export.S, 'Array', statics);\n},{\"./$\":114,\"./$.core\":84,\"./$.ctx\":85,\"./$.export\":90}],253:[function(require,module,exports){\nrequire('./es6.array.iterator');\nvar global = require('./$.global')\n , hide = require('./$.hide')\n , Iterators = require('./$.iterators')\n , ITERATOR = require('./$.wks')('iterator')\n , NL = global.NodeList\n , HTC = global.HTMLCollection\n , NLProto = NL && NL.prototype\n , HTCProto = HTC && HTC.prototype\n , ArrayValues = Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array;\nif(NLProto && !NLProto[ITERATOR])hide(NLProto, ITERATOR, ArrayValues);\nif(HTCProto && !HTCProto[ITERATOR])hide(HTCProto, ITERATOR, ArrayValues);\n},{\"./$.global\":97,\"./$.hide\":99,\"./$.iterators\":113,\"./$.wks\":151,\"./es6.array.iterator\":159}],254:[function(require,module,exports){\nvar $export = require('./$.export')\n , $task = require('./$.task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n},{\"./$.export\":90,\"./$.task\":143}],255:[function(require,module,exports){\n// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./$.global')\n , $export = require('./$.export')\n , invoke = require('./$.invoke')\n , partial = require('./$.partial')\n , navigator = global.navigator\n , MSIE = !!navigator && /MSIE .\\./.test(navigator.userAgent); // <- dirty ie9- check\nvar wrap = function(set){\n return MSIE ? function(fn, time /*, ...args */){\n return set(invoke(\n partial,\n [].slice.call(arguments, 2),\n typeof fn == 'function' ? fn : Function(fn)\n ), time);\n } : set;\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n},{\"./$.export\":90,\"./$.global\":97,\"./$.invoke\":101,\"./$.partial\":125}],256:[function(require,module,exports){\nrequire('./modules/es5');\nrequire('./modules/es6.symbol');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-left');\nrequire('./modules/es7.string.pad-right');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.regexp.escape');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/js.array.statics');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/$.core');\n},{\"./modules/$.core\":84,\"./modules/es5\":153,\"./modules/es6.array.copy-within\":154,\"./modules/es6.array.fill\":155,\"./modules/es6.array.find\":157,\"./modules/es6.array.find-index\":156,\"./modules/es6.array.from\":158,\"./modules/es6.array.iterator\":159,\"./modules/es6.array.of\":160,\"./modules/es6.array.species\":161,\"./modules/es6.function.has-instance\":162,\"./modules/es6.function.name\":163,\"./modules/es6.map\":164,\"./modules/es6.math.acosh\":165,\"./modules/es6.math.asinh\":166,\"./modules/es6.math.atanh\":167,\"./modules/es6.math.cbrt\":168,\"./modules/es6.math.clz32\":169,\"./modules/es6.math.cosh\":170,\"./modules/es6.math.expm1\":171,\"./modules/es6.math.fround\":172,\"./modules/es6.math.hypot\":173,\"./modules/es6.math.imul\":174,\"./modules/es6.math.log10\":175,\"./modules/es6.math.log1p\":176,\"./modules/es6.math.log2\":177,\"./modules/es6.math.sign\":178,\"./modules/es6.math.sinh\":179,\"./modules/es6.math.tanh\":180,\"./modules/es6.math.trunc\":181,\"./modules/es6.number.constructor\":182,\"./modules/es6.number.epsilon\":183,\"./modules/es6.number.is-finite\":184,\"./modules/es6.number.is-integer\":185,\"./modules/es6.number.is-nan\":186,\"./modules/es6.number.is-safe-integer\":187,\"./modules/es6.number.max-safe-integer\":188,\"./modules/es6.number.min-safe-integer\":189,\"./modules/es6.number.parse-float\":190,\"./modules/es6.number.parse-int\":191,\"./modules/es6.object.assign\":192,\"./modules/es6.object.freeze\":193,\"./modules/es6.object.get-own-property-descriptor\":194,\"./modules/es6.object.get-own-property-names\":195,\"./modules/es6.object.get-prototype-of\":196,\"./modules/es6.object.is\":200,\"./modules/es6.object.is-extensible\":197,\"./modules/es6.object.is-frozen\":198,\"./modules/es6.object.is-sealed\":199,\"./modules/es6.object.keys\":201,\"./modules/es6.object.prevent-extensions\":202,\"./modules/es6.object.seal\":203,\"./modules/es6.object.set-prototype-of\":204,\"./modules/es6.object.to-string\":205,\"./modules/es6.promise\":206,\"./modules/es6.reflect.apply\":207,\"./modules/es6.reflect.construct\":208,\"./modules/es6.reflect.define-property\":209,\"./modules/es6.reflect.delete-property\":210,\"./modules/es6.reflect.enumerate\":211,\"./modules/es6.reflect.get\":214,\"./modules/es6.reflect.get-own-property-descriptor\":212,\"./modules/es6.reflect.get-prototype-of\":213,\"./modules/es6.reflect.has\":215,\"./modules/es6.reflect.is-extensible\":216,\"./modules/es6.reflect.own-keys\":217,\"./modules/es6.reflect.prevent-extensions\":218,\"./modules/es6.reflect.set\":220,\"./modules/es6.reflect.set-prototype-of\":219,\"./modules/es6.regexp.constructor\":221,\"./modules/es6.regexp.flags\":222,\"./modules/es6.regexp.match\":223,\"./modules/es6.regexp.replace\":224,\"./modules/es6.regexp.search\":225,\"./modules/es6.regexp.split\":226,\"./modules/es6.set\":227,\"./modules/es6.string.code-point-at\":228,\"./modules/es6.string.ends-with\":229,\"./modules/es6.string.from-code-point\":230,\"./modules/es6.string.includes\":231,\"./modules/es6.string.iterator\":232,\"./modules/es6.string.raw\":233,\"./modules/es6.string.repeat\":234,\"./modules/es6.string.starts-with\":235,\"./modules/es6.string.trim\":236,\"./modules/es6.symbol\":237,\"./modules/es6.weak-map\":238,\"./modules/es6.weak-set\":239,\"./modules/es7.array.includes\":240,\"./modules/es7.map.to-json\":241,\"./modules/es7.object.entries\":242,\"./modules/es7.object.get-own-property-descriptors\":243,\"./modules/es7.object.values\":244,\"./modules/es7.regexp.escape\":245,\"./modules/es7.set.to-json\":246,\"./modules/es7.string.at\":247,\"./modules/es7.string.pad-left\":248,\"./modules/es7.string.pad-right\":249,\"./modules/es7.string.trim-left\":250,\"./modules/es7.string.trim-right\":251,\"./modules/js.array.statics\":252,\"./modules/web.dom.iterable\":253,\"./modules/web.immediate\":254,\"./modules/web.timers\":255}],257:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],258:[function(require,module,exports){\n(function (process,global){\n/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":257}],259:[function(require,module,exports){\n'use strict';\n\nvar _createClass = require('babel-runtime/helpers/create-class')['default'];\n\nvar _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];\n\nvar _Symbol = require('babel-runtime/core-js/symbol')['default'];\n\nvar _Map = require('babel-runtime/core-js/map')['default'];\n\nvar _Array$from = require('babel-runtime/core-js/array/from')['default'];\n\nif (!window.altspace) {\n\twindow.altspace = {};\n}\nif (!window.altspace.utilities) {\n\twindow.altspace.utilities = {};\n}\nif (!window.altspace.utilities.behaviors) {\n\twindow.altspace.utilities.behaviors = {};\n}\n\nrequire('babel/polyfill');\nvar containerMax = _Symbol('containerMax'),\n containerMin = _Symbol('containerMin'),\n object3D = _Symbol('object3D'),\n boundingBox = _Symbol('boundingBox'),\n origMatrix = _Symbol('origMatrix'),\n origMatrixAutoUpdate = _Symbol('origMatrixAutoUpdate'),\n parent = _Symbol('parent'),\n enclosure = _Symbol('enclosure'),\n origParentBoundingBoxes = new _Map();\n\n/**\r\n * The Layout behavior allows you to position objects easily. You can \r\n * position an object relative to its parent (either the Scene or a \r\n * another object) by using a position specifier for each of the axes.\r\n * The position specifier can be one of 'min', 'center' or 'max'. The default\r\n * specifier is 'center'. You can also add a modifier to the position in pixels\r\n * ('min+5'), a percentage ('min+10%') or meters ('min+1m'). Finally, you can \r\n * choose the location of the anchor on the object you are trying to position \r\n * by using the 'my' parameter.\r\n * You must specify at least one axis on the 'at' parameter.\r\n *\r\n * @example\r\n * // Position the top of the cube at 1.5 meters above the bottom of its parent.\r\n * cube.addBehavior(new altpsace.utilities.behaviors.Layout({\r\n *\t my: {y: 'max'}, \r\n *\t at: {y: 'min+1.5m'}\r\n * });\r\n *\r\n * @class Layout\r\n * @memberof module:altspace/utilities/behaviors\r\n * @param {Object} config\r\n * @param {Object} config.at An object containing the axes and position \r\n * specifiers. At least one axis must be specificed. E.g. `{x: 'min', y: 'max-5%'}`\r\n * @param {Object} [config.my] An object containing the axes and position\r\n * specifiers for the layout anchor.\r\n **/\n\nvar Layout = (function () {\n\tfunction Layout(_ref) {\n\t\tvar _ref$my = _ref.my;\n\t\tvar my = _ref$my === undefined ? {} : _ref$my;\n\t\tvar at = _ref.at;\n\n\t\t_classCallCheck(this, Layout);\n\n\t\tthis.my = my;\n\t\tthis.at = at;\n\t}\n\n\t// TODO-BP Ideally these would be private methods.\n\n\t_createClass(Layout, [{\n\t\tkey: 'getAxisSettings',\n\t\tvalue: function getAxisSettings(axis, axisValue, min, max) {\n\t\t\taxisValue = axisValue || 'center';\n\t\t\taxisValue = /(\\w+)([-+].+)?/.exec(axisValue);\n\t\t\tvar position = axisValue[1];\n\t\t\tvar offsetSetting = axisValue[2];\n\t\t\tvar offset = parseFloat(offsetSetting) || 0;\n\t\t\tif (offsetSetting && offsetSetting.endsWith('%')) {\n\t\t\t\toffset = offset / 100 * (max[axis] - min[axis]);\n\t\t\t} else if (offsetSetting && offsetSetting.endsWith('m')) {\n\t\t\t\tconsole.log(offset, this[enclosure]);\n\t\t\t\toffset = offset * this[enclosure].pixelsPerMeter;\n\t\t\t\tconsole.log(offset);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tposition: position,\n\t\t\t\toffset: offset\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: 'getAnchorOffset',\n\t\tvalue: function getAnchorOffset(axis, axisValue) {\n\t\t\tvar max = this[boundingBox].max;\n\t\t\tvar min = this[boundingBox].min;\n\n\t\t\tvar _getAxisSettings = this.getAxisSettings(axis, axisValue, min, max);\n\n\t\t\tvar position = _getAxisSettings.position;\n\t\t\tvar offset = _getAxisSettings.offset;\n\n\t\t\tif (position === 'max') {\n\t\t\t\treturn -max[axis] + offset;\n\t\t\t} else if (position === 'min') {\n\t\t\t\treturn -min[axis] + offset;\n\t\t\t} else if (position === 'center') {\n\t\t\t\treturn offset;\n\t\t\t} else {\n\t\t\t\tthrow new Error(axisValue + ' is an invalid layout position for ' + axis);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'doLayout',\n\t\tvalue: function doLayout() {\n\t\t\tvar _this = this;\n\n\t\t\t_Array$from('xyz').forEach(function (axis) {\n\t\t\t\tvar _getAxisSettings2 = _this.getAxisSettings(axis, _this.at[axis], _this[containerMin], _this[containerMax]);\n\n\t\t\t\tvar position = _getAxisSettings2.position;\n\t\t\t\tvar offset = _getAxisSettings2.offset;\n\n\t\t\t\tvar anchorOffset = _this.getAnchorOffset(axis, _this.my[axis]);\n\t\t\t\tif (position === 'max') {\n\t\t\t\t\t_this[object3D].position[axis] = _this[containerMax][axis] + offset + anchorOffset;\n\t\t\t\t} else if (position === 'min') {\n\t\t\t\t\t_this[object3D].position[axis] = _this[containerMin][axis] + offset + anchorOffset;\n\t\t\t\t} else if (position === 'center') {\n\t\t\t\t\t_this[object3D].position[axis] = offset + anchorOffset;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(_this.at[axis] + ' is an invalid layout position for ' + axis);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this[parent]) {\n\t\t\t\t// Restore the original parent transform\n\t\t\t\tthis[parent].matrix = this[origMatrix];\n\t\t\t\tthis[parent].updateMatrixWorld(true);\n\t\t\t\tthis[parent].matrixAutoUpdate = this[origMatrixAutoUpdate];\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'awake',\n\t\tvalue: function awake(_object3D) {\n\t\t\tvar _this2 = this;\n\n\t\t\tthis[object3D] = _object3D;\n\t\t\tthis[boundingBox] = new THREE.Box3().setFromObject(this[object3D]);\n\n\t\t\t// TODO Listen for resize events on the enclosure\n\t\t\taltspace.getEnclosure().then(function (_enclosure) {\n\t\t\t\t_this2[enclosure] = _enclosure;\n\t\t\t\tif (_this2[object3D].parent instanceof THREE.Scene) {\n\t\t\t\t\tvar hw = _this2[enclosure].innerWidth / 2,\n\t\t\t\t\t hh = _this2[enclosure].innerHeight / 2,\n\t\t\t\t\t hd = _this2[enclosure].innerDepth / 2;\n\t\t\t\t\t_this2[containerMax] = new THREE.Vector3(hw, hh, hd);\n\t\t\t\t\t_this2[containerMin] = new THREE.Vector3(-hw, -hh, -hd);\n\t\t\t\t\t_this2.doLayout();\n\t\t\t\t} else {\n\t\t\t\t\tvar objWorldScale = _this2[object3D].getWorldScale();\n\t\t\t\t\t_this2[boundingBox].min.divide(objWorldScale);\n\t\t\t\t\t_this2[boundingBox].max.divide(objWorldScale);\n\n\t\t\t\t\t_this2[parent] = _this2[object3D].parent;\n\n\t\t\t\t\t_this2[origMatrix] = _this2[parent].matrix.clone();\n\t\t\t\t\t_this2[origMatrixAutoUpdate] = _this2[parent].matrixAutoUpdate;\n\n\t\t\t\t\t// We want to use the un-transormed anchor of the parent.\n\t\t\t\t\t// Reset the parent matrix so that we can get the original bounding box.\n\t\t\t\t\t_this2[parent].matrixAutoUpdate = false;\n\t\t\t\t\t_this2[parent].matrix.identity();\n\n\t\t\t\t\tvar parentBoundingBox = undefined;\n\t\t\t\t\tif (origParentBoundingBoxes.has(_this2[parent].uuid)) {\n\t\t\t\t\t\tparentBoundingBox = origParentBoundingBoxes.get(_this2[parent].uuid);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this2[parent].remove(_this2[object3D]);\n\t\t\t\t\t\tparentBoundingBox = new THREE.Box3().setFromObject(_this2[parent]);\n\t\t\t\t\t\t_this2[parent].add(_this2[object3D]);\n\t\t\t\t\t\torigParentBoundingBoxes.set(_this2[parent].uuid, parentBoundingBox);\n\t\t\t\t\t}\n\n\t\t\t\t\t_this2[containerMax] = parentBoundingBox.max;\n\t\t\t\t\t_this2[containerMin] = parentBoundingBox.min;\n\t\t\t\t\t_this2.doLayout();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn Layout;\n})();\n\nwindow.altspace.utilities.behaviors.Layout = Layout;\n},{\"babel-runtime/core-js/array/from\":3,\"babel-runtime/core-js/map\":4,\"babel-runtime/core-js/symbol\":6,\"babel-runtime/helpers/class-call-check\":7,\"babel-runtime/helpers/create-class\":8,\"babel/polyfill\":9}]},{},[259]);\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o index; index++){\n entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n call(iterator, f, step.value, entries);\n }\n};\n},{\"./$.an-object\":9,\"./$.ctx\":13,\"./$.is-array-iter\":26,\"./$.iter-call\":28,\"./$.to-length\":51,\"./core.get-iterator-method\":54}],20:[function(require,module,exports){\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n},{}],21:[function(require,module,exports){\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n return hasOwnProperty.call(it, key);\n};\n},{}],22:[function(require,module,exports){\nvar $ = require('./$')\n , createDesc = require('./$.property-desc');\nmodule.exports = require('./$.descriptors') ? function(object, key, value){\n return $.setDesc(object, key, createDesc(1, value));\n} : function(object, key, value){\n object[key] = value;\n return object;\n};\n},{\"./$\":34,\"./$.descriptors\":15,\"./$.property-desc\":37}],23:[function(require,module,exports){\nmodule.exports = require('./$.global').document && document.documentElement;\n},{\"./$.global\":20}],24:[function(require,module,exports){\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n var un = that === undefined;\n switch(args.length){\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n},{}],25:[function(require,module,exports){\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./$.cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n},{\"./$.cof\":11}],26:[function(require,module,exports){\n// check on default Array iterator\nvar Iterators = require('./$.iterators')\n , ITERATOR = require('./$.wks')('iterator')\n , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n},{\"./$.iterators\":33,\"./$.wks\":53}],27:[function(require,module,exports){\nmodule.exports = function(it){\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n},{}],28:[function(require,module,exports){\n// call something on iterator step with safe closing on error\nvar anObject = require('./$.an-object');\nmodule.exports = function(iterator, fn, value, entries){\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch(e){\n var ret = iterator['return'];\n if(ret !== undefined)anObject(ret.call(iterator));\n throw e;\n }\n};\n},{\"./$.an-object\":9}],29:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , descriptor = require('./$.property-desc')\n , setToStringTag = require('./$.set-to-string-tag')\n , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./$.hide')(IteratorPrototype, require('./$.wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)});\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n},{\"./$\":34,\"./$.hide\":22,\"./$.property-desc\":37,\"./$.set-to-string-tag\":43,\"./$.wks\":53}],30:[function(require,module,exports){\n'use strict';\nvar LIBRARY = require('./$.library')\n , $export = require('./$.export')\n , redefine = require('./$.redefine')\n , hide = require('./$.hide')\n , has = require('./$.has')\n , Iterators = require('./$.iterators')\n , $iterCreate = require('./$.iter-create')\n , setToStringTag = require('./$.set-to-string-tag')\n , getProto = require('./$').getProto\n , ITERATOR = require('./$.wks')('iterator')\n , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n , FF_ITERATOR = '@@iterator'\n , KEYS = 'keys'\n , VALUES = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n $iterCreate(Constructor, NAME, next);\n var getMethod = function(kind){\n if(!BUGGY && kind in proto)return proto[kind];\n switch(kind){\n case KEYS: return function keys(){ return new Constructor(this, kind); };\n case VALUES: return function values(){ return new Constructor(this, kind); };\n } return function entries(){ return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator'\n , DEF_VALUES = DEFAULT == VALUES\n , VALUES_BUG = false\n , proto = Base.prototype\n , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n , $default = $native || getMethod(DEFAULT)\n , methods, key;\n // Fix native\n if($native){\n var IteratorPrototype = getProto($default.call(new Base));\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // FF fix\n if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n // fix Array#{values, @@iterator}.name in V8 / FF\n if(DEF_VALUES && $native.name !== VALUES){\n VALUES_BUG = true;\n $default = function values(){ return $native.call(this); };\n }\n }\n // Define iterator\n if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if(DEFAULT){\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: !DEF_VALUES ? $default : getMethod('entries')\n };\n if(FORCED)for(key in methods){\n if(!(key in proto))redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n},{\"./$\":34,\"./$.export\":17,\"./$.has\":21,\"./$.hide\":22,\"./$.iter-create\":29,\"./$.iterators\":33,\"./$.library\":35,\"./$.redefine\":39,\"./$.set-to-string-tag\":43,\"./$.wks\":53}],31:[function(require,module,exports){\nvar ITERATOR = require('./$.wks')('iterator')\n , SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function(){ SAFE_CLOSING = true; };\n Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n if(!skipClosing && !SAFE_CLOSING)return false;\n var safe = false;\n try {\n var arr = [7]\n , iter = arr[ITERATOR]();\n iter.next = function(){ safe = true; };\n arr[ITERATOR] = function(){ return iter; };\n exec(arr);\n } catch(e){ /* empty */ }\n return safe;\n};\n},{\"./$.wks\":53}],32:[function(require,module,exports){\nmodule.exports = function(done, value){\n return {value: value, done: !!done};\n};\n},{}],33:[function(require,module,exports){\nmodule.exports = {};\n},{}],34:[function(require,module,exports){\nvar $Object = Object;\nmodule.exports = {\n create: $Object.create,\n getProto: $Object.getPrototypeOf,\n isEnum: {}.propertyIsEnumerable,\n getDesc: $Object.getOwnPropertyDescriptor,\n setDesc: $Object.defineProperty,\n setDescs: $Object.defineProperties,\n getKeys: $Object.keys,\n getNames: $Object.getOwnPropertyNames,\n getSymbols: $Object.getOwnPropertySymbols,\n each: [].forEach\n};\n},{}],35:[function(require,module,exports){\nmodule.exports = true;\n},{}],36:[function(require,module,exports){\nvar global = require('./$.global')\n , macrotask = require('./$.task').set\n , Observer = global.MutationObserver || global.WebKitMutationObserver\n , process = global.process\n , Promise = global.Promise\n , isNode = require('./$.cof')(process) == 'process'\n , head, last, notify;\n\nvar flush = function(){\n var parent, domain, fn;\n if(isNode && (parent = process.domain)){\n process.domain = null;\n parent.exit();\n }\n while(head){\n domain = head.domain;\n fn = head.fn;\n if(domain)domain.enter();\n fn(); // <- currently we use it only for Promise - try / catch not required\n if(domain)domain.exit();\n head = head.next;\n } last = undefined;\n if(parent)parent.enter();\n};\n\n// Node.js\nif(isNode){\n notify = function(){\n process.nextTick(flush);\n };\n// browsers with MutationObserver\n} else if(Observer){\n var toggle = 1\n , node = document.createTextNode('');\n new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n notify = function(){\n node.data = toggle = -toggle;\n };\n// environments with maybe non-completely correct, but existent Promise\n} else if(Promise && Promise.resolve){\n notify = function(){\n Promise.resolve().then(flush);\n };\n// for other environments - macrotask based on:\n// - setImmediate\n// - MessageChannel\n// - window.postMessag\n// - onreadystatechange\n// - setTimeout\n} else {\n notify = function(){\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n}\n\nmodule.exports = function asap(fn){\n var task = {fn: fn, next: undefined, domain: isNode && process.domain};\n if(last)last.next = task;\n if(!head){\n head = task;\n notify();\n } last = task;\n};\n},{\"./$.cof\":11,\"./$.global\":20,\"./$.task\":48}],37:[function(require,module,exports){\nmodule.exports = function(bitmap, value){\n return {\n enumerable : !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable : !(bitmap & 4),\n value : value\n };\n};\n},{}],38:[function(require,module,exports){\nvar redefine = require('./$.redefine');\nmodule.exports = function(target, src){\n for(var key in src)redefine(target, key, src[key]);\n return target;\n};\n},{\"./$.redefine\":39}],39:[function(require,module,exports){\nmodule.exports = require('./$.hide');\n},{\"./$.hide\":22}],40:[function(require,module,exports){\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n},{}],41:[function(require,module,exports){\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar getDesc = require('./$').getDesc\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object');\nvar check = function(O, proto){\n anObject(O);\n if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function(test, buggy, set){\n try {\n set = require('./$.ctx')(Function.call, getDesc(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch(e){ buggy = true; }\n return function setPrototypeOf(O, proto){\n check(O, proto);\n if(buggy)O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n},{\"./$\":34,\"./$.an-object\":9,\"./$.ctx\":13,\"./$.is-object\":27}],42:[function(require,module,exports){\n'use strict';\nvar core = require('./$.core')\n , $ = require('./$')\n , DESCRIPTORS = require('./$.descriptors')\n , SPECIES = require('./$.wks')('species');\n\nmodule.exports = function(KEY){\n var C = core[KEY];\n if(DESCRIPTORS && C && !C[SPECIES])$.setDesc(C, SPECIES, {\n configurable: true,\n get: function(){ return this; }\n });\n};\n},{\"./$\":34,\"./$.core\":12,\"./$.descriptors\":15,\"./$.wks\":53}],43:[function(require,module,exports){\nvar def = require('./$').setDesc\n , has = require('./$.has')\n , TAG = require('./$.wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n},{\"./$\":34,\"./$.has\":21,\"./$.wks\":53}],44:[function(require,module,exports){\nvar global = require('./$.global')\n , SHARED = '__core-js_shared__'\n , store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n return store[key] || (store[key] = {});\n};\n},{\"./$.global\":20}],45:[function(require,module,exports){\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , SPECIES = require('./$.wks')('species');\nmodule.exports = function(O, D){\n var C = anObject(O).constructor, S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n},{\"./$.a-function\":7,\"./$.an-object\":9,\"./$.wks\":53}],46:[function(require,module,exports){\nmodule.exports = function(it, Constructor, name){\n if(!(it instanceof Constructor))throw TypeError(name + \": use the 'new' operator!\");\n return it;\n};\n},{}],47:[function(require,module,exports){\nvar toInteger = require('./$.to-integer')\n , defined = require('./$.defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n return function(that, pos){\n var s = String(defined(that))\n , i = toInteger(pos)\n , l = s.length\n , a, b;\n if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n},{\"./$.defined\":14,\"./$.to-integer\":49}],48:[function(require,module,exports){\nvar ctx = require('./$.ctx')\n , invoke = require('./$.invoke')\n , html = require('./$.html')\n , cel = require('./$.dom-create')\n , global = require('./$.global')\n , process = global.process\n , setTask = global.setImmediate\n , clearTask = global.clearImmediate\n , MessageChannel = global.MessageChannel\n , counter = 0\n , queue = {}\n , ONREADYSTATECHANGE = 'onreadystatechange'\n , defer, channel, port;\nvar run = function(){\n var id = +this;\n if(queue.hasOwnProperty(id)){\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listner = function(event){\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n setTask = function setImmediate(fn){\n var args = [], i = 1;\n while(arguments.length > i)args.push(arguments[i++]);\n queue[++counter] = function(){\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id){\n delete queue[id];\n };\n // Node.js 0.8-\n if(require('./$.cof')(process) == 'process'){\n defer = function(id){\n process.nextTick(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if(MessageChannel){\n channel = new MessageChannel;\n port = channel.port2;\n channel.port1.onmessage = listner;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n defer = function(id){\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listner, false);\n // IE8-\n } else if(ONREADYSTATECHANGE in cel('script')){\n defer = function(id){\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function(id){\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n},{\"./$.cof\":11,\"./$.ctx\":13,\"./$.dom-create\":16,\"./$.global\":20,\"./$.html\":23,\"./$.invoke\":24}],49:[function(require,module,exports){\n// 7.1.4 ToInteger\nvar ceil = Math.ceil\n , floor = Math.floor;\nmodule.exports = function(it){\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n},{}],50:[function(require,module,exports){\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./$.iobject')\n , defined = require('./$.defined');\nmodule.exports = function(it){\n return IObject(defined(it));\n};\n},{\"./$.defined\":14,\"./$.iobject\":25}],51:[function(require,module,exports){\n// 7.1.15 ToLength\nvar toInteger = require('./$.to-integer')\n , min = Math.min;\nmodule.exports = function(it){\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n},{\"./$.to-integer\":49}],52:[function(require,module,exports){\nvar id = 0\n , px = Math.random();\nmodule.exports = function(key){\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n},{}],53:[function(require,module,exports){\nvar store = require('./$.shared')('wks')\n , uid = require('./$.uid')\n , Symbol = require('./$.global').Symbol;\nmodule.exports = function(name){\n return store[name] || (store[name] =\n Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));\n};\n},{\"./$.global\":20,\"./$.shared\":44,\"./$.uid\":52}],54:[function(require,module,exports){\nvar classof = require('./$.classof')\n , ITERATOR = require('./$.wks')('iterator')\n , Iterators = require('./$.iterators');\nmodule.exports = require('./$.core').getIteratorMethod = function(it){\n if(it != undefined)return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n},{\"./$.classof\":10,\"./$.core\":12,\"./$.iterators\":33,\"./$.wks\":53}],55:[function(require,module,exports){\n'use strict';\nvar addToUnscopables = require('./$.add-to-unscopables')\n , step = require('./$.iter-step')\n , Iterators = require('./$.iterators')\n , toIObject = require('./$.to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./$.iter-define')(Array, 'Array', function(iterated, kind){\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , kind = this._k\n , index = this._i++;\n if(!O || index >= O.length){\n this._t = undefined;\n return step(1);\n }\n if(kind == 'keys' )return step(0, index);\n if(kind == 'values')return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n},{\"./$.add-to-unscopables\":8,\"./$.iter-define\":30,\"./$.iter-step\":32,\"./$.iterators\":33,\"./$.to-iobject\":50}],56:[function(require,module,exports){\n\n},{}],57:[function(require,module,exports){\n'use strict';\nvar $ = require('./$')\n , LIBRARY = require('./$.library')\n , global = require('./$.global')\n , ctx = require('./$.ctx')\n , classof = require('./$.classof')\n , $export = require('./$.export')\n , isObject = require('./$.is-object')\n , anObject = require('./$.an-object')\n , aFunction = require('./$.a-function')\n , strictNew = require('./$.strict-new')\n , forOf = require('./$.for-of')\n , setProto = require('./$.set-proto').set\n , same = require('./$.same-value')\n , SPECIES = require('./$.wks')('species')\n , speciesConstructor = require('./$.species-constructor')\n , asap = require('./$.microtask')\n , PROMISE = 'Promise'\n , process = global.process\n , isNode = classof(process) == 'process'\n , P = global[PROMISE]\n , Wrapper;\n\nvar testResolve = function(sub){\n var test = new P(function(){});\n if(sub)test.constructor = Object;\n return P.resolve(test) === test;\n};\n\nvar USE_NATIVE = function(){\n var works = false;\n function P2(x){\n var self = new P(x);\n setProto(self, P2.prototype);\n return self;\n }\n try {\n works = P && P.resolve && testResolve();\n setProto(P2, P);\n P2.prototype = $.create(P.prototype, {constructor: {value: P2}});\n // actual Firefox has broken subclass support, test that\n if(!(P2.resolve(5).then(function(){}) instanceof P2)){\n works = false;\n }\n // actual V8 bug, https://code.google.com/p/v8/issues/detail?id=4162\n if(works && require('./$.descriptors')){\n var thenableThenGotten = false;\n P.resolve($.setDesc({}, 'then', {\n get: function(){ thenableThenGotten = true; }\n }));\n works = thenableThenGotten;\n }\n } catch(e){ works = false; }\n return works;\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n // library wrapper special case\n if(LIBRARY && a === P && b === Wrapper)return true;\n return same(a, b);\n};\nvar getConstructor = function(C){\n var S = anObject(C)[SPECIES];\n return S != undefined ? S : C;\n};\nvar isThenable = function(it){\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar PromiseCapability = function(C){\n var resolve, reject;\n this.promise = new C(function($$resolve, $$reject){\n if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve),\n this.reject = aFunction(reject)\n};\nvar perform = function(exec){\n try {\n exec();\n } catch(e){\n return {error: e};\n }\n};\nvar notify = function(record, isReject){\n if(record.n)return;\n record.n = true;\n var chain = record.c;\n asap(function(){\n var value = record.v\n , ok = record.s == 1\n , i = 0;\n var run = function(reaction){\n var handler = ok ? reaction.ok : reaction.fail\n , resolve = reaction.resolve\n , reject = reaction.reject\n , result, then;\n try {\n if(handler){\n if(!ok)record.h = true;\n result = handler === true ? value : handler(value);\n if(result === reaction.promise){\n reject(TypeError('Promise-chain cycle'));\n } else if(then = isThenable(result)){\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch(e){\n reject(e);\n }\n };\n while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n chain.length = 0;\n record.n = false;\n if(isReject)setTimeout(function(){\n var promise = record.p\n , handler, console;\n if(isUnhandled(promise)){\n if(isNode){\n process.emit('unhandledRejection', value, promise);\n } else if(handler = global.onunhandledrejection){\n handler({promise: promise, reason: value});\n } else if((console = global.console) && console.error){\n console.error('Unhandled promise rejection', value);\n }\n } record.a = undefined;\n }, 1);\n });\n};\nvar isUnhandled = function(promise){\n var record = promise._d\n , chain = record.a || record.c\n , i = 0\n , reaction;\n if(record.h)return false;\n while(chain.length > i){\n reaction = chain[i++];\n if(reaction.fail || !isUnhandled(reaction.promise))return false;\n } return true;\n};\nvar $reject = function(value){\n var record = this;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n record.v = value;\n record.s = 2;\n record.a = record.c.slice();\n notify(record, true);\n};\nvar $resolve = function(value){\n var record = this\n , then;\n if(record.d)return;\n record.d = true;\n record = record.r || record; // unwrap\n try {\n if(record.p === value)throw TypeError(\"Promise can't be resolved itself\");\n if(then = isThenable(value)){\n asap(function(){\n var wrapper = {r: record, d: false}; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch(e){\n $reject.call(wrapper, e);\n }\n });\n } else {\n record.v = value;\n record.s = 1;\n notify(record, false);\n }\n } catch(e){\n $reject.call({r: record, d: false}, e); // wrap\n }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n // 25.4.3.1 Promise(executor)\n P = function Promise(executor){\n aFunction(executor);\n var record = this._d = {\n p: strictNew(this, P, PROMISE), // <- promise\n c: [], // <- awaiting reactions\n a: undefined, // <- checked in isUnhandled reactions\n s: 0, // <- state\n d: false, // <- done\n v: undefined, // <- value\n h: false, // <- handled rejection\n n: false // <- notify\n };\n try {\n executor(ctx($resolve, record, 1), ctx($reject, record, 1));\n } catch(err){\n $reject.call(record, err);\n }\n };\n require('./$.redefine-all')(P.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected){\n var reaction = new PromiseCapability(speciesConstructor(this, P))\n , promise = reaction.promise\n , record = this._d;\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n record.c.push(reaction);\n if(record.a)record.a.push(reaction);\n if(record.s)notify(record, false);\n return promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function(onRejected){\n return this.then(undefined, onRejected);\n }\n });\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: P});\nrequire('./$.set-to-string-tag')(P, PROMISE);\nrequire('./$.set-species')(PROMISE);\nWrapper = require('./$.core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r){\n var capability = new PromiseCapability(this)\n , $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (!USE_NATIVE || testResolve(true)), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x){\n // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n if(x instanceof P && sameConstructor(x.constructor, this))return x;\n var capability = new PromiseCapability(this)\n , $$resolve = capability.resolve;\n $$resolve(x);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./$.iter-detect')(function(iter){\n P.all(iter)['catch'](function(){});\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , resolve = capability.resolve\n , reject = capability.reject\n , values = [];\n var abrupt = perform(function(){\n forOf(iterable, false, values.push, values);\n var remaining = values.length\n , results = Array(remaining);\n if(remaining)$.each.call(values, function(promise, index){\n var alreadyCalled = false;\n C.resolve(promise).then(function(value){\n if(alreadyCalled)return;\n alreadyCalled = true;\n results[index] = value;\n --remaining || resolve(results);\n }, reject);\n });\n else resolve(results);\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable){\n var C = getConstructor(this)\n , capability = new PromiseCapability(C)\n , reject = capability.reject;\n var abrupt = perform(function(){\n forOf(iterable, false, function(promise){\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if(abrupt)reject(abrupt.error);\n return capability.promise;\n }\n});\n},{\"./$\":34,\"./$.a-function\":7,\"./$.an-object\":9,\"./$.classof\":10,\"./$.core\":12,\"./$.ctx\":13,\"./$.descriptors\":15,\"./$.export\":17,\"./$.for-of\":19,\"./$.global\":20,\"./$.is-object\":27,\"./$.iter-detect\":31,\"./$.library\":35,\"./$.microtask\":36,\"./$.redefine-all\":38,\"./$.same-value\":40,\"./$.set-proto\":41,\"./$.set-species\":42,\"./$.set-to-string-tag\":43,\"./$.species-constructor\":45,\"./$.strict-new\":46,\"./$.wks\":53}],58:[function(require,module,exports){\n'use strict';\nvar $at = require('./$.string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./$.iter-define')(String, 'String', function(iterated){\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n var O = this._t\n , index = this._i\n , point;\n if(index >= O.length)return {value: undefined, done: true};\n point = $at(O, index);\n this._i += point.length;\n return {value: point, done: false};\n});\n},{\"./$.iter-define\":30,\"./$.string-at\":47}],59:[function(require,module,exports){\nrequire('./es6.array.iterator');\nvar Iterators = require('./$.iterators');\nIterators.NodeList = Iterators.HTMLCollection = Iterators.Array;\n},{\"./$.iterators\":33,\"./es6.array.iterator\":55}],60:[function(require,module,exports){\n'use strict';\n\n// Returns a Promise that resovles static when a steamvr controller is found\n\nvar _createClass = require('babel-runtime/helpers/create-class')['default'];\n\nvar _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];\n\nvar _Promise = require('babel-runtime/core-js/promise')['default'];\n\nfunction getController(hand) {\n\tvar findGamepad = function findGamepad(resolve, reject) {\n\t\tvar gamepad = altspace.getGamepads().find(function (g) {\n\t\t\treturn g.mapping === 'steamvr' && g.hand === hand;\n\t\t});\n\t\tif (gamepad) {\n\t\t\tconsole.log(\"SteamVR input device found\", gamepad);\n\t\t\tresolve(gamepad);\n\t\t} else {\n\t\t\tconsole.log(\"SteamVR input device not found trying again in 500ms...\");\n\t\t\tsetTimeout(findGamepad, 500, resolve, reject);\n\t\t}\n\t};\n\n\treturn new _Promise(findGamepad);\n}\n\n/**\r\n * The SteamVRInput behavior manages SteamVR input devices. It should be added\r\n * to the ThreeJS scene and is required to use [SteamVRTrackedObject]{@link module:altspace/utilities/behaviors.SteamVRTrackedObject}\r\n *\r\n * @class SteamVRInput\r\n * @memberof module:altspace/utilities/behaviors\r\n *\r\n * @prop {Gamepad} leftController the left SteamVR [Gamepad]{@link module:altspace~Gamepad} or undefined if one has not yet been found\r\n * @prop {Gamepad} rightController the right SteamVR [Gamepad]{@link module:altspace~Gamepad} or undefined if one has not yet been found\r\n * @prop {Gamepad} firstController the first SteamVR [Gamepad]{@link module:altspace~Gamepad} or undefined if none have yet been found\r\n *\r\n * @prop {Promise} leftControllerPromise a promise that resolves once the left SteamVR input device is found\r\n * @prop {Promise} rightControllerPromise a promise that resolves once the right SteamVR input device is found\r\n * @prop {Promise} firstControllerPromise a promise that resolves once any SteamVR input device is found\r\n */\n\nvar SteamVRInputBehavior = (function () {\n\tfunction SteamVRInputBehavior() {\n\t\t_classCallCheck(this, SteamVRInputBehavior);\n\n\t\tthis.type = 'SteamVRInput';\n\t}\n\n\t_createClass(SteamVRInputBehavior, [{\n\t\tkey: 'awake',\n\t\tvalue: function awake() {\n\t\t\tvar _this = this;\n\n\t\t\tthis.leftControllerPromise = getController(SteamVRInputBehavior.LEFT_CONTROLLER);\n\t\t\tthis.rightControllerPromise = getController(SteamVRInputBehavior.RIGHT_CONTROLLER);\n\t\t\tthis.firstControllerPromise = _Promise.race([this.leftControllerPromise, this.rightControllerPromise]);\n\n\t\t\tthis.leftControllerPromise.then(function (controller) {\n\t\t\t\t_this.leftController = controller;\n\t\t\t});\n\t\t\tthis.rightControllerPromise.then(function (controller) {\n\t\t\t\t_this.rightController = controller;\n\t\t\t});\n\t\t\tthis.firstControllerPromise.then(function (controller) {\n\t\t\t\t_this.firstController = controller;\n\n\t\t\t\tvar blockedAxes = controller.axes.map(function () {\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tvar blockedButtons = controller.buttons.map(function () {\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\tblockedButtons[SteamVRInputBehavior.BUTTON_TRIGGER] = true;\n\t\t\t\tblockedButtons[SteamVRInputBehavior.BUTTON_TOUCHPAD] = true;\n\n\t\t\t\tcontroller.preventDefault(blockedAxes, blockedButtons);\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn SteamVRInputBehavior;\n})();\n\nSteamVRInputBehavior.BUTTON_TRIGGER = 0;\nSteamVRInputBehavior.BUTTON_GRIP = 1;\nSteamVRInputBehavior.BUTTON_TOUCHPAD = 2;\nSteamVRInputBehavior.BUTTON_DPAD_UP = 3;\nSteamVRInputBehavior.BUTTON_DPAD_RIGHT = 4;\nSteamVRInputBehavior.BUTTON_DPAD_DOWN = 5;\nSteamVRInputBehavior.BUTTON_DPAD_LEFT = 6;\n\nSteamVRInputBehavior.AXIS_TOUCHPAD_X = 0;\nSteamVRInputBehavior.AXIS_TOUCHPAD_Y = 1;\n\nSteamVRInputBehavior.FIRST_CONTROLLER = 'first';\nSteamVRInputBehavior.LEFT_CONTROLLER = 'left';\nSteamVRInputBehavior.RIGHT_CONTROLLER = 'right';\n\nwindow.altspace.utilities.behaviors.SteamVRInput = SteamVRInputBehavior;\n},{\"babel-runtime/core-js/promise\":2,\"babel-runtime/helpers/class-call-check\":3,\"babel-runtime/helpers/create-class\":4}]},{},[60]);\n\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;oHomeModules