>>0?1:0),w=c.low=w+P,c.high=B+F+(w>>>0>>0?1:0),m=a.low=m+O,a.high=k+W+(m>>>0>>0?1:0),x=h.low=x+U,h.high=S+I+(x>>>0>>0?1:0),r=l.low=r+X,l.high=b+K+(r>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(r),t.HmacSHA512=e._createHmacHelper(r)}(),P=(M=U).x64,c=P.Word,f=P.WordArray,P=M.algo,d=P.SHA512,P=P.SHA384=d.extend({_doReset:function(){this._hash=new f.init([new c.init(3418070365,3238371032),new c.init(1654270250,914150663),new c.init(2438529370,812702999),new c.init(355462360,4144912697),new c.init(1731405415,4290775857),new c.init(2394180231,1750603025),new c.init(3675008525,1694076839),new c.init(1203062813,3204075428)])},_doFinalize:function(){var t=d._doFinalize.call(this);return t.sigBytes-=16,t}}),M.SHA384=d._createHelper(P),M.HmacSHA384=d._createHmacHelper(P),function(l){var t=U,e=t.lib,f=e.WordArray,i=e.Hasher,d=t.x64.Word,e=t.algo,A=[],H=[],z=[];!function(){for(var t=1,e=0,r=0;r<24;r++){A[t+5*e]=(r+1)*(r+2)/2%64;var i=(2*t+3*e)%5;t=e%5,e=i}for(t=0;t<5;t++)for(e=0;e<5;e++)H[t+5*e]=e+(2*t+3*e)%5*5;for(var n=1,o=0;o<24;o++){for(var s,c=0,a=0,h=0;h<7;h++)1&n&&((s=(1<>>24)|4278255360&(o<<24|o>>>8);(m=r[n]).high^=s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),m.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++)h^=(m=r[a+5*f]).high,l^=m.low;var d=C[a];d.high=h,d.low=l}for(a=0;a<5;a++)for(var u=C[(a+4)%5],p=C[(a+1)%5],_=p.high,p=p.low,h=u.high^(_<<1|p>>>31),l=u.low^(p<<1|_>>>31),f=0;f<5;f++)(m=r[a+5*f]).high^=h,m.low^=l;for(var y=1;y<25;y++){var v=(m=r[y]).high,g=m.low,B=A[y];l=B<32?(h=v<>>32-B,g<>>32-B):(h=g<>>64-B,v<>>64-B);B=C[H[y]];B.high=h,B.low=l}var w=C[0],k=r[0];w.high=k.high,w.low=k.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var m=r[y=a+5*f],S=C[y],x=C[(a+1)%5+5*f],b=C[(a+2)%5+5*f];m.high=S.high^~x.high&b.high,m.low=S.low^~x.low&b.low}m=r[0],k=z[c];m.high^=k.high,m.low^=k.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(l.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,e=this.cfg.outputLength/8,o=e/8,s=[],c=0;c>>24)|4278255360&(h<<24|h>>>8);s.push(a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)),s.push(h)}return new f.init(s,e)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(e),t.HmacSHA3=i._createHmacHelper(e)}(Math),Math,F=(w=U).lib,u=F.WordArray,p=F.Hasher,F=w.algo,S=u.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=u.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=u.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),A=u.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),H=u.create([0,1518500249,1859775393,2400959708,2840853838]),z=u.create([1352829926,1548603684,1836072691,2053994217,0]),F=F.RIPEMD160=p.extend({_doReset:function(){this._hash=u.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}for(var o,s,c,a,h,l,f=this._hash.words,d=H.words,u=z.words,p=S.words,_=x.words,y=b.words,v=A.words,g=o=f[0],B=s=f[1],w=c=f[2],k=a=f[3],m=h=f[4],r=0;r<80;r+=1)l=o+t[e+p[r]]|0,l+=r<16?(s^c^a)+d[0]:r<32?K(s,c,a)+d[1]:r<48?((s|~c)^a)+d[2]:r<64?X(s,c,a)+d[3]:(s^(c|~a))+d[4],l=(l=L(l|=0,y[r]))+h|0,o=h,h=a,a=L(c,10),c=s,s=l,l=g+t[e+_[r]]|0,l+=r<16?(B^(w|~k))+u[0]:r<32?X(B,w,k)+u[1]:r<48?((B|~w)^k)+u[2]:r<64?K(B,w,k)+u[3]:(B^w^k)+u[4],l=(l=L(l|=0,v[r]))+m|0,g=m,m=k,k=L(w,10),w=B,B=l;l=f[1]+c+k|0,f[1]=f[2]+a+m|0,f[2]=f[3]+h+g|0,f[3]=f[4]+o+B|0,f[4]=f[0]+s+w|0,f[0]=l},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var e=this._hash,n=e.words,o=0;o<5;o++){var s=n[o];n[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return e},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}}),w.RIPEMD160=p._createHelper(F),w.HmacRIPEMD160=p._createHmacHelper(F),P=(M=U).lib.Base,_=M.enc.Utf8,M.algo.HMAC=P.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;(e=e.sigBytes>i?t.finalize(e):e).clamp();for(var t=this._oKey=e.clone(),e=this._iKey=e.clone(),n=t.words,o=e.words,s=0;s>>2];t.sigBytes-=e}},d=(e.BlockCipher=a.extend({cfg:a.cfg.extend({mode:n,padding:l}),reset:function(){var t;a.reset.call(this);var e=this.cfg,r=e.iv,e=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=e.createEncryptor:(t=e.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(e,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),l=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,t=t.salt,e=t?s.create([1398893684,1701076831]).concat(t).concat(e):e;return e.toString(o)},parse:function(t){var e,r=o.parse(t),t=r.words;return 1398893684==t[0]&&1701076831==t[1]&&(e=s.create(t.slice(2,4)),t.splice(0,4),r.sigBytes-=16),d.create({ciphertext:r,salt:e})}},u=e.SerializableCipher=r.extend({cfg:r.extend({format:l}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),e=n.finalize(e),n=n.cfg;return d.create({ciphertext:e,key:r,iv:n.iv,algorithm:t,mode:n.mode,padding:n.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),t=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||s.random(8);t=c.create({keySize:e+r}).compute(t,i),r=s.create(t.words.slice(e),4*r);return t.sigBytes=4*e,d.create({key:t,iv:r,salt:i})}},p=e.PasswordBasedCipher=u.extend({cfg:u.cfg.extend({kdf:t}),encrypt:function(t,e,r,i){r=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=r.iv;i=u.encrypt.call(this,t,e,r.key,i);return i.mixIn(r),i},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);r=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=r.iv,u.decrypt.call(this,t,e,r.key,i)}})}(),U.mode.CFB=((F=U.lib.BlockCipherMode.extend()).Encryptor=F.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;j.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),F.Decryptor=F.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);j.call(this,t,e,i,r),this._prevBlock=n}}),F),U.mode.CTR=(M=U.lib.BlockCipherMode.extend(),P=M.Encryptor=M.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c>>2]|=e<<24-r%4*8,t.sigBytes+=e},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},U.pad.Iso10126={pad:function(t,e){e*=4,e-=t.sigBytes%e;t.concat(U.lib.WordArray.random(e-1)).concat(U.lib.WordArray.create([e<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},U.pad.Iso97971={pad:function(t,e){t.concat(U.lib.WordArray.create([2147483648],1)),U.pad.ZeroPadding.pad(t,e)},unpad:function(t){U.pad.ZeroPadding.unpad(t),t.sigBytes--}},U.pad.ZeroPadding={pad:function(t,e){e*=4;t.clamp(),t.sigBytes+=e-(t.sigBytes%e||e)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1,r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},U.pad.NoPadding={pad:function(){},unpad:function(){}},m=(P=U).lib.CipherParams,C=P.enc.Hex,P.format.Hex={stringify:function(t){return t.ciphertext.toString(C)},parse:function(t){t=C.parse(t);return m.create({ciphertext:t})}},function(){var t=U,e=t.lib.BlockCipher,r=t.algo,h=[],l=[],f=[],d=[],u=[],p=[],_=[],y=[],v=[],g=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=0,i=0,e=0;e<256;e++){var n=i^i<<1^i<<2^i<<3^i<<4;h[r]=n=n>>>8^255&n^99;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a,_[n]=(a=16843009*c^65537*s^257*o^16843008*r)<<24|a>>>8,y[n]=a<<16|a>>>16,v[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c>>24]]^y[h[a>>>16&255]]^v[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,y,v,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],y=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],v=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++],h=_,l=y,f=v,d=g;_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],y=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],v=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=y,t[e+2]=v,t[e+3]=g},keySize:8});t.AES=e._createHelper(r)}(),function(){var t=U,e=t.lib,i=e.WordArray,r=e.BlockCipher,e=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],n=e.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){for(var s=n[o]=[],c=f[o],r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var a=this._invSubKeys=[],r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){e=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=e,this._lBlock^=e<>>t^this._lBlock)&e;this._lBlock^=e,this._rBlock^=e<192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),t=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=n.createEncryptor(i.create(e)),this._des2=n.createEncryptor(i.create(r)),this._des3=n.createEncryptor(i.create(t))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(e)}(),function(){var t=U,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;for(var n=0,o=0;n<256;n++){var s=n%r,s=e[s>>>2]>>>24-s%4*8&255,o=(o+i[n]+s)%256,s=i[n];i[n]=i[o],i[o]=s}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){var r=(r+t[e=(e+1)%256])%256,o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);r=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0>>24)|4278255360&(t[r]<<24|t[r]>>>8);for(var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],r=this._b=0;r<4;r++)N.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],e=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),o=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),s=e>>>16|4294901760&o,c=o<<16|65535&e;n[0]^=e,n[1]^=s,n[2]^=o,n[3]^=c,n[4]^=e,n[5]^=s,n[6]^=o,n[7]^=c;for(r=0;r<4;r++)N.call(this)}},_doProcessBlock:function(t,e){var r=this._X;N.call(this),D[0]=r[0]^r[5]>>>16^r[3]<<16,D[1]=r[2]^r[7]>>>16^r[5]<<16,D[2]=r[4]^r[1]>>>16^r[7]<<16,D[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)D[i]=16711935&(D[i]<<8|D[i]>>>24)|4278255360&(D[i]<<24|D[i]>>>8),t[e+i]^=D[i]},blockSize:4,ivSize:2}),M.Rabbit=F._createHelper(P),F=(M=U).lib.StreamCipher,P=M.algo,W=[],O=[],I=[],P=P.RabbitLegacy=F.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)q.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],t=o[1],e=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),o=16711935&(t<<8|t>>>24)|4278255360&(t<<24|t>>>8),s=e>>>16|4294901760&o,t=o<<16|65535&e;i[0]^=e,i[1]^=s,i[2]^=o,i[3]^=t,i[4]^=e,i[5]^=s,i[6]^=o,i[7]^=t;for(n=0;n<4;n++)q.call(this)}},_doProcessBlock:function(t,e){var r=this._X;q.call(this),W[0]=r[0]^r[5]>>>16^r[3]<<16,W[1]=r[2]^r[7]>>>16^r[5]<<16,W[2]=r[4]^r[1]>>>16^r[7]<<16,W[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)W[i]=16711935&(W[i]<<8|W[i]>>>24)|4278255360&(W[i]<<24|W[i]>>>8),t[e+i]^=W[i]},blockSize:4,ivSize:2}),M.RabbitLegacy=F._createHelper(P),U});
4 |
--------------------------------------------------------------------------------
/popup/vendor/download2.js:
--------------------------------------------------------------------------------
1 | //download.js v3.0, by dandavis; 2008-2014. [CCBY2] see http://danml.com/download.html for tests/usage
2 | // v1 landed a FF+Chrome compat way of downloading strings to local un-named files, upgraded to use a hidden frame and optional mime
3 | // v2 added named files via a[download], msSaveBlob, IE (10+) support, and window.URL support for larger+faster saves than dataURLs
4 | // v3 added dataURL and Blob Input, bind-toggle arity, and legacy dataURL fallback was improved with force-download mime and base64 support
5 |
6 | // data can be a string, Blob, File, or dataURL
7 |
8 |
9 |
10 |
11 | function download(data, strFileName, strMimeType) {
12 |
13 | var self = window, // this script is only for browsers anyway...
14 | u = "application/octet-stream", // this default mime also triggers iframe downloads
15 | m = strMimeType || u,
16 | x = data,
17 | D = document,
18 | a = D.createElement("a"),
19 | z = function(a){return String(a);},
20 |
21 |
22 | B = self.Blob || self.MozBlob || self.WebKitBlob || z,
23 | BB = self.MSBlobBuilder || self.WebKitBlobBuilder || self.BlobBuilder,
24 | fn = strFileName || "download",
25 | blob,
26 | b,
27 | ua,
28 | fr;
29 |
30 | //if(typeof B.bind === 'function' ){ B=B.bind(self); }
31 |
32 | if(String(this)==="true"){ //reverse arguments, allowing download.bind(true, "text/xml", "export.xml") to act as a callback
33 | x=[x, m];
34 | m=x[0];
35 | x=x[1];
36 | }
37 |
38 |
39 |
40 | //go ahead and download dataURLs right away
41 | if(String(x).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/)){
42 | return navigator.msSaveBlob ? // IE10 can't do a[download], only Blobs:
43 | navigator.msSaveBlob(d2b(x), fn) :
44 | saver(x) ; // everyone else can save dataURLs un-processed
45 | }//end if dataURL passed?
46 |
47 | try{
48 |
49 | blob = x instanceof B ?
50 | x :
51 | new B([x], {type: m}) ;
52 | }catch(y){
53 | if(BB){
54 | b = new BB();
55 | b.append([x]);
56 | blob = b.getBlob(m); // the blob
57 | }
58 |
59 | }
60 |
61 |
62 |
63 | function d2b(u) {
64 | var p= u.split(/[:;,]/),
65 | t= p[1],
66 | dec= p[2] == "base64" ? atob : decodeURIComponent,
67 | bin= dec(p.pop()),
68 | mx= bin.length,
69 | i= 0,
70 | uia= new Uint8Array(mx);
71 |
72 | for(i;i]*>/,
16 | singleTagRE = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
17 | tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
18 | rootNodeRE = /^(?:body|html)$/i,
19 | capitalRE = /([A-Z])/g,
20 |
21 | // special attributes that should be get/set via method calls
22 | methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
23 |
24 | adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
25 | table = document.createElement('table'),
26 | tableRow = document.createElement('tr'),
27 | containers = {
28 | 'tr': document.createElement('tbody'),
29 | 'tbody': table, 'thead': table, 'tfoot': table,
30 | 'td': tableRow, 'th': tableRow,
31 | '*': document.createElement('div')
32 | },
33 | readyRE = /complete|loaded|interactive/,
34 | simpleSelectorRE = /^[\w-]*$/,
35 | class2type = {},
36 | toString = class2type.toString,
37 | zepto = {},
38 | camelize, uniq,
39 | tempParent = document.createElement('div'),
40 | propMap = {
41 | 'tabindex': 'tabIndex',
42 | 'readonly': 'readOnly',
43 | 'for': 'htmlFor',
44 | 'class': 'className',
45 | 'maxlength': 'maxLength',
46 | 'cellspacing': 'cellSpacing',
47 | 'cellpadding': 'cellPadding',
48 | 'rowspan': 'rowSpan',
49 | 'colspan': 'colSpan',
50 | 'usemap': 'useMap',
51 | 'frameborder': 'frameBorder',
52 | 'contenteditable': 'contentEditable'
53 | },
54 | isArray = Array.isArray ||
55 | function(object){ return object instanceof Array }
56 |
57 | zepto.matches = function(element, selector) {
58 | if (!selector || !element || element.nodeType !== 1) return false
59 | var matchesSelector = element.matches || element.webkitMatchesSelector ||
60 | element.mozMatchesSelector || element.oMatchesSelector ||
61 | element.matchesSelector
62 | if (matchesSelector) return matchesSelector.call(element, selector)
63 | // fall back to performing a selector:
64 | var match, parent = element.parentNode, temp = !parent
65 | if (temp) (parent = tempParent).appendChild(element)
66 | match = ~zepto.qsa(parent, selector).indexOf(element)
67 | temp && tempParent.removeChild(element)
68 | return match
69 | }
70 |
71 | function type(obj) {
72 | return obj == null ? String(obj) :
73 | class2type[toString.call(obj)] || "object"
74 | }
75 |
76 | function isFunction(value) { return type(value) == "function" }
77 | function isWindow(obj) { return obj != null && obj == obj.window }
78 | function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
79 | function isObject(obj) { return type(obj) == "object" }
80 | function isPlainObject(obj) {
81 | return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype
82 | }
83 |
84 | function likeArray(obj) {
85 | var length = !!obj && 'length' in obj && obj.length,
86 | type = $.type(obj)
87 |
88 | return 'function' != type && !isWindow(obj) && (
89 | 'array' == type || length === 0 ||
90 | (typeof length == 'number' && length > 0 && (length - 1) in obj)
91 | )
92 | }
93 |
94 | function compact(array) { return filter.call(array, function(item){ return item != null }) }
95 | function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
96 | camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
97 | function dasherize(str) {
98 | return str.replace(/::/g, '/')
99 | .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
100 | .replace(/([a-z\d])([A-Z])/g, '$1_$2')
101 | .replace(/_/g, '-')
102 | .toLowerCase()
103 | }
104 | uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
105 |
106 | function classRE(name) {
107 | return name in classCache ?
108 | classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
109 | }
110 |
111 | function maybeAddPx(name, value) {
112 | return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
113 | }
114 |
115 | function defaultDisplay(nodeName) {
116 | var element, display
117 | if (!elementDisplay[nodeName]) {
118 | element = document.createElement(nodeName)
119 | document.body.appendChild(element)
120 | display = getComputedStyle(element, '').getPropertyValue("display")
121 | element.parentNode.removeChild(element)
122 | display == "none" && (display = "block")
123 | elementDisplay[nodeName] = display
124 | }
125 | return elementDisplay[nodeName]
126 | }
127 |
128 | function children(element) {
129 | return 'children' in element ?
130 | slice.call(element.children) :
131 | $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
132 | }
133 |
134 | function Z(dom, selector) {
135 | var i, len = dom ? dom.length : 0
136 | for (i = 0; i < len; i++) this[i] = dom[i]
137 | this.length = len
138 | this.selector = selector || ''
139 | }
140 |
141 | // `$.zepto.fragment` takes a html string and an optional tag name
142 | // to generate DOM nodes from the given html string.
143 | // The generated DOM nodes are returned as an array.
144 | // This function can be overridden in plugins for example to make
145 | // it compatible with browsers that don't support the DOM fully.
146 | zepto.fragment = function(html, name, properties) {
147 | var dom, nodes, container
148 |
149 | // A special case optimization for a single tag
150 | if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))
151 |
152 | if (!dom) {
153 | if (html.replace) html = html.replace(tagExpanderRE, "<$1>$2>")
154 | if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
155 | if (!(name in containers)) name = '*'
156 |
157 | container = containers[name]
158 | container.innerHTML = '' + html
159 | dom = $.each(slice.call(container.childNodes), function(){
160 | container.removeChild(this)
161 | })
162 | }
163 |
164 | if (isPlainObject(properties)) {
165 | nodes = $(dom)
166 | $.each(properties, function(key, value) {
167 | if (methodAttributes.indexOf(key) > -1) nodes[key](value)
168 | else nodes.attr(key, value)
169 | })
170 | }
171 |
172 | return dom
173 | }
174 |
175 | // `$.zepto.Z` swaps out the prototype of the given `dom` array
176 | // of nodes with `$.fn` and thus supplying all the Zepto functions
177 | // to the array. This method can be overridden in plugins.
178 | zepto.Z = function(dom, selector) {
179 | return new Z(dom, selector)
180 | }
181 |
182 | // `$.zepto.isZ` should return `true` if the given object is a Zepto
183 | // collection. This method can be overridden in plugins.
184 | zepto.isZ = function(object) {
185 | return object instanceof zepto.Z
186 | }
187 |
188 | // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
189 | // takes a CSS selector and an optional context (and handles various
190 | // special cases).
191 | // This method can be overridden in plugins.
192 | zepto.init = function(selector, context) {
193 | var dom
194 | // If nothing given, return an empty Zepto collection
195 | if (!selector) return zepto.Z()
196 | // Optimize for string selectors
197 | else if (typeof selector == 'string') {
198 | selector = selector.trim()
199 | // If it's a html fragment, create nodes from it
200 | // Note: In both Chrome 21 and Firefox 15, DOM error 12
201 | // is thrown if the fragment doesn't begin with <
202 | if (selector[0] == '<' && fragmentRE.test(selector))
203 | dom = zepto.fragment(selector, RegExp.$1, context), selector = null
204 | // If there's a context, create a collection on that context first, and select
205 | // nodes from there
206 | else if (context !== undefined) return $(context).find(selector)
207 | // If it's a CSS selector, use it to select nodes.
208 | else dom = zepto.qsa(document, selector)
209 | }
210 | // If a function is given, call it when the DOM is ready
211 | else if (isFunction(selector)) return $(document).ready(selector)
212 | // If a Zepto collection is given, just return it
213 | else if (zepto.isZ(selector)) return selector
214 | else {
215 | // normalize array if an array of nodes is given
216 | if (isArray(selector)) dom = compact(selector)
217 | // Wrap DOM nodes.
218 | else if (isObject(selector))
219 | dom = [selector], selector = null
220 | // If it's a html fragment, create nodes from it
221 | else if (fragmentRE.test(selector))
222 | dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
223 | // If there's a context, create a collection on that context first, and select
224 | // nodes from there
225 | else if (context !== undefined) return $(context).find(selector)
226 | // And last but no least, if it's a CSS selector, use it to select nodes.
227 | else dom = zepto.qsa(document, selector)
228 | }
229 | // create a new Zepto collection from the nodes found
230 | return zepto.Z(dom, selector)
231 | }
232 |
233 | // `$` will be the base `Zepto` object. When calling this
234 | // function just call `$.zepto.init, which makes the implementation
235 | // details of selecting nodes and creating Zepto collections
236 | // patchable in plugins.
237 | $ = function(selector, context){
238 | return zepto.init(selector, context)
239 | }
240 |
241 | function extend(target, source, deep) {
242 | for (key in source)
243 | if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
244 | if (isPlainObject(source[key]) && !isPlainObject(target[key]))
245 | target[key] = {}
246 | if (isArray(source[key]) && !isArray(target[key]))
247 | target[key] = []
248 | extend(target[key], source[key], deep)
249 | }
250 | else if (source[key] !== undefined) target[key] = source[key]
251 | }
252 |
253 | // Copy all but undefined properties from one or more
254 | // objects to the `target` object.
255 | $.extend = function(target){
256 | var deep, args = slice.call(arguments, 1)
257 | if (typeof target == 'boolean') {
258 | deep = target
259 | target = args.shift()
260 | }
261 | args.forEach(function(arg){ extend(target, arg, deep) })
262 | return target
263 | }
264 |
265 | // `$.zepto.qsa` is Zepto's CSS selector implementation which
266 | // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
267 | // This method can be overridden in plugins.
268 | zepto.qsa = function(element, selector){
269 | var found,
270 | maybeID = selector[0] == '#',
271 | maybeClass = !maybeID && selector[0] == '.',
272 | nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked
273 | isSimple = simpleSelectorRE.test(nameOnly)
274 | return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById
275 | ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :
276 | (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :
277 | slice.call(
278 | isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName
279 | maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class
280 | element.getElementsByTagName(selector) : // Or a tag
281 | element.querySelectorAll(selector) // Or it's not simple, and we need to query all
282 | )
283 | }
284 |
285 | function filtered(nodes, selector) {
286 | return selector == null ? $(nodes) : $(nodes).filter(selector)
287 | }
288 |
289 | $.contains = document.documentElement.contains ?
290 | function(parent, node) {
291 | return parent !== node && parent.contains(node)
292 | } :
293 | function(parent, node) {
294 | while (node && (node = node.parentNode))
295 | if (node === parent) return true
296 | return false
297 | }
298 |
299 | function funcArg(context, arg, idx, payload) {
300 | return isFunction(arg) ? arg.call(context, idx, payload) : arg
301 | }
302 |
303 | function setAttribute(node, name, value) {
304 | value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
305 | }
306 |
307 | // access className property while respecting SVGAnimatedString
308 | function className(node, value){
309 | var klass = node.className || '',
310 | svg = klass && klass.baseVal !== undefined
311 |
312 | if (value === undefined) return svg ? klass.baseVal : klass
313 | svg ? (klass.baseVal = value) : (node.className = value)
314 | }
315 |
316 | // "true" => true
317 | // "false" => false
318 | // "null" => null
319 | // "42" => 42
320 | // "42.5" => 42.5
321 | // "08" => "08"
322 | // JSON => parse if valid
323 | // String => self
324 | function deserializeValue(value) {
325 | try {
326 | return value ?
327 | value == "true" ||
328 | ( value == "false" ? false :
329 | value == "null" ? null :
330 | +value + "" == value ? +value :
331 | /^[\[\{]/.test(value) ? $.parseJSON(value) :
332 | value )
333 | : value
334 | } catch(e) {
335 | return value
336 | }
337 | }
338 |
339 | $.type = type
340 | $.isFunction = isFunction
341 | $.isWindow = isWindow
342 | $.isArray = isArray
343 | $.isPlainObject = isPlainObject
344 |
345 | $.isEmptyObject = function(obj) {
346 | var name
347 | for (name in obj) return false
348 | return true
349 | }
350 |
351 | $.isNumeric = function(val) {
352 | var num = Number(val), type = typeof val
353 | return val != null && type != 'boolean' &&
354 | (type != 'string' || val.length) &&
355 | !isNaN(num) && isFinite(num) || false
356 | }
357 |
358 | $.inArray = function(elem, array, i){
359 | return emptyArray.indexOf.call(array, elem, i)
360 | }
361 |
362 | $.camelCase = camelize
363 | $.trim = function(str) {
364 | return str == null ? "" : String.prototype.trim.call(str)
365 | }
366 |
367 | // plugin compatibility
368 | $.uuid = 0
369 | $.support = { }
370 | $.expr = { }
371 | $.noop = function() {}
372 |
373 | $.map = function(elements, callback){
374 | var value, values = [], i, key
375 | if (likeArray(elements))
376 | for (i = 0; i < elements.length; i++) {
377 | value = callback(elements[i], i)
378 | if (value != null) values.push(value)
379 | }
380 | else
381 | for (key in elements) {
382 | value = callback(elements[key], key)
383 | if (value != null) values.push(value)
384 | }
385 | return flatten(values)
386 | }
387 |
388 | $.each = function(elements, callback){
389 | var i, key
390 | if (likeArray(elements)) {
391 | for (i = 0; i < elements.length; i++)
392 | if (callback.call(elements[i], i, elements[i]) === false) return elements
393 | } else {
394 | for (key in elements)
395 | if (callback.call(elements[key], key, elements[key]) === false) return elements
396 | }
397 |
398 | return elements
399 | }
400 |
401 | $.grep = function(elements, callback){
402 | return filter.call(elements, callback)
403 | }
404 |
405 | if (window.JSON) $.parseJSON = JSON.parse
406 |
407 | // Populate the class2type map
408 | $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
409 | class2type[ "[object " + name + "]" ] = name.toLowerCase()
410 | })
411 |
412 | // Define methods that will be available on all
413 | // Zepto collections
414 | $.fn = {
415 | constructor: zepto.Z,
416 | length: 0,
417 |
418 | // Because a collection acts like an array
419 | // copy over these useful array functions.
420 | forEach: emptyArray.forEach,
421 | reduce: emptyArray.reduce,
422 | push: emptyArray.push,
423 | sort: emptyArray.sort,
424 | splice: emptyArray.splice,
425 | indexOf: emptyArray.indexOf,
426 | concat: function(){
427 | var i, value, args = []
428 | for (i = 0; i < arguments.length; i++) {
429 | value = arguments[i]
430 | args[i] = zepto.isZ(value) ? value.toArray() : value
431 | }
432 | return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)
433 | },
434 |
435 | // `map` and `slice` in the jQuery API work differently
436 | // from their array counterparts
437 | map: function(fn){
438 | return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
439 | },
440 | slice: function(){
441 | return $(slice.apply(this, arguments))
442 | },
443 |
444 | ready: function(callback){
445 | // need to check if document.body exists for IE as that browser reports
446 | // document ready when it hasn't yet created the body element
447 | if (readyRE.test(document.readyState) && document.body) callback($)
448 | else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
449 | return this
450 | },
451 | get: function(idx){
452 | return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
453 | },
454 | toArray: function(){ return this.get() },
455 | size: function(){
456 | return this.length
457 | },
458 | remove: function(){
459 | return this.each(function(){
460 | if (this.parentNode != null)
461 | this.parentNode.removeChild(this)
462 | })
463 | },
464 | each: function(callback){
465 | emptyArray.every.call(this, function(el, idx){
466 | return callback.call(el, idx, el) !== false
467 | })
468 | return this
469 | },
470 | filter: function(selector){
471 | if (isFunction(selector)) return this.not(this.not(selector))
472 | return $(filter.call(this, function(element){
473 | return zepto.matches(element, selector)
474 | }))
475 | },
476 | add: function(selector,context){
477 | return $(uniq(this.concat($(selector,context))))
478 | },
479 | is: function(selector){
480 | return this.length > 0 && zepto.matches(this[0], selector)
481 | },
482 | not: function(selector){
483 | var nodes=[]
484 | if (isFunction(selector) && selector.call !== undefined)
485 | this.each(function(idx){
486 | if (!selector.call(this,idx)) nodes.push(this)
487 | })
488 | else {
489 | var excludes = typeof selector == 'string' ? this.filter(selector) :
490 | (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
491 | this.forEach(function(el){
492 | if (excludes.indexOf(el) < 0) nodes.push(el)
493 | })
494 | }
495 | return $(nodes)
496 | },
497 | has: function(selector){
498 | return this.filter(function(){
499 | return isObject(selector) ?
500 | $.contains(this, selector) :
501 | $(this).find(selector).size()
502 | })
503 | },
504 | eq: function(idx){
505 | return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
506 | },
507 | first: function(){
508 | var el = this[0]
509 | return el && !isObject(el) ? el : $(el)
510 | },
511 | last: function(){
512 | var el = this[this.length - 1]
513 | return el && !isObject(el) ? el : $(el)
514 | },
515 | find: function(selector){
516 | var result, $this = this
517 | if (!selector) result = $()
518 | else if (typeof selector == 'object')
519 | result = $(selector).filter(function(){
520 | var node = this
521 | return emptyArray.some.call($this, function(parent){
522 | return $.contains(parent, node)
523 | })
524 | })
525 | else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
526 | else result = this.map(function(){ return zepto.qsa(this, selector) })
527 | return result
528 | },
529 | closest: function(selector, context){
530 | var nodes = [], collection = typeof selector == 'object' && $(selector)
531 | this.each(function(_, node){
532 | while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
533 | node = node !== context && !isDocument(node) && node.parentNode
534 | if (node && nodes.indexOf(node) < 0) nodes.push(node)
535 | })
536 | return $(nodes)
537 | },
538 | parents: function(selector){
539 | var ancestors = [], nodes = this
540 | while (nodes.length > 0)
541 | nodes = $.map(nodes, function(node){
542 | if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
543 | ancestors.push(node)
544 | return node
545 | }
546 | })
547 | return filtered(ancestors, selector)
548 | },
549 | parent: function(selector){
550 | return filtered(uniq(this.pluck('parentNode')), selector)
551 | },
552 | children: function(selector){
553 | return filtered(this.map(function(){ return children(this) }), selector)
554 | },
555 | contents: function() {
556 | return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })
557 | },
558 | siblings: function(selector){
559 | return filtered(this.map(function(i, el){
560 | return filter.call(children(el.parentNode), function(child){ return child!==el })
561 | }), selector)
562 | },
563 | empty: function(){
564 | return this.each(function(){ this.innerHTML = '' })
565 | },
566 | // `pluck` is borrowed from Prototype.js
567 | pluck: function(property){
568 | return $.map(this, function(el){ return el[property] })
569 | },
570 | show: function(){
571 | return this.each(function(){
572 | this.style.display == "none" && (this.style.display = '')
573 | if (getComputedStyle(this, '').getPropertyValue("display") == "none")
574 | this.style.display = defaultDisplay(this.nodeName)
575 | })
576 | },
577 | replaceWith: function(newContent){
578 | return this.before(newContent).remove()
579 | },
580 | wrap: function(structure){
581 | var func = isFunction(structure)
582 | if (this[0] && !func)
583 | var dom = $(structure).get(0),
584 | clone = dom.parentNode || this.length > 1
585 |
586 | return this.each(function(index){
587 | $(this).wrapAll(
588 | func ? structure.call(this, index) :
589 | clone ? dom.cloneNode(true) : dom
590 | )
591 | })
592 | },
593 | wrapAll: function(structure){
594 | if (this[0]) {
595 | $(this[0]).before(structure = $(structure))
596 | var children
597 | // drill down to the inmost element
598 | while ((children = structure.children()).length) structure = children.first()
599 | $(structure).append(this)
600 | }
601 | return this
602 | },
603 | wrapInner: function(structure){
604 | var func = isFunction(structure)
605 | return this.each(function(index){
606 | var self = $(this), contents = self.contents(),
607 | dom = func ? structure.call(this, index) : structure
608 | contents.length ? contents.wrapAll(dom) : self.append(dom)
609 | })
610 | },
611 | unwrap: function(){
612 | this.parent().each(function(){
613 | $(this).replaceWith($(this).children())
614 | })
615 | return this
616 | },
617 | clone: function(){
618 | return this.map(function(){ return this.cloneNode(true) })
619 | },
620 | hide: function(){
621 | return this.css("display", "none")
622 | },
623 | toggle: function(setting){
624 | return this.each(function(){
625 | var el = $(this)
626 | ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
627 | })
628 | },
629 | prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
630 | next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
631 | html: function(html){
632 | return 0 in arguments ?
633 | this.each(function(idx){
634 | var originHtml = this.innerHTML
635 | $(this).empty().append( funcArg(this, html, idx, originHtml) )
636 | }) :
637 | (0 in this ? this[0].innerHTML : null)
638 | },
639 | text: function(text){
640 | return 0 in arguments ?
641 | this.each(function(idx){
642 | var newText = funcArg(this, text, idx, this.textContent)
643 | this.textContent = newText == null ? '' : ''+newText
644 | }) :
645 | (0 in this ? this.pluck('textContent').join("") : null)
646 | },
647 | attr: function(name, value){
648 | var result
649 | return (typeof name == 'string' && !(1 in arguments)) ?
650 | (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :
651 | this.each(function(idx){
652 | if (this.nodeType !== 1) return
653 | if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
654 | else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
655 | })
656 | },
657 | removeAttr: function(name){
658 | return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){
659 | setAttribute(this, attribute)
660 | }, this)})
661 | },
662 | prop: function(name, value){
663 | name = propMap[name] || name
664 | return (1 in arguments) ?
665 | this.each(function(idx){
666 | this[name] = funcArg(this, value, idx, this[name])
667 | }) :
668 | (this[0] && this[0][name])
669 | },
670 | removeProp: function(name){
671 | name = propMap[name] || name
672 | return this.each(function(){ delete this[name] })
673 | },
674 | data: function(name, value){
675 | var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()
676 |
677 | var data = (1 in arguments) ?
678 | this.attr(attrName, value) :
679 | this.attr(attrName)
680 |
681 | return data !== null ? deserializeValue(data) : undefined
682 | },
683 | val: function(value){
684 | if (0 in arguments) {
685 | if (value == null) value = ""
686 | return this.each(function(idx){
687 | this.value = funcArg(this, value, idx, this.value)
688 | })
689 | } else {
690 | return this[0] && (this[0].multiple ?
691 | $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :
692 | this[0].value)
693 | }
694 | },
695 | offset: function(coordinates){
696 | if (coordinates) return this.each(function(index){
697 | var $this = $(this),
698 | coords = funcArg(this, coordinates, index, $this.offset()),
699 | parentOffset = $this.offsetParent().offset(),
700 | props = {
701 | top: coords.top - parentOffset.top,
702 | left: coords.left - parentOffset.left
703 | }
704 |
705 | if ($this.css('position') == 'static') props['position'] = 'relative'
706 | $this.css(props)
707 | })
708 | if (!this.length) return null
709 | if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))
710 | return {top: 0, left: 0}
711 | var obj = this[0].getBoundingClientRect()
712 | return {
713 | left: obj.left + window.pageXOffset,
714 | top: obj.top + window.pageYOffset,
715 | width: Math.round(obj.width),
716 | height: Math.round(obj.height)
717 | }
718 | },
719 | css: function(property, value){
720 | if (arguments.length < 2) {
721 | var element = this[0]
722 | if (typeof property == 'string') {
723 | if (!element) return
724 | return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)
725 | } else if (isArray(property)) {
726 | if (!element) return
727 | var props = {}
728 | var computedStyle = getComputedStyle(element, '')
729 | $.each(property, function(_, prop){
730 | props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))
731 | })
732 | return props
733 | }
734 | }
735 |
736 | var css = ''
737 | if (type(property) == 'string') {
738 | if (!value && value !== 0)
739 | this.each(function(){ this.style.removeProperty(dasherize(property)) })
740 | else
741 | css = dasherize(property) + ":" + maybeAddPx(property, value)
742 | } else {
743 | for (key in property)
744 | if (!property[key] && property[key] !== 0)
745 | this.each(function(){ this.style.removeProperty(dasherize(key)) })
746 | else
747 | css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
748 | }
749 |
750 | return this.each(function(){ this.style.cssText += ';' + css })
751 | },
752 | index: function(element){
753 | return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
754 | },
755 | hasClass: function(name){
756 | if (!name) return false
757 | return emptyArray.some.call(this, function(el){
758 | return this.test(className(el))
759 | }, classRE(name))
760 | },
761 | addClass: function(name){
762 | if (!name) return this
763 | return this.each(function(idx){
764 | if (!('className' in this)) return
765 | classList = []
766 | var cls = className(this), newName = funcArg(this, name, idx, cls)
767 | newName.split(/\s+/g).forEach(function(klass){
768 | if (!$(this).hasClass(klass)) classList.push(klass)
769 | }, this)
770 | classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
771 | })
772 | },
773 | removeClass: function(name){
774 | return this.each(function(idx){
775 | if (!('className' in this)) return
776 | if (name === undefined) return className(this, '')
777 | classList = className(this)
778 | funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
779 | classList = classList.replace(classRE(klass), " ")
780 | })
781 | className(this, classList.trim())
782 | })
783 | },
784 | toggleClass: function(name, when){
785 | if (!name) return this
786 | return this.each(function(idx){
787 | var $this = $(this), names = funcArg(this, name, idx, className(this))
788 | names.split(/\s+/g).forEach(function(klass){
789 | (when === undefined ? !$this.hasClass(klass) : when) ?
790 | $this.addClass(klass) : $this.removeClass(klass)
791 | })
792 | })
793 | },
794 | scrollTop: function(value){
795 | if (!this.length) return
796 | var hasScrollTop = 'scrollTop' in this[0]
797 | if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset
798 | return this.each(hasScrollTop ?
799 | function(){ this.scrollTop = value } :
800 | function(){ this.scrollTo(this.scrollX, value) })
801 | },
802 | scrollLeft: function(value){
803 | if (!this.length) return
804 | var hasScrollLeft = 'scrollLeft' in this[0]
805 | if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset
806 | return this.each(hasScrollLeft ?
807 | function(){ this.scrollLeft = value } :
808 | function(){ this.scrollTo(value, this.scrollY) })
809 | },
810 | position: function() {
811 | if (!this.length) return
812 |
813 | var elem = this[0],
814 | // Get *real* offsetParent
815 | offsetParent = this.offsetParent(),
816 | // Get correct offsets
817 | offset = this.offset(),
818 | parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
819 |
820 | // Subtract element margins
821 | // note: when an element has margin: auto the offsetLeft and marginLeft
822 | // are the same in Safari causing offset.left to incorrectly be 0
823 | offset.top -= parseFloat( $(elem).css('margin-top') ) || 0
824 | offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
825 |
826 | // Add offsetParent borders
827 | parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
828 | parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
829 |
830 | // Subtract the two offsets
831 | return {
832 | top: offset.top - parentOffset.top,
833 | left: offset.left - parentOffset.left
834 | }
835 | },
836 | offsetParent: function() {
837 | return this.map(function(){
838 | var parent = this.offsetParent || document.body
839 | while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
840 | parent = parent.offsetParent
841 | return parent
842 | })
843 | }
844 | }
845 |
846 | // for now
847 | $.fn.detach = $.fn.remove
848 |
849 | // Generate the `width` and `height` functions
850 | ;['width', 'height'].forEach(function(dimension){
851 | var dimensionProperty =
852 | dimension.replace(/./, function(m){ return m[0].toUpperCase() })
853 |
854 | $.fn[dimension] = function(value){
855 | var offset, el = this[0]
856 | if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :
857 | isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :
858 | (offset = this.offset()) && offset[dimension]
859 | else return this.each(function(idx){
860 | el = $(this)
861 | el.css(dimension, funcArg(this, value, idx, el[dimension]()))
862 | })
863 | }
864 | })
865 |
866 | function traverseNode(node, fun) {
867 | fun(node)
868 | for (var i = 0, len = node.childNodes.length; i < len; i++)
869 | traverseNode(node.childNodes[i], fun)
870 | }
871 |
872 | // Generate the `after`, `prepend`, `before`, `append`,
873 | // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
874 | adjacencyOperators.forEach(function(operator, operatorIndex) {
875 | var inside = operatorIndex % 2 //=> prepend, append
876 |
877 | $.fn[operator] = function(){
878 | // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
879 | var argType, nodes = $.map(arguments, function(arg) {
880 | var arr = []
881 | argType = type(arg)
882 | if (argType == "array") {
883 | arg.forEach(function(el) {
884 | if (el.nodeType !== undefined) return arr.push(el)
885 | else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())
886 | arr = arr.concat(zepto.fragment(el))
887 | })
888 | return arr
889 | }
890 | return argType == "object" || arg == null ?
891 | arg : zepto.fragment(arg)
892 | }),
893 | parent, copyByClone = this.length > 1
894 | if (nodes.length < 1) return this
895 |
896 | return this.each(function(_, target){
897 | parent = inside ? target : target.parentNode
898 |
899 | // convert all methods to a "before" operation
900 | target = operatorIndex == 0 ? target.nextSibling :
901 | operatorIndex == 1 ? target.firstChild :
902 | operatorIndex == 2 ? target :
903 | null
904 |
905 | var parentInDocument = $.contains(document.documentElement, parent)
906 |
907 | nodes.forEach(function(node){
908 | if (copyByClone) node = node.cloneNode(true)
909 | else if (!parent) return $(node).remove()
910 |
911 | parent.insertBefore(node, target)
912 | if (parentInDocument) traverseNode(node, function(el){
913 | if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
914 | (!el.type || el.type === 'text/javascript') && !el.src){
915 | var target = el.ownerDocument ? el.ownerDocument.defaultView : window
916 | target['eval'].call(target, el.innerHTML)
917 | }
918 | })
919 | })
920 | })
921 | }
922 |
923 | // after => insertAfter
924 | // prepend => prependTo
925 | // before => insertBefore
926 | // append => appendTo
927 | $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
928 | $(html)[operator](this)
929 | return this
930 | }
931 | })
932 |
933 | zepto.Z.prototype = Z.prototype = $.fn
934 |
935 | // Export internal API functions in the `$.zepto` namespace
936 | zepto.uniq = uniq
937 | zepto.deserializeValue = deserializeValue
938 | $.zepto = zepto
939 |
940 | return $
941 | })()
942 |
943 | window.Zepto = Zepto
944 | window.$ === undefined && (window.$ = Zepto)
945 |
946 | ;(function($){
947 | var _zid = 1, undefined,
948 | slice = Array.prototype.slice,
949 | isFunction = $.isFunction,
950 | isString = function(obj){ return typeof obj == 'string' },
951 | handlers = {},
952 | specialEvents={},
953 | focusinSupported = 'onfocusin' in window,
954 | focus = { focus: 'focusin', blur: 'focusout' },
955 | hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
956 |
957 | specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
958 |
959 | function zid(element) {
960 | return element._zid || (element._zid = _zid++)
961 | }
962 | function findHandlers(element, event, fn, selector) {
963 | event = parse(event)
964 | if (event.ns) var matcher = matcherFor(event.ns)
965 | return (handlers[zid(element)] || []).filter(function(handler) {
966 | return handler
967 | && (!event.e || handler.e == event.e)
968 | && (!event.ns || matcher.test(handler.ns))
969 | && (!fn || zid(handler.fn) === zid(fn))
970 | && (!selector || handler.sel == selector)
971 | })
972 | }
973 | function parse(event) {
974 | var parts = ('' + event).split('.')
975 | return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
976 | }
977 | function matcherFor(ns) {
978 | return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
979 | }
980 |
981 | function eventCapture(handler, captureSetting) {
982 | return handler.del &&
983 | (!focusinSupported && (handler.e in focus)) ||
984 | !!captureSetting
985 | }
986 |
987 | function realEvent(type) {
988 | return hover[type] || (focusinSupported && focus[type]) || type
989 | }
990 |
991 | function add(element, events, fn, data, selector, delegator, capture){
992 | var id = zid(element), set = (handlers[id] || (handlers[id] = []))
993 | events.split(/\s/).forEach(function(event){
994 | if (event == 'ready') return $(document).ready(fn)
995 | var handler = parse(event)
996 | handler.fn = fn
997 | handler.sel = selector
998 | // emulate mouseenter, mouseleave
999 | if (handler.e in hover) fn = function(e){
1000 | var related = e.relatedTarget
1001 | if (!related || (related !== this && !$.contains(this, related)))
1002 | return handler.fn.apply(this, arguments)
1003 | }
1004 | handler.del = delegator
1005 | var callback = delegator || fn
1006 | handler.proxy = function(e){
1007 | e = compatible(e)
1008 | if (e.isImmediatePropagationStopped()) return
1009 | e.data = data
1010 | var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))
1011 | if (result === false) e.preventDefault(), e.stopPropagation()
1012 | return result
1013 | }
1014 | handler.i = set.length
1015 | set.push(handler)
1016 | if ('addEventListener' in element)
1017 | element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
1018 | })
1019 | }
1020 | function remove(element, events, fn, selector, capture){
1021 | var id = zid(element)
1022 | ;(events || '').split(/\s/).forEach(function(event){
1023 | findHandlers(element, event, fn, selector).forEach(function(handler){
1024 | delete handlers[id][handler.i]
1025 | if ('removeEventListener' in element)
1026 | element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
1027 | })
1028 | })
1029 | }
1030 |
1031 | $.event = { add: add, remove: remove }
1032 |
1033 | $.proxy = function(fn, context) {
1034 | var args = (2 in arguments) && slice.call(arguments, 2)
1035 | if (isFunction(fn)) {
1036 | var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }
1037 | proxyFn._zid = zid(fn)
1038 | return proxyFn
1039 | } else if (isString(context)) {
1040 | if (args) {
1041 | args.unshift(fn[context], fn)
1042 | return $.proxy.apply(null, args)
1043 | } else {
1044 | return $.proxy(fn[context], fn)
1045 | }
1046 | } else {
1047 | throw new TypeError("expected function")
1048 | }
1049 | }
1050 |
1051 | $.fn.bind = function(event, data, callback){
1052 | return this.on(event, data, callback)
1053 | }
1054 | $.fn.unbind = function(event, callback){
1055 | return this.off(event, callback)
1056 | }
1057 | $.fn.one = function(event, selector, data, callback){
1058 | return this.on(event, selector, data, callback, 1)
1059 | }
1060 |
1061 | var returnTrue = function(){return true},
1062 | returnFalse = function(){return false},
1063 | ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,
1064 | eventMethods = {
1065 | preventDefault: 'isDefaultPrevented',
1066 | stopImmediatePropagation: 'isImmediatePropagationStopped',
1067 | stopPropagation: 'isPropagationStopped'
1068 | }
1069 |
1070 | function compatible(event, source) {
1071 | if (source || !event.isDefaultPrevented) {
1072 | source || (source = event)
1073 |
1074 | $.each(eventMethods, function(name, predicate) {
1075 | var sourceMethod = source[name]
1076 | event[name] = function(){
1077 | this[predicate] = returnTrue
1078 | return sourceMethod && sourceMethod.apply(source, arguments)
1079 | }
1080 | event[predicate] = returnFalse
1081 | })
1082 |
1083 | event.timeStamp || (event.timeStamp = Date.now())
1084 |
1085 | if (source.defaultPrevented !== undefined ? source.defaultPrevented :
1086 | 'returnValue' in source ? source.returnValue === false :
1087 | source.getPreventDefault && source.getPreventDefault())
1088 | event.isDefaultPrevented = returnTrue
1089 | }
1090 | return event
1091 | }
1092 |
1093 | function createProxy(event) {
1094 | var key, proxy = { originalEvent: event }
1095 | for (key in event)
1096 | if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
1097 |
1098 | return compatible(proxy, event)
1099 | }
1100 |
1101 | $.fn.delegate = function(selector, event, callback){
1102 | return this.on(event, selector, callback)
1103 | }
1104 | $.fn.undelegate = function(selector, event, callback){
1105 | return this.off(event, selector, callback)
1106 | }
1107 |
1108 | $.fn.live = function(event, callback){
1109 | $(document.body).delegate(this.selector, event, callback)
1110 | return this
1111 | }
1112 | $.fn.die = function(event, callback){
1113 | $(document.body).undelegate(this.selector, event, callback)
1114 | return this
1115 | }
1116 |
1117 | $.fn.on = function(event, selector, data, callback, one){
1118 | var autoRemove, delegator, $this = this
1119 | if (event && !isString(event)) {
1120 | $.each(event, function(type, fn){
1121 | $this.on(type, selector, data, fn, one)
1122 | })
1123 | return $this
1124 | }
1125 |
1126 | if (!isString(selector) && !isFunction(callback) && callback !== false)
1127 | callback = data, data = selector, selector = undefined
1128 | if (callback === undefined || data === false)
1129 | callback = data, data = undefined
1130 |
1131 | if (callback === false) callback = returnFalse
1132 |
1133 | return $this.each(function(_, element){
1134 | if (one) autoRemove = function(e){
1135 | remove(element, e.type, callback)
1136 | return callback.apply(this, arguments)
1137 | }
1138 |
1139 | if (selector) delegator = function(e){
1140 | var evt, match = $(e.target).closest(selector, element).get(0)
1141 | if (match && match !== element) {
1142 | evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
1143 | return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))
1144 | }
1145 | }
1146 |
1147 | add(element, event, callback, data, selector, delegator || autoRemove)
1148 | })
1149 | }
1150 | $.fn.off = function(event, selector, callback){
1151 | var $this = this
1152 | if (event && !isString(event)) {
1153 | $.each(event, function(type, fn){
1154 | $this.off(type, selector, fn)
1155 | })
1156 | return $this
1157 | }
1158 |
1159 | if (!isString(selector) && !isFunction(callback) && callback !== false)
1160 | callback = selector, selector = undefined
1161 |
1162 | if (callback === false) callback = returnFalse
1163 |
1164 | return $this.each(function(){
1165 | remove(this, event, callback, selector)
1166 | })
1167 | }
1168 |
1169 | $.fn.trigger = function(event, args){
1170 | event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)
1171 | event._args = args
1172 | return this.each(function(){
1173 | // handle focus(), blur() by calling them directly
1174 | if (event.type in focus && typeof this[event.type] == "function") this[event.type]()
1175 | // items in the collection might not be DOM elements
1176 | else if ('dispatchEvent' in this) this.dispatchEvent(event)
1177 | else $(this).triggerHandler(event, args)
1178 | })
1179 | }
1180 |
1181 | // triggers event handlers on current element just as if an event occurred,
1182 | // doesn't trigger an actual event, doesn't bubble
1183 | $.fn.triggerHandler = function(event, args){
1184 | var e, result
1185 | this.each(function(i, element){
1186 | e = createProxy(isString(event) ? $.Event(event) : event)
1187 | e._args = args
1188 | e.target = element
1189 | $.each(findHandlers(element, event.type || event), function(i, handler){
1190 | result = handler.proxy(e)
1191 | if (e.isImmediatePropagationStopped()) return false
1192 | })
1193 | })
1194 | return result
1195 | }
1196 |
1197 | // shortcut methods for `.bind(event, fn)` for each event type
1198 | ;('focusin focusout focus blur load resize scroll unload click dblclick '+
1199 | 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
1200 | 'change select keydown keypress keyup error').split(' ').forEach(function(event) {
1201 | $.fn[event] = function(callback) {
1202 | return (0 in arguments) ?
1203 | this.bind(event, callback) :
1204 | this.trigger(event)
1205 | }
1206 | })
1207 |
1208 | $.Event = function(type, props) {
1209 | if (!isString(type)) props = type, type = props.type
1210 | var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
1211 | if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
1212 | event.initEvent(type, bubbles, true)
1213 | return compatible(event)
1214 | }
1215 |
1216 | })(Zepto)
1217 |
1218 | ;(function($){
1219 | var jsonpID = +new Date(),
1220 | document = window.document,
1221 | key,
1222 | name,
1223 | rscript = /