(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else {
		var a = factory();
		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
	}
})(typeof self !== 'undefined' ? self : this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 796);
/******/ })
/************************************************************************/
/******/ ({

/***/ 0:
/***/ (function(module, exports) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
module.exports = function(useSourceMap) {
	var list = [];

	// return the list of modules as css string
	list.toString = function toString() {
		return this.map(function (item) {
			var content = cssWithMappingToString(item, useSourceMap);
			if(item[2]) {
				return "@media " + item[2] + "{" + content + "}";
			} else {
				return content;
			}
		}).join("");
	};

	// import a list of modules into the list
	list.i = function(modules, mediaQuery) {
		if(typeof modules === "string")
			modules = [[null, modules, ""]];
		var alreadyImportedModules = {};
		for(var i = 0; i < this.length; i++) {
			var id = this[i][0];
			if(typeof id === "number")
				alreadyImportedModules[id] = true;
		}
		for(i = 0; i < modules.length; i++) {
			var item = modules[i];
			// skip already imported module
			// this implementation is not 100% perfect for weird media query combinations
			//  when a module is imported multiple times with different media queries.
			//  I hope this will never occur (Hey this way we have smaller bundles)
			if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
				if(mediaQuery && !item[2]) {
					item[2] = mediaQuery;
				} else if(mediaQuery) {
					item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
				}
				list.push(item);
			}
		}
	};
	return list;
};

function cssWithMappingToString(item, useSourceMap) {
	var content = item[1] || '';
	var cssMapping = item[3];
	if (!cssMapping) {
		return content;
	}

	if (useSourceMap && typeof btoa === 'function') {
		var sourceMapping = toComment(cssMapping);
		var sourceURLs = cssMapping.sources.map(function (source) {
			return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
		});

		return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
	}

	return [content].join('\n');
}

// Adapted from convert-source-map (MIT)
function toComment(sourceMap) {
	// eslint-disable-next-line no-undef
	var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
	var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;

	return '/*# ' + data + ' */';
}


/***/ }),

/***/ 1:
/***/ (function(module, exports, __webpack_require__) {

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/

var stylesInDom = {};

var	memoize = function (fn) {
	var memo;

	return function () {
		if (typeof memo === "undefined") memo = fn.apply(this, arguments);
		return memo;
	};
};

var isOldIE = memoize(function () {
	// Test for IE <= 9 as proposed by Browserhacks
	// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
	// Tests for existence of standard globals is to allow style-loader
	// to operate correctly into non-standard environments
	// @see https://github.com/webpack-contrib/style-loader/issues/177
	return window && document && document.all && !window.atob;
});

var getElement = (function (fn) {
	var memo = {};

	return function(selector) {
		if (typeof memo[selector] === "undefined") {
			var styleTarget = fn.call(this, selector);
			// Special case to return head of iframe instead of iframe itself
			if (styleTarget instanceof window.HTMLIFrameElement) {
				try {
					// This will throw an exception if access to iframe is blocked
					// due to cross-origin restrictions
					styleTarget = styleTarget.contentDocument.head;
				} catch(e) {
					styleTarget = null;
				}
			}
			memo[selector] = styleTarget;
		}
		return memo[selector]
	};
})(function (target) {
	return document.querySelector(target)
});

var singleton = null;
var	singletonCounter = 0;
var	stylesInsertedAtTop = [];

var	fixUrls = __webpack_require__(2);

module.exports = function(list, options) {
	if (typeof DEBUG !== "undefined" && DEBUG) {
		if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
	}

	options = options || {};

	options.attrs = typeof options.attrs === "object" ? options.attrs : {};

	// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
	// tags it will allow on a page
	if (!options.singleton) options.singleton = isOldIE();

	// By default, add <style> tags to the <head> element
	if (!options.insertInto) options.insertInto = "head";

	// By default, add <style> tags to the bottom of the target
	if (!options.insertAt) options.insertAt = "bottom";

	var styles = listToStyles(list, options);

	addStylesToDom(styles, options);

	return function update (newList) {
		var mayRemove = [];

		for (var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];

			domStyle.refs--;
			mayRemove.push(domStyle);
		}

		if(newList) {
			var newStyles = listToStyles(newList, options);
			addStylesToDom(newStyles, options);
		}

		for (var i = 0; i < mayRemove.length; i++) {
			var domStyle = mayRemove[i];

			if(domStyle.refs === 0) {
				for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();

				delete stylesInDom[domStyle.id];
			}
		}
	};
};

function addStylesToDom (styles, options) {
	for (var i = 0; i < styles.length; i++) {
		var item = styles[i];
		var domStyle = stylesInDom[item.id];

		if(domStyle) {
			domStyle.refs++;

			for(var j = 0; j < domStyle.parts.length; j++) {
				domStyle.parts[j](item.parts[j]);
			}

			for(; j < item.parts.length; j++) {
				domStyle.parts.push(addStyle(item.parts[j], options));
			}
		} else {
			var parts = [];

			for(var j = 0; j < item.parts.length; j++) {
				parts.push(addStyle(item.parts[j], options));
			}

			stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
		}
	}
}

function listToStyles (list, options) {
	var styles = [];
	var newStyles = {};

	for (var i = 0; i < list.length; i++) {
		var item = list[i];
		var id = options.base ? item[0] + options.base : item[0];
		var css = item[1];
		var media = item[2];
		var sourceMap = item[3];
		var part = {css: css, media: media, sourceMap: sourceMap};

		if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});
		else newStyles[id].parts.push(part);
	}

	return styles;
}

function insertStyleElement (options, style) {
	var target = getElement(options.insertInto)

	if (!target) {
		throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
	}

	var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];

	if (options.insertAt === "top") {
		if (!lastStyleElementInsertedAtTop) {
			target.insertBefore(style, target.firstChild);
		} else if (lastStyleElementInsertedAtTop.nextSibling) {
			target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);
		} else {
			target.appendChild(style);
		}
		stylesInsertedAtTop.push(style);
	} else if (options.insertAt === "bottom") {
		target.appendChild(style);
	} else if (typeof options.insertAt === "object" && options.insertAt.before) {
		var nextSibling = getElement(options.insertInto + " " + options.insertAt.before);
		target.insertBefore(style, nextSibling);
	} else {
		throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");
	}
}

function removeStyleElement (style) {
	if (style.parentNode === null) return false;
	style.parentNode.removeChild(style);

	var idx = stylesInsertedAtTop.indexOf(style);
	if(idx >= 0) {
		stylesInsertedAtTop.splice(idx, 1);
	}
}

function createStyleElement (options) {
	var style = document.createElement("style");

	options.attrs.type = "text/css";

	addAttrs(style, options.attrs);
	insertStyleElement(options, style);

	return style;
}

function createLinkElement (options) {
	var link = document.createElement("link");

	options.attrs.type = "text/css";
	options.attrs.rel = "stylesheet";

	addAttrs(link, options.attrs);
	insertStyleElement(options, link);

	return link;
}

function addAttrs (el, attrs) {
	Object.keys(attrs).forEach(function (key) {
		el.setAttribute(key, attrs[key]);
	});
}

function addStyle (obj, options) {
	var style, update, remove, result;

	// If a transform function was defined, run it on the css
	if (options.transform && obj.css) {
	    result = options.transform(obj.css);

	    if (result) {
	    	// If transform returns a value, use that instead of the original css.
	    	// This allows running runtime transformations on the css.
	    	obj.css = result;
	    } else {
	    	// If the transform function returns a falsy value, don't add this css.
	    	// This allows conditional loading of css
	    	return function() {
	    		// noop
	    	};
	    }
	}

	if (options.singleton) {
		var styleIndex = singletonCounter++;

		style = singleton || (singleton = createStyleElement(options));

		update = applyToSingletonTag.bind(null, style, styleIndex, false);
		remove = applyToSingletonTag.bind(null, style, styleIndex, true);

	} else if (
		obj.sourceMap &&
		typeof URL === "function" &&
		typeof URL.createObjectURL === "function" &&
		typeof URL.revokeObjectURL === "function" &&
		typeof Blob === "function" &&
		typeof btoa === "function"
	) {
		style = createLinkElement(options);
		update = updateLink.bind(null, style, options);
		remove = function () {
			removeStyleElement(style);

			if(style.href) URL.revokeObjectURL(style.href);
		};
	} else {
		style = createStyleElement(options);
		update = applyToTag.bind(null, style);
		remove = function () {
			removeStyleElement(style);
		};
	}

	update(obj);

	return function updateStyle (newObj) {
		if (newObj) {
			if (
				newObj.css === obj.css &&
				newObj.media === obj.media &&
				newObj.sourceMap === obj.sourceMap
			) {
				return;
			}

			update(obj = newObj);
		} else {
			remove();
		}
	};
}

var replaceText = (function () {
	var textStore = [];

	return function (index, replacement) {
		textStore[index] = replacement;

		return textStore.filter(Boolean).join('\n');
	};
})();

function applyToSingletonTag (style, index, remove, obj) {
	var css = remove ? "" : obj.css;

	if (style.styleSheet) {
		style.styleSheet.cssText = replaceText(index, css);
	} else {
		var cssNode = document.createTextNode(css);
		var childNodes = style.childNodes;

		if (childNodes[index]) style.removeChild(childNodes[index]);

		if (childNodes.length) {
			style.insertBefore(cssNode, childNodes[index]);
		} else {
			style.appendChild(cssNode);
		}
	}
}

function applyToTag (style, obj) {
	var css = obj.css;
	var media = obj.media;

	if(media) {
		style.setAttribute("media", media)
	}

	if(style.styleSheet) {
		style.styleSheet.cssText = css;
	} else {
		while(style.firstChild) {
			style.removeChild(style.firstChild);
		}

		style.appendChild(document.createTextNode(css));
	}
}

function updateLink (link, options, obj) {
	var css = obj.css;
	var sourceMap = obj.sourceMap;

	/*
		If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
		and there is no publicPath defined then lets turn convertToAbsoluteUrls
		on by default.  Otherwise default to the convertToAbsoluteUrls option
		directly
	*/
	var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;

	if (options.convertToAbsoluteUrls || autoFixUrls) {
		css = fixUrls(css);
	}

	if (sourceMap) {
		// http://stackoverflow.com/a/26603875
		css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
	}

	var blob = new Blob([css], { type: "text/css" });

	var oldSrc = link.href;

	link.href = URL.createObjectURL(blob);

	if(oldSrc) URL.revokeObjectURL(oldSrc);
}


/***/ }),

/***/ 2:
/***/ (function(module, exports) {


/**
 * When source maps are enabled, `style-loader` uses a link element with a data-uri to
 * embed the css on the page. This breaks all relative urls because now they are relative to a
 * bundle instead of the current page.
 *
 * One solution is to only use full urls, but that may be impossible.
 *
 * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
 *
 * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
 *
 */

module.exports = function (css) {
  // get current location
  var location = typeof window !== "undefined" && window.location;

  if (!location) {
    throw new Error("fixUrls requires window.location");
  }

	// blank or null?
	if (!css || typeof css !== "string") {
	  return css;
  }

  var baseUrl = location.protocol + "//" + location.host;
  var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");

	// convert each url(...)
	/*
	This regular expression is just a way to recursively match brackets within
	a string.

	 /url\s*\(  = Match on the word "url" with any whitespace after it and then a parens
	   (  = Start a capturing group
	     (?:  = Start a non-capturing group
	         [^)(]  = Match anything that isn't a parentheses
	         |  = OR
	         \(  = Match a start parentheses
	             (?:  = Start another non-capturing groups
	                 [^)(]+  = Match anything that isn't a parentheses
	                 |  = OR
	                 \(  = Match a start parentheses
	                     [^)(]*  = Match anything that isn't a parentheses
	                 \)  = Match a end parentheses
	             )  = End Group
              *\) = Match anything and then a close parens
          )  = Close non-capturing group
          *  = Match anything
       )  = Close capturing group
	 \)  = Match a close parens

	 /gi  = Get all matches, not the first.  Be case insensitive.
	 */
	var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
		// strip quotes (if they exist)
		var unquotedOrigUrl = origUrl
			.trim()
			.replace(/^"(.*)"$/, function(o, $1){ return $1; })
			.replace(/^'(.*)'$/, function(o, $1){ return $1; });

		// already a full url? no change
		if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) {
		  return fullMatch;
		}

		// convert the url to a full url
		var newUrl;

		if (unquotedOrigUrl.indexOf("//") === 0) {
		  	//TODO: should we add protocol?
			newUrl = unquotedOrigUrl;
		} else if (unquotedOrigUrl.indexOf("/") === 0) {
			// path should be relative to the base url
			newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
		} else {
			// path should be relative to current directory
			newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
		}

		// send back the fixed url(...)
		return "url(" + JSON.stringify(newUrl) + ")";
	});

	// send back the fixed css
	return fixedCss;
};


/***/ }),

/***/ 796:
/***/ (function(module, exports, __webpack_require__) {

__webpack_require__(797);
__webpack_require__(798);
__webpack_require__(799);
__webpack_require__(800);
__webpack_require__(801);
__webpack_require__(802);
__webpack_require__(803);
__webpack_require__(804);
__webpack_require__(805);
__webpack_require__(806);
__webpack_require__(807);


/***/ }),

/***/ 797:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine*/

Ext.ns('Tine', 'Tine.Setup');

/**
 * local storage prefix for Setup
 */
Tine.Tinebase.tineInit.initAjax.lsPrefix = Tine.Tinebase.common.getUrl('path') + 'TineSetup';

/**
 * init ajax
 */
Tine.Tinebase.tineInit.initAjax = Tine.Tinebase.tineInit.initAjax.createInterceptor(function () {
    // setup calls can take quite a while
    Ext.Ajax.timeout = 900000; // 15 mins
    Tine.Tinebase.tineInit.requestUrl = 'setup.php';
    
    return true;
});

/**
 * init registry
 */
Tine.Tinebase.tineInit.initRegistry = Tine.Tinebase.tineInit.initRegistry.createInterceptor(function () {
    Tine.Tinebase.tineInit.clearRegistry();
    Tine.Tinebase.tineInit.getAllRegistryDataMethod = 'Setup.getAllRegistryData';
    Tine.Tinebase.tineInit.jsonKeyCookieId = 'TINE20SETUPJSONKEY';
    Tine.Tinebase.tineInit.stateful = false;
    
    return true;
});

Tine.Tinebase.tineInit.onRegistryLoad = Tine.Tinebase.tineInit.onRegistryLoad.createInterceptor(function () {
    // fake a setup user
    var setupUser = {
        accountId           : 1,
        accountDisplayName  : Tine.Setup.registry.get('currentAccount'),
        accountLastName     : 'Admin',
        accountFirstName    : 'Setup',
        accountFullName     : 'Setup Admin'
    };
    Tine.Tinebase.registry.add('currentAccount', setupUser);

    // enable setup app
    Tine.Tinebase.registry.add('userApplications', [{
        name:   'Setup',
        status: 'enabled'
    }]);
    Tine.Tinebase.MainScreenPanel.prototype.defaultAppName = 'Setup';
    Tine.Tinebase.MainScreenPanel.prototype.hideAppTabs = true;

    return true;
});

/**
 * render window
 */
Tine.Tinebase.tineInit.renderWindow = Tine.Tinebase.tineInit.renderWindow.createInterceptor(function () {
    var mainCardPanel = Tine.Tinebase.viewport.tineViewportMaincardpanel;
    
    // if a config file exists, the admin needs to login!        
    if (Tine.Setup.registry.get('configExists') && !Tine.Setup.registry.get('currentAccount')) {
        Tine.loginPanel = new Tine.Tinebase.LoginPanel({
            loginMethod: 'Setup.login',
            loginLogo: 'images/tine_logo_setup.png',
            scope: this,
            onLogin: function (response) {
                Tine.Tinebase.tineInit.initRegistry(true, function() {
                    Ext.MessageBox.hide();
                    Tine.Tinebase.tineInit.renderWindow();
                });
            }
        });
        mainCardPanel.layout.container.add(Tine.loginPanel);
        mainCardPanel.layout.setActiveItem(Tine.loginPanel.id);
        Tine.loginPanel.doLayout();
        
        return false;
    }
});



/***/ }),

/***/ 798:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 *
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 - 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */

Ext.ns('Tine', 'Tine.Setup', 'Tine.Setup.Model');

/**
 * @namespace   Tine.Setup.Model
 * @class       Tine.Setup.Model.Application
 * @extends     Tine.Tinebase.data.Record
 *
 * Application Record Definition
 */
Tine.Setup.Model.Application = Tine.Tinebase.data.Record.create([
    { name: 'id'              },
    { name: 'name'            },
    { name: 'status'          },
    { name: 'order'           },
    { name: 'version'         },
    { name: 'current_version' },
    { name: 'install_status'  },
    { name: 'depends'         }
], {
    appName: 'Setup',
    modelName: 'Application',
    idProperty: 'name',
    titleProperty: 'name',
    // ngettext('Application', 'Applications', n); gettext('Application');
    recordName: 'Application',
    recordsName: 'Applications'
});

/**
 * @namespace   Tine.Setup
 * @class       Tine.Setup.ApplicationBackend
 * @extends     Tine.Tinebase.data.RecordProxy
 *
 * default application backend
 */
Tine.Setup.ApplicationBackend = new Tine.Tinebase.data.RecordProxy({
    appName: 'Setup',
    modelName: 'Application',
    recordClass: Tine.Setup.Model.Application
});

/**
 * @namespace   Tine.Setup.Model
 * @class       Tine.Setup.Model.EnvCheck
 * @extends     Ext.data.Record
 *
 * env check Record Definition
 */
Tine.Setup.Model.EnvCheck = Ext.data.Record.create([
    {name: 'key'},
    {name: 'value'},
    {name: 'message'}
]);


/***/ }),

/***/ 799:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 - 2017 Metaways Infosystems GmbH (http://www.metaways.de)
 */
 
Ext.ns('Tine', 'Tine.Setup');

/**
 * @namespace   Tine.Setup
 * @class       Tine.Setup.TreePanel
 * @extends     Ext.tree.TreePanel
 * 
 * <p>Setup TreePanel</p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.TreePanel
 */
Tine.Setup.TreePanel = Ext.extend(Ext.tree.TreePanel, {
    
    /**
     * tree panel cfg
     * 
     * @private
     */
    border: false,
    rootVisible: false, 
    
    /**
     * @private
     */
    initComponent: function() {
        this.app = Tine.Tinebase.appMgr.get('Setup');
        
        var termsFailed   = !Tine.Setup.registry.get('acceptedTermsVersion') || Tine.Setup.registry.get('acceptedTermsVersion') < Tine.Setup.CurrentTermsVersion;
        var testsFailed   = !Tine.Setup.registry.get('setupChecks').success;
        var configMissing = !Tine.Setup.registry.get('configExists');
        var dbMissing     = !Tine.Setup.registry.get('checkDB');
        var setupRequired = Tine.Setup.registry.get('setupRequired');
        
        this.root = {
            id: '/',
            children: [{
                text: this.app.i18n._('Terms and Conditions'),
                iconCls: termsFailed ? 'setup_checks_fail' : 'setup_checks_success',
                id: 'TermsPanel',
                leaf: true
            }, {
                text: this.app.i18n._('Setup Checks'),
                iconCls: testsFailed ? 'setup_checks_fail' : 'setup_checks_success',
                disabled: termsFailed,
                id: 'EnvCheckGridPanel',
                leaf: true
            }, {
                text: this.app.i18n._('Config Manager'),
                iconCls: 'setup_config_manager',
                disabled: termsFailed || testsFailed,
                id: 'ConfigManagerPanel',
                leaf: true
            }, {
                text: this.app.i18n._('Authentication/Accounts'),
                iconCls: 'setup_authentication_manager',
                disabled: termsFailed || testsFailed || configMissing || dbMissing,
                id: 'AuthenticationPanel',
                leaf: true
            }, {
                text: this.app.i18n._('Email'),
                iconCls: 'action_composeEmail',
                disabled: termsFailed || testsFailed || configMissing || dbMissing || setupRequired,
                id: 'EmailPanel',
                leaf: true
            }, {
                text: this.app.i18n._('Application Manager'),
                iconCls: 'setup_application_manager',
                disabled: termsFailed || testsFailed || configMissing || dbMissing || setupRequired,
                id: 'ApplicationGridPanel',
                leaf: true
            }]
        };
        
        Tine.Setup.TreePanel.superclass.initComponent.call(this);
        
        this.on('click', this.onNodeClick, this);
    },
    
    /**
     * @private
     */
    onNodeClick: function(node) {
        if (! node.disabled) {
            this.app.getMainScreen().setActiveContentType(node.id);
        } else {
            return false;
        }
        
    },
    
    /**
     * @private
     */
    afterRender: function() {
        Tine.Setup.TreePanel.superclass.afterRender.call(this);

        // select last non disabled entry
        var activeType = '';
        var contentTypes = this.getRootNode().childNodes;
        for (var i=0; i<contentTypes.length; i++) {
            if(! contentTypes[i].disabled) {
                activeType = contentTypes[i];
            }
        }

        // NOTE: do not interfere with standard mainscreen rendering
        (function() {
            activeType.select();
            this.app.getMainScreen().setActiveContentType(activeType.id);

            Tine.Setup.registry.on('replace', this.applyRegistryState, this);
        }).defer(100, this);
    },
    
    /**
     * apply registry state
     */
    applyRegistryState: function() {
        var termsChecks  = Tine.Setup.registry.get('acceptedTermsVersion') >= Tine.Setup.CurrentTermsVersion;
        var setupChecks  = Tine.Setup.registry.get('setupChecks');
        var configExists = Tine.Setup.registry.get('configExists');
        var checkDB      = Tine.Setup.registry.get('checkDB');
        var setupRequired = Tine.Setup.registry.get('setupRequired');

        setupChecks = (setupChecks && setupChecks.success) ? setupChecks.success : false;

        this.setNodeIcon('TermsPanel', termsChecks);
        this.setNodeIcon('EnvCheckGridPanel', setupChecks);
        
        this.getNodeById('EnvCheckGridPanel')[termsChecks ? 'enable': 'disable']();
        this.getNodeById('ConfigManagerPanel')[termsChecks && setupChecks ? 'enable': 'disable']();
        this.getNodeById('AuthenticationPanel')[termsChecks && setupChecks && configExists && checkDB ? 'enable': 'disable']();
        this.getNodeById('ApplicationGridPanel')[termsChecks && setupChecks && configExists && checkDB && !setupRequired ? 'enable': 'disable']();
        this.getNodeById('EmailPanel')[termsChecks && setupChecks && configExists && checkDB && !setupRequired ? 'enable': 'disable']();
    },
    
    setNodeIcon: function (nodeId, success) {
        var node = this.getNodeById(nodeId);
        var iconCls = success ? 'setup_checks_success' : 'setup_checks_fail';
        if (node.rendered) {
            var iconEl = Ext.get(node.ui.iconNode);
            iconEl.removeClass('setup_checks_success');
            iconEl.removeClass('setup_checks_fail');
            iconEl.addClass(iconCls);
        } else {
            envNode.iconCls = iconCls;
        }
    }
});


/***/ }),

