if( btoa == undefined ) {
    var b64ec = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var btoa = function( str ) {
    var out = "", i = 0, len = str.length;
    while( i < len ) {
    var c1 = str.charCodeAt( i++ ) & 0xff;
    if( i == len ) {
    out += b64ec.charAt( c1 >> 2 )
    + b64ec.charAt( ( c1 & 0x3 ) << 4 )
    + "==";
    break;
    }
    var c2 = str.charCodeAt( i++ );
    if( i == len ) {
    out += b64ec.charAt( c1 >> 2 )
    + b64ec.charAt( ( ( c1 & 0x3 ) << 4 ) | ( ( c2 & 0xF0 ) >> 4 ) )
    + b64ec.charAt( ( c2 & 0xF ) << 2 )
    + "=";
    break;
    }
    var c3 = str.charCodeAt( i++ );
    out += b64ec.charAt( c1 >> 2 )
    + b64ec.charAt( ( ( c1 & 0x3 ) << 4 ) | ( ( c2 & 0xF0 ) >> 4 ) )
    + b64ec.charAt( ( ( c2 & 0xF ) << 2 ) | ( ( c3 & 0xC0 ) >> 6 ) )
    + b64ec.charAt( c3 & 0x3F );
    }
    return out;
    }
    }