changeset 194:137ec6d45280

Re #33: Centralised requirement handling * Use central requirement handler to check each selection
author IBBoard <dev@ibboard.co.uk>
date Mon, 25 Apr 2011 12:58:50 +0000
parents eaa7b639d390
children 983d96be91f5
files FrmNewUnit.cs FrmNewUnit.resx
diffstat 2 files changed, 150 insertions(+), 152 deletions(-) [+]
line diff
     1.1 --- a/FrmNewUnit.cs	Sun Apr 03 14:50:34 2011 +0000
     1.2 +++ b/FrmNewUnit.cs	Mon Apr 25 12:58:50 2011 +0000
     1.3 @@ -10,7 +10,8 @@
     1.4  using IBBoard.Lang;
     1.5  using IBBoard.Windows.Forms;
     1.6  using IBBoard.WarFoundry.API;
     1.7 -using IBBoard.WarFoundry.API.Objects;
     1.8 +using IBBoard.WarFoundry.API.Objects;
     1.9 +using IBBoard.WarFoundry.API.Objects.Requirement;
    1.10  using IBBoard.Windows.Forms.I18N;
    1.11  
    1.12  namespace IBBoard.WarFoundry
    1.13 @@ -30,7 +31,6 @@
    1.14  		private System.Windows.Forms.ImageList imageList;
    1.15  		private System.Windows.Forms.Label lblNewUnitWarning;
    1.16  		private System.Windows.Forms.Label lblWarningIcon;
    1.17 -		private bool[] allowed;
    1.18  
    1.19  		public FrmNewUnit(Race race, Category cat, Army army)
    1.20  		{
    1.21 @@ -38,12 +38,10 @@
    1.22  
    1.23  			ControlTranslator.TranslateControl(this, cat.Name);
    1.24  			units = race.GetUnitTypes(cat);
    1.25 -			allowed = new bool[units.Length];
    1.26  			this.army = army;
    1.27  			
    1.28  			for (int i = 0; i<units.Length; i++)
    1.29  			{
    1.30 -				allowed[i] = army.CanAddUnitType(units[i]).Count == 0;
    1.31  				lstUnits.Items.Add(units[i].Name);
    1.32  			}
    1.33  		}
    1.34 @@ -70,106 +68,106 @@
    1.35  		/// </summary>
    1.36  		private void InitializeComponent()
    1.37  		{
    1.38 -			this.components = new System.ComponentModel.Container();
    1.39 -			System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmNewUnit));
    1.40 -			this.lstUnits = new System.Windows.Forms.ListBox();
    1.41 -			this.bttnCancel = new IBBoard.Windows.Forms.IBBButton();
    1.42 -			this.lblUnitList = new IBBoard.Windows.Forms.IBBLabel();
    1.43 -			this.bttnSelectUnit = new IBBoard.Windows.Forms.IBBButton();
    1.44 -			this.lblNewUnitWarning = new System.Windows.Forms.Label();
    1.45 -			this.imageList = new System.Windows.Forms.ImageList(this.components);
    1.46 -			this.lblWarningIcon = new System.Windows.Forms.Label();
    1.47 -			this.SuspendLayout();
    1.48 -			// 
    1.49 -			// lstUnits
    1.50 -			// 
    1.51 -			this.lstUnits.Location = new System.Drawing.Point(88, 8);
    1.52 -			this.lstUnits.Name = "lstUnits";
    1.53 -			this.lstUnits.Size = new System.Drawing.Size(272, 121);
    1.54 -			this.lstUnits.TabIndex = 7;
    1.55 -			this.lstUnits.SelectedIndexChanged += new System.EventHandler(this.lstUnits_SelectedIndexChanged);
    1.56 -			this.lstUnits.DoubleClick += new System.EventHandler(this.lstUnits_DoubleClick);
    1.57 -			this.lstUnits.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstUnits_MouseDown);
    1.58 -			// 
    1.59 -			// bttnCancel
    1.60 -			// 
    1.61 -			this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
    1.62 -			this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
    1.63 -			this.bttnCancel.Location = new System.Drawing.Point(8, 168);
    1.64 -			this.bttnCancel.Name = "bttnCancel";
    1.65 -			this.bttnCancel.Size = new System.Drawing.Size(80, 24);
    1.66 -			this.bttnCancel.TabIndex = 6;
    1.67 -			this.bttnCancel.Text = "Cancel";
    1.68 -			this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
    1.69 -			// 
    1.70 -			// lblUnitList
    1.71 -			// 
    1.72 -			this.lblUnitList.Location = new System.Drawing.Point(0, 8);
    1.73 -			this.lblUnitList.Name = "lblUnitList";
    1.74 -			this.lblUnitList.Size = new System.Drawing.Size(88, 80);
    1.75 -			this.lblUnitList.TabIndex = 5;
    1.76 -			this.lblUnitList.Text = "unit list";
    1.77 -			this.lblUnitList.TextAlign = System.Drawing.ContentAlignment.TopRight;
    1.78 -			// 
    1.79 -			// bttnSelectUnit
    1.80 -			// 
    1.81 -			this.bttnSelectUnit.Enabled = false;
    1.82 -			this.bttnSelectUnit.FlatStyle = System.Windows.Forms.FlatStyle.System;
    1.83 -			this.bttnSelectUnit.Location = new System.Drawing.Point(256, 168);
    1.84 -			this.bttnSelectUnit.Name = "bttnSelectUnit";
    1.85 -			this.bttnSelectUnit.Size = new System.Drawing.Size(104, 24);
    1.86 -			this.bttnSelectUnit.TabIndex = 4;
    1.87 -			this.bttnSelectUnit.Text = "create unit";
    1.88 -			this.bttnSelectUnit.Click += new System.EventHandler(this.bttnSelectUnit_Click);
    1.89 -			// 
    1.90 -			// lblNewUnitWarning
    1.91 -			// 
    1.92 -			this.lblNewUnitWarning.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
    1.93 -			this.lblNewUnitWarning.ImageList = this.imageList;
    1.94 -			this.lblNewUnitWarning.Location = new System.Drawing.Point(48, 136);
    1.95 -			this.lblNewUnitWarning.Name = "lblNewUnitWarning";
    1.96 -			this.lblNewUnitWarning.Size = new System.Drawing.Size(312, 32);
    1.97 -			this.lblNewUnitWarning.TabIndex = 9;
    1.98 -			this.lblNewUnitWarning.Text = "label1";
    1.99 -			this.lblNewUnitWarning.TextAlign = System.Drawing.ContentAlignment.TopRight;
   1.100 -			this.lblNewUnitWarning.Visible = false;
   1.101 -			// 
   1.102 -			// imageList
   1.103 -			// 
   1.104 -			this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
   1.105 -			this.imageList.TransparentColor = System.Drawing.Color.Transparent;
   1.106 -			this.imageList.Images.SetKeyName(0, "");
   1.107 -			// 
   1.108 -			// lblWarningIcon
   1.109 -			// 
   1.110 -			this.lblWarningIcon.Image = ((System.Drawing.Image)(resources.GetObject("lblWarningIcon.Image")));
   1.111 -			this.lblWarningIcon.Location = new System.Drawing.Point(8, 136);
   1.112 -			this.lblWarningIcon.Name = "lblWarningIcon";
   1.113 -			this.lblWarningIcon.Size = new System.Drawing.Size(40, 32);
   1.114 -			this.lblWarningIcon.TabIndex = 10;
   1.115 -			this.lblWarningIcon.Visible = false;
   1.116 -			// 
   1.117 -			// FrmNewUnit
   1.118 -			// 
   1.119 -			this.AcceptButton = this.bttnSelectUnit;
   1.120 -			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   1.121 -			this.CancelButton = this.bttnCancel;
   1.122 -			this.ClientSize = new System.Drawing.Size(370, 196);
   1.123 -			this.Controls.Add(this.lblWarningIcon);
   1.124 -			this.Controls.Add(this.lblNewUnitWarning);
   1.125 -			this.Controls.Add(this.bttnCancel);
   1.126 -			this.Controls.Add(this.lblUnitList);
   1.127 -			this.Controls.Add(this.bttnSelectUnit);
   1.128 -			this.Controls.Add(this.lstUnits);
   1.129 -			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
   1.130 -			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
   1.131 -			this.MaximizeBox = false;
   1.132 -			this.MinimizeBox = false;
   1.133 -			this.Name = "FrmNewUnit";
   1.134 -			this.ShowInTaskbar = false;
   1.135 -			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
   1.136 -			this.Text = "FrmNewUni";
   1.137 -			this.ResumeLayout(false);
   1.138 +            this.components = new System.ComponentModel.Container();
   1.139 +            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmNewUnit));
   1.140 +            this.lstUnits = new System.Windows.Forms.ListBox();
   1.141 +            this.bttnCancel = new IBBoard.Windows.Forms.IBBButton();
   1.142 +            this.lblUnitList = new IBBoard.Windows.Forms.IBBLabel();
   1.143 +            this.bttnSelectUnit = new IBBoard.Windows.Forms.IBBButton();
   1.144 +            this.lblNewUnitWarning = new System.Windows.Forms.Label();
   1.145 +            this.imageList = new System.Windows.Forms.ImageList(this.components);
   1.146 +            this.lblWarningIcon = new System.Windows.Forms.Label();
   1.147 +            this.SuspendLayout();
   1.148 +            // 
   1.149 +            // lstUnits
   1.150 +            // 
   1.151 +            this.lstUnits.Location = new System.Drawing.Point(88, 8);
   1.152 +            this.lstUnits.Name = "lstUnits";
   1.153 +            this.lstUnits.Size = new System.Drawing.Size(272, 121);
   1.154 +            this.lstUnits.TabIndex = 7;
   1.155 +            this.lstUnits.SelectedIndexChanged += new System.EventHandler(this.lstUnits_SelectedIndexChanged);
   1.156 +            this.lstUnits.DoubleClick += new System.EventHandler(this.lstUnits_DoubleClick);
   1.157 +            this.lstUnits.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstUnits_MouseDown);
   1.158 +            // 
   1.159 +            // bttnCancel
   1.160 +            // 
   1.161 +            this.bttnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
   1.162 +            this.bttnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
   1.163 +            this.bttnCancel.Location = new System.Drawing.Point(8, 168);
   1.164 +            this.bttnCancel.Name = "bttnCancel";
   1.165 +            this.bttnCancel.Size = new System.Drawing.Size(80, 24);
   1.166 +            this.bttnCancel.TabIndex = 6;
   1.167 +            this.bttnCancel.Text = "Cancel";
   1.168 +            this.bttnCancel.Click += new System.EventHandler(this.bttnCancel_Click);
   1.169 +            // 
   1.170 +            // lblUnitList
   1.171 +            // 
   1.172 +            this.lblUnitList.Location = new System.Drawing.Point(0, 8);
   1.173 +            this.lblUnitList.Name = "lblUnitList";
   1.174 +            this.lblUnitList.Size = new System.Drawing.Size(88, 80);
   1.175 +            this.lblUnitList.TabIndex = 5;
   1.176 +            this.lblUnitList.Text = "unit list";
   1.177 +            this.lblUnitList.TextAlign = System.Drawing.ContentAlignment.TopRight;
   1.178 +            // 
   1.179 +            // bttnSelectUnit
   1.180 +            // 
   1.181 +            this.bttnSelectUnit.Enabled = false;
   1.182 +            this.bttnSelectUnit.FlatStyle = System.Windows.Forms.FlatStyle.System;
   1.183 +            this.bttnSelectUnit.Location = new System.Drawing.Point(256, 168);
   1.184 +            this.bttnSelectUnit.Name = "bttnSelectUnit";
   1.185 +            this.bttnSelectUnit.Size = new System.Drawing.Size(104, 24);
   1.186 +            this.bttnSelectUnit.TabIndex = 4;
   1.187 +            this.bttnSelectUnit.Text = "create unit";
   1.188 +            this.bttnSelectUnit.Click += new System.EventHandler(this.bttnSelectUnit_Click);
   1.189 +            // 
   1.190 +            // lblNewUnitWarning
   1.191 +            // 
   1.192 +            this.lblNewUnitWarning.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
   1.193 +            this.lblNewUnitWarning.ImageList = this.imageList;
   1.194 +            this.lblNewUnitWarning.Location = new System.Drawing.Point(48, 136);
   1.195 +            this.lblNewUnitWarning.Name = "lblNewUnitWarning";
   1.196 +            this.lblNewUnitWarning.Size = new System.Drawing.Size(312, 32);
   1.197 +            this.lblNewUnitWarning.TabIndex = 9;
   1.198 +            this.lblNewUnitWarning.Text = "One or more unit requirements are not satisfied.";
   1.199 +            this.lblNewUnitWarning.TextAlign = System.Drawing.ContentAlignment.TopRight;
   1.200 +            this.lblNewUnitWarning.Visible = false;
   1.201 +            // 
   1.202 +            // imageList
   1.203 +            // 
   1.204 +            this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
   1.205 +            this.imageList.TransparentColor = System.Drawing.Color.Transparent;
   1.206 +            this.imageList.Images.SetKeyName(0, "");
   1.207 +            // 
   1.208 +            // lblWarningIcon
   1.209 +            // 
   1.210 +            this.lblWarningIcon.Image = ((System.Drawing.Image)(resources.GetObject("lblWarningIcon.Image")));
   1.211 +            this.lblWarningIcon.Location = new System.Drawing.Point(8, 136);
   1.212 +            this.lblWarningIcon.Name = "lblWarningIcon";
   1.213 +            this.lblWarningIcon.Size = new System.Drawing.Size(40, 32);
   1.214 +            this.lblWarningIcon.TabIndex = 10;
   1.215 +            this.lblWarningIcon.Visible = false;
   1.216 +            // 
   1.217 +            // FrmNewUnit
   1.218 +            // 
   1.219 +            this.AcceptButton = this.bttnSelectUnit;
   1.220 +            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   1.221 +            this.CancelButton = this.bttnCancel;
   1.222 +            this.ClientSize = new System.Drawing.Size(370, 196);
   1.223 +            this.Controls.Add(this.lblWarningIcon);
   1.224 +            this.Controls.Add(this.lblNewUnitWarning);
   1.225 +            this.Controls.Add(this.bttnCancel);
   1.226 +            this.Controls.Add(this.lblUnitList);
   1.227 +            this.Controls.Add(this.bttnSelectUnit);
   1.228 +            this.Controls.Add(this.lstUnits);
   1.229 +            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
   1.230 +            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
   1.231 +            this.MaximizeBox = false;
   1.232 +            this.MinimizeBox = false;
   1.233 +            this.Name = "FrmNewUnit";
   1.234 +            this.ShowInTaskbar = false;
   1.235 +            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
   1.236 +            this.Text = "FrmNewUni";
   1.237 +            this.ResumeLayout(false);
   1.238  
   1.239  		}
   1.240  		#endregion
   1.241 @@ -201,7 +199,7 @@
   1.242  			if (lstUnits.SelectedIndex>-1)
   1.243  			{
   1.244  				bttnSelectUnit.Enabled = true;
   1.245 -				lblNewUnitWarning.Visible = !allowed[lstUnits.SelectedIndex];
   1.246 +				lblNewUnitWarning.Visible = !Validates.AsOkay(RequirementHandler.AllowsAdding(SelectedUnit, army));
   1.247  				lblWarningIcon.Visible = lblNewUnitWarning.Visible;
   1.248  
   1.249  				if (lblNewUnitWarning.Visible)
     2.1 --- a/FrmNewUnit.resx	Sun Apr 03 14:50:34 2011 +0000
     2.2 +++ b/FrmNewUnit.resx	Mon Apr 25 12:58:50 2011 +0000
     2.3 @@ -126,54 +126,54 @@
     2.4          LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
     2.5          ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4
     2.6          DAAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABgAMA
     2.7 -        ASADAAEBAQABIAYAAUD/AP8AJAADAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/
     2.8 -        AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB//8AnQADAQH/
     2.9 -        AwEB/wIBASkB/wIBASwB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIB
    2.10 -        ASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIBASoB/wIB
    2.11 -        ASoB/wIBASoB/wIBASwB/wIBASwB/wIBASkB/wMBAf//AJEAAwEB/wIBAWsB/wIBAZ0B/wIBAZ8B/wIB
    2.12 -        AZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIB
    2.13 -        AZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIBAZ8B/wIB
    2.14 -        AZ8B/wIBAZ8B/wIBAZ8B/wIBAZ0B/wIBAXEB//8AjQADAQH/AgEBnAH/AjwBxAH/AnEB4AH/AnYB4gH/
    2.15 -        AnUB4gH/AnIB4QH/AnAB4QH/Am0B4AH/AmoB3wH/AmcB3wH/AmUB3gH/AmIB3gH/Al8B3QH/Al0B3AH/
    2.16 -        AloB3AH/AlcB2wH/AlQB2wH/AlIB2gH/Ak8B2gH/AkwB2QH/AkkB2AH/AkYB2AH/AkQB1wH/AkEB1wH/
    2.17 -        Aj8B1gH/AjcB1AH/AhwBvAH/AgEBngH//wCRAAIBAaAB/wJ6Ad0B/wIVAdAB/wIBAcwB/wIBAcwB/wIB
    2.18 -        AcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIB
    2.19 -        AcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIBAcwB/wIL
    2.20 -        Ac4B/wI5Ac8B/wIBAZ8B//8AkQACAQGhAf8CVwHHAf8COwHYAf8CAQHMAf8CowHbAf8C0gHgAf8C0gHg
    2.21 +        ASADAAEBAQABIAYAAUD/AP8AJAADAgH/AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/
    2.22 +        AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/AwIB//8AnQADAgH/
    2.23 +        AwIB/wICASoB/wICAS0B/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wIC
    2.24 +        ASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wICASsB/wIC
    2.25 +        ASsB/wICASsB/wICAS0B/wICAS0B/wICASoB/wMCAf//AJEAAwIB/wICAWwB/wICAZ0B/wICAZ8B/wIC
    2.26 +        AZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wIC
    2.27 +        AZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wICAZ8B/wIC
    2.28 +        AZ8B/wICAZ8B/wICAZ8B/wICAZ0B/wICAXIB//8AjQADAgH/AgIBnAH/Aj0BxAH/AnIB4AH/AncB4gH/
    2.29 +        AnYB4gH/AnMB4QH/AnEB4QH/Am4B4AH/AmsB3wH/AmgB3wH/AmYB3gH/AmMB3gH/AmAB3QH/Al4B3AH/
    2.30 +        AlsB3AH/AlgB2wH/AlUB2wH/AlMB2gH/AlAB2gH/Ak0B2QH/AkoB2AH/AkcB2AH/AkUB1wH/AkIB1wH/
    2.31 +        AkAB1gH/AjgB1AH/Ah0BvAH/AgIBngH//wCRAAICAaAB/wJ7Ad0B/wIWAdAB/wICAcwB/wICAcwB/wIC
    2.32 +        AcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wIC
    2.33 +        AcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wICAcwB/wIM
    2.34 +        Ac4B/wI6Ac8B/wICAZ8B//8AkQACAgGhAf8CWAHHAf8CPAHYAf8CAgHMAf8CowHbAf8C0gHgAf8C0gHg
    2.35          Af8C0wHhAf8C1AHiAf8C1AHiAf8C1QHjAf8C1gHkAf8C1wHlAf8C2AHmAf8C2AHmAf8C2QHnAf8C2QHn
    2.36 -        Af8C2gHoAf8C2gHoAf8C2wHpAf8C3AHqAf8C3QHrAf8C3gHsAf8CwQHnAf8CAQHMAf8CHAHRAf8CKgG/
    2.37 -        Af8CAQGiAf//AJEAAgEBngH/AhcBpwH/AnYB3QH/AgkBzgH/AlEB0wH/A+AB/wPhAf8D4QH/A+IB/wPj
    2.38 -        Af8D4wH/A+QB/wPlAf8D5gH/A+YB/wPnAf8D6AH/A+kB/wPqAf8D6gH/A+sB/wPsAf8D7QH/AmoB2wH/
    2.39 -        AgQBzQH/AjwB0wH/Ag0BpQH/AgEBoAH//wCVAAIBAaEB/wJTAcQB/wJFAdoB/wIDAcwB/wKzAdsB/wPg
    2.40 -        Af8D4QH/A+EB/wPiAf8D4wH/A+MB/wPkAf8DPQH/AzgB/wPmAf8D5wH/A+gB/wPpAf8D6gH/A+oB/wPr
    2.41 -        Af8CzQHnAf8CCAHNAf8CJQHTAf8CLQG7Af8CAQGgAf//AJkAAgEBngH/AhABpgH/AnoB3AH/Ag8BzwH/
    2.42 -        AjwB0QH/A98B/wPgAf8D4AH/A+EB/wPiAf8D4gH/A+MB/wM4Af8DNgH/A+YB/wPmAf8D5wH/A+gB/wPp
    2.43 -        Af8D6gH/A+oB/wJTAdcB/wIJAc4B/wJEAdIB/wIJAaIB/wIBAaAB//8AnQACAQGgAf8CRwG9Af8CUgHc
    2.44 -        Af8CAQHMAf8CogHaAf8D3wH/A+AB/wPgAf8D4QH/A+IB/wPiAf8D1wH/A9cB/wPlAf8D5gH/A+YB/wPn
    2.45 -        Af8D6AH/A+kB/wK6AeMB/wICAcwB/wIwAdUB/wIqAbcB/wIBAaAB//8AoQACAQGiAf8CCQGiAf8CegHa
    2.46 -        Af8CGAHRAf8CKwHQAf8C3QHfAf8D3wH/A+AB/wPgAf8D4QH/A+IB/wMmAf8DJgH/A+QB/wPlAf8D5QH/
    2.47 -        A+YB/wPnAf8D6AH/AjwB0wH/Ag8BzwH/AkoB0QH/AgYBogH/AgEBoQH//wClAAIBAZ8B/wI8AbgB/wJf
    2.48 -        Ad4B/wIBAcwB/wKNAdcB/wPfAf8D3wH/A+AB/wPgAf8D4QH/AxwB/wMcAf8D4wH/A+QB/wPlAf8D5QH/
    2.49 -        A+YB/wKkAd8B/wIBAcwB/wI9AdcB/wIlAbEB/wIBAaEB//8ArQACBAGiAf8CdAHXAf8CIwHTAf8CHAHO
    2.50 -        Af8C1wHdAf8D3wH/A98B/wPgAf8D4AH/Aw4B/wMOAf8D4gH/A+MB/wPkAf8D5QH/AuIB5AH/AikB0QH/
    2.51 -        AhkB0QH/AkwBzgH/AgMBogH/AgEBpAH//wCtAAIBAaAB/wIwAbEB/wJrAd8B/wICAcwB/wJ6AdUB/wPe
    2.52 -        Af8D3gH/A98B/wPgAf8DBAH/AwQB/wPhAf8D4gH/A+MB/wPkAf8CjAHaAf8CAgHMAf8CTAHaAf8CHwGs
    2.53 -        Af8CAQGfAf//ALUAAgIBoQH/Am0B0wH/AjAB1QH/AhEBzgH/As4B3AH/A94B/wPeAf8D1wH/AwEB/wMB
    2.54 -        Af8D2QH/A+EB/wPiAf8C2gHiAf8CGgHPAf8CJQHTAf8CSgHLAf8CAQGhAf//ALkAAgEBoAH/AiMBrAH/
    2.55 -        AnYB4AH/AgUBzQH/AmcB1AH/A90B/wPeAf8DzAH/AwEB/wMBAf8DzgH/A+EB/wPhAf8CdwHYAf8CBQHN
    2.56 -        Af8CWAHbAf8CFwGoAf8CAQGfAf//AL0AAgEBoAH/AmMBzAH/AjwB2AH/AggBzQH/AsMB2wH/A90B/wPB
    2.57 -        Af8DAQH/AwEB/wPDAf8D4AH/As4B3wH/Ag0BzQH/AjIB1gH/AkYBxwH/AgEBogH//wDBAAIBAZwB/wIY
    2.58 -        AakB/wJ9AeAB/wIJAc4B/wJTAdIB/wPdAf8D2gH/A88B/wPPAf8D3AH/A98B/wJiAdUB/wIKAc4B/wJj
    2.59 -        AdsB/wIQAaUB/wIBAZ4B//8AxQACAQGgAf8CVwHGAf8CSQHaAf8CAwHMAf8CtAHZAf8D3QH/A90B/wPe
    2.60 -        Af8D3gH/AsAB3AH/AgUBzAH/AkEB2QH/Aj8BwQH/AgEBoQH//wDJAAIBAZ4B/wIQAaYB/wKBAeAB/wIQ
    2.61 -        Ac8B/wJAAdEB/wPcAf8D3QH/A90B/wPeAf8CSwHSAf8CEgHPAf8CaQHbAf8CCgGiAf8CAQGfAf//AM0A
    2.62 -        AgEBnwH/AkwBwAH/AlYB3AH/AgEBzAH/AqIB1wH/A9wB/wPcAf8CrQHZAf8CAgHMAf8CUQHcAf8COAG8
    2.63 -        Af8CAQGgAf//ANEAAgEBpQH/AgkBowH/AoEB3gH/AhoB0QH/Ai0BzwH/AtoB2wH/A9wB/wI2AdAB/wId
    2.64 -        AdIB/wJrAdkB/wIFAaIB/wIBAZ4B//8A1QACAQGgAf8CQAG6Af8CZAHfAf8CAQHMAf8CjwHWAf8CmAHW
    2.65 -        Af8CAgHMAf8CYgHfAf8CLwG2Af8CAQGgAf//AN0AAgQBoQH/AnsB2gH/AiUB0wH/AhYBzgH/AhgBzQH/
    2.66 -        AisB1AH/AmkB1wH/AgIBoAH/AgEBnwH//wDdAAIBAZ4B/wIzAbQB/wJyAeEB/wICAcwB/wIEAc0B/wJy
    2.67 -        AeEB/wIlAa8B/wIBAZ4B//8A5QACAgGhAf8CbwHVAf8CQwHZAf8CRwHaAf8CYAHSAf8CAQGhAf//AOkA
    2.68 -        AgEBoAH/AhQBpwH/Am4B2gH/AmsB2gH/AhABpwH/AgEBnwH//wDtAAIBAZ0B/wIBAaEB/wIBAaAB/wIB
    2.69 +        Af8C2gHoAf8C2gHoAf8C2wHpAf8C3AHqAf8C3QHrAf8C3gHsAf8CwQHnAf8CAgHMAf8CHQHRAf8CKwG/
    2.70 +        Af8CAgGiAf//AJEAAgIBngH/AhgBpwH/AncB3QH/AgoBzgH/AlIB0wH/A+AB/wPhAf8D4QH/A+IB/wPj
    2.71 +        Af8D4wH/A+QB/wPlAf8D5gH/A+YB/wPnAf8D6AH/A+kB/wPqAf8D6gH/A+sB/wPsAf8D7QH/AmsB2wH/
    2.72 +        AgUBzQH/Aj0B0wH/Ag4BpQH/AgIBoAH//wCVAAICAaEB/wJUAcQB/wJGAdoB/wIEAcwB/wKzAdsB/wPg
    2.73 +        Af8D4QH/A+EB/wPiAf8D4wH/A+MB/wPkAf8DPgH/AzkB/wPmAf8D5wH/A+gB/wPpAf8D6gH/A+oB/wPr
    2.74 +        Af8CzQHnAf8CCQHNAf8CJgHTAf8CLgG7Af8CAgGgAf//AJkAAgIBngH/AhEBpgH/AnsB3AH/AhABzwH/
    2.75 +        Aj0B0QH/A98B/wPgAf8D4AH/A+EB/wPiAf8D4gH/A+MB/wM5Af8DNwH/A+YB/wPmAf8D5wH/A+gB/wPp
    2.76 +        Af8D6gH/A+oB/wJUAdcB/wIKAc4B/wJFAdIB/wIKAaIB/wICAaAB//8AnQACAgGgAf8CSAG9Af8CUwHc
    2.77 +        Af8CAgHMAf8CogHaAf8D3wH/A+AB/wPgAf8D4QH/A+IB/wPiAf8D1wH/A9cB/wPlAf8D5gH/A+YB/wPn
    2.78 +        Af8D6AH/A+kB/wK6AeMB/wIDAcwB/wIxAdUB/wIrAbcB/wICAaAB//8AoQACAgGiAf8CCgGiAf8CewHa
    2.79 +        Af8CGQHRAf8CLAHQAf8C3QHfAf8D3wH/A+AB/wPgAf8D4QH/A+IB/wMnAf8DJwH/A+QB/wPlAf8D5QH/
    2.80 +        A+YB/wPnAf8D6AH/Aj0B0wH/AhABzwH/AksB0QH/AgcBogH/AgIBoQH//wClAAICAZ8B/wI9AbgB/wJg
    2.81 +        Ad4B/wICAcwB/wKNAdcB/wPfAf8D3wH/A+AB/wPgAf8D4QH/Ax0B/wMdAf8D4wH/A+QB/wPlAf8D5QH/
    2.82 +        A+YB/wKkAd8B/wICAcwB/wI+AdcB/wImAbEB/wICAaEB//8ArQACBQGiAf8CdQHXAf8CJAHTAf8CHQHO
    2.83 +        Af8C1wHdAf8D3wH/A98B/wPgAf8D4AH/Aw8B/wMPAf8D4gH/A+MB/wPkAf8D5QH/AuIB5AH/AioB0QH/
    2.84 +        AhoB0QH/Ak0BzgH/AgQBogH/AgIBpAH//wCtAAICAaAB/wIxAbEB/wJsAd8B/wIDAcwB/wJ7AdUB/wPe
    2.85 +        Af8D3gH/A98B/wPgAf8DBQH/AwUB/wPhAf8D4gH/A+MB/wPkAf8CjAHaAf8CAwHMAf8CTQHaAf8CIAGs
    2.86 +        Af8CAgGfAf//ALUAAgMBoQH/Am4B0wH/AjEB1QH/AhIBzgH/As4B3AH/A94B/wPeAf8D1wH/AwIB/wMC
    2.87 +        Af8D2QH/A+EB/wPiAf8C2gHiAf8CGwHPAf8CJgHTAf8CSwHLAf8CAgGhAf//ALkAAgIBoAH/AiQBrAH/
    2.88 +        AncB4AH/AgYBzQH/AmgB1AH/A90B/wPeAf8DzAH/AwIB/wMCAf8DzgH/A+EB/wPhAf8CeAHYAf8CBgHN
    2.89 +        Af8CWQHbAf8CGAGoAf8CAgGfAf//AL0AAgIBoAH/AmQBzAH/Aj0B2AH/AgkBzQH/AsMB2wH/A90B/wPB
    2.90 +        Af8DAgH/AwIB/wPDAf8D4AH/As4B3wH/Ag4BzQH/AjMB1gH/AkcBxwH/AgIBogH//wDBAAICAZwB/wIZ
    2.91 +        AakB/wJ+AeAB/wIKAc4B/wJUAdIB/wPdAf8D2gH/A88B/wPPAf8D3AH/A98B/wJjAdUB/wILAc4B/wJk
    2.92 +        AdsB/wIRAaUB/wICAZ4B//8AxQACAgGgAf8CWAHGAf8CSgHaAf8CBAHMAf8CtAHZAf8D3QH/A90B/wPe
    2.93 +        Af8D3gH/AsAB3AH/AgYBzAH/AkIB2QH/AkABwQH/AgIBoQH//wDJAAICAZ4B/wIRAaYB/wKBAeAB/wIR
    2.94 +        Ac8B/wJBAdEB/wPcAf8D3QH/A90B/wPeAf8CTAHSAf8CEwHPAf8CagHbAf8CCwGiAf8CAgGfAf//AM0A
    2.95 +        AgIBnwH/Ak0BwAH/AlcB3AH/AgIBzAH/AqIB1wH/A9wB/wPcAf8CrQHZAf8CAwHMAf8CUgHcAf8COQG8
    2.96 +        Af8CAgGgAf//ANEAAgIBpQH/AgoBowH/AoEB3gH/AhsB0QH/Ai4BzwH/AtoB2wH/A9wB/wI3AdAB/wIe
    2.97 +        AdIB/wJsAdkB/wIGAaIB/wICAZ4B//8A1QACAgGgAf8CQQG6Af8CZQHfAf8CAgHMAf8CjwHWAf8CmAHW
    2.98 +        Af8CAwHMAf8CYwHfAf8CMAG2Af8CAgGgAf//AN0AAgUBoQH/AnwB2gH/AiYB0wH/AhcBzgH/AhkBzQH/
    2.99 +        AiwB1AH/AmoB1wH/AgMBoAH/AgIBnwH//wDdAAICAZ4B/wI0AbQB/wJzAeEB/wIDAcwB/wIFAc0B/wJz
   2.100 +        AeEB/wImAa8B/wICAZ4B//8A5QACAwGhAf8CcAHVAf8CRAHZAf8CSAHaAf8CYQHSAf8CAgGhAf//AOkA
   2.101 +        AgIBoAH/AhUBpwH/Am8B2gH/AmwB2gH/AhEBpwH/AgIBnwH//wDtAAICAZ0B/wICAaEB/wICAaAB/wIC
   2.102          AaAB//8A/wD/AP8A/wD/AP8AvwABQgFNAT4HAAE+AwABKAMAAYADAAEgAwABAQEAAQEGAAECFgAD/wEA
   2.103          BP8MAAHwAgABHwwAAcACAAEHDAABgAIAAQMMAAGAAgABAwwAAcACAAEDDAABwAIAAQMMAAHAAgABAwwA
   2.104          AeACAAEHDAAB4AIAAQcMAAHwAgABDwwAAfACAAEPDAAB+AIAAR8MAAH8AgABHwwAAfwCAAE/DAAB/gIA