/***/ 800:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine', 'Tine.Setup');

/**
 * @namespace   Tine.Setup
 * @class       Tine.Setup.MainScreen
 * @extends     Tine.widgets.MainScreen
 * 
 * <p>MainScreen Definition</p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.MainScreen
 */
Tine.Setup.MainScreen = Ext.extend(Tine.widgets.MainScreen, {
    
    /**
     * active panel
     * 
     * @property activeContentType
     * @type String
     */
    activeContentType: 'EnvCheckGridPanel',

    /**
     * get content panel
     *
     * @return {Ext.Panel}
     */
    getCenterPanel: function() {
        if (! this[this.activeContentType]) {
            this[this.activeContentType] = new Tine.Setup[this.activeContentType]({
                app: this.app
            });
        }

        return this[this.activeContentType];
    },

    /**
     * get north panel for given activeContentType
     *
     * @param {String} activeContentType
     * @return {Ext.Panel}
     */
    getNorthPanel: function(activeContentType) {
        var panel = this.activeContentType;

        if (! this[panel + 'ActionToolbar']) {
            this[panel + 'ActionToolbar'] = this[panel].actionToolbar;
        }

        // hide and disable stuff in main menu
        Tine.Tinebase.MainScreen.getMainMenu().action_changePassword.setHidden(true);
        Tine.Tinebase.MainScreen.getMainMenu().action_showPreferencesDialog.setHidden(true);
        Tine.Tinebase.MainScreen.getMainMenu().action_editProfile.setDisabled(true);

        return this[panel + 'ActionToolbar'];
    },

    /**
     * get west panel for given activeContentType
     *
     * template method to be overridden by subclasses to modify default behaviour
     *
     * @return {Ext.Panel}
     */
    getWestPanel: function() {
        if (! this.setupTreePanel) {
            this.setupTreePanel = new Tine.Setup.TreePanel();
        }

        return this.setupTreePanel;
    }
});


/***/ }),

/***/ 801:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine', 'Tine.Setup');

Tine.Setup.CurrentTermsVersion = 1;

Tine.Setup.TermsPanel = Ext.extend(Ext.Panel, {
    border: false,
    layout: 'fit',
    version: 1,
    
    /**
     * @property actionToolbar
     * @type Ext.Toolbar
     */
    actionToolbar: null,
    
    getLicensePanel: function() {
        var acceptField = new Ext.form.Checkbox({
            name: 'acceptLicense',
            xtype: 'checkbox',
            boxLabel: this.app.i18n._('I have read the license agreement and accept it')
        });
        this.acceptFields.push(acceptField);
        
        return new Ext.Panel({
            autoScroll: true,
            layout: 'fit',
            title: this.app.i18n._('License Agreement'),
            bwrapCfg: {tag: 'pre'},
            autoLoad: {
                url: 'LICENSE',
                isUpload: true,
                method: 'GET',
                callback: function(el, s, response) {
                    el.update(Ext.util.Format.nl2br(response.responseText));
                }
            },
            bbar: [acceptField]
        });
    },
    
    getPrivacyPanel: function() {
        
        var acceptField = new Ext.form.Checkbox({
            name: 'acceptPrivacy',
            xtype: 'checkbox',
            boxLabel: this.app.i18n._('I have read the privacy agreement and accept it')
        });
        this.acceptFields.push(acceptField);
        
        return new Ext.Panel({
            autoScroll: true,
            layout: 'fit',
            title: this.app.i18n._('Privacy Agreement'),
            bwrapCfg: {tag: 'pre'},
            autoLoad: {
                url: 'PRIVACY',
                isUpload: true,
                method: 'GET',
                callback: function(el, s, response) {
                    el.update(Ext.util.Format.nl2br(response.responseText));
                }
            },
            bbar: [acceptField]
        });
    },
    
    initActions: function() {
        this.actionToolbar = new Ext.Toolbar({
            items: [{
                text: this.app.i18n._('Accept Terms and Conditions'),
                iconCls: 'setup_checks_success',
                handler: this.onAcceptConditions,
                scope: this
            }]
        });
    },
    
    initComponent: function() {
        this.initActions();
        
        this.acceptFields = [];
        this.items = [{
            layout: 'vbox',
            border: false,
            layoutConfig: {
                align:'stretch'
            },
            items: [{
                layout: 'fit',
                border: false,
                flex: 1,
                items: this.getLicensePanel()
            }, {
                layout: 'fit',
                border: false,
                flex: 1,
                items: this.getPrivacyPanel()
            }]
        }];
        
        this.supr().initComponent.call(this);
    },
    
    onAcceptConditions: function() {
        var isValid = true;
        
        Ext.each(this.acceptFields, function(field) {
            if (! field.getValue()) {
                field.wrap.setStyle('border-bottom', '1px solid red');
                isValid = false;
            } else {
                field.wrap.setStyle('border-bottom', 'none');
            }
        }, this);
        
        if (isValid) {
            Tine.Setup.registry.replace('acceptedTermsVersion', Tine.Setup.CurrentTermsVersion);
        } else {
            Tine.log.notice('Terms not accepted.');
        }
    }
});


/***/ }),

/***/ 802:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine', 'Tine.Setup');

/**
 * @namespace   Tine.Setup
 * @class       Tine.Setup.ApplicationGridPanel
 * @extends     Tine.widgets.grid.GridPanel
 * 
 * <p>Application Setup Grid Panel</p>
 * <p></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.ApplicationGridPanel
 */
Tine.Setup.ApplicationGridPanel = Ext.extend(Tine.widgets.grid.GridPanel, {

    /**
     * @private
     */
    recordClass: Tine.Setup.Model.Application,
    recordProxy: Tine.Setup.ApplicationBackend,
    stateful: false,
    evalGrants: false,
    defaultSortInfo: {field: 'name', dir: 'ASC'},
    gridConfig: {
        autoExpandColumn: 'name'
    },
    
    /**
     * @private
     */
    initComponent: function() {
                
        this.gridConfig.columns = this.getColumns();
        
        Tine.Setup.ApplicationGridPanel.superclass.initComponent.call(this);
        
        // activate local sort
        this.store.remoteSort = false;
        
        // add selection of updateable apps after store load
        this.store.on('load', this.selectApps, this);
    },
    
    /**
     * @private
     */
    getColumns: function() {
        return  [
            {id: 'name',            width: 350, sortable: true, dataIndex: 'name',            header: this.app.i18n._("Name")}, 
            {id: 'status',          width: 70,  sortable: true, dataIndex: 'status',          header: this.app.i18n._("Enabled"),       renderer: this.enabledRenderer}, 
            {id: 'order',           width: 50,  sortable: true, dataIndex: 'order',           header: this.app.i18n._("Order")},
            {id: 'version',         width: 85,  sortable: true, dataIndex: 'version',         header: this.app.i18n._("Installed Version")},
            {id: 'current_version', width: 85,  sortable: true, dataIndex: 'current_version', header: this.app.i18n._("Available Version")},
            {id: 'install_status',  width: 70,  sortable: true, dataIndex: 'install_status',  header: this.app.i18n._("Status"),        renderer: this.upgradeStatusRenderer.createDelegate(this)},
            {id: 'depends',         width: 150, sortable: true, dataIndex: 'depends',         header: this.app.i18n._("Depends on")}
        ];
    },
    
    /**
     * @private
     */
    initActions: function() {
        this.action_installApplications = new Ext.Action({
            text: this.app.i18n._('Install application'),
            handler: this.onAlterApplications,
            actionType: 'install',
            iconCls: 'setup_action_install',
            disabled: true,
            scope: this
        });
        
        this.action_uninstallApplications = new Ext.Action({
            text: this.app.i18n._('Uninstall application'),
            handler: this.onAlterApplications,
            actionType: 'uninstall',
            iconCls: 'setup_action_uninstall',
            disabled: true,
            scope: this
        });
        
        this.action_updateApplications = new Ext.Action({
            text: this.app.i18n._('Update application'),
            handler: this.onAlterApplications,
            actionType: 'update',
            iconCls: 'setup_action_update',
            disabled: true,
            scope: this
        });
        
        this.action_gotoLogin = new Ext.Action({
            text: String.format(this.app.i18n._('Go to {0} login'), Tine.title),
            handler: this.onGotoLogin,
            iconCls: 'action_login',
            scope: this
        });
        
        this.actions = [
            this.action_installApplications,
            this.action_uninstallApplications,
            this.action_updateApplications,
            '-',
            this.action_gotoLogin
        ];
        
        this.actionToolbar = new Ext.Toolbar({
            split: false,
            height: 26,
            items: this.actions
        });
        
        this.contextMenu = new Ext.menu.Menu({
            plugins: [{
                ptype: 'ux.itemregistry',
                key:   'Tinebase-MainContextMenu'
            }],
            items: this.actions
        });
    },
    
    /**
     * overwrite default - we do not have a filterpanel here
     */
    initFilterPanel: function() {},
    
    /**
     * @private
     */
    initGrid: function() {
        Tine.Setup.ApplicationGridPanel.superclass.initGrid.call(this);
        this.selectionModel.purgeListeners();
        
        this.selectionModel.on('selectionchange', this.onSelectionChange, this);
    },

    /**
     * @private
     */
    onSelectionChange: function(sm) {
        var apps = sm.getSelections();
        var disabled = sm.getCount() == 0;
        
        var nIn = disabled, nUp = disabled, nUn = disabled,        
            addressbook, admin, tinebase;
        
        for(var i=0; i<apps.length; i++) {
            var status = apps[i].get('install_status');
            nIn = nIn || status == 'uptodate' || status == 'updateable';
            nUp = nUp || status == 'uptodate' || status == 'uninstalled';
            nUn = nUn || status == 'uninstalled';
            if (apps[i].id == 'Addressbook') addressbook = true;
            else if (apps[i].id == 'Tinebase') tinebase = true;
            else if (apps[i].id == 'Admin') admin = true;
        }
        
        if(this.store.getById('Tinebase').get('install_status') == 'uninstalled') tinebase = false;
        if((addressbook || admin ) && !tinebase) nUn = true;
        
        this.action_installApplications.setDisabled(nIn);
        this.action_uninstallApplications.setDisabled(nUn);
        this.action_updateApplications.setDisabled(nUp);
    },
    
    /**
     * @private
     */
    onAlterApplications: function(btn, e) {

        if (btn.actionType == 'uninstall') {
            // get user confirmation before uninstall
            Ext.Msg.confirm(this.app.i18n._('uninstall'), this.app.i18n._('Do you really want to uninstall the application(s)?'), function(confirmbtn, value) {
                if (confirmbtn == 'yes') {
                    this.alterApps(btn.actionType);
                }
            }, this);
        } else {
            this.alterApps(btn.actionType);
        }
    },
    
    /**
     * goto tine 2.0 login screen
     * 
     * @param {Button} btn
     * @param {Event} e
     */
    onGotoLogin: function(btn, e) {
        window.location = window.location.href.replace(/setup(\.php)*/, '');
    },
    
    /**
     * select all installable or updateable apps
     * @private
     */
    selectApps: function() {
        
        var updateable = [];
        
        this.store.each(function(record) {
            if (record.get('install_status') == 'updateable') {
                updateable.push(record);
            }
        }, this);
        
        this.selectionModel.selectRecords(updateable);
    },
    
    /**
     * alter applications
     * 
     * @param {} type (uninstall/install/update)
     * @private
     */
    alterApps: function(type) {

        var appNames = [];
        var apps = this.selectionModel.getSelections();
        
        for(var i=0; i<apps.length; i++) {
            appNames.push(apps[i].get('name'));
        }

        this.sendAlterApplicationsRequest(type, appNames, null);
    },
    
    /**
     * @private
     */
    sendAlterApplicationsRequest: function(type, appNames, options) {
        var msg = this.app.i18n.n_('Updating Application "{0}".', 'Updating {0} Applications.', appNames.length);
        msg = String.format(msg, appNames.length == 1 ? appNames[0] : appNames.length ) + ' ' + this.app.i18n._('This may take a while');

        var longLoadMask = new Ext.LoadMask(this.grid.getEl(), {
            msg: msg,
            removeMask: true
        });
        longLoadMask.show();
        Ext.Ajax.request({
            scope: this,
            params: {
                method: 'Setup.' + type + 'Applications',
                applicationNames: appNames,
                options: options
            },
            success: function(response) {
                var regData = Ext.util.JSON.decode(response.responseText);
                // replace some registry data
                for (key in regData) {
                    if (key != 'status' && key != 'success') {
                        Tine.Setup.registry.replace(key, regData[key]);
                    }
                }
                this.store.load();
                longLoadMask.hide();
            },
            failure: function(exception) {
                longLoadMask.hide();
                
                var exception = Ext.util.JSON.decode(exception.responseText).data;
                
                switch (exception.code) {
                    //Dependency Exception
                    case 501:
                        Ext.MessageBox.show({
                            title: this.app.i18n._('Dependency Violation'), 
                            msg: exception.message,
                            buttons: Ext.Msg.OK,
                            icon: Ext.MessageBox.WARNING
                        });
                        this.store.load();
                        break;
                    case 901:
                        Ext.MessageBox.show({
                            title: this.app.i18n._('CLI Required'), 
                            msg: this.app.i18n._(exception.message),
                            buttons: Ext.Msg.OK,
                            icon: Ext.MessageBox.ERROR
                        });
                        break;
                    default:
                        Tine.Tinebase.ExceptionHandler.handleRequestException(exception);
                }
            }
        });
    },
    
    /**
     * @private
     */
    enabledRenderer: function(value) {
        return Tine.Tinebase.common.booleanRenderer(value == 'enabled');
    },
    
    /**
     * @private
     */
    upgradeStatusRenderer: function(value) {
        return this.app.i18n._hidden(value);
    }
});


/***/ }),

/***/ 803:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2011 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */
 
Ext.ns('Tine', 'Tine.Setup');

/**
 * Environment Check Grid Panel
 * 
 * @namespace   Tine.Setup
 * @class       Tine.Setup.EnvCheckGridPanel
 * @extends     Ext.Panel
 * 
 * <p>Environment Check Grid Panel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.EnvCheckGridPanel
 */
 Tine.Setup.EnvCheckGridPanel = Ext.extend(Ext.Panel, {
    
    /**
     * @property actionToolbar
     * @type Ext.Toolbar
     */
    actionToolbar: null,
    
    /**
     * @property contextMenu
     * @type Ext.Menu
     */
    contextMenu: null,
    
    /**
     * @private
     */
    layout: 'border',
    border: false,
    
    /**
     * 
     * @cfg grid config 
     */
    gridConfig: {
        autoExpandColumn: 'key'
    },
    
    /**
     * init component
     */
    initComponent: function() {
        
        this.gridConfig.columns = this.getColumns();
        
        this.initActions();
        this.initStore();
        this.initGrid();
        this.initLayout();

        Tine.Setup.EnvCheckGridPanel.superclass.initComponent.call(this);
    },
    
    /**
     * init store
     * @private
     */
    initStore: function() {
        this.store = new Ext.data.JsonStore({
            fields: Tine.Setup.Model.EnvCheck,
            mode: 'local',
            id: 'key',
            remoteSort: false
        });
        
        this.store.on('beforeload', function() {
            if (! this.loadMask) {
                this.loadMask = new Ext.LoadMask(this.el, {msg: this.app.i18n._("Performing Environment Checks...")});
            }
            
            this.loadMask.show();
            
            Ext.Ajax.request({
                params: {
                    method: 'Setup.envCheck'
                },
                scope: this,
                success: function(response) {
                    var data = Ext.util.JSON.decode(response.responseText);
                    Tine.Setup.registry.replace('setupChecks', data);
                    
                    this.store.loadData(data.results);
                    this.loadMask.hide();
                }
            })
            
            return false;
        }, this);
        
        var checkData = Tine.Setup.registry.get('setupChecks').results;
        this.store.loadData(checkData);
    },

    /**
     * init ext grid panel
     * @private
     */
    initGrid: function() {
        // init sel model
        this.selectionModel = new Ext.grid.RowSelectionModel({
            store: this.store
        });
        
        // init view
        var view =  new Ext.grid.GridView({
            autoFill: true,
            forceFit:true,
            ignoreAdd: true
            //emptyText: String.format(i18n._("There could not be found any {0}. Please try to change your filter-criteria, view-options or the {1} you search in."), this.i18nRecordsName, this.i18nContainersName),
            /*
            onLoad: Ext.emptyFn,
            listeners: {
                beforerefresh: function(v) {
                    v.scrollTop = v.scroller.dom.scrollTop;
                },
                refresh: function(v) {
                    // on paging-refreshes (prev/last...) we don't preserv the scroller state
                    if (v.isPagingRefresh) {
                        v.scrollToTop();
                        v.isPagingRefresh = false;
                    } else {
                        v.scroller.dom.scrollTop = v.scrollTop;
                    }
                }
            }
            */
        });
        
        this.grid = new Ext.grid.GridPanel(Ext.applyIf(this.gridConfig, {
            border: false,
            store: this.store,
            sm: this.selectionModel,
            view: view
        }));
    },
    
    getColumns: function() {
        return  [
            {id: 'key',   width: 150, sortable: true, dataIndex: 'key',   header: this.app.i18n._("Check")}, 
            {id: 'value', width: 50, sortable: true, dataIndex: 'value', header: this.app.i18n._("Result"), renderer: this.resultRenderer},
            {id: 'message', width: 600, sortable: true, dataIndex: 'message', header: this.app.i18n._("Error"), renderer: this.messageRenderer}
        ];
    },

    resultRenderer: function(value) {
        var icon = (value) ? 'images/oxygen/16x16/actions/dialog-apply.png' : 'images/oxygen/16x16/actions/dialog-cancel.png';
        return '<img class="TasksMainGridStatus" src="' + icon + '">';
    },
    
    messageRenderer: function(value) {
        // overwrite the default renderer to show links correctly
        return value;
    },
    
    initActions: function() {
        // @todo add re-run checks here
        
        this.action_reCheck = new Ext.Action({
            text: this.app.i18n._('Run setup tests'),
            handler: function() {
                this.store.load({});
            },
            iconCls: 'x-tbar-loading',
            scope: this
        });
        
        this.action_ignoreTests = new Ext.Action({
            text: this.app.i18n._('Ignore setup tests'),
            // we are not ready for this button yet:
            //    setup only works with mysql version check ok
            disabled: true,
            iconCls: 'setup_checks_success',
            scope: this,
            handler: function() {
                var checks = Tine.Setup.registry.get('setupChecks');
                checks.success = true;
                Tine.Setup.registry.replace('setupChecks', checks);
                Tine.Setup.registry.replace('checkDB', true);
            }
        });
        /*
        this.action_installApplications = new Ext.Action({
            text: this.app.i18n._('Install application'),
            handler: this.onAlterApplications,
            actionType: 'install',
            iconCls: 'setup_action_install',
            disabled: true,
            scope: this
        });
        
        this.actions = [
            this.action_installApplications,
        ];
        */
        
        this.actionToolbar = new Ext.Toolbar({
            items: [
                this.action_reCheck,
                this.action_ignoreTests
            ]
        });
    },
    
    /**
     * @private
     * 
     * NOTE: Order of items matters! Ext.Layout.Border.SplitRegion.layout() does not
     *       fence the rendering correctly, as such it's impotant, so have the ftb
     *       defined after all other layout items
     */
    initLayout: function() {
        this.items = [{
            region: 'center',
            xtype: 'panel',
            layout: 'fit',
            border: false,
            items: this.grid
        }];
    }
});


/***/ }),

/***/ 804:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine*/

Ext.ns('Tine', 'Tine.Setup');

/**
 * Setup Configuration Manager
 * 
 * @namespace   Tine.Setup
 * @class       Tine.Setup.ConfigManagerPanel
 * @extends     Tine.Tinebase.widgets.form.ConfigPanel
 * 
 * <p>Configuration Panel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.ConfigManagerPanel
 */
