_cookieReader() {
     let rawDocument = document;
     let lastCookies = {};
     let lastCookieString = '';
     let that = this;
     let cookieArray, cookie, i, index, name;
     let currentCookieString = rawDocument.cookie || '';
     if (currentCookieString !== lastCookieString) {
         lastCookieString = currentCookieString;
         cookieArray = lastCookieString.split('; ');
         lastCookies = {};
         for (i = 0; i < cookieArray.length; i++) {
             cookie = cookieArray[i];
             index = cookie.indexOf('=');
             if (index > 0) {
                 name = that._safeDecodeURIComponent(cookie.substring(0, index));
                 // the first value that is seen for a cookie is the most
                 // specific one.  values for the same cookie name that
                 // follow are for less specific paths.
                 if (isBlank(lastCookies[name])) {
                     lastCookies[name] = that._safeDecodeURIComponent(cookie.substring(index + 1));
                 }
             }
         }
     }
     return lastCookies;
 }
 _buildCookieString(name, value, options) {
     var cookiePath = '/';
     var path, expires;
     var defaultOpts = this._defaultOptions || new CookieOptions({ path: cookiePath });
     var opts = this._mergeOptions(defaultOpts, options);
     expires = opts.expires;
     if (isBlank(value)) {
         expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
         value = '';
     }
     if (isString(expires)) {
         expires = new Date(expires);
     }
     var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);
     str += opts.path ? ';path=' + opts.path : '';
     str += opts.domain ? ';domain=' + opts.domain : '';
     str += expires ? ';expires=' + expires.toUTCString() : '';
     str += opts.secure ? ';secure' : '';
     // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
     // - 300 cookies
     // - 20 cookies per unique domain
     // - 4096 bytes per cookie
     var cookieLength = str.length + 1;
     if (cookieLength > 4096) {
         console.log(`Cookie \'${name}\' possibly not set or overflowed because it was too large (${cookieLength} > 4096 bytes)!`);
     }
     return str;
 }
 LocaleParser.NumberRegExpFactory = function (defaultLocale, digits) {
     // Gets digits.
     var minInt = 1;
     var minFraction = 0;
     var maxFraction = 3;
     var re = lang_1.RegExpWrapper.create('^(\\d+)?\\.((\\d+)(\\-(\\d+))?)?$');
     if (lang_1.isPresent(digits)) {
         var parts = lang_1.RegExpWrapper.firstMatch(re, digits);
         if (lang_1.isBlank(parts)) {
             throw new exceptions_1.BaseException(digits + " is not a valid digit info for number");
         }
         if (lang_1.isPresent(parts[1])) {
             minInt = lang_1.NumberWrapper.parseIntAutoRadix(parts[1]);
         }
         if (lang_1.isPresent(parts[3])) {
             minFraction = lang_1.NumberWrapper.parseIntAutoRadix(parts[3]);
         }
         if (lang_1.isPresent(parts[5])) {
             maxFraction = lang_1.NumberWrapper.parseIntAutoRadix(parts[5]);
         }
     }
     // Converts numbers & signs to Unicode by default locale.
     var codes = new DecimalCode(defaultLocale);
     var minusSign = codes.minusSign;
     var zero = codes.numbers[0];
     var decimalSeparator = codes.decimalSeparator;
     var nine = codes.numbers[9];
     // Pattern for 1.2-2 digits: /^-?[0-9]{1,}\.[0-9]{2,2}$/
     // Unicode pattern = "^\u002d?[\u0030-\u0039]{1,}\\u002e[\u0030-\u0039]{2,2}$";
     var pattern;
     if (minFraction > 0 && maxFraction > 0) {
         pattern = "^"
             + minusSign
             + "?[" + zero + "-" + nine
             + "]{" + minInt + ",}\\"
             + decimalSeparator
             + "[" + zero + "-" + nine
             + "]{" + minFraction + "," + maxFraction
             + "}$";
     }
     else if (minFraction == 0 && maxFraction > 0) {
         // Decimal separator is optional.
         pattern = "^"
             + minusSign
             + "?[" + zero + "-" + nine
             + "]{" + minInt + ",}\\"
             + decimalSeparator
             + "?[" + zero + "-" + nine
             + "]{" + minFraction + "," + maxFraction
             + "}$";
     }
     else {
         // Integer number.
         pattern = "^"
             + minusSign
             + "?[" + zero + "-" + nine
             + "]{" + minInt + ",}$";
     }
     pattern = eval("'" + pattern + "'");
     var regExp = new RegExp(pattern);
     return regExp;
     // Wonderful, it works!
 };