2012-05-17 13:13:40 +04:00
/* jQuery */
/*! jQuery v1.7.2 jquery.com | jquery.org/license */
( function ( a , b ) { function cy ( a ) { return f . isWindow ( a ) ? a : a . nodeType === 9 ? a . defaultView || a . parentWindow : ! 1 } function cu ( a ) { if ( ! cj [ a ] ) { var b = c . body , d = f ( "<" + a + ">" ) . appendTo ( b ) , e = d . css ( "display" ) ; d . remove ( ) ; if ( e === "none" || e === "" ) { ck || ( ck = c . createElement ( "iframe" ) , ck . frameBorder = ck . width = ck . height = 0 ) , b . appendChild ( ck ) ; if ( ! cl || ! ck . createElement ) cl = ( ck . contentWindow || ck . contentDocument ) . document , cl . write ( ( f . support . boxModel ? "<!doctype html>" : "" ) + "<html><body>" ) , cl . close ( ) ; d = cl . createElement ( a ) , cl . body . appendChild ( d ) , e = f . css ( d , "display" ) , b . removeChild ( ck ) } cj [ a ] = e } return cj [ a ] } function ct ( a , b ) { var c = { } ; f . each ( cp . concat . apply ( [ ] , cp . slice ( 0 , b ) ) , function ( ) { c [ this ] = a } ) ; return c } function cs ( ) { cq = b } function cr ( ) { setTimeout ( cs , 0 ) ; return cq = f . now ( ) } function ci ( ) { try { return new a . ActiveXObject ( "Microsoft.XMLHTTP" ) } catch ( b ) { } } function ch ( ) { try { return new a . XMLHttpRequest } catch ( b ) { } } function cb ( a , c ) { a . dataFilter && ( c = a . dataFilter ( c , a . dataType ) ) ; var d = a . dataTypes , e = { } , g , h , i = d . length , j , k = d [ 0 ] , l , m , n , o , p ; for ( g = 1 ; g < i ; g ++ ) { if ( g === 1 ) for ( h in a . converters ) typeof h == "string" && ( e [ h . toLowerCase ( ) ] = a . converters [ h ] ) ; l = k , k = d [ g ] ; if ( k === "*" ) k = l ; else if ( l !== "*" && l !== k ) { m = l + " " + k , n = e [ m ] || e [ "* " + k ] ; if ( ! n ) { p = b ; for ( o in e ) { j = o . split ( " " ) ; if ( j [ 0 ] === l || j [ 0 ] === "*" ) { p = e [ j [ 1 ] + " " + k ] ; if ( p ) { o = e [ o ] , o === ! 0 ? n = p : p === ! 0 && ( n = o ) ; break } } } } ! n && ! p && f . error ( "No conversion from " + m . replace ( " " , " to " ) ) , n !== ! 0 && ( c = n ? n ( c ) : p ( o ( c ) ) ) } } return c } function ca ( a , c , d ) { var e = a . contents , f = a . dataTypes , g = a . responseFields , h , i , j , k ; for ( i in g ) i in d && ( c [ g [ i ] ] = d [ i ] ) ; while ( f [ 0 ] === "*" ) f . shift ( ) , h === b && ( h = a . mimeType || c . getResponseHeader ( "content-type" ) ) ; if ( h ) for ( i in e ) if ( e [ i ] && e [ i ] . test ( h ) ) { f . unshift ( i ) ; break } if ( f [ 0 ] in d ) j = f [ 0 ] ; else { for ( i in d ) { if ( ! f [ 0 ] || a . converters [ i + " " + f [ 0 ] ] ) { j = i ; break } k || ( k = i ) } j = j || k } if ( j ) { j !== f [ 0 ] && f . unshift ( j ) ; return d [ j ] } } function b _ ( a , b , c , d ) { if ( f . isArray ( b ) ) f . each ( b , function ( b , e ) { c || bD . test ( a ) ? d ( a , e ) : b _ ( a + "[" + ( typeof e == "object" ? b : "" ) + "]" , e , c , d ) } ) ; else if ( ! c && f . type ( b ) === "object" ) for ( var e in b ) b _ ( a + "[" + e + "]" , b [ e ] , c , d ) ; else d ( a , b ) } function b$ ( a , c ) { var d , e , g = f . ajaxSettings . flatOptions || { } ; for ( d in c ) c [ d ] !== b && ( ( g [ d ] ? a : e || ( e = { } ) ) [ d ] = c [ d ] ) ; e && f . extend ( ! 0 , a , e ) } function bZ ( a , c , d , e , f , g ) { f = f || c . dataTypes [ 0 ] , g = g || { } , g [ f ] = ! 0 ; var h = a [ f ] , i = 0 , j = h ? h . length : 0 , k = a === bS , l ; for ( ; i < j && ( k || ! l ) ; i ++ ) l = h [ i ] ( c , d , e ) , typeof l == "string" && ( ! k || g [ l ] ? l = b : ( c . dataTypes . unshift ( l ) , l = bZ ( a , c , d , e , l , g ) ) ) ; ( k || ! l ) && ! g [ "*" ] && ( l = bZ ( a , c , d , e , "*" , g ) ) ; return l } function bY ( a ) { return function ( b , c ) { typeof b != "string" && ( c = b , b = "*" ) ; if ( f . isFunction ( c ) ) { var d = b . toLowerCase ( ) . split ( bO ) , e = 0 , g = d . length , h , i , j ; for ( ; e < g ; e ++ ) h = d [ e ] , j = /^\+/ . test ( h ) , j && ( h = h . substr ( 1 ) || "*" ) , i = a [ h ] = a [ h ] || [ ] , i [ j ? "unshift" : "push" ] ( c ) } } } function bB ( a , b , c ) { var d = b === "width" ? a . offsetWidth : a . offsetHeight , e = b === "width" ? 1 : 0 , g = 4 ; if ( d > 0 ) { if ( c !== "border" ) for ( ; e < g ; e += 2 ) c || ( d -= parseFloat ( f . css ( a , "padding" + bx [ e ] ) ) || 0 ) , c === "margin" ? d += parseFloat ( f . css ( a , c + bx [ e ] ) ) || 0 : d -= parseFloat ( f . css ( a , "border" + bx [ e ] + "Width" ) ) || 0 ; return d + "px" } d = by ( a , b ) ; if ( d < 0 || d == null ) d = a . style [ b ] ; if ( bt . test ( d ) ) return d ; d = parseFloat ( d ) || 0 ; if ( c ) for ( ; e < g ; e += 2 ) d += parseFloat ( f . css ( a , "padding" + bx [ e ] ) ) || 0 , c !== "padding" && ( d += parseFloat ( f . css ( a , "border" + bx [ e ] + "Width" ) ) || 0 ) , c === "margin" && ( d += parseFloat ( f . css ( a , c + bx [ e ] ) ) || 0 ) ; return d + "px" } function bo ( a ) { var b = c . createElement ( "div" ) ; bh . appendChild ( b ) , b . innerHTML = a . outerHTML ; return b . firstChild } function bn ( a ) { var b = ( a . nodeName || "" ) . toLowerCase ( ) ; b === "input" ? bm ( a ) : b !== "script" && typeof a . getElementsByTagName != "undefined" && f . grep ( a . getElementsByTagName ( "input" ) , bm ) } function bm ( a ) { if ( a . type === "checkbox" || a . type === "radio" ) a . defaultChecked = a . checked } function bl ( a ) { return typeof a . getElementsByTagName != "undefined" ? a . getElementsByTagName ( "*" ) : typeof a . querySelectorAll != "undefined" ? a . querySelectorAll ( "*" ) : [ ] } function bk ( a , b ) { var c ; b . nodeType === 1 && ( b . clearAttributes && b . clearAttributes ( ) , b . mergeAttributes && b . mergeAttributes ( a ) , c = b . nodeName . toLowerCase ( ) , c === "object" ? b . outerHTML = a . outerHTML : c !== "input" || a . type !== "checkbox" && a . type !== "radio" ? c === "option" ? b . selected = a . defaultSelected : c === "input" || c === "textarea" ? b . defaultValue = a . defaultValue : c === "script" && b . text !== a . text && ( b . text =
a ) { var b = F . exec ( a ) ; b && ( b [ 1 ] = ( b [ 1 ] || "" ) . toLowerCase ( ) , b [ 3 ] = b [ 3 ] && new RegExp ( "(?:^|\\s)" + b [ 3 ] + "(?:\\s|$)" ) ) ; return b } , H = function ( a , b ) { var c = a . attributes || { } ; return ( ! b [ 1 ] || a . nodeName . toLowerCase ( ) === b [ 1 ] ) && ( ! b [ 2 ] || ( c . id || { } ) . value === b [ 2 ] ) && ( ! b [ 3 ] || b [ 3 ] . test ( ( c [ "class" ] || { } ) . value ) ) } , I = function ( a ) { return f . event . special . hover ? a : a . replace ( B , "mouseenter$1 mouseleave$1" ) } ; f . event = { add : function ( a , c , d , e , g ) { var h , i , j , k , l , m , n , o , p , q , r , s ; if ( ! ( a . nodeType === 3 || a . nodeType === 8 || ! c || ! d || ! ( h = f . _data ( a ) ) ) ) { d . handler && ( p = d , d = p . handler , g = p . selector ) , d . guid || ( d . guid = f . guid ++ ) , j = h . events , j || ( h . events = j = { } ) , i = h . handle , i || ( h . handle = i = function ( a ) { return typeof f != "undefined" && ( ! a || f . event . triggered !== a . type ) ? f . event . dispatch . apply ( i . elem , arguments ) : b } , i . elem = a ) , c = f . trim ( I ( c ) ) . split ( " " ) ; for ( k = 0 ; k < c . length ; k ++ ) { l = A . exec ( c [ k ] ) || [ ] , m = l [ 1 ] , n = ( l [ 2 ] || "" ) . split ( "." ) . sort ( ) , s = f . event . special [ m ] || { } , m = ( g ? s . delegateType : s . bindType ) || m , s = f . event . special [ m ] || { } , o = f . extend ( { type : m , origType : l [ 1 ] , data : e , handler : d , guid : d . guid , selector : g , quick : g && G ( g ) , namespace : n . join ( "." ) } , p ) , r = j [ m ] ; if ( ! r ) { r = j [ m ] = [ ] , r . delegateCount = 0 ; if ( ! s . setup || s . setup . call ( a , e , n , i ) === ! 1 ) a . addEventListener ? a . addEventListener ( m , i , ! 1 ) : a . attachEvent && a . attachEvent ( "on" + m , i ) } s . add && ( s . add . call ( a , o ) , o . handler . guid || ( o . handler . guid = d . guid ) ) , g ? r . splice ( r . delegateCount ++ , 0 , o ) : r . push ( o ) , f . event . global [ m ] = ! 0 } a = null } } , global : { } , remove : function ( a , b , c , d , e ) { var g = f . hasData ( a ) && f . _data ( a ) , h , i , j , k , l , m , n , o , p , q , r , s ; if ( ! ! g && ! ! ( o = g . events ) ) { b = f . trim ( I ( b || "" ) ) . split ( " " ) ; for ( h = 0 ; h < b . length ; h ++ ) { i = A . exec ( b [ h ] ) || [ ] , j = k = i [ 1 ] , l = i [ 2 ] ; if ( ! j ) { for ( j in o ) f . event . remove ( a , j + b [ h ] , c , d , ! 0 ) ; continue } p = f . event . special [ j ] || { } , j = ( d ? p . delegateType : p . bindType ) || j , r = o [ j ] || [ ] , m = r . length , l = l ? new RegExp ( "(^|\\.)" + l . split ( "." ) . sort ( ) . join ( "\\.(?:.*\\.)?" ) + "(\\.|$)" ) : null ; for ( n = 0 ; n < r . length ; n ++ ) s = r [ n ] , ( e || k === s . origType ) && ( ! c || c . guid === s . guid ) && ( ! l || l . test ( s . namespace ) ) && ( ! d || d === s . selector || d === "**" && s . selector ) && ( r . splice ( n -- , 1 ) , s . selector && r . delegateCount -- , p . remove && p . remove . call ( a , s ) ) ; r . length === 0 && m !== r . length && ( ( ! p . teardown || p . teardown . call ( a , l ) === ! 1 ) && f . removeEvent ( a , j , g . handle ) , delete o [ j ] ) } f . isEmptyObject ( o ) && ( q = g . handle , q && ( q . elem = null ) , f . removeData ( a , [ "events" , "handle" ] , ! 0 ) ) } } , customEvent : { getData : ! 0 , setData : ! 0 , changeData : ! 0 } , trigger : function ( c , d , e , g ) { if ( ! e || e . nodeType !== 3 && e . nodeType !== 8 ) { var h = c . type || c , i = [ ] , j , k , l , m , n , o , p , q , r , s ; if ( E . test ( h + f . event . triggered ) ) return ; h . indexOf ( "!" ) >= 0 && ( h = h . slice ( 0 , - 1 ) , k = ! 0 ) , h . indexOf ( "." ) >= 0 && ( i = h . split ( "." ) , h = i . shift ( ) , i . sort ( ) ) ; if ( ( ! e || f . event . customEvent [ h ] ) && ! f . event . global [ h ] ) return ; c = typeof c == "object" ? c [ f . expando ] ? c : new f . Event ( h , c ) : new f . Event ( h ) , c . type = h , c . isTrigger = ! 0 , c . exclusive = k , c . namespace = i . join ( "." ) , c . namespace _re = c . namespace ? new RegExp ( "(^|\\.)" + i . join ( "\\.(?:.*\\.)?" ) + "(\\.|$)" ) : null , o = h . indexOf ( ":" ) < 0 ? "on" + h : "" ; if ( ! e ) { j = f . cache ; for ( l in j ) j [ l ] . events && j [ l ] . events [ h ] && f . event . trigger ( c , d , j [ l ] . handle . elem , ! 0 ) ; return } c . result = b , c . target || ( c . target = e ) , d = d != null ? f . makeArray ( d ) : [ ] , d . unshift ( c ) , p = f . event . special [ h ] || { } ; if ( p . trigger && p . trigger . apply ( e , d ) === ! 1 ) return ; r = [ [ e , p . bindType || h ] ] ; if ( ! g && ! p . noBubble && ! f . isWindow ( e ) ) { s = p . delegateType || h , m = E . test ( s + h ) ? e : e . parentNode , n = null ; for ( ; m ; m = m . parentNode ) r . push ( [ m , s ] ) , n = m ; n && n === e . ownerDocument && r . push ( [ n . defaultView || n . parentWindow || a , s ] ) } for ( l = 0 ; l < r . length && ! c . isPropagationStopped ( ) ; l ++ ) m = r [ l ] [ 0 ] , c . type = r [ l ] [ 1 ] , q = ( f . _data ( m , "events" ) || { } ) [ c . type ] && f . _data ( m , "handle" ) , q && q . apply ( m , d ) , q = o && m [ o ] , q && f . acceptData ( m ) && q . apply ( m , d ) === ! 1 && c . preventDefault ( ) ; c . type = h , ! g && ! c . isDefaultPrevented ( ) && ( ! p . _default || p . _default . apply ( e . ownerDocument , d ) === ! 1 ) && ( h !== "click" || ! f . nodeName ( e , "a" ) ) && f . acceptData ( e ) && o && e [ h ] && ( h !== "focus" && h !== "blur" || c . target . offsetWidth !== 0 ) && ! f . isWindow ( e ) && ( n = e [ o ] , n && ( e [ o ] = null ) , f . event . triggered = h , e [ h ] ( ) , f . event . triggered = b , n && ( e [ o ] = n ) ) ; return c . result } } , dispatch : function ( c ) { c = f . event . fix ( c || a . event ) ; var d = ( f . _data ( this , "events" ) || { } ) [ c . type ] || [ ] , e = d . delegateCount , g = [ ] . slice . call ( arguments , 0 ) , h = ! c . exclusive && ! c . namespace , i = f . event . special [ c . type ] || { } , j = [ ] , k , l , m , n , o , p , q , r , s , t , u ; g [ 0 ] = c , c . delegateTarget = this ; if ( ! i . preDisp
. clean ( arguments ) ; a . push . apply ( a , this . toArray ( ) ) ; return this . pushStack ( a , "before" , arguments ) } } , after : function ( ) { if ( this [ 0 ] && this [ 0 ] . parentNode ) return this . domManip ( arguments , ! 1 , function ( a ) { this . parentNode . insertBefore ( a , this . nextSibling ) } ) ; if ( arguments . length ) { var a = this . pushStack ( this , "after" , arguments ) ; a . push . apply ( a , f . clean ( arguments ) ) ; return a } } , remove : function ( a , b ) { for ( var c = 0 , d ; ( d = this [ c ] ) != null ; c ++ ) if ( ! a || f . filter ( a , [ d ] ) . length ) ! b && d . nodeType === 1 && ( f . cleanData ( d . getElementsByTagName ( "*" ) ) , f . cleanData ( [ d ] ) ) , d . parentNode && d . parentNode . removeChild ( d ) ; return this } , empty : function ( ) { for ( var a = 0 , b ; ( b = this [ a ] ) != null ; a ++ ) { b . nodeType === 1 && f . cleanData ( b . getElementsByTagName ( "*" ) ) ; while ( b . firstChild ) b . removeChild ( b . firstChild ) } return this } , clone : function ( a , b ) { a = a == null ? ! 1 : a , b = b == null ? a : b ; return this . map ( function ( ) { return f . clone ( this , a , b ) } ) } , html : function ( a ) { return f . access ( this , function ( a ) { var c = this [ 0 ] || { } , d = 0 , e = this . length ; if ( a === b ) return c . nodeType === 1 ? c . innerHTML . replace ( W , "" ) : null ; if ( typeof a == "string" && ! ba . test ( a ) && ( f . support . leadingWhitespace || ! X . test ( a ) ) && ! bg [ ( Z . exec ( a ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ] ) { a = a . replace ( Y , "<$1></$2>" ) ; try { for ( ; d < e ; d ++ ) c = this [ d ] || { } , c . nodeType === 1 && ( f . cleanData ( c . getElementsByTagName ( "*" ) ) , c . innerHTML = a ) ; c = 0 } catch ( g ) { } } c && this . empty ( ) . append ( a ) } , null , a , arguments . length ) } , replaceWith : function ( a ) { if ( this [ 0 ] && this [ 0 ] . parentNode ) { if ( f . isFunction ( a ) ) return this . each ( function ( b ) { var c = f ( this ) , d = c . html ( ) ; c . replaceWith ( a . call ( this , b , d ) ) } ) ; typeof a != "string" && ( a = f ( a ) . detach ( ) ) ; return this . each ( function ( ) { var b = this . nextSibling , c = this . parentNode ; f ( this ) . remove ( ) , b ? f ( b ) . before ( a ) : f ( c ) . append ( a ) } ) } return this . length ? this . pushStack ( f ( f . isFunction ( a ) ? a ( ) : a ) , "replaceWith" , a ) : this } , detach : function ( a ) { return this . remove ( a , ! 0 ) } , domManip : function ( a , c , d ) { var e , g , h , i , j = a [ 0 ] , k = [ ] ; if ( ! f . support . checkClone && arguments . length === 3 && typeof j == "string" && bd . test ( j ) ) return this . each ( function ( ) { f ( this ) . domManip ( a , c , d , ! 0 ) } ) ; if ( f . isFunction ( j ) ) return this . each ( function ( e ) { var g = f ( this ) ; a [ 0 ] = j . call ( this , e , c ? g . html ( ) : b ) , g . domManip ( a , c , d ) } ) ; if ( this [ 0 ] ) { i = j && j . parentNode , f . support . parentNode && i && i . nodeType === 11 && i . childNodes . length === this . length ? e = { fragment : i } : e = f . buildFragment ( a , this , k ) , h = e . fragment , h . childNodes . length === 1 ? g = h = h . firstChild : g = h . firstChild ; if ( g ) { c = c && f . nodeName ( g , "tr" ) ; for ( var l = 0 , m = this . length , n = m - 1 ; l < m ; l ++ ) d . call ( c ? bi ( this [ l ] , g ) : this [ l ] , e . cacheable || m > 1 && l < n ? f . clone ( h , ! 0 , ! 0 ) : h ) } k . length && f . each ( k , function ( a , b ) { b . src ? f . ajax ( { type : "GET" , global : ! 1 , url : b . src , async : ! 1 , dataType : "script" } ) : f . globalEval ( ( b . text || b . textContent || b . innerHTML || "" ) . replace ( bf , "/*$0*/" ) ) , b . parentNode && b . parentNode . removeChild ( b ) } ) } return this } } ) , f . buildFragment = function ( a , b , d ) { var e , g , h , i , j = a [ 0 ] ; b && b [ 0 ] && ( i = b [ 0 ] . ownerDocument || b [ 0 ] ) , i . createDocumentFragment || ( i = c ) , a . length === 1 && typeof j == "string" && j . length < 512 && i === c && j . charAt ( 0 ) === "<" && ! bb . test ( j ) && ( f . support . checkClone || ! bd . test ( j ) ) && ( f . support . html5Clone || ! bc . test ( j ) ) && ( g = ! 0 , h = f . fragments [ j ] , h && h !== 1 && ( e = h ) ) , e || ( e = i . createDocumentFragment ( ) , f . clean ( a , i , e , d ) ) , g && ( f . fragments [ j ] = h ? e : 1 ) ; return { fragment : e , cacheable : g } } , f . fragments = { } , f . each ( { appendTo : "append" , prependTo : "prepend" , insertBefore : "before" , insertAfter : "after" , replaceAll : "replaceWith" } , function ( a , b ) { f . fn [ a ] = function ( c ) { var d = [ ] , e = f ( c ) , g = this . length === 1 && this [ 0 ] . parentNode ; if ( g && g . nodeType === 11 && g . childNodes . length === 1 && e . length === 1 ) { e [ b ] ( this [ 0 ] ) ; return this } for ( var h = 0 , i = e . length ; h < i ; h ++ ) { var j = ( h > 0 ? this . clone ( ! 0 ) : this ) . get ( ) ; f ( e [ h ] ) [ b ] ( j ) , d = d . concat ( j ) } return this . pushStack ( d , a , e . selector ) } } ) , f . extend ( { clone : function ( a , b , c ) { var d , e , g , h = f . support . html5Clone || f . isXMLDoc ( a ) || ! bc . test ( "<" + a . nodeName + ">" ) ? a . cloneNode ( ! 0 ) : bo ( a ) ; if ( ( ! f . support . noCloneEvent || ! f . support . noCloneChecked ) && ( a . nodeType === 1 || a . nodeType === 11 ) && ! f . isXMLDoc ( a ) ) { bk ( a , h ) , d = bl ( a ) , e = bl ( h ) ; for ( g = 0 ; d [ g ] ; ++ g ) e [ g ] && bk ( d [ g ] , e [ g ] ) } if ( b ) { bj ( a , h ) ; if ( c ) { d = bl ( a ) , e = bl ( h ) ; for ( g = 0 ; d [ g ] ; ++ g ) bj ( d [ g ] , e [ g ] ) } } d = e = null ; return h } , clean : function ( a , b , d , e ) { var g , h , i , j = [ ] ; b = b || c , typeof b . createElement == "undefined" && ( b = b . ownerDocument || b [ 0 ] && b [ 0 ] . ownerDocument || c ) ; for ( var k = 0 , l ; ( l = a [ k ] ) != null ; k
/* SJCL */
var sjcl = { cipher : { } , hash : { } , keyexchange : { } , mode : { } , misc : { } , codec : { } , exception : { corrupt : function ( a ) { this . toString = function ( ) { return "CORRUPT: " + this . message } ; this . message = a } , invalid : function ( a ) { this . toString = function ( ) { return "INVALID: " + this . message } ; this . message = a } , bug : function ( a ) { this . toString = function ( ) { return "BUG: " + this . message } ; this . message = a } , notReady : function ( a ) { this . toString = function ( ) { return "NOT READY: " + this . message } ; this . message = a } } } ;
if ( typeof module != "undefined" && module . exports ) module . exports = sjcl ;
sjcl . cipher . aes = function ( a ) { this . h [ 0 ] [ 0 ] [ 0 ] || this . w ( ) ; var b , c , d , e , f = this . h [ 0 ] [ 4 ] , g = this . h [ 1 ] ; b = a . length ; var h = 1 ; if ( b !== 4 && b !== 6 && b !== 8 ) throw new sjcl . exception . invalid ( "invalid aes key size" ) ; this . a = [ d = a . slice ( 0 ) , e = [ ] ] ; for ( a = b ; a < 4 * b + 28 ; a ++ ) { c = d [ a - 1 ] ; if ( a % b === 0 || b === 8 && a % b === 4 ) { c = f [ c >>> 24 ] << 24 ^ f [ c >> 16 & 255 ] << 16 ^ f [ c >> 8 & 255 ] << 8 ^ f [ c & 255 ] ; if ( a % b === 0 ) { c = c << 8 ^ c >>> 24 ^ h << 24 ; h = h << 1 ^ ( h >> 7 ) * 283 } } d [ a ] = d [ a - b ] ^ c } for ( b = 0 ; a ; b ++ , a -- ) { c = d [ b & 3 ? a : a - 4 ] ; e [ b ] = a <= 4 || b < 4 ? c : g [ 0 ] [ f [ c >>> 24 ] ] ^ g [ 1 ] [ f [ c >> 16 & 255 ] ] ^ g [ 2 ] [ f [ c >> 8 & 255 ] ] ^
g [ 3 ] [ f [ c & 255 ] ] } } ;
sjcl . cipher . aes . prototype = { encrypt : function ( a ) { return this . H ( a , 0 ) } , decrypt : function ( a ) { return this . H ( a , 1 ) } , h : [ [ [ ] , [ ] , [ ] , [ ] , [ ] ] , [ [ ] , [ ] , [ ] , [ ] , [ ] ] ] , w : function ( ) { var a = this . h [ 0 ] , b = this . h [ 1 ] , c = a [ 4 ] , d = b [ 4 ] , e , f , g , h = [ ] , i = [ ] , k , j , l , m ; for ( e = 0 ; e < 0x100 ; e ++ ) i [ ( h [ e ] = e << 1 ^ ( e >> 7 ) * 283 ) ^ e ] = e ; for ( f = g = 0 ; ! c [ f ] ; f ^= k || 1 , g = i [ g ] || 1 ) { l = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4 ; l = l >> 8 ^ l & 255 ^ 99 ; c [ f ] = l ; d [ l ] = f ; j = h [ e = h [ k = h [ f ] ] ] ; m = j * 0x1010101 ^ e * 0x10001 ^ k * 0x101 ^ f * 0x1010100 ; j = h [ l ] * 0x101 ^ l * 0x1010100 ; for ( e = 0 ; e < 4 ; e ++ ) { a [ e ] [ f ] = j = j << 24 ^ j >>> 8 ; b [ e ] [ l ] = m = m << 24 ^ m >>> 8 } } for ( e =
0 ; e < 5 ; e ++ ) { a [ e ] = a [ e ] . slice ( 0 ) ; b [ e ] = b [ e ] . slice ( 0 ) } } , H : function ( a , b ) { if ( a . length !== 4 ) throw new sjcl . exception . invalid ( "invalid aes block size" ) ; var c = this . a [ b ] , d = a [ 0 ] ^ c [ 0 ] , e = a [ b ? 3 : 1 ] ^ c [ 1 ] , f = a [ 2 ] ^ c [ 2 ] ; a = a [ b ? 1 : 3 ] ^ c [ 3 ] ; var g , h , i , k = c . length / 4 - 2 , j , l = 4 , m = [ 0 , 0 , 0 , 0 ] ; g = this . h [ b ] ; var n = g [ 0 ] , o = g [ 1 ] , p = g [ 2 ] , q = g [ 3 ] , r = g [ 4 ] ; for ( j = 0 ; j < k ; j ++ ) { g = n [ d >>> 24 ] ^ o [ e >> 16 & 255 ] ^ p [ f >> 8 & 255 ] ^ q [ a & 255 ] ^ c [ l ] ; h = n [ e >>> 24 ] ^ o [ f >> 16 & 255 ] ^ p [ a >> 8 & 255 ] ^ q [ d & 255 ] ^ c [ l + 1 ] ; i = n [ f >>> 24 ] ^ o [ a >> 16 & 255 ] ^ p [ d >> 8 & 255 ] ^ q [ e & 255 ] ^ c [ l + 2 ] ; a = n [ a >>> 24 ] ^ o [ d >> 16 &
255 ] ^ p [ e >> 8 & 255 ] ^ q [ f & 255 ] ^ c [ l + 3 ] ; l += 4 ; d = g ; e = h ; f = i } for ( j = 0 ; j < 4 ; j ++ ) { m [ b ? 3 & - j : j ] = r [ d >>> 24 ] << 24 ^ r [ e >> 16 & 255 ] << 16 ^ r [ f >> 8 & 255 ] << 8 ^ r [ a & 255 ] ^ c [ l ++ ] ; g = d ; d = e ; e = f ; f = a ; a = g } return m } } ;
sjcl . bitArray = { bitSlice : function ( a , b , c ) { a = sjcl . bitArray . P ( a . slice ( b / 32 ) , 32 - ( b & 31 ) ) . slice ( 1 ) ; return c === undefined ? a : sjcl . bitArray . clamp ( a , c - b ) } , extract : function ( a , b , c ) { var d = Math . floor ( - b - c & 31 ) ; return ( ( b + c - 1 ^ b ) & - 32 ? a [ b / 32 | 0 ] << 32 - d ^ a [ b / 32 + 1 | 0 ] >>> d : a [ b / 32 | 0 ] >>> d ) & ( 1 << c ) - 1 } , concat : function ( a , b ) { if ( a . length === 0 || b . length === 0 ) return a . concat ( b ) ; var c = a [ a . length - 1 ] , d = sjcl . bitArray . getPartial ( c ) ; return d === 32 ? a . concat ( b ) : sjcl . bitArray . P ( b , d , c | 0 , a . slice ( 0 , a . length - 1 ) ) } , bitLength : function ( a ) { var b = a . length ;
if ( b === 0 ) return 0 ; return ( b - 1 ) * 32 + sjcl . bitArray . getPartial ( a [ b - 1 ] ) } , clamp : function ( a , b ) { if ( a . length * 32 < b ) return a ; a = a . slice ( 0 , Math . ceil ( b / 32 ) ) ; var c = a . length ; b &= 31 ; if ( c > 0 && b ) a [ c - 1 ] = sjcl . bitArray . partial ( b , a [ c - 1 ] & 2147483648 >> b - 1 , 1 ) ; return a } , partial : function ( a , b , c ) { if ( a === 32 ) return b ; return ( c ? b | 0 : b << 32 - a ) + a * 0x10000000000 } , getPartial : function ( a ) { return Math . round ( a / 0x10000000000 ) || 32 } , equal : function ( a , b ) { if ( sjcl . bitArray . bitLength ( a ) !== sjcl . bitArray . bitLength ( b ) ) return false ; var c = 0 , d ; for ( d = 0 ; d < a . length ; d ++ ) c |=
a [ d ] ^ b [ d ] ; return c === 0 } , P : function ( a , b , c , d ) { var e ; e = 0 ; if ( d === undefined ) d = [ ] ; for ( ; b >= 32 ; b -= 32 ) { d . push ( c ) ; c = 0 } if ( b === 0 ) return d . concat ( a ) ; for ( e = 0 ; e < a . length ; e ++ ) { d . push ( c | a [ e ] >>> b ) ; c = a [ e ] << 32 - b } e = a . length ? a [ a . length - 1 ] : 0 ; a = sjcl . bitArray . getPartial ( e ) ; d . push ( sjcl . bitArray . partial ( b + a & 31 , b + a > 32 ? c : d . pop ( ) , 1 ) ) ; return d } , k : function ( a , b ) { return [ a [ 0 ] ^ b [ 0 ] , a [ 1 ] ^ b [ 1 ] , a [ 2 ] ^ b [ 2 ] , a [ 3 ] ^ b [ 3 ] ] } } ;
sjcl . codec . utf8String = { fromBits : function ( a ) { var b = "" , c = sjcl . bitArray . bitLength ( a ) , d , e ; for ( d = 0 ; d < c / 8 ; d ++ ) { if ( ( d & 3 ) === 0 ) e = a [ d / 4 ] ; b += String . fromCharCode ( e >>> 24 ) ; e <<= 8 } return decodeURIComponent ( escape ( b ) ) } , toBits : function ( a ) { a = unescape ( encodeURIComponent ( a ) ) ; var b = [ ] , c , d = 0 ; for ( c = 0 ; c < a . length ; c ++ ) { d = d << 8 | a . charCodeAt ( c ) ; if ( ( c & 3 ) === 3 ) { b . push ( d ) ; d = 0 } } c & 3 && b . push ( sjcl . bitArray . partial ( 8 * ( c & 3 ) , d ) ) ; return b } } ;
sjcl . codec . hex = { fromBits : function ( a ) { var b = "" , c ; for ( c = 0 ; c < a . length ; c ++ ) b += ( ( a [ c ] | 0 ) + 0xf00000000000 ) . toString ( 16 ) . substr ( 4 ) ; return b . substr ( 0 , sjcl . bitArray . bitLength ( a ) / 4 ) } , toBits : function ( a ) { var b , c = [ ] , d ; a = a . replace ( /\s|0x/g , "" ) ; d = a . length ; a += "00000000" ; for ( b = 0 ; b < a . length ; b += 8 ) c . push ( parseInt ( a . substr ( b , 8 ) , 16 ) ^ 0 ) ; return sjcl . bitArray . clamp ( c , d * 4 ) } } ;
sjcl . codec . base64 = { D : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" , fromBits : function ( a , b , c ) { var d = "" , e = 0 , f = sjcl . codec . base64 . D , g = 0 , h = sjcl . bitArray . bitLength ( a ) ; if ( c ) f = f . substr ( 0 , 62 ) + "-_" ; for ( c = 0 ; d . length * 6 < h ; ) { d += f . charAt ( ( g ^ a [ c ] >>> e ) >>> 26 ) ; if ( e < 6 ) { g = a [ c ] << 6 - e ; e += 26 ; c ++ } else { g <<= 6 ; e -= 6 } } for ( ; d . length & 3 && ! b ; ) d += "=" ; return d } , toBits : function ( a , b ) { a = a . replace ( /\s|=/g , "" ) ; var c = [ ] , d = 0 , e = sjcl . codec . base64 . D , f = 0 , g ; if ( b ) e = e . substr ( 0 , 62 ) + "-_" ; for ( b = 0 ; b < a . length ; b ++ ) { g = e . indexOf ( a . charAt ( b ) ) ;
if ( g < 0 ) throw new sjcl . exception . invalid ( "this isn't base64!" ) ; if ( d > 26 ) { d -= 26 ; c . push ( f ^ g >>> d ) ; f = g << 32 - d } else { d += 6 ; f ^= g << 32 - d } } d & 56 && c . push ( sjcl . bitArray . partial ( d & 56 , f , 1 ) ) ; return c } } ; sjcl . codec . base64url = { fromBits : function ( a ) { return sjcl . codec . base64 . fromBits ( a , 1 , 1 ) } , toBits : function ( a ) { return sjcl . codec . base64 . toBits ( a , 1 ) } } ; sjcl . hash . sha256 = function ( a ) { this . a [ 0 ] || this . w ( ) ; if ( a ) { this . n = a . n . slice ( 0 ) ; this . i = a . i . slice ( 0 ) ; this . e = a . e } else this . reset ( ) } ; sjcl . hash . sha256 . hash = function ( a ) { return ( new sjcl . hash . sha256 ) . update ( a ) . finalize ( ) } ;
sjcl . hash . sha256 . prototype = { blockSize : 512 , reset : function ( ) { this . n = this . N . slice ( 0 ) ; this . i = [ ] ; this . e = 0 ; return this } , update : function ( a ) { if ( typeof a === "string" ) a = sjcl . codec . utf8String . toBits ( a ) ; var b , c = this . i = sjcl . bitArray . concat ( this . i , a ) ; b = this . e ; a = this . e = b + sjcl . bitArray . bitLength ( a ) ; for ( b = 512 + b & - 512 ; b <= a ; b += 512 ) this . C ( c . splice ( 0 , 16 ) ) ; return this } , finalize : function ( ) { var a , b = this . i , c = this . n ; b = sjcl . bitArray . concat ( b , [ sjcl . bitArray . partial ( 1 , 1 ) ] ) ; for ( a = b . length + 2 ; a & 15 ; a ++ ) b . push ( 0 ) ; b . push ( Math . floor ( this . e /
4294967296 ) ) ; for ( b . push ( this . e | 0 ) ; b . length ; ) this . C ( b . splice ( 0 , 16 ) ) ; this . reset ( ) ; return c } , N : [ ] , a : [ ] , w : function ( ) { function a ( e ) { return ( e - Math . floor ( e ) ) * 0x100000000 | 0 } var b = 0 , c = 2 , d ; a : for ( ; b < 64 ; c ++ ) { for ( d = 2 ; d * d <= c ; d ++ ) if ( c % d === 0 ) continue a ; if ( b < 8 ) this . N [ b ] = a ( Math . pow ( c , 0.5 ) ) ; this . a [ b ] = a ( Math . pow ( c , 1 / 3 ) ) ; b ++ } } , C : function ( a ) { var b , c , d = a . slice ( 0 ) , e = this . n , f = this . a , g = e [ 0 ] , h = e [ 1 ] , i = e [ 2 ] , k = e [ 3 ] , j = e [ 4 ] , l = e [ 5 ] , m = e [ 6 ] , n = e [ 7 ] ; for ( a = 0 ; a < 64 ; a ++ ) { if ( a < 16 ) b = d [ a ] ; else { b = d [ a + 1 & 15 ] ; c = d [ a + 14 & 15 ] ; b = d [ a & 15 ] = ( b >>> 7 ^ b >>> 18 ^
b >>> 3 ^ b << 25 ^ b << 14 ) + ( c >>> 17 ^ c >>> 19 ^ c >>> 10 ^ c << 15 ^ c << 13 ) + d [ a & 15 ] + d [ a + 9 & 15 ] | 0 } b = b + n + ( j >>> 6 ^ j >>> 11 ^ j >>> 25 ^ j << 26 ^ j << 21 ^ j << 7 ) + ( m ^ j & ( l ^ m ) ) + f [ a ] ; n = m ; m = l ; l = j ; j = k + b | 0 ; k = i ; i = h ; h = g ; g = b + ( h & i ^ k & ( h ^ i ) ) + ( h >>> 2 ^ h >>> 13 ^ h >>> 22 ^ h << 30 ^ h << 19 ^ h << 10 ) | 0 } e [ 0 ] = e [ 0 ] + g | 0 ; e [ 1 ] = e [ 1 ] + h | 0 ; e [ 2 ] = e [ 2 ] + i | 0 ; e [ 3 ] = e [ 3 ] + k | 0 ; e [ 4 ] = e [ 4 ] + j | 0 ; e [ 5 ] = e [ 5 ] + l | 0 ; e [ 6 ] = e [ 6 ] + m | 0 ; e [ 7 ] = e [ 7 ] + n | 0 } } ;
sjcl . mode . ccm = { name : "ccm" , encrypt : function ( a , b , c , d , e ) { var f , g = b . slice ( 0 ) , h = sjcl . bitArray , i = h . bitLength ( c ) / 8 , k = h . bitLength ( g ) / 8 ; e = e || 64 ; d = d || [ ] ; if ( i < 7 ) throw new sjcl . exception . invalid ( "ccm: iv must be at least 7 bytes" ) ; for ( f = 2 ; f < 4 && k >>> 8 * f ; f ++ ) ; if ( f < 15 - i ) f = 15 - i ; c = h . clamp ( c , 8 * ( 15 - f ) ) ; b = sjcl . mode . ccm . G ( a , b , c , d , e , f ) ; g = sjcl . mode . ccm . I ( a , g , c , b , e , f ) ; return h . concat ( g . data , g . tag ) } , decrypt : function ( a , b , c , d , e ) { e = e || 64 ; d = d || [ ] ; var f = sjcl . bitArray , g = f . bitLength ( c ) / 8 , h = f . bitLength ( b ) , i = f . clamp ( b , h - e ) , k = f . bitSlice ( b ,
h - e ) ; h = ( h - e ) / 8 ; if ( g < 7 ) throw new sjcl . exception . invalid ( "ccm: iv must be at least 7 bytes" ) ; for ( b = 2 ; b < 4 && h >>> 8 * b ; b ++ ) ; if ( b < 15 - g ) b = 15 - g ; c = f . clamp ( c , 8 * ( 15 - b ) ) ; i = sjcl . mode . ccm . I ( a , i , c , k , e , b ) ; a = sjcl . mode . ccm . G ( a , i . data , c , d , e , b ) ; if ( ! f . equal ( i . tag , a ) ) throw new sjcl . exception . corrupt ( "ccm: tag doesn't match" ) ; return i . data } , G : function ( a , b , c , d , e , f ) { var g = [ ] , h = sjcl . bitArray , i = h . k ; e /= 8 ; if ( e % 2 || e < 4 || e > 16 ) throw new sjcl . exception . invalid ( "ccm: invalid tag length" ) ; if ( d . length > 0xffffffff || b . length > 0xffffffff ) throw new sjcl . exception . bug ( "ccm: can't deal with 4GiB or more data" ) ;
f = [ h . partial ( 8 , ( d . length ? 64 : 0 ) | e - 2 << 2 | f - 1 ) ] ; f = h . concat ( f , c ) ; f [ 3 ] |= h . bitLength ( b ) / 8 ; f = a . encrypt ( f ) ; if ( d . length ) { c = h . bitLength ( d ) / 8 ; if ( c <= 65279 ) g = [ h . partial ( 16 , c ) ] ; else if ( c <= 0xffffffff ) g = h . concat ( [ h . partial ( 16 , 65534 ) ] , [ c ] ) ; g = h . concat ( g , d ) ; for ( d = 0 ; d < g . length ; d += 4 ) f = a . encrypt ( i ( f , g . slice ( d , d + 4 ) . concat ( [ 0 , 0 , 0 ] ) ) ) } for ( d = 0 ; d < b . length ; d += 4 ) f = a . encrypt ( i ( f , b . slice ( d , d + 4 ) . concat ( [ 0 , 0 , 0 ] ) ) ) ; return h . clamp ( f , e * 8 ) } , I : function ( a , b , c , d , e , f ) { var g , h = sjcl . bitArray ; g = h . k ; var i = b . length , k = h . bitLength ( b ) ; c = h . concat ( [ h . partial ( 8 ,
f - 1 ) ] , c ) . concat ( [ 0 , 0 , 0 ] ) . slice ( 0 , 4 ) ; d = h . bitSlice ( g ( d , a . encrypt ( c ) ) , 0 , e ) ; if ( ! i ) return { tag : d , data : [ ] } ; for ( g = 0 ; g < i ; g += 4 ) { c [ 3 ] ++ ; e = a . encrypt ( c ) ; b [ g ] ^= e [ 0 ] ; b [ g + 1 ] ^= e [ 1 ] ; b [ g + 2 ] ^= e [ 2 ] ; b [ g + 3 ] ^= e [ 3 ] } return { tag : d , data : h . clamp ( b , k ) } } } ;
sjcl . mode . ocb2 = { name : "ocb2" , encrypt : function ( a , b , c , d , e , f ) { if ( sjcl . bitArray . bitLength ( c ) !== 128 ) throw new sjcl . exception . invalid ( "ocb iv must be 128 bits" ) ; var g , h = sjcl . mode . ocb2 . A , i = sjcl . bitArray , k = i . k , j = [ 0 , 0 , 0 , 0 ] ; c = h ( a . encrypt ( c ) ) ; var l , m = [ ] ; d = d || [ ] ; e = e || 64 ; for ( g = 0 ; g + 4 < b . length ; g += 4 ) { l = b . slice ( g , g + 4 ) ; j = k ( j , l ) ; m = m . concat ( k ( c , a . encrypt ( k ( c , l ) ) ) ) ; c = h ( c ) } l = b . slice ( g ) ; b = i . bitLength ( l ) ; g = a . encrypt ( k ( c , [ 0 , 0 , 0 , b ] ) ) ; l = i . clamp ( k ( l . concat ( [ 0 , 0 , 0 ] ) , g ) , b ) ; j = k ( j , k ( l . concat ( [ 0 , 0 , 0 ] ) , g ) ) ; j = a . encrypt ( k ( j , k ( c , h ( c ) ) ) ) ;
if ( d . length ) j = k ( j , f ? d : sjcl . mode . ocb2 . pmac ( a , d ) ) ; return m . concat ( i . concat ( l , i . clamp ( j , e ) ) ) } , decrypt : function ( a , b , c , d , e , f ) { if ( sjcl . bitArray . bitLength ( c ) !== 128 ) throw new sjcl . exception . invalid ( "ocb iv must be 128 bits" ) ; e = e || 64 ; var g = sjcl . mode . ocb2 . A , h = sjcl . bitArray , i = h . k , k = [ 0 , 0 , 0 , 0 ] , j = g ( a . encrypt ( c ) ) , l , m , n = sjcl . bitArray . bitLength ( b ) - e , o = [ ] ; d = d || [ ] ; for ( c = 0 ; c + 4 < n / 32 ; c += 4 ) { l = i ( j , a . decrypt ( i ( j , b . slice ( c , c + 4 ) ) ) ) ; k = i ( k , l ) ; o = o . concat ( l ) ; j = g ( j ) } m = n - c * 32 ; l = a . encrypt ( i ( j , [ 0 , 0 , 0 , m ] ) ) ; l = i ( l , h . clamp ( b . slice ( c ) ,
m ) . concat ( [ 0 , 0 , 0 ] ) ) ; k = i ( k , l ) ; k = a . encrypt ( i ( k , i ( j , g ( j ) ) ) ) ; if ( d . length ) k = i ( k , f ? d : sjcl . mode . ocb2 . pmac ( a , d ) ) ; if ( ! h . equal ( h . clamp ( k , e ) , h . bitSlice ( b , n ) ) ) throw new sjcl . exception . corrupt ( "ocb: tag doesn't match" ) ; return o . concat ( h . clamp ( l , m ) ) } , pmac : function ( a , b ) { var c , d = sjcl . mode . ocb2 . A , e = sjcl . bitArray , f = e . k , g = [ 0 , 0 , 0 , 0 ] , h = a . encrypt ( [ 0 , 0 , 0 , 0 ] ) ; h = f ( h , d ( d ( h ) ) ) ; for ( c = 0 ; c + 4 < b . length ; c += 4 ) { h = d ( h ) ; g = f ( g , a . encrypt ( f ( h , b . slice ( c , c + 4 ) ) ) ) } b = b . slice ( c ) ; if ( e . bitLength ( b ) < 128 ) { h = f ( h , d ( h ) ) ; b = e . concat ( b , [ 2147483648 | 0 , 0 ,
0 , 0 ] ) } g = f ( g , b ) ; return a . encrypt ( f ( d ( f ( h , d ( h ) ) ) , g ) ) } , A : function ( a ) { return [ a [ 0 ] << 1 ^ a [ 1 ] >>> 31 , a [ 1 ] << 1 ^ a [ 2 ] >>> 31 , a [ 2 ] << 1 ^ a [ 3 ] >>> 31 , a [ 3 ] << 1 ^ ( a [ 0 ] >>> 31 ) * 135 ] } } ; sjcl . misc . hmac = function ( a , b ) { this . M = b = b || sjcl . hash . sha256 ; var c = [ [ ] , [ ] ] , d = b . prototype . blockSize / 32 ; this . l = [ new b , new b ] ; if ( a . length > d ) a = b . hash ( a ) ; for ( b = 0 ; b < d ; b ++ ) { c [ 0 ] [ b ] = a [ b ] ^ 909522486 ; c [ 1 ] [ b ] = a [ b ] ^ 1549556828 } this . l [ 0 ] . update ( c [ 0 ] ) ; this . l [ 1 ] . update ( c [ 1 ] ) } ;
sjcl . misc . hmac . prototype . encrypt = sjcl . misc . hmac . prototype . mac = function ( a , b ) { a = ( new this . M ( this . l [ 0 ] ) ) . update ( a , b ) . finalize ( ) ; return ( new this . M ( this . l [ 1 ] ) ) . update ( a ) . finalize ( ) } ;
sjcl . misc . pbkdf2 = function ( a , b , c , d , e ) { c = c || 1E3 ; if ( d < 0 || c < 0 ) throw sjcl . exception . invalid ( "invalid params to pbkdf2" ) ; if ( typeof a === "string" ) a = sjcl . codec . utf8String . toBits ( a ) ; e = e || sjcl . misc . hmac ; a = new e ( a ) ; var f , g , h , i , k = [ ] , j = sjcl . bitArray ; for ( i = 1 ; 32 * k . length < ( d || 1 ) ; i ++ ) { e = f = a . encrypt ( j . concat ( b , [ i ] ) ) ; for ( g = 1 ; g < c ; g ++ ) { f = a . encrypt ( f ) ; for ( h = 0 ; h < f . length ; h ++ ) e [ h ] ^= f [ h ] } k = k . concat ( e ) } if ( d ) k = j . clamp ( k , d ) ; return k } ;
sjcl . random = { randomWords : function ( a , b ) { var c = [ ] ; b = this . isReady ( b ) ; var d ; if ( b === 0 ) throw new sjcl . exception . notReady ( "generator isn't seeded" ) ; else b & 2 && this . U ( ! ( b & 1 ) ) ; for ( b = 0 ; b < a ; b += 4 ) { ( b + 1 ) % 0x10000 === 0 && this . L ( ) ; d = this . u ( ) ; c . push ( d [ 0 ] , d [ 1 ] , d [ 2 ] , d [ 3 ] ) } this . L ( ) ; return c . slice ( 0 , a ) } , setDefaultParanoia : function ( a ) { this . t = a } , addEntropy : function ( a , b , c ) { c = c || "user" ; var d , e , f = ( new Date ) . valueOf ( ) , g = this . q [ c ] , h = this . isReady ( ) ; d = this . F [ c ] ; if ( d === undefined ) d = this . F [ c ] = this . R ++ ; if ( g === undefined ) g = this . q [ c ] = 0 ; this . q [ c ] =
( this . q [ c ] + 1 ) % this . b . length ; switch ( typeof a ) { case "number" : break ; case "object" : if ( b === undefined ) for ( c = b = 0 ; c < a . length ; c ++ ) for ( e = a [ c ] ; e > 0 ; ) { b ++ ; e >>>= 1 } this . b [ g ] . update ( [ d , this . J ++ , 2 , b , f , a . length ] . concat ( a ) ) ; break ; case "string" : if ( b === undefined ) b = a . length ; this . b [ g ] . update ( [ d , this . J ++ , 3 , b , f , a . length ] ) ; this . b [ g ] . update ( a ) ; break ; default : throw new sjcl . exception . bug ( "random: addEntropy only supports number, array or string" ) ; } this . j [ g ] += b ; this . f += b ; if ( h === 0 ) { this . isReady ( ) !== 0 && this . K ( "seeded" , Math . max ( this . g ,
this . f ) ) ; this . K ( "progress" , this . getProgress ( ) ) } } , isReady : function ( a ) { a = this . B [ a !== undefined ? a : this . t ] ; return this . g && this . g >= a ? this . j [ 0 ] > 80 && ( new Date ) . valueOf ( ) > this . O ? 3 : 1 : this . f >= a ? 2 : 0 } , getProgress : function ( a ) { a = this . B [ a ? a : this . t ] ; return this . g >= a ? 1 [ "0" ] : this . f > a ? 1 [ "0" ] : this . f / a } , startCollectors : function ( ) { if ( ! this . m ) { if ( window . addEventListener ) { window . addEventListener ( "load" , this . o , false ) ; window . addEventListener ( "mousemove" , this . p , false ) } else if ( document . attachEvent ) { document . attachEvent ( "onload" ,
this . o ) ; document . attachEvent ( "onmousemove" , this . p ) } else throw new sjcl . exception . bug ( "can't attach event" ) ; this . m = true } } , stopCollectors : function ( ) { if ( this . m ) { if ( window . removeEventListener ) { window . removeEventListener ( "load" , this . o , false ) ; window . removeEventListener ( "mousemove" , this . p , false ) } else if ( window . detachEvent ) { window . detachEvent ( "onload" , this . o ) ; window . detachEvent ( "onmousemove" , this . p ) } this . m = false } } , addEventListener : function ( a , b ) { this . r [ a ] [ this . Q ++ ] = b } , removeEventListener : function ( a , b ) { var c ;
a = this . r [ a ] ; var d = [ ] ; for ( c in a ) a . hasOwnProperty ( c ) && a [ c ] === b && d . push ( c ) ; for ( b = 0 ; b < d . length ; b ++ ) { c = d [ b ] ; delete a [ c ] } } , b : [ new sjcl . hash . sha256 ] , j : [ 0 ] , z : 0 , q : { } , J : 0 , F : { } , R : 0 , g : 0 , f : 0 , O : 0 , a : [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] , d : [ 0 , 0 , 0 , 0 ] , s : undefined , t : 6 , m : false , r : { progress : { } , seeded : { } } , Q : 0 , B : [ 0 , 48 , 64 , 96 , 128 , 192 , 0x100 , 384 , 512 , 768 , 1024 ] , u : function ( ) { for ( var a = 0 ; a < 4 ; a ++ ) { this . d [ a ] = this . d [ a ] + 1 | 0 ; if ( this . d [ a ] ) break } return this . s . encrypt ( this . d ) } , L : function ( ) { this . a = this . u ( ) . concat ( this . u ( ) ) ; this . s = new sjcl . cipher . aes ( this . a ) } ,
T : function ( a ) { this . a = sjcl . hash . sha256 . hash ( this . a . concat ( a ) ) ; this . s = new sjcl . cipher . aes ( this . a ) ; for ( a = 0 ; a < 4 ; a ++ ) { this . d [ a ] = this . d [ a ] + 1 | 0 ; if ( this . d [ a ] ) break } } , U : function ( a ) { var b = [ ] , c = 0 , d ; this . O = b [ 0 ] = ( new Date ) . valueOf ( ) + 3E4 ; for ( d = 0 ; d < 16 ; d ++ ) b . push ( Math . random ( ) * 0x100000000 | 0 ) ; for ( d = 0 ; d < this . b . length ; d ++ ) { b = b . concat ( this . b [ d ] . finalize ( ) ) ; c += this . j [ d ] ; this . j [ d ] = 0 ; if ( ! a && this . z & 1 << d ) break } if ( this . z >= 1 << this . b . length ) { this . b . push ( new sjcl . hash . sha256 ) ; this . j . push ( 0 ) } this . f -= c ; if ( c > this . g ) this . g = c ; this . z ++ ;
this . T ( b ) } , p : function ( a ) { sjcl . random . addEntropy ( [ a . x || a . clientX || a . offsetX , a . y || a . clientY || a . offsetY ] , 2 , "mouse" ) } , o : function ( ) { sjcl . random . addEntropy ( new Date , 2 , "loadtime" ) } , K : function ( a , b ) { var c ; a = sjcl . random . r [ a ] ; var d = [ ] ; for ( c in a ) a . hasOwnProperty ( c ) && d . push ( a [ c ] ) ; for ( c = 0 ; c < d . length ; c ++ ) d [ c ] ( b ) } } ; try { var s = new Uint32Array ( 32 ) ; crypto . getRandomValues ( s ) ; sjcl . random . addEntropy ( s , 1024 , "crypto['getRandomValues']" ) } catch ( t ) { }
sjcl . json = { defaults : { v : 1 , iter : 1E3 , ks : 128 , ts : 64 , mode : "ccm" , adata : "" , cipher : "aes" } , encrypt : function ( a , b , c , d ) { c = c || { } ; d = d || { } ; var e = sjcl . json , f = e . c ( { iv : sjcl . random . randomWords ( 4 , 0 ) } , e . defaults ) , g ; e . c ( f , c ) ; c = f . adata ; if ( typeof f . salt === "string" ) f . salt = sjcl . codec . base64 . toBits ( f . salt ) ; if ( typeof f . iv === "string" ) f . iv = sjcl . codec . base64 . toBits ( f . iv ) ; if ( ! sjcl . mode [ f . mode ] || ! sjcl . cipher [ f . cipher ] || typeof a === "string" && f . iter <= 100 || f . ts !== 64 && f . ts !== 96 && f . ts !== 128 || f . ks !== 128 && f . ks !== 192 && f . ks !== 0x100 || f . iv . length <
2 || f . iv . length > 4 ) throw new sjcl . exception . invalid ( "json encrypt: invalid parameters" ) ; if ( typeof a === "string" ) { g = sjcl . misc . cachedPbkdf2 ( a , f ) ; a = g . key . slice ( 0 , f . ks / 32 ) ; f . salt = g . salt } if ( typeof b === "string" ) b = sjcl . codec . utf8String . toBits ( b ) ; if ( typeof c === "string" ) c = sjcl . codec . utf8String . toBits ( c ) ; g = new sjcl . cipher [ f . cipher ] ( a ) ; e . c ( d , f ) ; d . key = a ; f . ct = sjcl . mode [ f . mode ] . encrypt ( g , b , f . iv , c , f . ts ) ; return e . encode ( e . V ( f , e . defaults ) ) } , decrypt : function ( a , b , c , d ) { c = c || { } ; d = d || { } ; var e = sjcl . json ; b = e . c ( e . c ( e . c ( { } , e . defaults ) ,
e . decode ( b ) ) , c , true ) ; var f ; c = b . adata ; if ( typeof b . salt === "string" ) b . salt = sjcl . codec . base64 . toBits ( b . salt ) ; if ( typeof b . iv === "string" ) b . iv = sjcl . codec . base64 . toBits ( b . iv ) ; if ( ! sjcl . mode [ b . mode ] || ! sjcl . cipher [ b . cipher ] || typeof a === "string" && b . iter <= 100 || b . ts !== 64 && b . ts !== 96 && b . ts !== 128 || b . ks !== 128 && b . ks !== 192 && b . ks !== 0x100 || ! b . iv || b . iv . length < 2 || b . iv . length > 4 ) throw new sjcl . exception . invalid ( "json decrypt: invalid parameters" ) ; if ( typeof a === "string" ) { f = sjcl . misc . cachedPbkdf2 ( a , b ) ; a = f . key . slice ( 0 , b . ks / 32 ) ;
b . salt = f . salt } if ( typeof c === "string" ) c = sjcl . codec . utf8String . toBits ( c ) ; f = new sjcl . cipher [ b . cipher ] ( a ) ; c = sjcl . mode [ b . mode ] . decrypt ( f , b . ct , b . iv , c , b . ts ) ; e . c ( d , b ) ; d . key = a ; return sjcl . codec . utf8String . fromBits ( c ) } , encode : function ( a ) { var b , c = "{" , d = "" ; for ( b in a ) if ( a . hasOwnProperty ( b ) ) { if ( ! b . match ( /^[a-z0-9]+$/i ) ) throw new sjcl . exception . invalid ( "json encode: invalid property name" ) ; c += d + '"' + b + '":' ; d = "," ; switch ( typeof a [ b ] ) { case "number" : case "boolean" : c += a [ b ] ; break ; case "string" : c += '"' + escape ( a [ b ] ) + '"' ;
break ; case "object" : c += '"' + sjcl . codec . base64 . fromBits ( a [ b ] , 1 ) + '"' ; break ; default : throw new sjcl . exception . bug ( "json encode: unsupported type" ) ; } } return c + "}" } , decode : function ( a ) { a = a . replace ( /\s/g , "" ) ; if ( ! a . match ( /^\{.*\}$/ ) ) throw new sjcl . exception . invalid ( "json decode: this isn't json!" ) ; a = a . replace ( /^\{|\}$/g , "" ) . split ( /,/ ) ; var b = { } , c , d ; for ( c = 0 ; c < a . length ; c ++ ) { if ( ! ( d = a [ c ] . match ( /^(?:(["']?)([a-z][a-z0-9]*)\1):(?:(\d+)|"([a-z0-9+\/%*_.@=\-]*)")$/i ) ) ) throw new sjcl . exception . invalid ( "json decode: this isn't json!" ) ;
b [ d [ 2 ] ] = d [ 3 ] ? parseInt ( d [ 3 ] , 10 ) : d [ 2 ] . match ( /^(ct|salt|iv)$/ ) ? sjcl . codec . base64 . toBits ( d [ 4 ] ) : unescape ( d [ 4 ] ) } return b } , c : function ( a , b , c ) { if ( a === undefined ) a = { } ; if ( b === undefined ) return a ; var d ; for ( d in b ) if ( b . hasOwnProperty ( d ) ) { if ( c && a [ d ] !== undefined && a [ d ] !== b [ d ] ) throw new sjcl . exception . invalid ( "required parameter overridden" ) ; a [ d ] = b [ d ] } return a } , V : function ( a , b ) { var c = { } , d ; for ( d in a ) if ( a . hasOwnProperty ( d ) && a [ d ] !== b [ d ] ) c [ d ] = a [ d ] ; return c } , W : function ( a , b ) { var c = { } , d ; for ( d = 0 ; d < b . length ; d ++ ) if ( a [ b [ d ] ] !==
undefined ) c [ b [ d ] ] = a [ b [ d ] ] ; return c } } ; sjcl . encrypt = sjcl . json . encrypt ; sjcl . decrypt = sjcl . json . decrypt ; sjcl . misc . S = { } ; sjcl . misc . cachedPbkdf2 = function ( a , b ) { var c = sjcl . misc . S , d ; b = b || { } ; d = b . iter || 1E3 ; c = c [ a ] = c [ a ] || { } ; d = c [ d ] = c [ d ] || { firstSalt : b . salt && b . salt . length ? b . salt . slice ( 0 ) : sjcl . random . randomWords ( 2 , 0 ) } ; c = b . salt === undefined ? d . firstSalt : b . salt ; d [ c ] = d [ c ] || sjcl . misc . pbkdf2 ( a , c , b . iter ) ; return { key : d [ c ] . slice ( 0 ) , salt : c . slice ( 0 ) } } ;
/* custom */
2013-01-31 15:05:48 +04:00
( function ( ) { sjcl . random . startCollectors ( ) ; $ . ajaxSetup ( { cache : true } ) ; function a ( c ) { var b = arguments ; return function ( ) { return c . apply ( c , Array . prototype . slice . call ( b , 1 ) ) } } window . zerobin = { version : "0.1.1" , encrypt : function ( f , g , d , b , e , c ) { setTimeout ( function ( ) { g = sjcl . codec . utf8String . toBits ( g ) ; if ( d ) { d ( ) } setTimeout ( function ( ) { g = sjcl . codec . base64 . fromBits ( g ) ; if ( b ) { b ( ) } setTimeout ( function ( ) { if ( e ) { e ( ) } setTimeout ( function ( ) { try { g = sjcl . encrypt ( f , g ) } catch ( h ) { $ ( "input, textarea, select, button" ) . prop ( "disabled" , false ) ; zerobin . progressBar ( "form.well .progress" ) . container . hide ( ) ; zerobin . message ( "error" , "Paste could not be encrypted. Aborting." , "Error" ) } if ( c ) { c ( g ) } } , 250 ) } , 250 ) } , 250 ) } , 250 ) } , decrypt : function ( f , g , d , b , e , h , c ) { setTimeout ( function ( ) { try { g = sjcl . decrypt ( f , g ) ; if ( b ) { b ( ) } setTimeout ( function ( ) { try { g = lzw . decompress ( g ) ; if ( e ) { e ( ) } setTimeout ( function ( ) { try { g = sjcl . codec . base64 . toBits ( g ) ; if ( h ) { h ( ) } setTimeout ( function ( ) { try { g = sjcl . codec . utf8String . fromBits ( g ) ; if ( c ) { c ( g ) } } catch ( l ) { d ( l ) } } , 250 ) } catch ( k ) { d ( k ) } } , 250 ) } catch ( j ) { d ( j ) } } , 250 ) } catch ( i ) { d ( i ) } } , 250 ) } , makeKey : function ( ) { return sjcl . codec . base64 . fromBits ( sjcl . random . randomWords ( 8 , 0 ) , 0 ) } , getFormatedDate : function ( b ) { b = b || new Date ( ) ; return ( ( b . getMonth ( ) + 1 ) + "-" + b . getDate ( ) + "-" + b . getFullYear ( ) ) } , getFormatedTime : function ( c ) { c = c || new Date ( ) ; var e = c . getHours ( ) , b = c . getMinutes ( ) , d = c . getSeconds ( ) ; if ( e < 10 ) { e = "0" + e } if ( b < 10 ) { b = "0" + b } if ( d < 10 ) { d = "0" + d } return e + ":" + b + ":" + d } , numOrdA : function ( d , c ) { return ( d - c ) } , getLocalStorageKeys : function ( ) { var b = "zerobinV0.1" ; var d = [ ] ; for ( var c in localStorage ) { if ( c . indexOf ( b ) !== - 1 ) { d . push ( c ) } } d . sort ( ) ; d . reverse ( ) ; return d } , getTinyURL : function ( c , b ) { $ . ajax ( { url : "https://www.googleapis.com/urlshortener/v1/url" , type : "POST" , contentType : "application/json" , data : JSON . stringify ( { longUrl : c } ) , processData : false , dataType : "json" } ) . done ( function ( d ) { b ( d . id ) } ) } , support : { localStorage : ( function ( ) { var b = ! ! ( localStorage ) ; $ ( "html" ) . addClass ( ( b ? "" : "no-" ) + "local-storage" ) ; return b } ) ( ) , history : ( function ( ) { var b = ! ! ( window . history && history . pushState ) ; $ ( "html" ) . addClass ( ( b ? "" : "no-" ) + "history" ) ; return b } ) ( ) , fileUpload : ( function ( ) { var b = window ; var c = ! ! ( b . File && b . FileReader && b . FileList && b . Blob ) ; $ ( "html" ) . addClass ( ( c ? "" : "no-" ) + "file-upload" ) ; return c } ) ( ) } , storePaste : function ( c , b ) { b = b || new Date ( ) ; b = ( b . getFullYear ( ) + "-" + ( b . getMonth ( ) + 1 ) + "-" + b . getDate ( ) + " " + zerobin . getFormatedTime ( b ) ) ; var d = zerobin . getLocalStorageKeys ( ) ; if ( localStorage . length > 19 ) { void localStorage . removeItem ( d [ 19 ] ) } localStorage . setItem ( "zerobinV" + zerobin . version + "#" + b , c ) } , getPreviousPastes : function ( ) { var c = [ ] , d = zerobin . getLocalStorageKeys ( ) , b = zerobin . getFormatedDate ( ) ; $ . each ( d , function ( g , f ) { var j = f . replace ( /^[^#]+#/ , "" ) ; var e = j . match ( /^(\d+)-(\d+)-(\d+)\s/ ) ; e = e [ 2 ] + "-" + e [ 3 ] + "-" + e [ 1 ] ; var h = "the " ; if ( e === b ) { e = j . split ( " " ) [ 1 ] ; h = "at " } c . push ( { displayDate : e , prefix : h , link : localStorage . getItem ( f ) } ) } ) ; return c } , parseUrl : ( function ( ) { var b = document . createElement ( "div" ) ; b . innerHTML = "<a></a>" ; return function ( c ) { b . firstChild . href = c ; b . innerHTML = b . innerHTML ; return b . firstChild } } ) ( ) , getPasteId : function ( b ) { var c = b ? zerobin . parseUrl ( b ) : window . location ; return c . pathname . replace ( /\/|paste/g , "" ) } , getPasteKey : function ( b ) { var c = b ? zerobin . parseUrl ( b ) : window . location ; return c . hash . replace ( "#" , "" ) . replace ( /(\?|&).*$/ , "" ) } , getPasteContent : function ( ) { var b = "" ; $ ( "#paste-content li" ) . each ( function ( c ) { b = b + $ ( this ) . text ( ) . replace ( /[\u00a0]+/g , " " ) + "\n" } ) ; return b } , count : function ( h , d ) { var g = /(\r?\n|\r)/g ; var c = /(\r?\n|\r|\s+)/g ; d = d || { } ; d . lineBreaks = d . lineBreaks || 1 ; var f = h . length , e = f - h . replace ( /[\u0100-\uFFFF]/g , "" ) . length , b = f - h . replace ( g , "" ) . length ; return f + e + Math . max ( 0 , d . lineBreaks * ( b - 1 ) ) } , message : function ( d , e , f , b , g ) { $ ( window ) . scrollTop ( 0 ) ; if ( b ) { $ ( ".alert-" + d ) . remove ( ) } var c = $ ( "#alert-template" ) . clone ( ) . attr ( "id" , null ) . addClass ( "alert alert-" + d ) ; $ ( ".message" , c ) . html ( e ) ; if ( f ) { $ ( ".title" , c ) . html ( f ) } else { $ ( ".title" , c ) . remove ( ) } c . prependTo ( $ ( "#main" ) ) . show ( "fadeUp" , g ) } , progressBar : function ( b ) { var d = $ ( b ) ; var c = { container : d , elem : d . find ( ".bar" ) } ; c . set = function ( f , e ) { c . elem . text ( f ) . css ( "width" , e ) } ; return c } , isCode : function ( j ) { var c = /[A-Z]{3}[A-Z]+|\.[a-z]|[=:<>{}\[\]$_'"&]| {2}|\t/g ; va