Tine.Setup.ConfigManagerPanel = Ext.extend(Tine.Tinebase.widgets.form.ConfigPanel, {

    /**
     * @property idPrefix DOM Id prefix
     * @type String
     */
    idPrefix: null,
    
    /**
     * @private
     * panel cfg
     */
    saveMethod: 'Setup.saveConfig',
    registryKey: 'configData',
    defaults: {
        xtype: 'fieldset',
        autoHeight: 'auto',
        defaults: {width: 300},
        defaultType: 'textfield'
    },
    
    /**
     * session backend DOM Id prefix
     * 
     * @property sessionBackendIdPrefix
     * @type String
     */
    sessionBackendIdPrefix: null,
    
    /**
     * @private
     * field index counter
     */
    tabIndexCounter: 1,
    
    /**
     * @private
     */
    initComponent: function () {
        this.idPrefix                  = Ext.id();
        this.sessionBackendIdPrefix    = this.idPrefix + '-sessionBackend-';
        this.cacheBackendIdPrefix    = this.idPrefix + '-cacheBackend-';
        this.queueBackendIdPrefix    = this.idPrefix + '-queueBackend-';

        Tine.Setup.ConfigManagerPanel.superclass.initComponent.call(this);
    },
    
    /**
     * Change session card layout depending on selected combo box entry
     */
    onChangeSessionBackend: function () {
        this.changeCard(this.sessionBackendCombo, this.sessionBackendIdPrefix);
    },

    /**
     * Change cache card layout depending on selected combo box entry
     */
    onChangeCacheBackend: function () {
        this.changeCard(this.cacheBackendCombo, this.cacheBackendIdPrefix);
    },
    
    /**
     * Change queue card layout depending on selected combo box entry
     */
    onChangeQueueBackend: function () {
        this.changeCard(this.queueBackendCombo, this.queueBackendIdPrefix);
    },
    
    /**
     * Change default ports when database adapter gets changed
     */
    onChangeSqlBackend: function () {
        // @todo change default port
    },
    
    /**
     * @private
     */
    onRender: function (ct, position) {
        Tine.Setup.EmailPanel.superclass.onRender.call(this, ct, position);
        
        this.onChangeSessionBackend.defer(250, this);
    },
    
    /**
     * get tab index for field
     * 
     * @return {Integer}
     */
    getTabIndex: function () {
        return this.tabIndexCounter++;
    },
    
    /**
     * returns config manager form
     * 
     * @private
     * @return {Array} items
     */
    getFormItems: function () {
        // common config for all combos in this setup
        var commonComboConfig = {
            xtype: 'combo',
            listWidth: 300,
            mode: 'local',
            forceSelection: true,
            allowEmpty: false,
            triggerAction: 'all',
            editable: false,
            tabIndex: this.getTabIndex
        };
        
        this.sessionBackendCombo = new Ext.form.ComboBox(Ext.applyIf({
            name: 'session_backend',
            fieldLabel: this.app.i18n._('Backend'),
            value: 'File',
            store: [['File', this.app.i18n._('File')], ['Redis','Redis']],
            listeners: {
                scope: this,
                change: this.onChangeSessionBackend,
                select: this.onChangeSessionBackend
            }
        }, commonComboConfig));

        this.cacheBackendCombo = new Ext.form.ComboBox(Ext.applyIf({
            name: 'caching_backend',
            fieldLabel: this.app.i18n._('Backend'),
            value: 'File',
            store: [['File', this.app.i18n._('File')], ['Redis','Redis'], ['Memcached', 'Memcached']],
            listeners: {
                scope: this,
                change: this.onChangeCacheBackend,
                select: this.onChangeCacheBackend
            }
        }, commonComboConfig));

        this.queueBackendCombo = new Ext.form.ComboBox(Ext.applyIf({
            name: 'actionqueue_backend',
            fieldLabel: this.app.i18n._('Backend'),
            value: 'Redis',
            store: [['Redis','Redis']],
            listeners: {
                scope: this,
                change: this.onChangeQueueBackend,
                select: this.onChangeQueueBackend
            }
        }, commonComboConfig));
        
        this.sqlBackendCombo = new Ext.form.ComboBox(Ext.applyIf({
            name: 'database_adapter',
            fieldLabel: this.app.i18n._('Backend'),
            value: 'pdo_mysql',
            store: [
                ['pdo_mysql', 'MySQL']
            ],
            listeners: {
                scope: this,
                change: this.onChangeSqlBackend,
                select: this.onChangeSqlBackend
            }
        }, commonComboConfig));
        
        return [{
            title: this.app.i18n._('Setup Authentication'),
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'setupuser_username',
                fieldLabel: this.app.i18n._('Username'),
                allowBlank: false,
                listeners: {
                    afterrender: function (field) {
                        field.focus(true, 500);
                    }
                }
            }, {
                name: 'setupuser_password',
                fieldLabel: this.app.i18n._('Password'),
                inputType: 'password',
                allowBlank: false
            }] 
        }, {
            title: this.app.i18n._('Database'),
            id: 'setup-database-group',
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [ 
                this.sqlBackendCombo, 
                {
                    name: 'database_host',
                    fieldLabel: this.app.i18n._('Hostname'),
                    allowBlank: false
                }, {
                    xtype: 'numberfield',
                    name: 'database_port',
                    fieldLabel: this.app.i18n._('Port')
                }, {
                    name: 'database_dbname',
                    fieldLabel: this.app.i18n._('Database'),
                    allowBlank: false
                }, {
                    name: 'database_username',
                    fieldLabel: this.app.i18n._('User'),
                    allowBlank: false
                }, {
                    name: 'database_password',
                    fieldLabel: this.app.i18n._('Password'),
                    inputType: 'password'
                }, {
                    name: 'database_tableprefix',
                    fieldLabel: this.app.i18n._('Prefix')
                }
            ]
        }, {
            title: this.app.i18n._('Logging'),
            id: 'setup-logger-group',
            checkboxToggle: true,
            collapsed: true,
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'logger_filename',
                fieldLabel: this.app.i18n._('Filename')
            }, Ext.applyIf({
                name: 'logger_priority',
                fieldLabel: this.app.i18n._('Priority'),
                store: [
                    [0, 'Emergency (0)'],
                    [1, 'Alert (1)'],
                    [2, 'Critical (2)'],
                    [3, 'Error (3)'],
                    [4, 'Warning (4)'],
                    [5, 'Notice (5)'],
                    [6, 'Informational (6)'],
                    [7, 'Debug (7)']
                ]
            }, commonComboConfig)]
        }, {
            title: this.app.i18n._('Caching'),
            id: 'setup-caching-group',
            checkboxToggle: true,
            collapsed: true,
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [ {
                xtype: 'numberfield',
                name: 'caching_lifetime',
                fieldLabel: this.app.i18n._('Lifetime (seconds)'),
                minValue: 0,
                maxValue: 3600
            }, this.cacheBackendCombo, 
            {
                id: this.cacheBackendIdPrefix + 'CardLayout',
                xtype: 'panel',
                layout: 'card',
                activeItem: this.cacheBackendIdPrefix + 'File',
                border: false,
                width: '100%',
                defaults: {border: false},
                items: [{
                    id: this.cacheBackendIdPrefix + 'File',
                    layout: 'form',
                    autoHeight: 'auto',
                    defaults: {
                        width: 300,
                        xtype: 'textfield',
                        tabIndex: this.getTabIndex
                    },
                    items: [{
                        name: 'caching_path',
                        fieldLabel: this.app.i18n._('Path')
                    }]
                }, {
                    id: this.cacheBackendIdPrefix + 'Redis',
                    layout: 'form',
                    autoHeight: 'auto',
                    defaults: {
                        width: 300,
                        xtype: 'textfield',
                        tabIndex: this.getTabIndex
                    },
                    items: [{
                        name: 'caching_redis_host',
                        fieldLabel: this.app.i18n._('Hostname'),
                        value: 'localhost'
                    }, {
                        name: 'caching_redis_port',
                        fieldLabel: this.app.i18n._('Port'),
                        xtype: 'numberfield',
                        minValue: 0,
                        value: 6379
                    }]
                }, {
                    id: this.cacheBackendIdPrefix + 'Memcached',
                    layout: 'form',
                    autoHeight: 'auto',
                    defaults: {
                        width: 300,
                        xtype: 'textfield',
                        tabIndex: this.getTabIndex
                    },
                    items: [{
                        name: 'caching_memcached_host',
                        fieldLabel: this.app.i18n._('Hostname'),
                        value: 'localhost'
                    }, {
                        name: 'caching_memcached_port',
                        fieldLabel: this.app.i18n._('Port'),
                        xtype: 'numberfield',
                        minValue: 0,
                        value: 11211
                    }]
                }]
            }]
        }, {
            title: this.app.i18n._('Queue'),
            id: 'setup-actionqueue-group',
            checkboxToggle: true,
            collapsed: true,
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [this.queueBackendCombo, 
            {
                id: this.queueBackendIdPrefix + 'CardLayout',
                xtype: 'panel',
                layout: 'card',
                activeItem: this.queueBackendIdPrefix + 'Redis',
                border: false,
                width: '100%',
                defaults: {border: false},
                items: [{
                    // redis config options
                    id: this.queueBackendIdPrefix + 'Redis',
                    layout: 'form',
                    autoHeight: 'auto',
                    defaults: {
                        width: 300,
                        xtype: 'textfield',
                        tabIndex: this.getTabIndex
                    },
                    items: [{
                        name: 'actionqueue_host',
                        fieldLabel: this.app.i18n._('Hostname'),
                        value: 'localhost'
                    }, {
                        name: 'actionqueue_port',
                        fieldLabel: this.app.i18n._('Port'),
                        xtype: 'numberfield',
                        minValue: 0,
                        value: 6379
                    }]
                }]
            }]
        }, {
            title: this.app.i18n._('Session'),
            id: 'setup-session-group',
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'session_lifetime',
                fieldLabel: this.app.i18n._('Lifetime (seconds)'),
                xtype: 'numberfield',
                value: 86400, 
                minValue: 0
            }, this.sessionBackendCombo, 
            {
                id: this.sessionBackendIdPrefix + 'CardLayout',
                xtype: 'panel',
                layout: 'card',
                activeItem: this.sessionBackendIdPrefix + 'File',
                border: false,
                width: '100%',
                defaults: {border: false},
                items: [{
                    // file config options
                    id: this.sessionBackendIdPrefix + 'File',
                    layout: 'form',
                    autoHeight: 'auto',
                    defaults: {
                        width: 300,
                        xtype: 'textfield',
                        tabIndex: this.getTabIndex
                    },
                    items: [{
                        name: 'session_path',
                        fieldLabel: this.app.i18n._('Path')
                    }]
                }, {
                    // redis config options
                    id: this.sessionBackendIdPrefix + 'Redis',
                    layout: 'form',
                    autoHeight: 'auto',
                    defaults: {
                        width: 300,
                        xtype: 'textfield',
                        tabIndex: this.getTabIndex
                    },
                    items: [{
                        name: 'session_host',
                        fieldLabel: this.app.i18n._('Hostname'),
                        value: 'localhost'
                    }, {
                        name: 'session_port',
                        fieldLabel: this.app.i18n._('Port'),
                        xtype: 'numberfield',
                        minValue: 0,
                        value: 6379
                    }]
                }]
            }]
        }, {
            title: this.app.i18n._('Temporary files'),
            id: 'setup-tmpDir-group',
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'tmpdir',
                fieldLabel: this.app.i18n._('Temporary Files Path'),
                value: Tine.Setup.registry.get(this.registryKey).tmpdir
            }]
        }, {
            // TODO this should be not saved in the config.inc.php
            title: this.app.i18n._('Filestore directory'),
            id: 'setup-filesDir-group',
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'filesdir',
                fieldLabel: this.app.i18n._('Filestore Path'),
                value: Tine.Setup.registry.get(this.registryKey)['filesdir']
            }]
        }, {
            // TODO move map panel config to common config panel -> it should not be saved in config.inc.php
            title: this.app.i18n._('Addressbook Map panel'),
            defaults: {
                width: 300,
                tabIndex: this.getTabIndex
            },
            items: [
                Ext.applyIf({
                    name: 'mapPanel',
                    fieldLabel: this.app.i18n._('Map panel'),
                    value: Tine.Setup.registry.get(this.registryKey)['mapPanel'],
                    store: [[0, this.app.i18n._('disabled')], [1,this.app.i18n._('enabled')]]
                }, commonComboConfig)
           ] 
        }];
    },
    
    /**
     * applies registry state to this cmp
     */
    applyRegistryState: function () {
        this.action_saveConfig.setDisabled(! Tine.Setup.registry.get('configWritable'));
        if (! Tine.Setup.registry.get('configWritable')) {
            this.action_saveConfig.setText(this.app.i18n._('Config file is not writable'));
        } else {
            this.action_saveConfig.setText(this.app.i18n._('Save config'));
        }
        
        Ext.getCmp('setup-database-group').setIconClass(Tine.Setup.registry.get('checkDB') ? 'setup_checks_success' : 'setup_checks_fail');
        Ext.getCmp('setup-logger-group').setIconClass(Tine.Setup.registry.get('checkLogger') ? 'setup_checks_success' : 'setup_checks_fail');
        Ext.getCmp('setup-caching-group').setIconClass(Tine.Setup.registry.get('checkCaching') ? 'setup_checks_success' : 'setup_checks_fail');
        Ext.getCmp('setup-actionqueue-group').setIconClass(Tine.Setup.registry.get('checkQueue') ? 'setup_checks_success' : 'setup_checks_fail');
        Ext.getCmp('setup-tmpDir-group').setIconClass(Tine.Setup.registry.get('checkTmpDir') ? 'setup_checks_success' : 'setup_checks_fail');
        Ext.getCmp('setup-session-group').setIconClass(Tine.Setup.registry.get('checkSession') ? 'setup_checks_success' : 'setup_checks_fail');
        Ext.getCmp('setup-filesDir-group').setIconClass(Tine.Setup.registry.get('checkFilesDir') ? 'setup_checks_success' : 'setup_checks_fail');
    },
    
    /**
     * @private
     */
    initActions: function () {
        this.action_downloadConfig = new Ext.Action({
            text: this.app.i18n._('Download config file'),
            iconCls: 'setup_action_download_config',
            scope: this,
            handler: this.onDownloadConfig
            //disabled: true
        });
        
        this.actionToolbarItems = [this.action_downloadConfig];
        
        Tine.Setup.ConfigManagerPanel.superclass.initActions.apply(this, arguments);
    },
    
    onDownloadConfig: function() {
        if (this.isValid()) {
            var configData = this.form2config();
            
            var downloader = new Ext.ux.file.Download({
                url: Tine.Tinebase.tineInit.requestUrl,
                params: {
                    method: 'Setup.downloadConfig',
                    data: Ext.encode(configData)
                }
            });
            downloader.start();
        } else {
            this.alertInvalidData();
        }
    },
    
    isValid: function () {
        var form = this.getForm(),
            result = form.isValid(),
            maxPrefixLength = 10;
        
        // check prefix length
        if (form.findField('database_tableprefix') && 
            form.findField('database_tableprefix').getValue() &&
            form.findField('database_tableprefix').getValue().length > maxPrefixLength)
        {
            form.markInvalid([{
                id: 'database_tableprefix',
                msg: String.format(this.app.i18n._("This prefix is too long. Please choose a prefix no longer than {0} chars."), maxPrefixLength)
            }]);
            result = false;
        }
        return result;
    }
});

/***/ }),

/***/ 805:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009-2015 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine*/

Ext.ns('Tine', 'Tine.Setup');
 
/**
 * Setup Authentication Manager
 * 
 * @namespace   Tine.Setup
 * @class       Tine.Setup.AuthenticationPanel
 * @extends     Tine.Tinebase.widgets.form.ConfigPanel
 * 
 * <p>Authentication Panel</p>
 * <p><pre>
 * TODO         move to next step after install?
 * TODO         make default is valid mechanism with 'allowEmpty' work
 * TODO         add port for ldap hosts
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Cornelius Weiss <c.weiss@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.AuthenticationPanel
 */
