| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506 | 
							- // Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
 
- // This work is free. You can redistribute it and/or modify it
 
- // under the terms of the WTFPL, Version 2
 
- // For more information see LICENSE.txt or http://www.wtfpl.net/
 
- //
 
- // For more information, the home page:
 
- // http://pieroxy.net/blog/pages/lz-string/testing.html
 
- //
 
- // LZ-based compression algorithm, version 1.4.4
 
- var LZString = (function() {
 
- // private property
 
- var f = String.fromCharCode;
 
- var keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 
- var keyStrUriSafe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$";
 
- var baseReverseDic = {};
 
- function getBaseValue(alphabet, character) {
 
-   if (!baseReverseDic[alphabet]) {
 
-     baseReverseDic[alphabet] = {};
 
-     for (var i=0 ; i<alphabet.length ; i++) {
 
-       baseReverseDic[alphabet][alphabet.charAt(i)] = i;
 
-     }
 
-   }
 
-   return baseReverseDic[alphabet][character];
 
- }
 
- var LZString = {
 
-   compressToBase64 : function (input) {
 
-     if (input == null) return "";
 
-     var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});
 
-     switch (res.length % 4) { // To produce valid Base64
 
-     default: // When could this happen ?
 
-     case 0 : return res;
 
-     case 1 : return res+"===";
 
-     case 2 : return res+"==";
 
-     case 3 : return res+"=";
 
-     }
 
-   },
 
-   decompressFromBase64 : function (input) {
 
-     if (input == null) return "";
 
-     if (input == "") return null;
 
-     return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });
 
-   },
 
-   compressToUTF16 : function (input) {
 
-     if (input == null) return "";
 
-     return LZString._compress(input, 15, function(a){return f(a+32);}) + " ";
 
-   },
 
-   decompressFromUTF16: function (compressed) {
 
-     if (compressed == null) return "";
 
-     if (compressed == "") return null;
 
-     return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });
 
-   },
 
-   //compress into uint8array (UCS-2 big endian format)
 
-   compressToUint8Array: function (uncompressed) {
 
-     var compressed = LZString.compress(uncompressed);
 
-     var buf=new Uint8Array(compressed.length*2); // 2 bytes per character
 
-     for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {
 
-       var current_value = compressed.charCodeAt(i);
 
-       buf[i*2] = current_value >>> 8;
 
-       buf[i*2+1] = current_value % 256;
 
-     }
 
-     return buf;
 
-   },
 
-   //decompress from uint8array (UCS-2 big endian format)
 
-   decompressFromUint8Array:function (compressed) {
 
-     if (compressed===null || compressed===undefined){
 
-         return LZString.decompress(compressed);
 
-     } else {
 
-         var buf=new Array(compressed.length/2); // 2 bytes per character
 
-         for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {
 
-           buf[i]=compressed[i*2]*256+compressed[i*2+1];
 
-         }
 
-         var result = [];
 
-         buf.forEach(function (c) {
 
-           result.push(f(c));
 
-         });
 
-         return LZString.decompress(result.join(''));
 
-     }
 
-   },
 
-   //compress into a string that is already URI encoded
 
-   compressToEncodedURIComponent: function (input) {
 
-     if (input == null) return "";
 
-     return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});
 
-   },
 
-   //decompress from an output of compressToEncodedURIComponent
 
-   decompressFromEncodedURIComponent:function (input) {
 
-     if (input == null) return "";
 
-     if (input == "") return null;
 
-     input = input.replace(/ /g, "+");
 
-     return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });
 
-   },
 
-   compress: function (uncompressed) {
 
-     return LZString._compress(uncompressed, 16, function(a){return f(a);});
 
-   },
 
