text: // The server port - the port to run Pokemon Showdown under h
  //exports.port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
  //exports.bindaddress = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";
  exports.port = 8000;
  
  // proxyip - proxy IPs with trusted X-Forwarded-For headers
  //   This can be either false (meaning not to trust any proxies) or an array
  //   of strings. Each string should be either an IP address or a subnet given
  //   in CIDR notation. You should usually leave this as `false` unless you
  //   know what you are doing.
  exports.proxyip = ['127.0.0.0/8']; 
  
  // Pokemon of the Day - put a pokemon's name here to make it Pokemon of the Day
  //   The PotD will always be in the #2 slot (not #1 so it won't be a lead)
  //   in every Random Battle team.
  exports.potd = '';
  exports.superAdmins = {
  	"brekfree": 1
  };
  
  // crash guard - write errors to log file instead of crashing
  //   This is normally not recommended - if Node wants to crash, the
  //   server needs to be restarted
  //   Unfortunately, socket.io bug 409 requires some sort of crash guard
  //   https://github.com/LearnBoost/socket.io/issues/609
  exports.crashguard = true;
  
  // login server data - don't forget the http:// and the trailing slash
  //   This is the URL of the user database and ladder mentioned earlier.
  //   Don't change this setting - there aren't any other login servers right now
  exports.loginserver = 'http://play.pokemonshowdown.com/';
  exports.loginserverkeyalgo = "RSA-SHA1";
  exports.loginserverpublickeyid = 2;
  exports.loginserverpublickey = "-----BEGIN RSA PUBLIC KEY-----\n" +
  	"MIICCgKCAgEAtFldA2rTCsPgqsp1odoH9vwhf5+QGIlOJO7STyY73W2+io33cV7t\n" +
  	"ReNuzs75YBkZ3pWoDn2be0eb2UqO8dM3xN419FdHNORQ897K9ogoeSbLNQwyA7XB\n" +
  	"N/wpAg9NpNu00wce2zi3/+4M/2H+9vlv2/POOj1epi6cD5hjVnAuKsuoGaDcByg2\n" +
  	"EOullPh/00TkEkcyYtaBknZpED0lt/4ekw16mjHKcbo9uFiw+tu5vv7DXOkfciW+\n" +
  	"9ApyYbNksC/TbDIvJ2RjzR9G33CPE+8J+XbS7U1jPvdFragCenz+B3AiGcPZwT66\n" +
  	"dvHAOYRus/w5ELswOVX/HvHUb/GRrh4blXWUDn4KpjqtlwqY4H2oa+h9tEENCk8T\n" +
  	"BWmv3gzGBM5QcehNsyEi9+1RUAmknqJW0QOC+kifbjbo/qtlzzlSvtbr4MwghCFe\n" +
  	"1EfezeNAtqwvICznq8ebsGETyPSqI7fSbpmVULkKbebSDw6kqDnQso3iLjSX9K9C\n" +
  	"0rwxwalCs/YzgX9Eq4jdx6yAHd7FNGEx4iu8qM78c7GKCisygZxF8kd0B7V7a5UO\n" +
  	"wdlWIlTxJ2dfCnnJBFEt/wDsL54q8KmGbzOTvRq5uz/tMvs6ycgLVgA9r1xmVU+1\n" +
  	"6lMr2wdSzyG7l3X3q1XyQ/CT5IP4unFs5HKpG31skxlfXv5a7KW5AfsCAwEAAQ==\n" +
  	"-----END RSA PUBLIC KEY-----\n";
  
  // crashguardemail - if the server has been running for more than an hour
  //   and crashes, send an email using these settings, rather than locking down
  //   the server. Uncomment this definition if you want to use this feature;
  //   otherwise, all crashes will lock down the server.
  /**exports.crashguardemail = {
  	options: {
  		host: 'mail.example.com',
  		port: 465,
  		secure: true,
  		auth: {
  			user: 'example@domain.com',
  			pass: 'password'
  		}
  	},
  	from: 'crashlogger@example.com',
  	to: 'admin@example.com',
  	subject: 'Pokemon Showdown has crashed!'
  };**/
  
  // report joins and leaves - shows messages like "<USERNAME> joined"
  //   Join and leave messages are small and consolidated, so there will never
  //   be more than one line of messages.
  //   If this setting is set to `true`, it will override the client-side
  //   /hidejoins configuration for users.
  //   This feature can lag larger servers - turn this off if your server is
  //   getting more than 80 or so users.
  exports.reportjoins = false;
  
  // report joins and leaves periodically - sends silent join and leave messages in batches
  //   This setting will only be effective if `reportjoins` is set to false, and users will
  //   only be able to see the messages if they have the /showjoins client-side setting enabled.
  //   Set this to a positive amount of milliseconds if you want to enable this feature.
  exports.reportjoinsperiod = 0;
  
  // report battles - shows messages like "OU battle started" in the lobby
  //   This feature can lag larger servers - turn this off if your server is
  //   getting more than 160 or so users.
  exports.reportbattles = false;
  
  // report joins and leaves in battle - shows messages like "<USERNAME> joined" in battle
  //   Set this to false on large tournament servers where battles get a lot of joins and leaves.
  //   Note that the feature of turning this off is deprecated.
  exports.reportbattlejoins = true;
  
  // moderated chat - prevent unvoiced users from speaking
  //   This should only be enabled in special situations, such as temporarily
  //   when you're dealing with huge influxes of spammy users.
  exports.chatmodchat = false;
  exports.battlemodchat = false;
  exports.pmmodchat = false;
  
  // forced timer - force the timer on for all battles
  //   Players will be unable to turn it off.
  //   This setting can also be turned on with the command /forcetimer.
  exports.forcetimer = false;
  
  // backdoor - allows Pokemon Showdown system operators to provide technical
  //            support for your server
  //   This backdoor gives system operators (such as Zarel) console admin
  //   access to your server, which allow them to provide tech support. This
  //   can be useful in a variety of situations: if an attacker attacks your
  //   server and you are not online, if you need help setting up your server,
  //   etc. If you do not trust Pokemon Showdown with admin access, you should
  //   disable this feature.
  exports.backdoor = true;
  
  // List of IPs and user IDs with dev console (>> and >>>) access.
  // The console is incredibly powerful because it allows the execution of
  // arbitrary commands on the local computer (as the user running the
  // server). If an account with the console permission were compromised,
  // it could possibly be used to take over the server computer. As such,
  // you should only specify a small range of trusted IPs and users here,
  // or none at all. By default, only localhost can use the dev console.
  // In addition to connecting from a valid IP, a user must *also* have
  // the `console` permission in order to use the dev console.
  // Setting this to an empty array ([]) will disable the dev console.
  exports.consoleips = ['127.0.0.1'];
  
  // Whether to watch the config file for changes. If this is enabled,
  // then the config.js file will be reloaded when it is changed.
  // This can be used to change some settings using a text editor on
  // the server.
  exports.watchconfig = false;
  
  // logchat - whether to log chat rooms.
  exports.logchat = false;
  
  // logchallenges - whether to log challenge battles. Useful for tournament servers.
  exports.logchallenges = false;
  
  // loguserstats - how often (in milliseconds) to write user stats to the
  // lobby log. This has no effect if `logchat` is disabled.
  exports.loguserstats = 1000 * 60 * 10; // 10 minutes
  
  // validatorprocesses - the number of processes to use for validating teams
  // simulatorprocesses - the number of processes to use for handling battles
  // You should leave both of these at 1 unless your server has a very large
  // amount of traffic (i.e. hundreds of concurrent battles).
  exports.validatorprocesses = 1;
  exports.simulatorprocesses = 1;
  
  // inactiveuserthreshold - how long a user must be inactive before being pruned
  // from the `users` array. The default is 1 hour.
  exports.inactiveuserthreshold = 1000 * 60 * 60;
  
  // Custom avatars.
  // This allows you to specify custom avatar images for users on your server.
  // Place custom avatar files under the /config/avatars/ directory.
  // Users must be specified as userids -- that is, you must make the name all
  // lowercase and remove non-alphanumeric characters.
  //
  // Your server *must* be registered in order for your custom avatars to be
  // displayed in the client.
  exports.customavatars = {
  	//'userid': 'customavatar.png'
  };
  
  // Tournament announcements
  // When tournaments are created in rooms listed below, they will be announced in
  // the server's main tournament room (either the specified tourroom or by default
  // the room 'tournaments')
  exports.tourroom = '';
  exports.tourannouncements = [/* roomids */];
  
  // appealurl - specify a URL containing information on how users can appeal
  // disciplinary actions on your section. You can also leave this blank, in
  // which case users won't be given any information on how to appeal.
  exports.appealurl = '';
  
  // replsocketprefix - the prefix for the repl sockets to be listening on
  // replsocketmode - the file mode bits to use for the repl sockets
  exports.replsocketprefix = './logs/repl/';
  exports.replsocketmode = 0700;
  
  // permissions and groups:
  //   Each entry in `grouplist' is a seperate group. Some of the members are "special"
  //     while the rest is just a normal permission.
  //   The order of the groups determines their ranking.
  //   The special members are as follows:
  //     - symbol: Specifies the symbol of the group (as shown in front of the username)
  //     - id: Specifies an id for the group.
  //     - name: Specifies the human-readable name for the group.
  //     - root: If this is true, the group can do anything.
  //     - inherit: The group uses the group specified's permissions if it cannot
  //                  find the permission in the current group. Never make the graph
  //                  produced using this member have any cycles, or the server won't run.
  //     - jurisdiction: The default jurisdiction for targeted permissions where one isn't
  //                       explictly specified. "Targeted permissions" are permissions
  //                       that might affect another user, such as `ban' or `promote'.
  //                       's' is a special group where it means the user itself only
  //                       and 'u' is another special group where it means all groups
  //                       lower in rank than the current group.
  //     - roomonly: forces the group to be a per-room moderation rank only.
  //     - globalonly: forces the group to be a global rank only.
  //   All the possible permissions are as follows:
  //     - console: Developer console (>>).
  //     - lockdown: /lockdown and /endlockdown commands.
  //     - hotpatch: /hotpatch, /crashfixed and /savelearnsets commands.
  //     - ignorelimits: Ignore limits such as chat message length.
  //     - promote: Promoting and demoting. Will only work if the target user's current
  //                  group and target group are both in jurisdiction.
  //     - room<rank>: /roompromote to <rank> (eg. roomvoice)
  //     - ban: Banning and unbanning.
  //     - mute: Muting and unmuting.
  //     - lock: locking (ipmute) and unlocking.
  //     - receivemutedpms: Receive PMs from muted users.
  //     - forcerename: /fr command.
  //     - redirect: /redir command.
  //     - ip: IP checking.
  //     - alts: Alt checking.
  //     - modlog: view the moderator logs.
  //     - broadcast: Broadcast informational commands.
  //     - declare: /declare command.
  //     - announce: /announce command.
  //     - modchat: Set modchat.
  //     - potd: Set PotD.
  //     - forcewin: /forcewin command.
  //     - battlemessage: /a command.
  //     - tournaments: creating tournaments (/tour new, settype etc.)
  //     - tournamentsmoderation: /tour dq, autodq, end etc.
  //     - tournamentsmanagement: enable/disable tournaments.
  exports.grouplist = [
  	{
  		symbol: '~',
  		id: "admin",
  		name: "Administrator",
  		root: true,
  		globalonly: true
  	},
  	{
  		symbol: '&',
  		id: "leader",
  		name: "Leader",
  		inherit: '@',
  		jurisdiction: '@u',
  		promote: 'u',
  		forcewin: true,
  		declare: true,
  		modchatall: true,
  		rangeban: true,
  		potd: true,
  		disableladder: true,
  		globalonly: true,
  		tournamentsmanagement: true,
  		rank: 7
  	},
  	{
  		symbol: '#',
  		id: "owner",
  		name: "Room Owner",
  		inherit: '@',
  		jurisdiction: 'u',
  		roommod: true,
  		roomdriver: true,
  		declare: true,
  		modchatall: true,
  		roomonly: true,
  		tournamentsmanagement: true
  	},
  	{
  		symbol: '\u2605',
  		id: "player",
  		name: "Player",
  		inherit: '+',
  		roomvoice: true,
  		modchat: true,
  		roomonly: true,
  		privateroom: true,
  		joinbattle: true
  	},
  	{
  		symbol: '@',
  		id: "mod",
  		name: "Moderator",
  		inherit: '%',
  		jurisdiction: 'u',
  		ban: true,
  		modchat: true,
  		roomvoice: true,
  		forcerename: true,
  		ip: true,
  		alts: '@u',
  		tournaments: true
  	},
  	{
  		symbol: '%',
  		id: "driver",
  		name: "Driver",
  		inherit: '\u2295',
  		jurisdiction: 'u',
  		announce: true,
  		warn: true,
  		kick: true,
  		mute: true,
  		lock: true,
  		forcerename: true,
  		timer: true,
  		modlog: true,
  		alts: '%u',
  		bypassblocks: 'u%@&~',
  		receiveauthmessages: true,
  		tournamentsmoderation: true,
  		jeopardy: true,
  		joinbattle: true
  	},
  	{
  		symbol: '\u00A5',
  		id: "youtuber",
  		name: "Youtuber",
  		inherit: '\u2295',
  		jurisdiction: 'u',
  		youtube: true,
  		warn: true,
  		kick: true
  	},
  	{
  		symbol: '\u2295',
  		id: "operator",
  		name: "Operator",
  		inherit: '+',
  		tournamentsmoderation: true,
  		tournaments: true
  	},
  	{
  		symbol: '+',
  		id: "voice",
  		name: "Voice",
  		inherit: '$',
  		joinbattle: true,
  		broadcast: true
  	},
  	{
  		symbol: '$',
  		id: "destacado",
  		name: "Destacado",
  		inherit: ' ',
  		broadcast: true
  	},
  	{
  		symbol: ' ',
  		ip: 's',
  		alts: 's'
  	}
  ];