Tine.Setup.AuthenticationPanel = Ext.extend(Tine.Tinebase.widgets.form.ConfigPanel, {
    
    /**
     * @property idPrefix DOM Id prefix
     * @type String
     */
    idPrefix: null,
    
    /**
     * authProviderPrefix DOM Id prefix
     * 
     * @property authProviderIdPrefix
     * @type String
     */
    authProviderIdPrefix: null,
    
    /**
     * accountsStorageIdPrefix DOM Id prefix
     * 
     * @property accountsStorageIdPrefix
     * @type String
     */
    accountsStorageIdPrefix: null,
    
    /**
     * combo box containing the authentication backend selection
     * 
     * @property authenticationBackendCombo
     * @type Ext.form.ComboBox 
     */
    authenticationBackendCombo: null,

    /**
     * combo box containing the accounts storage selection
     * 
     * @property accountsStorageCombo
     * @type Ext.form.ComboBox
     */
    accountsStorageCombo: null,
    
    /**
     * The currently active accounts storage backend
     * 
     * @property originalAccountsStorage
     * @type String
     */
    originalAccountsStorage: null,

    /**
     * @private
     * panel cfg
     */
    saveMethod: 'Setup.saveAuthentication',
    registryKey: 'authenticationData',
    
    /**
     * @private
     * field index counter
     */
    tabIndexCounter: 1,
    
    /**
     * @private
     */
    initComponent: function () {
        this.idPrefix                   = Ext.id();
        this.authProviderIdPrefix       = this.idPrefix + '-authProvider-';
        this.accountsStorageIdPrefix    = this.idPrefix + '-accountsStorage-';
        this.originalAccountsStorage    = (Tine.Setup.registry.get(this.registryKey).accounts) ? Tine.Setup.registry.get(this.registryKey).accounts.backend : 'Sql';
        
        Tine.Setup.AuthenticationPanel.superclass.initComponent.call(this);
    },
    
    /**
     * Change card layout depending on selected combo box entry
     */
    onChangeAuthProvider: function () {
        var authProvider = this.authenticationBackendCombo.getValue();
        
        var cardLayout = Ext.getCmp(this.authProviderIdPrefix + 'CardLayout').getLayout();
        cardLayout.setActiveItem(this.authProviderIdPrefix + authProvider);
    },
    
    /**
     * Change card layout depending on selected combo box entry
     */
    onChangeAccountsStorage: function () {
        var AccountsStorage = this.accountsStorageCombo.getValue();

        if ((AccountsStorage === 'Ldap' || AccountsStorage === 'ActiveDirectory') && AccountsStorage !== this.originalAccountsStorage) {
            Ext.Msg.confirm(this.app.i18n._('Delete all existing users and groups'), this.app.i18n._('Switching from SQL to LDAP will delete all existing User Accounts, Groups and Roles. Do you really want to switch the accounts storage backend to LDAP ?'), function (confirmbtn, value) {
                if (confirmbtn === 'yes') {
                    this.doOnChangeAccountsStorage(AccountsStorage);
                } else {
                    this.accountsStorageCombo.setValue(this.originalAccountsStorage);
                }
            }, this);
        } else {
            this.doOnChangeAccountsStorage(AccountsStorage);
        }
    },
    
    /**
     * Change card layout depending on selected combo box entry
     */
    doOnChangeAccountsStorage: function (AccountsStorage) {
        var cardLayout = Ext.getCmp(this.accountsStorageIdPrefix + 'CardLayout').getLayout();
        
        cardLayout.setActiveItem(this.accountsStorageIdPrefix + AccountsStorage);
        this.originalAccountsStorage = AccountsStorage;
    },
    
    /**
     * @private
     */
    onRender: function (ct, position) {
        Tine.Setup.AuthenticationPanel.superclass.onRender.call(this, ct, position);
        
        this.onChangeAuthProvider.defer(250, this);
        this.onChangeAccountsStorage.defer(250, this);
    },
        
    /**
     * transforms form data into a config object
     * 
     * @hack   smuggle termsAccept in 
     * @return {Object} configData
     */
    form2config: function () {
        var configData = this.supr().form2config.call(this);
        configData.acceptedTermsVersion = Tine.Setup.registry.get('acceptedTermsVersion');
        
        return configData;
    },
    
    /**
     * get tab index for field
     * 
     * @return {Integer}
     */
    getTabIndex: function () {
        return this.tabIndexCounter++;
    },
    
   /**
     * returns config manager form
     * 
     * @private
     * @return {Array} items
     */
    getFormItems: function () {
        var setupRequired = Tine.Setup.registry.get('setupRequired');
        
        // common config for all combos in this setup
        var commonComboConfig = {
            xtype: 'combo',
            listWidth: 300,
            mode: 'local',
            forceSelection: true,
            allowEmpty: false,
            triggerAction: 'all',
            editable: false,
            tabIndex: this.getTabIndex
        };
        
        this.authenticationBackendCombo = new Ext.form.ComboBox(Ext.applyIf({
            name: 'authentication_backend',
            fieldLabel: this.app.i18n._('Backend'),
            store: [['Sql', 'SQL'], ['Ldap', 'LDAP'], ['Imap', 'IMAP'], ['ModSsl', this.app.i18n._('TLS client certificate')]],
            value: 'Sql',
            width: 300,
            listeners: {
                scope: this,
                change: this.onChangeAuthProvider,
                select: this.onChangeAuthProvider
            }
        }, commonComboConfig));
            
        this.accountsStorageCombo = new Ext.form.ComboBox(Ext.applyIf({
            name: 'accounts_backend',
            fieldLabel: this.app.i18n._('Backend'),
            store: [['Sql', 'Sql'], ['Ldap', 'Ldap'], ['ActiveDirectory', 'ActiveDirectory']],
            value: 'Sql',
            width: 300,
            listeners: {
                scope: this,
                change: this.onChangeAccountsStorage,
                select: this.onChangeAccountsStorage
            }
        }, commonComboConfig));
        
        return [{
            xtype: 'fieldset',
            collapsible: true,
            collapsed: !setupRequired,
            autoHeight: true,
            title: this.app.i18n._('Initial Admin User'),
            items: [{
                layout: 'form',
                autoHeight: 'auto',
                border: false,
                defaults: {
                    width: 300,
                    xtype: 'textfield',
                    inputType: 'password',
                    tabIndex: this.getTabIndex
                },
                items: [{
                    name: 'authentication_Sql_adminLoginName',
                    fieldLabel: this.app.i18n._('Initial admin login name'),
                    inputType: 'text',
                    disabled: !setupRequired
                }, {
                    name: 'authentication_Sql_adminPassword',
                    fieldLabel: this.app.i18n._('Initial admin Password'),
                    disabled: !setupRequired
                }, {
                    name: 'authentication_Sql_adminPasswordConfirmation',
                    fieldLabel: this.app.i18n._('Password confirmation'),
                    disabled: !setupRequired
                }]
            }]
        }, {
            xtype: 'fieldset',
            collapsible: false,
            autoHeight: true,
            title: this.app.i18n._('Authentication provider'),
            items: [
                this.authenticationBackendCombo,
                {
                    id: this.authProviderIdPrefix + 'CardLayout',
                    layout: 'card',
                    activeItem: this.authProviderIdPrefix + 'Sql',
                    border: false,
                    defaults: {border: false},
                    items: [{
                        id: this.authProviderIdPrefix + 'Sql',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield',
                            tabIndex: this.getTabIndex
                        },
                        items: [
                            Ext.applyIf({
                                name: 'authentication_Sql_tryUsernameSplit',
                                fieldLabel: this.app.i18n._('Try to split username'),
                                store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                                value: '1'
                            }, commonComboConfig), 
                            Ext.applyIf({
                                name: 'authentication_Sql_accountCanonicalForm',
                                fieldLabel: this.app.i18n._('Account canonical form'),
                                store: [['2', 'ACCTNAME_FORM_USERNAME'], ['3', 'ACCTNAME_FORM_BACKSLASH'], ['4', 'ACCTNAME_FORM_PRINCIPAL']],
                                value: '2'
                            }, commonComboConfig), 
                            {
                                name: 'authentication_Sql_accountDomainName',
                                fieldLabel: this.app.i18n._('Account domain name')
                            }, {
                                name: 'authentication_Sql_accountDomainNameShort',
                                fieldLabel: this.app.i18n._('Account domain short name')
                            }
                        ]
                    }, {
                        id: this.authProviderIdPrefix + 'Ldap',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield',
                            tabIndex: this.getTabIndex
                        },
                        items: [{
                            name: 'authentication_Ldap_host',
                            fieldLabel: this.app.i18n._('Host')
                        }/*, {
                            inputType: 'text',
                            name: 'authentication_Ldap_port',
                            fieldLabel: this.app.i18n._('Port')
                        }*/, {
                            name: 'authentication_Ldap_username',
                            fieldLabel: this.app.i18n._('Login name')
                        }, {
                            name: 'authentication_Ldap_password',
                            fieldLabel: this.app.i18n._('Password'),
                            inputType: 'password'
                        },
                        Ext.applyIf({
                            name: 'authentication_Ldap_bindRequiresDn',
                            fieldLabel: this.app.i18n._('Bind requires DN'),
                            store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                            value: '1'
                        }, commonComboConfig),
                        Ext.applyIf({
                            name: 'authentication_Ldap_useStartTls',
                            fieldLabel: this.app.i18n._('Start TLS'),
                            store: [['0', this.app.i18n._('No')], ['1', this.app.i18n._('Yes')]],
                            value: '0'
                        }, commonComboConfig),
                        Ext.applyIf({
                            name: 'authentication_Ldap_useSsl',
                            fieldLabel: this.app.i18n._('SSL'),
                            store: [['0', this.app.i18n._('No')], ['1', this.app.i18n._('Yes')]],
                            value: '0'
                        }, commonComboConfig),
                        {
                            name: 'authentication_Ldap_port',
                            fieldLabel: this.app.i18n._('Port')
                        },
                        {
                            name: 'authentication_Ldap_baseDn',
                            fieldLabel: this.app.i18n._('Base DN')
                        }, {
                            name: 'authentication_Ldap_accountFilterFormat',
                            fieldLabel: this.app.i18n._('Search filter')
                        }, 
                        Ext.applyIf({
                            name: 'authentication_Ldap_tryUsernameSplit',
                            fieldLabel: this.app.i18n._('Try to split username'),
                            store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                            value: '1'
                        }, commonComboConfig),
                        Ext.applyIf({
                            name: 'authentication_Ldap_accountCanonicalForm',
                            fieldLabel: this.app.i18n._('Account canonical form'),
                            store: [['2', 'ACCTNAME_FORM_USERNAME'], ['3', 'ACCTNAME_FORM_BACKSLASH'], ['4', 'ACCTNAME_FORM_PRINCIPAL']],
                            value: '2'
                        }, commonComboConfig), 
                        {
                            name: 'authentication_Ldap_accountDomainName',
                            fieldLabel: this.app.i18n._('Account domain name')
                        }, {
                            name: 'authentication_Ldap_accountDomainNameShort',
                            fieldLabel: this.app.i18n._('Account domain short name')
                        }]
                    }, {
                        id: this.authProviderIdPrefix + 'Imap',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield',
                            tabIndex: this.getTabIndex
                        },
                        items: [{
                            name: 'authentication_Imap_host',
                            fieldLabel: this.app.i18n._('Hostname')
                        }, {
                            name: 'authentication_Imap_port',
                            fieldLabel: this.app.i18n._('Port'),
                            xtype: 'numberfield'
                        }, 
                        Ext.applyIf({
                            fieldLabel: this.app.i18n._('Secure Connection'),
                            name: 'authentication_Imap_ssl',
                            store: [['none', this.app.i18n._('None')], ['tls', this.app.i18n._('TLS')], ['ssl', this.app.i18n._('SSL')]],
                            value: 'none'
                        }, commonComboConfig), 
                        {
                            name: 'authentication_Imap_domain',
                            fieldLabel: this.app.i18n._('Append domain to login name')
                        }
                        ]
                    }, {
                        id: this.authProviderIdPrefix + 'ModSsl',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield',
                            tabIndex: this.getTabIndex
                        },
                        items: [Ext.applyIf({
                            fieldLabel: this.app.i18n._('Certificate validation'),
                            name: 'authentication_ModSsl_validation',
                            store: [['Apache', 'Apache'], ['X509', 'X509'], ['ICPBrasil', 'ICP Brasil']],
                            value: 'Apache'
                        }, commonComboConfig),
                        Ext.applyIf({
                            name: 'authentication_ModSsl_tryUsernameSplit',
                            fieldLabel: this.app.i18n._('Try to split username'),
                            store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                            value: '1'
                        }, commonComboConfig), 
                        {
                            name: 'authentication_ModSsl_casfile',
                            fieldLabel: this.app.i18n._('CA file')
                        }, {
                            name: 'authentication_ModSsl_crlspath',
                            fieldLabel: this.app.i18n._('CRL directory')
                        }
                        ]
                    }]
                }
            ]
        }, {
            xtype: 'fieldset',
            collapsible: false,
            autoHeight: true,
            title: this.app.i18n._('Accounts storage'),
            items: [
                this.accountsStorageCombo,
                {
                    id: this.accountsStorageIdPrefix + 'CardLayout',
                    layout: 'card',
                    activeItem: this.accountsStorageIdPrefix + 'Sql',
                    border: false,
                    defaults: {
                        border: false
                    },
                    items: [{
                        id: this.accountsStorageIdPrefix + 'Sql',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield',
                            tabIndex: this.getTabIndex
                        },
                        items: [{
                            name: 'accounts_Sql_defaultUserGroupName',
                            fieldLabel: this.app.i18n._('Default user group name')
                        }, {
                            name: 'accounts_Sql_defaultAdminGroupName',
                            fieldLabel: this.app.i18n._('Default admin group name')
                        }]
                    },
                        this.getDirectoryOptions('Ldap', commonComboConfig),
                        this.getDirectoryOptions('ActiveDirectory', commonComboConfig)
                    ]
                }
            ]
          }, {
            xtype: 'fieldset',
            collapsible: false,
            autoHeight: true,
            title: this.app.i18n._('Login panel'),
            defaults: {
                width: 300,
                xtype: 'uxspinner',
                tabIndex: this.getTabIndex,
                strategy: {
                    xtype: 'number',
                    minValue: 0,
                    maxValue: 64
                },
                value: 0
            },
            items: [
            Ext.applyIf({
                name: 'saveusername_saveusername',
                fieldLabel: this.app.i18n._('Reuse last username logged'),
                store: [[1, this.app.i18n._('Yes')], [0, this.app.i18n._('No')]],
                value: 0
            }, commonComboConfig)
            ]
        }, {
            xtype: 'fieldset',
            collapsible: false,
            autoHeight: true,
            title: this.app.i18n._('Password Settings'),
            defaults: {
                width: 300,
                xtype: 'uxspinner',
                tabIndex: this.getTabIndex,
                strategy: {
                    xtype: 'number',
                    minValue: 0,
                    maxValue: 64
                },
                value: 0
            },
            items: [
            Ext.applyIf({
                name: 'password_changepw',
                fieldLabel: this.app.i18n._('User can change password'),
                store: [[1, this.app.i18n._('Yes')], [0, this.app.i18n._('No')]],
                value: 1
            }, commonComboConfig),
            Ext.applyIf({
                name: 'password_pwPolicyActive',
                fieldLabel: this.app.i18n._('Enable password policy'),
                store: [[1, this.app.i18n._('Yes')], [0, this.app.i18n._('No')]],
                value: 0
            }, commonComboConfig),
            Ext.applyIf({
                name: 'password_pwPolicyOnlyASCII',
                fieldLabel: this.app.i18n._('Only ASCII'),
                store: [[1, this.app.i18n._('Yes')], [0, this.app.i18n._('No')]],
                value: 0
            }, commonComboConfig), {
                name: 'password_pwPolicyMinLength',
                fieldLabel: this.app.i18n._('Minimum length')
            }, {
                name: 'password_pwPolicyMinWordChars',
                fieldLabel: this.app.i18n._('Minimum word chars')
            }, {
                name: 'password_pwPolicyMinUppercaseChars',
                fieldLabel: this.app.i18n._('Minimum uppercase chars')
            }, {
                name: 'password_pwPolicyMinSpecialChars',
                fieldLabel: this.app.i18n._('Minimum special chars')
            }, {
                name: 'password_pwPolicyMinNumbers',
                fieldLabel: this.app.i18n._('Minimum numbers')
            }, {
                name: 'password_pwPolicyChangeAfter',
                fieldLabel: this.app.i18n._('Change password after ... days'),
                strategy: {
                    xtype: 'number',
                    minValue: 0,
                    maxValue: 365
                },
            },
            Ext.applyIf({
                name: 'password_pwPolicyForbidUsername',
                fieldLabel: this.app.i18n._('Forbid part of username in password'),
                store: [[1, this.app.i18n._('Yes')], [0, this.app.i18n._('No')]],
                value: 0
            }, commonComboConfig)
            ]
        }, {
            xtype: 'fieldset',
            collapsible: false,
            autoHeight: true,
            title: this.app.i18n._('Redirect Settings'),
            defaults: {
                width: 300,
                xtype: 'textfield',
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'redirectSettings_redirectUrl',
                fieldLabel: this.app.i18n._('Redirect Url (redirect to login screen if empty)')
            }, 
            Ext.applyIf({
                name: 'redirectSettings_redirectAlways',
                fieldLabel: this.app.i18n._('Redirect Always (if No, only redirect after logout)'),
                store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                value: '0'
            }, commonComboConfig), 
            Ext.applyIf({
                name: 'redirectSettings_redirectToReferrer',
                fieldLabel: this.app.i18n._('Redirect to referring site, if exists'),
                store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                value: '0'
            }, commonComboConfig)]
        }];
    },
    
    /**
     * getDirectoryOptions
     * 
     * @param {String} type LDAP or ActiveDirectory
     * @param {Object} commonComboConfig
     */
    getDirectoryOptions: function(type, commonComboConfig)
    {
        return {
            id: this.accountsStorageIdPrefix + type,
            layout: 'form',
            autoHeight: 'auto',
            defaults: {
                width: 300,
                xtype: 'textfield',
                tabIndex: this.getTabIndex
            },
            items: [{
                name: 'accounts_' + type + '_host',
                fieldLabel: this.app.i18n._('Host')
            }, {
                name: 'accounts_' + type + '_username',
                fieldLabel: this.app.i18n._('Login name')
            }, {
                name: 'accounts_' + type + '_password',
                fieldLabel: this.app.i18n._('Password'),
                inputType: 'password'
            }, 
            Ext.applyIf({
                name: 'accounts_' + type + '_bindRequiresDn',
                fieldLabel: this.app.i18n._('Bind requires DN'),
                store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                value: '1'
            }, commonComboConfig),
            Ext.applyIf({
                name: 'accounts_' + type + '_useStartTls',
                fieldLabel: this.app.i18n._('Start TLS'),
                store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                value: '1'
            }, commonComboConfig),
            Ext.applyIf({
                name: 'accounts_' + type + '_useSsl',
                fieldLabel: this.app.i18n._('SSL'),
                store: [['0', this.app.i18n._('No')], ['1', this.app.i18n._('Yes')]],
                value: '0'
            }, commonComboConfig),
            {
                name: 'accounts_' + type + '_port',
                fieldLabel: this.app.i18n._('Port')
            },
            Ext.applyIf({
                hidden: type === 'ActiveDirectory' ,
                name: 'accounts_' + type + '_pwEncType',
                fieldLabel: this.app.i18n._('Password encoding'),
                store: [
                    ['des', this.app.i18n._('des')],
                    ['crypt', this.app.i18n._('crypt')],
                    ['blowfish_crypt', this.app.i18n._('blowfish_crypt')],
                    ['md5_crypt', this.app.i18n._('md5_crypt')],
                    ['ext_crypt', this.app.i18n._('ext_crypt')],
                    ['md5', this.app.i18n._('md5')],
                    ['smd5', this.app.i18n._('smd5')],
                    ['sha', this.app.i18n._('sha')],
                    ['ssha', this.app.i18n._('ssha')],
                    ['ntpassword', this.app.i18n._('ntpassword')],
                    ['plain', this.app.i18n._('plain')]
                ],
                value: 'ssha'
            }, commonComboConfig),
            {
                name: 'accounts_' + type + '_userDn',
                fieldLabel: this.app.i18n._('User DN')
            }, {
                name: 'accounts_' + type + '_userFilter',
                fieldLabel: this.app.i18n._('User Filter')
            }, 
            Ext.applyIf({
                name: 'accounts_' + type + '_userSearchScope',
                fieldLabel: this.app.i18n._('User Search Scope'),
                store: [['1', 'SEARCH_SCOPE_SUB'], ['2', 'SEARCH_SCOPE_ONE']],
                value: '1'
            }, commonComboConfig), 
            {
                name: 'accounts_' + type + '_groupsDn',
                fieldLabel: this.app.i18n._('Groups DN')
            }, {
                name: 'accounts_' + type + '_groupFilter',
                fieldLabel: this.app.i18n._('Group Filter')
            }, 
            Ext.applyIf({
                name: 'accounts_' + type + '_groupSearchScope',
                fieldLabel: this.app.i18n._('Group Search Scope'),
                store: [['1', 'SEARCH_SCOPE_SUB'], ['2', 'SEARCH_SCOPE_ONE']],
                value: '1'
            }, commonComboConfig), 
            Ext.applyIf({
                name: 'accounts_' + type + ((type === 'Ldap') ? '_useRfc2307bis' : '_useRfc2307'),
                fieldLabel: (type === 'Ldap') ? this.app.i18n._('Use Rfc 2307 bis') : this.app.i18n._('Maintain RFC 2307 attributes'),
                store: [['1', this.app.i18n._('Yes')], ['0', this.app.i18n._('No')]],
                value: '0'
            }, commonComboConfig), 
            {
                name: 'accounts_' + type + '_minUserId',
                fieldLabel: this.app.i18n._('Min User Id')
            }, {
                name: 'accounts_' + type + '_maxUserId',
                fieldLabel: this.app.i18n._('Max User Id')
            }, {
                name: 'accounts_' + type + '_minGroupId',
                fieldLabel: this.app.i18n._('Min Group Id')
            }, {
                name: 'accounts_' + type + '_maxGroupId',
                fieldLabel: this.app.i18n._('Max Group Id')
            },
            Ext.applyIf({
                name: 'accounts_' + type + '_groupUUIDAttribute',
                fieldLabel: this.app.i18n._('Group UUID Attribute name'),
                store: (type === 'ActiveDirectory' ? [['objectGUID', 'objectGUID']] : [['entryUUID', 'entryUUID'], ['gidNumber', 'gidNumber']])
            }, commonComboConfig),
            Ext.applyIf({
                name: 'accounts_' + type + '_userUUIDAttribute',
                fieldLabel: this.app.i18n._('User UUID Attribute name'),
                store: (type === 'ActiveDirectory' ? [['objectGUID', 'objectGUID']] : [['entryUUID', 'entryUUID'], ['uidNumber', 'uidNumber']])
            }, commonComboConfig),
            {
                name: 'accounts_' + type + '_defaultUserGroupName',
                fieldLabel: this.app.i18n._('Default user group name')
            }, {
                name: 'accounts_' + type + '_defaultAdminGroupName',
                fieldLabel: this.app.i18n._('Default admin group name')
            },
            Ext.applyIf({
                name: 'accounts_' + type + '_readonly',
                fieldLabel: this.app.i18n._('Readonly access'),
                store: [['0', this.app.i18n._('No')], ['1', this.app.i18n._('Yes')]],
                value: '0'
            }, commonComboConfig)]
        };
    },
    
    /**
     * applies registry state to this cmp
     */
    applyRegistryState: function () {
        this.action_saveConfig.setDisabled(false);
        
        if (Tine.Setup.registry.get('setupRequired')) {
            this.action_saveConfig.setText(this.app.i18n._('Save config and install'));
        } else {
            this.action_saveConfig.setText(this.app.i18n._('Save config'));
            this.getForm().findField('authentication_Sql_adminPassword').setDisabled(true);
            this.getForm().findField('authentication_Sql_adminPasswordConfirmation').setDisabled(true);
            this.getForm().findField('authentication_Sql_adminLoginName').setDisabled(true);
        }
    },
    
    /**
     * checks if form is valid
     * - password fields are equal
     * 
     * @return {Boolean}
     */
    isValid: function () {
        var form = this.getForm();

        var result = form.isValid();
        
        // check if passwords match
        if (this.authenticationBackendCombo.getValue() === 'Sql' && 
            form.findField('authentication_Sql_adminPassword') && 
            form.findField('authentication_Sql_adminPassword').getValue() !== form.findField('authentication_Sql_adminPasswordConfirmation').getValue()) 
        {
            form.markInvalid([{
                id: 'authentication_Sql_adminPasswordConfirmation',
                msg: this.app.i18n._("Passwords don't match")
            }]);
            result = false;
        }
        
        // check if initial username/passwords are set
        if (Tine.Setup.registry.get('setupRequired')
            && form.findField('authentication_Sql_adminLoginName')
            && ! form.findField('authentication_Sql_adminLoginName').disabled) 
        {
            if (Ext.isEmpty(form.findField('authentication_Sql_adminLoginName').getValue())) {
                form.markInvalid([{
                    id: 'authentication_Sql_adminLoginName',
                    msg: this.app.i18n._("Should not be empty")
                }]);
                result = false;
            }
            if (Ext.isEmpty(form.findField('authentication_Sql_adminPassword').getValue())) {
                form.markInvalid([{
                    id: 'authentication_Sql_adminPassword',
                    msg: this.app.i18n._("Should not be empty")
                }]);
                form.markInvalid([{
                    id: 'authentication_Sql_adminPasswordConfirmation',
                    msg: this.app.i18n._("Should not be empty")
                }]);
                result = false;
            }
        }
        
        if (this.accountsStorageCombo.getValue() === 'Sql' && 
               form.findField('accounts_Sql_defaultUserGroupName') && 
               Ext.isEmpty(form.findField('accounts_Sql_defaultUserGroupName').getValue())) 
          {
            form.markInvalid([{
                id: 'accounts_Sql_defaultUserGroupName',
                msg: this.app.i18n._("Should not be empty")
            }]);
            result = false;
        }
        
        if (this.accountsStorageCombo.getValue() === 'Sql' && 
            form.findField('accounts_Sql_defaultAdminGroupName') && 
            Ext.isEmpty(form.findField('accounts_Sql_defaultAdminGroupName').getValue())) 
        {
            form.markInvalid([{
                id: 'accounts_Sql_defaultAdminGroupName',
                msg: this.app.i18n._("Should not be empty")
            }]);
            result = false;
        }
        
        return result;
    }
});


/***/ }),