-   _compress: function (uncompressed, bitsPerChar, getCharFromInt) {
 
-     if (uncompressed == null) return "";
 
-     var i, value,
 
-         context_dictionary= {},
 
-         context_dictionaryToCreate= {},
 
-         context_c="",
 
-         context_wc="",
 
-         context_w="",
 
-         context_enlargeIn= 2, // Compensate for the first entry which should not count
 
-         context_dictSize= 3,
 
-         context_numBits= 2,
 
-         context_data=[],
 
-         context_data_val=0,
 
-         context_data_position=0,
 
-         ii;
 
-     for (ii = 0; ii < uncompressed.length; ii += 1) {
 
-       context_c = uncompressed.charAt(ii);
 
-       if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {
 
-         context_dictionary[context_c] = context_dictSize++;
 
-         context_dictionaryToCreate[context_c] = true;
 
-       }
 
-       context_wc = context_w + context_c;
 
-       if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {
 
-         context_w = context_wc;
 
-       } else {
 
-         if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {
 
-           if (context_w.charCodeAt(0)<256) {
 
-             for (i=0 ; i<context_numBits ; i++) {
 
-               context_data_val = (context_data_val << 1);
 
-               if (context_data_position == bitsPerChar-1) {
 
-                 context_data_position = 0;
 
-                 context_data.push(getCharFromInt(context_data_val));
 
-                 context_data_val = 0;
 
-               } else {
 
-                 context_data_position++;
 
-               }
 
-             }
 
-             value = context_w.charCodeAt(0);
 
-             for (i=0 ; i<8 ; i++) {
 
-               context_data_val = (context_data_val << 1) | (value&1);
 
-               if (context_data_position == bitsPerChar-1) {
 
-                 context_data_position = 0;
 
-                 context_data.push(getCharFromInt(context_data_val));
 
-                 context_data_val = 0;
 
-               } else {
 
-                 context_data_position++;
 
-               }
 
-               value = value >> 1;
 
-             }
 
-           } else {
 
-             value = 1;
 
-             for (i=0 ; i<context_numBits ; i++) {
 
-               context_data_val = (context_data_val << 1) | value;
 
-               if (context_data_position ==bitsPerChar-1) {
 
-                 context_data_position = 0;
 
-                 context_data.push(getCharFromInt(context_data_val));
 
-                 context_data_val = 0;
 
-               } else {
 
-                 context_data_position++;
 
-               }
 
-               value = 0;
 
-             }
 
-             value = context_w.charCodeAt(0);
 
-             for (i=0 ; i<16 ; i++) {
 
-               context_data_val = (context_data_val << 1) | (value&1);
 
-               if (context_data_position == bitsPerChar-1) {
 
-                 context_data_position = 0;
 
-                 context_data.push(getCharFromInt(context_data_val));
 
-                 context_data_val = 0;
 
-               } else {
 
-                 context_data_position++;
 
-               }
 
-               value = value >> 1;
 
-             }
 
-           }
 
-           context_enlargeIn--;
 
-           if (context_enlargeIn == 0) {
 
-             context_enlargeIn = Math.pow(2, context_numBits);
 
-             context_numBits++;
 
-           }
 
-           delete context_dictionaryToCreate[context_w];
 
-         } else {
 
-           value = context_dictionary[context_w];
 
-           for (i=0 ; i<context_numBits ; i++) {
 
-             context_data_val = (context_data_val << 1) | (value&1);
 
-             if (context_data_position == bitsPerChar-1) {
 
-               context_data_position = 0;
 
-               context_data.push(getCharFromInt(context_data_val));
 
-               context_data_val = 0;
 
-             } else {
 
-               context_data_position++;
 
-             }
 
-             value = value >> 1;
 
-           }
 
-         }
 
-         context_enlargeIn--;
 
-         if (context_enlargeIn == 0) {
 
-           context_enlargeIn = Math.pow(2, context_numBits);
 
-           context_numBits++;
 
-         }
 
-         // Add wc to the dictionary.
 
-         context_dictionary[context_wc] = context_dictSize++;
 
-         context_w = String(context_c);
 
-       }
 
-     }
 
-     // Output the code for w.
 
-     if (context_w !== "") {
 
-       if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {
 
-         if (context_w.charCodeAt(0)<256) {
 
-           for (i=0 ; i<context_numBits ; i++) {
 
-             context_data_val = (context_data_val << 1);
 
-             if (context_data_position == bitsPerChar-1) {
 
-               context_data_position = 0;
 
-               context_data.push(getCharFromInt(context_data_val));
 
-               context_data_val = 0;
 
-             } else {
 
-               context_data_position++;
 
-             }
 
-           }
 
-           value = context_w.charCodeAt(0);
 
-           for (i=0 ; i<8 ; i++) {
 
-             context_data_val = (context_data_val << 1) | (value&1);
 
-             if (context_data_position == bitsPerChar-1) {
 
-               context_data_position = 0;
 
-               context_data.push(getCharFromInt(context_data_val));
 
-               context_data_val = 0;
 
-             } else {
 
-               context_data_position++;
 
-             }
 
-             value = value >> 1;
 
-           }
 
-         } else {
 
-           value = 1;
 
-           for (i=0 ; i<context_numBits ; i++) {
 
-             context_data_val = (context_data_val << 1) | value;
 
-             if (context_data_position == bitsPerChar-1) {
 
-               context_data_position = 0;
 
-               context_data.push(getCharFromInt(context_data_val));
 
-               context_data_val = 0;
 
-             } else {
 
-               context_data_position++;
 
-             }
 
-             value = 0;
 
-           }
 
-           value = context_w.charCodeAt(0);
 
-           for (i=0 ; i<16 ; i++) {
 
-             context_data_val = (context_data_val << 1) | (value&1);
 
-             if (context_data_position == bitsPerChar-1) {
 
-               context_data_position = 0;
 
-               context_data.push(getCharFromInt(context_data_val));
 
-               context_data_val = 0;
 
-             } else {
 
-               context_data_position++;
 
-             }
 
-             value = value >> 1;
 
-           }
 
-         }
 
-         context_enlargeIn--;
 
-         if (context_enlargeIn == 0) {
 
-           context_enlargeIn = Math.pow(2, context_numBits);
 
-           context_numBits++;
 
-         }
 
-         delete context_dictionaryToCreate[context_w];
 
-       } else {
 
-         value = context_dictionary[context_w];
 
-         for (i=0 ; i<context_numBits ; i++) {
 
-           context_data_val = (context_data_val << 1) | (value&1);
 
-           if (context_data_position == bitsPerChar-1) {
 
-             context_data_position = 0;
 
-             context_data.push(getCharFromInt(context_data_val));
 
-             context_data_val = 0;
 
-           } else {
 
-             context_data_position++;
 
-           }
 
-           value = value >> 1;
 
-         }
 
-       }
 
-       context_enlargeIn--;
 
-       if (context_enlargeIn == 0) {
 
-         context_enlargeIn = Math.pow(2, context_numBits);
 
-         context_numBits++;
 
-       }
 
-     }
 
-     // Mark the end of the stream
 
-     value = 2;
 
-     for (i=0 ; i<context_numBits ; i++) {
 
-       context_data_val = (context_data_val << 1) | (value&1);
 
-       if (context_data_position == bitsPerChar-1) {
 
-         context_data_position = 0;
 
-         context_data.push(getCharFromInt(context_data_val));
 
-         context_data_val = 0;
 
-       } else {
 
-         context_data_position++;
 
-       }
 
-       value = value >> 1;
 
-     }
 
-     // Flush the last char
 
-     while (true) {
 
-       context_data_val = (context_data_val << 1);
 
-       if (context_data_position == bitsPerChar-1) {
 
-         context_data.push(getCharFromInt(context_data_val));
 
-         break;
 
-       }
 
-       else context_data_position++;
 
-     }
 
-     return context_data.join('');
 
-   },
 