/***/ 806:
/***/ (function(module, exports) {

/*
 * Tine 2.0
 * 
 * @package     Setup
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schüle <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009-2015 Metaways Infosystems GmbH (http://www.metaways.de)
 *
 */

/*global Ext, Tine*/

Ext.ns('Tine', 'Tine.Setup');
 
/**
 * Setup Email Config Manager
 * 
 * @namespace   Tine.Setup
 * @class       Tine.Setup.EmailPanel
 * @extends     Tine.Tinebase.widgets.form.ConfigPanel
 * 
 * <p>Email Config Panel</p>
 * <p><pre>
 * </pre></p>
 * 
 * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
 * @author      Philipp Schuele <p.schuele@metaways.de>
 * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
 * 
 * @param       {Object} config
 * @constructor
 * Create a new Tine.Setup.EmailPanel
 */
Tine.Setup.EmailPanel = Ext.extend(Tine.Tinebase.widgets.form.ConfigPanel, {
    
    /**
     * @property idPrefix DOM Id prefix
     * @type String
     */
    idPrefix: null,
    
    /**
     * imapBackend DOM Id prefix
     * 
     * @property imapBackendIdPrefix
     * @type String
     */
    imapBackendIdPrefix: null,
    
    /**
     * combo box containing the imap backend selection
     * 
     * @property imapBackendCombo
     * @type Ext.form.ComboBox 
     */
    imapBackendCombo: null,

    /**
     * smtpBackend DOM Id prefix
     * 
     * @property smtpBackendIdPrefix
     * @type String
     */
    smtpBackendIdPrefix: null,
    
    /**
     * combo box containing the smtp backend selection
     * 
     * @property smtpBackendCombo
     * @type Ext.form.ComboBox 
     */
    smtpBackendCombo: null,

    /**
     * show type before db settings
     * @cfg {Boolean} showType
     */
    showType: false,
    
    /**
     * @private
     * panel cfg
     */
    saveMethod: 'Setup.saveEmailConfig',
    registryKey: 'emailData',
    
    defaults: {
        xtype: 'fieldset',
        autoHeight: 'auto',
        defaults: {width: 300}
    },
    
    /**
     * @private
     */
    initComponent: function () {
        this.idPrefix                  = Ext.id();
        this.imapBackendIdPrefix       = this.idPrefix + '-imapBackend-';
        this.smtpBackendIdPrefix       = this.idPrefix + '-smtpBackend-';

        Tine.Setup.EmailPanel.superclass.initComponent.call(this);
    },
    
    /**
     * Change IMAP card layout depending on selected combo box entry
     */
    onChangeImapBackend: function () {
        this.changeCard(this.imapBackendCombo, this.imapBackendIdPrefix);
    },

    /**
     * Change SMTP card layout depending on selected combo box entry
     */
    onChangeSmtpBackend: function () {
        this.changeCard(this.smtpBackendCombo, this.smtpBackendIdPrefix);
    },

    /**
     * @private
     */
    onRender: function (ct, position) {
        Tine.Setup.EmailPanel.superclass.onRender.call(this, ct, position);
        
        this.onChangeImapBackend.defer(250, this);
        this.onChangeSmtpBackend.defer(250, this);
    },
    
   /**
     * returns config manager form
     * 
     * @private
     * @return {Array} items
     */
    getFormItems: function () {
        
        var backendComboConfig = {
            xtype: 'combo',
            width: 300,
            listWidth: 300,
            mode: 'local',
            forceSelection: true,
            allowEmpty: false,
            triggerAction: 'all',
            editable: false,
            value: 'standard',
            fieldLabel: this.app.i18n._('Backend')
        };
        
        // imap combo
        backendComboConfig.store = [['standard', this.app.i18n._('Standard IMAP')], ['dbmail', 'DBmail  MySQL'], ['ldap_imap', 'DBmail Ldap'], ['cyrus', 'Cyrus'], ['dovecot_imap', 'Dovecot MySQL'], ['dovecotcombined', 'Dovecot SQL (combined schema)'], ['ldap_univention', 'Univention']];
        backendComboConfig.name = 'imap_backend';
        backendComboConfig.listeners = {
            scope: this,
            change: this.onChangeImapBackend,
            select: this.onChangeImapBackend
        };
        this.imapBackendCombo = new Ext.form.ComboBox(backendComboConfig);
        
        // smtp combo
        backendComboConfig.store = [
            ['standard', this.app.i18n._('Standard SMTP')],
            ['postfix', 'Postfix MySQL'],
            ['postfixcombined', 'Postfix SQL (combined schema)'],
            ['postfixmultiinstance', 'Postfix SQL (multi instance)'],
            ['Ldapsmtpmail', 'Ldap (only mail attribute)'],
            ['ldapSmtp', 'Postfix Ldap (dbmail schema)'],
            ['ldapSmtpQmail', 'Postfix Ldap (qmail schema)'],
            ['ldap_univention', 'Univention'],
            ['ldap_simplemail', 'SimpleMail or custom Ldap (BETA)']
        ];
        backendComboConfig.name = 'smtp_backend';
        backendComboConfig.listeners = {
            scope: this,
            change: this.onChangeSmtpBackend,
            select: this.onChangeSmtpBackend
        };
        this.smtpBackendCombo = new Ext.form.ComboBox(backendComboConfig);

        // use backend combo config as common combo config
        var commonComboConfig = backendComboConfig;
        delete commonComboConfig.listeners;
        
        return [{
            title: this.app.i18n._('Imap'),
            id: 'setup-imap-group',
            checkboxToggle: true,
            collapsed: true,
            items: [
                this.imapBackendCombo, 
                {
                    name: 'imap_host',
                    fieldLabel: this.app.i18n._('Hostname'),
                    xtype: 'textfield'
                }, /*{
                    name: 'imap_user',
                    fieldLabel: this.app.i18n._('Username'),
                    xtype: 'textfield'
                }, {
                    name: 'imap_password',
                    fieldLabel: this.app.i18n._('Password'),
                    xtype: 'textfield',
                    inputType: 'password'
                }, */{
                    name: 'imap_port',
                    fieldLabel: this.app.i18n._('Port'),
                    xtype: 'numberfield'
                }, 
                Ext.applyIf({
                    fieldLabel: this.app.i18n._('Secure Connection'),
                    name: 'imap_ssl',
                    value: 'none',
                    store: [['none', this.app.i18n._('None')], ['tls',  this.app.i18n._('TLS')], ['ssl',  this.app.i18n._('SSL')]]
                }, commonComboConfig), {
                    name: 'imap_verifyPeer',
                    fieldLabel: this.app.i18n._('Verify peer Certificate'),
                    checked: true,
                    xtype: 'checkbox'
                },
                Ext.applyIf({
                    name: 'imap_useSystemAccount',
                    fieldLabel: this.app.i18n._('Use system account'),
                    store: [[0, this.app.i18n._('No')], [1, this.app.i18n._('Yes')]],
                    value: 0
                }, commonComboConfig), 
                {
                    name: 'imap_domain',
                    fieldLabel: this.app.i18n._('Append domain to login name'),
                    xtype: 'textfield'
                }, {
                    // TODO disable imap_domain if this is checked
                    name: 'imap_useEmailAsUsername',
                    fieldLabel: this.app.i18n._('Use email address as login name'),
                    xtype: 'checkbox'
                }, {
                    id: this.imapBackendIdPrefix + 'CardLayout',
                    layout: 'card',
                    activeItem: this.imapBackendIdPrefix + 'standard',
                    border: false,
                    width: '100%',
                    defaults: {
                        border: false
                    },
                    items: [{
                        // nothing in here yet
                        id: this.imapBackendIdPrefix + 'standard',
                        layout: 'form',
                        items: []
                    }, {
                        // dbmail config options
                        id: this.imapBackendIdPrefix + 'dbmail',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: this.getDbConfigFields('imap', 'dbmail')
                    }, {
                        // nothing in here yet
                        id: this.imapBackendIdPrefix + 'ldap_imap',
                        layout: 'form',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: []
                    }, {
                        // cyrus config options
                        id: this.imapBackendIdPrefix + 'cyrus',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: [{
                            name: 'imap_cyrus_admin',
                            fieldLabel: this.app.i18n._('Cyrus Admin')
                        }, {
                            name: 'imap_cyrus_password',
                            fieldLabel: this.app.i18n._('Cyrus Admin Password'),
                            inputType: 'password'
                        },
                        Ext.applyIf({
                                name: 'imap_cyrus_useProxyAuth',
                                fieldLabel: this.app.i18n._('Use proxy auth'),
                                store: [[0, this.app.i18n._('No')], [1, this.app.i18n._('Yes')]],
                                value: 0
                        }, commonComboConfig)]
                    }, {
                        // dovecot config options
                        id: this.imapBackendIdPrefix + 'dovecot_imap',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: this.getDbConfigFields('imap', 'dovecot').concat(this.getDovecotExtraConfig('imap'))
                    }, {
                        // dovecot combined with postfix config options
                        id: this.imapBackendIdPrefix + 'dovecotcombined',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: this.getDbAdapterField('imap', 'dovecotcombined').concat(this.getDbConfigFields('imap', 'dovecotcombined'))
                    }]
                }
            ]
        }, {
            title: this.app.i18n._('Smtp'),
            id: 'setup-smtp-group',
            checkboxToggle:true,
            collapsed: true,
            items: [
                this.smtpBackendCombo,
                {
                    name: 'smtp_hostname',
                    fieldLabel: this.app.i18n._('Hostname'),
                    xtype: 'textfield'
                }, {
                    name: 'smtp_port',
                    fieldLabel: this.app.i18n._('Port'),
                    xtype: 'numberfield'
                }, 
                Ext.applyIf({
                    fieldLabel: this.app.i18n._('Secure Connection'),
                    name: 'smtp_ssl',
                    value: 'none',
                    store: [['none', this.app.i18n._('None')], ['tls', this.app.i18n._('TLS')], ['ssl', this.app.i18n._('SSL')]]
                }, commonComboConfig), {
                    name: 'smtp_verifyPeer',
                    fieldLabel: this.app.i18n._('Verify peer Certificate'),
                    checked: true,
                    xtype: 'checkbox'
                },
                Ext.applyIf({
                    fieldLabel: this.app.i18n._('Authentication'),
                    name: 'smtp_auth',
                    value: 'login',
                    store: [['none', this.app.i18n._('None')], ['login', this.app.i18n._('Login')], ['plain', this.app.i18n._('Plain')]]
                }, commonComboConfig), 
                {
                    name: 'smtp_primarydomain',
                    fieldLabel: this.app.i18n._('Primary Domain'),
                    xtype: 'textfield'
                }, {
                    name: 'smtp_secondarydomains',
                    fieldLabel: this.app.i18n._('Secondary Domains (comma separated)'),
                    xtype: 'textfield'
                }, {
                    name: 'smtp_from',
                    fieldLabel: this.app.i18n._('Notifications service address'),
                    xtype: 'textfield'
                }, {
                    name: 'smtp_username',
                    fieldLabel: this.app.i18n._('Notification Username'),
                    xtype: 'textfield'
                }, {
                    name: 'smtp_password',
                    fieldLabel: this.app.i18n._('Notification Password'),
                    inputType: 'password',
                    xtype: 'textfield'
                }, {
                    name: 'smtp_name',
                    fieldLabel: this.app.i18n._('Notifications local client (hostname or IP address)'),
                    xtype: 'textfield',
                    value: 'localhost'
                }, {
                    id: this.smtpBackendIdPrefix + 'CardLayout',
                    layout: 'card',
                    activeItem: this.smtpBackendIdPrefix + 'standard',
                    border: false,
                    width: '100%',
                    defaults: {
                        border: false
                    },
                    items: [{
                        // nothing in here yet
                        id: this.smtpBackendIdPrefix + 'standard',
                        layout: 'form',
                        items: []
                    }, {
                        // nothing in here yet
                        id: this.smtpBackendIdPrefix + 'ldap_smtp_mail',
                        layout: 'form',
                        items: []
                    }, {
                        // postfix config options
                        id: this.smtpBackendIdPrefix + 'postfix',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: this.getDbConfigFields('smtp', 'postfix')
                    }, {
                        // postfix config options
                        id: this.smtpBackendIdPrefix + 'postfixmultiinstance',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: this.getDbConfigFields('smtp', 'postfixmultiinstance')
                    }, {
                        // postfix config options
                        id: this.smtpBackendIdPrefix + 'postfixcombined',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: []
                    }, {
                        // postfix config options
                        id: this.smtpBackendIdPrefix + 'ldap_smtp',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: []
                    }, {
                        // postfix ldap qmail user schema config options
                        id: this.smtpBackendIdPrefix + 'ldap_smtp_qmail',
                        layout: 'form',
                        autoHeight: 'auto',
                        defaults: {
                            width: 300,
                            xtype: 'textfield'
                        },
                        items: []
                    }]
                }
             ]
        }, {
            title: this.app.i18n._('SIEVE'),
            id: 'setup-sieve-group',
            checkboxToggle:true,
            collapsed: true,
            items: [{
                name: 'sieve_hostname',
                fieldLabel: this.app.i18n._('Hostname'),
                xtype: 'textfield'
            }, {
                name: 'sieve_port',
                fieldLabel: this.app.i18n._('Port'),
                xtype: 'numberfield'
            }, 
            Ext.applyIf({
                fieldLabel: this.app.i18n._('Secure Connection'),
                name: 'sieve_ssl',
                value: 'none',
                store: [['none', this.app.i18n._('None')], ['tls', this.app.i18n._('TLS')], ['ssl', this.app.i18n._('SSL')]]
            }, commonComboConfig)]
        }];
    },
    
    /**
     * applies registry state to this cmp
     */
    applyRegistryState: function () {
        this.action_saveConfig.setDisabled(!this.isValid());
    },
    
    /**
     * get db adapter field
     * 
     * @param {String} type1 (imap, smtp)
     * @param {String} type2 (dbmail, postfix, ...)
     * @return {Array}
     */
    getDbAdapterField: function (type1, type2) {
        var typeString = (this.showType) ? (Ext.util.Format.capitalize(type2) + ' ') : '';
        
        return [{
            name          : type1 + '_' + type2 + '_adapter',
            fieldLabel    : typeString + this.app.i18n._('Backend'),
            typeAhead     : false,
            triggerAction : 'all',
            lazyRender    : true,
            editable      : false,
            mode          : 'local',
            xtype         : 'combo',
            listWidth     : 300,
            value         : 'pdo_mysql',
            store: [
                ['pdo_mysql', 'MySQL'],
                ['pdo_pgsql', 'PostgreSQL']
            ],
        }];
    },
    
    /**
     * get db config fields
     * 
     * @param {String} type1 (imap, smtp)
     * @param {String} type2 (dbmail, postfix, ...)
     * @return {Array}
     */
    getDbConfigFields: function (type1, type2) {
        var typeString = (this.showType) ? (Ext.util.Format.capitalize(type2) + ' ') : '';
        
        return [{
            name: type1 + '_' + type2 + '_host',
            fieldLabel: typeString + this.app.i18n._('MySql Hostname')
        }, {
            name: type1 + '_' + type2 + '_dbname',
            fieldLabel: typeString + this.app.i18n._('MySql Database')
        }, {
            name: type1 + '_' + type2 + '_username',
            fieldLabel: typeString + this.app.i18n._('MySql User')
        }, {
            name: type1 + '_' + type2 + '_password',
            fieldLabel: typeString + this.app.i18n._('MySql Password'),
            inputType: 'password'
        }, {
            name: type1 + '_' + type2 + '_port',
            fieldLabel: typeString + this.app.i18n._('MySql Port'),
            value: 3306
        }];
    },
    
    /**
     * get db config fields
     * 
     * @param {String} type1 (imap, smtp)
     * @return {Array}
     */
    getDovecotExtraConfig: function (type1) {
        var typeString = (this.showType) ? 'Dovecot ' : '';
        
        return [{
            name: type1 + '_dovecot_uid',
            fieldLabel: typeString + this.app.i18n._('User or UID')
        }, {
            name: type1 + '_dovecot_gid',
            fieldLabel: typeString + this.app.i18n._('Group or GID')
        }, {
            name: type1 + '_dovecot_home',
            fieldLabel: typeString + this.app.i18n._('Home Template')
        }, {
            fieldLabel: typeString + this.app.i18n._('Password Scheme'),
            name: type1 + '_dovecot_scheme',
            typeAhead     : false,
            triggerAction : 'all',
            lazyRender    : true,
            editable      : false,
            mode          : 'local',
            xtype: 'combo',
            listWidth: 300,
            value: 'SSHA256',
            store: [
                ['PLAIN-MD5',      this.app.i18n._('PLAIN-MD5')],
                ['MD5-CRYPT',    this.app.i18n._('MD5-CRYPT')],
                ['SHA',           this.app.i18n._('SHA1')],
                ['SHA256',       this.app.i18n._('SHA256')],
                ['SSHA256',      this.app.i18n._('SSHA256')],
                ['SHA512',       this.app.i18n._('SHA512')],
                ['SSHA512',       this.app.i18n._('SSHA512')],
                ['PLAIN',        this.app.i18n._('PLAIN')]
            ]
        }];
    }
});


/***/ }),

/***/ 807:
/***/ (function(module, exports, __webpack_require__) {

// style-loader: Adds some css to the DOM by adding a <style> tag

// load the styles
var content = __webpack_require__(808);
if(typeof content === 'string') content = [[module.i, content, '']];
// Prepare cssTransformation
var transform;

var options = {"hmr":true}
options.transform = transform
// add the styles to the DOM
var update = __webpack_require__(1)(content, options);
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
	// When the styles change, update the <style> tags
	if(!content.locals) {
		module.hot.accept("!!../../Tinebase/js/node_modules/css-loader/index.js!./Setup.css", function() {
			var newContent = require("!!../../Tinebase/js/node_modules/css-loader/index.js!./Setup.css");
			if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
			update(newContent);
		});
	}
	// When the module is disposed, remove the <style> tags
	module.hot.dispose(function() { update(); });
}

/***/ }),

/***/ 808:
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(0)(undefined);
// imports


// module
exports.push([module.i, "/*\n * Tine 2.0\n * \n * @package     Setup\n * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3\n * @author      Cornelius Weiss <c.weiss@metaways.de>\n * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)\n * @version     $Id$\n *\n */\n \n\n.setup_info {\n    background-image:url(" + __webpack_require__(809) + ") !important;\n}\n.x-btn-medium .setup_info {\n    background-image:url(" + __webpack_require__(810) + ") !important;\n}\n.x-btn-large .setup_info {\n    background-image:url(" + __webpack_require__(811) + ") !important;\n}\n\n\n.setup_action_install {\n    background-image:url(" + __webpack_require__(812) + ") !important;\n}\n.x-btn-medium .setup_action_install {\n    background-image:url(" + __webpack_require__(813) + ") !important;\n}\n.x-btn-large .setup_action_install {\n    background-image:url(" + __webpack_require__(814) + ") !important;\n}\n\n\n.setup_action_uninstall {\n    background-image:url(" + __webpack_require__(815) + ") !important;\n}\n.x-btn-medium .setup_action_uninstall {\n    background-image:url(" + __webpack_require__(816) + ") !important;\n}\n.x-btn-large .setup_action_uninstall {\n    background-image:url(" + __webpack_require__(817) + ") !important;\n}\n\n\n.setup_action_update {\n    background-image:url(" + __webpack_require__(818) + ") !important;\n}\n.x-btn-medium .setup_action_update {\n    background-image:url(" + __webpack_require__(819) + ") !important;\n}\n.x-btn-large .setup_action_update {\n    background-image:url(" + __webpack_require__(820) + ") !important;\n}\n\n\n.setup_checks_success {\n    background-image:url(" + __webpack_require__(821) + ") !important;\n}\n.x-btn-medium .setup_checks_success {\n    background-image:url(" + __webpack_require__(822) + ") !important;\n}\n.x-btn-large .setup_checks_success {\n    background-image:url(" + __webpack_require__(823) + ") !important;\n}\n\n\n.setup_checks_fail {\n    background-image:url(" + __webpack_require__(824) + ") !important;\n}\n.x-btn-medium .setup_checks_fail {\n    background-image:url(" + __webpack_require__(825) + ") !important;\n}\n.x-btn-large .setup_checks_fail {\n    background-image:url(" + __webpack_require__(826) + ") !important;\n}\n\n\n.setup_authentication_manager {\n    background-image:url(" + __webpack_require__(827) + ") !important;\n}\n.x-btn-medium .setup_authentication_manager {\n    background-image:url(" + __webpack_require__(828) + ") !important;\n}\n.x-btn-large .setup_authentication_manager {\n    background-image:url(" + __webpack_require__(829) + ") !important;\n}\n\n\n.setup_config_manager {\n    background-image:url(" + __webpack_require__(830) + ") !important;\n}\n.x-btn-medium .setup_config_manager {\n    background-image:url(" + __webpack_require__(831) + ") !important;\n}\n.x-btn-large .setup_config_manager {\n    background-image:url(" + __webpack_require__(832) + ") !important;\n}\n\n\n.setup_application_manager {\n    background-image:url(" + __webpack_require__(833) + ") !important;\n}\n.x-btn-medium .setup_application_manager {\n    background-image:url(" + __webpack_require__(834) + ") !important;\n}\n.x-btn-large .setup_application_manager {\n    background-image:url(" + __webpack_require__(835) + ") !important;\n}\n\n\n.setup_action_save_config {\n    background-image:url(" + __webpack_require__(836) + ") !important;\n}\n.x-btn-medium .setup_action_save_config {\n    background-image:url(" + __webpack_require__(837) + ") !important;\n}\n.x-btn-large .setup_action_save_config {\n    background-image:url(" + __webpack_require__(838) + ") !important;\n}\n\n\n.setup_action_download_config {\n    background-image:url(" + __webpack_require__(839) + ") !important;\n}\n.x-btn-medium .setup_action_download_config {\n    background-image:url(" + __webpack_require__(840) + ") !important;\n}\n.x-btn-large .setup_action_download_config {\n    background-image:url(" + __webpack_require__(841) + ") !important;\n}", ""]);

// exports


/***/ }),

/***/ 809:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJbSURBVHjapZMxaBRBFIb/NzM7e5vLXS6501xSKUSTQrBQLLxK7CyMhZFEBIs0EtBWAmJjIWgjFpImoFVCYuFpkSp2gjYqNmIIFhrDXdw14l3ubvdud5xd181p7PzhY4c3O/+893hDSin8jwT+Ep1ZMZFtThNjU8MD6cEA6Kv8aL9XwCLIXFaPTjvo0h8Z0OSz8UKfnDt7rFgcHe6FXfNAAAayKaxVmii/sR2n7o+rh6de7DGgSyulkWLP8/MnhqTgDN9qLu5MjYEImF1aQ7bXQidQePza8dZt74KaO1mGFtOALq/m8zmrXBorSLvho1LvIJ8xkDY5eiTHUC6FSs2H3QhQOtQvC1lrjq6tm7s9EDRxcDCTdxoKoEBD+Pi1haVXVXAOrK7VkLKsMB5xYH+6aG/UpwE8iAwMaU6BC1S1QSjfD9Bwfdx4+ik6kOntAQ+3KEQBTMAQ5sXEoE3i8LtqGzlLwDQ43JaL6t3j+K3B629hpo3IQPvie8tHmxkDSQ/AjW1PCWw1CRt1wG5LsCsvEwNdDb7sABs7hK0Wg0cGIIz+rh5I51d9DIooAipIDBRxKCYBohimwYeuDOSCJswkRkZ1JuIivDFGxl9zcdfAY/M6uJn8QCzsJBKFa6JoLzJjzIY0lxMDdX/EBZczGjfKoOPp2NHdEu4dAbwmYrkgfk7NZpy9o3xrqwTFnrDALxRFE8MZhn1p0oOl8LllwfbYJoAZdTNf3jPKSeB2LY+OOwFFk4wwqtnWIxw2eQG57Xl1dcT952MiIgkg1YWpEXGZvqat8TStmKY+2/kJz5rjlSXshHYAAAAASUVORK5CYII="

/***/ }),

/***/ 810:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAOOSURBVHjatZXPa1RXFMe/5947v2cikzhNo5khVgPRWhsaTCGBkm4spAixCCUtSECELvI3GGq7qdBCqcu66SYbaVSooJuKi4DalnQjtLaKiaa2MTNJ48y8zLz3Tu+98/KcYUhDF73w5Z535ns+58697wcxM/6PoXYy0OSVEbBfACgLsnKgaI6/Of7w3+q2XTG9f2UcAme7MrE3810JFHYnASIsFR0srjpYLbt3AJrFUuwCfz/m7gimyat7IHC5tzNx9L3hPeh/OWWyKG7ULDibjoL0fP/PCr79cQWPS7UbELGTfHF0Y1swnb6awaa89c6RlwZH+rMgQTYfV8DpsQIkEb6+uYiKJ2wzUzn/29+4fq+0AF++q+HLCIYIoW/fVKhFLw33dw0e7O1AqeqhWPH0X9/EhyO96ExFsCupMPVWHo/0VhSrnvUc3JvG8P7sIKLysuG0gdHnThe608cG9nYYoC709exj3fFRrnmhrVrXOdvU1x62voGelD6DxFGa/mG8HSzUB325NNYcX4uxVmUbOyzxxfUl3Fsu49enFXz23SPUKIq1TfO7EWzcZw9XnW3ZYzpza18mrh68nk+bFEBGaMxoqO55ABMiUdWUt57w+udlBxt1f5Q/PzyvYIZUJ3wh8VfZg5IyhJqmQz0KuYwKGgI/PdnEStV42Hq2hssMXyhAoAAgAAsVL9eB+6suUjFGOqYgBCz4o7EejB7oCAHTsw8w94sbrtLXel5nlLWYBSBF1vgCsCzZFZIxEcoe2zpBAmNf/Y5TQxlcPHWgcXgeYcUhMBuo3R0LDArM3ASWEQ1GuL9sZFZjzBEFv+mMfbPfAcgKYgu4Ve+8AEMsQjSbqTUWIbiRk6rNF8Ys5sLbjb88PK/Nt22BULawJaZmsFnhNj4p7/An3Q9b72NS5wJDeyFRK1i2QyGkiWfbHhA+/8o1bbgbGEPz1CFg4siukDvxWgemBrxgC8SLpoQb8DsvtIHtiGJCwxYgTfeGxg9l8EY+icfrLp5oDeUTOP5qGtGWSlpAjE/yDNztX5vnn2VQ5UsgcUwJoDvmIpck5FKErjhh1WE8qzD+cCJ4+twHgLtgnuCZ3cs7vujpYyiI4jSYJwkYjkpCVAJSAK5mVeoMn3Eb7J/jmdy1//QFCQ2fru8DeycAjoNRAnEJvljkmc75HT9NRCQBxLQSWvFAiSYlg5zx1bQcrWqrbK4SxPV/AJdjbUyz837uAAAAAElFTkSuQmCC"

/***/ }),

/***/ 811:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVQSURBVHjaxZdfiBVVHMc/v3Nm7t57XdddWzX/RVQsauKiVJTgGmZ/SF+l1ooIeukhehBBAln2JQrxJQgh6SFMRaRCUOihpFYoVNQUMdsga7X8m+4f3ftn7j2nObvj7Hjv7Lr64he+nDlzzvn+vuecmfObEWstDxKKBwyPe4B0fr0Uo14DFqNkAcjDiBSBQlj2ghwCddDufLWHSWJSWyCd36zHqg2ILHN139PMm55jfmsOh/PXS1y4XiQwTktA5CTWbuGJI7ttV5e5bwPy+rdtiGxD1KqmnM+aZbNYMLuRWc1ZlDAaLCpc7MsDZc5evMWBU9cYLFRBVE/Y8Jb9cnXfPRuQzn0rUGq/r1VTx8JWXnjyIbIZHQe9PlSmGFTQSqG1orWpIZo94X3DD7/doOf3Abcq/SDr7BfPfz9pA/LGgdUI+2Y3Z/Ody+fSnPdAJG6/fKPAOyvns+zRaSO3T/UNsf3H88xsyRMiNtI/XGH3katcHAiGwbxit688dFcD8vb+RzD6ZFPeb35z+Rwac14s6lAxhsWz8yMGkth7+BI/n7tJxtMgsRo3S4avDl9hsGgGsd7T9vNnesd9DaW7O6z7OzIZv3nN0pmglBMIaUfLsgkfthIvL5lJLV5a0krftYLrE9JGNCDCmvZWMhmvCc9um/gcOPdcJ6I7Vi6cju95LqjjHaIozfG/BqjFr38PIZ52feroa83KtmkgepW8f2z9+AaUt7FlaoapuYybdapYBcWeo1fcgxYPC6qWnb9cxCp/tF/ptmG4GdiQJtT0aWnMgKgNqc+AvHuwI1T4adHcKcxryUb7KImeMlJ3ZaVqMEGZFxc242vFd2dugNeAF++/JF/ReNyF/oAzl0tg7DL7afuJO09C8VYpJTTlM859PL7eiB2t6yz7e4sj16JyYAA3Dom628g0cd2dJUpVMAp3mtYY0HpFPqMZDmxixklBqJoqhWKpbnYOuVwW7emkydRJ5LOem+DilFyg2m4G8MfVgBlNPp6KTMSCUCiU+PeTp0jDnE0nyDVOqdkuYlQMXL1VoVBx99WCegNK59zAQlW4MFAh62tyGY1WY0tZrjAu3MlbLdeaFqo21AwMxarbegVKcEkszUD2tnuDMFxxNCPHrBbXbBFpIPvBMWwloPTZsyThZlYOJM4LZiQ4Ia0Td7oRCSHFFAPqEsjjdyyfE4mEqEb3vXx4PUwtSsb1ifY6qSHJetxeSDHgnQVCAzUiUC+gNPVQ7n7UL3Vcst5bfxApdTokiHZCURmJqpprUdRhvL7pmofqDYjsGRuUHjymCHUQ5VgTsFYjrh+sM2C3LjqB6OOjAip2XC/oqFNXYHIT8E7arhk96blA660JkXvagth0+iq4Mlo5s2XcZGQ/fmyXW57RYCmrYIHiLaiUqUMQhG1DYG1i78Ux6bIH27p74g+SD/9pQ9mjIE11T3NhELuljYkgm/6E/DRS0I9V7barpW/C/wL70dxelF6LUsO1W+B5irthWoPg13cbxrLOBZ/8R2n3ldVY2YtIs6trJTT7VbLVYRozwtSQLr3nfHfUjub+obIl8KfQHyiuF2LdQcSstZtnHLr3z/LuG48gdgfYDlfPeqGJrLhZOhNhcNAi7rgNTcB/BeMCj6Tz6BfhYHjxnu1q7b3vHxPpRiHXOkFtBNt+O7EqGaXIWLYzY1LHEbvVbm7ddd9/RulmrnYgsirkCixtQC5kNqTLI2fBnkbMnnC5T9zXr5mIKMCP6CVKR52giiiMwQmZiNUEKxGDRBmEcU2cjCSEE4zqmURwx0wKGxLt4gJFwuUUBjVGjaML6Uz8DxEUQCqIcl9VAAAAAElFTkSuQmCC"

/***/ }),

/***/ 812:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGxSURBVHjapZNNaxNRFIaf+zVJ2klMad24SBBdmLWCFUQRROg/cOci+gPEjRtbdNOVYEH/QBFc6UKQUhduxC7qBwiCVLQBFURxTDM2k3Tm3jtCRXDhREKf7ct5OLycI/I8Zy9ICri2fvnumYetwdlHR6Lld0t3KKBwg/Orc37u4DmRuiGvoxf29sn7ZqwNXn59LrwZUqpo3m690RRQGGTe8XMnQUhJ6hz/EwhAAfZPYJ0nTgcIBJl1/5pzQK4B2ivtxU7cufLsy1MdKE2gFUZJkmyIFIIdlzH7oJlXjKESGI7uP2EbtebNS4cXru6WaBbN94vHLkyjHLnyCCl+C3y8K6jrOlJqSoRE/R5x8oNscjO6d/rVjAaw1rIZddCBxpQVtVKIkYK+20ZJMLkhSRM2og/0BgOmgiozQfpXB575x++f3EJj0GC0JFCK2WaLySBg7eM6ZaMpaU011JggzqzV8yPvoLxk8lOHWkxNlFnrbPCp3RNj3YHznsxlSAGZ9xShRwm+bffIhce6sQXXZSOs55+7XdHtZ4R2nx3zmRb88enqMjA8MNHYqvnajZHPtBd+AV8ir6y+hjXrAAAAAElFTkSuQmCC"

/***/ }),

/***/ 813:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMISURBVHjarZTNa5xVFMZ/9+t9Z/KdMZO0iiC00NCWSVS6KdIaBBVLQRduFUTEtSvbTbPosu4EwT+ghaxKta6q0IJozUqDi9gGYmpKMkzTZiYz7+e91+k73WaymDyXB+65ix/nPByu8N7TT+/9cOb986+8892t9RuvBUpFtak3lmsvvfn1F7OXfqOPNAdoSI3c+GruysSpyTnAlR3u3JNk6ybwKpCyjyQHaKO1PvH71j0qFclEBaZKM9yv350G8oE6tt7TynbZa/8LQNWP8t9ecXeDgZ3r2tLJkl4tLbnrMQcCO+exONppDEAeWqzzhwF2RRy9jgV50K0P7hhJT0eA0f0y9t6R5BlpnuKcxe3f8egLFvrqr1fPn54+feva8rWxlZ2/0FKihEQrWdzHwhFSmxJnMVIIYhdjVMi5myd8oBRaKwLV8/HxWRaOXtx5mm1f1GtP1765fPbymPM59WgLDwjpKSQ8QghyUjq2A0DmEj6Z/RIlFLJr9cJDehiFZC9vVO5t/bior69cPzk3XaORbrLxfKUUIEErgZQSLSROWKxLkQLuN+5ihMZ5CGWJETNBo/2Mlcer7DZbfH72Qxrx9ls6zVL+2XmAkzGdLAYHUgm068XhuwaPUYZABQSyaxGS2JRHzcf8Xf+Z3ahNJ8mYMUe7jE6xjoJFbs+/PP9BbaaGUhKlFcZoyibESIOUIITjj/odnEg5U30bvATAPz8OrHc47wmVouk32Ywe/iS4wjEkt402J5RRICkspUBJyXBQ4sLxd3kU/0loDMfKr3Nn4xcQeTGRkV0rVVgpgZJ+NdD6gvaLfg2YZR+NfzvsozwqICWtSHxE3K0ffFoX/fe4v4q82lm7mEArQeLi4g1gEHCR3166R2ZzEJDY6HD+CusszaSFIkJJgchbXbA9nE/oSaeJi9u04oRQ5IcRxfd6KhxiUlu2m202dp7h05BSVmZhYUEOAJ6081OTzVOVEO89ymtmzBFCW16vVqt+APDHXrvss4e78WriUoSUkSFYHrXjHy0tLfUF/w+ghm7CSFvQ5gAAAABJRU5ErkJggg=="

/***/ }),

/***/ 814:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVMSURBVHjaxZfbb1RFHMe/M3POnu5uaQu9QAFDMQVCEA30IhiVRDBpxBd8MjHGF8OTidHIi/pQI29qjIlP/APGSwzxASFCqMFqiESQQCkUrLWGS0uv2909e87M7+fsnGZpY2LSmBNm8905M7+Tnc/+bmdXMDMe5vCwwvHK6Rd3b2vafmxo5uLWvwojq5SSaMutnXt63f6b+SD3zuGt7w1gBUNiBaPny87HDm16+fyrnYe79rTsWxVrgo4JnfntjQfaD3U91dJ35oNLh3tT80BO5D6dKU17PtWhq60XGxra3X5W5rEptwXn7p6U86XiJwCeSQXgXmGi59zfA+hcswXzuWsQQcXth5jEmdvf4dTYtxgtDu9MzQNhVGkcHP8R3Rt3o0mZ5UYzhyv3L8JXsjE1ABMzIAgRRSjHywE8o51dMiM1ANIEISSMIZR1tMxWRzGMNhBAmgAMCIYhQhhHgFjqAQNj7QKUHoBZBNBkYCyAAGoQAWkYwxDWnmoOCMUgYkQ6XuYBTfr/eeDo4NEXrk5c7R8YHdg2OXevQZKEZMC+Q7GAlAJKSHc4MSEyDqDGoI12OWIg0HVsA3u+hK8UPF/B9+x1RqE11zb/xNqe6x2rtve/tPn1E7VO2PdFX+9Uaer4xvqNPW1BWwOZJN5s2M20OBt3TdDaWACN2JglikBE7l5jyN1rKLnfcLJX7zU2NKrWnvlo6vhHw2+4jukeRh2fd/ywq23Xgb3r9wLCYC6aQXWfhRVc3JM1DIQAcrks7po/IZMkcHsbvEdRqYRQ0oMn/ZqU8pCxe4HKwmfP2g3GwiHciW6e+ezJ7w+4EIzPjXcjBnrauzBUuAAtNCBRk4SAFAJKSjfLKFkLJ8eHsegGWABMnHiBqiIEMou8WI2RiVGcGjqN9/e9hds0jHlMdtVygIiaxqbGMDJ1HUVRTg5WcLMQSA6WAsyyBsLiAURtMIMAeMLDuux6zJWLuDF9C2dHv0YcEQDY9TCKwW1kfNlUAwBbkWu1qKg4ASAHkSQfSysHkBwOhqoCQTjvZFQdmoNWF44wCjGxMIFv/vgKhUoRpSi2oBKQ5DJWs3b5QJ7AUoBZEJpmCrO4XrwJP/CcgkyAbBDAPueR97KOSTIBLF1HDEQAIo35aBrDk78h1BVoIkTGANLAU8rKQBlXLk4Zz8MCu/DMLi3DQRAODg7/gh3rdyAuxUA5CUEkBEiFKIsYnifch9Y1SNzBLQSecmtlYR7xO1HRBryYN+QzTJagOSlbY1XvZTFlk5dkdY9/fgCgcQTA/oXyQt35a+eBeDEEnFALKymSXiCUwLN7euGvVshUM7wKISXCQoyfLv9qISWqPUBZeUvk+wqFjEImY9cZr6xZH6n1Af6Qr4HQA+AsCAswQE0aYDtTVZRcaxO7Q30lHUDge65EmQECu7qnf4mseM7aTtq5+0TfyNCyTsgf8xUAz/1n23xNMgvX9ZxHvCqAsgCeh0pyACQLjL07I1L5TUgmqfOYYvBifJRMvABoB0Ap/h5whzMLVOIYwhgYSr61WOxGyStFgAQCKOsKONJQMrJKGlIxoqSdpA4gGKUoRBRGruYrsUYhrCAs+SBrszwpAohEC3EIKlZQrMSuF7jyLGbAkqxkegBeRhUbskG+RQW4UZpL2rRV9bUp7kA9MUIuFVL7Z5St93/f2d6Cg81rsDNuhpxSwLREt+rFVt6CPOohSF5IDSDfHLy5eW2gVzcqtObzIGPARHii+XHIQEFkZCRg3k4N4E7/7AXZHD0/7vPl+yJaoCyD6xgqq8Igm7kSoG7/RH/xElYwHvrf838AavDa6Ly60AoAAAAASUVORK5CYII="

/***/ }),

/***/ 815:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAADJSURBVHja7ZKxDoIwEIavQEVJ3HQyDsTRp+BZkN3JuDs7qhOLL9LViTdgcyNiCGiMBepPQiQ66ODiwJf8Sf+7y901LVNK0S9oUNuggUEGfceAWGNqDp63uoXhIhGCm/CVOtD7ue84uWXb657vLwk8n3HP+XHquiM9TakLz2vpUEVpWXRG7hrHNBHiNJRy8LLBPc/pEkVkSkm6YZCGxlpRECFeIp8EAcVZhlU6JBGraTbYMTbD5I1ZlcB/uIZE3Xys1JZA+xP/ocEDBq9FNwfzJsMAAAAASUVORK5CYII="

/***/ }),

/***/ 816:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFvSURBVHja7ZTBSgJRFIb/O+OIBYqJoS5atQhi2giuEqJFm6IX8FHcBW5EWvUK0gMEgbt2uZXcJCE6SOPGLEjNHGdO506XwYhW0Sbmwse55w73m8M/MIKI8BdLY0JxKP5ZnGXiv3DFfYdaEQZ3lcpB0jSv7mu1xLTdloc+BqMzQa+qvtor1kwT66XSWAwGp7Fq9dYXP3e753vlcoLmc8xtW170EapqRBCyMkIhFxF9Vl0HZTLwLCvl1OtnLD7yxQ+Xl7ub+TyW/T6WlhVMIyEpV3hKSnIvBLRsFm+eB7vXw+NwiMNiEcK294MoFosFXjodRGYz2QSTkkKwRI9GoTFySpcndKZTPDUaGI9GeAVAuRzcyQTaasYecGM3m8cbnFM0nebTCARfFizyWOTxVO8ck2BkLHBdIBZDqlBAEtyqqESrBZddkHs5wYUQ2zpwHTWMHYOFwUf5zpdnOhGCnl+uO06H+5Mtom74dwvF/0H8ARPRiugFOEvzAAAAAElFTkSuQmCC"

/***/ }),

/***/ 817:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAADdcAAA3XAHLx6S5AAADm0lEQVR42u1UPW8bRxB9u7d3JPVBnmxKRUIYsQobdhPbhaoYUCSkiYGU1l8IYLhykyCFAgGpnB/gPoWBlEYApxHYOIUbSzZAKZQtyJYQGIEi80MiafL2dvNCLnPRsUiAuDMHeJi93Zl5M7O3g7GMZSzvvYgfl5fhBQGCMER+fh7b9+6hc3SUGDhIBy8F5eAPtUPwt07WubNnEd66hfjVK8S1GmAMxINCAYLk4c2b8o8nT2wun7eWB9HJCb5YX8e7kNfXr0NOTQFSQjebYnJhQTTu3zdxowHxw/nz8MNQrJD80dqafHb37jTJvXfaAYfs9HQ8t7razNy5Y+tXroi4XreifPu2+ODqVdtsND4/2tj49qBc/qh5cCD/PQFHnk4iIR9NoFQyU4uLe7mFhVXkcj9Hm5tC1apVW3/+fCm8cOFBdnbWk2Fo2wcHQvznBBIy42AHcH4JBGOjWJzVOzs/id3dz6QxZWWUQrNa/cr6vldaWoo+XllR8+yIp5QjJ6yFTAUcCZ7oU36IY3hSIsjnoefmYISI9OPHvqhWvzYXL5bV64cPC1qpS60owofXrnnBixdi5vgYyvPgWZtUPEKYAEIMqqa9IWJj+tpkMgCJ20xg++lT/Lq1hU9v3PBKlQrs/v6l3MuXBRVbq3pR5Nf293FEgzMkt0xGMahKWp1KwoEkGFZKWBKBpHJyEiabRafTwe+bm/htexv1t2/RZczjahV6bw/08dkNpQwAh37mrGYACoOe1v9sPckkuySVAoIAoI7p12u30SJBg2+9fniItvPL8qxFbchB4n7SxhWnuYhiAG84HLp0CrpdTLGCrO8jq1SfzCMEHeUQDCC0hun1YDgzNN90r15H969KHWmGdpp+XdpqEmNiAr67IklOXplWh0I0JqytACjtbGzo4rlzvkdiRUOfV+HHMXwhhlfS31cM4HFfEcP/RM7MQBaLEB6/XIVZIgBQoNbUPos5s7uro0HPKjVyizX05ZMOsH7CAx5aIyX9k7az2tNPjwS+06fePO0ywAiyDhkGpb/guke/ZQCP1DE3NBcMsATgOwNcZoukTT+t1M9HDVafng/OfiB2+G8RenBuFLDFvW/awC+SpmrSzYw8N54BizTK01glCSTDJZHRpGKH1DBK22vuNckJPdiy6o1LtgXIkFrQAM5ZEd/j/0kl9W1J3CI0YPpFfukOpNM9QqdG6ejoHUWQQibRKQzEYCxjGctYBvIn49+dBgb2kg4AAAAielRYdFNvZnR3YXJlAAB42isvL9fLzMsuTk4sSNXLL0oHADbYBlgQU8pcAAAAAElFTkSuQmCC"

/***/ }),

/***/ 818:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANWSURBVHjadZNhTBNnGMef9727Hlfacq09ZS0KndVFnY1sqybqh81N0X0hOhf9wMYHs0TiJ5csgX1YYNkiX0hGslEyycgGWWaUZGyZCYlMsgytBQkjIGipG2CorQPurr0rd9e72x1hC2Txlzx5kvf//v95nuR9kWma8Dz6+wf67V5bW1MLz8MO+Ld6e/uqE4nxzNWrPecsCc/MPNbsahg85fm667tztmbf2ejZNEFd3QdvxmLtt5aXBV1cFbQb6KsSk1qFKnfQukgBXxBh7OfpSz2Xfur4PPn+Yb6QubMW0NX1/QG/30/LsqwcOXLwvuhcwm2Ln0CFeyswhANKSAc4CRoYq4uKAun8kwXO5duefJagEACggYHf0pHI3m2SVNDLfC7i7L2T4NniBmSpE7mHgAFBERVhvzsMUe8+K5CCvCbBdCLhIOwJmps/k/bs2XuK4/xEy9DH8MA9A7yWg+nsI2PrH+xw4MeqEucc7eQDi0gwBCCBBknLA96ifLq2AkIIDw7G8+FwiHl3qAbmfZmiSAipCsFz8+H59Idgcabl5LJ54m+vm/SCamog6zJ4sEKS7e1dvbdv3ztdXr6NkSQZyoAFs/g0oRLKqKeUvgbrhEtfblF+KX5RfeA18LMclBCl8tTEzLfk+PgElqQiVVm5E1jWBa+URiGDVp5kjKdTq4Tmg3Wqg4eeOV8qAwK7QMhIMDE3SSWTD/B/K1y50ins2LHTFdxPm0PpX9MtWnNdiPEJLzLcXyw4xYuFtqmK7VW7xsZSaO7PVL6p6WKZ5TXWAmKxnrdNk7oRCASZUKgcZGbJyIqZuZwhtgWIoMQSvibOXx4WBRnPz2dhYWG+oOvK2YaG925iZLG4mO1gWR8jy4LB8znw4wA+GDpceTT4xpe7X9jXHaoMh4uajkVRAlkWDY7jmGx2qcP2kqZFTU3t+eHhWyxNU/zlyx/9rioskVuSsdNJAwKAlRUe67oOqprXu7tjR1VVZSmK5m3vpqfc2fnNq9HooRFBWC4ahmpGIhEHQggmJ6dUinIgr9dPxuN3ohcu1N+HdTBswBLJ0dF4tq/vWv3x428xqdSsNDublI4de525fv2H+pGRu9l4/C4JG/jfd0YW5vpha2trn90bGxvf2aRt4B8IC6j6wWey9QAAAABJRU5ErkJggg=="

/***/ }),

/***/ 819:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVWSURBVHjajZUJUJNHFMcDFAVBKQyK6IgdqRDt2GopimBnEGttgR6IVhwrFpQq6oCtBQK2RQHFA7G2BWtxHEDEEAWUK1FIgBCu4QwhYriPyBUIiCiHkH93KXFwLFO/mTf7vv3e/7dvd9/uxwDwn0YeDbXv6ek9Jzu7IIrPF0VT//WY1202qE5yctYPpH2Lih0cnMyfPx8FNerTPvptOkbnjcBGRgt1y8okyvHxCcTGsmOJUD8wMMR1bOwFnowMwY/jffpMtW9QdOqfGaNj46CxVPO/YJoBm31PPjExiZ6eflVDQ9tYQacAxx+5I6TlMOL6wnD3yW9IUITjstwfrEKPEfsL75hQrVeV9eJEeeRnr4CtrW10CFSbWnDw2dPDwyN4+mwY/hWHcKzOHeFtvoiQ/4g/Ov3xd88JMkAwkgbCwB44i19lns/2lqzzOdXkOX6i3i39JZg8ukVFVYrc3GJZfDzn57a2rsmhoWfw4X+PvdUu2C/ZgUO1bjjycA/cqh3hUvkJfpIdQGjLUVwkg0V1snD5cQDi+07Bp8aJN81kaIaFRR7v7R1Af/8QFIrBqZb7kAf7bBtsKd6Ez0s2w0ZkBQOuHpZkGmH1g+VYct8YTIEZPMRf4pcGL5xq8sbp1qM4WrS9jjLVGc/39Q28J5U2obtbOWXrY9YSoSXW5K6GheBdGHHmq8xPLqxZs2tljM0W2+GN+62wnmOOD/im2FfhCJ/a3Tgm3QP3coecmUtBy8dAKCwf7ejoRbX4ISzi3sHSzGUq0wemI3pZuv0WVxelqffDxsZG99Md24YduExsK1gNt1J7fFfhRAZwIr7t/SkmixU899q1GysjI6N3ymRtaGnpRGxGAt6Lt4ThXcOauZk6KaZphlmWdxatUoN3chiM3QU2HdsL12FXiR2+KbKFs+hD2AssVDu5G25QJiM4+Py5qqoGSKUtqK/vmLKrqdexOfHjSY0MjauMDMa5pamGJyw5xiYzy3KLt908v4DA8d+j/sL9nDyICsshrmkAZYWEXLzA8PDwOXvzZjaoJSUJkJoqBD9PpHJP2DOpmaHJIuDDJjyDb1elmlrPBHM4HC02O2WMn1eoSknNn9KqOZTJMDAwXGRmtuILKyvbgMTEfz+UlkoRmhYCu7t25wn4qzmZWlvthOa2G0XLX54wdhLbMVsghKi0Egk3H4BqKYOyKFO9cVrE3o6IuP6cBggElciTFOJK3hXlgnT9TYY83bXLsg2YW0ssjF2K39c7nrJPT1RU3N3UIkdufiWSOAJQLWVMszTUVaEdE5N4KS4u/UVaWiHS0wvR2tqNymYxsqq4ikv5Ee4f5awwc+RvMOCLsp3FEkl3FynJ9vZe8Hgl4HJLyEy5LyiDstQHRCsgIMT31q0cJCfnk8BS8PnlEAqr0SHvQXvvY0hbZaipl47KGhpH29o7oVQ+RVdXP4qKJDSOzLCCJjOlpyzKVGe8IDT0ssLP72Szo+PX0TxewWRZmZTs8CM0NsrRo+hHn3JApRwYUvX1PSGzeQyJpAHV1TICLZ50dt4ezWKFNoeHRyko65UDoqOja0LaedS8vLzDamsbQW42Am6fAnV0dEEu7yJtJ3mXk3qXk9JsxcGDR8LUummGhhr8Ej7dzklI4JTX1TWjslKsEgoLJxQk44GBAQwODpJlUJIlKJ4Qi6WqpqZ2UmbJ5VSjZsx6H1taMvUTE+/00Uz9/VnxJHixi4uLD4VSoz7tCwoKiqezuH07tY9q3uSip+Vn7OGx/wy9nIhpurq6MtVg6tM++u3AAS8aY0w1s4Nfh2ur35lMpr6fn18CNerPiNOe7Yf6D5e+fpk+suB8AAAAAElFTkSuQmCC"