-   decompress: function (compressed) {
 
-     if (compressed == null) return "";
 
-     if (compressed == "") return null;
 
-     return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });
 
-   },
 
-   _decompress: function (length, resetValue, getNextValue) {
 
-     var dictionary = [],
 
-         next,
 
-         enlargeIn = 4,
 
-         dictSize = 4,
 
-         numBits = 3,
 
-         entry = "",
 
-         result = [],
 
-         i,
 
-         w,
 
-         bits, resb, maxpower, power,
 
-         c,
 
-         data = {val:getNextValue(0), position:resetValue, index:1};
 
-     for (i = 0; i < 3; i += 1) {
 
-       dictionary[i] = i;
 
-     }
 
-     bits = 0;
 
-     maxpower = Math.pow(2,2);
 
-     power=1;
 
-     while (power!=maxpower) {
 
-       resb = data.val & data.position;
 
-       data.position >>= 1;
 
-       if (data.position == 0) {
 
-         data.position = resetValue;
 
-         data.val = getNextValue(data.index++);
 
-       }
 
-       bits |= (resb>0 ? 1 : 0) * power;
 
-       power <<= 1;
 
-     }
 
-     switch (next = bits) {
 
-       case 0:
 
-           bits = 0;
 
-           maxpower = Math.pow(2,8);
 
-           power=1;
 
-           while (power!=maxpower) {
 
-             resb = data.val & data.position;
 
-             data.position >>= 1;
 
-             if (data.position == 0) {
 
-               data.position = resetValue;
 
-               data.val = getNextValue(data.index++);
 
-             }
 
-             bits |= (resb>0 ? 1 : 0) * power;
 
-             power <<= 1;
 
-           }
 
-         c = f(bits);
 
-         break;
 
-       case 1:
 
-           bits = 0;
 
-           maxpower = Math.pow(2,16);
 
-           power=1;
 
-           while (power!=maxpower) {
 
-             resb = data.val & data.position;
 
-             data.position >>= 1;
 
-             if (data.position == 0) {
 
-               data.position = resetValue;
 
-               data.val = getNextValue(data.index++);
 
-             }
 
-             bits |= (resb>0 ? 1 : 0) * power;
 
-             power <<= 1;
 
-           }
 
-         c = f(bits);
 
-         break;
 
-       case 2:
 
-         return "";
 
-     }
 
-     dictionary[3] = c;
 
-     w = c;
 
-     result.push(c);
 
-     while (true) {
 
-       if (data.index > length) {
 
-         return "";
 
-       }
 
-       bits = 0;
 
-       maxpower = Math.pow(2,numBits);
 
-       power=1;
 
-       while (power!=maxpower) {
 
-         resb = data.val & data.position;
 
-         data.position >>= 1;
 
-         if (data.position == 0) {
 
-           data.position = resetValue;
 
-           data.val = getNextValue(data.index++);
 
-         }
 
-         bits |= (resb>0 ? 1 : 0) * power;
 
-         power <<= 1;
 
-       }
 
-       switch (c = bits) {
 
-         case 0:
 
-           bits = 0;
 
-           maxpower = Math.pow(2,8);
 
-           power=1;
 
-           while (power!=maxpower) {
 
-             resb = data.val & data.position;
 
-             data.position >>= 1;
 
-             if (data.position == 0) {
 
-               data.position = resetValue;
 
-               data.val = getNextValue(data.index++);
 
-             }
 
-             bits |= (resb>0 ? 1 : 0) * power;
 
-             power <<= 1;
 
-           }
 
-           dictionary[dictSize++] = f(bits);
 
-           c = dictSize-1;
 
-           enlargeIn--;
 
-           break;
 
-         case 1:
 
-           bits = 0;
 
-           maxpower = Math.pow(2,16);
 
-           power=1;
 
-           while (power!=maxpower) {
 
-             resb = data.val & data.position;
 
-             data.position >>= 1;
 
-             if (data.position == 0) {
 
-               data.position = resetValue;
 
-               data.val = getNextValue(data.index++);
 
-             }
 
-             bits |= (resb>0 ? 1 : 0) * power;
 
-             power <<= 1;
 
-           }
 
-           dictionary[dictSize++] = f(bits);
 
-           c = dictSize-1;
 
-           enlargeIn--;
 
-           break;
 
-         case 2:
 
-           return result.join('');
 
-       }
 
-       if (enlargeIn == 0) {
 
-         enlargeIn = Math.pow(2, numBits);
 
-         numBits++;
 
-       }
 
-       if (dictionary[c]) {
 
-         entry = dictionary[c];
 
-       } else {
 
-         if (c === dictSize) {
 
-           entry = w + w.charAt(0);
 
-         } else {
 
-           return null;
 
-         }
 
-       }
 
-       result.push(entry);
 
-       // Add w+entry[0] to the dictionary.
 
-       dictionary[dictSize++] = w + entry.charAt(0);
 
-       enlargeIn--;
 
-       w = entry;
 
-       if (enlargeIn == 0) {
 
-         enlargeIn = Math.pow(2, numBits);
 
-         numBits++;
 
-       }
 
-     }
 
-   }
 
- };
 
-   return LZString;
 
- })();
 
- if (typeof define === 'function' && define.amd) {
 
-   define(function () { return LZString; });
 
- } else if( typeof module !== 'undefined' && module != null ) {
 
-   module.exports = LZString
 
- } else if( typeof angular !== 'undefined' && angular != null ) {
 
-   angular.module('LZString', [])
 
-   .factory('LZString', function () {
 
-     return LZString;
 
-   });
 
- }
 
 
  |