/***/ }),

/***/ 820:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),

/***/ 821:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHwSURBVDiNpZPfS5NxFMaf83735mxutLm15d4ZUabhSorMwCZdmAntdZPevHBdhFEEmUkXRYtu6iKCDIwuKgRDL7oJQqn+g4pqRhCCdBGREWltU2nux7t5uuqlgZm1A+fmcJ7DOQ+fQ8yMUkIqSQ3A9C/NFCYfCjiCAob4KS8AAJh5VQkVm2ynLPHzT44zRWgKHbAy8+o2oDD57NW2V9ePnXEoG7dCiKXaa6PDjwC0Gh5QiHore+0pWZMHi8QqeV2KI3Yl0uPkMhemvyTgLrehstxRZXhAKp327918KxrUaPzt6z5Zk1l/qPdTF3ncPlcs2q2tX4QFqblZmPV5XBwZWkwnskeNATalor+v9QBNfI6jua4OxHzWdNgku52uzguRQ56Ezsjr3+A1r0F0eCSdTmZb+DG/AQBiZohOMdAe2HFu/+56vJ9Lod5Tgdi7aTTUeBDnJXDehFqrE5duP8h8nf8e4DGOGSf+AkmExL1goOFEY9MGTMx+xK4qLz79iCOb0eG3VOPm3ee5mUyy+XdxEQeFscJJERIC6XzPzjYLni28xDrzWjRZ/bgx8CI3k03u4/Fi8bIcSKp0X7u6nQc/tPCdyYOshJ05qGj8Ix/LFaV2aVS9vI2VsD2HIPasCNgK5LWhA1v+Rqhh4v9Gyd/4ExX8Nv8aoP4SAAAAAElFTkSuQmCC"

/***/ }),

/***/ 822:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKlSURBVDiN5dRdSFNhGAfw/znOM8++3IepbM5NcKyMwlIRjVRMyw1RShSFpt0MMrLsJtJu8iLqohCiq0CiIvqAJQgpGlRGH6BQKGU5yzEShGAe9/11PG9XhqazwKSgB5675/3xvO/D+1CEEGxF0Fui/n8wZaUUym6F6/Ct+gXKRpn/CEy1UlJ1kXKmt6nL2Fpao1Kble8oG5W7KZiqoyQZOemfL1pPpTOqLIQYGXprz7JSPTuWEJadkPWazpl6EqJNFKvbrXWeP2jLFFI08Hg4eDwcIrEQdsq3s8t1opWH5B3y13ZLXYk4mYHqpMrAXeeOrUJ7KEZv0n/qrKnTRZKUiPu8EAQCJR3E1eF7vHPma9Wajtl29llLeWWJTp0FjUyD5sr9bZp2zY0faCGVbAgbpjssNdl+gcVigIM/xCGV8uHmYP/SrHPeSh6QV2s6LjDt2GdO18Lt8YAWAdnbdGioKLanHU+Le6Y9pw3l2R/bLRXGxTgQinEQeIJcRSruDg0JE87Zet7BP1l1u+UvLW4V324oK7BlZugREJZAJwPaVDFcs9/wdNy5YK8vVntpGsEYD4EHdqn0ePT4BRmdmmjk+3nHmlms3BUpLSmOlgNFR6RaOQIkjiQRkKWQQA0W8+DhD0YQjcaQw6rw5ukcGZkcb4sNxO6sO+Sfl5C0STp4tLrAEs5YhFcIQMTQILQAf5QDH19CHmvE+xGejM257GFHuG89dF0YACS1klFbbX6ZN9cNHxUELQIIADNtxOTDOHnp/tIZGYhcS4QmhAFAapGO2xv3FPr2uuGjgzARA972xfF8eqYrOhy9vBEKACCEJEzVIdlU9/0ycsVVSqxn8ghTzfRsVL8yf1FwgZZVST/kN+vjTBVz6XdRQkjip9hs/Jv7+K/A3wGZWWhmDBTTCAAAAABJRU5ErkJggg=="

/***/ }),

/***/ 823:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARpSURBVFiF7ZZdTBxVFMf/d2ZYdmf2Y7a7M7sLuBQoFioqRRBoMS2aYGPTxEpoG02NaSUR41crGDQx2tdKND40NqkiptUQxWpFHioEIbaStMbUtNZW0lahsgt0gWV3lp3d2bk+4AOUr21j22g4yX25c8/9/TLn5N5LKKW4k8HcUfqywLLArRbg9/I7ypvL4zWf1YyRp4j9tgrwDfxWwSt8uqtwF5frzLVzq7hL5CVivS0CtkbbZjFNbGssbmScmU6UrS1D9ZpqO7GSy2Qf4Weu5f5tuPi6WGX1WI/V3lPLuDJcCIfCAIAtJVsQUSOOzgudZwHkJCVAthGWfk4TycLtb9g3ONyOju2521i3x4VwODzre4GjAGPymHvm3LwCfCPvzViRcb5hdwPvqHfsCTQF3l8KLr8iV7gyXV2bsx/lZFlCOBIC1QFQgFJg2D+MgycP0vBEuGlm3pwe4Ov4dIvJcr7cWyKIKSaS5vW853rVVbcY3FPvKZFXyt1V2Rs5p9MBRQ0hElUQiSpQpsIY9Q2jpacFkdFIE/2QvjUzl8y8jCx1FtngNFx6JGedOd9bAJ0kEJ1S0PX7Seob8Nf63/V/dD08/bX0IqfT2Vexeq1BsruRSOigOkB1CqoDJEpxuLsV/sDIgdiR2AvX58/6A0ab8eeKzCJzlpwFRZ2EGlfAGAgezi0i6R7PobQ9aTtnrnfvdd/rtDn71uWuMYhWG6biYahxBWpcQTQWQYpG8EX3UQwHRpvng88RcAoOi2yyIxSdhkfjClRNgW6geCg/n8grpBb3i+7tACA9L62WzNLpsrwcg1nkEdEmoWoKVC2CaFyByPL4qrMdg6O+VvWIunuh8s0qgfEZY50k2Q9sLLifmCxWMBzAcASEBQgDMGocvaf69ZHAtZdFi/jO+qIco0UyQ9ModB2gOqBrQKbRi2MdnTh7tf9rpU3ZuhB8jgAA8Dv5etlh37+hOJ8wQioYjkyLsABhAXZKx4kfBlFc6IbJzUPTdVCdQk8AAmuBNzUL7e3f46cr546H2kKbFoPPKwAAwpPCvnRRenP9hpUkwTNgOQLCTQtwDIGNGkGNqdASOuLxOBKxGGIxDbGggvM9E+gf8/VMHp2sXAq+oAAAmHeY999llhseqHQgmDoOJgVgOYBlGagJBVO6Aj2hgyaAhEZhi4kY6RXw24jvVPCbYGky8EUFAMDyuOWDTJv8XF4VMG4eBWuYLgdhCAgASil0DbBGrRj6VsCvPv8vEx0ThcnClxQAAPNj5k+y7a6n76shGLdfA8sBhCUAmW46S8SKq608zvwxdDHYGcy7EXhSAgAgVAlf5trdTzz4LIeANArmnwPcpthwpdmI0xf/ujzZM5mz+C7zR1LXsfKdUt0f8B8/97GOdNUDg0AgsSIGDptw6sLVwZuFJy0AAEqXsql/bOTEhWYddwdX4c9DqfjxzIA/1Bvy3iwcwHQjJT/eZqyVfJ+n1EFNpaahG8udfyTVA7cy/t+v4mWB/4TA34PCCtr9vKHEAAAAAElFTkSuQmCC"

/***/ }),

/***/ 824:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJhSURBVDiNpZM/SBtxHMU/l+TuQjRpcjalyRCEClpb7S4IgiBis3RWB0MkIogQFB1c3JwcDA4ugqVV9woWCg6iLanYQm0R6qJVL4aEqPH0ziTm10lLwf4B3/SW74fH4/skIQSSJNkADXgM+Pm7MsA2kBNClAFsmqa1JRKJRV3X98Q/pOv6XiKRWNQ0rQ2wOQBtfHw8Eu3pef5+ctJaX1sTEkg2RcHhdGJ3OimZJkXDwK4oPGhtdUej0TDAwMDAJwlo1nX91fb0tCezuur11daiejw4NQ1nVRV2RaFkmli5HGYux2Uux72GBqO6szMXDAa7bIA/EAiEvs/Oem2KghCC+kgEyeHg/OgIQ9cpFgrca2mhXC5zVSjwY2mpMhAIhAC/7bqZi3SakmXxqLsbT00NT3t7uSoWKV1e8jAcRgkG0drbOdvfJ7+7e9Oo49qIcplzXefD6CiehQXuh0I09PdjWRZFRcFMpfg2MYF5cEDJNG8ANwkAkCSym5u86ejg9PAQl9+P4vNhZbN8jMUwdnYAKJ6f3w4oGgZ2VUUIQaFQQJZlZFlGVVVkpxPZ5aJwdvZngJnN4mtspGluDsntJp9KIQwDdyBA08wMUmUl1vHxb6FvADZZxuFyEYrFkH0+LjIZ3nZ18S4S4Sqfx+X3UxePgxC3A+SKCoqGwdbwMOlkkvW+PtIbG+yvrLAUDpNNJvk8NASA6vX+qu36kb5OTXm+TEx4+Q89GxnJPxkcPAkGg1124KK6urrxxeBgnQWnJ1tbrivLkm47VL1e6uPxTPPYmPp6fn5leXn5JdxxTNJd5/wTYNtN+2Sz0agAAAAASUVORK5CYII="

/***/ }),

/***/ 825:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARvSURBVDiNlZVPaFRHHMc/b97bfbtN3N1kWxORuLS0NYeAdBO8CPWk5KIHtaKCIKiEeBDJwYsX7wHPEYo38ZCbpbCtIJZIDyXJQdMSm9AQNWiyeVl23+77O/Omh2Rj08RCB37MMH8+M7/v78f8DK01AIZhpIAScBAo8v+aA6wAy1rrGIAtcL5UKl2qVCrPHMd5F8dxEkWRDsNQB0Ggfd/Xvu9rz/N0q9XSzWZTu67btmR9ff1dpVJ5ViqVLgF5rTUGkCqVSt/Nzs7ey+VyPVEUkSQJSqld9l/zxWKRTCazOjg4OLa8vDxpAF9WKpXvT548eby9qbWyQuR5GEJsmmliCAGGgZISFcfIOEZGETqVQnV0EAQB3d3dzM3N/TI8PHzNAg4ePXr0cJIkmKbJr3fu4FWrWLZNqqODdC5HOpfDymQQlkUSx8SeR+S6xM0mketiHzhAz8WLOI7D0NDQYeCgBRRzuVyPlJLW69esv3yJnc+DUmitMYRAJwnStjfHSiGDAOn7yCAgiSIa8/Psr9UQnZ3Ytt0DFMVWAA2lFN76OgBRs4mKIgZGRrC7ughrNYKNDQLHIdjYwMhmKQ4Po6KI2PdRYYhsNjFNE8AAaINRSiHDkLBeJ2o0+Pr6dQr9/ZRv3sTu6tqGio4Oes+cId3Xx6enT6OCgNb798S+3wazAyylRClF8+1bagsL/DExgV+vQzpNeWwMu7ubVD7P51euIGybuNXi9aNHVOfm8FZXMQDTNDEMAwCrfUM7dTAMonqdxclJ6ktLnHr8mEJvL9/cvo3v+8RC0Fpb47fRUfylJaxsFkMIhGHsAO+QQim1mVpbLlWnp/nh1ClajkO2UCCTz5N4HtM3buAtLmKm04hUChWGu168EywlKgwx0+ltrdoyWZb1wWwb07YR6TQqDIk9DwMQQuwGSylJkoTIdTEzGcx0mq4jRzj+8CFkMvi1Gtr36SgW+fbBA4rl8mZON5vErda2FLuC15YiajQwhKBraIjyxARGNotXq/Hj+fP8fPkyOgjIFgqUx8fJHjpE5LpopRBCfFwKDdiFAiqK+Hx0lNS+fQT1OlMjI9QXF6ktLPD06lUSzyOTz/PFtWvoJNkEfQwspURJSVivIz2Pv8bHac3P8/vdu9Tm5og9D79a5fWTJ/x09ixrz58ze+vWB9f/BW6nm1ZKGSKXA62JXBfnxQumzp1DWBYYBjpJ0EoBsDY9zdMLF3Z8yJ/s398G6/aLnSAIVpVSZPr6+OzYsR0HEilJ4ngbulcrnThBsb8fIQSNRmMVcCxgZWZm5tXAwECv4zgM3r9P8OYNSaOBEGLbxb16IQSdvb0U+/tRSmGaJlNTU6+Ale2PfmZm5l4QBD2O42CaJqZpYlnWnuO91oQQ1Gq11XK5PLa8vDy5qzRVq9V3rusmruvqZrOpW62W9jxP+76vgyDQYRjqMAx1FEU6jmMtpUw2NjZ2lyatNYZhmEAn8BWbBbUHSAP2P3p7KyYSCIEYCIAIWAOWgT8BF4j/Bjg4xW1LQb8OAAAAAElFTkSuQmCC"

/***/ }),

/***/ 826:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),

/***/ 827:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJGSURBVHjalZNNqBJRFMfvjI5WuFBKkQgTFy3cpdAqcPEWaqto566FO3chErzAwrVBb1ELQ8u2IdRGfQg9Eb/AhQh+K6Y0fosfWNaoc9+50jzqUS/7w2E+7vzO/Z9zzyCM8d4BuuR+6j6sVqudaDTaMBgMD/4HvplIJKqr1YrP5/N4MBjgYDDYo9GestvtD41G461SqUSpVCrU6XSQWq2W7LOz0vfa945l2VU2m8WtVguT63K5xIFA4PO/4OvhcLgxmUxwKpXC9Xodp9NpvFgsSJIfcrn80XmAgbgKccNitdxzuVyver0eH4/HcblcxslkEk+nU5zJZDiAXfDdFYqAFEWJzGbzfZvN9kSn02mkUqmE7bKMXq+Xsl9YpFQq0Xw+R/CMGo0GZ7FY3JDoCNhvCEQ7nc4jWNiSzo7H47Molor45OQTJg5GoxHZea1QKB4Dc/nMtUajOcjlclytVsPQWTwcDglMrO4CzpwcGal9DbYPBVgI2mQy2TabDePxeAY+n+8rx3GkJATvEM/zCCBULBa3Vqv12Ww2ew7QCv0iWqvV3pZIJCgSibiazeZLmqbRdrtFRGKxGEE/EFivAfziPEwkBpsLmUyGoIw3IpGI7L6zxjAMEpK12+3v8O3vsOAgFAp9AKsEoCABBRJgkmjX/Vgs9hHuN39M0O1238OQtNbrNSISXBCRd36/vwulvUV/kTBAd7xebwXmnCejSqJSqfAOh6MM/bl70bRSPxOQXa/BwBzAD2OGksSFQuG43+8fw/oQXaBTBbj9M03az5MAAAAASUVORK5CYII="

/***/ }),

/***/ 828:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAJhAAACYQHBMFX6AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAeBQTFRFAAAA////AAAAAAAAAAAAAAAANTU1AAAAlpaWmpqaAAAAAAAAcHBwAAAAAAAAAAAAqKioAAAACQkJAAAAAAAAAAAACwsLQkJC19fXAAAAgoKCzMzM29vbFRUVDAwMCwsL4OHgCAgICAgICQkJzs7OCQkJMTExCAgIBwcH1NXUOTk54eHhycnJRkZGSkpK2dnZoaGh1NTUcHBw2NjY0tLSe3t7wMDAm5ubysrKmpqaaGhoZGRk09PTe3t7xsbGzs7O6OjocHBwmZmZ09PTz8/P9PT0gYGBjY2NlZWVsbGxvr6+x8fHr6+vzs7OrKysra2ta2trkpKSq6urrKysY2NjpqamqampwMHA6urqw8PDwsLCzs7OxMTExsbGy8vL0NDQ19fX4ODg4eHhhIWEo6SjrKyss7Sztra2urq6vb29v7+/w8PDxcXFyMjIycnJy8vLzs7Oz8/P0NDQ0dHR0tPS09PT1NTT1NXU1dXV1tbW19jX2NjY2dnZ2tra29vb3Nzc3d3d3t7e39/f4ODg4OHg4eHh4uLi4+Pj4+Tj5OTk5eXl5ubm5+fn6Ojo6Ono6enp6urq6+vr7Ozs7e3t7e7t7u7u7+/v8PDw8fHx8vLy8/Pz9PT09fX19vb29/f3+vr6RBN/vAAAAGN0Uk5TAAABAgMEBAUFBQYHBwgMDxMVFRcZIyMqLTY2Nj0/QUNDREZISElJTE9PZnV8g4aGkJGWlq21uLm5u8PFyMzMzs7Y3d7h4uPn6vHx8fLy9PT19fX19vf39/f6+/v8/v7+/v7+yMjhbQAAAVNJREFUeNpdzE1LAlEYBeD3vfeOOqM20NcYGYaUfZutoiBb9juiX9iiCKJFFBFEhV9FBFGopDlNoqLO6NzbVGrqWZzFw+EgwmA8kUluX7MhDQUP7mOf5SH2xndv10uqmwwojmzfrRb9jAystamF5HJhjNlmPy+G9x4jxXGJH+b6WIpuPsx9aC5xlDE6LAhsmN6ncCnAxHGqaP8wLsleqbYy/xLUNQYnmYIFiDAdjjNK7Ep5tB1w41kqb4HD6k7UC0gQm4WQRM4TOUeB0rVYs0EoRcKwpVwlso467NuCkuFSKJqoGOnk268CUSb004t3Dg3uYnrq9U+Bqdzjkz20iTLl6Dx0uCq0fcQ2lZnTXQXSMpBQgR5GBNOhx/VndwuIi6LAbJ53mdoWm7WZhCh9XaatHoNZrxIF2pXMTbqCXUYE6p9RFVErZ6sIfQxCAtm2OIf/fAPnrn/4UsZ1SQAAAABJRU5ErkJggg=="

/***/ }),

/***/ 829:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),

/***/ 830:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANDSURBVDiNfZBZTFMJFIbP7YZK6QLUglwptCgmWoGhuIHz4DxgXGIMqQ/ERE2NmvjgQmKNW+K+MzoJM2TqxElEVGJcqYJYFinYCgW1CiFFaUGrt1Q63i50vccXIUqa+ZPv6Zz8Oecj6htb5akpYmOuIkvqDwSc9FfPkrpbdQkBOnA4kZ9YQmaSnLz8PE8wFLT6fL660tJSPfwQ9rHjx/2Wl289wx8+LZdlklIWi1Vy80btGq/PmxaJRrwxBjMoipKrN6jzeFxu+fPOztIOo/FFfkGBCwAA3F/+o1+9tdm7X/Z/7Lc5cGzMwzxtbitDRJig5lrNcDQSwTG3G98NDsYOHDho2bx5Cw8Rgbj3qLknRz67gGFYMGK32SSpKQIGCMfiosLFAAAqlYp7RXfFnDMnZ4Ferwe73THO5XIExcXFYYPB8DdrwGb/rbunb2TUNYpvrK+SG580BmdKJEX1+gYNAIBUKj3FYxFzdDrdNYulR6HV7hNarVaDXv+Il50tLyQQEc7+rtsWjUY2ZJKzciWpIn52lkwUCPg8586e1vxRWXmbcrtNSqVyOSIyAAAajYaXkDCtiqKofQQiThrdf/gMOzlZ/M/SJap1QrCKZPKFzBevwF+mVi/s7e21Q7z8KGuCM0fKb7gaZiLdnosntaujzS3P5sfbQ0RgTS28sJMgN6nulYiEYggFQlCwTM2WpqWZW1rbi+Md8FPBoU0Eb0UhUScQpZLBMAMPzUmvZ4jnRYRCUWIGSTa1PTOu+t+C7HS4oJBJlnK4fPjqZZwUNfprR6f51NCQI8rnz5ienp5xx9jxfGNcB9UVsJKqT4rFupU42pSLp3dm7J50crHqXKfJEnV+dmH/wLtwu9G8a2IGiAg6LaR8vMsZHjcq0NOqxJqjWYapsiov6apNXb0xyuXG/oH3kXaj6cSkxMK58FeSUDKbYQmBpsOfHZ/Gy6f+umfX1h1dXZbrjuEPyOFy2bTXv+a+vmk9W0If5SzLF/3LF+dwPJ4g3m+jt1dcdpriGV9U9MvdB4+b8pKmJwr7BvoWeH2BvQQiQsOfc9emCBLOjzj9LWXaoQoA4H2HAwAEAMQAIAoAYQAIVVVfrZXJSMV4MDT4DYvwykTEl+tUAAAAAElFTkSuQmCC"

/***/ }),

/***/ 831:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVVSURBVDiNlZN5TFR3EMe/b3dZlvd2eSwILB5cVlgWFqpgEUFtTKwxqa14xFpFa9NIovHCKvWoaa1X6i1tNAoiTaqtN7UcrUXlEAQXC3RBjIJyyIoWlL3fvvf213+koYpHJ/lm/prPzGS+QxFCYKgzHg8LHj4DhHhbbLZei9WartdpzwJA3rE8Hc/zGRJKEhWgCfDyH+JPma3mO729vX+q1T6n35s69S4GCYoQgvzCkmxBFNM0gQFy7ahwmPueuu122+ztW7du6DP3xVOgKH//AAQFaRASGoaZqTPAKBk0Go2u9vb206IgfDFn7tzOgWDJ7bttS4KHaVb39PT5dXaa6nuemMEoVRKW9VkskUoMgf6BnwYFBsUFBWqmsD7qEzar1VpQWAhPT0/EREfLx8bHz1coFK179+zJ+M/Ed1rb+CFqX5mhvvm2r693kCAI3sHDAqGQy4QGY1PyxJSkmoEFOdk5C0NCQ/PenTQRdpsNNqsVVocDFy7kW5qamobk5h5zAYCsztjckZIYHzY8yC9SIEDXgzaL6DSbQ0JC/VRKOhPArIFgm90WNW5cIniex/22NrexsVHS09OLqCitavz4JOuOHTsvO53OldLElCmV16pqF44YPlQGIqDb1HmNAomtqCj/Wx8bO6a0vOKmNjLiDgAkJCSw6zPXf83QXqbm5mb52XPnG0wm09GWlrstZWXlMRqNRp6amvqW202mydYsXXhjx77sj2xWW24P5/R28eJog8HACW5iUKrY6QzjvQ9AAQDMmTnnkIeUim+9d8/x06lTH+7atetS/yZLlqS3lZaWbensfCBYLJYNFCEEuw/mRgsCv1EqRQxNe4WHhwRLlCpG6qv2lXvKJaTL1J2zfl1GSVFh4ckHHR2Yt2DBqrq6ugPPW2zt2nWr791rjTtz5swnFCHkBQ+u27Rjlj5ae0CrjRiqUiopi/mxW6/TC6aONrmZ44rj9Pppg3n3BR8PFsszvvSJidbejPSuDItU/YouLIIybL6QlpY2oqam5uHrwCCEvFRZa5iPTQUscV4bSWylISRrUwLJv1hU/aqafkle1nD/Cko7a4JwUMl4g1AS2DgCqXoC4seMfqe0vKrhdQMPCt63nFIlxVBnFQzrp6BV4DgRp8t9hNETFoDjBURGjNKXllW1nP+lSPq/wGoVToQHszqG8QHnFNDd4+5r7ZIl1N5seMQLLjg5F3S6iHC1D9tZUFyifCPwwZXUiqlJ9PsqFQsRHrA63Sis5I/szq6tv1Fj0F+9UtEr8DzsDhd0UVoNQ9PthcUlAa8EZ62iomdPlm2jGRZSDxYOp4jLNcJ9UZRkAsDxnO8e3TDU6q+WV5hFUQDnciE6OlJN03RrYfEfIwcFf59BeSTrkefpxSq9lH5wughsNpFrf8gtWrO//V9PZh/e31VbW68vK6u0iKIAjuMRo9MyNM0Yi34rSXgB7Mdi5zCNKp5RqiGIMlisIk787jyamdVV9vyah7K+ba+rbxhTXn7dLooELoFHrF6nUHjRlfkXiyYBzx7k/DZqcqLe8xLL+kukCg36LBxqGuwN0zPuxg12mP5Yu2GL7u242NpJKeMUvOCGVELZ/2psuuWjVi+TAMDYKOqwXMFKpPRQ2J0CHDbecqvVPu9VUADYtX1zk9HYOL6yqtpFUUC1wZBYcrV0WVW1YSMIIfhhM/Pjk9I4Yq5IIPcvxpAj64PXvMl39WvTVzvHnfz5gr29syv9Yfdj2ZWy6usUIQQURUnP7dWmM57SbziHo/qDz1uXA/ACQA/I9LOb8ADsABzPshOAY/FnS+OTU5KPMUqVh/mp+fg/D1u76xjwK9cAAAAASUVORK5CYII="

/***/ }),

/***/ 832:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),

/***/ 833:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKuSURBVDiNXZMxb1xFFIW/e2fe7nu76+yyWMRxHGTJCuCSbYCGisI1WCK1a2pE44ofgITT0Fgif4AKgpD4AYmERCJZKIgKiTUOa2/YtXf3vTczl2Jti+RoiplivnvOGY389PMPd/85u3g8W9SiKqg4ExWWewEEMAwjxbRc0ayVO7m99vqHHrj9dJh4Vr3VzRuOVubIG0re8ORecU4Ynpb8NpwxmUWu9NHaH8cf35JND4AIMRkpGdGMEKGsIvNF5NlwzvNJDYCq8PZ6wUa/yc06LwA8QIjGZBZY1InzRaThlDrCX2c1IRoA3ZbnnY2CldzhHViNXgNiohpNI04TTgURoQ6gAs5BkQmvdZTRpORsCt4JRSMCaQnwqrUTR7MhNBtK5gXvBafLvAYsQiLURgiJEBKbqxZjunTgvdLveYpcyJtKsyFkXnBOEAEziNGoaqOsjEWZaGZSXkdoZkp3xdEulFah5LmSX0JEIBmEYCxKY14mZvNEJkt7SwdOaeVKu6V0Wkq75Wi3lKKpOAcxwnyRuJgnstmym6xSEglfluXJmzfm2Sa/j9Up3ilaK+5c0QvpqQgJe5GSEWMiuUQoErFZZ9WiOhYz4/8SETk4OHi3KIr3RqPR1yEE6/f7n52enj7a399/aq9c8Lyi3d3dL7a3t78cDoduMpnQ6XQYDAbfTKfTsLOz8znw1UsDr4CHh4dvbG1tffDkya9rx8d/f9Lv9291u92Oqtpk8u/5ePziz/X19e8Gg8HJ0dHR4729vecvAe7fP/gla2SD5asvP5CIEGPkRrfLSqdDjJFkibqKj+59eu/96wgiog8efLvVbrepQ8DMcKoYUJYlq/1VNu7cYTabUdcV3mV3RUTNLF114B8+/PH7Xq93U0SuysTMMDNExC7PJiIyHo9PLodX/wF2QUIbF+5j8AAAAABJRU5ErkJggg=="

/***/ }),

/***/ 834:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACYQAAAmEBwTBV+gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAQFSURBVDiNfZVNix1VEIafqtOnu+/c+coNITpIhlHBuBHRSNSVMC7cipCfYMCFOzGL7NwEXSSgEeLfyCpMwKVMFkFw4QdZOH5BrplkMvfentt9Tp9y0XdmkoxJQXEW3efhrbcOVWJmbHx/8wdL7euIoKqoKoKgoogIIgLCY2HJMDPMkiUMS4mUEqLux/ffW383AxiPds58fXOS9ZcG+EzInZA5xWdKroJmilchU0FVmIbEvd3Av7uR++OAmQEQ9nb44sPFtwAyABElW3wOv3SCwmuXmZJnSuEdRSY4FUDYulfz019jQtvB6B1WkSgRqTgAI9CkREgJjSDSpQGxNSoRUoJf/tljexQes6SXK6+t9jmxkBMrQCo5BAN1Y7g6Epzio6OqW5wq3gl7jfHHvYa4rxJwKrx4smTlWM5Cz2GWqEI6+H4AHk0jTdbiXSJzCe+68qsaRnuHF/ahqydySg/3Jw3jWnAiVOMGTA7BilibPHWj1AKC4ZzhnSIK/Z4incUI0C+EkCIPKsAgGWQOwiR0/z3qsYqQe8V7Ic+ELBMyB84JqnTPruNgZsRktNGIrdG2iXbPCJPmqBXzPaU3r+Reyb3g/SNwFUQ7tTZTmJIRI4RohGg0IbHX5sDUHgPPzSn9OUeRC3muFLngsy4PVc/AyYgtxGg0oYPWjaDBse/F7B0LvVzp9ZSyEMq8O/N8pn4G31fcppnKxqibDpq5hE31qMc+Vwo/g5ZKrxDKQimLQ/WqkFJXft0Y0yzhHIgYBoRcH/c4JWPQ/El/sk0ewFddE50H8Yo5wbyiGbQRLCQkGi4m8gASDN8mdLoHNncIvr/94KsPXu19VOSudKo4pzjnumHUDaTcOfe8iJBS+huIbWoPBk/btrRtoq7b6WhS3QSQ/QHyZIiIXLp06aXBYHBmOBy+s7Ky8inAcDj8st/v3x6Px5sXLlz4/X8vPw0sItnFixevrK+vfzyZTPxwOOTWrVuoKufOncM5x2g0ajY2Nq5evnz5MzNrn2RkR6hdLFy/fn1peXl5d21tbXltbc2dPXuWPM9JKbG9vR3v3Lnz8MaNG8eAPrD7TMXXrl174/Tp05+nlAgh5Ds7O8eqqloGSu/9nJnRtm1VluXu4uLizmAw2C6KIgBsbm5eOX/+/O0jikVErl795rtff/v5zW4zGLNmAdAER0oJM6PoeaZ1xd1hjZlR1zULC/OviMjbNlP6qBVz84sLL5dFQQiBlBKq2q2b2XqKMeKc49QLpyh7JYKw8/AhbdtS9sqXgTlg8iT4+PLicuGcWoyRGCOqjizLcM4RY5idkbLsoeJYWlq0pgnifU5RFCVwfB984LGInFxdXf1EVZ/W0GdGSilubW19a2Z3Af4DLiPzU1Ge62sAAAAASUVORK5CYII="

/***/ }),

/***/ 835:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ }),

/***/ 836:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGwSURBVHjapZM/SMNAGMVfoth0q9rBOtZVxM1BEP/QrUWh4iSujurgIMVNsOisuLuouNnBQWc3BcdCwQ7WUkHNNX+atpd4XyLhQh0Kfbl8l8C93z2+XBTP8zCIhqnkstnvVstJ7OztQ5aiUlWhqgoUBVAQ3KcnRWha7OeuVBr1AZZpJSZSE1hYXIInA4DAKApBxPDn25srVCqVRJjAdV1oMQ3ayBAuH16jKfxCI0ixlZkB59z3hAAuXrrdrqADmyvTtD5MQj1yvb9ZPJhOh9b6nkgCojbtNplDeQGBBlwCBJDeBC7nPtUQgOv7J8gKvxKlEFc+M0drydObgBk2MvOzshueZCZW03T+SeBycEE93N1GnyKP1EQeNLF/BZ5oDzodkI6Kx4jH42F8OgMkir2RX/fnqXQ62oOO2N1pt0Eql8u4ODuHZVs4KBQgKzU5idpHjT4heSSA2N1xHJAYYzBNE4ZhQNd1yPKE0RXRk8kk3qrVSBO/GNPH6DQyncG2bUrUAyAwbWZbFricQOF8mTWbj7rOxhufDeTWVkGq1+uQ9V6rUQ48v7xAHVJ/IDTw7/wL+9Ie9hdQT1wAAAAASUVORK5CYII="

/***/ }),

/***/ 837:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKbSURBVHjatZVdaxNBFIbf3U2CERpv9Cbpl5Sair0VxY9rFf0dFryRWj/Ab+pNQUjxF6g/o4K/QOidSEhKQWuRgtuauJndnZ1Z58zEYZYgFkLfcOacsHOeffdsduPleY6jUImWG9eub0dRNOsHPu6uPEJZZbgn9D0AHjxPryBRbbKHhGdYf70GKSTm5uZ23r5/N6XBAzaYXV5eRndrC+cvXcWJ48cwxBLGgizcAFWY/Cti6H75DCEENj5sTFrHUkq01ltonmmCZ5ky6FmwhReBFkoXwzOJTqejwVLmsGCac6aAdAKClss+Nj51cRjdvDCPHDn1UiiWRMHxQnNBn8DzFTjwcOviPFypQwQwOTdZqoXmK4Qkt8axkEXHBKdLo00szfBxcxuH0ZXFKWQyJ6hxrViuYzpgwKpmSYbL56Zg3ZrVuB3al0PncWodm1HIfzjOBG3m2Oz8wGG0OHvKgjUnd8F0CUJQaR2fnT45AsmNCVM7jrmgfgN2HdNcNJDEucCwhKdhVhY6ciMBZGTMsFzHZhSk1ft3MIaI5Tq2oxhbZHDU8fgafUDoyfurl69WUavV/uts6fYS+v2e7p2eND9PIRww/VQ457YpDEM8ffwEaZqiWq3i2YvnsHJeAY16HXt7JRzs79t+IbIiOOO80MiiiJqpdmEEoKxDcE4HQB/qD4KAWA5YCnqrFR0JocNTrgeDgQu1kXBu32jUX2808HXnm3PzhJQxY36ppL8iSRIFScHiGBVRUXPsW6gbLGZqb0y1dtzv9YqOfS+49zMMW7WJCYJr0MqDh0h5qm9STzU4QOt+8DtCzGLwNAWvVLC7u1sEd7a7b07PzCA82G8hh99ut1FRG+3zL6UNV98VKE0TXTPGDLBciigf2Z/pH6S7UJf/7+KAAAAAAElFTkSuQmCC"

/***/ }),

/***/ 838:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAARsSURBVHjaxVbfbxtFEJ77bcd2Yrd2EwoRIgWpou+8IPEU3vg3gGfUlwqJ8gStVPh/kIoEqiq1b0U0hCKI1CJMjJPacbHv7LvbW2ZGHvt6d+ZCpNJN1jO7dzfz7Tff7p2ttYaX2ey5NbDrlwlAX/3k6u1Eq1258M6778HOm5fBsSyADEuGgXixm6YB/GdI54ts8RLPxVEMez/9CPfv3gFprda5b69/fv39NADw/cnuw72HsLm5BRc6HTjfuQDb26+D5zqFyI35D1lOnvUZhAH+LIR+/y+YBlOQNkie7mYZgCRJoFargWPb7JugeYW/90+KkmcYeX5gpAC+1m6g0RwznasQQHOjCZ7nLW6wLAPeerXFvs4m50TiiuU5YYDHwTSkS+UAaDc0Gg3x+WELGXBtC1bVYDUAiYnJqEPCMVO5ChnIxNcIAG+wJZpcKC6DngemhBp/0OVxrBSP0/GVUuUAEo248cGfHx9DUdOZkdbiMRKyPNg6VwOV5EpQDoCGET65vbn+vMg0/+foJKMZyIIN7rNQ0YpPp4F0U3ECMXUrDawAiKxekrJd+jEuQmn93zUQJwoi2o6RWl0CWb24OQaANaASfYYS4NNRrKB3PJapMi1I7cXl1lr3kE1VLkKdAaBwTPQ1GxXZV/lEmWQ8u2CAHYrBydPxdSEDOQ1oFqFRsnSdBiXjpQbIYQ2k4yen0cC9u99Dr9eDwPdL6C8WpjBTXVuDJ789ymqgvARPfv2FevoNmLXFoFYrvqQEOPmCW8lJ+P99GRVrQL9YBs5egg8//gje2NkpquXKOg8GA/j02jUwTRPjat7Sm53Ov4swjuNcYK/isYrH47EILyswmpMuc/xhU6lUwLIs3gmz2SwfXwAUCUNa+gS78cWXdKzK5xvcuHmTViig6D6yyxcPgzKJb/qyovkzAJgHpfb0+BikDU9OKAkBoJWRz89L18sXgphTACigKJxOKXgWIFFL80Qt2yiKZOXCAmcVMJqAISPVahVq9ToMB4MCDRQgtGy7EEAURxAEgSQgK0yQ5R4iKHsONKYYdK8BEOCiojg+HQPguhx8ig/FcSTlICvCotVLCSQ5X49CZIdFqPmFZKC1TQuejUbQWF8vAqB6YMBW9sQK/AAcx4ExWn8yYV00m00Uoi9Jhf6FDcMQgdF8shCoOd+e7XYb+v0+GNg0NgLAg8uXLn1Qqda+wVK10/tV6L711S0BRZ22JgXPiVD8KAxZKwLAMk2e73a7LF5sVUwbCAPGo4ODPzc2Nr7efuXiZ3jDGoswCjmRPddCasVEvdCfPowouGgqXTLRkIxDNOexdwUA3fn3aDT6DpXf8jzvIhHw9pUr1g8PHuy4ruu5juOiKF0E42ESh8onh4DmLzgVIpgwwjYcDn3bsQ8ODw9neNVY5mC6FTr30Jth5xJwDIzlo7sXzGaPsTs0/Ue3m1Sq1RBPtUTQI0uAQIkVjcA01bVerxt4+hmE5wTPiP39/eTo6MidTCYUx8x/NXDyZ5T3H9+a0pP7Q7enAAAAAElFTkSuQmCC"

/***/ }),

/***/ 839:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAABuwAAAbsBOuzj4gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJLSURBVDiNpZNPSFRRFMZ/5zXTU0dJXRmWiwEjlJpFuJGGDAIXUREFrQRXRRmEQS1auXAh/ZFaWO2SdFMEtShIKJAMCYYWhlqbJpKsIA3xz+i8N++cFu/NpFmrDhzuuecevvudc78rZsb/WOzPRPtQKuEnYl2YtGLWAoBIBrHx+EphYKRjYmV9vaxncOjRvrTCIELyHxdmHaPzxcm3Y5sA2oZTaRxnFHAQAYEatxbHEX7m5wFBBBDUgbYiiJgZ7UOpRK7AO4SkiETQ0HvgBpVbq+h+eaaUi46zbqB7RzomVhyA5ZWgSz1LqmcEnqKRm4Ip4d4Pc4FnqG/JVXW6SkMMfFpFFAA35pLXPIKAAgaBp4iAGysjH+RDJtAK4ACopy2Bp2wvq2foxGOaavYQeIqZYWaoZzRWN/Hg1FN2Ve8Omfjash4A9ZSZuRlGPjyj/8hd0g0HMTVQ2L+zjdvH7/E6+4rpL5OErdpvHahnGYRjiHFn9Bb123bQe/g6y94S8S1x+o7eJPP5DX3PewjMEAwcyZQYFHwbL7IIvICeJ1d4/22KmopaKt0qPv34yOWHF/DXClGNop6OlwAkvzgQeEE2nLaxmlule/gsXxdmmV+e4/z90ywuL5ZaVV+zhQV3YIOQmi8m0xijIiEoAsm6RsrjZUzPTkJRHoKKWdvE1ezYBgCA5nMNaXWcQRGSxbcqLmEsWYTOqf7sZikXLXWpLuHn3C6UVhNpiYoyOIzHK/IDE9e+//0zSajhciABVESxG82pAKxFngOWzMwD+AUS/j13NKjFIwAAAABJRU5ErkJggg=="

/***/ }),

/***/ 840:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAP9SURBVDiNlZNfbFNVHMc/t/f2tl3ZpoOxrd1Wtm6kgagkDpE4s2FUdHGAELKQ4AjTxISERF1i4ouR+ODT9IGEiP/CEFM16MIDmIDLRoRkD4IxDWVs/Ju40XYbpavtbXt77/FhW7N2f9BfcvI793vO73N+53d+VxJCsJxJPZIKdNoVe2ddSV25burF9+L3RtNG2g+cFt3iwbKxy4GlHqnNvcr99c6GnZWNpY1MhCewSBaqKqq4Hr3OmZtnHoYSoddEt7j8n8FSj9S0cfXG33Z4d9glSWJyapIjrUcYj41zavgUTqcTU5j0jfalb0Rv7BHd4mwhQ1kCWlzlrDq7uXKzPZwMAxBNRrEqVmSLTCQZwYEDgC2uLbbp1PRXUo+0TnSL9IpgYLenxLM2okVyQjwVRwhBVmSJaBFs2HJrnhJP5ZQ29SZwbCHEUkhVZbVTS2nUpmuJhWKEE2GmtWlMTLJmlsnkJKF4CMsDC2WJMgzDQJbkA4WcReCMkfEGw0E6NnVwYvcJ1JjKVHJqNmMzSzgeps6sw7/fT9uGNgKhAIYwHnskGIjpqk5HXwe6odO3vw+fzYcpZjPe5d6F/w0/gVCArl+6MBQDoLQQsqgrpB5pEGgB8Akfg28N4rQ7kS0yhjAoshZxN3qXrV9uJWLNvcNl0S2aH5XxyfnJMMPs8+/DIllQZRWH4iCWitHe274QCvDdiqUIBK749lx9fZ1qWGOz6cNAfIBDPx8CIGtm2fvtXoJmMBcjm7LWFnhlXSBwxbeQldduetb4/tWXtj9Vq9dwLH6ctEiDDL1jvXj7vYxFx+if6c+lY5WsdD/+jqOh1fu+njW2A5tyJZ2v8cDFXz91u9zv3rx9E4ARbYSPxj4GGUrUEuymHatixZRNEnoCi2HhYPkBNhc3AdBQ38D4xPhn21pefC8HHhw873sQiwVamlvTJ785+vv8qf+QVALqyNq7tr/XppSMo0h2msIws55UVfiZ9JP3ZdNizO/t7DrcdPHSoK2stPSJ1taXhxWA+5HJC966euXOjWtD53/4vKXwIVYXfMcZW9XPkHeh9vxzL1yqdlU337pz+wJQIwkhGBkdFt76xrzgK0MDHP/kcOEZefb2B0d5+tltedqt26Osb/RJCkDg2p+cO3cut6iqVjb4vHhqKlYEJzMZjn9xjExGz2k1HjfrG32zXaFpGu4aV15QLJGi/eCHGNnMklBZUfkr8pDyivI8XdM0YK7dUqk09XV5JWNmZgZhLUaxy0uCTcPApmqUr8kHB68HF4JTuFzVeRtc+RdY0spWr1mkXf3jaj749E8/Ppr0P0wSQiBJkgzYAAdgnxsOoGiBL2L2n9OBJKDN+dTcPAUk5rz+L8v0sWI7CL1WAAAAAElFTkSuQmCC"

/***/ }),

/***/ 841:
/***/ (function(module, exports) {

module.exports = "data:image/png;base64,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"

/***/ })

/******/ });
});