diff --git a/QRValidation/CapCleaningControl/CIcon.cs b/QRValidation/CapCleaningControl/CIcon.cs
new file mode 100644
index 0000000..5dbe9d3
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CIcon.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public class CIcon
+ {
+ public string Text { get; set; }
+ public string Tag { get; set; }
+ public RectangleF Rect { get; set; }
+ public Boolean Focus { get; set; }
+ public Boolean Select { get; set; }
+ public CIcon() : this(string.Empty, RectangleF.Empty) { }
+ public CIcon(string tag,RectangleF rect)
+ {
+ Text = string.Empty;
+ Tag = tag;
+ Rect = rect;
+ }
+ public float X { get { return Rect.X; } }
+ public float Y { get { return Rect.Y; } }
+ public float W { get { return Rect.Width; } }
+ public float H { get { return Rect.Height; } }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CItem.cs b/QRValidation/CapCleaningControl/CItem.cs
new file mode 100644
index 0000000..97099f7
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CItem.cs
@@ -0,0 +1,208 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Drawing;
+namespace UIControl
+{
+ [Serializable]
+ public class CItem
+ {
+ public Boolean Active { get; set; }
+ public Boolean PLCWriteNo { get; set; }
+ public Boolean PLCWriteSize { get; set; }
+ public Boolean Delete { get; set; }
+ ///
+ /// 어떠한 포트에서 픽업 되었는지
+ ///
+ public int iPort { get; set; }
+
+ ///
+ /// 출력 포트
+ ///
+ public int oPort { get; set; }
+
+ public Boolean ExistError { get; set; }
+
+ ///
+ /// 배출여부
+ ///
+ public int ErrorOut { get; set; }
+
+ ///
+ /// 크기는 어떠한지(7 or 13)
+ ///
+ public string Size { get; set; }
+
+ ///
+ /// 존번호 0~10
+ ///
+ public int ZoneIndex { get; set; }
+
+ ///
+ /// 피커에의해서 드랍된 시간
+ ///
+ public DateTime DropTime { get; set; }
+
+ ///
+ /// 차수별 일련번호
+ ///
+ public UInt16 Seq { get; set; }
+
+ public DateTime BarcodeStart { get; set; }
+ public DateTime BarcodeEnd { get; set; }
+
+ ///
+ /// 바코드 처리가 완료디었는가?
+ /// 종료일자가 설정되면 처리완료로 합니다.
+ /// 201028
+ ///
+ public Boolean BarcodeProcess
+ {
+ get
+ {
+ if (BarcodeEnd.Year == 1982) return false;
+ else if (BarcodeEnd <= BarcodeStart) return false;
+ else return true;
+ }
+ }
+
+ public DateTime PlcStartTime { get; set; }
+ public DateTime PlcEndTime { get; set; }
+
+ public DateTime ZoneIntime { get; set; }
+
+ ///
+ /// 컨베이어에 들어온 시간
+ /// 피커에서 드랍되면 dropTime 과 동일하며, 외부에서 들어오면 센서가 최초 감지한 시간이 된다
+ ///
+ public DateTime InTime { get; set; }
+ public DateTime OutTime { get; set; }
+ public Rectangle Rect { get; set; }
+
+ ///
+ /// jobhistory에 연결되는 데이터 키
+ ///
+ public string JGUID { get; set; }
+
+ ///
+ /// 바코드 데이터와 연결되는 키값
+ ///
+ public string BGUID { get; set; }
+ public string RID { get; set; }
+ public string SID { get; set; }
+ public string VLOT { get; set; }
+ public string BarcodeRaw { get; set; }
+ public string BarcodeMsg { get; set; }
+ public Boolean Processing { get; set; }
+ public Boolean Complete { get; set; }
+ public string GUID { get; private set; }
+ public int Qty { get; set; }
+ public int QtyAcc { get; set; }
+ public int QtyMax { get; set; }
+ public List UnloaderMsg { get; set; }
+
+ ///
+ /// 바코드의 완료여부, timeout 혻은 설정 되었을때 적용
+ ///
+ public Boolean BarcodeDone { get; set; }
+
+ public Boolean hasBarcode
+ {
+ get
+ {
+ return !string.IsNullOrEmpty(RID);
+ }
+ }
+ ///
+ /// 지정한 문자가 포함되어잇다면 true 반환
+ ///
+ ///
+ ///
+ public Boolean CheckMessage(string msg)
+ {
+ if (UnloaderMsg == null || UnloaderMsg.Count < 1) return false;
+ foreach (var item in UnloaderMsg)
+ if (item.Contains(msg)) return true;
+ return false;
+ }
+
+ public void AddMessage(string msg)
+ {
+ if (this.UnloaderMsg.Contains(msg) == false)
+ UnloaderMsg.Add(msg);
+ }
+ public void ClearMessage()
+ {
+ this.UnloaderMsg.Clear();
+ }
+
+ public CItem()
+ {
+ ExistError = false;
+ Active = true;
+ Complete = false;
+ PLCWriteNo = false;
+ PLCWriteSize = false;
+ Qty = 0;
+ QtyAcc = 0; //200913 누계
+ QtyMax = 0; //200913 최대값
+ UnloaderMsg = new List();
+ ErrorOut = 0;
+ this.GUID = Guid.NewGuid().ToString();
+ BGUID = string.Empty;
+ JGUID = string.Empty;
+ VLOT = string.Empty;
+ Seq = 0;
+ SID = string.Empty;
+ BarcodeRaw = string.Empty;
+ BarcodeMsg = string.Empty;
+ RID = string.Empty;
+ Rect = Rectangle.Empty;
+ Delete = false;
+ Processing = false;
+ DropTime = DateTime.Parse("1982-11-23");
+ BarcodeStart = DateTime.Parse("1982-11-23");
+ BarcodeEnd = DateTime.Parse("1982-11-23");
+ PlcStartTime = DateTime.Parse("1982-11-23");
+ PlcEndTime = DateTime.Parse("1982-11-23");
+ InTime = DateTime.Parse("1982-11-23");
+ OutTime = DateTime.Parse("1982-11-23");
+ ZoneIntime = DateTime.Parse("1982-11-23");
+
+ ZoneIndex = -1;
+ oPort = -1;
+ iPort = -1;
+ Size = string.Empty;
+ }
+ public CItem Clone()
+ {
+ var item = new CItem();
+ item.Qty = Qty;
+ item.Seq = Seq;//0;
+ item.SID = SID;// string.Empty;
+ item.VLOT = VLOT;
+ item.BarcodeRaw = BarcodeRaw;//string.Empty;
+ item.BarcodeMsg = BarcodeMsg;//string.Empty;
+ item.RID = RID;//string.Empty;
+ item.Rect = Rect;//Rectangle.Empty;
+ item.Delete = Delete;//DropTime;//;
+ item.ExistError = ExistError;
+
+ item.DropTime = DropTime;// DateTime.Parse("1982-11-23");
+ item.BarcodeStart = BarcodeStart;// DateTime.Parse("1982-11-23");
+ item.BarcodeEnd = BarcodeEnd;//DropTime;//.Parse("1982-11-23");
+ item.PlcStartTime = PlcStartTime;//DateTime.Parse("1982-11-23");
+ item.PlcEndTime = PlcEndTime;// DateTime.Parse("1982-11-23");
+ item.InTime = InTime;//DropTime;//.Parse("1982-11-23");
+ item.OutTime = OutTime;//DateTime.Parse("1982-11-23");
+ item.ZoneIntime = ZoneIntime;//DateTime.Parse("1982-11-23");
+ item.ZoneIndex = ZoneIndex;
+ item.oPort = oPort;
+ item.iPort = iPort;
+ item.Size = Size;
+ return item;
+ }
+
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CMenu.cs b/QRValidation/CapCleaningControl/CMenu.cs
new file mode 100644
index 0000000..4112084
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CMenu.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace UIControl
+{
+
+
+ [Serializable]
+ public class CMenuButton
+ {
+ public eButtonType Shape { get; set; }
+ public string Text { get; set; }
+ public string Tag { get; set; }
+ public Rectangle Rect { get; set; }
+ public Color BackColor { get; set; }
+ public Color ForeColor { get; set; }
+ public Color OverColor { get; set; }
+ public Color BorderColor { get; set; }
+ public byte BorderSize { get; set; }
+ public Font Font { get; set; }
+ public CMenuButton() : this(string.Empty, string.Empty) { }
+ public CMenuButton(string text, string tag)
+ {
+ Font = null;
+ BorderColor = Color.Black;
+ BorderSize = 5;
+ Shape = eButtonType.Rectangle;
+ this.Text = text;
+ this.Tag = tag;
+ BackColor = Color.White;
+ OverColor = Color.Gold;
+ ForeColor = Color.Black;
+ text = "Button";
+ }
+ public string menutag { get; set; }
+ }
+
+ [Serializable]
+ public class CMenu
+ {
+ public string Title { get; set; }
+ public string Text { get; set; }
+ public string Tag { get; set; }
+ public RectangleF Rect { get; set; }
+ public Boolean Focus { get; set; }
+ public Boolean Select { get; set; }
+ public eMsgIcon Icon { get; set; }
+ public CMenuButton[] buttons { get; set; }
+ public Font Font { get; set; }
+ public Color BackColor { get; set; }
+ public Color ForeColor { get; set; }
+ public Color BorderColor { get; set; }
+
+ ///
+ /// 반드시 사용자의 허가를 받아야 넘어갈 수 있는 메뉴
+ ///
+ public Boolean RequireInput { get; set; }
+
+ public CMenu() : this("Contents", "Title", "tag", eMsgIcon.Info, null) { }
+
+ public CMenu(string text_, string title_, string tag_, eMsgIcon icon_, params CMenuButton[] buttons_)
+ {
+ this.Tag = tag_;
+ this.Title = title_;
+ this.Text = text_;
+ this.Icon = icon_;
+ this.buttons = buttons_;
+ this.Font = new Font("맑은 고딕", 15, FontStyle.Bold);
+ BackColor = Color.White;
+ ForeColor = Color.Black;
+ BorderColor = Color.Orange;
+ RequireInput = false;
+
+ }
+ public float X { get { return Rect.X; } }
+ public float Y { get { return Rect.Y; } }
+ public float W { get { return Rect.Width; } }
+ public float H { get { return Rect.Height; } }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CPicker.cs b/QRValidation/CapCleaningControl/CPicker.cs
new file mode 100644
index 0000000..7e72acd
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CPicker.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public class CPicker
+ {
+
+ ///
+ /// 릴의 크기가 들어있음 (7 or 13)
+ ///
+ public string ReelSize { get; set; }
+
+ ///
+ /// 릴이 있는 경우 해당 릴이 어느 포트에서 왔는지의 번호
+ ///
+ public short PortIndex { get; set; }
+
+ ///
+ /// 현재 작업이 프론트 포트의 작업인가? (portindex 값을 가지고 판단함)
+ ///
+ public Boolean isFrontJob
+ {
+ get
+ {
+ if (PortIndex <= 1) return true;
+ else return false;
+ }
+ }
+
+ public Boolean Overload { get; set; }
+
+
+ ///
+ /// VAC센서의 값을 가지고 있음, 현재 릴이 감지되었는가?
+ ///
+ public Boolean isReelDetect
+ {
+ get
+ {
+ return VacDetect.Where(t => t == true).Count() > 0;
+ }
+ }
+
+ ///
+ /// PICK후 60mm위치에서 미리 확인한 감지 상태값
+ /// 이값을 가지고 도중에 떨궜을 상황을 감지한다
+ ///
+ public Boolean PreCheckItemOn { get; set; }
+ public Boolean HasRealItemOn { get; set; }
+ public Boolean ItemOn { get; set; }
+ public Boolean[] VacDetect { get; set; }
+ public Boolean[] VacOutput { get; set; }
+ public CPicker()
+ {
+ this.Overload = false;
+ ReelSize = "7";
+ PortIndex = -1;
+ HasRealItemOn = false;
+ PreCheckItemOn = false;
+ }
+ public void Clear()
+ {
+ this.Overload = false;
+ ItemOn = false;
+ ReelSize = "--";
+ PortIndex = -1;
+ if(VacDetect != null && VacDetect.Length > 0)
+ {
+ for (int i = 0; i < VacDetect.Length; i++)
+ VacDetect[i] = false;
+ }
+ if (VacOutput != null && VacOutput.Length > 0)
+ {
+ for (int i = 0; i < VacOutput.Length; i++)
+ VacOutput[i] = false;
+ }
+ }
+
+
+
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CPort.cs b/QRValidation/CapCleaningControl/CPort.cs
new file mode 100644
index 0000000..cca0d50
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CPort.cs
@@ -0,0 +1,334 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public class CPort
+ {
+ public Boolean Safty1Err { get; set; }
+ public Boolean Safty2Err { get; set; }
+ public Boolean SaftyErr { get { return Safty1Err || Safty2Err; } }
+ public Boolean MotorRun { get; set; }
+ public Boolean MotorDir { get; set; }
+ public int arrowIndex { get; set; }
+ public Boolean LimitUpper { get; set; }
+ public Boolean LimitLower { get; set; }
+ public Boolean OverLoad
+ {
+ get
+ {
+ return LimitLower && DetectUp;
+ }
+ }
+ public byte AlignOK { get; set; }
+ public Boolean Ready { get; set; }
+
+ public Boolean DetectUp { get; set; } //상단에 있는 자재 감지 센서
+ public Boolean DetectDn { get; set; } //하단에 있는 자재 감지 센서
+ // public List Items { get; set; }
+
+ ///
+ /// 7인치 13인치의 크기 정보를 표시한다
+ ///
+ public string title { get; set; }
+ public int reelNo { get; set; }
+
+ ///
+ /// 차수별 릴 작업 수량이 표시됨
+ ///
+ public int reelCount { get; set; }
+
+ public int errorCount { get; set; }
+
+
+
+ public System.Drawing.Color bgColor { get; set; }
+ private Boolean _enable = false;
+
+ public Color fgColor { get; set; }
+ public Color fgColorCount { get; set; }
+
+ public Rectangle rect_title { get; set; }
+ public RectangleF Rect { get; set; }
+ public Rectangle rect_count { get; set; }
+ public int AnimationStepPort { get; set; }
+
+ ///
+ /// 0:notcart , 1:ready, 2:full
+ ///
+ public ushort State { get; set; }
+
+ public Boolean Enable
+ {
+ get { return _enable; }
+ set
+ {
+ _enable = value;
+ this.bgColor = value ? Color.Lime : Color.FromArgb(43, 43, 43);
+ this.fgColor = value ? Color.White : Color.DimGray;
+ }
+ }
+
+ public CPort()
+ {
+ Ready = false;
+ Enable = false;
+ rect_title = Rectangle.Empty;
+ rect_count = Rectangle.Empty;
+ Rect = RectangleF.Empty;
+ reelNo = -1;
+ arrowIndex = 2;
+ reelCount = 0;
+ fgColor = Color.Black;
+ Clear();
+ AlignOK = 0;
+ AnimationStepPort = 9;
+ //Items.Clear();
+ }
+ //public void ClearItem()
+ //{
+ // Items.Clear();
+ //}
+ public void Clear()
+ {
+ Enable = true;
+ Safty1Err = false;
+ Safty2Err = false;
+ MotorRun = false;
+ MotorDir = false;
+ LimitUpper = false;
+ LimitLower = false;
+ reelNo = 0;
+ reelCount = 0;
+ DetectUp = false;
+ DetectDn = false;
+ }
+
+ public void Display(Graphics g, Font fCnt, Font fMsg, Boolean InputMode,Boolean InputActive)
+ {
+ if (Enable == false)
+ {
+ g.DrawLine(Pens.DimGray, Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
+ g.DrawLine(Pens.DimGray, Rect.Right, Rect.Top, Rect.Left, Rect.Bottom);
+ }
+
+ //모터사용시 화살표
+ eDirection DirL = MotorDir == false ? eDirection.TopToBottom : eDirection.BottomToTop;
+ if (MotorRun) UIControl.Common.Draw_Arrow(g, Rect, DirL, arrowIndex, AnimationStepPort, Color.Gold, fMsg);
+
+ //글자표시 (크기 및 작업 수량)
+ var sf = new StringFormat
+ {
+ Alignment = StringAlignment.Center,
+ LineAlignment = StringAlignment.Center,
+ };
+
+
+ //리밋영역표시(상/하)
+ var limitSizeH = (int)(Rect.Height * 0.2);
+
+
+ if (OverLoad == true)//과적
+ {
+ g.FillRectangle(Brushes.Red, Rect);
+ if (InputMode)
+ {
+ using (Font f = new Font("맑은 고딕", 20, FontStyle.Bold))
+ {
+ g.DrawString("적재초과",
+ f,
+ new SolidBrush(fgColor), Rect, sf);
+ }
+ }
+ else
+ {
+
+ g.DrawString("OVER\nLOAD", fMsg, new SolidBrush(fgColor), Rect, sf);
+ }
+ }
+ else
+ {
+ //입력모드에서는 별도 처리를 한다
+ if (InputMode)
+ {
+ if(InputActive)
+ {
+ using (Font f = new Font("맑은 고딕", 20, FontStyle.Bold))
+ {
+ var msg = "투입준비";
+ g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Black)), Rect);
+ g.DrawString(msg, f, new SolidBrush(fgColor), Rect, sf);
+ }
+ }
+ else
+ {
+ using (Font f = new Font("맑은 고딕", 20, FontStyle.Bold))
+ {
+ var msg = "--";
+ g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Black)), Rect);
+ g.DrawString(msg, f, new SolidBrush(fgColor), Rect, sf);
+ }
+ }
+ }
+ else
+ {
+ if (errorCount > 5)
+ {
+ g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Gold)), Rect);
+ }
+ else
+ {
+ g.FillRectangle(new SolidBrush(Color.FromArgb(150, Color.Black)), Rect);
+ }
+
+
+ if (errorCount > 0)
+ {
+ if (errorCount > 05)
+ {
+ g.DrawString(reelCount.ToString() + "\n(ERROR)", fCnt, new SolidBrush(Color.Red), Rect, sf);
+ }
+ else g.DrawString(reelCount.ToString() + "\nE:" + errorCount.ToString(), fCnt, new SolidBrush(Color.Red), Rect, sf);
+ }
+ else
+ {
+
+ g.DrawString(reelCount.ToString(), fCnt, new SolidBrush(fgColor), Rect, sf);
+ }
+
+ }
+ }
+
+
+ //데두리표시 ( 비활성 회색, 활성 감지 : 라임, 미감지 흰색)
+ Color borderL = Enable ? (LimitUpper ? Color.Red : (LimitLower ? Color.Blue : (DetectUp ? Color.Lime : Color.White))) : Color.DimGray;
+ if (OverLoad) borderL = Color.White;
+ int bordersize = (InputMode ? 10 : 7);//ortL.enable ? 7 : 1;
+
+
+
+ if (OverLoad == false)
+ {
+ var fontsize = InputMode ? 9 : 9;
+ using (Font fnt = new Font("Consolas", fontsize, FontStyle.Bold))
+ {
+ //상단 리밋은 상단에
+ if (LimitUpper)
+ {
+ var msgLU = "+ LIMIT";
+ var fsize = g.MeasureString(msgLU, fnt);
+ var msgW = fsize.Width * 1.5f;
+ var msgH = fsize.Height * 1.5f;
+ if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
+
+ var RectMsgL = new RectangleF(
+ Rect.Left + (Rect.Width - msgW) / 2.0f,
+ Rect.Top - msgH - bordersize / 2.0f + 1,
+ msgW, msgH);
+
+ g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Red)), RectMsgL);
+ // g.DrawRectangle(Pens.Black, RectMsgL);
+ g.DrawString(msgLU, fnt, Color.White, RectMsgL);
+
+ }
+
+ //아이템 감지신호는 상단 아래쪽으로
+ if (Ready)
+ {
+ var msgLU = "PORT READY";
+ var fsize = g.MeasureString(msgLU, fnt);
+ var msgW = fsize.Width * 1.5f;
+ var msgH = fsize.Height * 1.5f;
+ if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
+
+ var RectMsgL = new RectangleF(
+ Rect.Left + (Rect.Width - msgW) / 2.0f,
+ Rect.Top + bordersize / 2.0f - 1,
+ msgW, msgH);
+
+ g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Lime)), RectMsgL);
+ // g.DrawRectangle(Pens.Black, RectMsgL);
+ g.DrawString(msgLU, fnt, Color.Black, RectMsgL);
+ }
+
+
+ //하단 리밋은 하단에표시
+ if (LimitLower)
+ {
+ var msgLU = "- LIMIT";
+ var fsize = g.MeasureString(msgLU, fnt);
+ var msgW = fsize.Width * 1.5f;
+ var msgH = fsize.Height * 1.5f;
+ if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
+
+ var RectMsgL = new RectangleF(
+ Rect.Left + (Rect.Width - msgW) / 2.0f,
+ Rect.Bottom + bordersize / 2.0f - 1,
+ msgW, msgH);
+
+ g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Blue)), RectMsgL);
+ //g.DrawString(msgLU, fnt, Brushes.White, RectMsgL, sf);
+ g.DrawString(msgLU, fnt, Color.White, RectMsgL);
+
+ }
+
+
+ //아이템 감지
+ if (DetectUp)
+ {
+ var msgLU = "ITEM DETECT";
+ var fsize = g.MeasureString(msgLU, fnt);
+ var msgW = fsize.Width * 1.5f;
+ var msgH = fsize.Height * 1.5f;
+ if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
+
+ var RectMsgL = new RectangleF(
+ Rect.Left + (Rect.Width - msgW) / 2.0f,
+ Rect.Bottom - msgH - bordersize / 2.0f + 1,
+ msgW, msgH);
+
+ g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Lime)), RectMsgL);
+ //g.DrawRectangle(Pens.Black, RectMsgL);
+ g.DrawString(msgLU, fnt, Color.Black, RectMsgL);
+
+ }
+
+ //안전 오류는 중앙에
+
+ if (SaftyErr && InputMode == false)
+ {
+ var msgS = "SAFTY ERROR";
+ var fsize = g.MeasureString(msgS, fMsg);
+ var msgW = fsize.Width * 1.5f;
+ var msgH = fsize.Height * 1.5f;
+ if (msgW > this.Rect.Width * 0.80f) msgW = this.Rect.Width * 0.8f;
+
+ var RectMsgL = new RectangleF(
+ Rect.Left + (Rect.Width - msgW) / 2.0f,
+ Rect.Top + (Rect.Height - msgH) / 2.0f,
+ msgW, msgH);
+
+ g.FillRectangle(new SolidBrush(Color.FromArgb(240, Color.Khaki)), RectMsgL);
+ g.DrawRectangle(Pens.Black, RectMsgL);
+ g.DrawString(msgS, fMsg, Color.Maroon, RectMsgL);
+
+ }
+ }
+
+ }
+
+ //테두리가 리밋영역을 감추도록 그린다
+ g.DrawRectangle(new Pen(borderL, bordersize), Rect.Left, Rect.Top, Rect.Width, Rect.Height);
+
+
+
+
+ sf.Dispose();
+ }
+
+
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CUnPortData.cs b/QRValidation/CapCleaningControl/CUnPortData.cs
new file mode 100644
index 0000000..bd29153
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CUnPortData.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public partial class Unloader
+ {
+ public class CPortData
+ {
+ ///
+ /// sid
+ ///
+ public string sid { get; set; }
+
+ ///
+ /// 현재진행된 수량
+ ///
+ public int qty { get; set; }
+
+ public string towername { get; set; }
+
+ ///
+ /// 전체기준수량
+ ///
+ public int kpc { get; set; }
+ public CPortData(string sid, int qty, int kpc,string tower_)
+ {
+ this.sid = sid;
+ this.qty = qty;
+ this.kpc = kpc;
+ this.Active = true;
+ this.towername = tower_;
+ }
+ public CPortData(string sid,string towr) : this(sid, 0, 0,towr) { }
+ public Boolean Active { get; set; }
+ }
+ }
+
+}
diff --git a/QRValidation/CapCleaningControl/CUnPortInfo.cs b/QRValidation/CapCleaningControl/CUnPortInfo.cs
new file mode 100644
index 0000000..1b12260
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CUnPortInfo.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public partial class Unloader
+ {
+ public class CPort
+ {
+ public int SortKey { get; set; }
+ public int portNo { get; set; }
+ public string portName { get; set; }
+
+ public int idx { get; set; }
+ [Browsable(false)]
+ public Rectangle rect_title { get; set; }
+ [Browsable(false)]
+ public Rectangle rect { get; set; }
+ [Browsable(false)]
+ public Rectangle rect_count { get; set; }
+ [Browsable(false)]
+ public Rectangle rect_signL { get; set; }
+ [Browsable(false)]
+ public Rectangle rect_signR { get; set; }
+
+ public List reelSID;
+
+ public int cartSize { get; set; }
+ public ushort cartState { get; set; }
+ public Boolean SIDUpdate { get; set; }
+
+ ///
+ /// 이값은 PLC에서 읽은 값이다
+ ///
+ public int reelCount { get; set; }
+ public int reelCountPLC { get; set; }
+
+ public string Mode { get; set; }
+
+ public CPort()
+ {
+ SortKey = 0;
+ idx = -1;
+ Mode = "AUTO";// ePortMode.Auto;
+ rect_title = Rectangle.Empty;
+ rect = Rectangle.Empty;
+ rect_count = Rectangle.Empty;
+ rect_signL = Rectangle.Empty;
+ rect_signR = Rectangle.Empty;
+ reelSID = new List();
+ cartSize = 0;
+ cartState = 0;
+ Clear();
+ SIDUpdate = true;
+
+ }
+ public void Clear()
+ {
+ reelSID.Clear();// = new string[0];// string.Empty;
+ reelCount = 0;
+ reelCountPLC = 0;
+
+ //기존에 있었는데 지웠다면 업데이트해야함
+ if (reelSID.Count > 0) SIDUpdate = true;
+ }
+ }
+ }
+
+}
diff --git a/QRValidation/CapCleaningControl/Common.cs b/QRValidation/CapCleaningControl/Common.cs
new file mode 100644
index 0000000..ba367e3
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Common.cs
@@ -0,0 +1,126 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public static class Common
+ {
+ public static void Draw_Arrow(Graphics g, RectangleF rect, eDirection dir, int arrowindex, int animstep, Color basecolor,Font f )
+ {
+ //컨베어 RUN 표시기 표시
+ var paddingX = rect.Height * 0.15f; //상하단에 이만큼의 여백을 준다
+ var paddingY = rect.Height * 0.15f;
+ var sigHeight = rect.Height - (paddingX * 2.0f);
+ var sigWidth = rect.Width / animstep;
+
+ if (dir == eDirection.BottomToTop || dir == eDirection.TopToBottom)
+ {
+ paddingX = rect.Width * 0.15f;
+ paddingY = rect.Height / 10.0f;
+ sigWidth = rect.Width - (paddingX * 2.0f);
+ sigHeight = rect.Height / 4.5f;
+ }
+ List pts = new List();
+
+ //사각영역을 표시해준다.
+ //if (dir == eDirection.LeftToRight || dir == eDirection.RightToLeft)
+ //{
+ // var rect2width = rect.Width / animstep;
+ // for (int i = 0; i < animstep; i++)
+ // {
+ // var rect2 = new RectangleF(rect.X + i * rect2width, rect.Y, rect2width, rect.Height);
+ // g.DrawRectangle(new Pen(Color.FromArgb(100, Color.Gray)), rect2.Left, rect2.Top, rect2.Width, rect2.Height);
+ // g.DrawString(i.ToString(), this.Font, Brushes.White, rect2.Left, rect2.Top);
+ // }
+ //}
+ //else
+ //{
+ // var rect2width = rect.Height / animstep;
+ // for (int i = 0; i < animstep; i++)
+ // {
+ // var rect2 = new RectangleF(rect.X, rect.Y + i * rect2width, rect.Width, rect2width);
+ // g.DrawRectangle(new Pen(Color.FromArgb(100, Color.Gray)), rect2.Left, rect2.Top, rect2.Width, rect2.Height);
+ // g.DrawString(i.ToString(), this.Font, Brushes.White, rect2.Left, rect2.Top);
+ // }
+ //}
+
+
+
+ var bX = rect.X + paddingX;
+ var bY = rect.Y + paddingY;
+
+ if (dir == eDirection.LeftToRight)
+ {
+ var gridSize = rect.Width / animstep;
+ pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth), rect.Y + paddingX));
+ pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth, rect.Y + paddingX));
+ pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth * 2.0f, rect.Y + paddingX + sigHeight / 2.0f));
+ pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth, rect.Y + paddingX + sigHeight));
+ pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth), rect.Y + paddingX + sigHeight));
+ pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth, rect.Y + paddingX + sigHeight / 2.0f));
+ }
+ else if (dir == eDirection.RightToLeft)
+ {
+ var gridSize = rect.Width / animstep;
+ paddingY = rect.Height * 0.1f; //상,하 여백을 10%크기로 한다
+ sigHeight = rect.Height - paddingY * 2.0f;
+
+ bX = rect.X + ((animstep - 1) - arrowindex) * gridSize;
+ bY = rect.Y + paddingY;
+
+ pts.Add(new PointF(bX, bY));
+ pts.Add(new PointF(bX - gridSize, bY + sigHeight / 2.0f));
+ pts.Add(new PointF(bX, bY + sigHeight));
+ pts.Add(new PointF(bX + gridSize, bY + sigHeight));
+ pts.Add(new PointF(bX, bY + sigHeight / 2.0f));
+ pts.Add(new PointF(bX + gridSize, bY));
+ }
+ else if (dir == eDirection.TopToBottom)
+ {
+ var gridSize = rect.Height / animstep;
+ paddingX = rect.Width * 0.2f; //상,하 여백을 10%크기로 한다
+ sigWidth = rect.Width - paddingX * 2.0f;
+
+ bX = rect.X + paddingX;
+ bY = rect.Y + (arrowindex + 1) * gridSize;
+
+
+ pts.Add(new PointF(bX, bY));
+ pts.Add(new PointF(bX + (sigWidth / 2.0f), bY + gridSize));
+ pts.Add(new PointF(bX + sigWidth, bY));
+ pts.Add(new PointF(bX + sigWidth, bY - gridSize));
+ pts.Add(new PointF(bX + (sigWidth / 2.0f), bY));
+ pts.Add(new PointF(bX, bY - gridSize));
+
+ }
+ else if (dir == eDirection.BottomToTop)
+ {
+ var gridSize = rect.Height / animstep;
+ paddingX = rect.Width * 0.2f; //상,하 여백을 10%크기로 한다
+ sigWidth = rect.Width - paddingX * 2.0f;
+
+ bX = rect.X + paddingX;
+ bY = rect.Y + ((animstep - 1) - arrowindex) * gridSize;
+
+
+ pts.Add(new PointF(bX, bY));
+ pts.Add(new PointF(bX + (sigWidth / 2.0f), bY - gridSize));
+ pts.Add(new PointF(bX + sigWidth, bY));
+ pts.Add(new PointF(bX + sigWidth, bY + gridSize));
+ pts.Add(new PointF(bX + (sigWidth / 2.0f), bY));
+ pts.Add(new PointF(bX, bY + gridSize));
+ }
+ if (pts.Count > 0)
+ {
+ g.FillPolygon(new SolidBrush(Color.FromArgb(10, basecolor)), pts.ToArray());
+ g.DrawPolygon(new Pen(Color.FromArgb(100, basecolor)), pts.ToArray());
+ }
+
+ //g.DrawString(arrowindex.ToString(), f, Brushes.Yellow, rect.Left, rect.Top - 20);
+ }
+
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CtlMotor.Designer.cs b/QRValidation/CapCleaningControl/CtlMotor.Designer.cs
new file mode 100644
index 0000000..a95d2b6
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CtlMotor.Designer.cs
@@ -0,0 +1,41 @@
+namespace UIControl
+{
+ partial class CtlMotor
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 구성 요소 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // CtlMotor
+ //
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CtlMotor.cs b/QRValidation/CapCleaningControl/CtlMotor.cs
new file mode 100644
index 0000000..46f11e2
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CtlMotor.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace UIControl
+{
+ public partial class CtlMotor : Control
+ {
+ public int Length { get; set; }
+ public Boolean Pin_Run { get; set; }
+ public Boolean Pin_DirCW { get; set; }
+ public Boolean Pin_Max { get; set; }
+ public Boolean Pin_Min { get; set; }
+
+ [Browsable(true)]
+ public new string Text { get; set; }
+ [Browsable(true)]
+ public new Font Font { get; set; }
+ public CtlMotor()
+ {
+ InitializeComponent();
+ Length = 100;
+ this.Size = new Size(80, 80);
+ this.MaximumSize = new Size(80, 80);
+ this.MinimumSize = new Size(40, 40);
+ if (this.Font == null) this.Font = new Font("맑은 고딕", 10);
+ if (this.Text == null) this.Text = string.Empty;
+ }
+
+ int anim = 0;
+ protected override void OnPaint(PaintEventArgs pe)
+ {
+ base.OnPaint(pe);
+ pe.Graphics.DrawRect(DisplayRectangle, Color.Gray, 2);
+ var rect = new Rectangle(DisplayRectangle.Left + 2, DisplayRectangle.Top + 2, 10, 10);
+ var rect2 = new Rectangle(DisplayRectangle.Right - 2 - 10, DisplayRectangle.Top + 2, 10, 10);
+ if (this.Pin_Run)
+ {
+ if (this.Pin_DirCW)
+ {
+ if (anim % 2 == 0)
+ pe.Graphics.FillEllipse(Brushes.Lime, rect2);
+ else
+ pe.Graphics.FillEllipse(Brushes.Yellow, rect2);
+ pe.Graphics.DrawEllipse(Pens.Black, rect2);
+ }
+ else
+ {
+ if (anim % 2 == 0)
+ pe.Graphics.FillEllipse(Brushes.Lime, rect);
+ else
+ pe.Graphics.FillEllipse(Brushes.Blue, rect);
+ pe.Graphics.DrawEllipse(Pens.Black, rect);
+ }
+
+ }
+ else
+ {
+ pe.Graphics.FillEllipse(Brushes.Red, rect);
+ pe.Graphics.DrawEllipse(Pens.Black, rect);
+ }
+
+ if (string.IsNullOrEmpty(Text) == false)
+ {
+ pe.Graphics.DrawString(Text,
+ this.Font,
+ Brushes.Black,
+ DisplayRectangle,
+ new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ }
+ anim += 1;
+ }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CtlMotor.resx b/QRValidation/CapCleaningControl/CtlMotor.resx
new file mode 100644
index 0000000..e5858cc
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CtlMotor.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
\ No newline at end of file
diff --git a/QRValidation/CapCleaningControl/CtlSensor.Designer.cs b/QRValidation/CapCleaningControl/CtlSensor.Designer.cs
new file mode 100644
index 0000000..1842104
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CtlSensor.Designer.cs
@@ -0,0 +1,36 @@
+namespace UIControl
+{
+ partial class CtlSensor
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 구성 요소 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/QRValidation/CapCleaningControl/CtlSensor.cs b/QRValidation/CapCleaningControl/CtlSensor.cs
new file mode 100644
index 0000000..d149623
--- /dev/null
+++ b/QRValidation/CapCleaningControl/CtlSensor.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace UIControl
+{
+ public partial class CtlSensor : Control
+ {
+ string text_ = string.Empty;
+ Font font_ = new Font("맑은 고딕", 10);
+ [Browsable(true)]
+ public new string Text { get { return text_; } set { text_ = value; this.Invalidate(); } }
+ [Browsable(true)]
+ public new Font Font { get { return font_; } set { font_ = value; this.Invalidate(); } }
+
+ public Color ColorOn { get; set; }
+ public Color ColorOff { get; set; }
+ public Boolean Value { get; set; }
+ public CtlSensor()
+ {
+ InitializeComponent();
+ this.MaximumSize = new Size(80, 80);
+ this.MinimumSize = new Size(40, 40);
+ this.ColorOn = Color.Lime;
+ this.ColorOff = Color.DimGray;
+ //if (this.Font == null) this.Font = new Font("맑은 고딕", 10);
+ //if (this.Text == null) this.Text = string.Empty;
+ Value = false;
+ }
+
+ protected override void OnPaint(PaintEventArgs pe)
+ {
+ base.OnPaint(pe);
+ // pe.Graphics.DrawRect( this.DisplayRectangle,Color.Gray,2);
+
+ var rect = new Rectangle(this.DisplayRectangle.Left + 1, DisplayRectangle.Top + 1, DisplayRectangle.Width - 2, DisplayRectangle.Height - 2);
+ if (Value) pe.Graphics.FillEllipse(new SolidBrush(ColorOn), rect);
+ else pe.Graphics.FillEllipse(new SolidBrush(ColorOff), rect);
+ pe.Graphics.DrawEllipse(Pens.Black, rect);
+
+
+ if (string.IsNullOrEmpty(Text) == false)
+ {
+ pe.Graphics.DrawString(Text,
+ this.Font,
+ Brushes.Black,
+ DisplayRectangle,
+ new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ }
+ }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/EnumStruct.cs b/QRValidation/CapCleaningControl/EnumStruct.cs
new file mode 100644
index 0000000..ab12a68
--- /dev/null
+++ b/QRValidation/CapCleaningControl/EnumStruct.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public enum eMsgIcon
+ {
+ None,
+ Info,
+ Alert,
+ Error,
+ Help
+ }
+ public enum eButtonType
+ {
+ Rectangle = 0,
+ Circle,
+ }
+ public enum eDirection
+ {
+ LeftToRight,
+ RightToLeft,
+ BottomToTop,
+ TopToBottom
+ }
+ public partial class Loader
+ {
+ enum eAxis : byte
+ {
+ Y_P = 0,
+ Z_F,
+ Z_R,
+ X_F,
+ X_R,
+ }
+ public enum eScean : byte
+ {
+ Nomal = 0,
+ MotHome,
+ Input,
+ }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Events.cs b/QRValidation/CapCleaningControl/Events.cs
new file mode 100644
index 0000000..cd89124
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Events.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public partial class Loader
+ {
+ public class MessageArgs : EventArgs
+ {
+ public string Message { get; set; }
+ public Boolean isError { get; set; }
+ public MessageArgs(string m, Boolean err)
+ {
+ this.Message = m;
+ this.isError = err;
+ }
+ }
+
+
+ public event EventHandler Message;
+
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Loader.Designer.cs b/QRValidation/CapCleaningControl/Loader.Designer.cs
new file mode 100644
index 0000000..ac23c6d
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Loader.Designer.cs
@@ -0,0 +1,38 @@
+namespace UIControl
+{
+ partial class Loader
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 구성 요소 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ }
+
+ #endregion
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Loader.cs b/QRValidation/CapCleaningControl/Loader.cs
new file mode 100644
index 0000000..15b3708
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Loader.cs
@@ -0,0 +1,2323 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing.Drawing2D;
+using System.Configuration;
+
+namespace UIControl
+{
+ public partial class Loader : UserControl
+ {
+ #region "Variable - Private"
+ Timer tm;
+ Boolean _ardebugmode = false;
+ eScean _scean = eScean.Nomal;
+ //기타 내부 변수
+ int AnimationStepConv = 30; //컨베어 이동 애니메이션 최대 값
+ //int AnimationStepPort = 9; //포트 이동 애니메이션 최대 값
+ Boolean bRemakeRect = true; //이값이 활성화되면 각 영역을 다시 그리게 된다
+ DateTime updatetime = DateTime.Now; //화면을 다시 그린 시간
+ Brush BRPortBg = new SolidBrush(Color.FromArgb(50, Color.DimGray));
+ Brush BRDetectDn = new SolidBrush(Color.FromArgb(50, Color.DimGray));
+ StringFormat sfCenter;
+ StringFormat sfLeft = new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center };
+ SolidBrush brVacOff = new SolidBrush(Color.FromArgb(150, Color.White));
+ SolidBrush brVacOn = new SolidBrush(Color.FromArgb(200, Color.Lime));
+
+ Pen penVacOn = new Pen(Color.Red, 5);
+ Pen penVacOff = new Pen(Color.Black, 5);
+
+ //영역(큰 그림?) (bRemakeRect 에 의 해 생성된다)
+ RectangleF rect_main = RectangleF.Empty;
+ RectangleF rect_frontShuttle = RectangleF.Empty;
+ RectangleF rect_rearShuttle = RectangleF.Empty;
+ RectangleF rect_conveyor = RectangleF.Empty;
+ RectangleF rect_picker = RectangleF.Empty;
+
+ //영역(피커)
+ RectangleF rect_picker_rear = RectangleF.Empty;
+ RectangleF rect_picker_front = RectangleF.Empty;
+ RectangleF rect_picker_rear_vac1 = RectangleF.Empty;
+ RectangleF rect_picker_rear_vac2 = RectangleF.Empty;
+ RectangleF rect_picker_rear_vac3 = RectangleF.Empty;
+ RectangleF rect_picker_rear_vac4 = RectangleF.Empty;
+ RectangleF rect_picker_front_vac1 = RectangleF.Empty;
+ RectangleF rect_picker_front_vac2 = RectangleF.Empty;
+ RectangleF rect_picker_front_vac3 = RectangleF.Empty;
+ RectangleF rect_picker_front_vac4 = RectangleF.Empty;
+
+ //X축 포트 (F-L:0, F-R:1, R-L:2, R-R:3
+ //RectangleF[] rect_port = new RectangleF[4];
+ RectangleF[] rect_zone = new RectangleF[11];
+
+ CIcon[] icons = new CIcon[6];
+ List Buttons = new List();
+ List menuButtons = new List();
+
+ ///
+ /// 외부에서 입력된 릴의 갯수
+ ///
+ int ExtInputCount = 0;
+ #endregion
+
+ #region "Variable - Public"
+ public double[] arMotorPosition = new double[] { 0, 0, 0, 0, 0 };
+ public int ConveyorRunPoint = 1; //컨베어 모터 이동시 이동 화살표의 위치값(내부 타이머에의해 증가함)
+ public double arMcLengthW = 1460;
+ public double arMcLengthH = 1350;//
+ #endregion
+
+ #region "Property"
+
+ ///
+ /// 현재 메뉴가 표시되어있는가?
+ ///
+ public Boolean HasPopupMenu { get; private set; }
+ ///
+ /// 현재표시된 메뉴는 사용자의 입력을 반드시 받아야 하는가?
+ ///
+ public Boolean PopupMenuRequireInput { get; private set; }
+ public Font arFont_PortMessage { get; set; }
+ public Boolean LockXF { get; set; }
+ public Boolean LockXR { get; set; }
+ public Boolean LockYP { get; set; }
+
+ public eScean Scean { get { return _scean; } set { _scean = value; bRemakeRect = true; this.Invalidate(); } }
+
+ //컨베이어에 설치된 자재 감지 센서
+ public Boolean[] arDI_Cv_Detect { get; set; }
+ //컨베이어 입구 안전 센서
+ public Boolean arInitMOT { get; set; }
+ public Boolean arJobEND { get; set; }
+ public Boolean arLowDiskSpace { get; set; } //용량 부족 메세지 여부
+ public double arFreespace { get; set; } //남은 디스크 용량 비율
+
+ public Boolean arDI_Safty_CvIn { get; set; }
+ public Boolean arDI_SaftyOk { get; set; }
+
+ //작업을 선택하면 설정되는 작업일자와 차수이다
+ public string arJobDate { get; set; }
+ public string arJobSeq { get; set; }
+
+ public Boolean[] arMOT_LimUp = new bool[] { false, false, false, false, false };
+ public Boolean[] arMOT_LimDn = new bool[] { false, false, false, false, false };
+ public Boolean[] arMOT_Origin = new bool[] { false, false, false, false, false };
+ public Boolean[] arMOT_Alm = new bool[] { false, false, false, false, false };
+ public Boolean[] arMOT_HSet = new bool[] { false, false, false, false, false };
+ public Boolean[] arMOT_SVOn = new bool[] { false, false, false, false, false };
+
+ public Boolean arFlag_WaitPLC { get; set; }
+ public Boolean arFlag_WaitBCD2 { get; set; }
+ public Boolean arFlag_WaitBCD1 { get; set; }
+ public Boolean arFlag_BusyExtIn { get { return ExtInputCount > 0; } }
+ public Boolean arFlag_Minspace { get; set; }
+
+ public byte arUnloaderSeq { get; set; }
+ public Boolean arFlag_UnloaderBusy { get; set; }
+ public Boolean arFlag_UnloaderErr { get; set; }
+ public Boolean arConn_REM { get; set; }
+
+
+ public Boolean arFG_RDY_YP_FPICKON { get; set; }
+ public Boolean arFG_RDY_YP_FPICKOF { get; set; }
+ public Boolean arFG_RDY_YP_RPICKON { get; set; }
+ public Boolean arFG_RDY_YP_RPICKOF { get; set; }
+
+ public Boolean arFG_CMD_YP_FPICKON { get; set; }
+ //public Boolean arFG_CMD_YP_FPICKOF { get; set; }
+ public Boolean arFG_CMD_YP_RPICKON { get; set; }
+ //public Boolean arFG_CMD_YP_RPICKOF { get; set; }
+
+
+
+ //컨베이어 출구 안전 센서
+ public Boolean arDI_Safty_CvOut { get; set; }
+
+ //비상정지 센서 상태
+ public Boolean arDI_Emergency { get; set; }
+
+ public Boolean arDIAir { get; set; }
+
+ public Boolean arConn_MOT { get; set; }
+ public Boolean arConn_DIO { get; set; }
+ public Boolean arConn_BCD { get; set; }
+ public Boolean arConn_PLC { get; set; }
+
+ public int arLastDetectIndex { get; set; }
+
+
+ public Boolean arDebugMode { get { return _ardebugmode; } set { this._ardebugmode = value; Invalidate(); } }
+
+ public CPort[] arVar_Port { get; set; }
+ public CPicker[] arVar_Picker { get; set; }
+
+ public Boolean arConvRun { get; set; }
+
+
+ public Boolean arIsRunning { get; set; }
+ public Boolean arFGInputMode { get; set; }
+ public Boolean arFGInputFL { get; set; }
+ public Boolean arFGInputFR { get; set; }
+ public Boolean arFGInputRL { get; set; }
+ public Boolean arFGInputRR { get; set; }
+
+
+ private List zitem = new List();
+ public long[] zonetime = new long[11];
+
+ public Font arFont_count { get; set; }
+ public Font arFont_picker { get; set; }
+
+ public double arMotorLengthY { get; set; }
+ public double arMotorLengthXF { get; set; }
+ public double arMotorLengthXR { get; set; }
+
+ private CMenu[] _menus = null;
+ public CMenu[] arMenus { get { return _menus; } set { _menus = value; this.Invalidate(); } }
+
+ #endregion
+
+ public Loader()
+ {
+ InitializeComponent();
+
+ // Set Optimized Double Buffer to reduce flickering
+ this.SetStyle(ControlStyles.UserPaint, true);
+ this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
+ this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
+ this.SetStyle(ControlStyles.ContainerControl, false);
+ this.SetStyle(ControlStyles.Selectable, true);
+
+
+ this.Resize += Loader_Resize;
+
+ sfCenter = new StringFormat();
+ sfCenter.Alignment = StringAlignment.Center;
+ sfCenter.LineAlignment = StringAlignment.Center;
+
+ // Redraw when resized
+ this.SetStyle(ControlStyles.ResizeRedraw, true);
+ tm = new Timer();
+ tm.Interval = 50; //10frame;
+ tm.Tick += Tm_Tick;
+
+ arLastDetectIndex = -1;
+ arFont_PortMessage = new Font("Consolas", 11, FontStyle.Bold);
+ arFont_picker = new Font("Arial", 10, FontStyle.Bold);
+
+ arUnloaderSeq = 0;
+ arMotorLengthY = 400;
+ arMotorLengthXF = 580;
+ arMotorLengthXR = 590;
+ arJobDate = string.Empty;
+ arJobSeq = string.Empty;
+
+ arDI_Cv_Detect = new bool[8];
+ for (int i = 0; i < arDI_Cv_Detect.Length; i++)
+ arDI_Cv_Detect[i] = false;
+
+ bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
+ if (designMode == false) tm.Start();
+
+ arFont_count = new Font("Consolas", 30, FontStyle.Bold);
+
+ //기본수량설정됨
+ arVar_Port = new CPort[4];
+ arVar_Picker = new CPicker[2];
+ for (int i = 0; i < rect_zone.Length; i++)
+ rect_zone[i] = RectangleF.Empty;
+
+ for (int i = 0; i < zonetime.Length; i++)
+ zonetime[i] = 0;
+
+ for (int i = 0; i < icons.Length; i++)
+ icons[i] = new CIcon();
+
+ //미리 10개를 생성한다. 슬롯에 10개이상 생기기 않는다.
+ zitem = new List(10);
+ for (int i = 0; i < zitem.Count; i++)
+ zitem[i] = new CItem();
+ }
+
+
+
+
+ protected override void OnMouseMove(MouseEventArgs e)
+ {
+ base.OnMouseMove(e);
+ if (this.icons == null || icons.Length < 1) return;
+
+ var item = this.icons.Where(t => t.Rect.Contains(e.Location)).FirstOrDefault();
+
+ //선택된 것이 잇다면 모두 해제를 해준다.
+ icons.Where(t => t.Focus == true).ToList().ForEach(t => t.Focus = false);
+
+
+ if (item != null)
+ {
+ item.Focus = true;
+ this.Cursor = Cursors.Hand;
+ }
+ else
+ {
+ this.Cursor = Cursors.Arrow;
+ }
+ }
+
+ public class ZoneItemClickEventargs : EventArgs
+ {
+ public CItem item { get; private set; }
+ public ZoneItemClickEventargs(CItem item_)
+ {
+ this.item = item_;
+ }
+ }
+ public class IconClickEventargs : EventArgs
+ {
+ public CIcon item { get; private set; }
+ public IconClickEventargs(CIcon item_)
+ {
+ this.item = item_;
+ }
+ }
+ public class MenuItemClickEventargs : EventArgs
+ {
+ public CMenuButton item { get; private set; }
+ public MenuItemClickEventargs(CMenuButton item_)
+ {
+ this.item = item_;
+ }
+ }
+ public event EventHandler ButtonClick;
+ public event EventHandler IConClick;
+ public event EventHandler ZoneItemClick;
+ protected override void OnMouseClick(MouseEventArgs e)
+ {
+ base.OnMouseClick(e);
+
+ if (e.Button == MouseButtons.Left)
+ {
+ var item = this.icons.Where(t => t.Rect.Contains(e.Location)).FirstOrDefault();
+ if (item != null)
+ {
+ //다른 메뉴가 선택되어잇다면 동작하지 않게 한다.
+ if (IConClick != null)
+ IConClick(this, new IconClickEventargs(item));
+ }
+
+ //삭제된 아이템은 선택되지 않게 한다 201013
+ lock (zitem)
+ {
+ var zitem = this.zitem.Where(t => t.Rect.Contains(e.Location) && t.Delete == false).FirstOrDefault();
+ if (zitem != null)
+ {
+ //특정 존의 아이템을 선택했다
+ if (ZoneItemClick != null)
+ ZoneItemClick(this, new ZoneItemClickEventargs(zitem));
+
+ }
+
+ }
+
+ //메뉴의해 생성된 버튼
+ var zbbut = this.menuButtons.Where(t => t.Rect.Contains(e.Location)).FirstOrDefault();
+ if (zbbut != null)
+ {
+ //특정 존의 아이템을 선택했다
+ if (ButtonClick != null)
+ ButtonClick(this, new MenuItemClickEventargs(zbbut));
+
+ }
+
+ //아이콘
+ var zbut = this.Buttons.Where(t => t.Rect.Contains(e.Location)).FirstOrDefault();
+ if (zbut != null)
+ {
+ //특정 존의 아이템을 선택했다
+ if (ButtonClick != null)
+ ButtonClick(this, new MenuItemClickEventargs(zbut));
+ }
+
+ }
+ }
+ void Loader_Resize(object sender, EventArgs e)
+ {
+ bRemakeRect = true;
+ }
+
+
+ public void RemakeRect()
+ {
+ bRemakeRect = true;
+ }
+ void makeRect_Input()
+ {
+ rect_main = new RectangleF(
+ DisplayRectangle.Left + DisplayRectangle.Width * 0.05f,
+ DisplayRectangle.Top + DisplayRectangle.Height * 0.05f,
+ DisplayRectangle.Width * 0.9f,
+ DisplayRectangle.Height * 0.9f);
+
+ //화면에 꽉차도록 전체 영역을 할당한다.
+ var cx = rect_main.Left + rect_main.Width / 2.0f;
+ var cy = rect_main.Top + rect_main.Height / 2.0f;
+
+ var padding = (int)(rect_main.Width * 0.03);
+
+ arVar_Port[2].Rect = new Rectangle(
+ (int)rect_main.Left + padding,
+ (int)rect_main.Top + padding,
+ (int)((cx - rect_main.Left) - padding * 2),
+ (int)((cy - rect_main.Top) - padding * 2));
+
+ arVar_Port[3].Rect = new Rectangle(
+ (int)cx + padding,
+ (int)rect_main.Top + padding,
+ (int)((cx - rect_main.Left) - padding * 2),
+ (int)((cy - rect_main.Top) - padding * 2));
+
+ arVar_Port[0].Rect = new Rectangle(
+ (int)rect_main.Left + padding,
+ (int)cy + padding,
+ (int)((cx - rect_main.Left) - padding * 2),
+ (int)((cy - rect_main.Top) - padding * 2));
+
+ arVar_Port[1].Rect = new Rectangle(
+ (int)cx + padding,
+ (int)cy + padding,
+ (int)((cx - rect_main.Left) - padding * 2),
+ (int)((cy - rect_main.Top) - padding * 2));
+ }
+ void makeRect_MotHome()
+ {
+ rect_main = new RectangleF(
+ DisplayRectangle.Left + DisplayRectangle.Width * 0.05f,
+ DisplayRectangle.Top + DisplayRectangle.Height * 0.05f,
+ DisplayRectangle.Width * 0.9f,
+ DisplayRectangle.Height * 0.9f);
+ }
+
+ double CvtMMtoPX_W(double PosMM, double StartX)
+ {
+ //컨베어 기준으로 값을 반환한ㄷ.
+ return StartX + rect_main.Width * (PosMM / arMcLengthW);
+ }
+ double CvtMMtoPX_H(double PosMM, double StartY)
+ {
+ //컨베어 기준으로 값을 반환한ㄷ.
+ return StartY + rect_main.Height * (PosMM / arMcLengthH);
+ }
+
+
+
+ #region "Menu Method"
+ public void ClearMenu()
+ {
+ _menus = null;
+ this.Invalidate();
+ }
+ public void AddMenu(CMenu menu)
+ {
+ var curCnt = 0;
+ if (this._menus != null) curCnt = this._menus.Length;
+ Array.Resize(ref _menus, curCnt + 1);
+ _menus[curCnt] = menu;
+ this.Invalidate();
+ }
+
+ public void DelMenu(CMenu menu)
+ {
+ List newlist = new List();
+ for (int i = 0; i < _menus.Length; i++)
+ {
+ if (_menus[i] != menu) newlist.Add(_menus[i]);
+ }
+ this._menus = newlist.ToArray();
+ this.Invalidate();
+ }
+
+ public void DelMenu(int idx)
+ {
+ List newlist = new List();
+ for (int i = 0; i < _menus.Length; i++)
+ {
+ if (i != idx) newlist.Add(_menus[i]);
+ }
+ this._menus = newlist.ToArray();
+ this.Invalidate();
+ }
+ public void DelMenu()
+ {
+ //제거할 아이템이 없다
+ if (_menus == null || _menus.Length < 1) return;
+
+ if (_menus.Length == 1) _menus = null;
+ else
+ {
+ //마지막요소를 제거 해주낟
+ Array.Resize(ref _menus, _menus.Length - 1);
+
+ }
+
+ this.Invalidate();
+ }
+ #endregion
+
+ ///
+ /// 각 영역을 현재 크기대비하여 재계산 한다
+ ///
+ void makeRect_Normal()
+ {
+
+
+ rect_main = new RectangleF(
+ DisplayRectangle.Left + DisplayRectangle.Width * 0.025f,
+ DisplayRectangle.Top + DisplayRectangle.Height * 0.025f,
+ DisplayRectangle.Width * 0.95f,
+ DisplayRectangle.Height * 0.8f);
+
+ //X축 모션(셔틀) 표시
+ var xPos1 = rect_main.Left + (rect_main.Width * 0.175);
+ var xPos2 = rect_main.Right - xPos1;
+ var yposR = rect_main.Height * 0.15;
+ var yposF = rect_main.Height * 0.85;
+ var h0p5 = rect_main.Height * 0.03;
+ var w0p5 = (rect_main.Width * 0.035) * ((rect_main.Height * 1.0) / rect_main.Width);
+
+ //var conv_height = rect_main.Height * 0.3;
+
+ var cx = (float)(rect_main.Top + (rect_main.Width / 2.0));
+ var cy = (float)(rect_main.Top + (rect_main.Height / 2.0));
+
+
+ var conv_height = CvtMMtoPX_H(350, 0); //컨베이어 높이
+ var conv_width = CvtMMtoPX_W(arMcLengthW, 0); //컨베어이어너비는 장비 너비와 같다
+
+ rect_conveyor = new RectangleF(rect_main.Left,
+ (float)(rect_main.Top + (rect_main.Height - conv_height) / 2.0f),
+ (float)conv_width,
+ (float)conv_height);
+
+ var h10p = rect_main.Height * 0.03;
+ var pickWidth = rect_main.Width * 0.02f;
+
+ //프론트셔틀의 영역(가동 영역) - 아래서 450mm 떨어진곳
+ var xAxisLengthMM = arMcLengthW - 200; // 컨베어 길이에서 좌우 100mm 씩 리밋센서가 있다
+ var xAxisLengthPX = CvtMMtoPX_W(xAxisLengthMM, rect_conveyor.Left);
+ rect_frontShuttle = new RectangleF(
+ (float)(CvtMMtoPX_W(100, rect_conveyor.Left)),
+ (float)(CvtMMtoPX_H(arMcLengthH - 410 - 10, rect_main.Top)),
+ (float)xAxisLengthPX,
+ (float)(CvtMMtoPX_H(20, 0)));
+
+ //리어셔틀의 영역(가동 영역) - 위에서 450mm
+ rect_rearShuttle = new RectangleF(
+ (float)(CvtMMtoPX_W(100, rect_conveyor.Left)),
+ (float)(CvtMMtoPX_H(410 - 10, rect_main.Top)),
+ (float)xAxisLengthPX,
+ (float)(CvtMMtoPX_H(20, 0)));
+
+
+ //세로축 총길이 1400mm Y축 모터는 양끝에 100mm 의 여유가 있으며, Y축
+
+
+ var pickerX = CvtMMtoPX_W(750, rect_conveyor.Left);
+ rect_picker = new RectangleF(
+ (float)(pickerX - (pickWidth / 2.0f)),
+ (float)(rect_rearShuttle.Top),
+ (float)(pickWidth),
+ (float)(rect_frontShuttle.Bottom - rect_rearShuttle.Top)
+ );
+
+
+ //Y축 피커 관련 세부 영역 설정 (VAC 와 원)
+
+ //전체영역의 80% 영역에 Y-로봇의 축을 그린다.
+ //var motorMax = 400; //전체 가동 길이 400mm
+ RectangleF rect = rect_picker;
+ var MotPosPx = rect.Top + rect.Height * (this.arMotorPosition[0] / (this.arMotorLengthY * 1.0f));
+ cx = rect.Left + rect.Width / 2.0f;
+
+ //상(Rear), 하(Front)로 영역을 그린다
+ var port_height = rect.Height * 0.25f;
+ var port_width = port_height;
+ //;// var port_width = rect.Width * 3f;
+ //port_width = port_height;
+ var port_space = CvtMMtoPX_H(350 / 2.0f, 0);
+ var port_spacex = CvtMMtoPX_W(10, 0); ;
+
+ var PickerSizeW = CvtMMtoPX_W(145, 0);// (float)(Math.Max(CvtMMtoPX_W(150, 0), CvtMMtoPX_H(15, 0)));
+ var PickerSizeH = PickerSizeW;// CvtMMtoPX_H(130, 0);//(float)(Math.Max(CvtMMtoPX_W(150, 0), CvtMMtoPX_H(15, 0)));
+ var PickerSpaceH = CvtMMtoPX_H(350, 0);
+
+
+ rect_picker_rear = new RectangleF(
+ (float)(cx + port_spacex),
+ (float)(MotPosPx - PickerSpaceH - PickerSizeH / 2.0f),
+ (float)PickerSizeW,
+ (float)PickerSizeH);
+ rect_picker_front = new RectangleF(
+ (float)(cx + port_spacex),
+ (float)(MotPosPx),
+ (float)PickerSizeW,
+ (float)PickerSizeH);
+
+ var pointoffset = 5;
+ rect_picker_rear_vac1 = new RectangleF(
+ (float)rect_picker_rear.Left + pointoffset,
+ (float)rect_picker_rear.Top + pointoffset,
+ (float)rect_picker_rear.Width * 0.2f,
+ (float)rect_picker_rear.Height * 0.2f);
+ rect_picker_rear_vac2 = new RectangleF(
+ (float)rect_picker_rear.Right - rect_picker_rear_vac1.Width - pointoffset,
+ (float)rect_picker_rear_vac1.Top,
+ (float)rect_picker_rear_vac1.Width,
+ (float)rect_picker_rear_vac1.Height);
+ rect_picker_rear_vac3 = new RectangleF(
+ (float)rect_picker_rear.Left + pointoffset,
+ (float)rect_picker_rear.Bottom - rect_picker_rear_vac1.Height - pointoffset,
+ (float)rect_picker_rear_vac1.Width,
+ (float)rect_picker_rear_vac1.Height);
+ rect_picker_rear_vac4 = new RectangleF(
+ (float)rect_picker_rear.Right - rect_picker_rear_vac1.Width - pointoffset,
+ (float)rect_picker_rear.Bottom - rect_picker_rear_vac1.Height - pointoffset,
+ (float)rect_picker_rear_vac1.Width,
+ (float)rect_picker_rear_vac1.Height);
+
+ rect_picker_front_vac1 = new RectangleF(
+ (float)rect_picker_front.Left + pointoffset,
+ (float)rect_picker_front.Top + pointoffset,
+ (float)rect_picker_front.Width * 0.2f,
+ (float)rect_picker_front.Height * 0.2f);
+ rect_picker_front_vac2 = new RectangleF(
+ (float)rect_picker_front.Right - rect_picker_front_vac1.Width - pointoffset,
+ (float)rect_picker_front_vac1.Top,
+ (float)rect_picker_front_vac1.Width,
+ (float)rect_picker_front_vac1.Height);
+ rect_picker_front_vac3 = new RectangleF(
+ (float)rect_picker_front.Left + pointoffset,
+ (float)rect_picker_front.Bottom - rect_picker_front_vac1.Height - pointoffset,
+ (float)rect_picker_front_vac1.Width,
+ (float)rect_picker_front_vac1.Height);
+ rect_picker_front_vac4 = new RectangleF(
+ (float)rect_picker_front.Right - rect_picker_front_vac1.Width - pointoffset,
+ (float)rect_picker_front.Bottom - rect_picker_front_vac1.Height - pointoffset,
+ (float)rect_picker_front_vac1.Width,
+ (float)rect_picker_front_vac1.Height);
+
+
+ //각 존의 영역 확인
+
+ //컨베어의 릴감지센서 위치를 표시한다
+ var senseW = rect_conveyor.Width * 0.02f;
+ var senseH = rect_conveyor.Height * 0.05f;
+ var slist = new double[] { 20, 340, 550, 890, 1110, 1440 };// new double[] { 0.02, 0.25, 0.4, 0.6, 0.75, 0.9 }; //센서의 위치정보(컨베어좌측기준)
+
+
+
+ //센서가 포함된 존의 영역을 생성한다
+ for (int i = 0; i < slist.Length; i++)
+ {
+ //선으로 영역을 표시해준다.
+ var PosMM = rect_conveyor.Width * (slist[i] / arMcLengthW);
+ var x = (float)(rect_conveyor.Left + PosMM);
+ var rx = x - senseW / 2.0f;
+ rect_zone[i * 2] = new RectangleF(rx, rect_conveyor.Top, senseW, rect_conveyor.Height);
+ }
+
+ var arraylis = new int[] { 1, 3, 5, 7, 9 };
+ var zterm = 4;
+ for (int i = 0; i < arraylis.Length; i++)
+ {
+ var idx = arraylis[i];
+ rect_zone[idx] = new RectangleF(
+ rect_zone[idx - 1].Right + zterm,
+ rect_zone[idx - 1].Top,
+ rect_zone[idx + 1].Left - rect_zone[idx - 1].Right - zterm * 2,
+ rect_zone[idx - 1].Height);
+ }
+
+ //아이콘영역
+
+ float ix = rect_main.Left;
+ float iy = rect_main.Bottom + 20;
+ Size iconSizeW = new Size(80, 80);
+ int idxIcon = 0;
+ ix = rect_main.Left;
+ iy = rect_main.Bottom + 20;
+ icons[idxIcon++] = new CIcon("bcd", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ ix += 85;
+ icons[idxIcon++] = new CIcon("plc", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ ix += 85;
+ icons[idxIcon++] = new CIcon("mot", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ ix += 85;
+ icons[idxIcon++] = new CIcon("emg", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ ix += 85;
+ icons[idxIcon++] = new CIcon("sft", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ ix += 85;
+ icons[idxIcon++] = new CIcon("air", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ //ix += 85;
+ //icons[idxIcon++] = new CIcon("debug", new RectangleF(ix, iy, iconSizeW.Width, iconSizeW.Height));
+
+ ////버튼 생성해준다
+ //var ButL = this.Buttons.Where(t => t.Tag == "INPUTL").FirstOrDefault();
+ //var ButR = this.Buttons.Where(t => t.Tag == "INPUTR").FirstOrDefault();
+ //var butWidth = 64;
+ //var butPadding = 1;
+ //var butHeight = butWidth;// (int)(rect_conveyor.Height - butPadding * 2);
+ //if (ButL == null)
+ //{
+ // var newbutton = new CMenuButton("투입\n출구", "INPUTL");
+ // newbutton.BorderSize = 1;
+ // newbutton.Shape = eButtonType.Rectangle;
+ // newbutton.Rect = new Rectangle((int)rect_main.Left + butPadding, (int)rect_main.Bottom - butHeight - butPadding, butWidth, butHeight);
+ // this.Buttons.Add(newbutton);
+ //}
+ //else
+ //{
+ // ButL.Rect = new Rectangle((int)rect_main.Left + butPadding, (int)rect_main.Bottom - butHeight - butPadding, butWidth, butHeight);
+ // ButL.Shape = eButtonType.Rectangle;
+ //}
+ //if (ButR == null)
+ //{
+ // var newbutton = new CMenuButton("투입\n입구", "INPUTR");
+ // newbutton.BorderSize = 1;
+ // newbutton.Shape = eButtonType.Rectangle;
+ // newbutton.Rect = new Rectangle((int)rect_main.Right - butWidth - butPadding, (int)rect_main.Bottom - butHeight - butPadding, butWidth, butHeight);
+ // this.Buttons.Add(newbutton);
+ //}
+ //else
+ //{
+ // ButR.Rect = new Rectangle((int)rect_main.Right - butWidth - butPadding, (int)rect_main.Bottom - butHeight - butPadding, butWidth, butHeight);
+ // ButR.Shape = eButtonType.Rectangle;
+ //}
+ }
+
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
+ e.Graphics.InterpolationMode = InterpolationMode.High;
+ e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
+
+ base.OnPaint(e);
+
+ if (bRemakeRect)
+ {
+ if (Scean == eScean.Nomal) makeRect_Normal();
+ else if (Scean == eScean.MotHome) makeRect_MotHome();
+ else if (Scean == eScean.Input) makeRect_Input();
+ bRemakeRect = false;
+ }
+
+ try
+ {
+ if (this.Scean == eScean.Nomal) Scean_Normal(e.Graphics);
+ else if (this.Scean == eScean.MotHome) Scean_MotHome(e.Graphics);
+ else if (this.Scean == eScean.Input) Scean_Input(e.Graphics);
+ }
+ catch (Exception ex)
+ {
+ //오류발생시 해당 오류를 표시한다 210110
+ e.Graphics.DrawString(ex.Message, this.Font, Brushes.Red, 100, 100);
+ }
+
+
+ //삭제대상 아이템을 삭제한다
+ ZoneItem_AutoClear();
+
+
+
+ //var str = "CAN DROP:" + isCanPickerDrop.ToString() + " : HOLD;" + zoneitemholding.ToString//() + ",TOT:" + ZoneItemCountTotal.ToString();
+ // e.Graphics.DrawString(str, this.Font, Brushes.White, 100, 100);
+ }
+
+ public double[] HomeProgress { get; set; }
+
+ public UIControl.CItem ZoneItem_Get(int zoneIndex)
+ {
+ lock (zitem)
+ return zitem.Where(t => t.ZoneIndex == zoneIndex).FirstOrDefault();
+ }
+ public UIControl.CItem ZoneItem_Get(string guid)
+ {
+ lock (zitem)
+ return zitem.Where(t => t.GUID == guid).FirstOrDefault();
+ }
+ public UIControl.CItem ZoneItem_GetJ(string jguid)
+ {
+ lock (zitem)
+ return zitem.Where(t => t.JGUID == jguid).FirstOrDefault();
+ }
+ //public int CountZoneItem(int zoneIndex)
+ //{
+ // return zoneitem.Where(t => t.Delete == false && t.ZoneIndex == zoneIndex).Count();
+ //}
+ private void ZoneItem_AutoClear()
+ {
+ //삭제된 아이템을 소거한다(작업중인녀석은 삭제되지 않게한다)
+ lock (zitem)
+ {
+ var delitems = this.zitem.Where(t => t.Delete == true && t.Processing == false).ToList();
+ for (int i = delitems.Count - 1; i >= 0; i--)
+ {
+ //이미 삭제된 아이템이므로 수량에는 적용하지 않는다
+ var item = delitems[i];
+ RaiseMessage("[{0}] 아이템소거 : Zone:{1},iPort:{2},Id:{3},Sid:{4},jguid:{5}", false, item.Seq, item.ZoneIndex, item.iPort, item.RID, item.SID, item.JGUID);
+ this.zitem.Remove(delitems[i]);
+ }
+ }
+ }
+ public void ZoneItem_Clear()
+ {
+ RaiseMessage("ClearZoneItem", false);
+ lock (zitem)
+ {
+ //직접모두 삭제하게 함
+ //this.zitem.ForEach((t) => { t.Delete = true; t.ZoneIndex = -1; });
+ this.zitem.Clear();
+ ExtInputCount = 0;
+ //this.ZoneItemCountTotal = 0;
+ }
+
+ }
+ public void ZoneItem_Delete(string itemguid)
+ {
+ lock (zitem)
+ {
+ var item = zitem.Where(t => t.GUID == itemguid).FirstOrDefault();
+ if (item != null)
+ {
+ if (item.ZoneIndex > ExitInputBusyBaseZone) ExtInputCount -= 1;
+ item.Delete = true;
+ item.ZoneIndex = -1;
+ if (ExtInputCount < 0) ExtInputCount = 0;
+ }
+ // this.ZoneItemCountTotal -= 1;
+ }
+ }
+ public void ZoneItem_Delete(UIControl.CItem item)
+ {
+ RaiseMessage("[{0}] Delte Item : ZONE:{1},iPORT:{2},RID:{3},SID:{4}", false, item.Seq, item.ZoneIndex, item.iPort, item.RID, item.SID);
+ item.Delete = true;
+ if (item.ZoneIndex > ExitInputBusyBaseZone) ExtInputCount -= 1;
+ item.ZoneIndex = -1;
+ if (ExtInputCount < 0) ExtInputCount = 0;
+ }
+
+ ///
+ /// 지정된 시간을 초과한 자료를 삭제한다
+ ///
+ ///
+ public List ZoneItem_GetOldItemList(int timeSec)
+ {
+
+ var retval = new List();
+ var basetime = DateTime.Now.AddSeconds(-timeSec);
+ lock (zitem)
+ {
+ var list = this.zitem.Where(t => t.Delete == false && t.InTime <= basetime).ToList();
+ foreach (var item in list)
+ retval.Add(item.GUID);
+ }
+ return retval;
+ }
+
+ public void ZoneItem_Add(UIControl.CItem item)
+ {
+
+ //해당 아이템을 지정한 존에 추가한다.
+ //만약 해당 존에 아이템이 있다면 정보를 변형만 한다
+ lock (zitem)
+ {
+ var curitems = this.zitem.Where(t => t.ZoneIndex == item.ZoneIndex && t.Delete == false).ToList();
+ if (curitems.Count == 0)
+ {
+ RaiseMessage("[{0}] ##### AddItem Zone:{1},iPort:{2},JGUID:{3}", false, item.Seq, item.ZoneIndex, item.iPort, item.JGUID);
+ item.Delete = false;
+ this.zitem.Add(item);
+ if (item.ZoneIndex > ExitInputBusyBaseZone) ExtInputCount += 1;
+ //return item.GUID;
+ }
+ else
+ {
+ //기존 정보를 업데이트 해버린다.
+ var firstdr = curitems.FirstOrDefault();
+ if (firstdr != null)
+ {
+ if (firstdr.ZoneIndex > ExitInputBusyBaseZone) ExtInputCount -= 1;
+
+ RaiseMessage("[{0}] ##### UpdateItem Zone:{1},iPort:{2},Id:{3},Sid:{4} => Zone:{5},iPort:{6},Id:{7},Sid:{8}", true,
+ firstdr.Seq,
+ firstdr.ZoneIndex, firstdr.iPort, firstdr.RID, firstdr.SID,
+ item.ZoneIndex, item.iPort, item.RID, item.SID);
+
+ firstdr.ZoneIndex = item.ZoneIndex;
+ firstdr.DropTime = item.DropTime;
+ firstdr.InTime = item.InTime;
+ firstdr.iPort = item.iPort;
+ firstdr.Size = item.Size;
+ firstdr.Delete = false;
+
+ if (item.ZoneIndex > ExitInputBusyBaseZone) ExtInputCount += 1;
+
+ }
+ //return item.GUID;
+ }
+ if (ExtInputCount < 0) ExtInputCount = 0;
+ }
+
+ }
+ ///
+ /// 해당 존에 아이템이 들어왔다
+ ///
+ ///
+ public CItem ZoneItem_MoveIn(int InputZoneIdx, int offset = 1)
+ {
+ if (InputZoneIdx < 0 || InputZoneIdx > 9) throw new Exception("zonindex 값은 0~10 입니다");
+
+ //RaiseMessage("CVItem In : 존에 아이템 투입 입력존 : {0}", false, InputZoneIdx);
+ //해당 아이템 이후의 자재를 모두 Offset 만큼 shit 해준다
+ //Boolean shiftok = false;
+
+ //입력하려는 존 이후의 1개 데이터를 가져와서 존을 이동시켜준다
+ CItem target = null;
+ lock (zitem)
+ {
+ target = this.zitem.Where(t => t.Delete == false && t.ZoneIndex > InputZoneIdx && t.ZoneIndex <= InputZoneIdx + offset).OrderBy(t => t.ZoneIndex).FirstOrDefault();
+ if (target != null)
+ {
+ //RaiseMessage("CVItemIn : 아이템 존 설정 Zone:{0},iPort:{1},Id:{2},Sid:{3} => NewZone:{4}", false, target.ZoneIndex, target.iPort, target.RID, target.SID, InputZoneIdx);
+ if (target.ZoneIndex > ExitInputBusyBaseZone) ExtInputCount -= 1;
+ if (InputZoneIdx > ExitInputBusyBaseZone) ExtInputCount += 1;
+ target.ZoneIndex = InputZoneIdx;
+ target.ZoneIntime = DateTime.Now;
+ //shiftok = true;
+ }
+ else RaiseMessage("아이템이동 실패 대상 존 " + InputZoneIdx.ToString() + ": 아이템이 없습니다, 현재:" + ZoneItemCountTotal.ToString() + "개 있음", true, null);
+ }
+
+ if (ExtInputCount < 0) ExtInputCount = 0;
+ return target;
+ }
+
+ int ExitInputBusyBaseZone = 5;
+
+ public Boolean isCanPickerDrop
+ {
+ get
+ {
+ //현재 존에 1개까지는 놓을수 있지만 그 이상 있다면 놓을 수없다
+ var tsDrop = DateTime.Now - LastDropTime;
+
+ //마지막으로 놓은시간이후 3초 미만은 놓지 못하게 한다
+ //단 이경우는 컨베이어가 멈춰있는 경우에는 적용하지 못한다
+ if (tsDrop.TotalSeconds < 2) return false;
+
+ //절대 2개이상은 놓지못한다
+ if (ZoneItemCountTotal >= 2) return false;
+ else return zoneitemholding == 0;
+ //return this.zoneitem.Where(t => t.Delete == false && t.ZoneIndex > 1).Count() == 0;
+ }
+ }
+
+ public int ZoneItemCountTotal
+ {
+ get
+ {
+ int retval = -1;
+ lock (zitem)
+ {
+ retval = this.zitem.Where(t => t.Delete == false && t.ZoneIndex != -1).Count();
+ }
+ return retval;
+ }
+ }
+ public Boolean ZoneItemDoubleError
+ {
+ get
+ {
+ int retval = 0;
+ lock (zitem)
+ {
+ retval = this.zitem.Where(t => t.Delete == false && t.ZoneIndex >= 0 && t.ZoneIndex <= 1).Count(); //중복오류
+ }
+ return retval > 1;
+ }
+ }
+
+ ///
+ /// Z축이 아이템을 내려놓은 시간(연속으로 놓는 증상이 발생하여, 일단 이것으로 2초이상 빠르게 놓는일이 없도록 한다)
+ ///
+ public DateTime LastDropTime = DateTime.Now;
+
+ public int zoneitemholding
+ {
+ get
+ {
+ int retval = -1;
+ lock (zitem)
+ {
+ //int holdCount = 2;
+ int inch13cnt = this.zitem.Where(t => t.Delete == false && t.Size == "13").Count();
+ if (inch13cnt > 0)
+ retval = this.zitem.Where(t => t.Delete == false && t.ZoneIndex >= CanDropCount13).Count();
+ else
+ retval = this.zitem.Where(t => t.Delete == false && t.ZoneIndex >= CanDropCount7).Count();
+ }
+ return retval;
+ }
+
+ }
+
+ public int CanDropCount7 { get; set; }
+ public int CanDropCount13 { get; set; }
+ //private int ZoneItemCountTotal = 0;//
+ //private int zoneitemholding = 0;
+
+ ///
+ /// 컨베이어에 아이템이 있는가?
+ ///
+ public Boolean CVHasItem
+ {
+ get
+ {
+ //return ZoneItemCountTotal > 0;
+ Boolean cnt = false;
+ lock (zitem)
+ {
+ cnt = this.zitem.Where(t => t.Delete == false && t.ZoneIndex != -1).Count() > 0;
+ }
+ return cnt;
+
+ }
+ }
+
+
+
+ ///
+ /// 바코드 존의 데이터를 변경해준다.
+ ///
+ ///
+ ///
+ ///
+ public CItem SetBarcodeZone(string jguid, string _reelid, string _sid, string _lot, string _rawdata, int qty_, string _msg, DateTime _sTime)
+ {
+
+ //바코드 존에 있는 아이템을 확인한다
+ var item = ZoneItem_GetJ(jguid);
+ if (item == null)
+ {
+ RaiseMessage("바코드 존 아이템 찾기 실패 GUID:{0}", true, jguid);
+ return null;
+ }
+ else if (item.BarcodeDone)
+ {
+ if (item.RID == _reelid && item.SID == _sid)
+ {
+ RaiseMessage("[{0}] 바코드할당 스킵(동일 바코드값 확인) jguid:{1}", true, item.Seq, jguid);
+ }
+ else RaiseMessage("[{0}] 바코드할당 실패(이미 등록된 아이템) jguid:{1}", true, item.Seq, jguid);
+ return item;
+ }
+
+ item.RID = _reelid;
+ item.SID = _sid;
+ item.VLOT = _lot;
+ item.Qty = qty_;
+ item.BarcodeRaw = _rawdata;
+ item.BarcodeEnd = DateTime.Now;
+ item.BarcodeMsg = _msg;
+ item.BarcodeStart = _sTime;
+ item.BarcodeDone = true;
+ RaiseMessage("[{0}] SetBarcode Zone:{1},RID:{2},SID:{3},msg{4},time:{5},jguid:{6}", false, item.Seq, item.ZoneIndex, _reelid, _sid, _msg, _sTime, jguid);
+ return item;
+ }
+ //public int SetBarcodeZone(string _reelid, string _sid, string _rawdata, string _msg, DateTime _sTime)
+ //{
+
+ // RaiseMessage("SetBarcodeZone : id:{0},sid:{1},msg{2},time:{3}", false, _reelid, _sid, _msg, _sTime);
+
+
+ // //바코드 존에 있는 아이템을 확인한다
+ // int[] bcdzone = new int[] { 1, 2, 3 }; //1,2,3번 존에 할당한다
+ // for (int i = 0; i < bcdzone.Length; i++)
+ // {
+ // var item = ZoneItem_Get(bcdzone[i]);
+ // if (item == null || item.BarcodeDone) continue;
+
+ // if (string.IsNullOrEmpty(item.RID))
+ // {
+ // //존에서 아이템이 검출되었다
+ // //동일한 데이터가 있다면
+ // item.RID = _reelid;
+ // item.SID = _sid;
+ // item.BarcodeRaw = _rawdata;
+ // item.BarcodeEnd = DateTime.Now;
+ // item.BarcodeMsg = _msg;
+ // item.BarcodeStart = _sTime;
+ // item.BarcodeDone = true;
+ // return bcdzone[i];
+ // }
+ // else if (item.RID != _reelid)
+ // {
+ // //이미 등록된 아이템이다 (??)
+ // RaiseMessage("SetBarcodeZone : 지금 등록하려는 바코드가 이미 등록되었다! id:{0}, 등록되어있는 존 : {1},등록시간:{2} ", true, _reelid, bcdzone[i], item.BarcodeStart);
+ // continue;
+ // }
+ // else
+ // {
+ // //같은게 중복으로 인식되었으므로 처리하지 않아도 된다
+ // RaiseMessage("SetBarcodeZone : 중복건으로 처리하지 않는다", false);
+ // return bcdzone[i];
+ // }
+ // }
+ // RaiseMessage("1~3번 존 안에서 아이템을 찾지 못해 할당할 수 없습니다", true);
+ // return -1;
+
+ //}
+ void RaiseMessage(string m, Boolean iserr, params object[] args)
+ {
+ if (args != null && args.Length > 0) m = string.Format(m, args);
+ if (Message != null) Message(this, new MessageArgs(m, iserr));
+ }
+
+
+
+
+
+ //public void CVItemMove(int oldZoneIdx)
+ //{
+ // if (oldZoneIdx < 1 || oldZoneIdx > 10) throw new Exception("zonindex 값은 1~10 입니다");
+
+ // //해당 아이템 이하의 데이터를 모두 -1 한다.
+ // this.zoneitem.Where(t => t.Delete == false && t.ZoneIndex >= oldZoneIdx).ToList().ForEach((t) =>
+ // {
+ // t.ZoneIndex = t.ZoneIndex - 1;
+ // t.ZoneIntime = DateTime.Now;
+ // });
+ //}
+
+ ///
+ /// 아이템을 DROP해도 되는가? 존 3번 부터 아이템이 존재하면 drop 불가능으로 한다
+ ///
+
+
+ void Scean_Input(Graphics g)
+ {
+ //var sb = new System.Text.StringBuilder();
+ //sb.AppendLine("자재 투입 모드");
+ //for (int i = 0; i < 4; i++)
+ //{
+ // var p = arVar_Port[i];
+ // sb.AppendLine(string.Format("P{0} A:{1},DETU:{2},ENB:{3},LIML:{4},LIMH:{5},OVR:{6},RDY:{7}" +
+ // ",MDIR:{8},MRUN:{9},SFTY:{10} :: {11}",
+ // i + 1, p.AlignOK, p.DetectUp, p.Enable, p.LimitLower,
+ // p.LimitUpper, p.OverLoad, p.Ready, p.MotorDir, p.MotorRun, p.SaftyErr, p.title));
+ //}
+
+ //g.DrawString(sb.ToString(), this.arFont_PortMessage, Brushes.White, 100, 100);
+
+ //각 포트영역 테두리 그리기
+ for (int i = 0; i < arVar_Port.Length; i++)
+ {
+ var p = arVar_Port[i];
+ var inputActive = false;
+ if (i == 0) inputActive = arFGInputFL;
+ else if (i == 1) inputActive = arFGInputFR;
+ else if (i == 2) inputActive = arFGInputRL;
+ else if (i == 3) inputActive = arFGInputRR;
+ p.Display(g, this.arFont_count, this.arFont_PortMessage, this.arFGInputMode, inputActive);
+ }
+ }
+ void Scean_MotHome(Graphics g)
+ {
+ //g.DrawString("mot home", this.Font, Brushes.Black, 100, 100);
+ g.DrawRectangle(new Pen(Color.SteelBlue, 10), this.rect_main.Left, rect_main.Top, rect_main.Width, rect_main.Height);
+ Font f = new Font(this.Font.Name, 50f, FontStyle.Bold);
+
+ var rectTitle = new RectangleF(
+ rect_main.Left,
+ rect_main.Top,
+ rect_main.Width,
+ rect_main.Height * 0.25f);
+
+ g.DrawString("MOTION HOME", f, Brushes.White, rectTitle, sfCenter); ;
+ // g.DrawRectangle(Pens.Red, rectTitle.Left, rectTitle.Top, rectTitle.Width, rectTitle.Height);
+
+ var rectBody = new RectangleF(
+ rect_main.Left,
+ rectTitle.Bottom + 10,
+ rect_main.Width,
+ rect_main.Height - rectTitle.Height - 10);
+
+ // g.DrawRectangle(Pens.White, rectBody.Left, rectBody.Top, rectBody.Width, rectBody.Height);
+
+
+
+ var rectT = new Rectangle(
+ (int)(rectBody.Left + 20),
+ (int)(rectBody.Top + 10),
+ (int)(rectBody.Width * 0.23f),
+ (int)(rectBody.Height * 0.07));
+
+ var rectXF = new Rectangle(
+ (int)(rectT.Right + 20),
+ (int)(rectBody.Top + 10),
+ (int)(rectBody.Width - rectT.Width - rectT.Left - 10),
+ (int)(rectBody.Height * 0.07));
+
+
+ var titles = new string[] { "Y-PICKER", "Z-FRONT", "Z-REAR", "X-FRONT", "X-REAR" };
+ for (int i = 0; i < 5; i++)
+ {
+ var perc = HomeProgress[i];
+ var title = titles[i];
+ var offsetY = (rectBody.Height * 0.15f);
+ rectXF.Offset(0, (int)offsetY);
+ rectT.Offset(0, (int)offsetY);
+
+ //g.DrawRectangle(Pens.Yellow, rectT.Left, rectT.Top, rectT.Width, rectT.Height);
+
+ using (Font f2 = new Font(this.Font.Name, 20f, FontStyle.Bold))
+ {
+ g.DrawString("* " + title, f2, Brushes.Lime, rectT, sfLeft);
+ }
+
+ LinearGradientBrush brProgr = new LinearGradientBrush(rectXF, Color.Gold, Color.Yellow, LinearGradientMode.Vertical);
+ var rectXF_P = new Rectangle(rectXF.Left, rectXF.Top, (int)(rectXF.Width * (perc / 100.0)), rectXF.Height);
+ g.FillRectangle(brProgr, rectXF_P);
+ g.DrawRectangle(Pens.Gray, rectXF);
+ brProgr.Dispose();
+ }
+
+
+
+
+
+ f.Dispose();
+
+ }
+
+
+
+
+ void Scean_Normal(Graphics g)
+ {
+
+ ///50mm 마다 그리드를 처리한다
+ //using (Font f = new Font("Consolas", 7))
+ //{
+ // for (float i = 0; i < arMcLengthW; i += 50.0f)
+ // {
+ // var fs = g.MeasureString(i.ToString(), f);
+ // var px = (float)(CvtMMtoPX_W(i, rect_main.Left));
+ // g.DrawLine(Pens.DimGray, px, (float)rect_main.Top, px, (float)rect_main.Bottom);
+ // g.DrawString(i.ToString(), f, Brushes.White, new PointF(px - (fs.Width / 2.0f), rect_main.Top - fs.Height));
+ // }
+ // for (float i = 0; i < arMcLengthH; i += 50.0f)
+ // {
+ // var fs = g.MeasureString(i.ToString(), f);
+ // var px = (float)(CvtMMtoPX_H(i, rect_main.Top));
+ // g.DrawLine(Pens.DimGray, (float)rect_main.Left, px, (float)rect_main.Right, px);
+ // if (i == 0) continue;
+ // g.DrawString(i.ToString(), f, Brushes.White, new PointF(rect_main.Left, px - (fs.Height / 2.0f)));
+ // }
+ //}
+
+ Draw_Icon(g);
+
+ //전체 영역 테두리
+ g.DrawRectangle(new Pen(Color.DimGray, 2), rect_main.Left, rect_main.Top, rect_main.Width, rect_main.Height);
+
+ //컨베어 그리기
+ Draw_Conveyor(g, rect_conveyor);
+
+ //셔틀표시
+ Draw_BallScrewRail(g, rect_frontShuttle, 50, 5, false, LockXF, this.arMOT_Origin[(int)eAxis.X_F], arMOT_LimDn[(int)eAxis.X_F], arMOT_LimUp[(int)eAxis.X_F]);
+ Draw_BallScrewRail(g, rect_rearShuttle, 50, 5, false, LockXR, this.arMOT_Origin[(int)eAxis.X_R], arMOT_LimDn[(int)eAxis.X_R], arMOT_LimUp[(int)eAxis.X_R]);
+
+ //포트표시(셔틀위에 표시됨)
+ Draw_Port(g, arMotorPosition[3], arMotorLengthXF, rect_frontShuttle, 0); //front
+ Draw_Port(g, arMotorPosition[4], arMotorLengthXR, rect_rearShuttle, 2); //rear
+
+ //Y축 레일표시
+ Draw_BallScrewRail(g, rect_picker, 50, 5, true, LockYP, this.arMOT_Origin[(int)eAxis.Y_P], arMOT_LimDn[(int)eAxis.Y_P], arMOT_LimUp[(int)eAxis.Y_P]);
+
+ //모터 Y축
+ Draw_PickerY(g, rect_picker);
+
+ Draw_Zone(g);
+
+ Draw_CVItem(g);
+
+ Draw_Button(g);
+
+ //우측상단에 작업일자와 차수를 표시한다
+ if (string.IsNullOrEmpty(arJobDate) == false && string.IsNullOrEmpty(arJobSeq) == false)
+ {
+ var msg = arJobDate + ":" + arJobSeq;
+ var fsizeseq = g.MeasureString(msg, this.Font);
+ var rectseqinfo = new RectangleF(rect_main.Right - fsizeseq.Width * 1.15f, rect_main.Bottom, fsizeseq.Width * 1.15f, fsizeseq.Height);
+ g.FillRectangle(new SolidBrush(Color.FromArgb(64, 64, 64)), rectseqinfo);
+ g.DrawString(arJobDate + ":" + arJobSeq, this.Font, Brushes.White, rectseqinfo, sfCenter);
+ g.DrawRectangle(Pens.White, rectseqinfo.Left, rectseqinfo.Top, rectseqinfo.Width, rectseqinfo.Height);
+ }
+
+ //정보 표시 (나중에 제거해야함) 별도 인포박스형태를 취해야 함
+ Draw_Info(g, rect_conveyor);
+ Draw_Error(g);
+
+ //메뉴는 최상위에 표시한다
+ Draw_Menu(g);
+
+ if (arDebugMode)
+ {
+ var sb = new System.Text.StringBuilder();
+ sb.AppendLine("Loader Control");
+ sb.AppendLine(string.Format("Display {0} / pickup zone count {1} / total item count {2}", DisplayRectangle, zoneitemholding, ZoneItemCountTotal));
+ g.DrawString(sb.ToString(), this.Font, Brushes.White, 10, 10);
+ updatetime = DateTime.Now;
+
+
+
+ //작업 수량 및 전체수량을 표시함
+ var sb2 = new System.Text.StringBuilder();
+ if (arVar_Port != null && arVar_Port.Length > 0)
+ {
+
+ //sb2.AppendLine(string.Format("입(PICKER)/출(SS:DET1)/겹침(SS:DET1) : {0}/{1}/{2}",
+ // ar_cnt_in, ar_cnt_out, ar_cnt_outdup));
+
+ //sb2.AppendLine(string.Format("바코드 입/출:CMD/DUP/READ/ERR/중복수신/할당실패 {0}/{1}:{2}/{3}/{4}/{5}/{6}/{7}",
+ // ar_cnt_barcodein, ar_cnt_barcodeot, ar_cnt_barcodecmd, ar_cnt_barcodedup, ar_cnt_barcoderead, ar_cnt_barcodereaderr, ar_cnt_barcodereaddup, ar_cnt_barcodeAssignErr));
+
+ //sb2.AppendLine(string.Format("언로더 입/출:CMD/DUP {0}/{1}:{2}/{3}",
+ // ar_cnt_plcin, ar_cnt_plcot, ar_cnt_plccmd, ar_cnt_plcdup));
+
+
+ sb2.AppendLine(string.Format("DIO:{4},BCD:{5},PLC:{6}\n" +
+ "YP_RDY {7},{8},{9},{10}\n" +
+ "YP_CMD {7},{8},{9},{10}\n",
+ arVar_Port[0].reelCount,
+ arVar_Port[1].reelCount,
+ arVar_Port[2].reelCount,
+ arVar_Port[3].reelCount,
+ arConn_DIO,
+ arConn_BCD,
+ arConn_PLC,
+ arFG_RDY_YP_FPICKON, arFG_RDY_YP_FPICKOF, arFG_RDY_YP_RPICKON, arFG_RDY_YP_RPICKOF,
+ arFG_CMD_YP_FPICKON, arFG_CMD_YP_RPICKON));
+
+ }
+
+ using (var f = new Font("Consolas", 15f, FontStyle.Bold))
+ g.DrawString(sb.ToString(), f, Brushes.SkyBlue, rect_conveyor.Left + 20, rect_conveyor.Top + 50);
+ }
+
+
+ }
+ void Draw_Zone(Graphics g)
+ {
+ //
+ if (arFlag_WaitBCD2) //바코드 대기중이라면 해당 존을 강조해준다
+ {
+ var zone = rect_zone[2];
+ g.FillRectangle(new SolidBrush(Color.FromArgb(150, Color.Violet)), zone.Left, rect_main.Top, zone.Width, rect_main.Height);
+ }
+ if (arFlag_WaitBCD1) //바코드 대기중이라면 해당 존을 강조해준다
+ {
+ var zone = rect_zone[3];
+ g.FillRectangle(new SolidBrush(Color.FromArgb(150, Color.Gold)), zone.Left, zone.Top, zone.Width, zone.Height);
+ }
+ if (arFlag_WaitPLC)
+ {
+ var zone = rect_zone[0];
+ g.FillRectangle(new SolidBrush(Color.FromArgb(150, Color.Violet)), zone.Left, this.rect_main.Top, zone.Width, this.rect_main.Height);
+ }
+ }
+
+ ///
+ /// 컨베이어의 아이템을 화면에 표시한ㄷ
+ ///
+ ///
+ void Draw_CVItem(Graphics g)
+ {
+ //lock 개체적용 210110
+ lock (zitem)
+ {
+ var items = this.zitem.Where(t => t.Delete == false).ToList();
+ foreach (var item in items)
+ {
+ var zone = rect_zone[item.ZoneIndex];
+ var itemwidth = rect_conveyor.Width * 0.09f;
+
+ //해당 존의 중앙에 아이템을 그린다.
+ var cx = zone.Left + zone.Width / 2.0f;
+ var cy = zone.Top + zone.Height / 2.0f;
+ item.Rect = new Rectangle(
+ (int)(cx - itemwidth / 2.0f),
+ (int)(cy - itemwidth / 2.0f),
+ (int)itemwidth,
+ (int)itemwidth);
+
+ //원을 그리다.
+ if (item.hasBarcode)
+ {
+ if (item.Size == "13")
+ {
+ using (LinearGradientBrush br = new LinearGradientBrush(item.Rect, Color.DeepSkyBlue, Color.LightSkyBlue, LinearGradientMode.Vertical))
+ {
+ g.FillEllipse(br, item.Rect);
+ }
+ }
+ else
+ {
+ using (LinearGradientBrush br = new LinearGradientBrush(item.Rect, Color.LightSkyBlue, Color.DeepSkyBlue, LinearGradientMode.Vertical))
+ {
+ g.FillEllipse(br, item.Rect);
+ }
+ }
+
+ }
+ else
+ {
+ if (item.iPort == -1) //외부입력데이터
+ {
+ using (LinearGradientBrush br = new LinearGradientBrush(item.Rect, Color.Magenta, Color.DimGray, LinearGradientMode.BackwardDiagonal))
+ {
+ g.FillEllipse(br, item.Rect);
+ }
+ }
+ else
+ {
+ using (LinearGradientBrush br = new LinearGradientBrush(item.Rect, Color.Gray, Color.DimGray, LinearGradientMode.BackwardDiagonal))
+ {
+ g.FillEllipse(br, item.Rect);
+ }
+ }
+
+ }
+ // g.DrawRectangle(Pens.Blue, zone.Left,zone.Top,zone.Width,zone.Height);
+ // g.DrawRectangle(Pens.Red, item.Rect);
+ var ts = DateTime.Now - item.ZoneIntime;
+ if (ts.TotalSeconds > 7.0)
+ {
+ //오류발생 너무 오래됬음
+ g.DrawEllipse(new Pen(Color.Black, 7), item.Rect.OffsetRect(1, 1));
+ g.DrawEllipse(new Pen(Color.Magenta, 7), item.Rect);
+ }
+ else
+ {
+ g.DrawEllipse(new Pen(Color.DimGray, 5), item.Rect.OffsetRect(1, 1));
+ g.DrawEllipse(new Pen(Color.FromArgb(240, 240, 240), 5), item.Rect);
+ }
+
+
+ using (Font f = new Font("Consolas", 11, FontStyle.Bold))
+ {
+ var fsizet = g.MeasureString(item.SID, f);
+ var fsizeb = g.MeasureString(item.RID, f);
+ var itemW = Math.Max(fsizet.Width, fsizeb.Width);
+ var itemH = Math.Max(fsizet.Height, fsizeb.Height);
+
+ //padding
+ var paddingValue = (int)((item.Rect.Top - rect_conveyor.Top - itemH) / 2.0f + 5);
+
+ //상단에는 SID를
+ if (string.IsNullOrEmpty(item.SID) == false)
+ {
+
+ var zcx = zone.Left + zone.Width / 2.0f;
+ var rectTop = new RectangleF(zcx - itemW / 2.0f, (float)rect_conveyor.Top, itemW, itemH);
+ g.FillRectangle(new SolidBrush(Color.SteelBlue), rectTop);
+ g.DrawRect(rectTop, Color.FromArgb(30, 30, 30));
+ g.DrawString(item.SID, f, Brushes.Black, rectTop, sfCenter);
+ }
+ //하단에는 RID를
+ if (string.IsNullOrEmpty(item.RID) == false)
+ {
+
+ var zcx = zone.Left + zone.Width / 2.0f;
+ var rectTop = new RectangleF(zcx - itemW / 2.0f, (float)rect_conveyor.Bottom - itemH, itemW, itemH);
+ g.FillRectangle(new SolidBrush(Color.SteelBlue), rectTop);
+ g.DrawRect(rectTop, Color.FromArgb(30, 30, 30));
+ g.DrawString(item.RID, f, Brushes.Black, rectTop, sfCenter);
+ }
+ }
+
+ if (arDebugMode)
+ {
+ ///크기 및 포트 drop 시간 정보를 표시한다.
+ var sb = new System.Text.StringBuilder();
+ sb.AppendLine("[" + item.Seq.ToString() + "]PORT:" + item.iPort.ToString());
+ sb.AppendLine("SIZE:" + item.Size);
+ sb.AppendLine("DROP:" + item.DropTime.ToString("HH:mm:ss"));
+ sb.AppendLine("IN:" + item.InTime.ToString("HH:mm:ss"));
+ sb.AppendLine("ZONE:" + item.ZoneIndex.ToString());
+ sb.AppendLine("존투입:" + item.ZoneIntime.ToString("yyyy-MM-dd HH:mmss"));
+ sb.AppendLine("REEL:" + item.RID.ToString());
+ sb.AppendLine("SID:" + item.SID.ToString());
+ using (Font f = new Font("맑은 고딕", 12, FontStyle.Bold))
+ {
+ if (item.Delete)
+ g.DrawString(sb.ToString(), f, Brushes.Red, item.Rect.Left, item.Rect.Top);
+ else if (item.RID.Trim() != "")
+ g.DrawString(sb.ToString(), f, Brushes.Blue, item.Rect.Left, item.Rect.Top);
+ else
+ g.DrawString(sb.ToString(), f, Brushes.Black, item.Rect.Left, item.Rect.Top);
+ }
+ }
+ else
+ {
+ //배출포트 설정전에는 크기를 중앙에 표시
+ //위에는 SID , 아래는 RID를 표시
+ var CenterString = (item.oPort == -1 ? item.Size + "\"" : "#" + item.oPort.ToString());
+ var fsize = item.oPort == -1 ? 40 : 30;
+ using (Font f = new Font("Consolas", fsize, FontStyle.Bold))
+ {
+ if (item.Delete)
+ g.DrawString(CenterString, f, Brushes.Red, item.Rect, sfCenter);
+ else if (item.RID.Trim() != "")
+ {
+ g.DrawString(CenterString, f, Brushes.Black, item.Rect, sfCenter);
+
+ }
+ else
+ g.DrawString(CenterString, f, Brushes.Black, item.Rect, sfCenter);
+ }
+ }
+ }
+ }
+
+ }
+
+
+
+
+ void Draw_Icon(Graphics g)
+ {
+
+
+ int iconOffsetX = 19;
+ int iconOffsetY = 20;
+
+ CIcon icon;
+
+ icon = this.icons[0];//.Rect;
+ if (arConn_BCD) g.DrawImage(UIControl.Properties.Resources.bg_blue, icon.X, icon.Y);
+ else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ g.DrawImage(Properties.Resources.bcd, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ //if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X,icon.Y,icon.W,icon.H);
+
+ icon = this.icons[1];//.Rect;
+ if (arConn_PLC) g.DrawImage(Properties.Resources.bg_blue, icon.X, icon.Y);
+ else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ g.DrawImage(Properties.Resources.plc, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ //if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X, icon.Y, icon.W, icon.H);
+
+ icon = this.icons[2];//.Rect;
+ if (arConn_MOT) g.DrawImage(Properties.Resources.bg_blue, icon.X, icon.Y);
+ else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ g.DrawImage(Properties.Resources.mot, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ //if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X, icon.Y, icon.W, icon.H);
+
+ icon = this.icons[3];//.Rect;
+ if (arDI_Emergency == false) g.DrawImage(Properties.Resources.bg_blue, icon.X, icon.Y);
+ else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ g.DrawImage(Properties.Resources.emg, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ //if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X, icon.Y, icon.W, icon.H);
+
+ icon = this.icons[4];//.Rect;
+ if (this.arDI_SaftyOk) g.DrawImage(Properties.Resources.bg_blue, icon.X, icon.Y);
+ else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ g.DrawImage(Properties.Resources.safty, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ //if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X, icon.Y, icon.W, icon.H);
+
+ icon = this.icons[5];//.Rect;
+ if (arDIAir) g.DrawImage(Properties.Resources.bg_blue, icon.X, icon.Y);
+ else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ g.DrawImage(Properties.Resources.air, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ //if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X, icon.Y, icon.W, icon.H);
+
+ //icon = this.icons[6];//.Rect;
+ //if (arConn_REM) g.DrawImage(Properties.Resources.bg_blue, icon.X, icon.Y);
+ //else g.DrawImage(Properties.Resources.bg_red, icon.X, icon.Y);
+ //g.DrawImage(Properties.Resources.debug40, icon.X + iconOffsetX, icon.Y + iconOffsetY);
+ ////if (icon.Focus) g.DrawRectangle(Pens.Gold, icon.X, icon.Y, icon.W, icon.H);
+ }
+
+ void Draw_Button(Graphics g)
+ {
+
+ foreach (var but in Buttons)
+ {
+ var font = but.Font;
+ if (font == null) font = new Font("맑은 고딕", 15);
+
+ if (NeedHomeSet() == false && arDI_Emergency == false && but.Tag == "INPUTL" && arIsRunning == false && arFGInputMode == false)
+ {
+ if (but.Shape == eButtonType.Rectangle)
+ {
+ g.FillRectangle(Brushes.White, but.Rect);
+ g.DrawRectangle(new Pen(but.BorderColor, but.BorderSize), but.Rect);
+ }
+ else
+ {
+ g.FillEllipse(Brushes.White, but.Rect);
+ g.DrawEllipse(new Pen(but.BorderColor, but.BorderSize), but.Rect);
+ }
+
+
+ g.DrawString(but.Text, font, Brushes.Black, but.Rect, sfCenter);
+ }
+ else if (NeedHomeSet() == false && arDI_Emergency == false && but.Tag == "INPUTR" && arIsRunning == false && arFGInputMode == false)
+ {
+ if (but.Shape == eButtonType.Rectangle)
+ {
+ g.FillRectangle(Brushes.White, but.Rect);
+ g.DrawRectangle(new Pen(but.BorderColor, but.BorderSize), but.Rect);
+ }
+ else
+ {
+ g.FillEllipse(Brushes.White, but.Rect);
+ g.DrawEllipse(new Pen(but.BorderColor, but.BorderSize), but.Rect);
+ }
+
+ g.DrawString(but.Text, font, Brushes.Black, but.Rect, sfCenter);
+ }
+ font.Dispose();
+ }
+ }
+
+ void Draw_Info(Graphics g, RectangleF rect)
+ {
+
+ //디자인 모드에서는 표시하지 않는다 200714
+ //if (DesignMode == true) return;
+
+ //if (this.arFlag_UnloaderBusy) ShowPopupMessage(g, "언로더 작업 대기 중\nBUSY", Properties.Resources.info);
+ //if (this.arIsRunning)
+ if (arFGInputMode)
+ {
+ ShowPopupMessage(g, "자재 투입 모드", "투입완료 후 'Re.Start' 하세요", Properties.Resources.info, false);
+ }
+ else
+ {
+ if (this.arFlag_UnloaderErr == true) ShowPopupMessage(g, "언로더 오류 발생", "STOP된 언로더를 확인하세요", Properties.Resources.error, false);
+ else if (this.arFlag_WaitPLC && arUnloaderSeq > 0)
+ {
+ if (arUnloaderSeq == 1) ShowPopupMessage(g, "언로더 작업 대기 중", "상태확인(#1)", Properties.Resources.info, false);
+ else if (arUnloaderSeq == 2) ShowPopupMessage(g, "언로더 작업 대기 중", "BUSY(#2)", Properties.Resources.info, false);
+ else if (arUnloaderSeq == 3) ShowPopupMessage(g, "언로더 작업 대기 중", "ITEM CHECK(#3)", Properties.Resources.info, false);
+ else if (arUnloaderSeq == 4) ShowPopupMessage(g, "언로더 작업 대기 중", "배출포트 설정(#4)", Properties.Resources.info, false);
+ else if (arUnloaderSeq == 5) ShowPopupMessage(g, "언로더 작업 대기 중", "릴크기 설정(#5)", Properties.Resources.info, false);
+ else if (arUnloaderSeq == 6) ShowPopupMessage(g, "언로더 작업 대기 중", "No.ZERO CHECK(#6)", Properties.Resources.info, false);
+ }
+ }
+
+ }
+
+ void Draw_PickerRail(Graphics g, RectangleF rect)
+ {
+ RectangleF rectRailL = new RectangleF(rect.Left, rect.Top, rect.Width / 2.0f + 1, rect.Height);
+ RectangleF rectRailR = new RectangleF(rect.Left + rect.Width / 2.0f, rect.Top, rect.Width / 2.0f, rect.Height);
+ var brR = new LinearGradientBrush(rect, Color.FromArgb(60, 60, 60), Color.FromArgb(80, 80, 80), LinearGradientMode.Horizontal);
+ var brL = new LinearGradientBrush(rect, Color.FromArgb(80, 80, 80), Color.FromArgb(60, 60, 60), LinearGradientMode.Horizontal);
+ g.FillRectangle(brL, rectRailL);
+ //g.FillRectangle(brR, rectRailR);
+ brL.Dispose();
+ brR.Dispose();
+ g.DrawRectangle(Pens.DimGray, rect.Left, rect.Top, rect.Width, rect.Height);
+
+ }
+
+
+
+
+ void Draw_PickerY(Graphics g, RectangleF rect)
+ {
+ //전체영역의 80% 영역에 Y-로봇의 축을 그린다.
+ //var motorMax = 400; //전체 가동 길이 400mm
+ this.arMotorLengthY = 600;
+ var py = rect.Top + rect.Height - (rect.Height * ((this.arMotorPosition[0] + 1) / (this.arMotorLengthY * 1.0f)));
+ var cx = rect.Left + rect.Width / 2.0f;
+
+
+ //상(Rear), 하(Front)로 영역을 그린다
+ var port_width = rect_picker_rear.Width;// * 3f;
+ var port_height = rect_picker_rear.Height; // rect.Height * 0.2f;
+ var port_space = (this.rect_picker_front.Top - this.rect_picker_rear.Bottom) / 2.0f;
+
+
+ //New Rear Position
+ var newYR = (float)(py - port_height - port_space);
+ if (newYR != rect_picker_rear.Y)
+ {
+ var offset = newYR - rect_picker_rear.Y;
+ this.rect_picker_rear.Offset(0, offset); //좌표가 변경되었다면 재계산
+ this.rect_picker_rear_vac1.Offset(0, offset);
+ this.rect_picker_rear_vac2.Offset(0, offset);
+ this.rect_picker_rear_vac3.Offset(0, offset);
+ this.rect_picker_rear_vac4.Offset(0, offset);
+ }
+
+ //New Front Position
+ var newYF = (float)(py + port_space);
+ if (newYF != rect_picker_front.Y)
+ {
+ var offset = newYF - rect_picker_front.Y;
+ this.rect_picker_front.Offset(0, offset); //좌표가 변경되었다면 재계산
+ this.rect_picker_front_vac1.Offset(0, offset);
+ this.rect_picker_front_vac2.Offset(0, offset);
+ this.rect_picker_front_vac3.Offset(0, offset);
+ this.rect_picker_front_vac4.Offset(0, offset);
+ }
+
+
+ //피커 #1 Circle 색상
+ var Bg1 = Color.FromArgb(100, 100, 100);
+ var Bg2 = Color.FromArgb(160, 160, 160);
+ if (this.arVar_Picker[0].Overload)
+ {
+ Bg1 = Color.Tomato;
+ Bg2 = Color.Red;
+ }
+ else
+ {
+ if (this.arVar_Picker[0].ItemOn)
+ {
+
+ if (this.arVar_Picker[0].isReelDetect)
+ {
+ Bg1 = Color.Lime; //.FromArgb(100, 100, 100);
+ Bg2 = Color.Green;//.FromArgb(160, 160, 160);
+ }
+ else
+ {
+ Bg1 = Color.Magenta; //.FromArgb(100, 100, 100);
+ Bg2 = Color.DarkMagenta;//.FromArgb(160, 160, 160);
+ }
+
+ }
+ else
+ {
+ Bg1 = Color.FromArgb(100, 100, 100);
+ Bg2 = Color.FromArgb(160, 160, 160);
+ }
+ }
+
+
+ using (var br = new LinearGradientBrush(rect_picker_front, Bg1, Bg2, LinearGradientMode.Vertical))
+ {
+ g.FillEllipse(br, rect_picker_front);
+ }
+
+ //피커 #2 Circle 색상
+ if (this.arVar_Picker[1].Overload)
+ {
+ Bg1 = Color.Tomato;
+ Bg2 = Color.Red;
+ }
+ else
+ {
+ if (this.arVar_Picker[1].ItemOn)
+ {
+ //실제 아이템 체크
+
+ if (this.arVar_Picker[1].isReelDetect)
+ {
+ Bg1 = Color.Lime; //.FromArgb(100, 100, 100);
+ Bg2 = Color.Green;//.FromArgb(160, 160, 160);
+ }
+ else
+ {
+ Bg1 = Color.Magenta; //.FromArgb(100, 100, 100);
+ Bg2 = Color.DarkMagenta;//.FromArgb(160, 160, 160);
+ }
+ }
+ else
+ {
+ Bg1 = Color.FromArgb(100, 100, 100);
+ Bg2 = Color.FromArgb(160, 160, 160);
+ }
+ }
+
+ using (var br = new LinearGradientBrush(rect_picker_rear, Bg1, Bg2, LinearGradientMode.Vertical))
+ {
+ g.FillEllipse(br, rect_picker_rear);
+ }
+
+ //피커 테두리
+ using (var bgPen = new Pen(Color.Black, 3))
+ {
+ g.DrawEllipse(bgPen, rect_picker_front);
+ g.DrawEllipse(bgPen, rect_picker_rear);
+ }
+
+ //피커 내부의 진공 표현
+ g.FillEllipse((this.arVar_Picker[0].VacDetect[0] ? brVacOn : brVacOff), rect_picker_front_vac1);
+ g.FillEllipse((this.arVar_Picker[0].VacDetect[1] ? brVacOn : brVacOff), rect_picker_front_vac2);
+ g.FillEllipse((this.arVar_Picker[0].VacDetect[2] ? brVacOn : brVacOff), rect_picker_front_vac3);
+ g.FillEllipse((this.arVar_Picker[0].VacDetect[3] ? brVacOn : brVacOff), rect_picker_front_vac4);
+
+ g.FillEllipse((this.arVar_Picker[1].VacDetect[0] ? brVacOn : brVacOff), rect_picker_rear_vac1);
+ g.FillEllipse((this.arVar_Picker[1].VacDetect[1] ? brVacOn : brVacOff), rect_picker_rear_vac2);
+ g.FillEllipse((this.arVar_Picker[1].VacDetect[2] ? brVacOn : brVacOff), rect_picker_rear_vac3);
+ g.FillEllipse((this.arVar_Picker[1].VacDetect[3] ? brVacOn : brVacOff), rect_picker_rear_vac4);
+
+ //피커설명 표시
+ if (arVar_Picker[0].Overload)
+ g.DrawString("OVL", arFont_picker, Brushes.Black, rect_picker_front, sfCenter);
+ else
+ g.DrawString(this.arVar_Picker[0].ReelSize, arFont_picker, Brushes.Black, rect_picker_front, sfCenter);
+
+ if (arVar_Picker[1].Overload)
+ g.DrawString("OVL", arFont_picker, Brushes.Black, rect_picker_rear, sfCenter);
+ else
+ g.DrawString(this.arVar_Picker[1].ReelSize, arFont_picker, Brushes.Black, rect_picker_rear, sfCenter);
+
+
+ //피커 진공표시 테두리 (진공출력상태에 따라서 색상을 달리 함)
+ g.DrawEllipse((this.arVar_Picker[0].VacOutput[0] ? penVacOn : penVacOff), rect_picker_front_vac1);
+ g.DrawEllipse((this.arVar_Picker[0].VacOutput[1] ? penVacOn : penVacOff), rect_picker_front_vac2);
+ g.DrawEllipse((this.arVar_Picker[0].VacOutput[2] ? penVacOn : penVacOff), rect_picker_front_vac3);
+ g.DrawEllipse((this.arVar_Picker[0].VacOutput[3] ? penVacOn : penVacOff), rect_picker_front_vac4);
+
+ g.DrawEllipse((this.arVar_Picker[1].VacOutput[0] ? penVacOn : penVacOff), rect_picker_rear_vac1);
+ g.DrawEllipse((this.arVar_Picker[1].VacOutput[1] ? penVacOn : penVacOff), rect_picker_rear_vac2);
+ g.DrawEllipse((this.arVar_Picker[1].VacOutput[2] ? penVacOn : penVacOff), rect_picker_rear_vac3);
+ g.DrawEllipse((this.arVar_Picker[1].VacOutput[3] ? penVacOn : penVacOff), rect_picker_rear_vac4);
+
+
+ //중앙부에 흰색구를 표시함
+ g.FillEllipse(Brushes.White, cx - 5, (float)(py - 5f), 10, 10);
+ }
+
+ void Draw_Screw(Graphics g, Rectangle rect)
+ {
+ //모터표시(X축)
+ g.FillRectangle(new SolidBrush(Color.FromArgb(50, 150, 150, 150)), rect);
+
+ //해다 영역에 사선으로그림을 그린다.
+ var termcount = 50;
+ var lineterm = rect.Width / termcount;
+ var skew = rect.Width * 0.01f;
+ Pen p = new Pen(Color.FromArgb(50, 120, 120, 120), 2);
+ for (int i = 0; i < termcount; i++)
+ {
+ var pt1 = new PointF(rect.Left + i * lineterm, rect.Top);
+ var pt2 = new PointF(pt1.X + skew, rect.Bottom);
+ g.DrawLine(p, pt1, pt2);
+ }
+ p.Dispose();
+ //e.Graphics.DrawRectangle(Pens.Gray, motr_rect.Left, motr_rect.Top, motr_rect.Width, motr_rect.Height);
+ //e.Graphics.DrawRectangle(Pens.Gray, motf_rect.Left, motf_rect.Top, motf_rect.Width, motf_rect.Height);
+
+
+ //RectangleF rectRailT = new RectangleF(rect.Left, rect.Top, rect.Width, rect.Height / 2.0f + 1);
+ //RectangleF rectRailB = new RectangleF(rect.Left, rect.Top + rect.Height / 2.0f, rect.Width, rect.Height / 2.0f);
+ //var brR = new LinearGradientBrush(rect, Color.FromArgb(100, 60, 60, 60), Color.FromArgb(100, 80, 80, 80), LinearGradientMode.Vertical);
+ //var brL = new LinearGradientBrush(rect, Color.FromArgb(100, 80, 80, 80), Color.FromArgb(100, 60, 60, 60), LinearGradientMode.Vertical);
+ ////g.FillRectangle(brL, rectRailT);
+ ////g.FillRectangle(brR, rectRailB);
+ //brL.Dispose();
+ //brR.Dispose();
+
+ g.DrawRectangle(new Pen(Color.FromArgb(50, Color.Gray)), rect.Left, rect.Top, rect.Width, rect.Height);
+
+
+ }
+
+ void Draw_BallScrewRail(Graphics g, RectangleF rect, int divCount, int alpha, Boolean downDirection, Boolean MLock, Boolean Org, Boolean LimDn, Boolean LimUp)
+ {
+ //모터표시(X축)
+ if (Org) g.FillRectangle(new SolidBrush(Color.FromArgb(alpha, Color.SkyBlue)), rect);
+ else if (LimUp) g.FillRectangle(new SolidBrush(Color.FromArgb(alpha, Color.Red)), rect);
+ else if (LimDn) g.FillRectangle(new SolidBrush(Color.FromArgb(alpha, Color.Blue)), rect);
+ else g.FillRectangle(new SolidBrush(Color.FromArgb(alpha, 150, 150, 150)), rect);
+
+ //해다 영역에 사선으로그림을 그린다.
+ var baseSize = (downDirection == false ? rect.Width : rect.Height);
+ var lineterm = baseSize / divCount;
+ var skew = baseSize * 0.01f;
+ Pen p = new Pen(Color.FromArgb(alpha, 120, 120, 120), 2);
+ PointF pt1 = PointF.Empty;
+ PointF pt2 = PointF.Empty;
+ for (int i = 0; i < divCount; i++)
+ {
+ if (downDirection)
+ {
+ pt1 = new PointF(rect.Left, rect.Top + i * lineterm);
+ pt2 = new PointF(rect.Right, pt1.Y + skew);
+ }
+ else
+ {
+ pt1 = new PointF(rect.Left + i * lineterm, rect.Top);
+ pt2 = new PointF(pt1.X + skew, rect.Bottom);
+ }
+ g.DrawLine(p, pt1, pt2);
+ }
+ p.Dispose();
+
+ //limi이 걸려있다면 해당 영역에 적색으로 표시한다.
+ var limwidth = 30;
+ if (LimUp)
+ {
+ RectangleF rectlu;
+ if (downDirection) rectlu = new RectangleF(rect.Left, rect.Top, rect.Width, limwidth);
+ else rectlu = new RectangleF(rect.Right - limwidth, rect.Top, limwidth, rect.Height);
+
+ g.FillRectangle(Brushes.Red, rectlu.Left, rectlu.Top, rectlu.Width, rectlu.Height);
+ }
+
+ if (LimDn)
+ {
+ RectangleF rectlu;
+ if (downDirection) rectlu = new RectangleF(rect.Left, rect.Bottom - limwidth, rect.Width, limwidth);
+ else rectlu = new RectangleF(rect.Left, rect.Top, limwidth, rect.Height);
+
+ g.FillRectangle(Brushes.Red, rectlu.Left, rectlu.Top, rectlu.Width, rectlu.Height);
+ }
+ //전체 테두리
+ g.DrawRectangle(new Pen(Color.FromArgb(alpha, Color.Gray)), rect.Left, rect.Top, rect.Width, rect.Height);
+ }
+
+ Boolean NeedHomeSet()
+ {
+ return arConn_MOT && (this.arMOT_HSet[0] == false || this.arMOT_HSet[1] == false || this.arMOT_HSet[2] == false || this.arMOT_HSet[3] == false || this.arMOT_HSet[4] == false);
+ }
+
+ byte errstep = 0;
+ bool errstepR = true;
+ void Draw_Error(Graphics g)
+ {
+ //디자인 모드에서는 표시하지 않는다 200714
+ if (DesignMode == true) return;
+
+ if (arConn_DIO && this.arDI_Emergency == true) ShowPopupMessage(g, "EMERGENCY BUTTON", "비상정지 확인\nEMERGENCY or POWER LOSS", Properties.Resources.error, true);
+ else if (this.arDI_SaftyOk == false) ShowPopupMessage(g, "SAFTY SENSOR", "안전 센서 확인", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_Alm[0] == true) ShowPopupMessage(g, "SERVO ALARM", "Y-PICKER 모터 알람 발생", Properties.Resources.error, true);
+ else if (arConn_MOT && this.arMOT_Alm[1] == true) ShowPopupMessage(g, "SERVO ALARM", "Z-FRONT 모터 알람 발생", Properties.Resources.error, true);
+ else if (arConn_MOT && this.arMOT_Alm[2] == true) ShowPopupMessage(g, "SERVO ALARM", "Z-REAR 모터 알람 발생", Properties.Resources.error, true);
+ else if (arConn_MOT && this.arMOT_Alm[3] == true) ShowPopupMessage(g, "SERVO ALARM", "X-FRONT 모터 알람 발생", Properties.Resources.error, true);
+ else if (arConn_MOT && this.arMOT_Alm[4] == true) ShowPopupMessage(g, "SERVO ALARM", "X-REAR 모터 알람 발생", Properties.Resources.error, true);
+
+ else if (arConn_MOT && this.arMOT_SVOn[0] == false) ShowPopupMessage(g, "SERVO ALARM", "Y-PICKER SERVO-OFF", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_SVOn[1] == false) ShowPopupMessage(g, "SERVO ALARM", "Z-FRONT SERVO-OFF", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_SVOn[2] == false) ShowPopupMessage(g, "SERVO ALARM", "Z-REAR SERVO-OFF", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_SVOn[3] == false) ShowPopupMessage(g, "SERVO ALARM", "X-FRONT SERVO-OFF", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_SVOn[4] == false) ShowPopupMessage(g, "SERVO ALARM", "X-REAR SERVO-OFF", Properties.Resources.alert, true);
+
+ else if (arConn_MOT && (this.arMOT_HSet[0] == false || this.arMOT_HSet[1] == false || this.arMOT_HSet[2] == false || this.arMOT_HSet[3] == false || this.arMOT_HSet[4] == false))
+ {
+ //안전오류도 표시해줘야한다
+ var SaftyMessage = string.Empty;
+ if (arVar_Port[0].SaftyErr == true) SaftyMessage += "PORT-FL";
+ if (arVar_Port[1].SaftyErr == true) SaftyMessage += (string.IsNullOrEmpty(SaftyMessage) == false ? "," : string.Empty) + "PORT-FR";
+ if (arVar_Port[2].SaftyErr == true) SaftyMessage += (string.IsNullOrEmpty(SaftyMessage) == false ? "," : string.Empty) + "PORT-RL";
+ if (arVar_Port[3].SaftyErr == true) SaftyMessage += (string.IsNullOrEmpty(SaftyMessage) == false ? "," : string.Empty) + "PORT-RR";
+
+ if (string.IsNullOrEmpty(SaftyMessage) == false)
+ {
+ ShowPopupMessage(g, "SYSTEM NOT READY", "장치 초기화가 필요 합니다\n포트안전센서 확인 필요\n" + SaftyMessage, Properties.Resources.error, true);
+ }
+ else ShowPopupMessage(g, "SYSTEM NOT READY", "장치 초기화가 필요 합니다\n홈 검색이 완료되지 않았습니다", Properties.Resources.error, true);
+ }
+ else if (arConn_MOT && this.arMOT_HSet[0] == false) ShowPopupMessage(g, "SERVO ALARM", "Y-PICKER 홈 검색 필요", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_HSet[1] == false) ShowPopupMessage(g, "SERVO ALARM", "Z-FRONT 홈 검색 필요", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_HSet[2] == false) ShowPopupMessage(g, "SERVO ALARM", "Z-REAR 홈 검색 필요", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_HSet[3] == false) ShowPopupMessage(g, "SERVO ALARM", "X-FRONT 홈 검색 필요", Properties.Resources.alert, true);
+ else if (arConn_MOT && this.arMOT_HSet[4] == false) ShowPopupMessage(g, "SERVO ALARM", "X-REAR 홈 검색 필요", Properties.Resources.alert, true);
+
+ else if (arVar_Port[0].OverLoad) ShowPopupMessage(g, "## OVERLOAD ##", "FRONT-LEFT", Properties.Resources.alert, true);
+ else if (arVar_Port[1].OverLoad) ShowPopupMessage(g, "## OVERLOAD ##", "FRONT-RIGHT", Properties.Resources.alert, true);
+ else if (arVar_Port[2].OverLoad) ShowPopupMessage(g, "## OVERLOAD ##", "REAR-LEFT", Properties.Resources.alert, true);
+ else if (arVar_Port[3].OverLoad) ShowPopupMessage(g, "## OVERLOAD ##", "REAR-RIGHT", Properties.Resources.alert, true);
+
+ //else if (arFlag_UnloaderBusy) ShowPopupMessage(g, "## UNLOADER ##\nBUSY", Properties.Resources.alert);
+ //else if (arFlag_UnloaderErr) ShowPopupMessage(g, "## UNLOADER ##\nERROR", Properties.Resources.alert);
+ }
+
+
+ void Draw_Menu(Graphics g)
+ {
+ //var buttonOk = new CMenuButton("OK", "1");
+ //var buttonNo = new CMenuButton("CANCLE", "0");
+ //var newmenu = new CMenu("body str", "title", eMsgIcon.Error, buttonOk, buttonNo)
+ //{
+ // BorderColor = Color.Gray
+ //};
+ //this.menus.Push(newmenu);
+
+ if (arMenus == null || arMenus.Length < 1) { this.HasPopupMenu = false; return; }
+ else HasPopupMenu = true;
+
+ ShowMaskLayer(g, Color.FromArgb(250, Color.Black));
+ var item = this.arMenus.Last();//.Peek();
+ //이 메뉴를 표시 합니다.
+
+ PopupMenuRequireInput = item.RequireInput;
+
+ var buttonSpace = 10;
+ var hSpace = 5;
+ var vSpace = 10;
+ var iconSize = 80;
+ var menuheight = 64;
+ var padding = 10;
+ var msgW = 900;// (int)(this.rect_main.Width * 0.65f);// 640;// (int)(rect_main.Width * 0.7f);
+ var msgH = 400;
+ var rect = new RectangleF(
+ rect_main.Left + (rect_main.Width - msgW) / 2.0f,
+ rect_main.Top + (rect_main.Height - msgH) / 2.0f,
+ msgW, msgH);
+
+ Rectangle rectT = Rectangle.Empty; //title
+ Rectangle rectI = Rectangle.Empty; //icon
+ Rectangle rectC = Rectangle.Empty; //content
+ Rectangle rectB = Rectangle.Empty; //button
+
+ rectT = new Rectangle((int)rect.Left + padding, (int)rect.Top + padding, (int)rect.Width - (padding * 2), (int)(rect.Height * 0.1));
+ rectI = new Rectangle((int)rect.Left + padding + 10, (int)rectT.Bottom + vSpace, iconSize, iconSize); //icon size
+ rectB = new Rectangle((int)(rect.Left + padding * 2), (int)(rect.Bottom - menuheight - padding), (int)rect.Width - (padding * 4), menuheight);
+ rectC = new Rectangle((int)rectI.Right + 20 + hSpace * 2, (int)rectT.Bottom + 10 + vSpace,
+ (int)(rect.Width - hSpace - (padding * 2) - rectI.Width),
+ (int)(rect.Height - rectT.Height - rectB.Height - (padding * 2) - vSpace * 2));
+
+ g.FillRectangle(new SolidBrush(Color.FromArgb(220, item.BackColor)), rect);
+
+ //제목줄 표시
+ using (LinearGradientBrush sb = new LinearGradientBrush(rectT,
+ Color.FromArgb(160, 160, 160),
+ Color.FromArgb(180, 180, 180),
+ LinearGradientMode.Vertical))
+ {
+ g.FillRectangle(sb, rectT);
+ }
+
+
+ g.DrawString(item.Title, item.Font, new SolidBrush(item.ForeColor), rectT, sfCenter);
+
+ //버튼표시
+ if (item.buttons != null && item.buttons.Length > 0)
+ {
+ //현재 버튼 영역의 갯수가 다르면 다시 생성한다.
+ if (menuButtons.Count != item.buttons.Length)
+ {
+
+ menuButtons = new List();
+ foreach (var bt in item.buttons)
+ menuButtons.Add(bt);
+
+ g.DrawString("!!", this.Font, Brushes.Red, rectB.Left + 10, rectB.Top + 10);
+ }
+ else
+ {
+ for (int i = 0; i < menuButtons.Count; i++)
+ menuButtons[i] = item.buttons[i];
+ }
+
+ g.DrawString(item.buttons.Length.ToString() + "/" + menuButtons.Count.ToString(), this.Font, Brushes.Red, rectB);
+ var butidx = 0;
+ var butwid = (rectB.Width - (item.buttons.Length - 1) * buttonSpace) / item.buttons.Length;
+ foreach (var but in item.buttons)
+ {
+ but.menutag = item.Tag;
+ but.Rect = new Rectangle(rectB.Left + butwid * butidx + buttonSpace * butidx, rectB.Top, butwid, rectB.Height);
+ g.FillRectangle(new SolidBrush(but.BackColor), but.Rect);
+ g.DrawRectangle(new Pen(but.BorderColor, but.BorderSize), but.Rect);
+ g.DrawString(but.Text, item.Font, new SolidBrush(but.ForeColor), but.Rect, sfCenter);
+ butidx++;
+ }
+ }
+ else menuButtons.Clear();
+
+ //아이콘 영역에 그림표시
+ if (rectI.IsEmpty == false)
+ {
+ g.DrawImage(Properties.Resources.info, rectI);
+ }
+
+ //본문데이터표시
+ if (string.IsNullOrEmpty(item.Text) == false) //contec
+ {
+ g.DrawString(item.Text, item.Font, new SolidBrush(item.ForeColor), rectC);
+ }
+
+ //외각 테두리
+ //g.DrawRectangle(new Pen(Color.FromArgb(20,20,20), 10) { Alignment = PenAlignment.Center }, rect.Left + 1, rect.Top + 1, rect.Width, rect.Height);
+
+ g.DrawRectangle(new Pen(Color.FromArgb(180, 180, 180), 10) { Alignment = PenAlignment.Center }, rect.Left, rect.Top, rect.Width, rect.Height);
+
+
+ //g.DrawRectangle(Pens.Black, rect.Left, rect.Top, rect.Width, rect.Height);
+
+ //g.DrawRectangle(Pens.Red, rectT); //제목표시줄
+ //g.DrawRectangle(Pens.Blue, rectI); //아이콘
+ //g.DrawRectangle(Pens.Green, rectB); //버튼영역
+ //g.DrawRectangle(Pens.Black, rectC); //본문영역
+ }
+
+ void ShowMaskLayer(Graphics g, Color maskColor)
+ {
+ g.FillRectangle(new SolidBrush(maskColor), this.DisplayRectangle.Left, DisplayRectangle.Top, DisplayRectangle.Width, DisplayRectangle.Height);
+
+ }
+
+ void ShowPopupMessage(Graphics g, string title, string msg, Image icon, Boolean isError)
+ {
+ //팝업표시할때마다 배경 마스킹을 한다
+ //var maskColor = Color.FromArgb(100, Color.White);
+ //ShowMaskLayer(g, maskColor);
+
+ if (isError == false)
+ {
+ //팝업표시할때마다 배경 마스킹을 한다
+ var maskColor = Color.FromArgb(50, Color.Gray);
+ ShowMaskLayer(g, maskColor);
+
+ var msgW = (int)(this.rect_main.Width * 0.65f);// 640;// (int)(rect_main.Width * 0.7f);
+ var msgH = 105;
+ var rect = new RectangleF(
+ rect_main.Left + (rect_main.Width - msgW) / 2.0f,
+ rect_main.Top + (rect_main.Height - msgH) / 2.0f,
+ msgW, msgH);
+
+ var TitleHeight = 25;
+ var rectT = new Rectangle((int)rect.Left, (int)rect.Bottom - TitleHeight, (int)rect.Width, TitleHeight);
+ var rectI = new Rectangle((int)rect.Left, (int)rect.Top, (int)rect.Width, (int)rect.Height - rectT.Height);
+
+ //g.FillRectangle(new SolidBrush(Color.FromArgb(220, Color.Black)), rect);
+ g.FillRectangle(new SolidBrush(Color.FromArgb(120, Color.White)), rect);
+
+ var rectTL = new RectangleF(rectT.Left, rectT.Top, rectT.Width / 2.0f, rectT.Height);
+ var rectTR = new RectangleF(rectTL.Right, rectT.Top, rectTL.Width, rectTL.Height);
+ using (var sb = new LinearGradientBrush(rectT, Color.Transparent, Color.White, LinearGradientMode.Horizontal))
+ g.FillRectangle(sb, rectTL);
+ using (var sb = new LinearGradientBrush(rectT, Color.White, Color.Transparent, LinearGradientMode.Horizontal))
+ g.FillRectangle(sb, rectTR);
+
+ //g.DrawImage(icon,
+ // (int)(rect.Left + 20),
+ // (int)(rect.Top + (rect.Height - icon.Height) / 2.0f));
+
+ g.DrawString(title, new Font("맑은 고딕", 10f, FontStyle.Bold), Color.Black, rectT, ContentAlignment.MiddleCenter);
+ g.DrawString(msg, new Font("맑은 고딕", 30f, FontStyle.Bold), Color.White, rectI, ContentAlignment.MiddleCenter, Color.FromArgb(24, 24, 24));
+
+ if (errstep % 5 == 0) errstepR = !errstepR;
+
+ if (errstepR)
+ g.DrawRectangle(new Pen(Color.Gold, 2), rect.Left, rect.Top, rect.Width, rect.Height);
+ else
+ g.DrawRectangle(new Pen(Color.White, 2), rect.Left, rect.Top, rect.Width, rect.Height);
+
+ if (errstep < 255) errstep += 1;
+ else errstep = 0;
+ }
+ else
+ {
+ //팝업표시할때마다 배경 마스킹을 한다
+ var maskColor = Color.FromArgb(253, 15, 15, 15);
+ ShowMaskLayer(g, maskColor);
+
+ var msgW = (int)(this.rect_main.Width * 0.65f);// 640;// (int)(rect_main.Width * 0.7f);
+ var msgH = 400;
+ var rect = new RectangleF(
+ rect_main.Left + (rect_main.Width - msgW) / 2.0f,
+ rect_main.Top + (rect_main.Height - msgH) / 2.0f,
+ msgW, msgH);
+
+ var rectT = new Rectangle((int)rect.Left, (int)rect.Bottom - 200, (int)rect.Width, 200);
+ var rectI = new Rectangle((int)rect.Left, (int)rect.Top, (int)rect.Width, (int)rect.Height - rectT.Height);
+
+ //g.FillRectangle(new SolidBrush(Color.FromArgb(220, Color.Black)), rect);
+ g.FillRectangle(new SolidBrush(Color.FromArgb(253, Color.Black)), rect);
+
+ g.DrawImage(icon,
+ (int)(rectI.Left + rectI.Width / 2.0f) - 40,
+ (int)(rectI.Top + rectI.Height / 2.0f) + 10);
+
+ g.DrawString(msg, new Font("맑은 고딕", 30f, FontStyle.Bold), Brushes.Gold, rectT, sfCenter);
+
+ if (errstep % 5 == 0) errstepR = !errstepR;
+
+ if (errstepR)
+ g.DrawRectangle(new Pen(Color.Red, 10), rect.Left, rect.Top, rect.Width, rect.Height);
+ else
+ g.DrawRectangle(new Pen(Color.Gold, 10), rect.Left, rect.Top, rect.Width, rect.Height);
+
+ if (errstep < 255) errstep += 1;
+ else errstep = 0;
+ }
+
+
+
+ }
+
+ void Draw_Conveyor(Graphics g, RectangleF rect)
+ {
+ //컨베어표시
+ g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Black)), rect);
+
+
+ if (arDI_Safty_CvIn || arDI_Cv_Detect[6])
+ {
+ //입구쪽 감지센서
+ var rectdetIn = new RectangleF(rect.Right - 10, rect.Top + 9, 5, rect.Height - 10);
+ g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Blue)), rectdetIn);
+ }
+ if (arDI_Safty_CvOut || arDI_Cv_Detect[7])
+ {
+ //출구쪽 감지센서
+ var rectdetOut = new RectangleF(rect.Left, rect.Top + 9, 5, rect.Height - 10);
+ g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Blue)), rectdetOut);
+ }
+
+
+
+ //컨베어의 릴감지센서 위치를 표시한다
+ var gridsize = rect.Width / (6 + 1f);
+ var senseW = rect.Width * 0.02f;
+ var senseH = rect.Height * 0.05f;
+ var slist = new double[] { 50, 350, 470, 890, 1110, 1440 };
+
+ for (int i = 0; i < slist.Length; i++)
+ {
+
+ //선으로 영역을 표시해준다.
+ var PosMM = rect.Width * (slist[i] / arMcLengthW);
+ var x = (float)(rect.Left + PosMM);
+ var rx = x - senseW / 2.0f;
+
+ //센서모양을 그려준다
+ var rectT = new RectangleF(rx, rect.Top + 3, senseW, senseH);
+ var rectB = new RectangleF(rx, rect.Bottom - senseH - 3, senseW, senseH);
+
+ if (arDI_Cv_Detect[i] == true)
+ {
+ g.DrawLine(Pens.SkyBlue, x, rect.Top, x, rect.Bottom);
+ arLastDetectIndex = i;
+
+ }
+
+ if (i == arLastDetectIndex) //마지막으로 지나간 것은 색상을 변경 해준다.
+ {
+ g.FillRectangle(Brushes.Gold, rectT);
+ g.FillRectangle(Brushes.Gold, rectB);
+ }
+ else
+ {
+ g.FillRectangle(Brushes.White, rectT);
+ g.FillRectangle(Brushes.White, rectB);
+ }
+
+
+ // g.DrawString(i.ToString(), this.Font, Brushes.White, x, rect.Top - 20);
+ }
+
+ Color borderColor = CVHasItem ? Color.Gold : (arConvRun ? Color.Red : Color.Gray);
+ using (var p = new Pen(borderColor, 6))
+ {
+ g.DrawLine(p, rect.Left, rect.Top, rect.Right, rect.Top);
+ g.DrawLine(p, rect.Left, rect.Bottom, rect.Right, rect.Bottom);
+ //g.DrawLine(new Pen(Color.Red), rect.Left, rect.Top , rect.Right, rect.Top );
+ //g.DrawLine(new Pen(Color.Red), rect.Left, rect.Bottom, rect.Right, rect.Bottom);
+
+ }
+
+ //동작시 모터의 진행방ㅎㅇ을 표시한다
+ if (arConvRun)
+ UIControl.Common.Draw_Arrow(g, rect,
+ eDirection.RightToLeft,
+ ConveyorRunPoint,
+ AnimationStepConv,
+ Color.FromArgb(50, 50, 50), this.Font);
+ }
+
+
+
+ void Draw_Port(Graphics g, double motposition, double maxLength, RectangleF area, int portindex)
+ {
+ CPort portL = arVar_Port[portindex + 0];
+ CPort portR = arVar_Port[portindex + 1];
+
+ maxLength = arMcLengthW - 200;
+ var PosX = area.Left + (area.Width * (motposition / maxLength));
+
+ // g.DrawLine(Pens.DarkViolet, (int)PosX, (int)(area.Top - 10), (int)PosX, (int)(area.Bottom + 10));
+
+ var portwidth = CvtMMtoPX_W(350, 0); // area.Width * 0.25;
+ var port_space = CvtMMtoPX_W(60, 0); //각 포트사이가 60mm
+ var port_height = CvtMMtoPX_H(250, 0);
+
+ var position_front_px = area.Left + ((area.Width * (motposition / maxLength)));
+
+
+ var borderSize = 7;
+ var offsetY = CvtMMtoPX_H(10, 0); //포트는 축으로 부터 10mm 이격되어있음
+ var portY = area.Top + (portindex < 2 ? (offsetY + borderSize - area.Height / 2.0f) : (-offsetY - port_height + area.Height / 2.0f));
+
+ //left port
+ var NewX0 = PosX; // 기준부터 좌측 셔틀이 시작한다 (PosX - portwidth - port_space);
+ this.arVar_Port[portindex + 0].Rect = new RectangleF(
+ (float)NewX0,
+ (float)portY,
+ (float)portwidth,
+ (float)port_height);
+
+
+ //right port
+ var NewX1 = (float)(PosX + portwidth + port_space);
+ this.arVar_Port[portindex + 1].Rect = new RectangleF(
+ NewX1,
+ (float)portY,
+ (float)portwidth,
+ (float)port_height);
+
+ var Rect_L = arVar_Port[portindex + 0].Rect;
+ var Rect_R = arVar_Port[portindex + 1].Rect;
+
+ using (Font fCnt = new Font("consolas", 30, FontStyle.Bold))
+ {
+ using (Font fMSg = new Font("맑은 고딕", 12, FontStyle.Bold))
+ {
+ portL.Display(g, fCnt, fMSg, this.arFGInputMode, (portindex == 0 ? this.arFGInputFL : this.arFGInputRL));
+ portR.Display(g, fCnt, fMSg, this.arFGInputMode, (portindex == 0 ? this.arFGInputFR : this.arFGInputRR));
+ }
+ }
+
+ //g.DrawRect(area, Color.DarkViolet, 1);
+ }
+
+ private void Tm_Tick(object sender, EventArgs e)
+ {
+
+ if (ConveyorRunPoint < (AnimationStepConv - 3)) ConveyorRunPoint += 1;
+ else ConveyorRunPoint = 1;
+
+ for (int i = 0; i < 4; i++)
+ {
+
+ if (this.arVar_Port[i].arrowIndex < (arVar_Port[i].AnimationStepPort - 3)) this.arVar_Port[i].arrowIndex += 1;
+ else this.arVar_Port[i].arrowIndex = 1;
+ }
+ this.Invalidate();
+
+ // var ts = DateTime.Now - updatetime;
+ //if (ts.TotalMilliseconds >= tm.Interval) this.Invalidate();
+ }
+
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Properties/AssemblyInfo.cs b/QRValidation/CapCleaningControl/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..44193bf
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("CapCleaningControl")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CapCleaningControl")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("9264cd2e-7cf8-4237-a69f-dcda984e0613")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/QRValidation/CapCleaningControl/Properties/Resources.Designer.cs b/QRValidation/CapCleaningControl/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..a366221
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Properties/Resources.Designer.cs
@@ -0,0 +1,243 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace UIControl.Properties {
+ using System;
+
+
+ ///
+ /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+ ///
+ // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+ // 클래스에서 자동으로 생성되었습니다.
+ // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
+ // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UIControl.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
+ /// 재정의합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap air {
+ get {
+ object obj = ResourceManager.GetObject("air", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap alert {
+ get {
+ object obj = ResourceManager.GetObject("alert", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap bcd {
+ get {
+ object obj = ResourceManager.GetObject("bcd", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap bg_blue {
+ get {
+ object obj = ResourceManager.GetObject("bg_blue", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap bg_red {
+ get {
+ object obj = ResourceManager.GetObject("bg_red", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap debug {
+ get {
+ object obj = ResourceManager.GetObject("debug", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap debug40 {
+ get {
+ object obj = ResourceManager.GetObject("debug40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap emg {
+ get {
+ object obj = ResourceManager.GetObject("emg", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap erase {
+ get {
+ object obj = ResourceManager.GetObject("erase", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap error {
+ get {
+ object obj = ResourceManager.GetObject("error", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap help {
+ get {
+ object obj = ResourceManager.GetObject("help", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_pause_button_30 {
+ get {
+ object obj = ResourceManager.GetObject("icons8_pause_button_30", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap info {
+ get {
+ object obj = ResourceManager.GetObject("info", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap mot {
+ get {
+ object obj = ResourceManager.GetObject("mot", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap plc {
+ get {
+ object obj = ResourceManager.GetObject("plc", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap reel_big {
+ get {
+ object obj = ResourceManager.GetObject("reel_big", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap reel_small {
+ get {
+ object obj = ResourceManager.GetObject("reel_small", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap safty {
+ get {
+ object obj = ResourceManager.GetObject("safty", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Properties/Resources.resx b/QRValidation/CapCleaningControl/Properties/Resources.resx
new file mode 100644
index 0000000..da63550
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Properties/Resources.resx
@@ -0,0 +1,435 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABXRJREFUWEft
+ WHlM22UYxmMeMWo8ojPxH2E6l02dqPFWsrgZ2WaWsbiLjcTEOc8tGq9t0f3hkajTMGJBEDY2GFA3xmCj
+ COUqpXd/pa1dyzoJjGsgx2DGxOn4fN7m/fWADtNC2WL2JE8gv/f73vf5rvd7v8ZdxqUGu91+h9VqXQQu
+ t1gsiS6X6xo2XVxAzFK9RdLnqN1iR0WbeL+sQ3xZeVKUNTnOwqYA7+KmMwulUnkVgud8W+UVD+cMi3sU
+ ZydwZWGvqGh2jpjN5sXcbeaApcx9p/RUWGHBXPDjiChudJ2TJOlJ7hp7YOZWfK3yhghZU9wrdle3itxa
+ t/gUS/147pDftjB7WNTpbW1er/dadhFbNJkk60MIKgsgsZjRDCxlvMPhuAUDWNJokNzJ+/v8bWhvwr6R
+ XcQOQogrihpc5+XAqw/0CgjazWY/jEbjbapmx8AcxaivXWLOEAksZ3NsYbRIVWklXWJ5wWmham7p1ul0
+ t7IpBBD0xYrC0/5ZrNbbO9kUW2i12hsRfDsJAOP58wTA9vbGkm6/wHLMKJsuDWDpC5/OG/SJS8gcFdiX
+ LjZdfGD2krPV7jF59l7c1097VcHm6EGbGyfyFXBTNKRlhZADWTWesfnIgbLADKQg5MJHOUx0MBgMd6u0
+ 9sF3SzvEpoNdUZEOz3N7BvzCiGuLeygN7eMw0QMjfy81aFNPB0mc1mST6GBxmOiB5Vm182hb2ECRkA7E
+ S/v7haKmdQyDzp8WcQRKwnD4TWWzva9cax+NhkebnYNNRpsTS5oBX4ns+n8OjHYlcpTjcJOjZyZYq7d1
+ aAwSwlpzwWVYuStZykSYTKbZRSiH5mYFUsJMMAF3dNLe332Vj8Zo80DHUywpFLRPvlKdDOtkpkiFREGD
+ 62/M5nqWFUB9ff3VWF7zB2XtYfNaLEi5cilKMTrtssh78X9+3fF/kEmSWFoAEHkdDCkYQdjbIQZ8C/xO
+ pXMMrC7q9Yt8MPuMwP5s9xe2ELV4XMdJifZrwAtWL5ECN9dNBqPl2Hokc1kkF7YbaO/totdXakmPWIcG
+ /8UNuGHoDZJZ4xF6s6WarkWOMyXguXqDWt/SNTeLC9ufhqmoqIgr0zj+kFVHykU4fRVax9CUL38GBO2g
+ N43sv1LnHIjDwbA/EfSwiZSJeGqq8RBCNX09x4kaWNJVVKDIvpWaX89Rcp6nN1vVuJ66wyXT8SzTOvqy
+ 1Z6xpKBKhU4kRv8xxwkBvq9D4HJwJ/6fxZ/DAvY3X/05UKTg0T/KpsgARwlqg/3UApw2cnQ/9o3OLJnY
+ 7AcG/+wP1R7xANptPthJg8hkU1gYTJKW9h75pL1oNEl6NkUOBNuSpgyM9ojWOcImP6hNanGgTUbNiTHM
+ 5Fo2hwDfP/wsqIKiNwz6f8Lm8ECDRLXB9ptS4/oL/6cH35WYnc9Tgl5qlTp7H5v8wLU1P682UO7TNapQ
+ t46hby5sz0NUPPwuMVkspZRJ4jlhU+I+1OT8ExniTnYVHhqjZKJfA6jT1sMdNCIlnCbh75YC3NvyW/cR
+ XFEIUsHdQoD2379xqNPXTmYyakSarfTqE74fmigbBNvpXsYgtrKLC6NOL7nuCyoelhX0ie3lbeJ17Ce6
+ kuTvVNxCSAp3CwEGM0tntvyyeZzIcIwHt8E/+uRw98mBhmm7qry+juEcEmmZkQVqqMjlbhNAIsF0Ov0v
+ 5IfOFpH8v4zHf2G9kwqFbZP5mgDavLnYR8/wu1bmPLzUPjrSLgxmqRHBb+bmkwL7biH85VXqHGeyaty+
+ F15OrUeodC39NACIm8NNIwMcPwYHymNae/+eOrcobDh+HoWmHQ5fo98HuVlEgM/ZEEuH5Hb+ND2gh8+M
+ /Xx2GVNGXNy/B7Gt3iRjVn4AAAAASUVORK5CYII=
+
+
+
+
+ ..\Resources\icons8-automatic-gearbox-warning-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAsxJREFUWEft
+ ll1IU1EcwBdGBUFvPfRUD0VBjaAeerCHCMyHHkrXsZwhohOE2q6F835s0jUlg6h7J2rp7hJsICzQHiJI
+ LGePfdFLDyVEEEG9SEEguez0P/Nfzu3cfRjn+rIf/OAw/uec38O2e11lypQpEcWMBRXTWgSpQ75X++9u
+ x+sLo5rWC84hYo3EavD6wihmdIJ7iFgJXl8Y1Yz1cQ4QbfGBcsTycg4QbfGBmjG8g3OAaIsPZMAv+Tnn
+ EGHKkegpvLo45EjMzztIgClwRu+Pb8Ori6PjxthW2Pgl46D/tvPmCJWuD9C27lu0OdxHz3depWcv6efw
+ ytJRjFgD76JCdvXfXhoY6aWDd0K0vaeXNso9tK49TM8EtBw9kjaE160N+AO9ApcuZUegC7IZfaUY1his
+ ZdmwTirG6C76aPfmxeSB8VTSTb9NHaKh7jZuHNMT0N7hVWtHNaxKNWINQcQ92bTCqhGtDUZG95BEogJH
+ cqAJUpGadU+zyPmpw7Q52MENZNZeCO3Ebc7yc8a9DwJ/s8j4YB03jkkktQW3OA/EvWGBrxPHuXHoOI47
+ D8RNssC5B5W8sGUl9SuMblje4TC/Zt0N8F18+SxePceNQ2v88kHcsj5AxLXsqExJIHQZR9cHiPicHbVK
+ SXuIo+sDRKRyolb7/Ziub8Rx54EAH/gxIyhHj6QewfH8VHlb3zLZ+oTXp1d5fbS6vnU/k63ZZytzPrpi
+ S/qVKb2u991n60yamvQt8OQY5sUx4f9QwdH8iApksEiImc+OWzb0GMfyIzKQATHTuXFpfxBd34Rj9ogO
+ JH5tkhOXlkihozhmj+hACElmh2XYhWP2OBD4IStqRUl9gmP2iAwkUngvNwwlAe0pjtojNDCgSbywv8J3
+ 8CKO2iMyEB5pjbwwNEEIsX0J/ofIQPY4gxD24sCeKgvgJ3DC066expEyZcqUhsv1B6iAtIhPh2shAAAA
+ AElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAsFJREFUeF7t
+ nL1uE0EUhS0QvBDvYCcVCHAQeRoXId4N1IBrRyClSiSwgR7vFoCgQHZkp4wpDUqo+Bnm7M5AFM1aa07n
+ OUf6uvG17ifvrKvTUBRFUZan3fl8vdnN7rXS/FkrySetJDu3mDXD7mR3K3bMtrCzW59Lq5vf2UhGJ5e+
+ LAZmG2l222lYPe2Dg6utNHvkB24/+WR2h3PT//DdHB3/NIPZ77UCO2E37Ihd/d72x/Ow0zFXnJb68fI2
+ 93KTvPliBtPwF68jL6e/TPf1vNgdDpppvue01AseWy+vN/oa/JIY6I0WFySObjk9y4PL0995xS8vMDgm
+ dl/N/eM8rfViKd629gO4B/BTDg2NCTjYfvyxvA+7o7bTVJ1mkj3HYZgPDYyRneGpE5jtO03VsQePcXjf
+ vpFCw2Kk//7cPcb5xGmqjj14hsOHkx/BYTFyZF2UArMzp6k67mBwUMx4L05TdSQwjASSSCCJBJJIIIkE
+ kkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkE
+ kkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCDJKgKL0gkU
+ LYQGxcjh+G/pxDenqTr2kGpPLrFa7UnZn2ceDE+Dw2JkZ1AW7zSTrO80Vcce3MJh1B2p+qmsfrrvqp+a
+ aX7XaaoOCrbs4Rk+gAq40NCYQJ8gXFimN3rvrjlNy4PmRnyorL9bBAfHwNO3C7OZlvV39v676fTUC5ob
+ vUQUkcX0OL+wu+KX909eljot9YPaSzQ3ugHFnYgWM7yR1rFXCzthN7w8/Z3n5f1XBagPmhvtkOmFgbFg
+ d17xsa0KLk+UD6I/zw4eW4o/22sGdhpjR7xta78wFEVRok2j8Qfk0Qty9BRILAAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAsFJREFUeF7t
+ nMFOE1EYhRuMvozLtok+gxq1UMDAri7EXaXs2WkpbO3MGiyKb6EriVsD9g68AwFcSa73n/mnMeROM8PZ
+ zT0n+XZ37uT/OnOnq9NgGIZh5ufh0a8H7ShZaUXJxHHaisyVw9YMN5PMlkzaY7MsM+v4WFrj6aLb/OzW
+ zUIgaUfTjmqonu6Rved+id18w5W9b/ZwMLRnvZ79s/bS2tUntUJmktlkRpk1n7sZTUeNbbugWsonl/f4
+ 46n9+u69vVl96r1xHbl59cx+2fyQzp6JTHZUS7noa5tucPym771JCBxv9GcSm3HyQvXMjxye7oL0zJMn
+ z7dxSHzeHGZPYWxMqQ9L9rXNzjx5lH2bhoQ4WN77rk+h6aqm4rTi6aEslsPUt2GIfBqMMoGROVBNxXEL
+ f8vic/dF8m0WIknvdfYau/+Jqqk4buGlLL6u4V+Vu3K93lGB5lI1FUcXejcKmdyLaioOBfqhQBAKBKFA
+ EAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFA
+ EAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKki
+ MCudWO94NwqRq7XFXOCFaiqOW8Tak1tUrD2RjkBjJ4Md72Yhsr+1mz+B+6qpOFI+KIul7ojVT1n1U1er
+ nxxLqqk4Wj6WyAVSAefbNCSkAiuVFxvTjH/eV03zI82NclFaf7cRbv3dj7d9+2icdwia56qnXKS5MZco
+ FXAhvc5/3azy5M3kxclQtVTItl2Q5ka1n56J0mImX6Q69mrJTDLbwdbo/zMvk3eXCtA80two7/9sw1DI
+ Zq722hZFDk8pH5T+PLfpiSP9s10zZKYTnXGp9AeDYRgm2DQa/wBGopc1FSaqkQAAAABJRU5ErkJggg==
+
+
+
+ ..\Resources\icons8-bug-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-bug-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABOJJREFUWEft
+ WOtvFFUUb6Ifff8HRv8AE9xZmqJsd0ZgW0BCWWp4tDxcKIK8FFsSEx/VAlXjB1NrNWpCMUSiSLR0i00w
+ EEHlIeq3on4UE40K2Z2ZfR/PuXvnzr0z03Vf9VNP8ktn5575nd/ce+fcc9oyb/NWwf6Khe8yDa0zHdX6
+ zaj2Nv79iMCv+2mMfLj7/2MQidye0sNPpPXQl2ldKyDgP5BHTKX0UDfE47dxmrkxFLYmpWu/egRUDVPX
+ fkkZodWcrnl2a2nrfSjsVFBQgrkyClZvHOydW8HevQ3sJ9fjPT3Ql4BcJ28uWnQvp2/MbkVaHwyaNbMr
+ Brk3DkPxi9MAV34EuPqTD8WpafQZBqt7ufIse97Qfr4ZXfAAD1OfkTgk+10hXhGF/OgIwKVrgaICgS+Q
+ f2c0aFZv1C2SL6syc3ZiA5TOnlcCFz49CdlDg2DvSoC1uRusresgs7cPskMv4+xOKEJL575Gjo2yQDaT
+ /0QeuoeHrd6C9pzVuxbgm8ssWOHoUbA2rlHGg2BtWA2Fj0+4Qi99z16Atkh26CXmY+qhT3jY6iwV1eLe
+ QA7s3QnIDOwLHKuEzMFnAC7/IESWzl+A/IcfiHH8wlfx8JWtnOekpTXCYO/YLIgagf10golzZlMWiLhe
+ VZ4sJ+HyQ7SEtMeIzFq3SiarHfiiucOvKF+8RyBgjlzLZcxudEKwL3XkLYUs9+ZrClmtMDseZdsjO/gi
+ 5N8bg+LnE5B/d8zrl+Qygu1vY8Hd6FQwOxezPVOaPisEls5dgPSSVi9hs5H/s63tTi7Hb+zglx4onp4q
+ i5v+Cq+TYO/pk8nmBGb04RiX47e0ERoQjsvb3eV9/Uj5XsdihaxhLGtjqSsde8S9Z2gHuBy/pQxt1HGk
+ hOsIpPNVEDQJdt8mscetHjefmnp4hMvxGzocEwS4oYXALesFQbNgbep2+Z/aIo2Fx7kcv6FDoECaTZeg
+ OVAEYhXkjlUQKC+xrSxxQiJoDljS5vzVLzGW6cLxcV0Q5IaHBEGzkKWkTfy4DynvirFo+Fkux29me7hD
+ JqF6jkjoNJHvNwPFz04xbqp41LHQMi7Hb9TgoBP1EMyZik1nFmnPuCSNgZbU4c0NH5LHchUTNRnmoTOC
+ CCthJxUUxsdlooZAXEwgFg5m11JpLDzJZcxu1H3JZPmxUfG29ZRZXmSf7xd8VJnLY1TmcRmzG5U8VOU6
+ D9GJIqrob6+wBCuT1gKWnL+7yrjobPe0ADNVt6UpI9wlPQj2th63B8EAmef2ysR+yEcXBytYHQ78a2/v
+ UcbN9oUrefjqjFpDmYCOO+ftCbSPgkp+M96Jdd774jedtWrJfw0y+3epzxjaCR62eqO+VV5qgr29V22a
+ EJl9O9xAWKYVJ6ewnL9YbkknJhVfWlbvzCFmqMzjYWszagmR4IZMaK6IuG0n9hiU0NnYYwuhcPy4IkgA
+ fekZavBlLsx5v9lLtPt5uPqMRHpnkkDpITOwX/zOHNijisL0VJxMQu7Iq7jsMeVZjpmGxTlGfSu1hgFB
+ FNBXWkyeYQIpnQT5EGjP1b2slYxaQwxw3RtQAS519oWD2PMOBo3P1Py11mqUq6j7wmBJhDgWfcAujl/n
+ 6ISgJDzn/37zGp2b1ENQmU5lEoqhevIYu8Z7dPD/EYncwd3nbd781tLyLxOgcrDBNHH8AAAAAElFTkSu
+ QmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK
+ YQAACmEB/MxKJQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJrSURBVEhLvdZd
+ b9JQGAdwEr3wTm9M/AheqJlfxWSfQudMBnYaWarQ8WIyMBlUWoSp0CkzawWM6C5G0aiZzhfoMCZidIu6
+ bG5DL8yc0mMPO8cwOIUyWv/J/6aF55eekifYzMogHT424AqdoGl6H7pkfSgvn/bzYu36XVmlfNHNU3Tk
+ MLplXRwe7mn0zqw6pyyCuYUlIL+sgLPe6O+BS+xx9BHzA1GGnVLThTJ4UvxUh2ELrypg2BezBseomFeA
+ JCsg84iMn2FCfegrvacZxW3BtWMf9se2TMH10B14aSdO+a719uSdUFxTcaMorg7e3bHbPZH0yBVBlfIl
+ IqLX7OMyeNbwzvPz74HDw//UlsxeNFo/rnCSCgnZqjNwE9x6ME8E2jXThN+QCurgxXA/Gk8OROPizFr1
+ lwreLa2CnnFtyVzmp2unGfYIIlrTiP7YAvX+wx/uAtfeOZeaUbWjTiOiNe6Q4Elm5Y3vCGxs5es6GNHw
+ yfvPiQCp4mwJXAgmVDvD3UZEa9qhuBgXci+IUGNNQ3GN4KajuO1wQyjDCkPNPySjJeEQdWqow8uJiGiN
+ wx8/FJyQlneD4kLcObaNG0Jhzvu5PuGevEoa2E3fLq7Un9wZTKpDTCSLxuunP5XaM8pOvi5/XK6RBhot
+ PLHxRKZq9/ASGt05lDey380KpTeVz39IQzt1Y7OmLYfcmms8cRKNNJ46HhaUbvGeUByMFytfDOGmoDhG
+ cVNRnE44RKNTuW+mojh0IH6AhFuK4kCcCQsLxQ/b+H9Bcc6Nxg66rwqKtsfXAxPTK3C9olvWB/5Hosbi
+ R+F6RZd6jM32F+J393EUKic/AAAAAElFTkSuQmCC
+
+
+
+ ..\Resources\icons8-hazard-warning-flasher-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-help-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK
+ YQAACmEB/MxKJQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKmSURBVEhL1ZfL
+ bxJRFMbrwvj4a4wLXdRUXZo4vGkxtDst0MQFGKMwMB1eKdVNI9CdaNQmxkWtIQyvqRTqprU8VpZuNLFt
+ FOq0tbpo7ALvCbch0gsZ4Frjl3wJmTnn/HIvl3MPff+F9NZXZxi7cFnBCka1K3lf7Uzcg88KNjZwhc+c
+ xmH0pOFSar17Pmfwvd0YCxertsjavmPmUw1se1zeh2cGf2Z90D2fVXMJJU7rXhoucVXPi2vm6dKe/021
+ 9jC+29YQYw4X9/QesazhkwO4TGfSuUXXSCD3zfe6QoS0s3euUhtGuTo+5cDl5EnHi89NofzuA2GHWFiO
+ IdcULOwg+FNctr104ym/JVz6QSrWjS2hwne09RwuT5aajV8yBhalXlbabKhlDOQkrSt2EWOaVTuhd6dX
+ fTIOUaf2z1VrWj79ARgY1pDKmVTBd0JKfLn0s3aoz9LBkffw7FAQ2/webArmtxln8jrGNTToSb9rtVoa
+ YPh16N1iFuPqYvjoWYN/YZOUAKYBBhu8C5t/dDhoeZbpkkQKBtMCm0NFSWEX+jEWTrNgvBMpH5CCwbTA
+ tsjqL4aN3cBY1BpRl7K/+EgMBtMC21FvR33fhbHQk5Pj9pljAqNFYmx9q2EbSMFgWmArYihZYQhj/+Hh
+ unZbODXky2yQgsG0wAZvZn10dOUkxtaF2mXubzcQHZ/OYFxD0DLNocI2KYkG2PSoRcsEocu/4Jn9Skzs
+ xZ7ZL9AuVzDmqDQuod84kduifS0OT2SrKjZ6AWPIQrPS2K2p9y1PeKe+ObUsabi4CZdvL3R3PqM1+mh5
+ 8QkuK09aLn13ZLKHYW9ycUvrTltxuc7EOKLnUfIyGlkrssfbYL6KBrwllSN2DpfpXjCkyx3olVySwWn0
+ dOx/Yeirr+83SXRvTbd4pKkAAAAASUVORK5CYII=
+
+
+
+ ..\Resources\icons8-info-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABF1JREFUWEft
+ Vt1PU2ccZtebu5gXy7Ys2TJ3vf9id5rtZhdeumQxQbaQQQnooAWhxZaPtpSV0p5+QG0nLT0gVaHGQqQF
+ lkgUK6UyQJSYbZmaqVkCi5ydp/m97Hh62h5LSxazJ3mSk/M+z+/39LwffateOySCX22lr317rxTCS2Uq
+ h3Ss+o+d9T6hFMJLZSqH/wPuF//pgDVnLJ/09bU/dwx2PyuF8KIGlSsvTp2xftxs9qdH40sCP5MqiZH4
+ baHFHMjUt9k/pbLlQTnCMZY9ZDnDMZYtZCXCMe47ZCXDMZYc8iDCMb5yyIMMx6g6JM6oZvP5ZRiUCknJ
+ jSWeGRyRVTU0cRcfFKuJcfQueE42mrw31YT7MXj1UZ3e2UG2oqAfnlYTEhnIlovmXv+MklFK6/Dkb/Ud
+ Tg1ZVANL54fe4ksHGciSi3qD2x2O31I0gl3c+P269oHjJH9lFAuJ9w0GzkXyXJxq6z/mjszuyI2R6ZSg
+ t4+u1bcNfE7SklEoJMdf/7tGZztK0lyc0HQeOufk78mNLZZApqbV/hnJ9g2syRZxTcr7oDcykEwZzRZ/
+ Um4UN4SHhssG1JT3EUMnaDg/Gjpdgcj0y7tNKeCggW8K2q9tXnDMbBQiNNCSbQ/ygOjZcI7z03B+fNfa
+ f9w7nnwhNcsD9mgDH0U8iY1f7jwV1JD3JDZt2qEjZM9CHtA7lnxRq+0vvgG/1na/Y3Jf3JKa5QHdXdHp
+ zNKTvQCrqafC8o3Hwu2FR1niGe/Y+F1R6zZGp4Uq4Q0qkRPQxI1vVTf2HabhwtBZAj9LzdKAg/rI9wvx
+ jb9Y8yUx0NzUQ+FSMCWEXfPbIJ7xDmGZDh54qUxOQK01sEBDxdFgdId5yTpkAbtPez8Ic7NrrOni7O/C
+ ZGh519cbW7ad5Y8a63xvgnbx2WeeSk+G0rvQMD28qIFa0oA4xhqNnhG8V4XaVvvJoej8rjwgZ4zGVmhq
+ 8eUQzmO6wmVNCuCMV7xToZVdaOGBFzUwJg04HJ0Xas86TmZNavBNU897vZ7or9KAg+189dzV9edohPWF
+ KcSXI0teiJqVudhD0fNnNiRqoJY0YI/Y64TG+j5Z1EFnDS6yAho9FxxxzqyiAYhNgHWGaSV5Xgy0hb64
+ /FNKuHPj302FWqjJ6uusgUWSq0edwTXCrktave/+ys3Hew0wZSHn3LZNe+EtkudFp8Z1SNTuSDdM5tYT
+ oUXve8DqoxfJS4PbOHFZIeCOmoCWmuG3lQK6TdEJkuwfvU3n31WaYuxWkuSFQxf+UmmKUZMk5YHiJhGP
+ EhrOiyFLLKO0SWi4vJAeM5gynHM4Smg4B+6uS/5YnmOmIlA6qHHO4Uv2d4wdw5oEMa0+cyyDcPkO6opB
+ 8a9OnEKss1FufhvEM96xLwfK/+oqCs40EcdOZM2xvrAJMO0gntmaA3FZEKf2pctCRWE7HfiQ9ybXWYBi
+ 5D3JTVzRyH4wwCU0zF1f472J1UKERunC+pqgquofdvoa6+LDQkwAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAnhJREFUWEft
+ ls1rE1EUxd/eP0BcigvBpS5sQcVdFEVTUFuoOi1pG8ViotSkBGea1tSQzJBObEhSMOmHMYm2JqmlWgNq
+ IoiLdiXBD1zozmVx6cJc33u+DIozNZ1JYsU58CMhN/eew7tvYJApU1tZMIe2wRSaw6w1lDh6jj/3Mhv9
+ ghgaxMOgKcRQidnoFx7iVR3eGCrMRr/++YDvvAgWL6pTvorgW0y9j9H8gPJpBMEObT6Oq/cxmh/wlQvB
+ LKdO/gKCrxH1PoZ5B41iBjSKGdAoZkCjmAGNYgY0yv8RcOu98vd6pT0cL+0juH3uA6/Du5ffT+5800je
+ yrtWs+KxrrOeiR3Mtn71jYY+9fAitIpeQfrACVI3s/+zAsl7n8dvp6EV8JEZ6B+TqzSsII6xCBur8Oxl
+ BQPzKyVw+SQYuMaDP5YA8tvPTM5mwe4SwDnih9TSk19qm+lN5pbBKcbIaVbP82I7i6EtPIAG7By4DPst
+ JxW8oahicGsmC20Wq1KzdHIwXywp9c32JguP2cqlaRZDW3hIJfWwSJs5hwvuLK7AoRNn4JTtkmJidwu0
+ Hs88gCteP/0uT6dpTW+v/Ua4ygniKouhLTykQlbUfrQDjnfbwBMIQ9sRK5wbHFJMHCM36WBiUDutqUyO
+ 1vT0xtM5sI2GyF18wWJoCw+hKx72TyirOGztUgIQyJ0jqyE1Qv/QdaWmpzeSKbAnWvSxGNrCQ2hAQnJh
+ CUKJFGQfPVUMaiwUyyAn72Lz/G81Qj298XSehvtxetJ6n0fezmJoa1hOfHEGo9BsHIFoba3k4Vjv4YMH
+ WYSNhf98HzettQRBLJO11nVypkz9FSH0HdsLU8gVsNwDAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAADlRJREFUeF7t
+ XOlzFMcV96dcH5L8BTm+53alkg+5/oNUkvJ3V0VoDyGMsGFXO7urlbQ6kXbn2FurvXQghGStThsMso2N
+ IWAS4jJg7LKNMT6CQRDQEYOh079mZMFs7zkzwgev6le1pZnu9/qpu9/Rr+eRh/SQvr5U74t/x+oM/sni
+ DFhtLjnU4A0dafAo521u+ZJVkFYszeJnAH7jb3hmp+/g3fpm0bKlOfBH9KF29/WgOqH/txZBbKeK+LfF
+ JX7a5I9f84gjK10DeSIOHyCxiRfJwNTLJD17jGQXjjPgN/6GZ3gH73rE4ZWm9vg19GHzKKfq3VIbVepv
+ VDZfLapzKz+2CHIrnUUfbmuNXm+LjN+UR58jmbl/kKFnXtUF9IG+2sLjNxt9kRt2t/KB1SX56Mz+kcr+
+ y0t1TulRm0d+lipu1SvvWYuMP89VgpEIjy+SFnlszeqW1+weeaHeFfyVKs6Xh6A4q1t50e5Rlulyu23E
+ TKsW4NmTnL5D981V+g88bHX2/1IV74tLj/uC37e5pSQVeKV3cPZ2bv44d3CbCcjQm5q5Q/dJzMpEvaP7
+ e6q4XyyyCeJjVHlXPeLoanrmGHcwDxKpmaPEHRyhs1G6ahXEv6liP3h63Of7lk2QB7Z6Q8vhvebvcXoR
+ HlskW73hFTudjY2N8jfVYTwYgnWly+INZ192OT33xZt1xZCibpGjN7NKjczZB2atLY7+n9sEaal7IP9Z
+ boEvKFDqmdkoJ1dXIn/L6pau1LnEn6nD2hxCBECVdyOQW7jDE24d0sh+8mRnnDnCvOdmAjzBOzj0LPf5
+ OjAGui/esDjEP6jDM5egPLpsV+C88gQCBqePEG8wSzy7Q0ROREhnbB/3PTPRQXlKlLe3L8RkSeZf4b4H
+ YCwYk+lKrHcEfkqn/HV55ABXEACzrrFFJk9PJ8itT3Lk6oUs2eaTSw7AaIAXeII3ZJjMJ5hMUgm5lT0H
+ CWbiFlfwF+pwjSUYDOx5pZZtd3KK7OoMkXfPpAlZGvocGIBPGeG2MQPgNTmVuE+Gd8+kyK4OhfQM5rlt
+ AIwNe6LhhkV1Vc7BYPAYI+CH0L7+MLn2fvY+wYG1j3OkqU1hyQBeeyMBHuAFnlo5MCNb+kOkjcqamz/B
+ bQ/DYndLZwx1cRBdOHrSK3yrdoK0SDnSF4lwhV7HwecGiDuQ4rQ3Fu7+NDl08P7Zdy/+958cCcQjTGbI
+ rm2PMTp3Z1ZsHimuDl8fIcJo8IZWivl57eExEohFyGef8AVeB/YiZ1eI7TW8fowA+gYP8OLJsA7I2h+N
+ UNn3cPuBn9hAne0tzsBfVDXURmpse7VYhNERnyStgRD7r/IE1eLE0STZ1RWnbfnLRw8wcxzdcfLq0UEu
+ by2wWloCYdJFx8DrLzR2iBoVeUlX7Gx3K0mPNLrKYyAO76cGQyH/5ex5xXDnyhDxi2HSn10o6E8v0Gdb
+ MMJ48HjzgP16Jx1DMLef26cQHF21CUpUVUd1VOeUHqXxIjcxkJp+hWxvC5HzGmtbCd58LUWa2sMsS6Lt
+ t1bAiO3wh8kbpyqbfffivbNpOhaFjUnbLxIQyGXW5NpQ5b3Um5otcFmwVIT+DJmeLb5Rl4MYj5Z0J6pF
+ TzJPneYol1clyM8kiNCX4oZ+PcmZ2za38ryqlsoIyUe6fFeznFnSl56j+164rNEohQ/fypBtrQoxIgGB
+ PtAX+uTxqgQYC1ywvvR8Qf9YKXavsoIVqaqnPDV4lWe7B6ZvazuDQpvo0sW05wlSDTIjMeKPjd/Xfy3w
+ R8dJZjTG5VENsB1hW+JNmi7q/9o9yryqntLEIg667nlpeOpIk9Bg7UvlXmADZyHe1JECPpUCMTf6WHqv
+ ckNWCkoyhmOAAj7QBc5Y/i70/VBVU3HC6RkOgHidPNEaIu+fq32paDE1HSc+ufYQr0UaJlN0/+L1XQs+
+ eDNDnvAp3NNC6MTqkjyqmooTnX0f8E7P8J+JZvQvlXuhJ8QrFbLpQSRFZ+Fg4SyEL0yNyUVVTXzCoTfO
+ bbWNgV1dsZrchHI4dJCGeDT84vEsBVjNxUMD3D714My/UsTZA2f/fn6w0Ftbwje2OMVfq+oqJKsr6G8L
+ 77upbRyfPEx2tCvk9mU+Uz2ABXR2KUQZrTzEQ8gGJ75cyFYL4Ig/6VfYmLV8W5XxT6mOfKq6CgnlFrxE
+ KZKTE5r0kJE4eSxJdlYc4p1gIdvJY8avhnWMT8ZZmKrljTyo3R06qarrfkKRDupMeBvoUx2Rghyfkbgb
+ 4kUqCvHwDt6tJmSrFu+cTtMxRwt4Qzesnqcp8G1VbRuEKikU+mgbDdIQp8Ej0eVr/HK5F2+/nmYhXpQa
+ sPbIGN1zo4wvgN/+8BiJTrxAl1eYvPWaef9MANuK3S2ysWv10dSeuMZN/aPEDFVS2gaB3DOkU4lwGRmJ
+ W5eGiNCrkO2tMpmbT5ALb6RZlge4QB13/O0J+sxN3zFj79OiQ44QkXMg5Q6OLG9pFreoatsgqyCFUTam
+ bdARmyBPU3+Nx8QoQHn9UTr70qWTsngWSYVJIFY+56cXk3m6D8YK90Gqozt2ISSpatsgFDfyDl1axCw5
+ fiTJZWIUhvdGSYwqr5J9De9E02GyZ58xEVExHHs5SceeKdAH6hO3epXDqto2yOZV3uM5tA7qE507leIy
+ MQIXz9EN2y9V5RCvfpRlbRA58J4bgbPUH3T0JAr0Edv3AqHeyruq2jbIJsiXB/IvFzRArkxPpqMc9k7E
+ yDzd33jPSmF2Lk7GaVveMyOAMSO5oNXHAI3dabR2SVXbBqEOGWcB2gawgviP85gYgZY+mbxPDQbvWSnA
+ sPj6Ze4zI7DyUY6NXasPJFmtbvmGqrYNQjE3MrvaBtTvIfXNQdNgE4IVn6ncCyx5uBq8Po2CVRAL9IH8
+ INXJLVVtG1RMgWajwVvd/rcOtOHNELNRVIHFlrDZ2NkZYT4fT0mlgKTuTupg8/o0E0WXcDEjYjYQYczW
+ cL4yMxMn7WH9Ge1qUdSI2D2h85tReqFFfOJw1Xk9GDVELLyMidko6sbAkYaTyGtkNlAhoCSjFTvS8kCU
+ xcu8vsyGOLSf70hTixPuTuZLFkyaBRgv1+5BpsRSLhOe4R0XjiCLFAeZjaKhXLFkwmYhQ63bU9SgNLWK
+ zEmGkYB7g6WN3/gbniG1lp17MMoDiiYTUHna5E8UpLM2Cz2DM+y8GQ4yIgw4yY1ekQG/xydjLOzzS2HS
+ myo8s9gsbPfHr9U1B36vqm2DSiVUzQYMCVJVH79dPmT85B2cnMlsM+f1ZSZKJlRBNq9yqlTtsxmAUE91
+ RsnRlyrP+Bx/ZZDs8Ee4x49mAtkqaoFfVdVVSLiGipuUvMZmAZWtg0PVJwWStE1raPPKhgFfCIdKUouq
+ rkLCfVtcGeU1NgO4goCCyFpCORgYV0/IlFI5HtaPNcvWyODweDOupSbzR+i+p7Dib56CKgGsM/pAdMDj
+ YSTCexeJ3aNcUNVUnHBZmVfaYSRyCyeIs2eAHNiv/6j0wP4Blvg02y/0SqNrlmbRraqpOKHEv1hxkVHA
+ OUt/rLLIoxzQB+oNO+PmXeaBLqxuaa3eIf1AVVNpogp8pntgmnulQS9Qe7yjTa6qNLgcrl/MscoJswrY
+ uxJTKG+bU9VTnlDSWqzAUg+QCkKaHPUnPEXoAc5tcPwwOH2Uy7tWQAdUeStVfzqAKvBFGh0UFFnWClgx
+ TyBjaonIvqk4K1QCL54MtaA7OY0S30OqWionlPliL8Ss4XVcLVAyhlDNzPNcVE+wUI9TnlYLUHiOQvua
+ r8PaBCnuFod1JxiqCdX0wshQTwiOrFoFJayqo3rCJRN20WZskcugEtQSqumFEaHe3Ys20lKjT/6uqo7a
+ yNIc/CuuPdV6XtIq01Bt2NzSEB4QHrbWeEMUd2Nwvc3iCPxZVYM+srrlRPHLhsWhJ1TTi1pDPYzRsTu7
+ TP2+iDp8/YSrn3aPdBZXQXlMeTAiVNOLWkK9zvjULWo4Xn/M5/uGOnxjCBGKVZAv0/9oWdfGyFBNL6oJ
+ 9QJZ9v2EyxVHHNUSjZN/YhWk61KZnKE/NkncvSFTaqqrBWSALJCJJ+s6UKNNlXcDXyNRh2sOoTqT7okl
+ PzqBT9U1706SDuqTIQ3PG9hmAHda4Be6qCyQiScrgNpnjInOvN+pwzSXcB0CM7EvM1fiFO8E2Z2eI9vp
+ HgQrfOW8eQVKWlw+n2FWGLwhQynj159ZuI2xcM85zCR455TxFRiWUgLi+y347AlzbjMxVsDNG7QRePt0
+ il0GguHAzYJSfiBkhsHAnoetSR3W5tLd1Jd0xtGbWS7nJ2Iw3ck8c6qbe8JkZjbBTuD0pLTQFpYWV2+b
+ u0NkJ+0bN6rKOdDw8xy96VWbRz5tmsGolODiWF1yDB8fg/fOE1iLyN5FdssShUUI8YLxKJmeuXtdH7MI
+ X9dY+TDHFATgN/6GSn68k6fvBuMxss0nsQIj9IUPL/J4aQEZG7zKql1Qooa7KnoIH2iwueUlfGKumgQE
+ blyiXMIfmyA+KUtcvQmW8mpskYjFFWT1ifiNv+GZT86yd9Gmmo/5IDEgBBDbykuGRRhGE4udPVIUWRzc
+ 9DY6n1gLIANSUsiqILrQHdtuBiEhaxPkRSo0PgF6S09QXyvYnnv3ojRdrvLipn+hzQhSM9vz1Mda88h7
+ 1sz+QCMsK07PcACEM4wGtzJrumO8GYSb3pZm0Ust9kWcrbYqe2/CeTViZqIPVAzg0Bt94+jR6gp6Hrh1
+ NYtw3xan+zav8k9WZ9KeuCYER7DU736Ie98LLGqAW4SyNwC/2Ye46TMYD+p7EiE4vIxCH/SBG5R0y/DW
+ VfNhiK8CoUgHoaHFGaxHzV2DN/RSg0d5hxqhS1TJn38K3iKIy/gbnqG4Ee+iDaKHooU+D+khfQ3okUf+
+ D1WHWk/swkxBAAAAAElFTkSuQmCC
+
+ rell icon ( 80x80)
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABe5JREFUWEfd
+ mF1zE1UYxzOjd+r38AVH/TBcOIgX3sggQtJqgQIlpQn2vSSbwiabzW42zXvSNiUJjjJKodBC6oXjgKDA
+ ADpjWxTEGwWkx/Pf7gm7ydlkU+SGZ+Y3k9lznv95Nuftedb1wtqOfcH3uv3S8N4htXrwWGqpL5i5TLlp
+ cPngxNQS2tBnZ+/Eu4bb87WPeoZe8/ijg/snEstjavVBbG6RJE4ttwR9RtXqnwfGEsuegcjgTu/kq4bc
+ /2der/dlj0/y9wXTP0Vnz6/zAnGCNLuwTjWueXyRAWga8s9mu72BLXuHleVw8exj3qCbQSzMP+4ZVmvd
+ R8U3jWE2Z3v84of9ofxtrVrjDvQsQPNIKH+ryy99YAzXmXn8kT3Dcmm1Lli5RILxPBmX002DOQW+0IAW
+ ezYolVa7ByKfGsM6s939ke3D8txvTEQuLZCQqpK1Gyo5fVohkeKZ+gBOgQ98oRFSFF2TtQ1F59Yc/5NY
+ c5hW5ixR4VgqRh7f1Qi5lyBPftdIUNHq4k6BD3yhAS2ZakrF+Xp7fyh3yz0w+YYRBt+ws7Ah2JqLzi4Q
+ JRMj638kdGFGbVEhxzNf1cXbgb6XFlWLBjSVlKyPgT5apUawcVrubhwlbLdinUzSaf33rjU4xnE1ToWd
+ bJ6a3pengX8SSyde3ViTYn7+kXsgfMQIx2o4hHHOMeGAmiN3b/KFwfUfVCIky6ZA+AjJk+Rn2penAdZu
+ xEkgnq33p7fQVe5hjhuCHcLRmQUyV45xBc1Ek4plRzaCNvTh+ZoplRUc4rpPdOb8epc/ctQI66ntn5ha
+ ZsIBJUUervHFzKzQHRnUpi1BmUEb+vB8zfyzSjeemqr79Y5pNSOsDcPFj7sVjWr5IslMt39rxlReIbGT
+ S5bAgFJeIql8+1lgJGlfjA3fMbVyf9ch4W0jPExveJRd/MJUhdy52v6tGX/9qtF//OkaYuAZ2ng+PG5f
+ UYiQqui+sdIF0u2TvjDCc7n2jcQrTBh/deOx0o7sdJQE5Lh+XoKJaJz+ezK3rx0YUzBN894RtWyE53Id
+ HJ+6yBrklPO3BvduqyRXDJNHxkEO8DtbEPU2c992ROnYLA4a06IRnsvVF8hcYQ1arjPRwrRoCY6BZ8UZ
+ sel5KzA2iwNJrxEevUGE7HXW4Bckkp9RHaMm7YNQUyLXxw6/EKkH6BUy143wrAF2CtYcLzigpGNcHydY
+ AjRPcacEYhvT2RgcngnKFNfHCZYpNm+STpFmzpJYMmYJEr9lPRG4wPVxgmWT9JiOmc0wKqVIMnuC5It0
+ zVHSOZGMRTef2ALLMdN1NDLipELjEc59Tc6dab55LiwoRMw6T8nM4KC23McfHwq+g9KQ17kVeCklbX8t
+ xlL0GqSD8XxbMaqU7+/oDWwxwtuwA+OJGq+zHVoVG0Qjf6/YH+xIAo7Jmt6Xp2FHU7IAQ1GNupXnwAOZ
+ Sqs8j3HzCs0bE/YZTyPSzPknbr/YnG4hSURRzXNqJFz4llROOc94ylWF+nzD1WqkL5C8uv2zkVeMsKzm
+ 8Yn9kcLZhzxHBlIiUVM6SijQFz4snbJDzJ951DUQ9hrhNBsKlp4htdaqUJ+QU+TBL/algB0badnTbKUR
+ FE2fDyqXtm7NvWSEwzd8jkDFzxOZpPnadxedT20j39cUqnGySRd4adm5yyu8boTR2ty+E9toMV0v3AFd
+ vDTr7SzH4wENaJm1h6TSqtsX2WYM78y6fOHdg9G5FSaCKQgliqRQotfamv3RYgdKzMqXKjmm5Ejc+ulj
+ xd3ppw9mbp+8DRW/eU1Ks+eIoGVIqqjqpUGrzYK2Oz+qet9QPE0rtnN1HbwwptXtE983htuc4XMEKn4U
+ 1UwcYEdOpqskSAeW0zTZzKokWVB08BuZOdqwbht3bzg//xAbwvGaa2cbHzAj/SiqUbeaB+sEHMI459x+
+ 6XDb3boZw2GOU37/uFZDaejknpVLi/rd2juWqMH3uXwC5hkuc1yPPcNKBbkbEszDQuYGwG88Q5uHlo+f
+ HAq9Zbi9aOZy/Qe4xYHxvg6NpAAAAABJRU5ErkJggg==
+
+ reel icon (40x40)
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAW9JREFUWEfl
+ 2E1qwlAUBeBndygvC9CdCHHcuIkWqp27DK3toLiIOrRkkno1B6TcJO/e95fSA2fiUfgwPogx/yLNYvGw
+ K4rqOJt9UPfWPtJr7Zw3BNlPpy+nsvw+V1VD/SrL+s3a1+zIxpjJBfJ8j0NPy2V9KIpNNmQfDs2GdMGh
+ yZESHJoMqcGh0ZE+ODQaMgQODY6U4BBuu28wpPSbQ7jtd72RmsuKcBtXNVL7m0O4ratipM+BQLitr85I
+ HxwV4bahDiJ9cVSE21zaiQyBoyLc5loWSTebdA/HfUBShNskJQuZWp4xx/n8nXujtAi3Sft5MbW8PwAc
+ 4yWm/zUt73ZIDtY+jeiQrNmTHALp004ckhM5iEPUyNWqqbfba9m9p844RIMkGCJBinGIFKkBqnGIBpkM
+ h8Q4OMFwSEhkcBwSAhkNh/ggo+MQDTIZDpEgk+MQF2Q2HNKHzI5DCDDaR8AIQeiml+6CqaN6iB43xvwA
+ iFk1KsvXeuAAAAAASUVORK5CYII=
+
+
+
\ No newline at end of file
diff --git a/QRValidation/CapCleaningControl/Resources/air.png b/QRValidation/CapCleaningControl/Resources/air.png
new file mode 100644
index 0000000..d897308
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/air.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/bcd.png b/QRValidation/CapCleaningControl/Resources/bcd.png
new file mode 100644
index 0000000..fc99058
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/bcd.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/bg_blue.png b/QRValidation/CapCleaningControl/Resources/bg_blue.png
new file mode 100644
index 0000000..2ae2259
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/bg_blue.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/bg_red.png b/QRValidation/CapCleaningControl/Resources/bg_red.png
new file mode 100644
index 0000000..981e312
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/bg_red.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/emg.png b/QRValidation/CapCleaningControl/Resources/emg.png
new file mode 100644
index 0000000..9e5daee
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/emg.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/erase.png b/QRValidation/CapCleaningControl/Resources/erase.png
new file mode 100644
index 0000000..e6f0f75
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/erase.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-assembly-machine-40.png b/QRValidation/CapCleaningControl/Resources/icons8-assembly-machine-40.png
new file mode 100644
index 0000000..8c48dfe
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-assembly-machine-40.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-automatic-gearbox-warning-80.png b/QRValidation/CapCleaningControl/Resources/icons8-automatic-gearbox-warning-80.png
new file mode 100644
index 0000000..2bd7235
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-automatic-gearbox-warning-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-barcode-reader-40.png b/QRValidation/CapCleaningControl/Resources/icons8-barcode-reader-40.png
new file mode 100644
index 0000000..e0ba761
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-barcode-reader-40.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-bug-40.png b/QRValidation/CapCleaningControl/Resources/icons8-bug-40.png
new file mode 100644
index 0000000..9efaccf
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-bug-40.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-bug-80.png b/QRValidation/CapCleaningControl/Resources/icons8-bug-80.png
new file mode 100644
index 0000000..1c529aa
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-bug-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-code-30.png b/QRValidation/CapCleaningControl/Resources/icons8-code-30.png
new file mode 100644
index 0000000..95f99b8
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-code-30.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-deployment-40.png b/QRValidation/CapCleaningControl/Resources/icons8-deployment-40.png
new file mode 100644
index 0000000..db1b184
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-deployment-40.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-emergency-stop-button-40.png b/QRValidation/CapCleaningControl/Resources/icons8-emergency-stop-button-40.png
new file mode 100644
index 0000000..1ee1522
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-emergency-stop-button-40.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-erase-30.png b/QRValidation/CapCleaningControl/Resources/icons8-erase-30.png
new file mode 100644
index 0000000..d2224c9
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-erase-30.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-hazard-warning-flasher-80.png b/QRValidation/CapCleaningControl/Resources/icons8-hazard-warning-flasher-80.png
new file mode 100644
index 0000000..1ae1ccf
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-hazard-warning-flasher-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-help-80.png b/QRValidation/CapCleaningControl/Resources/icons8-help-80.png
new file mode 100644
index 0000000..04d5900
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-help-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-high-priority-40.png b/QRValidation/CapCleaningControl/Resources/icons8-high-priority-40.png
new file mode 100644
index 0000000..ddc9455
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-high-priority-40.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-info-80.png b/QRValidation/CapCleaningControl/Resources/icons8-info-80.png
new file mode 100644
index 0000000..7f5bd87
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-info-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-pause-button-30.png b/QRValidation/CapCleaningControl/Resources/icons8-pause-button-30.png
new file mode 100644
index 0000000..3fa608c
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-pause-button-30.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80.png b/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80.png
new file mode 100644
index 0000000..db2b607
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80_blue.png b/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80_blue.png
new file mode 100644
index 0000000..768e3c9
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80_blue.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80_red.png b/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80_red.png
new file mode 100644
index 0000000..2e5a27e
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-rounded-square-80_red.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-settings-30.png b/QRValidation/CapCleaningControl/Resources/icons8-settings-30.png
new file mode 100644
index 0000000..ddef91d
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-settings-30.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-start-30.png b/QRValidation/CapCleaningControl/Resources/icons8-start-30.png
new file mode 100644
index 0000000..100219c
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-start-30.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8-stepper-motor-80.png b/QRValidation/CapCleaningControl/Resources/icons8-stepper-motor-80.png
new file mode 100644
index 0000000..89c6ae7
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8-stepper-motor-80.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/icons8_pause_button_30.png b/QRValidation/CapCleaningControl/Resources/icons8_pause_button_30.png
new file mode 100644
index 0000000..f6d30c6
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/icons8_pause_button_30.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/mot.png b/QRValidation/CapCleaningControl/Resources/mot.png
new file mode 100644
index 0000000..3bb6ae9
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/mot.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/plc.png b/QRValidation/CapCleaningControl/Resources/plc.png
new file mode 100644
index 0000000..1474662
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/plc.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/reel_big.png b/QRValidation/CapCleaningControl/Resources/reel_big.png
new file mode 100644
index 0000000..2ddd859
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/reel_big.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/reel_small.png b/QRValidation/CapCleaningControl/Resources/reel_small.png
new file mode 100644
index 0000000..3049f6b
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/reel_small.png differ
diff --git a/QRValidation/CapCleaningControl/Resources/safty.png b/QRValidation/CapCleaningControl/Resources/safty.png
new file mode 100644
index 0000000..39b1abd
Binary files /dev/null and b/QRValidation/CapCleaningControl/Resources/safty.png differ
diff --git a/QRValidation/CapCleaningControl/UIControl.csproj b/QRValidation/CapCleaningControl/UIControl.csproj
new file mode 100644
index 0000000..24bc9cf
--- /dev/null
+++ b/QRValidation/CapCleaningControl/UIControl.csproj
@@ -0,0 +1,187 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {9264CD2E-7CF8-4237-A69F-DCDA984E0613}
+ Library
+ UIControl
+ UIControl
+ v4.0
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ x86
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ Loader.cs
+
+
+ True
+ True
+ Resources.resx
+
+
+ UserControl
+
+
+ Unloader.cs
+
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/CapCleaningControl/Unloader.Designer.cs b/QRValidation/CapCleaningControl/Unloader.Designer.cs
new file mode 100644
index 0000000..480d8c8
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Unloader.Designer.cs
@@ -0,0 +1,38 @@
+namespace UIControl
+{
+ partial class Unloader
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 구성 요소 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ }
+
+ #endregion
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Unloader.cs b/QRValidation/CapCleaningControl/Unloader.cs
new file mode 100644
index 0000000..cba7d8a
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Unloader.cs
@@ -0,0 +1,343 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing.Drawing2D;
+
+namespace UIControl
+{
+ public partial class Unloader : UserControl
+ {
+ public Boolean bRemakeRect = true;
+ public CPort[] ports;
+
+ public Font Font_Alert { get; set; }
+ public Font Font_SIDLIST { get; set; }
+ public Font Font_Sign { get; set; }
+
+ private Color _portback = Color.FromArgb(32, 32, 32);
+ public Color arPortBack { get { return _portback; } set { _portback = value; this.Invalidate(); } }
+
+ private Color _titleback = Color.DeepSkyBlue;
+ public Color arTitleBack { get { return _titleback; } set { _titleback = value; this.Invalidate(); } }
+
+ public Boolean arStop { get; set; }
+ public Boolean arBusy { get; set; }
+
+ public Boolean debugMode { get; set; }
+ double port_width, port_height, space_width;
+
+ public Unloader()
+ {
+ InitializeComponent();
+
+ // Set Optimized Double Buffer to reduce flickering
+ this.SetStyle(ControlStyles.UserPaint, true);
+ this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+ this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
+ this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
+ this.SetStyle(ControlStyles.ContainerControl, false);
+ this.SetStyle(ControlStyles.Selectable, true);
+
+ // Redraw when resized
+ this.SetStyle(ControlStyles.ResizeRedraw, true);
+ Font_SIDLIST = new Font("Consolas", 30, FontStyle.Bold);
+ this.Padding = new Padding(5, 5, 5, 5);
+ this.Font_Sign = new Font("Consolas", 15, FontStyle.Bold);
+ this.Font_Alert = new Font("Consolas", 30, FontStyle.Bold);
+ }
+
+ protected override void OnResize(EventArgs e)
+ {
+ bRemakeRect = true;
+ Invalidate();
+ // base.OnResize(e);
+ }
+
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ base.OnPaint(e);
+
+ if (ports == null || ports.Length == 0)
+ {
+ this.ports = new CPort[]
+ {
+ new CPort(){ cartSize=7, cartState = 1, Mode="USER", portName="#11", portNo=1 },
+ new CPort(){ cartSize=7, cartState = 1, Mode="USER", portName="#21", portNo=2 },
+ new CPort(){ cartSize=13, cartState = 0, Mode="USER", portName="#12", portNo=3 },
+ new CPort(){ cartSize=13, cartState = 2, Mode="USER", portName="#22", portNo=4 },
+ };
+
+ this.ports[0].reelSID.Add(new CPortData("012345678",30,100,"릴#6"));
+ //e.Graphics.DrawString("PORT가 설정되지 않았습니다", this.Font, Brushes.White, DisplayRectangle,
+ // new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
+ //return;
+ }
+
+ //Set Optimized Double Buffer to reduce flickering
+ e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
+ e.Graphics.InterpolationMode = InterpolationMode.High;
+ e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
+
+ //e.Graphics.DrawString(DisplayRectangle.ToString(), this.Font, Brushes.White, 1, 1);
+ //포트영역생성
+ if (bRemakeRect)
+ {
+ space_width = 10;
+
+ int row = 2;
+ int col = 2;
+ port_width = (DisplayRectangle.Width - (col - 1) * space_width) / 2f;
+ port_height = (DisplayRectangle.Height - (row - 1) * space_width) / 2f;
+ //space_width = (DisplayRectangle.Width - (port_width * 2.0)) / 3.0;
+ //space_height = (DisplayRectangle.Height - (port_height * 2.0)) / 3.0;
+
+ var signSize = e.Graphics.MeasureString("13\"", this.Font_Sign);
+ var titlesize = e.Graphics.MeasureString("1.01234567890", this.Font);
+ var idx = 0;
+ for (int c = 0; c < col; c++)
+ {
+ for (int r = 0; r < row; r++)
+ {
+
+ ports[idx].rect = new Rectangle(
+ (int)(DisplayRectangle.Left + (c * space_width) + (c * port_width)),
+ (int)(DisplayRectangle.Top + (r * space_width) + (r * port_height)),
+ (int)port_width,
+ (int)port_height);
+
+ ports[idx].rect_signL = new Rectangle(
+ (int)(DisplayRectangle.Left + (c * space_width) + (c * port_width)),
+ (int)(DisplayRectangle.Top + (r * space_width) + (r * port_height)),
+ (int)(signSize.Width * 1.05f),
+ (int)(signSize.Height * 1.05f));
+
+ ports[idx].rect_signR = new Rectangle(
+ (int)(ports[idx].rect.Right - ports[idx].rect_signL.Width),
+ ports[idx].rect_signL.Top,
+ ports[idx].rect_signL.Width,
+ ports[idx].rect_signL.Height);
+
+ ports[idx].rect_title = new Rectangle(
+ (int)(ports[idx].rect.Left),
+ (int)(ports[idx].rect.Top), //Bottom - (titlesize.Height * 1.2f)),
+ ports[idx].rect.Width,
+ (int)(signSize.Height * 1.05f));
+
+ ports[idx].rect_count = new Rectangle(
+ ports[idx].rect.Left + 2,
+ ports[idx].rect_title.Bottom + 2,
+ ports[idx].rect.Width - 4,
+ ports[idx].rect.Height - ports[idx].rect_title.Height - 4
+ );
+
+ idx += 1;
+
+ }
+ }
+ bRemakeRect = false;
+ }
+
+
+ //포트그리기 (총 4개의 포트가 있다)
+ var sfCenter = new StringFormat
+ {
+ Alignment = StringAlignment.Center,
+ LineAlignment = StringAlignment.Center,
+ };
+ var sfLeft = new StringFormat
+ {
+ Alignment = StringAlignment.Near,
+ LineAlignment = StringAlignment.Center,
+ };
+
+ foreach (var port in ports)
+ {
+ //배경영역 칠하기
+ e.Graphics.FillRectangle(new SolidBrush(this._portback), port.rect);
+
+
+ if (port.Mode == "USER")
+ e.Graphics.FillRectangle(new SolidBrush(Color.SkyBlue), port.rect_title);
+ else
+ e.Graphics.FillRectangle(new SolidBrush(this._titleback), port.rect_title);
+
+ //글자영역 칠하기
+ if(port.cartSize ==13)
+ e.Graphics.FillRectangle(Brushes.Gold, port.rect_signL);
+ else
+ e.Graphics.FillRectangle(Brushes.WhiteSmoke, port.rect_signL);
+
+ e.Graphics.FillRectangle(Brushes.WhiteSmoke, port.rect_signR);
+
+
+ var portSize = port.cartSize == 0 ? "--" : port.cartSize + "\"";
+ e.Graphics.DrawString(portSize, this.Font_Sign, Brushes.Black, port.rect_signL, sfCenter);
+
+ //sign R 에는 카운트를 넣는다
+ //var portStat = port.cartState == 0 ? "STP" : (port.cartState == 1 ? "RDY" : "MAX");
+ var portStatBG = port.cartState == 0 ? Color.Gray : (port.cartState == 1 ? Color.Green : Color.Tomato);
+ e.Graphics.DrawString(port.reelCount.ToString(), this.Font_Sign, new SolidBrush(portStatBG), port.rect_signR, sfCenter);
+
+
+ //타이틀 글자
+ var title = "[ " + port.portNo.ToString() + " ]";
+
+ if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
+ {
+ title = "[" + port.portNo.ToString() + ":" + port.portName + "]";
+ }
+ //if (port.Mode == "DISABLE") title += " (사용안함)";
+ //else if (port.Mode == "EXIT") title += " (배출전용)";
+ //if (port.Mode == "USER") title = "* " + port.portNo.ToString() + " *";
+ //else if (port.Mode == "DISABLE") title = "# " + port.portNo.ToString() + " #";
+ //else
+ //{
+ //if (port.reelSID.Count == 0) title += " (할당안됨)";
+ //else if (port.reelSID.Count == 1) title += " " + port.reelSID[0];
+ //else title += " " + port.reelSID[0] + "(" + (port.reelSID.Count - 1).ToString() + ")";
+ //}
+
+ if (string.IsNullOrEmpty(title) == false)
+ {
+
+ e.Graphics.DrawString(title, Font_Sign, new SolidBrush(Color.Black), port.rect_title, sfCenter);
+ }
+
+ //SID목록 가져온다
+ //port.reelSID.Clear();
+ //port.reelSID.AddRange(new CPortData[] {
+ // new CPortData("0123456789A",1,10),
+ // new CPortData("0123456789B",2,10),
+ // new CPortData("0123456789C",3,10),
+ // new CPortData("0123456789D",4,10)
+ //});
+ Color cntColor = ForeColor;
+ string SidList = string.Empty;
+ if (port.Mode == "USER") SidList = "";// cntColor = Color.FromArgb(50, 50, 50);
+ foreach (var sid in port.reelSID)
+ {
+ if (sid.Active == false) continue; //비활성화된것은 표시하지 않는다
+ if (string.IsNullOrEmpty(SidList) == false) SidList += "\n";
+ SidList += string.Format(" {0} ({1}/{2})→{3}", sid.sid, sid.qty, sid.kpc,sid.towername);
+ }
+
+ e.Graphics.DrawString(SidList,
+ Font_SIDLIST,
+ new SolidBrush(cntColor),
+ port.rect_count, new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Near });
+
+ //e.Graphics.DrawRect(port.rect_count, Color.DarkBlue, 5);
+
+ ///테두리
+ e.Graphics.DrawRectangle(Pens.Gray, port.rect);
+
+ using (Font fsta = new Font("맑은 고딕", 25f, FontStyle.Regular))
+ {
+ //장비상태는 추가로 표시해준다.
+ //STOP혹은 MAX라면 별도 표기한다. //미사용도 마찬가지
+ if (port.Mode == "DISABLE")
+ {
+
+ using (var sb = new SolidBrush(Color.FromArgb(220, Color.White)))
+ {
+ e.Graphics.FillRectangle(sb, port.rect_count);
+ }
+ if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
+ e.Graphics.DrawString(title + "\nDISABLE", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
+ else e.Graphics.DrawString(title + "\nDISABLE", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
+ }
+ else if (port.cartState == 0)
+ {
+ //stop
+
+ using (var sb = new SolidBrush(Color.FromArgb(220, Color.Yellow)))
+ {
+ e.Graphics.FillRectangle(sb, port.rect_count);
+ }
+ if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
+ e.Graphics.DrawString(title + "\nSTOP", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
+ else
+ e.Graphics.DrawString(title + "\nSTOP", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
+ }
+ else if (port.cartState == 2)
+ {
+ //max
+ using (var sb = new SolidBrush(Color.FromArgb(220, Color.Red)))
+ {
+ e.Graphics.FillRectangle(sb, port.rect_count);
+ }
+
+ if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
+ e.Graphics.DrawString(title + "\nFULL", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
+ else
+ e.Graphics.DrawString(title + "\nFULL", fsta, new SolidBrush(Color.White), port.rect_count, sfCenter);
+
+ }
+ }
+ //var portStat = port.cartState == 0 ? "STP" : (port.cartState == 1 ? "RDY" : "MAX");
+ //var portStatBG = port.cartState == 0 ? Color.Gray : (port.cartState == 1 ? Color.Green : Color.Tomato);
+ //e.Graphics.DrawString(portStat, this.Font_Sign, new SolidBrush(portStatBG), port.rect_signR, sfCenter);
+ }
+
+
+ if (this.arStop)
+ {
+ e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(240, Color.Black)), DisplayRectangle);
+ e.Graphics.DrawString("STOP", this.Font_Alert, Brushes.Orange, DisplayRectangle, sfCenter);
+ }
+ else if (this.arBusy)
+ {
+ e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(240, Color.Black)), DisplayRectangle);
+ e.Graphics.DrawString("BUSY", this.Font_Alert, Brushes.Aqua, DisplayRectangle, sfCenter);
+ }
+
+ if (debugMode)
+ {
+ var sb = new System.Text.StringBuilder();
+ sb.AppendLine("unloader ctonrol");
+ sb.AppendLine(string.Format("port size {0}x{1}", port_width, port_height));
+ sb.AppendLine(string.Format("space size {0}x{1}", space_width, space_width));
+ sb.AppendLine(string.Format("display rect {0}", DisplayRectangle));
+ e.Graphics.DrawString(sb.ToString(), this.Font, Brushes.White, 10, 10);
+ }
+ //e.Graphics.DrawRectangle(Pens.White, DisplayRectangle);
+ sfCenter.Dispose();
+ sfLeft.Dispose();
+
+ }
+
+ public class ClickEventArgs : EventArgs
+ {
+ public int idx { get; set; }
+ public ClickEventArgs(int idx_)
+ {
+ this.idx = idx_;
+ }
+ }
+ public event EventHandler ItemClick;
+
+ protected override void OnMouseClick(MouseEventArgs e)
+ {
+ base.OnMouseClick(e);
+
+ if (e.Button == System.Windows.Forms.MouseButtons.Left)
+ {
+
+ var item = this.ports.Where(t => t.rect.Contains(e.Location)).FirstOrDefault();
+ if (item != null)
+ {
+ //이 영역을 클릭한것으로 한다
+ if (ItemClick != null)
+ ItemClick(this, new ClickEventArgs(item.idx));
+ }
+
+ }
+ }
+ }
+}
diff --git a/QRValidation/CapCleaningControl/Utility.cs b/QRValidation/CapCleaningControl/Utility.cs
new file mode 100644
index 0000000..3764f23
--- /dev/null
+++ b/QRValidation/CapCleaningControl/Utility.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace UIControl
+{
+ public static class Utility
+ {
+
+ public static Rectangle OffsetRect(this Rectangle rect, int x,int y)
+ {
+ var retval = new Rectangle(rect.X + x, rect.Y + y, rect.Width, rect.Height);
+ return retval;
+ }
+
+ public static void DrawString(this Graphics g,
+ string msg,
+ Font font,
+ Color fcolor,
+ RectangleF rect,
+ ContentAlignment textalign = ContentAlignment.MiddleCenter,
+ Color? ShadowColor = null,
+ Brush BackBrush = null,
+ Pen BorderPen = null)
+ {
+ DrawString(g, msg, font, fcolor, rect.toRect(), textalign, ShadowColor, BackBrush, BorderPen);
+ }
+
+ public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
+ {
+ g.DrawRectangle(pen, rect.Left, rect.Top, rect.Width, rect.Height);
+ }
+
+ public static void DrawString(this Graphics g,
+ string msg,
+ Font font,
+ Color fcolor,
+ Rectangle rect,
+ ContentAlignment textalign = ContentAlignment.MiddleCenter,
+ Color? ShadowColor = null,
+ Brush BackBrush = null,
+ Pen BorderPen = null)
+ {
+ //배경색 지정되어 있다면
+ if (BackBrush != null) g.FillRectangle(BackBrush, rect);
+
+ //테두리 지정되어 있다면
+ if (BorderPen != null) g.DrawRectangle(BorderPen, rect);
+
+ //그립자가 지정되있다면 별도 처리를 한다
+ if (ShadowColor != null && ShadowColor != Color.Transparent)
+ {
+ SizeF fsize;
+ var drawPT = GetTextPosition(g, msg, font, rect, textalign, out fsize);
+
+ //그림자를 먼저 그린다
+ g.DrawString(msg, font, new SolidBrush((Color)ShadowColor), drawPT.X + 1, drawPT.Y + 1);
+ g.DrawString(msg, font, new SolidBrush(fcolor), drawPT.X, drawPT.Y);
+ }
+ else
+ {
+ var sf = new StringFormat();
+
+ if (textalign == ContentAlignment.BottomCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Near; }
+ else if (textalign == ContentAlignment.BottomLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Near; }
+ else if (textalign == ContentAlignment.BottomRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Near; }
+ else if (textalign == ContentAlignment.MiddleCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; }
+ else if (textalign == ContentAlignment.MiddleLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; }
+ else if (textalign == ContentAlignment.MiddleRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Center; }
+ else if (textalign == ContentAlignment.TopCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Far; }
+ else if (textalign == ContentAlignment.TopLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Far; }
+ else if (textalign == ContentAlignment.TopRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Far; }
+ else { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; }
+
+
+ g.DrawString(msg, font, new SolidBrush(fcolor), rect, sf);
+
+ sf.Dispose();
+ }
+ }
+
+ public static void DrawRect(this Graphics g, Rectangle rect, Color color, Color shadowColor, int pensize = 1)
+ {
+ //우측하단에 선을 그려준다. 일단은 검은색
+ g.DrawLine(new Pen(shadowColor, pensize), rect.Left + 1, rect.Bottom + 1, rect.Right - 1, rect.Bottom + 1);
+ g.DrawLine(new Pen(shadowColor, pensize), rect.Right + 1, rect.Top + 1, rect.Right + 1, rect.Bottom - 1);
+ DrawRect(g, rect, color, pensize);
+ }
+ public static void DrawRect(this Graphics g, Rectangle rect, Color color, int pensize = 1)
+ {
+ g.DrawRectangle(new Pen(color, pensize), rect);
+ }
+
+ public static void DrawRect(this Graphics g, RectangleF rect, Color color, int pensize = 1, Boolean shadow = false)
+ {
+ g.DrawRectangle(new Pen(color, pensize), rect.Left, rect.Top, rect.Width, rect.Height);
+ }
+
+ ///
+ /// Rectangle 개체를 반환 합니다. 단순 float -> int 로 값을 변환 합니다.
+ ///
+ ///
+ ///
+ public static Rectangle toRect(this RectangleF rect)
+ {
+ return new Rectangle((int)rect.Left, (int)rect.Top, (int)rect.Width, (int)rect.Height); ;
+ }
+
+ static PointF GetTextPosition(Graphics g, string data, Font f, Rectangle rect, ContentAlignment align, System.Windows.Forms.Padding Padding, out SizeF fsize)
+ {
+ float x = 0;
+ float y = 0;
+ fsize = g.MeasureString(data, f);
+ if (align == ContentAlignment.MiddleCenter)
+ {
+ x = (rect.Width - fsize.Width) / 2 + Padding.Left - Padding.Right;
+ y = (rect.Height - fsize.Height) / 2 + Padding.Top - Padding.Bottom;
+ }
+ else if (align == ContentAlignment.MiddleLeft)
+ {
+ x = Padding.Left;
+ y = (rect.Height - fsize.Height) / 2;
+ }
+ else if (align == ContentAlignment.MiddleRight)
+ {
+ x = rect.Width - fsize.Width - Padding.Right;
+ y = (rect.Height - fsize.Height) / 2;
+ }
+ else if (align == ContentAlignment.BottomLeft)
+ {
+ x = Padding.Left;
+ y = rect.Height - fsize.Height - Padding.Bottom;
+ }
+ else if (align == ContentAlignment.BottomRight)
+ {
+ x = rect.Width - fsize.Width - Padding.Right;
+ y = rect.Height - fsize.Height - Padding.Bottom;
+ }
+ else if (align == ContentAlignment.BottomCenter)
+ {
+ x = (rect.Width - fsize.Width) / 2;
+ y = rect.Height - fsize.Height - Padding.Bottom;
+ }
+ else if (align == ContentAlignment.TopLeft)
+ {
+ x = Padding.Left;
+ y = Padding.Top;
+ }
+ else if (align == ContentAlignment.TopRight)
+ {
+ x = rect.Width - fsize.Width - Padding.Right;
+ y = Padding.Top;
+ }
+ else if (align == ContentAlignment.TopCenter)
+ {
+ x = (rect.Width - fsize.Width) / 2;
+ y = Padding.Top;
+ }
+ return new PointF(x + rect.Left, y + rect.Top);
+ }
+ static PointF GetTextPosition(Graphics g, string data, Font f, Rectangle rect, ContentAlignment align, out SizeF fsize)
+ {
+ return GetTextPosition(g, data, f, rect, align, new System.Windows.Forms.Padding(0), out fsize);
+ }
+ }
+}
diff --git a/QRValidation/DLL/AMM.dll b/QRValidation/DLL/AMM.dll
new file mode 100644
index 0000000..985786a
Binary files /dev/null and b/QRValidation/DLL/AMM.dll differ
diff --git a/QRValidation/DLL/ArLog.Net4.dll b/QRValidation/DLL/ArLog.Net4.dll
new file mode 100644
index 0000000..1f7c09a
Binary files /dev/null and b/QRValidation/DLL/ArLog.Net4.dll differ
diff --git a/QRValidation/DLL/ArSetting.Net4.dll b/QRValidation/DLL/ArSetting.Net4.dll
new file mode 100644
index 0000000..941494f
Binary files /dev/null and b/QRValidation/DLL/ArSetting.Net4.dll differ
diff --git a/QRValidation/DLL/CarlosAg.ExcelXmlWriter.dll b/QRValidation/DLL/CarlosAg.ExcelXmlWriter.dll
new file mode 100644
index 0000000..7760d6d
Binary files /dev/null and b/QRValidation/DLL/CarlosAg.ExcelXmlWriter.dll differ
diff --git a/QRValidation/DLL/ChilkatDotNet4.dll b/QRValidation/DLL/ChilkatDotNet4.dll
new file mode 100644
index 0000000..134c43e
Binary files /dev/null and b/QRValidation/DLL/ChilkatDotNet4.dll differ
diff --git a/QRValidation/DLL/Communication.dll b/QRValidation/DLL/Communication.dll
new file mode 100644
index 0000000..dc685d1
Binary files /dev/null and b/QRValidation/DLL/Communication.dll differ
diff --git a/QRValidation/DLL/Emgu.CV.DebuggerVisualizers.VS2013.dll b/QRValidation/DLL/Emgu.CV.DebuggerVisualizers.VS2013.dll
new file mode 100644
index 0000000..08134e2
Binary files /dev/null and b/QRValidation/DLL/Emgu.CV.DebuggerVisualizers.VS2013.dll differ
diff --git a/QRValidation/DLL/Emgu.CV.UI.GL.dll b/QRValidation/DLL/Emgu.CV.UI.GL.dll
new file mode 100644
index 0000000..0a9cc9e
Binary files /dev/null and b/QRValidation/DLL/Emgu.CV.UI.GL.dll differ
diff --git a/QRValidation/DLL/Emgu.CV.UI.dll b/QRValidation/DLL/Emgu.CV.UI.dll
new file mode 100644
index 0000000..4410127
Binary files /dev/null and b/QRValidation/DLL/Emgu.CV.UI.dll differ
diff --git a/QRValidation/DLL/Emgu.CV.World.dll b/QRValidation/DLL/Emgu.CV.World.dll
new file mode 100644
index 0000000..3d5853b
Binary files /dev/null and b/QRValidation/DLL/Emgu.CV.World.dll differ
diff --git a/QRValidation/DLL/Newtonsoft.Json.dll b/QRValidation/DLL/Newtonsoft.Json.dll
new file mode 100644
index 0000000..628aaf0
Binary files /dev/null and b/QRValidation/DLL/Newtonsoft.Json.dll differ
diff --git a/QRValidation/DLL/SoftekBarcode64DLL.dll b/QRValidation/DLL/SoftekBarcode64DLL.dll
new file mode 100644
index 0000000..c330de2
Binary files /dev/null and b/QRValidation/DLL/SoftekBarcode64DLL.dll differ
diff --git a/QRValidation/DLL/SoftekBarcodeDLL.dll b/QRValidation/DLL/SoftekBarcodeDLL.dll
new file mode 100644
index 0000000..9c44c7e
Binary files /dev/null and b/QRValidation/DLL/SoftekBarcodeDLL.dll differ
diff --git a/QRValidation/DLL/SoftekBarcodeNet.dll b/QRValidation/DLL/SoftekBarcodeNet.dll
new file mode 100644
index 0000000..6947e4e
Binary files /dev/null and b/QRValidation/DLL/SoftekBarcodeNet.dll differ
diff --git a/QRValidation/DLL/WatsonWebsocket.dll b/QRValidation/DLL/WatsonWebsocket.dll
new file mode 100644
index 0000000..ae762d9
Binary files /dev/null and b/QRValidation/DLL/WatsonWebsocket.dll differ
diff --git a/QRValidation/DLL/Winsock Orcas.dll b/QRValidation/DLL/Winsock Orcas.dll
new file mode 100644
index 0000000..3ac1126
Binary files /dev/null and b/QRValidation/DLL/Winsock Orcas.dll differ
diff --git a/QRValidation/DLL/arCommUtil.dll b/QRValidation/DLL/arCommUtil.dll
new file mode 100644
index 0000000..6209728
Binary files /dev/null and b/QRValidation/DLL/arCommUtil.dll differ
diff --git a/QRValidation/DLL/arControl.Net4.dll b/QRValidation/DLL/arControl.Net4.dll
new file mode 100644
index 0000000..96e6e07
Binary files /dev/null and b/QRValidation/DLL/arControl.Net4.dll differ
diff --git a/QRValidation/DLL/arRS232.Net4.dll b/QRValidation/DLL/arRS232.Net4.dll
new file mode 100644
index 0000000..c5d1765
Binary files /dev/null and b/QRValidation/DLL/arRS232.Net4.dll differ
diff --git a/QRValidation/DLL/libxl.dll b/QRValidation/DLL/libxl.dll
new file mode 100644
index 0000000..b3159fd
Binary files /dev/null and b/QRValidation/DLL/libxl.dll differ
diff --git a/QRValidation/DLL/libxl.net.dll b/QRValidation/DLL/libxl.net.dll
new file mode 100644
index 0000000..b487ebc
Binary files /dev/null and b/QRValidation/DLL/libxl.net.dll differ
diff --git a/QRValidation/Project/Class/CAmkorSTDBarcode.cs b/QRValidation/Project/Class/CAmkorSTDBarcode.cs
new file mode 100644
index 0000000..ea0f643
--- /dev/null
+++ b/QRValidation/Project/Class/CAmkorSTDBarcode.cs
@@ -0,0 +1,118 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Project.Class
+{
+ public class CAmkorSTDBarcode
+ {
+ public string Message { get; private set; }
+ public Boolean isValid = false;
+ public string SID { get; private set; }
+ public string VLOT { get; private set; }
+ public string RID { get; private set; }
+ public string MFGDate { get; set; }
+ public string SUPPLY { get; set; }
+ public int QTY { get; set; }
+ public string RAW { get; set; }
+ public Boolean DateError { get; set; }
+ public CAmkorSTDBarcode()
+ {
+ isValid = false;
+ }
+ public CAmkorSTDBarcode(string raw)
+ {
+ SetBarcode(raw);
+ }
+ public void SetBarcodeDemo()
+ {
+ SetBarcode("101410653;AG64B3W;SAMSUNG;20000;AG64B3W0031;19000101;");
+ }
+
+ ///
+ /// Returns barcode value with current property values.
+ /// To check the original barcode value, check the RAW property
+ ///
+ ///
+ public string GetBarcode()
+ {
+ return string.Format("{0};{1};{2};{3};{4};{5};",
+ SID, VLOT, SUPPLY, QTY, RID, MFGDate);
+ }
+ public void SetBarcode(string raw)
+ {
+ isValid = false;
+ this.Message = string.Empty;
+
+ this.RAW = raw;
+ var buf = raw.Split(';');
+ if (buf.Length < 5)
+ {
+ isValid = false;
+ Message = "buffer len error : " + raw;
+ return;
+ }
+ decimal vSID = 0;
+ double vQty = 0;
+ if (decimal.TryParse(buf[0], out vSID) == false)
+ {
+ Message = "SID value is not a number. Amkor STD barcode consists of numbers";
+ return;
+ }
+
+ this.SID = vSID.ToString();
+ this.VLOT = buf[1];
+ this.SUPPLY = buf[2];
+ if (double.TryParse(buf[3], out vQty) == false) return;
+ this.QTY = (int)vQty;
+
+ this.RID = buf[4];
+ //DateTime vMFGDate;
+
+ MFGDate = buf[5].Trim();
+ DateError = false;
+
+ //buf[5] = buf[5].Replace("-", ""); //날짜표식제거
+ //if (this.SUPPLY.ToUpper() == "SAMSUNG" && buf[5].Length == 4) //삼성은 년도와 주차로 입력한다 210202
+ //{
+ // var y = "20" + buf[5].Substring(0, 2);
+ // MFGDate = new DateTime(int.Parse(y), 1, 1).ToString("yyyyMMdd"); //주차계산무시한다
+ // DateError = true;
+ //}
+ //else if (this.SUPPLY.ToUpper() == "WT" && buf[5].Length == 4) //삼성은 년도와 주차로 입력한다 210202
+ //{
+ // var y = "20" + buf[5].Substring(0, 2);
+ // MFGDate = new DateTime(int.Parse(y), 1, 1).ToString("yyyyMMdd"); //주차계산무시한다
+ // DateError = true;
+ //}
+ //else if (buf[5].Length == 8) //일반적인날짜데이터이며 YYYYMMDD 형태이다
+ //{
+ // buf[5] = buf[5].Substring(0, 4) + "-" + buf[5].Substring(4, 2) + "-" + buf[5].Substring(6, 2);
+ // if (DateTime.TryParse(buf[5], out vMFGDate) == false) return;
+ // MFGDate = vMFGDate.ToString("yyyyMMdd");
+ // DateError = false;
+ //}
+ ////else if (buf[5].Equals("N/A")) //날짜값에 NA
+ ////{
+ //// MFGDate = "N/A";
+ //// DateError = false;
+ ////}
+ ////else if (buf[5].Equals("NA")) //날짜값에 NA
+ ////{
+ //// MFGDate = "NA";
+ //// DateError = false;
+ ////}
+ //else
+ //{
+ // MFGDate = buf[5].Trim();
+ // Message = "Date value Length Error : " + buf[5];
+ // DateError = false;
+ // //return;
+ //}
+
+ isValid = true;
+ }
+ }
+}
diff --git a/QRValidation/Project/Class/CInterLock.cs b/QRValidation/Project/Class/CInterLock.cs
new file mode 100644
index 0000000..06a6ef9
--- /dev/null
+++ b/QRValidation/Project/Class/CInterLock.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Project
+{
+ public class CInterLock
+ {
+ UInt64 offsetValue = 0x01;
+ public object Tag { get; set; }
+ public string errorMessage;
+ protected UInt64 _value;
+
+ public UInt64 Value { get { return _value; } set { _value = value; } }
+
+ public event EventHandler ValueChanged;
+ public class ValueEventArgs : EventArgs
+ {
+ private int _arridx;
+ private Boolean _oldvalue;
+ private Boolean _newvalue;
+ private string _reason;
+
+ public int ArrIDX { get { return _arridx; } }
+ public Boolean OldValue { get { return _oldvalue; } }
+ public Boolean NewValue { get { return _newvalue; } }
+ public string Reason { get { return _reason; } }
+ public Boolean NewOn { get; set; }
+ public Boolean NewOff { get; set; }
+
+ public ValueEventArgs(int arridx, Boolean oldvalue, Boolean newvalue, string reason_, Boolean newon_, Boolean newof_)
+ {
+ _arridx = arridx;
+ _oldvalue = oldvalue;
+ _newvalue = newvalue;
+ _reason = reason_;
+ this.NewOn = newon_;
+ this.NewOff = newon_;
+ }
+ }
+
+ public CInterLock(object tag = null)
+ {
+ errorMessage = string.Empty;
+ _value = 0;
+ this.Tag = tag;
+ }
+
+ public Boolean get(int idx)
+ {
+ if (idx >= 64)
+ throw new Exception("flag는 최대 64개를 지원 합니다");
+
+ var offset = (UInt64)(offsetValue << idx);
+ return (_value & offset) != 0;
+ }
+ public void set(int idx, Boolean value, string reason)
+ {
+ if (idx >= 64)
+ throw new Exception("flag는 최대 64개를 지원 합니다");
+
+ var oldvalue = get(idx);
+ var raw_old = _value;
+ if (value)
+ {
+ var offset = (UInt64)(offsetValue << idx);
+ _value = _value | offset;
+ }
+ else
+ {
+ var shiftvalue = (UInt64)(offsetValue << idx);
+ UInt64 offset = ~shiftvalue;
+ _value = _value & offset;
+ }
+
+ if (oldvalue != value)
+ {
+ Boolean NewOn = (raw_old == 0 && _value > 0);
+ Boolean NewOf = (raw_old != 0 && _value == 0);
+ if (ValueChanged != null)
+ ValueChanged(this, new ValueEventArgs(idx, oldvalue, value, reason, NewOn, NewOf));
+ }
+ else
+ {
+ //Pub.log.Add(" >> SKIP");
+ //if (string.IsNullOrEmpty(reason) == false)
+ //Pub.log.Add("#### FLAG변경(값이 같아서 처리 안함) : idx=" + idx.ToString() + ",값:" + value.ToString() + ",사유:" + reason);
+ }
+ }
+ public void Toggle(int idx, string reason = "")
+ {
+ var curValue = get(idx);
+ set(idx, !curValue, reason);
+ }
+
+ }
+}
diff --git a/QRValidation/Project/Class/Flag.cs b/QRValidation/Project/Class/Flag.cs
new file mode 100644
index 0000000..29df3dc
--- /dev/null
+++ b/QRValidation/Project/Class/Flag.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Project
+{
+ public enum eFlag
+ {
+ CHECKLICENSE=0,
+ CHECKCAMERAL,
+ CHECKCAMERAR,
+ CAMERAINIT,
+ }
+ public class Flag : CInterLock
+ {
+ public Boolean IsInit; //H/W설정이 안된경우에만 FALSE로 한다
+ public int PortCount;
+ public string[] Name;
+
+ public Flag()
+ {
+ this.Tag = "MAIN";
+ PortCount = 64;
+ IsInit = true;
+ errorMessage = string.Empty;
+ _value = 0;
+ Name = new string[PortCount];
+ for (int i = 0; i < Name.Length; i++)
+ {
+ Name[i] = string.Empty;
+ }
+ }
+
+ public bool get(eFlag flag)
+ {
+ return get((int)flag);
+ }
+ public void set(eFlag flag, bool value, string reason)
+ {
+ var idx = (int)flag;
+ set(idx, value, reason);
+ }
+
+ public void Toggle(eFlag flag)
+ {
+ Toggle((int)flag);
+ }
+
+
+ }
+}
diff --git a/QRValidation/Project/Class/WebSocket.cs b/QRValidation/Project/Class/WebSocket.cs
new file mode 100644
index 0000000..27a621a
--- /dev/null
+++ b/QRValidation/Project/Class/WebSocket.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Project.Class
+{
+ public class WebSocket : WatsonWebsocket.WatsonWsServer
+ {
+ public eTarget Target { get; set; }
+ public int TargetIdx { get; set; }
+ public WebSocket(string host, int port) : base(host, port) { }
+ }
+}
diff --git a/QRValidation/Project/Class/Win32API.cs b/QRValidation/Project/Class/Win32API.cs
new file mode 100644
index 0000000..b2c2ccb
--- /dev/null
+++ b/QRValidation/Project/Class/Win32API.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+
+namespace Project
+{
+ public static class Win32API
+ {
+
+
+
+
+
+ [DllImport("user32.dll")]
+ private static extern bool SetForegroundWindow(IntPtr hWnd);
+
+ [DllImport("user32.dll")]
+ private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
+ [DllImport("user32.dll")]
+ private static extern int SetActiveWindow(int hwnd);
+ }
+}
diff --git a/QRValidation/Project/Dialog/fEmulator.Designer.cs b/QRValidation/Project/Dialog/fEmulator.Designer.cs
new file mode 100644
index 0000000..b6ce2a1
--- /dev/null
+++ b/QRValidation/Project/Dialog/fEmulator.Designer.cs
@@ -0,0 +1,648 @@
+namespace Project.Dialog
+{
+ partial class fEmulator
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ arDev.AzinAxt.ColorListItem colorListItem5 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem6 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem7 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem8 = new arDev.AzinAxt.ColorListItem();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.jogController5 = new arDev.AzinAxt.JogController();
+ this.jogController4 = new arDev.AzinAxt.JogController();
+ this.jogController3 = new arDev.AzinAxt.JogController();
+ this.jogController2 = new arDev.AzinAxt.JogController();
+ this.jogController1 = new arDev.AzinAxt.JogController();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.tblDI = new arDev.AzinAxt.GridView();
+ this.lbTitle1 = new System.Windows.Forms.Label();
+ this.panel3 = new System.Windows.Forms.Panel();
+ this.tblDO = new arDev.AzinAxt.GridView();
+ this.lbtitle2 = new System.Windows.Forms.Label();
+ this.timer1 = new System.Windows.Forms.Timer(this.components);
+ this.button1 = new System.Windows.Forms.Button();
+ this.ctlSensor1 = new UIControl.CtlSensor();
+ this.m4 = new UIControl.CtlMotor();
+ this.m3 = new UIControl.CtlMotor();
+ this.m2 = new UIControl.CtlMotor();
+ this.m1 = new UIControl.CtlMotor();
+ this.mcv = new UIControl.CtlMotor();
+ this.panel1.SuspendLayout();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.panel2.SuspendLayout();
+ this.panel3.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
+ this.panel1.Controls.Add(this.jogController5);
+ this.panel1.Controls.Add(this.jogController4);
+ this.panel1.Controls.Add(this.jogController3);
+ this.panel1.Controls.Add(this.jogController2);
+ this.panel1.Controls.Add(this.jogController1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Right;
+ this.panel1.Location = new System.Drawing.Point(574, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Padding = new System.Windows.Forms.Padding(5);
+ this.panel1.Size = new System.Drawing.Size(226, 414);
+ this.panel1.TabIndex = 8;
+ //
+ // jogController5
+ //
+ this.jogController5.arAutoUpdate = false;
+ this.jogController5.arAxis = 4;
+ this.jogController5.arAxisName = "Z-R";
+ this.jogController5.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.jogController5.arBottomSensorCommand = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "POS"};
+ this.jogController5.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
+ this.jogController5.arBottomSensorHeight = 30;
+ this.jogController5.arBottomSensorListCount = new System.Drawing.Point(4, 2);
+ this.jogController5.arBottomSensorTitle = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "--"};
+ this.jogController5.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
+ this.jogController5.ardAct = 200D;
+ this.jogController5.arDebugMode = false;
+ this.jogController5.arIsAlm = false;
+ this.jogController5.arIsHSet = true;
+ this.jogController5.arIsInit = false;
+ this.jogController5.arIsInp = false;
+ this.jogController5.arIsLimM = false;
+ this.jogController5.arIsLimP = false;
+ this.jogController5.arIsOrg = false;
+ this.jogController5.arIsSvON = true;
+ this.jogController5.arMaxLength = 400;
+ this.jogController5.arMinLength = -10;
+ this.jogController5.arShowJogButton = true;
+ this.jogController5.arShowPositionBar = true;
+ this.jogController5.arShowSensor = true;
+ this.jogController5.arShowTitleBar = true;
+ this.jogController5.arTitlebarHeight = ((ushort)(20));
+ this.jogController5.arUpdateInterval = ((ushort)(100));
+ this.jogController5.arUsage = true;
+ this.jogController5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.jogController5.Dock = System.Windows.Forms.DockStyle.Top;
+ this.jogController5.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.jogController5.Location = new System.Drawing.Point(5, 293);
+ this.jogController5.Name = "jogController5";
+ this.jogController5.Size = new System.Drawing.Size(216, 72);
+ this.jogController5.TabIndex = 11;
+ this.jogController5.Text = "156";
+ //
+ // jogController4
+ //
+ this.jogController4.arAutoUpdate = false;
+ this.jogController4.arAxis = 3;
+ this.jogController4.arAxisName = "Z-F";
+ this.jogController4.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.jogController4.arBottomSensorCommand = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "POS"};
+ this.jogController4.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
+ this.jogController4.arBottomSensorHeight = 30;
+ this.jogController4.arBottomSensorListCount = new System.Drawing.Point(4, 2);
+ this.jogController4.arBottomSensorTitle = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "--"};
+ this.jogController4.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
+ this.jogController4.ardAct = 200D;
+ this.jogController4.arDebugMode = false;
+ this.jogController4.arIsAlm = false;
+ this.jogController4.arIsHSet = true;
+ this.jogController4.arIsInit = false;
+ this.jogController4.arIsInp = false;
+ this.jogController4.arIsLimM = false;
+ this.jogController4.arIsLimP = false;
+ this.jogController4.arIsOrg = false;
+ this.jogController4.arIsSvON = true;
+ this.jogController4.arMaxLength = 400;
+ this.jogController4.arMinLength = -10;
+ this.jogController4.arShowJogButton = true;
+ this.jogController4.arShowPositionBar = true;
+ this.jogController4.arShowSensor = true;
+ this.jogController4.arShowTitleBar = true;
+ this.jogController4.arTitlebarHeight = ((ushort)(20));
+ this.jogController4.arUpdateInterval = ((ushort)(100));
+ this.jogController4.arUsage = true;
+ this.jogController4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.jogController4.Dock = System.Windows.Forms.DockStyle.Top;
+ this.jogController4.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.jogController4.Location = new System.Drawing.Point(5, 221);
+ this.jogController4.Name = "jogController4";
+ this.jogController4.Size = new System.Drawing.Size(216, 72);
+ this.jogController4.TabIndex = 10;
+ this.jogController4.Text = "156";
+ //
+ // jogController3
+ //
+ this.jogController3.arAutoUpdate = false;
+ this.jogController3.arAxis = 2;
+ this.jogController3.arAxisName = "Y-P";
+ this.jogController3.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.jogController3.arBottomSensorCommand = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "POS"};
+ this.jogController3.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
+ this.jogController3.arBottomSensorHeight = 30;
+ this.jogController3.arBottomSensorListCount = new System.Drawing.Point(4, 2);
+ this.jogController3.arBottomSensorTitle = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "--"};
+ this.jogController3.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
+ this.jogController3.ardAct = 200D;
+ this.jogController3.arDebugMode = false;
+ this.jogController3.arIsAlm = false;
+ this.jogController3.arIsHSet = true;
+ this.jogController3.arIsInit = false;
+ this.jogController3.arIsInp = false;
+ this.jogController3.arIsLimM = false;
+ this.jogController3.arIsLimP = false;
+ this.jogController3.arIsOrg = false;
+ this.jogController3.arIsSvON = true;
+ this.jogController3.arMaxLength = 400;
+ this.jogController3.arMinLength = -10;
+ this.jogController3.arShowJogButton = true;
+ this.jogController3.arShowPositionBar = true;
+ this.jogController3.arShowSensor = true;
+ this.jogController3.arShowTitleBar = true;
+ this.jogController3.arTitlebarHeight = ((ushort)(20));
+ this.jogController3.arUpdateInterval = ((ushort)(100));
+ this.jogController3.arUsage = true;
+ this.jogController3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.jogController3.Dock = System.Windows.Forms.DockStyle.Top;
+ this.jogController3.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.jogController3.Location = new System.Drawing.Point(5, 149);
+ this.jogController3.Name = "jogController3";
+ this.jogController3.Size = new System.Drawing.Size(216, 72);
+ this.jogController3.TabIndex = 9;
+ this.jogController3.Text = "156";
+ //
+ // jogController2
+ //
+ this.jogController2.arAutoUpdate = false;
+ this.jogController2.arAxis = 1;
+ this.jogController2.arAxisName = "X-R";
+ this.jogController2.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.jogController2.arBottomSensorCommand = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "POS"};
+ this.jogController2.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
+ this.jogController2.arBottomSensorHeight = 30;
+ this.jogController2.arBottomSensorListCount = new System.Drawing.Point(4, 2);
+ this.jogController2.arBottomSensorTitle = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "--"};
+ this.jogController2.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
+ this.jogController2.ardAct = 200D;
+ this.jogController2.arDebugMode = false;
+ this.jogController2.arIsAlm = false;
+ this.jogController2.arIsHSet = true;
+ this.jogController2.arIsInit = false;
+ this.jogController2.arIsInp = false;
+ this.jogController2.arIsLimM = false;
+ this.jogController2.arIsLimP = false;
+ this.jogController2.arIsOrg = false;
+ this.jogController2.arIsSvON = true;
+ this.jogController2.arMaxLength = 400;
+ this.jogController2.arMinLength = -10;
+ this.jogController2.arShowJogButton = true;
+ this.jogController2.arShowPositionBar = true;
+ this.jogController2.arShowSensor = true;
+ this.jogController2.arShowTitleBar = true;
+ this.jogController2.arTitlebarHeight = ((ushort)(20));
+ this.jogController2.arUpdateInterval = ((ushort)(100));
+ this.jogController2.arUsage = true;
+ this.jogController2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.jogController2.Dock = System.Windows.Forms.DockStyle.Top;
+ this.jogController2.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.jogController2.Location = new System.Drawing.Point(5, 77);
+ this.jogController2.Name = "jogController2";
+ this.jogController2.Size = new System.Drawing.Size(216, 72);
+ this.jogController2.TabIndex = 8;
+ this.jogController2.Text = "156";
+ //
+ // jogController1
+ //
+ this.jogController1.arAutoUpdate = false;
+ this.jogController1.arAxis = 0;
+ this.jogController1.arAxisName = "X-F";
+ this.jogController1.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.jogController1.arBottomSensorCommand = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "POS"};
+ this.jogController1.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
+ this.jogController1.arBottomSensorHeight = 30;
+ this.jogController1.arBottomSensorListCount = new System.Drawing.Point(4, 2);
+ this.jogController1.arBottomSensorTitle = new string[] {
+ "INP",
+ "ORG",
+ "LIM+",
+ "HOME",
+ "ALM",
+ "SVON",
+ "LIM-",
+ "--"};
+ this.jogController1.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
+ this.jogController1.ardAct = 200D;
+ this.jogController1.arDebugMode = false;
+ this.jogController1.arIsAlm = false;
+ this.jogController1.arIsHSet = true;
+ this.jogController1.arIsInit = false;
+ this.jogController1.arIsInp = false;
+ this.jogController1.arIsLimM = false;
+ this.jogController1.arIsLimP = false;
+ this.jogController1.arIsOrg = false;
+ this.jogController1.arIsSvON = true;
+ this.jogController1.arMaxLength = 400;
+ this.jogController1.arMinLength = -10;
+ this.jogController1.arShowJogButton = true;
+ this.jogController1.arShowPositionBar = true;
+ this.jogController1.arShowSensor = true;
+ this.jogController1.arShowTitleBar = true;
+ this.jogController1.arTitlebarHeight = ((ushort)(20));
+ this.jogController1.arUpdateInterval = ((ushort)(100));
+ this.jogController1.arUsage = true;
+ this.jogController1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.jogController1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.jogController1.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.jogController1.Location = new System.Drawing.Point(5, 5);
+ this.jogController1.Name = "jogController1";
+ this.jogController1.Size = new System.Drawing.Size(216, 72);
+ this.jogController1.TabIndex = 7;
+ this.jogController1.Text = "156";
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 1;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 0);
+ this.tableLayoutPanel1.Controls.Add(this.panel3, 0, 1);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 2;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(574, 230);
+ this.tableLayoutPanel1.TabIndex = 137;
+ //
+ // panel2
+ //
+ this.panel2.Controls.Add(this.tblDI);
+ this.panel2.Controls.Add(this.lbTitle1);
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel2.Location = new System.Drawing.Point(0, 0);
+ this.panel2.Margin = new System.Windows.Forms.Padding(0);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(574, 115);
+ this.panel2.TabIndex = 0;
+ //
+ // tblDI
+ //
+ this.tblDI.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.tblDI.BorderSize = 1;
+ colorListItem5.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
+ colorListItem5.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
+ colorListItem5.Remark = "";
+ colorListItem6.BackColor1 = System.Drawing.Color.Green;
+ colorListItem6.BackColor2 = System.Drawing.Color.Green;
+ colorListItem6.Remark = "";
+ this.tblDI.ColorList = new arDev.AzinAxt.ColorListItem[] {
+ colorListItem5,
+ colorListItem6};
+ this.tblDI.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.tblDI.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tblDI.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold);
+ this.tblDI.FontPin = new System.Drawing.Font("Consolas", 6.75F);
+ this.tblDI.ForeColor = System.Drawing.Color.WhiteSmoke;
+ this.tblDI.ForeColorPin = System.Drawing.Color.WhiteSmoke;
+ this.tblDI.Location = new System.Drawing.Point(0, 16);
+ this.tblDI.MatrixSize = new System.Drawing.Point(5, 4);
+ this.tblDI.MenuBorderSize = 1;
+ this.tblDI.MenuGap = 5;
+ this.tblDI.MinimumSize = new System.Drawing.Size(100, 50);
+ this.tblDI.Name = "tblDI";
+ this.tblDI.Names = null;
+ this.tblDI.ShadowColor = System.Drawing.Color.Black;
+ this.tblDI.showDebugInfo = false;
+ this.tblDI.ShowIndexString = true;
+ this.tblDI.Size = new System.Drawing.Size(574, 99);
+ this.tblDI.TabIndex = 3;
+ this.tblDI.Tags = null;
+ this.tblDI.Text = "gridView2";
+ this.tblDI.TextAttachToImage = true;
+ this.tblDI.Titles = null;
+ this.tblDI.Values = null;
+ //
+ // lbTitle1
+ //
+ this.lbTitle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
+ this.lbTitle1.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.lbTitle1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.lbTitle1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lbTitle1.ForeColor = System.Drawing.Color.White;
+ this.lbTitle1.Location = new System.Drawing.Point(0, 0);
+ this.lbTitle1.Name = "lbTitle1";
+ this.lbTitle1.Size = new System.Drawing.Size(574, 16);
+ this.lbTitle1.TabIndex = 0;
+ this.lbTitle1.Text = "INPUT";
+ this.lbTitle1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // panel3
+ //
+ this.panel3.Controls.Add(this.tblDO);
+ this.panel3.Controls.Add(this.lbtitle2);
+ this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel3.Location = new System.Drawing.Point(0, 115);
+ this.panel3.Margin = new System.Windows.Forms.Padding(0);
+ this.panel3.Name = "panel3";
+ this.panel3.Size = new System.Drawing.Size(574, 115);
+ this.panel3.TabIndex = 0;
+ //
+ // tblDO
+ //
+ this.tblDO.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
+ this.tblDO.BorderSize = 1;
+ colorListItem7.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
+ colorListItem7.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
+ colorListItem7.Remark = "";
+ colorListItem8.BackColor1 = System.Drawing.Color.Tomato;
+ colorListItem8.BackColor2 = System.Drawing.Color.Tomato;
+ colorListItem8.Remark = "";
+ this.tblDO.ColorList = new arDev.AzinAxt.ColorListItem[] {
+ colorListItem7,
+ colorListItem8};
+ this.tblDO.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.tblDO.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tblDO.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.tblDO.FontPin = new System.Drawing.Font("Consolas", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.tblDO.ForeColor = System.Drawing.Color.WhiteSmoke;
+ this.tblDO.ForeColorPin = System.Drawing.Color.WhiteSmoke;
+ this.tblDO.Location = new System.Drawing.Point(0, 16);
+ this.tblDO.MatrixSize = new System.Drawing.Point(5, 4);
+ this.tblDO.MenuBorderSize = 1;
+ this.tblDO.MenuGap = 5;
+ this.tblDO.MinimumSize = new System.Drawing.Size(100, 50);
+ this.tblDO.Name = "tblDO";
+ this.tblDO.Names = null;
+ this.tblDO.ShadowColor = System.Drawing.Color.Black;
+ this.tblDO.showDebugInfo = false;
+ this.tblDO.ShowIndexString = true;
+ this.tblDO.Size = new System.Drawing.Size(574, 99);
+ this.tblDO.TabIndex = 3;
+ this.tblDO.Tags = null;
+ this.tblDO.Text = "gridView3";
+ this.tblDO.TextAttachToImage = true;
+ this.tblDO.Titles = null;
+ this.tblDO.Values = null;
+ //
+ // lbtitle2
+ //
+ this.lbtitle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
+ this.lbtitle2.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.lbtitle2.Dock = System.Windows.Forms.DockStyle.Top;
+ this.lbtitle2.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lbtitle2.ForeColor = System.Drawing.Color.White;
+ this.lbtitle2.Location = new System.Drawing.Point(0, 0);
+ this.lbtitle2.Name = "lbtitle2";
+ this.lbtitle2.Size = new System.Drawing.Size(574, 16);
+ this.lbtitle2.TabIndex = 1;
+ this.lbtitle2.Text = "OUTPUT";
+ this.lbtitle2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // timer1
+ //
+ this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(11, 239);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(89, 28);
+ this.button1.TabIndex = 138;
+ this.button1.Text = "init IO/MOT";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // ctlSensor1
+ //
+ this.ctlSensor1.ColorOff = System.Drawing.Color.DimGray;
+ this.ctlSensor1.ColorOn = System.Drawing.Color.Lime;
+ this.ctlSensor1.Location = new System.Drawing.Point(468, 293);
+ this.ctlSensor1.MaximumSize = new System.Drawing.Size(80, 80);
+ this.ctlSensor1.MinimumSize = new System.Drawing.Size(40, 40);
+ this.ctlSensor1.Name = "ctlSensor1";
+ this.ctlSensor1.Size = new System.Drawing.Size(54, 48);
+ this.ctlSensor1.TabIndex = 142;
+ this.ctlSensor1.Value = true;
+ //
+ // m4
+ //
+ this.m4.Length = 100;
+ this.m4.Location = new System.Drawing.Point(277, 285);
+ this.m4.MaximumSize = new System.Drawing.Size(80, 80);
+ this.m4.MinimumSize = new System.Drawing.Size(40, 40);
+ this.m4.Name = "m4";
+ this.m4.Pin_DirCW = false;
+ this.m4.Pin_Max = false;
+ this.m4.Pin_Min = false;
+ this.m4.Pin_Run = false;
+ this.m4.Size = new System.Drawing.Size(80, 47);
+ this.m4.TabIndex = 141;
+ this.m4.TabStop = false;
+ //
+ // m3
+ //
+ this.m3.Length = 100;
+ this.m3.Location = new System.Drawing.Point(191, 285);
+ this.m3.MaximumSize = new System.Drawing.Size(80, 80);
+ this.m3.MinimumSize = new System.Drawing.Size(40, 40);
+ this.m3.Name = "m3";
+ this.m3.Pin_DirCW = false;
+ this.m3.Pin_Max = false;
+ this.m3.Pin_Min = false;
+ this.m3.Pin_Run = false;
+ this.m3.Size = new System.Drawing.Size(80, 47);
+ this.m3.TabIndex = 140;
+ this.m3.TabStop = false;
+ //
+ // m2
+ //
+ this.m2.Length = 100;
+ this.m2.Location = new System.Drawing.Point(105, 285);
+ this.m2.MaximumSize = new System.Drawing.Size(80, 80);
+ this.m2.MinimumSize = new System.Drawing.Size(40, 40);
+ this.m2.Name = "m2";
+ this.m2.Pin_DirCW = false;
+ this.m2.Pin_Max = false;
+ this.m2.Pin_Min = false;
+ this.m2.Pin_Run = false;
+ this.m2.Size = new System.Drawing.Size(80, 47);
+ this.m2.TabIndex = 140;
+ this.m2.TabStop = false;
+ //
+ // m1
+ //
+ this.m1.Length = 100;
+ this.m1.Location = new System.Drawing.Point(19, 285);
+ this.m1.MaximumSize = new System.Drawing.Size(80, 80);
+ this.m1.MinimumSize = new System.Drawing.Size(40, 40);
+ this.m1.Name = "m1";
+ this.m1.Pin_DirCW = false;
+ this.m1.Pin_Max = false;
+ this.m1.Pin_Min = false;
+ this.m1.Pin_Run = false;
+ this.m1.Size = new System.Drawing.Size(80, 47);
+ this.m1.TabIndex = 140;
+ this.m1.TabStop = false;
+ //
+ // mcv
+ //
+ this.mcv.Length = 100;
+ this.mcv.Location = new System.Drawing.Point(363, 285);
+ this.mcv.MaximumSize = new System.Drawing.Size(80, 80);
+ this.mcv.MinimumSize = new System.Drawing.Size(40, 40);
+ this.mcv.Name = "mcv";
+ this.mcv.Pin_DirCW = false;
+ this.mcv.Pin_Max = false;
+ this.mcv.Pin_Min = false;
+ this.mcv.Pin_Run = false;
+ this.mcv.Size = new System.Drawing.Size(80, 47);
+ this.mcv.TabIndex = 139;
+ this.mcv.TabStop = false;
+ //
+ // fEmulator
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 414);
+ this.Controls.Add(this.ctlSensor1);
+ this.Controls.Add(this.m4);
+ this.Controls.Add(this.m3);
+ this.Controls.Add(this.m2);
+ this.Controls.Add(this.m1);
+ this.Controls.Add(this.mcv);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.Controls.Add(this.panel1);
+ this.Name = "fEmulator";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "fEmulator";
+ this.Load += new System.EventHandler(this.fEmulator_Load);
+ this.panel1.ResumeLayout(false);
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.panel2.ResumeLayout(false);
+ this.panel3.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private arDev.AzinAxt.JogController jogController1;
+ private System.Windows.Forms.Panel panel1;
+ private arDev.AzinAxt.JogController jogController3;
+ private arDev.AzinAxt.JogController jogController2;
+ private arDev.AzinAxt.JogController jogController5;
+ private arDev.AzinAxt.JogController jogController4;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.Panel panel2;
+ private arDev.AzinAxt.GridView tblDI;
+ private System.Windows.Forms.Label lbTitle1;
+ private System.Windows.Forms.Panel panel3;
+ private arDev.AzinAxt.GridView tblDO;
+ private System.Windows.Forms.Label lbtitle2;
+ private System.Windows.Forms.Timer timer1;
+ private System.Windows.Forms.Button button1;
+ private UIControl.CtlMotor mcv;
+ private UIControl.CtlMotor m1;
+ private UIControl.CtlMotor m2;
+ private UIControl.CtlMotor m3;
+ private UIControl.CtlMotor m4;
+ private UIControl.CtlSensor ctlSensor1;
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fEmulator.cs b/QRValidation/Project/Dialog/fEmulator.cs
new file mode 100644
index 0000000..a3dcb9a
--- /dev/null
+++ b/QRValidation/Project/Dialog/fEmulator.cs
@@ -0,0 +1,278 @@
+using arDev.AzinAxt;
+using arDev.AzinAxt.Emulator;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Project.Dialog
+{
+ public partial class fEmulator : Form
+ {
+ public CEmuleDIO devIO { get; private set; }
+ public CEmulMOT devM { get; private set; }
+
+ JogController[] jobCtl;
+
+ public fEmulator(int pCnt,int aCnt, MOT mot)
+ {
+ InitializeComponent();
+
+ //motion
+ devM = new CEmulMOT(aCnt);
+
+ this.jobCtl = new JogController[] {
+ jogController1,jogController2,
+ jogController3,jogController4,
+ jogController5
+ };
+
+ foreach (var item in jobCtl)
+ {
+ item.arDebugMode = false;
+ item.ItemClick += Item_ItemClick;
+ }
+
+ for (int i = 0; i < aCnt; i++)
+ {
+ Boolean enb = i < aCnt;
+ jobCtl[i].MotionObject = mot;
+ jobCtl[i].Enabled = enb;
+ jobCtl[i].arUsage = enb;
+ jobCtl[i].arAutoUpdate = false;
+ jobCtl[i].Invalidate();
+
+ if (enb)
+ {
+ devM.MaxPosition[i] = jobCtl[i].arMaxLength;
+ devM.MinPosition[i] = jobCtl[i].arMinLength;
+ }
+
+ }
+
+ //input
+ devIO = new CEmuleDIO(pCnt);
+ devIO.IOValueChagned += Dev_IOValueChagned;
+
+ this.tblDI.SuspendLayout();
+ this.tblDO.SuspendLayout();
+
+ var pinNameI = new string[pCnt];
+ var pinNameO = new string[pCnt];
+ var pinTitleI = new string[pCnt];
+ var pinTitleO = new string[pCnt];
+
+ for (int i = 0; i < pinNameI.Length; i++)
+ {
+ pinNameI[i] = "X" + i.ToString("X2").PadLeft(3, '0');// Enum.GetName(typeof(ePLCIPin), i); //Enum.GetNames(typeof(eDIName))[i];// i.ToString();
+ pinTitleI[i] = string.Empty;// i.ToString();// Enum.GetName(typeof(ePLCITitle), i); //Enum.GetNames(typeof(eDITitle))[i];
+
+ }
+
+ for (int i = 0; i < pinNameO.Length; i++)
+ {
+ pinNameO[i] = "Y" + i.ToString("X2").PadLeft(3, '0');// Enum.GetName(typeof(ePLCOPin), i); // Enum.GetNames(typeof(eDOName))[i];
+ pinTitleO[i] = string.Empty;//i.ToString();// Enum.GetName(typeof(ePLCOTitle), i); // Enum.GetNames(typeof(eDOTitle))[i];
+ }
+
+ tblDI.MatrixSize = new Point(8, 8);
+ tblDO.MatrixSize = new Point(8, 8);
+
+ tblDI.setTitle(pinTitleI);
+ tblDO.setTitle(pinTitleO);
+
+ tblDI.setNames(pinNameI);
+ tblDO.setNames(pinNameO);
+
+ tblDI.setItemTextAlign(ContentAlignment.BottomLeft);
+ tblDO.setItemTextAlign(ContentAlignment.BottomLeft);
+
+
+
+ tblDI.setValue(devIO.Input);
+ tblDO.setValue(devIO.Output);
+
+ //dio.IOValueChanged += dio_IOValueChanged;
+
+ this.tblDI.ItemClick += tblDI_ItemClick;
+ this.tblDO.ItemClick += tblDO_ItemClick;
+
+ this.tblDI.Invalidate();
+ this.tblDO.Invalidate();
+ }
+
+ private void fEmulator_Load(object sender, EventArgs e)
+ {
+ timer1.Start();
+ }
+
+ private void Item_ItemClick(object sender, JogController.ItemClickEventArgs e)
+ {
+ //조그컨트롤에서 버튼을 누르면 동작하는 기능
+ JogController jog = sender as JogController;
+ arDev.AzinAxt.MOT mot = jog.MotionObject;
+ if (e.Button == MouseButtons.Left)
+ {
+ if (e.IsDown == false)
+ {
+ //마우스 업
+ if (e.Command.StartsWith("JOG"))
+ {
+ devM.dCmd[jog.arAxis] = devM.dAct[jog.arAxis];
+ mot.MoveStop("", (short)jog.arAxis);
+ }
+ }
+ else
+ {
+ //마우스 다운
+ if (e.Command == "HSET")
+ {
+ mot.isHomeSet[jog.arAxis] = !mot.isHomeSet[jog.arAxis];
+ Console.WriteLine("homse change : " + devM.isHSet[jog.arAxis].ToString());
+ }
+ else if (e.Command == "ALM")
+ {
+ //알람상태를 직접 변경해야한다
+ devM.SetMech(jog.arAxis, CEmulMOT.eMach.MotAlarm, !devM.isAlm(jog.arAxis));
+ }
+ else if (e.Command == "SVON")
+ {
+ var cVal = mot.isSERVOON[jog.arAxis];
+ mot.SetSVON((short)jog.arAxis, !cVal);
+ }
+ else if (e.Command == "ORG")
+ {
+ mot.Move((short)jog.arAxis, 0);
+ }
+ else if (e.Command == "JOGR")
+ {
+ mot.JOG((short)jog.arAxis, eMotionDirection.Positive);
+ }
+ else if (e.Command == "JOGL")
+ {
+ mot.JOG((short)jog.arAxis, eMotionDirection.Negative);
+ }
+
+ }
+ }
+ }
+
+ void tblDO_ItemClick(object sender, GridView.ItemClickEventArgs e)
+ {
+ var nVal = !devIO.Output[e.idx];//.Get(e.idx);// doValue[e.idx];// == 1 ? (ushort)0 : (ushort)1;
+ devIO.SetOutput(e.idx, nVal);
+ }
+ void tblDI_ItemClick(object sender, GridView.ItemClickEventArgs e)
+ {
+ var nVal = !devIO.Input[e.idx];
+ devIO.SetInput(e.idx, nVal);
+ }
+ private void Dev_IOValueChagned(object sender, CEmuleDIO.IOValueChangedArgs e)
+ {
+ if (e.Dir == CEmuleDIO.eDirection.In)
+ {
+ //해당 아이템의 값을 변경하고 다시 그린다.
+ if (tblDI.setValue(e.ArrIDX, e.NewValue))
+ tblDI.Invalidate();//.drawItem(e.ArrIDX);
+ Console.WriteLine(string.Format("di change {0}:{1}", e.ArrIDX, e.NewValue.ToString()));
+ }
+ else
+ {
+ //해당 아이템의 값을 변경하고 다시 그린다.
+ if (tblDO.setValue(e.ArrIDX, e.NewValue))
+ tblDO.Invalidate();//.drawItem(e.ArrIDX);
+
+ Console.WriteLine(string.Format("do change {0}:{1}", e.ArrIDX, e.NewValue.ToString()));
+ }
+ }
+
+ private void timer1_Tick(object sender, EventArgs e)
+ {
+ for (int i = 0; i < this.devM.axisCount; i++)
+ {
+ //각 축별 데이터를 표시한다
+ this.jobCtl[i].arIsOrg = devM.isOrg(i);
+ this.jobCtl[i].arIsInp = devM.isINp(i);
+ this.jobCtl[i].arIsAlm = devM.isAlm(i);
+ this.jobCtl[i].arIsLimM = devM.isLimM(i);
+ this.jobCtl[i].arIsLimP = devM.isLimP(i);
+ this.jobCtl[i].arIsSvON = devM.isSvOn(i);
+
+ this.jobCtl[i].ardAct = devM.dAct[i];
+ this.jobCtl[i].arIsInit = true;// MotionObject.IsInit;
+ this.jobCtl[i].arIsHSet = true;
+
+ this.jobCtl[i].Invalidate();
+ }
+
+ //motor 표시
+ mcv.Pin_Run = devIO.Output[(int)eDOName.CONV_RUN];
+ mcv.Pin_DirCW = true;
+ mcv.Invalidate();
+
+ m1.Pin_Run = devIO.Output[(int)eDOName.PORT1_MOT_RUN];
+ m1.Pin_DirCW = devIO.Output[(int)eDOName.PORT1_MOT_DIR];
+ m1.Invalidate();
+
+ m2.Pin_Run = devIO.Output[(int)eDOName.PORT2_MOT_RUN];
+ m2.Pin_DirCW = devIO.Output[(int)eDOName.PORT2_MOT_DIR];
+ m2.Invalidate();
+
+ m3.Pin_Run = devIO.Output[(int)eDOName.PORT3_MOT_RUN];
+ m3.Pin_DirCW = devIO.Output[(int)eDOName.PORT3_MOT_DIR];
+ m3.Invalidate();
+
+ m4.Pin_Run = devIO.Output[(int)eDOName.PORT4_MOT_RUN];
+ m4.Pin_DirCW = devIO.Output[(int)eDOName.PORT4_MOT_DIR];
+ m4.Invalidate();
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ //모터 svon
+ Pub.mot.SetSVON(true);
+
+ //emg on
+ devIO.SetInput((int)eDIName.BUT_EMGF, true);
+ devIO.SetInput((int)eDIName.BUT_EMGR, true);
+
+ devIO.SetInput((int)eDIName.AREA_PORT11, true);
+ devIO.SetInput((int)eDIName.AREA_PORT12, true);
+
+ devIO.SetInput((int)eDIName.AREA_PORT21, true);
+ devIO.SetInput((int)eDIName.AREA_PORT22, true);
+
+ devIO.SetInput((int)eDIName.AREA_PORT31, true);
+ devIO.SetInput((int)eDIName.AREA_PORT32, true);
+
+ devIO.SetInput((int)eDIName.AREA_PORT41, true);
+ devIO.SetInput((int)eDIName.AREA_PORT42, true);
+
+ //각포트는 하단에 있는걸로 한다
+ devIO.SetInput((int)eDIName.PORT1_LIM_UP, true);
+ devIO.SetInput((int)eDIName.PORT1_LIM_DN, false); //false가 감지
+ devIO.SetInput((int)eDIName.PORT1_DET_UP, true);
+ devIO.SetInput((int)eDIName.PORT1_DET_DN, true);
+
+ devIO.SetInput((int)eDIName.PORT2_LIM_UP, true);
+ devIO.SetInput((int)eDIName.PORT2_LIM_DN, false); //false가 감지
+ devIO.SetInput((int)eDIName.PORT2_DET_UP, true);
+ devIO.SetInput((int)eDIName.PORT2_DET_DN, true);
+
+ devIO.SetInput((int)eDIName.PORT3_LIM_UP, true);
+ devIO.SetInput((int)eDIName.PORT3_LIM_DN, false); //false가 감지
+ devIO.SetInput((int)eDIName.PORT3_DET_UP, true);
+ devIO.SetInput((int)eDIName.PORT3_DET_DN, true);
+
+ devIO.SetInput((int)eDIName.PORT4_LIM_UP, true);
+ devIO.SetInput((int)eDIName.PORT4_LIM_DN, false); //false가 감지
+ devIO.SetInput((int)eDIName.PORT4_DET_UP, true);
+ devIO.SetInput((int)eDIName.PORT4_DET_DN, true);
+ }
+ }
+}
diff --git a/QRValidation/Project/Dialog/fEmulator.resx b/QRValidation/Project/Dialog/fEmulator.resx
new file mode 100644
index 0000000..1f666f2
--- /dev/null
+++ b/QRValidation/Project/Dialog/fEmulator.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fErrorException.Designer.cs b/QRValidation/Project/Dialog/fErrorException.Designer.cs
new file mode 100644
index 0000000..a2977ef
--- /dev/null
+++ b/QRValidation/Project/Dialog/fErrorException.Designer.cs
@@ -0,0 +1,205 @@
+namespace Project
+{
+ partial class fErrorException
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fErrorException));
+ this.pictureBox1 = new System.Windows.Forms.PictureBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.panTitleBar = new System.Windows.Forms.Panel();
+ this.label3 = new System.Windows.Forms.Label();
+ this.lbTitle = new System.Windows.Forms.Label();
+ this.btTeach = new System.Windows.Forms.Label();
+ this.panel1 = new System.Windows.Forms.Panel();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+ this.panTitleBar.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // pictureBox1
+ //
+ this.pictureBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
+ this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+ this.pictureBox1.Location = new System.Drawing.Point(269, 19);
+ this.pictureBox1.Name = "pictureBox1";
+ this.pictureBox1.Size = new System.Drawing.Size(80, 80);
+ this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
+ this.pictureBox1.TabIndex = 0;
+ this.pictureBox1.TabStop = false;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
+ this.label1.Font = new System.Drawing.Font("맑은 고딕", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label1.ForeColor = System.Drawing.Color.White;
+ this.label1.Location = new System.Drawing.Point(10, 106);
+ this.label1.Name = "label1";
+ this.label1.Padding = new System.Windows.Forms.Padding(10);
+ this.label1.Size = new System.Drawing.Size(598, 50);
+ this.label1.TabIndex = 3;
+ this.label1.Text = "The program was terminated due to an unhandled error";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
+ this.label2.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label2.ForeColor = System.Drawing.Color.DodgerBlue;
+ this.label2.Location = new System.Drawing.Point(17, 159);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(507, 45);
+ this.label2.TabIndex = 4;
+ this.label2.Text = "Information for error reporting has been collected.\r\nThe collected information is" +
+ " shown below.\r\nPlease send to \"Chikyun.kim@amkor.co.kr\" including the situation " +
+ "before the error occurred.";
+ //
+ // textBox1
+ //
+ this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
+ this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.textBox1.ForeColor = System.Drawing.Color.LightCoral;
+ this.textBox1.Location = new System.Drawing.Point(10, 218);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.textBox1.Size = new System.Drawing.Size(598, 346);
+ this.textBox1.TabIndex = 5;
+ this.textBox1.Text = "test";
+ //
+ // panTitleBar
+ //
+ this.panTitleBar.BackColor = System.Drawing.Color.Maroon;
+ this.panTitleBar.Controls.Add(this.label3);
+ this.panTitleBar.Controls.Add(this.lbTitle);
+ this.panTitleBar.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panTitleBar.Location = new System.Drawing.Point(1, 1);
+ this.panTitleBar.Name = "panTitleBar";
+ this.panTitleBar.Size = new System.Drawing.Size(617, 32);
+ this.panTitleBar.TabIndex = 133;
+ //
+ // label3
+ //
+ this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label3.ForeColor = System.Drawing.Color.White;
+ this.label3.Location = new System.Drawing.Point(547, 6);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(61, 17);
+ this.label3.TabIndex = 61;
+ this.label3.Text = "[ Close ]";
+ this.label3.Click += new System.EventHandler(this.label3_Click);
+ //
+ // lbTitle
+ //
+ this.lbTitle.BackColor = System.Drawing.Color.Transparent;
+ this.lbTitle.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.lbTitle.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lbTitle.Font = new System.Drawing.Font("Cambria", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lbTitle.ForeColor = System.Drawing.Color.LightSkyBlue;
+ this.lbTitle.Location = new System.Drawing.Point(0, 0);
+ this.lbTitle.Name = "lbTitle";
+ this.lbTitle.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
+ this.lbTitle.Size = new System.Drawing.Size(617, 32);
+ this.lbTitle.TabIndex = 60;
+ this.lbTitle.Text = "UnhandledException";
+ this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // btTeach
+ //
+ this.btTeach.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.btTeach.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btTeach.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.btTeach.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.btTeach.ForeColor = System.Drawing.Color.DeepPink;
+ this.btTeach.Location = new System.Drawing.Point(1, 610);
+ this.btTeach.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
+ this.btTeach.Name = "btTeach";
+ this.btTeach.Size = new System.Drawing.Size(617, 61);
+ this.btTeach.TabIndex = 134;
+ this.btTeach.Text = "Close";
+ this.btTeach.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.btTeach.Click += new System.EventHandler(this.btTeach_Click);
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
+ this.panel1.Controls.Add(this.pictureBox1);
+ this.panel1.Controls.Add(this.textBox1);
+ this.panel1.Controls.Add(this.label1);
+ this.panel1.Controls.Add(this.label2);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel1.Location = new System.Drawing.Point(1, 33);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(617, 577);
+ this.panel1.TabIndex = 135;
+ //
+ // fErrorException
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(15)))), ((int)(((byte)(15)))), ((int)(((byte)(15)))));
+ this.ClientSize = new System.Drawing.Size(619, 672);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.btTeach);
+ this.Controls.Add(this.panTitleBar);
+ this.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+ this.KeyPreview = true;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "fErrorException";
+ this.Padding = new System.Windows.Forms.Padding(1);
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Error Report";
+ this.TopMost = true;
+ this.Load += new System.EventHandler(this.fErrorException_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+ this.panTitleBar.ResumeLayout(false);
+ this.panTitleBar.PerformLayout();
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox pictureBox1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox textBox1;
+ public System.Windows.Forms.Panel panTitleBar;
+ private System.Windows.Forms.Label lbTitle;
+ private System.Windows.Forms.Label btTeach;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Label label3;
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fErrorException.cs b/QRValidation/Project/Dialog/fErrorException.cs
new file mode 100644
index 0000000..293f622
--- /dev/null
+++ b/QRValidation/Project/Dialog/fErrorException.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Project
+{
+ public partial class fErrorException : Form
+ {
+ public fErrorException(string err)
+ {
+ InitializeComponent();
+ System.Text.StringBuilder sb = new StringBuilder();
+ sb.AppendLine("===============================");
+ sb.AppendLine("Amkor Technology Korea");
+ sb.AppendLine("K4 EEDP");
+ sb.AppendLine("===============================");
+ sb.AppendLine();
+ sb.AppendLine(err);
+ this.textBox1.Text = sb.ToString();
+
+ this.lbTitle.MouseMove += LbTitle_MouseMove;
+ this.lbTitle.MouseUp += LbTitle_MouseUp;
+ this.lbTitle.MouseDown += LbTitle_MouseDown;
+ this.lbTitle.DoubleClick += LbTitle_DoubleClick;
+ }
+
+ private void fErrorException_Load(object sender, EventArgs e)
+ {
+
+ }
+
+ #region "Mouse Form Move"
+
+ private Boolean fMove = false;
+ private Point MDownPos;
+
+ private void LbTitle_DoubleClick(object sender, EventArgs e)
+ {
+ if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
+ else this.WindowState = FormWindowState.Maximized;
+ }
+ private void LbTitle_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (fMove)
+ {
+ Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
+ this.Left += offset.X;
+ this.Top += offset.Y;
+ offset = new Point(0, 0);
+ }
+ }
+ private void LbTitle_MouseUp(object sender, MouseEventArgs e)
+ {
+ fMove = false;
+ }
+ private void LbTitle_MouseDown(object sender, MouseEventArgs e)
+ {
+ MDownPos = new Point(e.X, e.Y);
+ fMove = true;
+ }
+
+ #endregion
+
+ private void btTeach_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+
+ private void label3_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
diff --git a/QRValidation/Project/Dialog/fErrorException.resx b/QRValidation/Project/Dialog/fErrorException.resx
new file mode 100644
index 0000000..20babae
--- /dev/null
+++ b/QRValidation/Project/Dialog/fErrorException.resx
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAb
+ rQAAG60BIeRSlQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPnSURBVHhe7dzJ
+ TttQFAbgdNFKnZ6GFWKDfCNGsWRRddO+ATwBo5g2iNdopU7LqlXVFgUa2LDoE7TbQoEIFpVw72/5EOdw
+ INO919fx/aVfiuwTD58chcFyJSQkJJu4Urm3H0Uv95Wq7VWrx2jyOopeYF06FiLlcGbmkQZ7v6dULFav
+ w0w6HpINYGpKfQbUj/Hx+Pf8fHy2thafra8nr7EsQYyiT7Xh4Yfp20KQLF59cjI+XlqKL7e3W4plWBcQ
+ WXZHRp5qkF3AHE5NxScrKzfwqFiHmRRxF+9NN1POdINHDYhpesGjlh6xHzxqaRE53t/VVRGok5YO0SQe
+ tTSINvCoLYhKfR84RJt41IFFdIFHxbYHCtElHpUjfhkdfZIeTrGS4OkTcIlHLTxinnjUwiLiQPPGoxYO
+ 0Sc8amEQTePxSDOd1ntEG1cejzTTTb1FbMGbnjaCh/JIM93WO0RbeCiPNNNLs4g1pb7lhmgTD+WRZnpt
+ 7oi28VAeaaaf5oaIHWGHNvFQHmmm3yaI+hycIbrCQ3mkGRN1hugSD+WRZkzVOqJrPJRHmjFZa4h54KE8
+ 0ozpGkfMCw/lkWZs1BhinngojzRjq30j5o2H8kgzNptF3Ffqa8eIPuChPNKM7XaN6AseyiPNuChHPBob
+ e5xytQZ3f2q81xg80L/inCwvixt0VR5pxlVhAZMEsVp9Jd4pq1c+xwBuZMwbD+WRZlwWJnSTZy2KnqVs
+ zegVyR8Hfs3NiRtwXR5pxnVhAyN8lFO2ZvSKc6w839gQ3+y6PNKM68IGRrpnKVszemEjAN5d3K99F2D4
+ CLdpu49w+BK5o22/RMKPMbcXFm1/jEEOh4bu68vzLQbrExPx8eKiuEEX5ZFmXBQGsICJ7hsYpVxyfEHk
+ kWZst2s8ik9XYl7tGY9SZsQsHgy6xqOUEdEYHqVMiMbxKGVAtIZHcYq4sxP/q9fjq9PTpHiNZeKsgVrH
+ o/ycnX3gAhFgPAmiMNtv/ywsuMGjuEC8ajRStmawTJrtp87xKEDUv/a9s4XoAjA3PIpNRNsfYY6Hc0lP
+ y22sIdKXyMVF0gTP0JeIN3gUjogDlA7ch3qHRykCYhYPx+oNHsVnRO/xKD4iFgaPggOkpw/ljVg4PIoP
+ iIXFo+SJWHg8Ch7PpE/iI07kAI90cvCPKuwD+8I+se/CPyLK5ZWYvfKwz8JeeTwuEAcWj2ITceDxKDYQ
+ S4NHMYlYOjyKCcTS4lESRKU+9IKI2etHgpYRj9ILYsBj6QYx4N2S8BBaA5Eeg9zY3IwbW1vhMcidBoj0
+ 7SxWr8NMOh4iBXd/Xj8KXqlLNHkdHgUfEnIjlcp/1rPAKpMPkMkAAAAASUVORK5CYII=
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fTeach.Designer.cs b/QRValidation/Project/Dialog/fTeach.Designer.cs
new file mode 100644
index 0000000..12fa596
--- /dev/null
+++ b/QRValidation/Project/Dialog/fTeach.Designer.cs
@@ -0,0 +1,242 @@
+namespace Project
+{
+ partial class fTeach
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fTeach));
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.btOpen = new System.Windows.Forms.ToolStripButton();
+ this.btSave = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.btFindEvision = new System.Windows.Forms.ToolStripButton();
+ this.btTestEvision = new System.Windows.Forms.ToolStripButton();
+ this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.button1 = new System.Windows.Forms.Button();
+ this.tbGainOff = new System.Windows.Forms.TextBox();
+ this.tbErode = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label1 = new System.Windows.Forms.Label();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.tbBarcodeList = new System.Windows.Forms.TextBox();
+ this.toolStripButton13 = new System.Windows.Forms.ToolStripButton();
+ this.toolStrip1.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.btOpen,
+ this.btSave,
+ this.toolStripSeparator2,
+ this.btFindEvision,
+ this.btTestEvision,
+ this.toolStripButton13});
+ this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(688, 25);
+ this.toolStrip1.TabIndex = 3;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // btOpen
+ //
+ this.btOpen.Image = ((System.Drawing.Image)(resources.GetObject("btOpen.Image")));
+ this.btOpen.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btOpen.Name = "btOpen";
+ this.btOpen.Size = new System.Drawing.Size(56, 22);
+ this.btOpen.Text = "Open";
+ this.btOpen.Click += new System.EventHandler(this.toolStripButton1_Click);
+ //
+ // btSave
+ //
+ this.btSave.Image = ((System.Drawing.Image)(resources.GetObject("btSave.Image")));
+ this.btSave.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btSave.Name = "btSave";
+ this.btSave.Size = new System.Drawing.Size(52, 22);
+ this.btSave.Text = "Save";
+ this.btSave.Click += new System.EventHandler(this.toolStripButton4_Click);
+ //
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
+ //
+ // btFindEvision
+ //
+ this.btFindEvision.Image = ((System.Drawing.Image)(resources.GetObject("btFindEvision.Image")));
+ this.btFindEvision.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btFindEvision.Name = "btFindEvision";
+ this.btFindEvision.Size = new System.Drawing.Size(95, 22);
+ this.btFindEvision.Text = "Find(Evision)";
+ this.btFindEvision.Click += new System.EventHandler(this.btFineEvision_Click);
+ //
+ // btTestEvision
+ //
+ this.btTestEvision.Image = ((System.Drawing.Image)(resources.GetObject("btTestEvision.Image")));
+ this.btTestEvision.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btTestEvision.Name = "btTestEvision";
+ this.btTestEvision.Size = new System.Drawing.Size(93, 22);
+ this.btTestEvision.Text = "Test(Evision)";
+ this.btTestEvision.Click += new System.EventHandler(this.toolStripButton3_Click);
+ //
+ // statusStrip1
+ //
+ this.statusStrip1.Location = new System.Drawing.Point(0, 606);
+ this.statusStrip1.Name = "statusStrip1";
+ this.statusStrip1.Size = new System.Drawing.Size(688, 22);
+ this.statusStrip1.TabIndex = 4;
+ this.statusStrip1.Text = "statusStrip1";
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.button1);
+ this.panel1.Controls.Add(this.tbGainOff);
+ this.panel1.Controls.Add(this.tbErode);
+ this.panel1.Controls.Add(this.label2);
+ this.panel1.Controls.Add(this.label1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panel1.Location = new System.Drawing.Point(0, 495);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(688, 111);
+ this.panel1.TabIndex = 5;
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(112, 70);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(564, 29);
+ this.button1.TabIndex = 2;
+ this.button1.Text = "Save Setting";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // tbGainOff
+ //
+ this.tbGainOff.Location = new System.Drawing.Point(112, 42);
+ this.tbGainOff.Name = "tbGainOff";
+ this.tbGainOff.Size = new System.Drawing.Size(564, 21);
+ this.tbGainOff.TabIndex = 1;
+ //
+ // tbErode
+ //
+ this.tbErode.Location = new System.Drawing.Point(112, 14);
+ this.tbErode.Name = "tbErode";
+ this.tbErode.Size = new System.Drawing.Size(564, 21);
+ this.tbErode.TabIndex = 1;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(15, 45);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(91, 12);
+ this.label2.TabIndex = 0;
+ this.label2.Text = "Gain Offset List";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(44, 17);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(62, 12);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Erode List";
+ //
+ // panel2
+ //
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel2.Location = new System.Drawing.Point(0, 25);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(688, 405);
+ this.panel2.TabIndex = 6;
+ //
+ // tbBarcodeList
+ //
+ this.tbBarcodeList.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tbBarcodeList.Location = new System.Drawing.Point(0, 430);
+ this.tbBarcodeList.Multiline = true;
+ this.tbBarcodeList.Name = "tbBarcodeList";
+ this.tbBarcodeList.ReadOnly = true;
+ this.tbBarcodeList.Size = new System.Drawing.Size(688, 65);
+ this.tbBarcodeList.TabIndex = 7;
+ //
+ // toolStripButton13
+ //
+ this.toolStripButton13.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image")));
+ this.toolStripButton13.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton13.Name = "toolStripButton13";
+ this.toolStripButton13.Size = new System.Drawing.Size(61, 22);
+ this.toolStripButton13.Text = "debug";
+ this.toolStripButton13.Click += new System.EventHandler(this.toolStripButton13_Click);
+ //
+ // fTeach
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(688, 628);
+ this.Controls.Add(this.panel2);
+ this.Controls.Add(this.tbBarcodeList);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.statusStrip1);
+ this.Controls.Add(this.toolStrip1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "fTeach";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Vision Teach";
+ this.Load += new System.EventHandler(this.fTeach_Load);
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.panel1.ResumeLayout(false);
+ this.panel1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.ToolStripButton btOpen;
+ private System.Windows.Forms.ToolStripButton btFindEvision;
+ private System.Windows.Forms.ToolStripButton btTestEvision;
+ private System.Windows.Forms.ToolStripButton btSave;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox tbErode;
+ private System.Windows.Forms.TextBox tbGainOff;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.TextBox tbBarcodeList;
+ private System.Windows.Forms.ToolStripButton toolStripButton13;
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fTeach.cs b/QRValidation/Project/Dialog/fTeach.cs
new file mode 100644
index 0000000..aa47585
--- /dev/null
+++ b/QRValidation/Project/Dialog/fTeach.cs
@@ -0,0 +1,252 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using AR;
+
+
+#if V22
+using Euresys.Open_eVision_22_12;
+#else
+using Euresys.Open_eVision_2_11;
+#endif
+
+namespace Project
+{
+ public partial class fTeach : Form
+ {
+
+ EImageBW8 img = null;
+ private arCtl.ImageBoxEvision iv1;
+ public fTeach(EBaseROI img_ = null)
+ {
+ InitializeComponent();
+
+ this.iv1 = new arCtl.ImageBoxEvision();
+ this.iv1.BackColor = Color.Black;
+ this.iv1.Dock = DockStyle.Fill;
+ this.panel2.Controls.Add(iv1);
+ iv1.Dock = DockStyle.Fill;
+ if (img_ != null)
+ {
+ img = new EImageBW8();
+ img.SetSize(img_);
+ img_.CopyTo(this.img);
+ //EasyImage.Copy(img_, img);
+
+ this.iv1.Image = img;
+ this.iv1.Invalidate();
+ this.iv1.ZoomFit();
+ }
+ this.FormClosed += FTeach_FormClosed;
+ }
+
+ private void FTeach_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ if (this.img != null) img.Dispose();
+ runtest = false;
+ }
+
+ private void fTeach_Load(object sender, EventArgs e)
+ {
+ this.tbErode.Text = PUB.setting.erodevaluestr;
+ this.tbGainOff.Text = PUB.setting.GainOffsetListStr;
+ }
+ private void toolStripButton1_Click(object sender, EventArgs e)
+ {
+ //open file
+ OpenFileDialog od = new OpenFileDialog();
+ if (od.ShowDialog() == DialogResult.OK)
+ {
+ if (this.img != null) this.img.Dispose();
+ img = new EImageBW8();
+ img.Load(od.FileName);
+
+ this.iv1.Image = img;
+ this.iv1.Invalidate();
+ this.iv1.ZoomFit();
+ }
+ }
+
+ private void btFineEvision_Click(object sender, EventArgs e)
+ {
+ string resultMessage;
+ iv1.Shapes.Clear();
+ //using (EImageBW8 img = new EImageBW8(this.img.Width, this.img.Height))
+ {
+ //img.SetImagePtr(this.img.Width, this.img.Height, this.img.MIplImage.ImageData);
+ var pccnt = 0;
+ var qrrlt = Util_Vision.DetectQR(img, this.iv1, pccnt++,
+ out resultMessage,
+ tbErode.Text,
+ tbGainOff.Text,
+ PUB.setting.blob_area_min,
+ PUB.setting.blob_area_max,
+ PUB.setting.blob_sigmaxy,
+ PUB.setting.blob_sigmayy,
+ PUB.setting.blob_sigmaxx,
+ PUB.setting.blob_minw,
+ PUB.setting.blob_maxw,
+ PUB.setting.blob_minh,
+ PUB.setting.blob_maxh);
+
+ var list = qrrlt.Item1;
+ //PUB.ProcessTime[ECalibrationMode]
+ this.tbBarcodeList.Text = string.Join(",", list.Select(t => t.data).ToArray());
+ //
+ foreach (var item in list.OrderByDescending(t => t.sid))
+ {
+ Console.WriteLine("sid:" + item.sid);
+ }
+
+ }
+ this.iv1.ZoomFit();
+ }
+
+ Boolean runtest = false;
+ int runcount = 0;
+ private void toolStripButton3_Click(object sender, EventArgs e)
+ {
+ if (runtest)
+ {
+ runtest = false;
+ PUB.log_[0].Add($"Test completed({runcount})");
+ }
+ else
+ {
+ string resultMessage;
+ iv1.Shapes.Clear();
+ runcount = 0;
+ runtest = true;
+ PUB.log_[0].Add("Test Evision Start");
+ Task.Run(() =>
+ {
+ while (runtest)
+ {
+ Util_Vision.DetectQR(img, this.iv1, runcount++,
+ out resultMessage,
+ tbErode.Text,
+ tbGainOff.Text,
+ PUB.setting.blob_area_min,
+ PUB.setting.blob_area_max,
+ PUB.setting.blob_sigmaxy,
+ PUB.setting.blob_sigmayy,
+ PUB.setting.blob_sigmaxx,
+ PUB.setting.blob_minw,
+ PUB.setting.blob_maxw,
+ PUB.setting.blob_minh,
+ PUB.setting.blob_maxh);
+ }
+ });
+ }
+ }
+
+ private void toolStripButton4_Click(object sender, EventArgs e)
+ {
+ if (this.iv1.Image == null)
+ {
+ UTIL.MsgE("No image");
+ return;
+ }
+ var sd = new SaveFileDialog();
+ sd.FileName = "saveimage.bmp";
+ if (sd.ShowDialog() == DialogResult.OK)
+ this.iv1.Image.Save(sd.FileName);
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ PUB.setting.erodevaluestr = tbErode.Text;
+ PUB.setting.GainOffsetListStr = tbGainOff.Text;
+ PUB.setting.Save();
+ }
+
+ private void toolStripButton13_Click(object sender, EventArgs e)
+ {
+ this.iv1.DebugMode = !this.iv1.DebugMode;
+ this.iv1.Invalidate();
+ }
+
+ //private void toolStripButton6_Click(object sender, EventArgs e)
+ //{
+ // string resultMessage;
+ // iv1.ClearShape();
+ // using (EImageBW8 img = new EImageBW8(this.img.Width, this.img.Height))
+ // {
+ // img.SetImagePtr(this.img.Width, this.img.Height, this.img.MIplImage.ImageData);
+ // var pccnt = 0;
+ // var list = Util_Vision.DetectQR(img, this.iv1, pccnt++,
+ // out resultMessage,
+ // tbErode.Text,
+ // tbGainOff.Text,
+ // Pub.setting.blob_area_min,
+ // Pub.setting.blob_area_max,
+ // Pub.setting.blob_sigmaxy,
+ // Pub.setting.blob_sigmayy,
+ // Pub.setting.blob_sigmaxx,
+ // Pub.setting.blob_minw,
+ // Pub.setting.blob_maxw,
+ // Pub.setting.blob_minh,
+ // Pub.setting.blob_maxh,
+ // true);
+
+ // //
+ // foreach (var item in list.OrderByDescending(t => t.sid))
+ // {
+ // Console.WriteLine("sid:" + item.sid);
+ // }
+
+ // }
+ // this.iv1.ZoomFit();
+ //}
+
+ //private void toolStripButton5_Click(object sender, EventArgs e)
+ //{
+ // if (runtest)
+ // {
+ // runtest = false;
+ // Pub.log.Add($"테스트 종료({runcount})");
+ // }
+ // else
+ // {
+ // Pub.log.Add("Test Evision+Softtek Start");
+ // string resultMessage;
+ // iv1.ClearShape();
+ // runcount = 0;
+ // runtest = true;
+ // Task.Run(() =>
+ // {
+ // using (EImageBW8 img = new EImageBW8(this.img.Width, this.img.Height))
+ // {
+ // img.SetImagePtr(this.img.Width, this.img.Height, this.img.MIplImage.ImageData);
+ // while (runtest)
+ // {
+ // Util_Vision.DetectQR(img, this.iv1, runcount++,
+ // out resultMessage,
+ // tbErode.Text,
+ // tbGainOff.Text,
+ // Pub.setting.blob_area_min,
+ // Pub.setting.blob_area_max,
+ // Pub.setting.blob_sigmaxy,
+ // Pub.setting.blob_sigmayy,
+ // Pub.setting.blob_sigmaxx,
+ // Pub.setting.blob_minw,
+ // Pub.setting.blob_maxw,
+ // Pub.setting.blob_minh,
+ // Pub.setting.blob_maxh,
+ // true);
+ // }
+ // }
+
+ // });
+
+ // }
+
+ //}
+ }
+}
diff --git a/QRValidation/Project/Dialog/fTeach.resx b/QRValidation/Project/Dialog/fTeach.resx
new file mode 100644
index 0000000..375910e
--- /dev/null
+++ b/QRValidation/Project/Dialog/fTeach.resx
@@ -0,0 +1,1890 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEfSURBVDhPYwCB/0QCsGJsACTZt3I3Bq6asAiM08o7iTPg
+ 0dsvcPzi4zcwBrFhBsAAVBsCgARhBvy/wfB/3s3//xfe+v9/ye3/cAOQXQIDcM2vL88GGwCycQFQ87I7
+ //+vvf///8YH/8FiocmlKC55fcoCTKMYALIBpDhpuh4K3n75AYoBfz8fxWLAxR6wASDFMI2vjwRD8C4X
+ BN5sCcHrjdAMgClGwrgA2AXYDEAHv9+u/f/z5dL/35/N+//14RQ4/vXuEHYD/n69+P/3h80QDNSMbsCn
+ W61g/OPVTgIG4ND4/nIhGH97shqLAcAAAvkNl80wzQQNALkCjIFskF9BzgVhkCYYxu4F5KgCYVh0oWOg
+ RhhGMYBcADaAMsDAAAA9c9ORjmwOmQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALsSURBVDhPfZJtT1NnGIDPX9kf2AeT7cM++MlPy7JEh1Ni
+ wDljFIIowY03eRVXpRQq1ZQWaG1RhHaKsVCYqGgZQoWDZTARpUYEoXTWc0oLNbxde05lm0TcnVx57nNy
+ nut+zn0/kt0zYrBfl0MX3LJa07wNzq0YXbLacEOulf6JxltDC/Oh0EYsHie+lPhf3sQSLCiLmNseKZvb
+ JUmrvBiLc6ljBkNHgLLONhzDJlyjlbQEKrjo05Nhs5Lb1Ede0xP+WkxgdD9WN7dLUq04pmY3d86g6+rG
+ MWSi9Y9TNAwdxTx4mHp/JvqeM2RarlJon2BB3UawKASWrlnKvM1cE1Xr/Ue48DANvS8V3YP91PhyOFhX
+ TbFzkpC6LAQjWwWqEDR0v6bU4+CyXIyxPx3d/e8pv7eHkjt70N3NIt14nvIrz5hXlj4WKPEETb/NofN4
+ MfnOUdt/mGzzOEW2cXLqA1RcecKxGpkMo8xP1gC5llF+1A/yWeqNL5OCt6K79p55TN5R8l12dLdOcMQw
+ zE05hhaegZnk+mE4esP8cN6PpM06IjrruBtKSuo8AX6uSOfALwPY7ivJj7NNw8lVi8QqRN9Bdfssh6oG
+ 3gveRBMUur4lr/UbTrV8jbXoC9LODYoqCitr66yubbC+vsGaYGVVe17nbGuQ70ofIBmcw2pECHxTvf/S
+ P9YufuERlu4wJVeDlLUEOd38nMLLkxQI8u1Pybc9Ja2yV5wgKVjeItA4pPdT1zlH+bVXgmmKm19Q5Jii
+ wP6cPNskudZx9pX0IF10y9MRJUpUNDIaf4eaJEFK+e+YvWHCsRhz0YhAYU5VeC3yyFKMgsY/2XXyJlJD
+ u1xl/XWkT5ut0fUfu0v7sHoVQrEwlb27xeU6gcWfI/IUFuKzFDUG+SrDxeZt+Dj2nnnI7RFtCkEG3uqY
+ iDuZWHaKvFq8e8lZZ5Cdme5PC3Ycvd2/v7KPY/oxTtZOk2WY4rj+GdlVE2TpZXYdd/P5wRb+BjBm1Kd4
+ Pv2nAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKPSURBVDhPzZHdT1JxGMdPW1t32Xq5aK4/oP/BrZtuuuyi
+ dVGbXTRnm26la26pkZZetKWy1AxEPSZkEpu8iAjykiGIlAqIChIv53DO4QAesJHGaHyDE631H/jdnj0X
+ z+fz/H7bQ5ysJBKJhmR0d4HZXjlitpbBbpjAeg1gPVpwa/M/uaDbyTBMQw3/PxRFkWzYU0wFzBCCNvCb
+ RoRsSgRNk4hYJnG4Ngfh8zuw1okyH/Hratqf0DS9xAYcyAYs2FoioZ8ahJqUQzWrB6k0QE7qoFLI4VD0
+ IGsehmCSIuO3+kU5Ho8PsDuryPoWYVe/wer6Dj44c5hx5KCwCBgxHmBAm0GfmofWnUPIPIPkx+fIa/tB
+ +d1TBL0XSDFeDXbWrSiVStB5DjFtz0FuFnDu0hXUXazHi7k0upSpSudFhvM7wag64ZO1l4h9l6acoiI4
+ Pj4Wh2pnHmOmLKSGLOou1OPs+ct4MsOhXcGgu9KrTJXNRvz4MtgMIh4J/RIEAYVCAcViETZfvvJlHv1q
+ Dk9VDDqmkngop9E8msCEJSMyVbbqhDRDZYLesAl8fBf5fF4cRJLfIVvk0ElSlVcTaBmL4f7rKLqmKWzu
+ 50SmynJBL2KKx0UiFg6+Ta1pkK5c4YCNI5fLwRfmQS4l0DEexqOxEEbmY/Bsp0RR4FnwngVQo01wySQu
+ 8RJ7m24XvTyOrEOB1FeLkNn3sWmOimcymejfSqfTUcbnYjm9FImKbH7ZxoIgTokLqvF+MmlXlcOlb3N9
+ 4A2vwFvk4BxKsHYlOCsJWjsEWtYCe++9smG0d90uuXa6pv6LUdp6RtffdFstaZydf9bIG3vu/DBJ7h7p
+ u28VNG03V5StN9reP7h+tYafiBDEbzX4GEGAI6bHAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD7SURBVDhPY6AK+E8mgGqHGLDo7K//s0//+t915Of/il0/
+ wDh98/f/UWu//Q9e9e2/59Kv/yPNJOEYwwCQ5qcf/8Hx5Rd/wXj5xV9gw0HYbv7R/xvLXLEbALIZpBFm
+ Iwj7roDY7LL463+HhV//W9UfAhuQZCWKaQDIySAbYZr9lkM0uy1BGGCROhW3ASD/7rj1G0Uzsu0EDQA5
+ HeRfmLNhtsM0IxuANQxANoMCEt3Z2AwIMZbANACkERSQ2bu+g3Hqtm8YGOR0nAbYrn8LxjbrboKx1aqT
+ cAyKPsu5q8FOx2kAMQCnAcQAqhqAEQvEAJgBMEyWAeiAgYGBAQC5wBrpIuv80AAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+ 123, 17
+
+
+
+ AAABAAYAAAAAAAEAIADXBQAAZgAAAICAAAABACAAKAgBAD0GAABAQAAAAQAgAChCAABlDgEAMDAAAAEA
+ IACoJQAAjVABACAgAAABACAAqBAAADV2AQAQEAAAAQAgAGgEAADdhgEAiVBORw0KGgoAAAANSUhEUgAA
+ AQAAAAEACAYAAABccqhmAAAFnklEQVR42u3cv45UZRzH4d8ZRnZd/olsVkOCiIYEiBVgQYGFDQ02tvR6
+ C8QroOAGtNd7oLGQggQFGwVMDARUjOskgisrrruzFlrJWZPDDnPA7/OU+5v3vO+ZPfmEgTBVAAAAAAAA
+ AAAAAADAs6Tp+wCnzl061nHJ8oWzJ6533GO+qva3zS6cPXGl47XmqurwVN+kJ6jv+5/S/qMLZ0/c7rjP
+ /qqabxn1+vxN2rDPzf/xRcfXX6mq4x3XvFtVH24w6xrBw49x5qdZ3/c/jf0/qqr3O675oKrea/l538/f
+ RA363BzolwBAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw
+ AYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJ
+ AAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwA
+ IJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCNafPX/6kbbC2Nn5pvL6+awpnONbx
+ 9ctVdb3jmvmq2r/B7ErHa81V1eEpvC/T0vf9T2P/UVXd7rhmf/393Pxb389fZ4OmuTfcMvipbdacPn/5
+ y7bB2tp433h9fc+TPhzwZA2aZjTcMviuddb34YD+CAAEEwAIJgAQbDget/9F38G9O2YWds32fT5gkxbv
+ P5z99sff2v5Fo4Zr4/G+tsHx1/fUySMLfZ8d2KSL1xa3f/PDr9vbZj4CQDABgGACAMEEAIIJAAQTAAgm
+ ABBMACCYAEAwAYBgAgDBhpO82Gi56s9xtzWfXr3V6fU75mbqzUN7O625O1qqG3dGrbO3jx7odK2l5T/q
+ 8xt3N/9mPSX6vv9p7L93fkcdemW+05obd0Z1d7T0yM/7fv6eG1TNz3Va8p8mGoCllaqHq93WXLy22On1
+ C7u31cFXu/0Cbi7+vuE+R490+wUs3l/tfOanWd/3P43933it6uWFbgH4+vul+urmo/v0/fzNDicbAB8B
+ IJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIA
+ wQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAI
+ JgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw
+ AYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJ
+ AAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwA
+ IJgAQDABgGACAMGGfR9gYfe2Tq9/ccfznfeYnRl23mcjw+FgYtd6FvV9/4+z/865mc777Jybad2n7+dv
+ 0ppT5y6ttw3OvHWgTh5Z6HSxW/eqHq72fUvw/zU7rDrwQrc1F68t1sef3Wqd+QgAwQQAggkABBMACCYA
+ EEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCTfQ7Abt+VRHQL38CgGACAMEE
+ AIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCDZumWW4b/PJgZeudnx9M9P8KANN378HKatM0K22z5p3z
+ l6+2DVbXxvvG6+vzfR8e2JxB04yGg8Gd1lnfhwP6IwAQTAAgmABAMAGAYMOqOrPBbGtN+CvDgF6sVtXK
+ pq8CAAAAAAAAAAAAAAD07i/pV9fEC9LZ4gAAAABJRU5ErkJggigAAACAAAAAAAEAAAEAIAAAAAAAAAAB
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKjE18yoxNfMqMTXzIiUiTx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZyIlIk8qLTXvKi017yotN
+ e8qMTc7KjE3OyoxNzsiJSPXHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//IiUj1yotNzcqLTc3Ki03NyoxNzsqMTc7KjE3OyIlI9ceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8iJSPXKi03NyotN
+ zcqLTc3JikriyYpK4smKSuLZqnn53bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/2ap5+cmKSuHJikrhyYpK4ceIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/ouor/6LqK/+i6iv/ouor/6LqK
+ /+i6iv/1z6T//ty2//7ctv/+3Lb//ty2//7ctv/61a3/6LqK/+i6iv/ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/8cib/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK
+ /+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/xyJv/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/8cib/+i6iv/ouor/6LqK/+i6iv/ouor/7MGS//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/+zBkv/ouor/6LqK//XPpP/+3Lb//ty2//7ctv/+3Lb//ty2//rVrf/ouor/6LqK
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7q0v/+4L7//uC+//7gvv/+4L7//uC+//7gvv/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/sxZv//uC+//7gvv/+4L7//uC+//7gvv/106z/0p1l/9KdZf/SnWX//uC+
+ //7gvv/+4L7//uC+//7gvv/+4L7/5LiJ/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/+4L7//uC+//7gvv/+4L7//uC+//7gvv/kuIn/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX//uC+//7gvv/+4L7//uC+//7gvv/+4L7/5LiJ/9KdZf/SnWX/0p1l/9KdZf/SnWX/26p3
+ //7gvv/+4L7//uC+//7gvv/+4L7//uC+/9uqd//SnWX/0p1l/+zFm//+4L7//uC+//7gvv/+4L7//uC+
+ //XTrP/SnWX/0p1l/9KdZf/+4L7//uC+//7gvv/+4L7//uC+//7gvv/+6tL//vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/yYtL2cmLS9nJi0vZ0Jph99KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9CaYffJi0zYyYtM
+ 2MmLTNjKjEzPyoxMz8qMTM/IiUj1x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/yIlI9cqMTc7KjE3OyoxNzsqMTM/KjEzPyoxMz8iJSPXHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//IiUj1yoxN
+ zsqMTc7KjE3OyoxMU8qMTFPKjExTyIlIYseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR6PHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR4XHiEf/x4hH/8eIR//HiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEfCx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR8LHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEfCx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEfgx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH4MeIR//HiEf/x4hH
+ o8eIR2bHiEdmx4hHZseIR2bHiEdmx4hHhceIR//HiEf/x4hH/8eIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZsiJSGLKjE1SyoxNUsqMTVIAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEc9AAAAAAAAAAAAAAAAAAAAAAAAAADHiEcfx4hHmceIR5nHiEeZAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEdcx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ egAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR3rHiEeZx4hHmceIRz0AAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRx/HiEeZx4hHmceIR5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8B8HwAAAB8AHwH4fB/
+ ////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8
+ B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAA
+ AHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B
+ 8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/
+ ////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8
+ B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAA
+ AHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B
+ 8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/
+ ////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8
+ B+Hwf///////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAAAAAA
+ AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAyoxNpcmKSrTHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zJikq0yotNpMmLTNjNk1fn0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/zZJX58mKTNfHiEf/3bKE//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf/92yhP/HiEf/x4hH
+ /92yhP/+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf
+ //7s1//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH
+ /8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//uzX
+ //7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2
+ //7ctv/zy6D/88ug//PLoP/82bL//ty2//7ctv/30qn/88ug//7ctv/+3Lb//ty2//XPpP/zy6D/88ug
+ //PLoP/zy6D/88ug//PLoP/zy6D/88ug//PLoP/zy6D/88ug//PLoP/+3Lb//ty2//7ctv/1z6T/88ug
+ //PLoP/zy6D/88ug//7ctv/+3Lb//ty2//XPpP/zy6D/88ug//rVrf/+3Lb//ty2//rVrf/zy6D//Nmy
+ //7ctv/+3Lb/99Kp//PLoP/+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf
+ //7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE
+ /8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2
+ //7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz
+ /8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH
+ //PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE
+ //7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf
+ /92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2
+ //7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH
+ /92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf
+ //7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug
+ //7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2
+ //7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf
+ //7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ /+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH
+ /8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX
+ //7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ //PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH
+ //7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug
+ //7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf
+ //7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE
+ /8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2
+ //7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz
+ /8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH
+ //PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE
+ //7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf
+ /92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2
+ //7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH
+ /92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf
+ //7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug
+ //7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///u7c//7oz//+6M///ujP
+ /+jGov/oxqL/6Mai//rhxv/+6M///ujP//HUtP/oxqL//ujP//7oz//+6M//7M2r/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai//7oz//+6M///ujP/+zNq//oxqL/6Mai
+ /+jGov/oxqL//ujP//7oz//+6M//7M2r/+jGov/oxqL/9du9//7oz//+6M//9du9/+jGov/64cb//ujP
+ //7oz//x1LT/6Mai//7oz//+6M///ujP//7u3P/+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//dsoT/x4hH
+ /8eIR//dsoT//vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N//3bKE/8eIR//IiUns1aNu8+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/9WjbvPIiUnryoxMz8mKSuLHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//JikriyoxNzsqMTCnJikotx4hH
+ M8eIRzPHiEczx4hHM8eIRzPHiEczx4hH/8eIR//HiEf/x4hHXMeIRzPHiEczx4hHrceIR//HiEczx4hH
+ M8eIRzPHiEfWx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ M8eIRzPHiEczx4hH1seIR//HiEf/x4hH/8eIR//HiEczx4hHM8eIRzPHiEfWx4hH/8eIR//HiEeFx4hH
+ M8eIRzPHiEeFx4hH/8eIR1zHiEczx4hHM8eIR63HiEf/x4hHM8eIRzPHiEczx4hHM8eIRzPHiEczyYpK
+ LcqMTSkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAA
+ AMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ /8eIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hH
+ mceIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR//HiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAADHiEdmx4hH
+ /8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ ZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEczAAAA
+ AAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ /8eIR//HiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAADHiEdmx4hH/8eIRzMAAAAAAAAA
+ AMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAx4hH
+ ZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEczAAAAAAAAAADHiEeZx4hH
+ /wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ MwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAADHiEdmx4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAA
+ AAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAA
+ AMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hHMwAAAAAAAAAAx4hH
+ mceIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAADHiEdmx4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEf/x4hH/8eIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hH
+ MwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAA
+ AAAAAADHiEdmx4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAA
+ AMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ zMeIR8zHiEcpAAAAAAAAAADHiEd6x4hHzAAAAAAAAAAAAAAAAMeIR6PHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8wAAAAAAAAAAAAAAADHiEejx4hHzMeIR8zHiEfMx4hH
+ zAAAAAAAAAAAAAAAAMeIR6PHiEfMx4hHzMeIR1IAAAAAAAAAAMeIR1LHiEfMx4hHKQAAAAAAAAAAx4hH
+ eseIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAD/DGAAYGGMf/8MYABgYYx//wxgAGBhjH//DGAAYGGMf/8MYABgYYx//wxg
+ AGBhjH//DGAAYGGMf/8MYABgYYx//wxgAGBhjH//DGAAYGGMf/8MYABgYYx//wxgAGBhjH//DGAAYGGM
+ f/8MYABgYYx//wxgAGBhjH//DGAAYGGMf/8MYABgYYx/////////////////////////////////KAAA
+ ADAAAABgAAAAAQAgAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMqMTXzIiUiTx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nIiUiTyotNe8mKSuLZqnn53bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/Zqnn5yYpK4ceIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/+i6iv/ouor/9c+k
+ //7ctv/61a3/6LqK//7ctv/+3Lb/8cib/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK
+ //7ctv/+3Lb/8cib/+i6iv/ouor/6LqK//7ctv/+3Lb/8cib/+i6iv/swZL//ty2//7ctv/swZL/9c+k
+ //7ctv/61a3/6LqK//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7q0v/+4L7//uC+/9KdZf/SnWX/7MWb//7gvv/106z/0p1l
+ //7gvv/+4L7/5LiJ/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l//7gvv/+4L7/5LiJ
+ /9KdZf/SnWX/0p1l//7gvv/+4L7/5LiJ/9KdZf/bqnf//uC+//7gvv/bqnf/7MWb//7gvv/106z/0p1l
+ //7gvv/+4L7//urS//7w3//z28H/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8mLS9nQmmH30p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/QmmH3yYtM
+ 2MqMTFPIiUhix4hHZseIR2bHiEdmx4hHZseIR//HiEf/x4hHo8eIR2bHiEeFx4hH/8eIR2bHiEdmx4hH
+ wseIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2bHiEdmx4hHwseIR//HiEf/x4hH
+ /8eIR2bHiEdmx4hHwseIR//HiEfgx4hHZseIR2bHiEfgx4hHo8eIR2bHiEeFx4hH/8eIR2bHiEdmx4hH
+ ZseIR2bIiUhiyoxNUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAA
+ AAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAA
+ AAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEeZx4hHPQAAAADHiEcfx4hHmQAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmQAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmQAAAAAAAAAAx4hHXMeIR5nHiEd6AAAA
+ AAAAAADHiEd6x4hHPQAAAADHiEcfx4hHmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAP///////wAA////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPxEAEEZHwAA/EQAQRkfAAD8RABBGR8A
+ APxEAEEZHwAA/EQAQRkfAAD8RABBGR8AAPxEAEEZHwAA/EQAQRkfAAD8RABBGR8AAPxEAEEZHwAA/EQA
+ QRkfAAD8RABBGR8AAPxEAEEZHwAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmLTFbHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bJikxWz5Zc7+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/8+WXO/SnWX//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//0p1l/9KdZf/+8N///uTG
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//uTG//7w3//SnWX/0p1l
+ //7w3//+5Mb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+5Mb//vDf
+ /9KdZf/SnWX//vDf//7kxv/+3Lb/3apz/+q+jv/+3Lb/5LSB//7ctv/xyJv/3apz/92qc//dqnP/3apz
+ /92qc//dqnP//ty2//HIm//dqnP/3apz//7ctv/xyJv/3apz//fSqf/30qn/6r6O//7ctv/ktIH//ty2
+ //7kxv/+8N//0p1l/9KdZf/+8N///uTG//7ctv/HiEf/3apz//7ctv/SmV3//ty2/+i6iv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb/6LqK/8eIR//HiEf//ty2/+i6iv/HiEf/88ug//PLoP/dqnP//ty2
+ /9KZXf/+3Lb//uTG//7w3//SnWX/0p1l//7w3//+5Mb//ty2/8eIR//dqnP//ty2/9KZXf/+3Lb/6LqK
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/ouor/x4hH/8eIR//+3Lb/6LqK/8eIR//zy6D/88ug
+ /92qc//+3Lb/0pld//7ctv/+5Mb//vDf/9KdZf/SnWX//vDf//7kxv/+3Lb/x4hH/92qc//+3Lb/0pld
+ //7ctv/ouor/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2/+i6iv/HiEf/x4hH//7ctv/ouor/x4hH
+ //PLoP/zy6D/3apz//7ctv/SmV3//ty2//7kxv/+8N//0p1l/9KdZf/+8N///uTG//7ctv/HiEf/3apz
+ //7ctv/SmV3//ty2/+i6iv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb/6LqK/8eIR//HiEf//ty2
+ /+i6iv/HiEf/88ug//PLoP/dqnP//ty2/9KZXf/+3Lb//uTG//7w3//SnWX/0p1l//7w3//+5Mb//ty2
+ /8eIR//dqnP//ty2/9KZXf/+3Lb/6LqK/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/ouor/x4hH
+ /8eIR//+3Lb/6LqK/8eIR//zy6D/88ug/92qc//+3Lb/0pld//7ctv/+5Mb//vDf/9KdZf/SnWX//vDf
+ //7kxv/+3Lb/x4hH/92qc//+3Lb/0pld//7ctv/ouor/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ /+i6iv/HiEf/x4hH//7ctv/ouor/x4hH//PLoP/zy6D/3apz//7ctv/SmV3//ty2//7kxv/+8N//0p1l
+ /9KdZf/+8N///uTG//7ctv/HiEf/3apz//7ctv/SmV3//ty2/+i6iv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb/6LqK/8eIR//HiEf//ty2/+i6iv/HiEf/88ug//PLoP/dqnP//ty2/9KZXf/+3Lb//uTG
+ //7w3//SnWX/0p1l//7w3//+5Mb//ty2/8eIR//dqnP//ty2/9KZXf/+3Lb/6LqK/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/ouor/x4hH/8eIR//+3Lb/6LqK/8eIR//zy6D/88ug/92qc//+3Lb/0pld
+ //7ctv/+5Mb//vDf/9KdZf/SnWX//vDf//7kxv/+3Lb/x4hH/92qc//+3Lb/0pld//7ctv/ouor/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2/+i6iv/HiEf/x4hH//7ctv/ouor/x4hH//PLoP/zy6D/3apz
+ //7ctv/SmV3//ty2//7kxv/+8N//0p1l/9KdZf/+8N///uTG//7ctv/HiEf/3apz//7ctv/SmV3//ty2
+ /+i6iv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb/6LqK/8eIR//HiEf//ty2/+i6iv/HiEf/88ug
+ //PLoP/dqnP//ty2/9KZXf/+3Lb//uTG//7w3//SnWX/0p1l//7w3//+5Mb//ty2/8eIR//dqnP//ty2
+ /9KZXf/+3Lb/6LqK/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/ouor/x4hH/8eIR//+3Lb/6LqK
+ /8eIR//zy6D/88ug/92qc//+3Lb/0pld//7ctv/+5Mb//vDf/9KdZf/SnWX//vDf//7kxv/+3Lb/x4hH
+ /92qc//+3Lb/0pld//7ctv/ouor/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2/+i6iv/HiEf/x4hH
+ //7ctv/ouor/x4hH//PLoP/zy6D/3apz//7ctv/SmV3//ty2//7kxv/+8N//0p1l/9KdZf/+8N///u7a
+ //7s1//z28H/9+LJ//7s1//138X//uzX//rlzv/z28H/89vB//Pbwf/z28H/89vB//Pbwf/+7Nf/+uXO
+ //Pbwf/z28H//uzX//rlzv/z28H//OnS//zp0v/34sn//uzX//Xfxf/+7Nf//u7a//7w3//SnWX/0Jph
+ 9/Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB
+ //Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB
+ /9CaYffJi0uCx4hHmceIR5nHiEeZx4hH/8eIR9bHiEeZx4hH68eIR5nHiEfCx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHmceIR8LHiEf/x4hH/8eIR5nHiEfCx4hH/8eIR63HiEetx4hH1seIR5nHiEfrx4hH
+ mceIR5nHiEeZyYtMgQAAAAAAAAAAAAAAAAAAAADHiEf/x4hHmQAAAADHiEfMAAAAAMeIR2bHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAx4hHZseIR//HiEf/AAAAAMeIR2bHiEf/x4hHM8eIRzPHiEeZAAAA
+ AMeIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEeZAAAAAMeIR8wAAAAAx4hH
+ ZseIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAADHiEdmx4hH/8eIR/8AAAAAx4hHZseIR//HiEczx4hH
+ M8eIR5kAAAAAx4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR5kAAAAAx4hH
+ zAAAAADHiEdmx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAMeIR2bHiEf/x4hH/wAAAADHiEdmx4hH
+ /8eIRzPHiEczx4hHmQAAAADHiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ mQAAAADHiEfMAAAAAMeIR2bHiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAx4hHZseIR//HiEf/AAAA
+ AMeIR2bHiEf/x4hHM8eIRzPHiEeZAAAAAMeIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEeZAAAAAMeIR8wAAAAAx4hHZseIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAADHiEdmx4hH
+ /8eIR/8AAAAAx4hHZseIR//HiEczx4hHM8eIR5kAAAAAx4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR5kAAAAAx4hHzAAAAADHiEdmx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AMeIR2bHiEf/x4hH/wAAAADHiEdmx4hH/8eIRzPHiEczx4hHmQAAAADHiEfMAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hHmQAAAADHiEfMAAAAAMeIR2bHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAx4hHZseIR//HiEf/AAAAAMeIR2bHiEf/x4hHM8eIRzPHiEeZAAAAAMeIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEeZAAAAAMeIR8wAAAAAx4hHZseIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAADHiEdmx4hH/8eIR/8AAAAAx4hHZseIR//HiEczx4hHM8eIR5kAAAAAx4hH
+ zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHZseIRz0AAAAAx4hHUgAAAADHiEcpx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmAAAAAMeIRynHiEdmx4hHZgAAAADHiEcpx4hHZseIRxTHiEcUx4hH
+ PQAAAADHiEdSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ APIAACfyAAAn8gAAJ/IAACfyAAAn8gAAJ/IAACfyAAAn8gAAJ/////8oAAAAEAAAACAAAAABACAAAAAA
+ AAAEAAAAAAAAAAAAAAAAAAAAAAAAyIlJL8eIRzPHiEczx4hHM8eIRzPHiEczx4hHM8eIRzPHiEczx4hH
+ M8eIRzPHiEczx4hHM8eIRzPHiEczyIlJL+K7kfvz28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB
+ //Pbwf/z28H/89vB//Pbwf/z28H/89vB/+K7kvvoxqL//uC+//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7gvv/oxqL/6Mai//7gvv/bpm//7MGS//XPpP/SmV3/0pld
+ /9KZXf/1z6T/0pld//XPpP/ktIH/7MGS/+zBkv/+4L7/6Mai/+jGov/+4L7/0pld/+i6iv/zy6D/x4hH
+ /8eIR//HiEf/88ug/8eIR//zy6D/3apz/+i6iv/ouor//uC+/+jGov/oxqL//uC+/9KZXf/ouor/88ug
+ /8eIR//HiEf/x4hH//PLoP/HiEf/88ug/92qc//ouor/6LqK//7gvv/oxqL/6Mai//7gvv/SmV3/6LqK
+ //PLoP/HiEf/x4hH/8eIR//zy6D/x4hH//PLoP/dqnP/6LqK/+i6iv/+4L7/6Mai/+jGov/+4L7/0pld
+ /+i6iv/zy6D/x4hH/8eIR//HiEf/88ug/8eIR//zy6D/3apz/+i6iv/ouor//uC+/+jGov/oxqL//uC+
+ /9KZXf/ouor/88ug/8eIR//HiEf/x4hH//PLoP/HiEf/88ug/92qc//ouor/6LqK//7gvv/oxqL/6Mai
+ //7my//kvJH/8dCs//fauf/dsoT/3bKE/92yhP/32rn/3bKE//fauf/qxp7/8dCs//HQrP/+5sv/6Mai
+ /9mpd8TjvJPM3rOG9eC3jODhuo/W3bKE/92yhP/dsoT/4bqP1t2yhP/huo/W37WJ6+C3jODgt4zg47yT
+ zNmpd8QAAAAAAAAAAMeIR8zHiEdmx4hHM8eIR//HiEf/x4hH/8eIRzPHiEf/x4hHM8eIR5nHiEdmx4hH
+ ZgAAAAAAAAAAAAAAAAAAAADHiEfMx4hHZseIRzPHiEf/x4hH/8eIR//HiEczx4hH/8eIRzPHiEeZx4hH
+ ZseIR2YAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR2bHiEczx4hH/8eIR//HiEf/x4hHM8eIR//HiEczx4hH
+ mceIR2bHiEdmAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEdmx4hHM8eIR//HiEf/x4hH/8eIRzPHiEf/x4hH
+ M8eIR5nHiEdmx4hHZgAAAAAAAAAAAAAAAAAAAADHiEcpx4hHFMeIRwrHiEczx4hHM8eIRzPHiEcKx4hH
+ M8eIRwrHiEcfx4hHFMeIRxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAwAEAAMABAADAAQAAwAEAAMABAAA=
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fviewer.Designer.cs b/QRValidation/Project/Dialog/fviewer.Designer.cs
new file mode 100644
index 0000000..2d4b5d1
--- /dev/null
+++ b/QRValidation/Project/Dialog/fviewer.Designer.cs
@@ -0,0 +1,97 @@
+namespace Project
+{
+ partial class fviewer
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fviewer));
+ this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.sbConnState = new System.Windows.Forms.ToolStripStatusLabel();
+ this.piv = new System.Windows.Forms.Panel();
+ this.timer1 = new System.Windows.Forms.Timer(this.components);
+ this.statusStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // statusStrip1
+ //
+ this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sbConnState});
+ this.statusStrip1.Location = new System.Drawing.Point(0, 625);
+ this.statusStrip1.Name = "statusStrip1";
+ this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 12, 0);
+ this.statusStrip1.Size = new System.Drawing.Size(854, 24);
+ this.statusStrip1.TabIndex = 4;
+ this.statusStrip1.Text = "statusStrip1";
+ //
+ // sbConnState
+ //
+ this.sbConnState.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbConnState.Name = "sbConnState";
+ this.sbConnState.Size = new System.Drawing.Size(23, 19);
+ this.sbConnState.Text = "●";
+ //
+ // piv
+ //
+ this.piv.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.piv.Location = new System.Drawing.Point(0, 0);
+ this.piv.Name = "piv";
+ this.piv.Size = new System.Drawing.Size(854, 625);
+ this.piv.TabIndex = 6;
+ this.piv.MouseClick += new System.Windows.Forms.MouseEventHandler(this.piv_MouseClick);
+ //
+ // timer1
+ //
+ this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
+ //
+ // fviewer
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(854, 649);
+ this.Controls.Add(this.piv);
+ this.Controls.Add(this.statusStrip1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.KeyPreview = true;
+ this.Name = "fviewer";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Image viewer";
+ this.Load += new System.EventHandler(this.fTeach_Load);
+ this.statusStrip1.ResumeLayout(false);
+ this.statusStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.Panel piv;
+ private System.Windows.Forms.Timer timer1;
+ private System.Windows.Forms.ToolStripStatusLabel sbConnState;
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/Dialog/fviewer.cs b/QRValidation/Project/Dialog/fviewer.cs
new file mode 100644
index 0000000..78dd53f
--- /dev/null
+++ b/QRValidation/Project/Dialog/fviewer.cs
@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using AR;
+
+
+#if V22
+using Euresys.Open_eVision_22_12;
+#else
+using Euresys.Open_eVision_2_11;
+#endif
+
+namespace Project
+{
+ public partial class fviewer : Form
+ {
+
+ int Camidx = 0;
+ EImageBW8 img = null;
+ private arCtl.ImageBoxEvision iv1;
+ public fviewer(int camidx)
+ {
+ InitializeComponent();
+
+
+ PUB.imgque.Push(this.Name);
+ this.Camidx = camidx;
+
+ //this.iv1 = new arCtl.ImageBoxEvision();
+ //this.iv1.BackColor = Color.Black;
+ //this.iv1.Dock = DockStyle.Fill;
+ //this.piv.Controls.Add(iv1);
+ //iv1.Dock = DockStyle.Fill;
+ //if (img_ != null)
+ //{
+ // img = new EImageBW8();
+ // img.SetSize(img_);
+ // img_.CopyTo(this.img);
+ // EasyImage.Copy(img_, img);
+
+ // this.iv1.Image = img;
+ // this.iv1.Invalidate();
+ // this.iv1.ZoomFit();
+ //}
+ this.KeyDown += (s1, e1) => {
+ if (e1.KeyCode == Keys.Escape) this.Close();
+ };
+ this.FormClosed += FTeach_FormClosed;
+ this.WindowState = FormWindowState.Maximized;
+ }
+
+ private void FTeach_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ this.timer1.Stop();
+ PUB.imgque.Pop();
+ if (this.img != null) img.Dispose();
+ runtest = false;
+ }
+
+ private void fTeach_Load(object sender, EventArgs e)
+ {
+
+ this.timer1.Start();
+ }
+ private void toolStripButton1_Click(object sender, EventArgs e)
+ {
+ //open file
+ OpenFileDialog od = new OpenFileDialog();
+ if (od.ShowDialog() == DialogResult.OK)
+ {
+ if (this.img != null) this.img.Dispose();
+ img = new EImageBW8();
+ img.Load(od.FileName);
+
+ this.iv1.Image = img;
+ this.iv1.Invalidate();
+ this.iv1.ZoomFit();
+ }
+ }
+
+
+ Boolean runtest = false;
+ int runcount = 0;
+
+
+ private void toolStripButton4_Click(object sender, EventArgs e)
+ {
+ if (this.iv1.Image == null)
+ {
+ UTIL.MsgE("No image");
+ return;
+ }
+ var sd = new SaveFileDialog();
+ sd.FileName = "saveimage.bmp";
+ if (sd.ShowDialog() == DialogResult.OK)
+ this.iv1.Image.Save(sd.FileName);
+ }
+
+
+
+ private void toolStripButton13_Click(object sender, EventArgs e)
+ {
+ this.iv1.DebugMode = !this.iv1.DebugMode;
+ this.iv1.Invalidate();
+ }
+
+ private void timer1_Tick(object sender, EventArgs e)
+ {
+ if (this.IsDisposed == true || this.Disposing == true) return;
+ if (PUB.imgque.Peek().Equals(this.Name) == false) return;
+
+ //카메라가 연결되지 않았따면 처리하지 않는다.
+ if (PUB._isCrevisOpen[Camidx] == false || PUB.flag.get(eFlag.CAMERAINIT) == false)
+ {
+
+ }
+ else
+ {
+ //이미지수집후 데이터 처리
+ if (PUB.CrevisGrab(this.Camidx, true,this.piv))
+ {
+ //if (IsProcess[Camidx] || IsTrigger[Camidx])
+ PUB.CreavisProcess(Camidx, true, this.piv);// IsTrigger[Camidx]);
+ }
+
+ }
+
+ //heart beat
+ //this.BeginInvoke(new Action(() =>
+ //{
+ if (sbConnState.ForeColor == Color.Green)
+ sbConnState.ForeColor = Color.LimeGreen;
+ else
+ sbConnState.ForeColor = Color.Green;
+ //}));
+
+ }
+
+ private void piv_MouseClick(object sender, MouseEventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
diff --git a/QRValidation/Project/Dialog/fviewer.resx b/QRValidation/Project/Dialog/fviewer.resx
new file mode 100644
index 0000000..0c087c5
--- /dev/null
+++ b/QRValidation/Project/Dialog/fviewer.resx
@@ -0,0 +1,1818 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 123, 17
+
+
+ 240, 17
+
+
+
+
+ AAABAAYAAAAAAAEAIADXBQAAZgAAAICAAAABACAAKAgBAD0GAABAQAAAAQAgAChCAABlDgEAMDAAAAEA
+ IACoJQAAjVABACAgAAABACAAqBAAADV2AQAQEAAAAQAgAGgEAADdhgEAiVBORw0KGgoAAAANSUhEUgAA
+ AQAAAAEACAYAAABccqhmAAAFnklEQVR42u3cv45UZRzH4d8ZRnZd/olsVkOCiIYEiBVgQYGFDQ02tvR6
+ C8QroOAGtNd7oLGQggQFGwVMDARUjOskgisrrruzFlrJWZPDDnPA7/OU+5v3vO+ZPfmEgTBVAAAAAAAA
+ AAAAAADAs6Tp+wCnzl061nHJ8oWzJ6533GO+qva3zS6cPXGl47XmqurwVN+kJ6jv+5/S/qMLZ0/c7rjP
+ /qqabxn1+vxN2rDPzf/xRcfXX6mq4x3XvFtVH24w6xrBw49x5qdZ3/c/jf0/qqr3O675oKrea/l538/f
+ RA363BzolwBAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw
+ AYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJ
+ AAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwA
+ IJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCNafPX/6kbbC2Nn5pvL6+awpnONbx
+ 9ctVdb3jmvmq2r/B7ErHa81V1eEpvC/T0vf9T2P/UVXd7rhmf/393Pxb389fZ4OmuTfcMvipbdacPn/5
+ y7bB2tp433h9fc+TPhzwZA2aZjTcMviuddb34YD+CAAEEwAIJgAQbDget/9F38G9O2YWds32fT5gkxbv
+ P5z99sff2v5Fo4Zr4/G+tsHx1/fUySMLfZ8d2KSL1xa3f/PDr9vbZj4CQDABgGACAMEEAIIJAAQTAAgm
+ ABBMACCYAEAwAYBgAgDBhpO82Gi56s9xtzWfXr3V6fU75mbqzUN7O625O1qqG3dGrbO3jx7odK2l5T/q
+ 8xt3N/9mPSX6vv9p7L93fkcdemW+05obd0Z1d7T0yM/7fv6eG1TNz3Va8p8mGoCllaqHq93WXLy22On1
+ C7u31cFXu/0Cbi7+vuE+R490+wUs3l/tfOanWd/3P43933it6uWFbgH4+vul+urmo/v0/fzNDicbAB8B
+ IJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIA
+ wQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAI
+ JgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw
+ AYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJ
+ AAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwA
+ IJgAQDABgGACAMGGfR9gYfe2Tq9/ccfznfeYnRl23mcjw+FgYtd6FvV9/4+z/865mc777Jybad2n7+dv
+ 0ppT5y6ttw3OvHWgTh5Z6HSxW/eqHq72fUvw/zU7rDrwQrc1F68t1sef3Wqd+QgAwQQAggkABBMACCYA
+ EEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCTfQ7Abt+VRHQL38CgGACAMEE
+ AIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCDZumWW4b/PJgZeudnx9M9P8KANN378HKatM0K22z5p3z
+ l6+2DVbXxvvG6+vzfR8e2JxB04yGg8Gd1lnfhwP6IwAQTAAgmABAMAGAYMOqOrPBbGtN+CvDgF6sVtXK
+ pq8CAAAAAAAAAAAAAAD07i/pV9fEC9LZ4gAAAABJRU5ErkJggigAAACAAAAAAAEAAAEAIAAAAAAAAAAB
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKjE18yoxNfMqMTXzIiUiTx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZyIlIk8qLTXvKi017yotN
+ e8qMTc7KjE3OyoxNzsiJSPXHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//IiUj1yotNzcqLTc3Ki03NyoxNzsqMTc7KjE3OyIlI9ceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8iJSPXKi03NyotN
+ zcqLTc3JikriyYpK4smKSuLZqnn53bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/2ap5+cmKSuHJikrhyYpK4ceIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/ouor/6LqK/+i6iv/ouor/6LqK
+ /+i6iv/1z6T//ty2//7ctv/+3Lb//ty2//7ctv/61a3/6LqK/+i6iv/ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/8cib/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK
+ /+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/xyJv/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/8cib/+i6iv/ouor/6LqK/+i6iv/ouor/7MGS//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/+zBkv/ouor/6LqK//XPpP/+3Lb//ty2//7ctv/+3Lb//ty2//rVrf/ouor/6LqK
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf
+ //7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf
+ //7w3//+8N///vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//SmV3//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7oz//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf
+ //7w3//+8N///vDf//7w3//+6M///ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7oz//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//ouor//ty2//7ctv/+3Lb//ty2
+ //7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/0pld//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+6M///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB
+ //7w3//+8N///vDf//7w3//+8N///ujP//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/+i6iv/+3Lb//ty2//7ctv/+3Lb//ty2//PLoP/HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/dqnP/x4hH/8eIR//HiEf/x4hH/8eIR//SmV3//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2//7ctv/+3Lb/88ug
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7oz//+8N///vDf//7w3//+8N///vDf
+ //Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+6M///ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/6LqK//7ctv/+3Lb//ty2
+ //7ctv/+3Lb/88ug/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2/92qc//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ /92qc//HiEf/x4hH/8eIR//HiEf/x4hH/9KZXf/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/+3Lb//ty2//7ctv/zy6D/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //Pbwf/+8N///vDf//7w3//+8N///vDf//7q0v/+4L7//uC+//7gvv/+4L7//uC+//7gvv/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/sxZv//uC+//7gvv/+4L7//uC+//7gvv/106z/0p1l/9KdZf/SnWX//uC+
+ //7gvv/+4L7//uC+//7gvv/+4L7/5LiJ/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/+4L7//uC+//7gvv/+4L7//uC+//7gvv/kuIn/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX//uC+//7gvv/+4L7//uC+//7gvv/+4L7/5LiJ/9KdZf/SnWX/0p1l/9KdZf/SnWX/26p3
+ //7gvv/+4L7//uC+//7gvv/+4L7//uC+/9uqd//SnWX/0p1l/+zFm//+4L7//uC+//7gvv/+4L7//uC+
+ //XTrP/SnWX/0p1l/9KdZf/+4L7//uC+//7gvv/+4L7//uC+//7gvv/+6tL//vDf//7w3//+8N///vDf
+ //7w3//z28H/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N//89vB/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/89vB//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//Pbwf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//89vB/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//Pbwf/+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//HiEf/yYtL2cmLS9nJi0vZ0Jph99KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9CaYffJi0zYyYtM
+ 2MmLTNjKjEzPyoxMz8qMTM/IiUj1x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/yIlI9cqMTc7KjE3OyoxNzsqMTM/KjEzPyoxMz8iJSPXHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//IiUj1yoxN
+ zsqMTc7KjE3OyoxMU8qMTFPKjExTyIlIYseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR6PHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR4XHiEf/x4hH/8eIR//HiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEfCx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR8LHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEfCx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEfgx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH4MeIR//HiEf/x4hH
+ o8eIR2bHiEdmx4hHZseIR2bHiEdmx4hHhceIR//HiEf/x4hH/8eIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZsiJSGLKjE1SyoxNUsqMTVIAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ ZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEdmAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR2YAAAAAAAAAAAAAAAAAAAAAAAAAAMeIRzPHiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH/8eIR//HiEf/x4hH/8eIR//HiEfMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ M8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hHZgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hHM8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR5nHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEf/x4hH/8eIR//HiEf/x4hH/8eIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAAAAAAAAAAAAAAAAAADHiEczx4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEc9AAAAAAAAAAAAAAAAAAAAAAAAAADHiEcfx4hHmceIR5nHiEeZAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEdcx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ egAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR3rHiEeZx4hHmceIRz0AAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIRx/HiEeZx4hHmceIR5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8B8HwAAAB8AHwH4fB/
+ ////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8
+ B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAA
+ AHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B
+ 8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/
+ ////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8
+ B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAA
+ AHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B
+ 8HwAAAB8AHwH4fB/////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/
+ ////AfB8AAAAfAB8B+Hwf////wHwfAAAAHwAfAfh8H////8B8HwAAAB8AHwH4fB/////AfB8AAAAfAB8
+ B+Hwf///////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////8oAAAAQAAAAIAAAAABACAAAAAA
+ AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAyoxNpcmKSrTHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zJikq0yotNpMmLTNjNk1fn0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/zZJX58mKTNfHiEf/3bKE//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf/92yhP/HiEf/x4hH
+ /92yhP/+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf
+ //7s1//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH
+ /8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//uzX
+ //7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2
+ //7ctv/zy6D/88ug//PLoP/82bL//ty2//7ctv/30qn/88ug//7ctv/+3Lb//ty2//XPpP/zy6D/88ug
+ //PLoP/zy6D/88ug//PLoP/zy6D/88ug//PLoP/zy6D/88ug//PLoP/+3Lb//ty2//7ctv/1z6T/88ug
+ //PLoP/zy6D/88ug//7ctv/+3Lb//ty2//XPpP/zy6D/88ug//rVrf/+3Lb//ty2//rVrf/zy6D//Nmy
+ //7ctv/+3Lb/99Kp//PLoP/+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf
+ //7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE
+ /8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2
+ //7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz
+ /8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH
+ //PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE
+ //7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf
+ /92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2
+ //7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH
+ /92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf
+ //7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug
+ //7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2
+ /8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2
+ //7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf
+ //7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2
+ /+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH
+ /8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX
+ //7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH
+ //PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH
+ //7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2
+ //7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug
+ //7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf
+ //7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2
+ //7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE
+ /8eIR//HiEf/3bKE//7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2
+ //7s1//+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz
+ /8eIR//+3Lb//ty2//7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2
+ //7ctv/+3Lb/x4hH/8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH
+ //PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE
+ //7w3//+8N///uzX//7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK
+ //7ctv/+3Lb/6LqK/8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf
+ /92yhP/HiEf/x4hH/92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2
+ //7ctv/dqnP/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2
+ //7ctv/+7Nf//vDf//7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH
+ /8eIR//HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2
+ /92qc//HiEf//ty2//7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///uzX
+ //7ctv/+3Lb//ty2/8eIR//HiEf/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2//7ctv/+3Lb/0pld
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2
+ /9KZXf/HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/6LqK//7ctv/+3Lb/6LqK
+ /8eIR//zy6D//ty2//7ctv/dqnP/x4hH//7ctv/+3Lb//ty2//7s1//+8N///vDf/92yhP/HiEf/x4hH
+ /92yhP/+8N///vDf//7s1//+3Lb//ty2//7ctv/HiEf/x4hH/8eIR//zy6D//ty2//7ctv/dqnP/x4hH
+ //7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb//ty2/9KZXf/HiEf/x4hH
+ /+i6iv/+3Lb//ty2/+i6iv/HiEf/88ug//7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/+7Nf//vDf
+ //7w3//dsoT/x4hH/8eIR//dsoT//vDf//7w3//+7Nf//ty2//7ctv/+3Lb/x4hH/8eIR//HiEf/88ug
+ //7ctv/+3Lb/3apz/8eIR//+3Lb//ty2//7ctv/SmV3/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2//7ctv/+3Lb/0pld/8eIR//HiEf/x4hH/8eIR//+3Lb//ty2
+ //7ctv/SmV3/x4hH/8eIR//ouor//ty2//7ctv/ouor/x4hH//PLoP/+3Lb//ty2/92qc//HiEf//ty2
+ //7ctv/+3Lb//uzX//7w3//+8N//3bKE/8eIR//HiEf/3bKE//7w3//+8N///u7c//7oz//+6M///ujP
+ /+jGov/oxqL/6Mai//rhxv/+6M///ujP//HUtP/oxqL//ujP//7oz//+6M//7M2r/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai//7oz//+6M///ujP/+zNq//oxqL/6Mai
+ /+jGov/oxqL//ujP//7oz//+6M//7M2r/+jGov/oxqL/9du9//7oz//+6M//9du9/+jGov/64cb//ujP
+ //7oz//x1LT/6Mai//7oz//+6M///ujP//7u3P/+8N///vDf/92yhP/HiEf/x4hH/92yhP/+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//dsoT/x4hH
+ /8eIR//dsoT//vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N//3bKE/8eIR//IiUns1aNu8+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/9WjbvPIiUnryoxMz8mKSuLHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//JikriyoxNzsqMTCnJikotx4hH
+ M8eIRzPHiEczx4hHM8eIRzPHiEczx4hH/8eIR//HiEf/x4hHXMeIRzPHiEczx4hHrceIR//HiEczx4hH
+ M8eIRzPHiEfWx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ M8eIRzPHiEczx4hH1seIR//HiEf/x4hH/8eIR//HiEczx4hHM8eIRzPHiEfWx4hH/8eIR//HiEeFx4hH
+ M8eIRzPHiEeFx4hH/8eIR1zHiEczx4hHM8eIR63HiEf/x4hHM8eIRzPHiEczx4hHM8eIRzPHiEczyYpK
+ LcqMTSkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAA
+ AMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ /8eIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hH
+ mceIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR//HiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAADHiEdmx4hH
+ /8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ ZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEczAAAA
+ AAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH
+ /8eIR//HiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAADHiEdmx4hH/8eIRzMAAAAAAAAA
+ AMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAx4hH
+ ZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEczAAAAAAAAAADHiEeZx4hH
+ /wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hH
+ MwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEdmAAAAAAAAAADHiEdmx4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAA
+ AAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH/8eIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAA
+ AMeIR8zHiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAA
+ AMeIR2bHiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hHMwAAAAAAAAAAx4hH
+ mceIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEdmAAAAAAAAAADHiEdmx4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ /8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADHiEf/x4hH/8eIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR2YAAAAAAAAAAMeIR2bHiEf/x4hH
+ MwAAAAAAAAAAx4hHmceIR/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR//HiEf/x4hHMwAAAAAAAAAAx4hHmceIR/8AAAAAAAAA
+ AAAAAADHiEfMx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR/8AAAAAAAAAAAAAAADHiEfMx4hH/8eIR//HiEdmAAAA
+ AAAAAADHiEdmx4hH/8eIRzMAAAAAAAAAAMeIR5nHiEf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH/8eIRzMAAAAAAAAA
+ AMeIR5nHiEf/AAAAAAAAAAAAAAAAx4hHzMeIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAAAAAAMeIR8zHiEf/x4hH/8eIR//HiEf/AAAAAAAAAAAAAAAAx4hH
+ zMeIR//HiEf/x4hHZgAAAAAAAAAAx4hHZseIR//HiEczAAAAAAAAAADHiEeZx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEfMx4hH
+ zMeIR8zHiEcpAAAAAAAAAADHiEd6x4hHzAAAAAAAAAAAAAAAAMeIR6PHiEfMx4hHzMeIR8zHiEfMx4hH
+ zMeIR8zHiEfMx4hHzMeIR8zHiEfMx4hHzMeIR8wAAAAAAAAAAAAAAADHiEejx4hHzMeIR8zHiEfMx4hH
+ zAAAAAAAAAAAAAAAAMeIR6PHiEfMx4hHzMeIR1IAAAAAAAAAAMeIR1LHiEfMx4hHKQAAAAAAAAAAx4hH
+ eseIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////////////////////wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAD/DGAAYGGMf/8MYABgYYx//wxgAGBhjH//DGAAYGGMf/8MYABgYYx//wxg
+ AGBhjH//DGAAYGGMf/8MYABgYYx//wxgAGBhjH//DGAAYGGMf/8MYABgYYx//wxgAGBhjH//DGAAYGGM
+ f/8MYABgYYx//wxgAGBhjH//DGAAYGGMf/8MYABgYYx/////////////////////////////////KAAA
+ ADAAAABgAAAAAQAgAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMqMTXzIiUiTx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nIiUiTyotNe8mKSuLZqnn53bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE/92yhP/dsoT/3bKE
+ /92yhP/dsoT/3bKE/92yhP/Zqnn5yYpK4ceIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/+i6iv/ouor/9c+k
+ //7ctv/61a3/6LqK//7ctv/+3Lb/8cib/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK/+i6iv/ouor/6LqK
+ //7ctv/+3Lb/8cib/+i6iv/ouor/6LqK//7ctv/+3Lb/8cib/+i6iv/swZL//ty2//7ctv/swZL/9c+k
+ //7ctv/61a3/6LqK//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH
+ //7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK
+ //7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf//7oz//+3Lb//ty2
+ /8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//SmV3//ty2
+ //7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH/8eIR//z28H//vDf
+ //7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz
+ /8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP//7w3//z28H/x4hH
+ /8eIR//z28H//vDf//7oz//+3Lb//ty2/8eIR//HiEf/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb/3apz
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/+3Lb/3apz/8eIR//HiEf/x4hH
+ //7ctv/+3Lb/3apz/8eIR//SmV3//ty2//7ctv/SmV3/6LqK//7ctv/zy6D/x4hH//7ctv/+3Lb//ujP
+ //7w3//z28H/x4hH/8eIR//z28H//vDf//7q0v/+4L7//uC+/9KdZf/SnWX/7MWb//7gvv/106z/0p1l
+ //7gvv/+4L7/5LiJ/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l//7gvv/+4L7/5LiJ
+ /9KdZf/SnWX/0p1l//7gvv/+4L7/5LiJ/9KdZf/bqnf//uC+//7gvv/bqnf/7MWb//7gvv/106z/0p1l
+ //7gvv/+4L7//urS//7w3//z28H/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8eIR//z28H//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//z28H/x4hH/8mLS9nQmmH30p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l
+ /9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/SnWX/0p1l/9KdZf/QmmH3yYtM
+ 2MqMTFPIiUhix4hHZseIR2bHiEdmx4hHZseIR//HiEf/x4hHo8eIR2bHiEeFx4hH/8eIR2bHiEdmx4hH
+ wseIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR2bHiEdmx4hHwseIR//HiEf/x4hH
+ /8eIR2bHiEdmx4hHwseIR//HiEfgx4hHZseIR2bHiEfgx4hHo8eIR2bHiEeFx4hH/8eIR2bHiEdmx4hH
+ ZseIR2bIiUhiyoxNUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAA
+ AAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAA
+ AAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAAAAAAAAx4hH
+ mceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hHZgAAAADHiEczx4hH
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEf/x4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH
+ /wAAAAAAAAAAx4hHmceIR//HiEf/x4hH/wAAAAAAAAAAx4hHmceIR//HiEfMAAAAAAAAAADHiEfMx4hH
+ ZgAAAADHiEczx4hH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR5nHiEeZx4hHPQAAAADHiEcfx4hHmQAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmceIR5nHiEeZx4hH
+ mceIR5nHiEeZx4hHmQAAAAAAAAAAx4hHXMeIR5nHiEeZx4hHmQAAAAAAAAAAx4hHXMeIR5nHiEd6AAAA
+ AAAAAADHiEd6x4hHPQAAAADHiEcfx4hHmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAP///////wAA////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPxEAEEZHwAA/EQAQRkfAAD8RABBGR8A
+ APxEAEEZHwAA/EQAQRkfAAD8RABBGR8AAPxEAEEZHwAA/EQAQRkfAAD8RABBGR8AAPxEAEEZHwAA/EQA
+ QRkfAAD8RABBGR8AAPxEAEEZHwAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmLTFbHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bHiEdmx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmx4hHZseIR2bJikxWz5Zc7+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai
+ /+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/+jGov/oxqL/6Mai/8+WXO/SnWX//vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf
+ //7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N///vDf//7w3//+8N//0p1l/9KdZf/+8N///uTG
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//uTG//7w3//SnWX/0p1l
+ //7w3//+5Mb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7ctv/+5Mb//vDf
+ /9KdZf/SnWX//vDf//7kxv/+3Lb/3apz/+q+jv/+3Lb/5LSB//7ctv/xyJv/3apz/92qc//dqnP/3apz
+ /92qc//dqnP//ty2//HIm//dqnP/3apz//7ctv/xyJv/3apz//fSqf/30qn/6r6O//7ctv/ktIH//ty2
+ //7kxv/+8N//0p1l/9KdZf/+8N///uTG//7ctv/HiEf/3apz//7ctv/SmV3//ty2/+i6iv/HiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR//+3Lb/6LqK/8eIR//HiEf//ty2/+i6iv/HiEf/88ug//PLoP/dqnP//ty2
+ /9KZXf/+3Lb//uTG//7w3//SnWX/0p1l//7w3//+5Mb//ty2/8eIR//dqnP//ty2/9KZXf/+3Lb/6LqK
+ /8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/ouor/x4hH/8eIR//+3Lb/6LqK/8eIR//zy6D/88ug
+ /92qc//+3Lb/0pld//7ctv/+5Mb//vDf/9KdZf/SnWX//vDf//7kxv/+3Lb/x4hH/92qc//+3Lb/0pld
+ //7ctv/ouor/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2/+i6iv/HiEf/x4hH//7ctv/ouor/x4hH
+ //PLoP/zy6D/3apz//7ctv/SmV3//ty2//7kxv/+8N//0p1l/9KdZf/+8N///uTG//7ctv/HiEf/3apz
+ //7ctv/SmV3//ty2/+i6iv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb/6LqK/8eIR//HiEf//ty2
+ /+i6iv/HiEf/88ug//PLoP/dqnP//ty2/9KZXf/+3Lb//uTG//7w3//SnWX/0p1l//7w3//+5Mb//ty2
+ /8eIR//dqnP//ty2/9KZXf/+3Lb/6LqK/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/ouor/x4hH
+ /8eIR//+3Lb/6LqK/8eIR//zy6D/88ug/92qc//+3Lb/0pld//7ctv/+5Mb//vDf/9KdZf/SnWX//vDf
+ //7kxv/+3Lb/x4hH/92qc//+3Lb/0pld//7ctv/ouor/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2
+ /+i6iv/HiEf/x4hH//7ctv/ouor/x4hH//PLoP/zy6D/3apz//7ctv/SmV3//ty2//7kxv/+8N//0p1l
+ /9KdZf/+8N///uTG//7ctv/HiEf/3apz//7ctv/SmV3//ty2/+i6iv/HiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR//+3Lb/6LqK/8eIR//HiEf//ty2/+i6iv/HiEf/88ug//PLoP/dqnP//ty2/9KZXf/+3Lb//uTG
+ //7w3//SnWX/0p1l//7w3//+5Mb//ty2/8eIR//dqnP//ty2/9KZXf/+3Lb/6LqK/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH//7ctv/ouor/x4hH/8eIR//+3Lb/6LqK/8eIR//zy6D/88ug/92qc//+3Lb/0pld
+ //7ctv/+5Mb//vDf/9KdZf/SnWX//vDf//7kxv/+3Lb/x4hH/92qc//+3Lb/0pld//7ctv/ouor/x4hH
+ /8eIR//HiEf/x4hH/8eIR//HiEf//ty2/+i6iv/HiEf/x4hH//7ctv/ouor/x4hH//PLoP/zy6D/3apz
+ //7ctv/SmV3//ty2//7kxv/+8N//0p1l/9KdZf/+8N///uTG//7ctv/HiEf/3apz//7ctv/SmV3//ty2
+ /+i6iv/HiEf/x4hH/8eIR//HiEf/x4hH/8eIR//+3Lb/6LqK/8eIR//HiEf//ty2/+i6iv/HiEf/88ug
+ //PLoP/dqnP//ty2/9KZXf/+3Lb//uTG//7w3//SnWX/0p1l//7w3//+5Mb//ty2/8eIR//dqnP//ty2
+ /9KZXf/+3Lb/6LqK/8eIR//HiEf/x4hH/8eIR//HiEf/x4hH//7ctv/ouor/x4hH/8eIR//+3Lb/6LqK
+ /8eIR//zy6D/88ug/92qc//+3Lb/0pld//7ctv/+5Mb//vDf/9KdZf/SnWX//vDf//7kxv/+3Lb/x4hH
+ /92qc//+3Lb/0pld//7ctv/ouor/x4hH/8eIR//HiEf/x4hH/8eIR//HiEf//ty2/+i6iv/HiEf/x4hH
+ //7ctv/ouor/x4hH//PLoP/zy6D/3apz//7ctv/SmV3//ty2//7kxv/+8N//0p1l/9KdZf/+8N///u7a
+ //7s1//z28H/9+LJ//7s1//138X//uzX//rlzv/z28H/89vB//Pbwf/z28H/89vB//Pbwf/+7Nf/+uXO
+ //Pbwf/z28H//uzX//rlzv/z28H//OnS//zp0v/34sn//uzX//Xfxf/+7Nf//u7a//7w3//SnWX/0Jph
+ 9/Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB
+ //Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB
+ /9CaYffJi0uCx4hHmceIR5nHiEeZx4hH/8eIR9bHiEeZx4hH68eIR5nHiEfCx4hH/8eIR//HiEf/x4hH
+ /8eIR//HiEf/x4hHmceIR8LHiEf/x4hH/8eIR5nHiEfCx4hH/8eIR63HiEetx4hH1seIR5nHiEfrx4hH
+ mceIR5nHiEeZyYtMgQAAAAAAAAAAAAAAAAAAAADHiEf/x4hHmQAAAADHiEfMAAAAAMeIR2bHiEf/x4hH
+ /8eIR//HiEf/x4hH/8eIR/8AAAAAx4hHZseIR//HiEf/AAAAAMeIR2bHiEf/x4hHM8eIRzPHiEeZAAAA
+ AMeIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEeZAAAAAMeIR8wAAAAAx4hH
+ ZseIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAADHiEdmx4hH/8eIR/8AAAAAx4hHZseIR//HiEczx4hH
+ M8eIR5kAAAAAx4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hH/8eIR5kAAAAAx4hH
+ zAAAAADHiEdmx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAAAMeIR2bHiEf/x4hH/wAAAADHiEdmx4hH
+ /8eIRzPHiEczx4hHmQAAAADHiEfMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADHiEf/x4hH
+ mQAAAADHiEfMAAAAAMeIR2bHiEf/x4hH/8eIR//HiEf/x4hH/8eIR/8AAAAAx4hHZseIR//HiEf/AAAA
+ AMeIR2bHiEf/x4hHM8eIRzPHiEeZAAAAAMeIR8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMeIR//HiEeZAAAAAMeIR8wAAAAAx4hHZseIR//HiEf/x4hH/8eIR//HiEf/x4hH/wAAAADHiEdmx4hH
+ /8eIR/8AAAAAx4hHZseIR//HiEczx4hHM8eIR5kAAAAAx4hHzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAx4hH/8eIR5kAAAAAx4hHzAAAAADHiEdmx4hH/8eIR//HiEf/x4hH/8eIR//HiEf/AAAA
+ AMeIR2bHiEf/x4hH/wAAAADHiEdmx4hH/8eIRzPHiEczx4hHmQAAAADHiEfMAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADHiEf/x4hHmQAAAADHiEfMAAAAAMeIR2bHiEf/x4hH/8eIR//HiEf/x4hH
+ /8eIR/8AAAAAx4hHZseIR//HiEf/AAAAAMeIR2bHiEf/x4hHM8eIRzPHiEeZAAAAAMeIR8wAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeIR//HiEeZAAAAAMeIR8wAAAAAx4hHZseIR//HiEf/x4hH
+ /8eIR//HiEf/x4hH/wAAAADHiEdmx4hH/8eIR/8AAAAAx4hHZseIR//HiEczx4hHM8eIR5kAAAAAx4hH
+ zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx4hHZseIRz0AAAAAx4hHUgAAAADHiEcpx4hH
+ ZseIR2bHiEdmx4hHZseIR2bHiEdmAAAAAMeIRynHiEdmx4hHZgAAAADHiEcpx4hHZseIRxTHiEcUx4hH
+ PQAAAADHiEdSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ APIAACfyAAAn8gAAJ/IAACfyAAAn8gAAJ/IAACfyAAAn8gAAJ/////8oAAAAEAAAACAAAAABACAAAAAA
+ AAAEAAAAAAAAAAAAAAAAAAAAAAAAyIlJL8eIRzPHiEczx4hHM8eIRzPHiEczx4hHM8eIRzPHiEczx4hH
+ M8eIRzPHiEczx4hHM8eIRzPHiEczyIlJL+K7kfvz28H/89vB//Pbwf/z28H/89vB//Pbwf/z28H/89vB
+ //Pbwf/z28H/89vB//Pbwf/z28H/89vB/+K7kvvoxqL//uC+//7ctv/+3Lb//ty2//7ctv/+3Lb//ty2
+ //7ctv/+3Lb//ty2//7ctv/+3Lb//ty2//7gvv/oxqL/6Mai//7gvv/bpm//7MGS//XPpP/SmV3/0pld
+ /9KZXf/1z6T/0pld//XPpP/ktIH/7MGS/+zBkv/+4L7/6Mai/+jGov/+4L7/0pld/+i6iv/zy6D/x4hH
+ /8eIR//HiEf/88ug/8eIR//zy6D/3apz/+i6iv/ouor//uC+/+jGov/oxqL//uC+/9KZXf/ouor/88ug
+ /8eIR//HiEf/x4hH//PLoP/HiEf/88ug/92qc//ouor/6LqK//7gvv/oxqL/6Mai//7gvv/SmV3/6LqK
+ //PLoP/HiEf/x4hH/8eIR//zy6D/x4hH//PLoP/dqnP/6LqK/+i6iv/+4L7/6Mai/+jGov/+4L7/0pld
+ /+i6iv/zy6D/x4hH/8eIR//HiEf/88ug/8eIR//zy6D/3apz/+i6iv/ouor//uC+/+jGov/oxqL//uC+
+ /9KZXf/ouor/88ug/8eIR//HiEf/x4hH//PLoP/HiEf/88ug/92qc//ouor/6LqK//7gvv/oxqL/6Mai
+ //7my//kvJH/8dCs//fauf/dsoT/3bKE/92yhP/32rn/3bKE//fauf/qxp7/8dCs//HQrP/+5sv/6Mai
+ /9mpd8TjvJPM3rOG9eC3jODhuo/W3bKE/92yhP/dsoT/4bqP1t2yhP/huo/W37WJ6+C3jODgt4zg47yT
+ zNmpd8QAAAAAAAAAAMeIR8zHiEdmx4hHM8eIR//HiEf/x4hH/8eIRzPHiEf/x4hHM8eIR5nHiEdmx4hH
+ ZgAAAAAAAAAAAAAAAAAAAADHiEfMx4hHZseIRzPHiEf/x4hH/8eIR//HiEczx4hH/8eIRzPHiEeZx4hH
+ ZseIR2YAAAAAAAAAAAAAAAAAAAAAx4hHzMeIR2bHiEczx4hH/8eIR//HiEf/x4hHM8eIR//HiEczx4hH
+ mceIR2bHiEdmAAAAAAAAAAAAAAAAAAAAAMeIR8zHiEdmx4hHM8eIR//HiEf/x4hH/8eIRzPHiEf/x4hH
+ M8eIR5nHiEdmx4hHZgAAAAAAAAAAAAAAAAAAAADHiEcpx4hHFMeIRwrHiEczx4hHM8eIRzPHiEcKx4hH
+ M8eIRwrHiEcfx4hHFMeIRxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAwAEAAMABAADAAQAAwAEAAMABAAA=
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/LogTextBox.Designer.cs b/QRValidation/Project/LogTextBox.Designer.cs
new file mode 100644
index 0000000..1b87d20
--- /dev/null
+++ b/QRValidation/Project/LogTextBox.Designer.cs
@@ -0,0 +1,36 @@
+namespace arCtl
+{
+ partial class LogTextBox
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 구성 요소 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
+ ///
+ private void InitializeComponent()
+ {
+ components = new System.ComponentModel.Container();
+ }
+
+ #endregion
+ }
+}
diff --git a/QRValidation/Project/LogTextBox.cs b/QRValidation/Project/LogTextBox.cs
new file mode 100644
index 0000000..d180f5a
--- /dev/null
+++ b/QRValidation/Project/LogTextBox.cs
@@ -0,0 +1,347 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Threading;
+
+namespace arCtl
+{
+ public partial class LogTextBox : RichTextBox
+ {
+ delegate void AddMsgHandler(DateTime tm, string Gubun, string Msg, Color fColor);
+
+ ///
+ /// 타이머를 이용하여 로그를 표시할 것인가를 설정합니다. (데이터량이 너무 많다면 이기능을사용하세요. 버퍼오버가 되면 프로그램이 멈출수 있습니다)
+ ///
+ public Boolean EnableDisplayTimer
+ {
+ get
+ {
+ return tm.Enabled;
+ }
+ set
+ {
+ tm.Enabled = value;
+ if (value) tm.Start();
+ else tm.Stop();
+ }
+ }
+
+ ///
+ /// 날짜의 포맷방식 기본 (yy-MM-dd HH:mm:ss)
+ ///
+ public string DateFormat { get; set; }
+
+ ///
+ /// 데이터의 String.Format 기본값([{0}] {1}), 0번은 시간, 1번은 메세지 , 2번은 구분
+ ///
+ public string ListFormat { get; set; }
+
+ ///
+ /// 최대 데이터의 줄수 , 지정값을 넘어서면 초기화 됩니다.
+ ///
+ public UInt16 MaxListCount { get; set; }
+ public UInt32 MaxTextLength { get; set; }
+ private sLogMessageColor[] _ColorList = new sLogMessageColor[] { };
+
+ ///
+ /// 메세지버퍼동기화를 위해서 추가함
+ ///
+ private System.Threading.AutoResetEvent ar = new System.Threading.AutoResetEvent(true);
+
+
+ ManualResetEvent mre = new ManualResetEvent(true);
+
+ object lock_work = new object();
+
+
+
+ ///
+ /// 메세지를 표시하는 내부 타이머의 간격입니다. 기본값 100
+ ///
+ public int MessageInterval
+ {
+ get
+ {
+
+ return tm.Interval;
+ }
+ set
+ {
+ tm.Interval = value;
+ //tm.Change(1000, value);
+ }
+ }
+
+ ///
+ /// 각 데이터라인을 컬러로 구분짓습니다.
+ ///
+ public Boolean EnableGubunColor { get; set; }
+
+ public System.Windows.Forms.Timer tm;
+
+ public new void Dispose()
+ {
+
+
+ this.tm.Stop();
+ tm.Tick -= tm_Tick;
+ base.Dispose();
+ }
+
+ ///
+ /// 구분별로 색상을 입력합니다. 이 색상은 EnableGUbunColor 가 활성하되어야합니다. 비활성화시에는 DefaultColor를 사용합니다.
+ ///
+ public sLogMessageColor[] ColorList
+ {
+ get
+ {
+ return _ColorList;
+ }
+ set
+ {
+ _ColorList = value;
+ }
+ }
+
+ public LogTextBox()
+ {
+ InitializeComponent();
+ EnableGubunColor = true;
+ DateFormat = "yy-MM-dd HH:mm:ss";
+ ListFormat = "[{0}] {1}";
+ MaxListCount = 200;
+ MaxTextLength = 4000;
+ this.DefaultColor = Color.LightGray;
+ this.BackColor = Color.FromArgb(24, 24, 24);
+ this.Font = new Font("Consolas", 9, FontStyle.Regular);
+ // this.waitsEvent = new EventWaitHandle[] { waitEvent, closeAllEvent };
+
+ tm = new System.Windows.Forms.Timer(); // System.Threading.Timer(tm_Tick, ar, 1000, 3000);
+ // tm = new Timer();
+ tm.Interval = 50;
+ tm.Tick += tm_Tick;
+ this.EnableDisplayTimer = true;
+ tm.Start();
+ }
+
+ [Description("기본 글자 색상")]
+ [Browsable(true)]
+ public Color DefaultColor { get; set; }
+
+ public void AddMsg(DateTime tm, string Gubun, string Msg)
+ {
+ Boolean useColor = false;
+ Color fcolor = DefaultColor;
+
+ if (EnableGubunColor)
+ {
+ if (ColorList != null && ColorList.Length > 0)
+ {
+ foreach (var cdata in ColorList)
+ {
+ if (Gubun.StartsWith(cdata.gubun))
+ {
+ useColor = true;
+ fcolor = cdata.color;
+ break;
+ }
+ }
+ }
+
+ //사용자 컬러리스트를 조회해서 없다면 시스템으로 한다.
+ if (!useColor)
+ {
+ var sColorList = new sLogMessageColor[] {
+ new sLogMessageColor("ERR",Color.Red) ,
+ new sLogMessageColor("ATT",Color.Orange) ,
+ new sLogMessageColor("INFO",Color.DeepSkyBlue) ,
+ new sLogMessageColor("NET",Color.Magenta)
+ };
+
+ foreach (var cdata in sColorList)
+ {
+ if (Gubun.StartsWith(cdata.gubun))
+ {
+ fcolor = cdata.color;
+ break;
+ }
+ }
+ }
+
+ }
+ AddMsg(tm, Gubun, Msg, fcolor);
+ }
+
+ struct sMessageData
+ {
+ public DateTime date;
+ public string msg;
+ public Color fcolor;
+ }
+
+ public int BufferCount { get { return messagebuffer.Count; } }
+
+ void tm_Tick(object sender, EventArgs e)
+ {
+ //ar.WaitOne();
+ //ar.Reset();
+
+ if (!mre.WaitOne(2000)) return;
+ mre.Reset();
+
+ lock (lock_work)
+ {
+ if (messagebuffer.Count > 0)
+ {
+ var data = (sMessageData)messagebuffer.Dequeue();
+ //messagebuffer.RemoveAt(0);
+
+ AppendMessge(data.msg, data.fcolor);
+
+ //if (!this.IsDisposed && !this.Disposing)
+ //{
+ // //색상변경
+ // int StartIndex = this.TextLength;
+ // this.AppendText(data.msg + "\r\n");
+ // this.Select(StartIndex, data.msg.Length);
+ // this.SelectionColor = data.fcolor;
+ // this.ScrollToCaret();
+ //}
+ }
+ }
+
+ mre.Set();
+ // AppendMessge(DateTime.Now.ToString("HH:mm:ss.fff"),Color.White);
+
+
+ // ar.Set();
+ }
+
+ delegate void AppedMessageHandler(string msg, Color fColor);
+ void AppendMessge(string ListStr, Color fColor)
+ {
+ if (!this.Disposing && !this.IsDisposed)
+ {
+ if (this.InvokeRequired)
+ {
+ this.BeginInvoke(new AppedMessageHandler(AppendMessge), new object[] { ListStr, fColor });
+ }
+ else
+ {
+ if (this.TextLength > MaxTextLength) this.Clear();
+
+ int StartIndex = this.TextLength;
+ this.AppendText(ListStr + "\r\n");
+ this.Select(StartIndex, ListStr.Length);
+ this.SelectionColor = fColor;
+ this.ScrollToCaret();
+ }
+ }
+ }
+
+ System.Collections.Queue messagebuffer = new System.Collections.Queue();
+ public void AddMsg(DateTime tm, string Gubun, string Msg, Color fColor)
+ {
+ //시간포맷
+ string _TimeFormat = this.DateFormat;
+ if (string.IsNullOrEmpty(_TimeFormat)) _TimeFormat = "yy-MM-dd HH:mm:ss";
+
+ //데이터포맷
+ string _ListFormat = this.ListFormat;
+ if (string.IsNullOrEmpty(_ListFormat)) _ListFormat = "[{0}] {1}";
+
+ string TimeStr = tm.ToString(_TimeFormat);
+ string ListStr = string.Format(_ListFormat, TimeStr, Msg);
+
+ //ar.WaitOne();
+ //ar.Reset();
+
+ if (!mre.WaitOne(2000)) return;
+ mre.Reset();
+
+ lock (lock_work)
+ {
+
+ ///최대줄수를 넘어서면 오류
+ if (this.messagebuffer.Count > MaxListCount)
+ {
+ messagebuffer.Clear();
+ //this.Clear();
+ }
+
+ if (!EnableDisplayTimer)
+ {
+ AppendMessge(ListStr, fColor);
+ }
+ else
+ {
+ sMessageData newmsg = new sMessageData();
+ newmsg.msg = ListStr;
+ newmsg.date = tm;
+ newmsg.fcolor = fColor;
+ messagebuffer.Enqueue(newmsg);
+ }
+
+ mre.Set();
+ }
+
+
+ //ar.Set();
+
+ ////색상변경
+ //int StartIndex = this.TextLength;
+ //this.AppendText(ListStr + "\r\n");
+ //this.Select(StartIndex, ListStr.Length);
+ //this.SelectionColor = fColor;
+ //this.ScrollToCaret();
+ }
+
+ public void AddMsg(DateTime tm, string Gubun, string[] Msg)
+ {
+ foreach (string m in Msg)
+ AddMsg(tm, Gubun, m);
+
+ }
+ public void AddMsg(string Gubun, string Msg)
+ {
+ AddMsg(DateTime.Now, Gubun, Msg);
+ }
+ public void AddMsg(string Gubun, string[] Msg)
+ {
+ foreach (string m in Msg)
+ AddMsg(DateTime.Now, Gubun, m);
+ }
+ public void AddMsg(string Msg)
+ {
+ AddMsg(DateTime.Now, "NORMAL", Msg);
+ }
+ public void AddMsg(string[] Msg)
+ {
+ foreach (string m in Msg)
+ AddMsg(DateTime.Now, "NORMAL", m);
+ }
+ }
+
+ [TypeConverterAttribute(typeof(ExpandableObjectConverter))]
+ public class sLogMessageColor
+ {
+ public string gubun { get; set; }
+ public Color color { get; set; }
+ public sLogMessageColor()
+ {
+ this.gubun = "NOR";
+ this.color = Color.White;
+ }
+ public sLogMessageColor(string g, Color c)
+ {
+ this.gubun = g;
+ this.color = c;
+ }
+ }
+
+}
diff --git a/QRValidation/Project/PUB.cs b/QRValidation/Project/PUB.cs
new file mode 100644
index 0000000..121a366
--- /dev/null
+++ b/QRValidation/Project/PUB.cs
@@ -0,0 +1,1142 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Management;
+using System.Data.SqlClient;
+using System.Data;
+using System.Threading.Tasks;
+using System.Net.NetworkInformation;
+using System.Windows.Forms;
+using System.Net;
+using WatsonWebsocket;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using Euresys.Open_eVision_22_12;
+using Crevis.VirtualFG40Library;
+using AR;
+
+namespace Project
+{
+
+ public enum eTarget
+ {
+ Left = 0,
+ Right,
+ None = 9,
+ }
+ public enum remotelist
+ {
+ barcodeupdate,
+ }
+ public class remoteargs : EventArgs
+ {
+ public string strdata { get; set; }
+ public int CamIdx { get; set; }
+ public remotelist Command { get; set; }
+ public remoteargs(remotelist _cmd, int _camidx, string _strdata)
+ {
+ this.strdata = _strdata;
+ this.CamIdx = _camidx;
+ this.Command = _cmd;
+ }
+ }
+
+ public static class PUB
+ {
+ public static Class.WebSocket[] wsock_ = new Class.WebSocket[2];
+ public static AR.Log[] log_ = new AR.Log[2];
+
+ public static DateTime LastInputTime = DateTime.Now;
+ public static CSetting setting;
+ public static Boolean VisionLicense;
+ public static DateTime parsetime = DateTime.Now;
+ public static Flag flag;
+
+ public static bool[] DetectReel = new bool[] { false, false };
+ public static bool[] DetectConv = new bool[] { false, false };
+ public static int[] DetectReelValue = new int[] { 0, 0 };
+ public static int[] DetectConvValue = new int[] { 0, 0 };
+ public static double[] ProcessTime = new double[] { 0, 0 };
+
+ public static string[] lastguid = new string[] { string.Empty, string.Empty };
+ public static string[] lastdata = new string[] { string.Empty, string.Empty };
+ public static string[] lastcmd = new string[] { string.Empty, string.Empty };
+ public static string[] lastip = new string[] { string.Empty, string.Empty };
+
+ public static DateTime[] lastsend = new DateTime[] { DateTime.Now, DateTime.Now };
+ public static DateTime[] lastsendStatus = new DateTime[] { DateTime.Now, DateTime.Now };
+ public static Stack imgque = new Stack();
+ public static Boolean[] _isCrevisOpen = new bool[] { false, false, false };
+ public static Boolean[] _isCrevisACQ = new bool[] { false, false, false };
+ public static bool[] IsLive = new bool[] { false, false };
+
+ public static eTarget GetTarget(int camidx)
+ {
+ if (camidx < 0 || camidx > 900) return eTarget.None;
+ if (camidx == PUB.setting.CameraIndexL) return eTarget.Left;
+ else if (camidx == PUB.setting.CameraIndexR && camidx != PUB.setting.CameraIndexL) return eTarget.Right;
+ else return eTarget.None;
+ }
+ // public static System.Windows.Forms.Panel pIvLeft, pIvRight;
+ public static event EventHandler RemoteCommand;
+ public static void RaiseRemoteCommand(remotelist cmd, int camidx, string data)
+ {
+ RemoteCommand?.Invoke(null, new remoteargs(cmd, camidx, data));
+ }
+
+
+ public static void initCore()
+ {
+ //setting
+ setting = new CSetting();
+ setting.Load();
+
+ //log
+ log_[0] = new AR.Log();
+ log_[0].FileNameFormat = "{yyyyMMdd}_L";
+ log_[0].TimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
+
+ log_[1] = new AR.Log();
+ log_[1].FileNameFormat = "{yyyyMMdd}_R";
+ log_[1].TimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
+
+ flag = new Flag();
+ }
+
+
+ public static void LogFlush()
+ {
+ PUB.log_[0].Flush();
+ PUB.log_[1].Flush();
+ }
+
+ public static string GetStackTraceInfo(
+ [CallerFilePath] string filenpath = null,
+ [CallerLineNumber] int linenumer = -1,
+ [CallerMemberName] string callMember = null)
+ {
+
+
+ var stackFrame = new System.Diagnostics.StackTrace(1).GetFrame(1);
+ string fileName = stackFrame.GetFileName();
+ if (fileName.isEmpty()) fileName = filenpath;
+
+ string methodName = stackFrame.GetMethod().ToString();
+ if (methodName.isEmpty()) methodName = callMember;
+
+ int lineNumber = stackFrame.GetFileLineNumber();
+ if (linenumer != -1) lineNumber = linenumer;
+
+ var TraceInfo = stackFrame.ToString();
+
+ return $"File:{fileName},Line:{lineNumber}\nMethod:{methodName}\n{TraceInfo}";
+
+ }
+
+ public static Dictionary ComputerInfo()
+ {
+ string ip = "";
+ string mac = "";
+ // string prgmName = Application.ProductName;
+
+ var nif = NetworkInterface.GetAllNetworkInterfaces();
+ var host = Dns.GetHostEntry(Dns.GetHostName());
+ string fullname = System.Net.Dns.GetHostEntry("").HostName;
+ foreach (IPAddress r in host.AddressList)
+ {
+ string str = r.ToString();
+
+ if (str != "" && str.Substring(0, 3) == "10.")
+ {
+ ip = str;
+ break;
+ }
+ }
+
+ string rtn = string.Empty;
+ ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
+ ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
+ foreach (ManagementObject mo in query1.Get())
+ {
+ string[] address = (string[])mo["IPAddress"];
+ if (address[0] == ip && mo["MACAddress"] != null)
+ {
+ mac = mo["MACAddress"].ToString();
+ break;
+ }
+ }
+
+ var username = System.Environment.UserName;
+ var retval = new Dictionary();
+ retval.Add("IP", ip);
+ retval.Add("MAC", mac);
+ retval.Add("USER", username);
+ retval.Add("HOST", fullname);
+ return retval;
+
+
+
+ }
+
+ public static Rectangle GetVisionOrientSearchArea(
+ Rectangle baserect,
+ int offsetX,
+ int offsetY,
+ out string VisionOrientMessage)
+ {
+ VisionOrientMessage = "";
+ var newORectW = baserect.Width + offsetX;
+ var newORectH = baserect.Height + offsetY;
+
+ var newORectX = baserect.X - ((newORectW - baserect.Width) / 2.0);
+ var newORectY = baserect.Y - ((newORectH - baserect.Height) / 2.0);
+ if (newORectX < 1)
+ {
+ newORectW += (int)newORectY;
+ newORectX = 1;
+ }
+ if (newORectY < 1)
+ {
+ newORectH += (int)newORectY;
+ newORectY = 1;
+ }
+ if (newORectW < 4) newORectW = 0;
+ if (newORectH < 4) newORectH = 0;
+ var newORect = new Rectangle((int)newORectX, (int)newORectY, (int)newORectW, (int)newORectH);
+ if (newORect.Width < 1 || newORect.Height < 1)
+ {
+ VisionOrientMessage = string.Format("Reference area size error({0},{1},{2},{3})", newORect.Left, newORect.Top, newORect.Width, newORect.Height);
+ return Rectangle.Empty;
+ }
+ else return newORect;
+ }
+ public static double GetFreeSpace(string driveletter)
+ {
+ try
+ {
+ var di = new System.IO.DriveInfo(driveletter);
+ var freespace = di.TotalFreeSpace;
+ var totalspace = di.TotalSize;
+ var freeSpaceRate = (freespace * 1.0 / totalspace) * 100.0;
+ return freeSpaceRate;
+ }
+ catch
+ {
+ return 100.0;
+ }
+ }
+
+ public static string getSavePath(out double freespace)
+ {
+ Boolean path1Exist = false;
+ double freespace1 = 100.0;
+ string savePath1 = "";
+
+ freespace = 100.0;
+
+ savePath1 = System.IO.Path.Combine(PUB.setting.Path_Data, "Images");
+ if (savePath1 != "" && System.IO.Directory.Exists(savePath1))
+ {
+ path1Exist = true;
+ //이폴더를 사용
+ if (savePath1.StartsWith("\\")) return savePath1;
+ //남은잔량을 체크한다.
+ return savePath1;
+ }
+
+ if (path1Exist)
+ {
+ freespace = freespace1;
+ return savePath1;
+ }
+
+ //이제 문제가 좀 심각? (폴더가 없다)
+ var savePath = System.IO.Path.Combine(Util.CurrentPath, "Images");
+ if (System.IO.Directory.Exists(savePath) == false)
+ System.IO.Directory.CreateDirectory(savePath);
+
+ freespace = GetFreeSpace(savePath.Substring(0, 1));
+ return savePath;
+ }
+ public static double ChangeValuePopup(double value, string title)
+ {
+ var f = AR.UTIL.InputBox(title, value.ToString());
+ if (f.Item1)
+ {
+ var val = double.Parse(f.Item2);
+ return val;
+ }
+ else return value;
+
+ }
+ public static VirtualFG40Library _virtualFG40;
+ public static DateTime[] _CrevisRunTime = new DateTime[] { DateTime.Now, DateTime.Now };
+ public static DateTime[] _CrevisGrabTime = new DateTime[] { DateTime.Now, DateTime.Now };
+ static System.Threading.ManualResetEvent[] mre_grab = new System.Threading.ManualResetEvent[] {
+ new System.Threading.ManualResetEvent(true),
+ new System.Threading.ManualResetEvent(true)
+ };
+ public static EImageBW8[] OrgImage = new EImageBW8[] { null, null };
+ public static Int32[] _hDevice = new Int32[] { -1, -1 };
+ public static Int32[] _width = new Int32[] { 0, 0, 0 };
+ public static Int32[] _height = new Int32[] { 0, 0, 0 };
+ public static Int32[] _stride = new Int32[] { 0, 0, 0 };
+ public static Int32[] _bufferSize = new Int32[] { 0, 0, 0 };
+ public static IntPtr[] camPtr = new IntPtr[] { IntPtr.Zero, IntPtr.Zero };
+ public static bool[] IsProcess = new bool[] { false, false };
+ ///
+ /// 카메라버퍼에서 이미지를 읽는다
+ ///
+ ///
+ ///
+ ///
+ public static Boolean CrevisGrab(int camIdx, Boolean DisplayImage, Panel Piv)
+ {
+ // 1. Excute Acquisition Start command
+ // 2. Grab Image using GrabImage
+ // 3. Image Display
+ // 4. Excute Acquisition Stop command
+ var camTarget = PUB.GetTarget(camIdx);// = eTarget.Left ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ if (camTarget == eTarget.None) return false;
+ var logIdx = camTarget == eTarget.Left ? 0 : 1;
+
+ //작업가능여부확인
+ if (mre_grab[camIdx].WaitOne(100) == false) return false;
+
+ //너무빨리 실행되지 않게 한다
+ var ts = DateTime.Now - _CrevisGrabTime[camIdx];
+ var fpsterm = (int)(1000f / 12f);
+ if (ts.TotalMilliseconds < fpsterm)
+ {
+ System.Threading.Thread.Sleep((int)(fpsterm - ts.TotalMilliseconds));
+ return false;
+ }
+ _CrevisGrabTime[camIdx] = DateTime.Now;
+
+ Int32 status = VirtualFG40Library.MCAM_ERR_SUCCESS;
+ try
+ {
+ mre_grab[camIdx].Reset();
+
+ //데이터수집확인
+ if (PUB._isCrevisACQ[camIdx] == false)
+ {
+ // Acqusition Start
+ status = _virtualFG40.AcqStart(_hDevice[camIdx]);
+ if (status == VirtualFG40Library.MCAM_ERR_RESOURCE_IN_USE)
+ {
+ if (_hDevice[camIdx] > 0)
+ _virtualFG40.AcqStop(_hDevice[camIdx]);
+ PUB._isCrevisACQ[camIdx] = false;
+ }
+ else if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ PUB.log_[logIdx].AddE(String.Format("Camera ACQ failed : {0}", status));
+ if (_hDevice[camIdx] > 0) _virtualFG40.AcqStop(_hDevice[camIdx]); //실패하면 멈춘다
+ PUB._isCrevisACQ[camIdx] = false;
+ }
+ else
+ {
+ PUB._isCrevisACQ[camIdx] = true;
+ PUB.log_[logIdx].AddI("Camera ACQ start");
+ }
+
+ //이미지수집에 실패했다면 진행하지 않는다.
+ if (PUB._isCrevisACQ[camIdx] == false) return false;
+ }
+
+ //이미지 수집
+ status = _virtualFG40.GrabImage(_hDevice[camIdx], camPtr[camIdx], (UInt32)_bufferSize[camIdx]);
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ PUB.log_[logIdx].AddE($"Camera capture({camIdx}) error : {status}");
+ if (_hDevice[camIdx] > 0) _virtualFG40.AcqStop(_hDevice[camIdx]); //실패하면 멈춘다
+ PUB._isCrevisACQ[camIdx] = false;
+ PUB._isCrevisOpen[camIdx] = false; //연결여부도 끊는다
+ _virtualFG40.CloseDevice(_hDevice[camIdx]);
+ return false;
+ }
+ else _CrevisGrabTime[camIdx] = DateTime.Now;
+
+ //이미지생성 확인
+ if (mre[camIdx].WaitOne(100))
+ {
+ mre[camIdx].Reset();
+ if (OrgImage[camIdx] == null || OrgImage[camIdx].IsVoid)
+ {
+ OrgImage[camIdx] = new EImageBW8(_width[camIdx], _height[camIdx]);
+ }
+
+ //생성된 이미지 복사
+ using (var grabimg = new EImageBW8())
+ {
+ grabimg.SetImagePtr(_width[camIdx], _height[camIdx], camPtr[camIdx]);
+ grabimg.CopyTo(OrgImage[camIdx]);
+ //this.iv[camIdx].Invalidate(); //image update
+ DrawImage(camTarget, Piv, grabimg);
+ }
+ mre[camIdx].Set();
+ }
+
+ return true;
+ }
+ catch (Exception ex)
+ {
+ if (_hDevice[camIdx] > 0) _virtualFG40.AcqStop(_hDevice[camIdx]); //실패하면 멈춘다
+ PUB._isCrevisACQ[camIdx] = false;
+ //var stackFrame = new System.Diagnostics.StackTrace(1).GetFrame(1);
+ //string fileName = stackFrame.GetFileName();
+ //int lineNumber = stackFrame.GetFileLineNumber();
+ //var TraceInfo = stackFrame.ToString();
+ //var tracemsg = $"File:{fileName},Line:{lineNumber}\n{TraceInfo}";
+ PUB.log_[logIdx].AddE($"Crevis Grab({camIdx}):{ex.Message}");
+
+ return false;
+ }
+ finally
+ {
+ mre_grab[camIdx].Set();
+ }
+
+
+ }
+ public static string lastlogbarcode = string.Empty;
+ public static string[] lastbcd = new string[] { string.Empty, string.Empty };
+ public static Boolean RequestNewRead = false;
+
+
+ public static ManualResetEvent[] mre = new ManualResetEvent[2];
+
+ static string[] prebarcodedata = new string[] { "", "" };
+ ///
+ /// 이미지를 처리합니다
+ /// 트리거가 없는 경우에는 릴존재여부와/컨베이어확인을 합니다.
+ /// 트리거가 있다면 릴 영역을 찾아서 ID를 스캔합니다
+ ///
+ ///
+ ///
+ public static bool CreavisProcess(int camIdx, bool isTrigger, Panel Piv)
+ {
+ var camTarget = PUB.GetTarget(camIdx);
+ if (camTarget == eTarget.None) return false;
+ var logIdx = camTarget == eTarget.Left ? 0 : 1;
+ //이미지사용여부확인
+ if (mre[camIdx].WaitOne(100) == false) return false;
+ mre[camIdx].Reset();
+
+ //이미지가 유효한 경우 처리한다
+ if (OrgImage[camIdx] == null || OrgImage[camIdx].IsVoid)
+ {
+ mre[camIdx].Set();
+ return false;
+ }
+ mre[camIdx].Reset();
+
+ System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
+ wat.Restart();
+
+ //검사영역확인
+ var rect_reeldetect = camIdx == PUB.setting.CameraIndexL ? PUB.setting.ROI_ReelDetect_L : PUB.setting.ROI_ReelDetect_R;
+ var rect_convdetect = camIdx == PUB.setting.CameraIndexL ? PUB.setting.ROI_ConvDetect_L : PUB.setting.ROI_ConvDetect_R;
+
+ try
+ {
+ //
+ //iv[camIdx].Shapes.Clear();
+ string msg;
+ string bcdlist = string.Empty;
+ int DataCount = 0;// data1.Count;
+ Util_Vision.SCodeData codedata = new Util_Vision.SCodeData();
+ List datalist = new List();
+ List ptlist = new List();
+
+
+ var prccnt = 0;
+ string barcodeMessage = string.Empty;
+
+ //erode 값이 1과 3일때 차이가 발생함, 어두운 녹색라벨혹은, QR이 border에 붙은경우에 erode 3 은 서로 붙게되어서 필터링 되버림
+ //CvInvoke.CvtColor(OrgImage, OrgCImage, ColorConversion.Gray2Bgr);
+
+ //릴을 확인 한다
+ //if (IsProcess[camidx])
+ //{
+ using (EImageEncoder enc = new EImageEncoder())
+ {
+ using (var seg = enc.GrayscaleSingleThresholdSegmenter)
+ {
+ seg.WhiteLayerEncoded = true;
+ seg.BlackLayerEncoded = false;
+ seg.Mode = EGrayscaleSingleThreshold.Absolute;
+ seg.AbsoluteThreshold = 50;
+ }
+
+ using (ECodedImage2 encimg = new ECodedImage2())
+ {
+ using (EROIBW8 roiimge = new EROIBW8())
+ {
+ roiimge.Attach(OrgImage[camIdx]);
+ roiimge.SetPlacement(500, 70, 3008, 2640); //컨베이어전체영역이ㄴ
+ enc.Encode(roiimge, encimg);
+ using (EObjectSelection selection = new EObjectSelection())
+ {
+ selection.Clear();
+ selection.AddObjects(encimg);
+ selection.RemoveUsingUnsignedIntegerFeature(EFeature.Area, 1000, ESingleThresholdMode.LessEqual);
+ PUB.DetectReelValue[camIdx] = (int)selection.ElementCount;
+ PUB.DetectReel[camIdx] = selection.ElementCount > 1;
+ }
+ }
+
+ }
+ }
+ //
+ //else Pub.DetectReel = false;
+
+ //컨베이어 확인여부 체크필요
+ var roi_conv = camIdx == PUB.setting.CameraIndexL ? PUB.setting.ROI_ConvDetect_L : PUB.setting.ROI_ConvDetect_R;
+ if (roi_conv.IsEmpty == false)
+ {
+ using (EImageBW8 thimage = new EImageBW8(OrgImage[camIdx].Width, OrgImage[camIdx].Height))
+ {
+ EasyImage.Copy(OrgImage[camIdx], thimage);
+
+ var minresidu = EasyImage.AutoThreshold(thimage, EThresholdMode.MinResidue);
+ EasyImage.Threshold(thimage, thimage, minresidu.Value);
+
+ using (EROIBW8 roimage = new EROIBW8())
+ {
+ roimage.Attach(thimage);
+ roimage.SetPlacement(roi_conv.X, roi_conv.Y, roi_conv.Width, roi_conv.Height);
+
+ EasyImage.PixelCount(roimage, new EBW8(64), new EBW8(86), out int val_below,
+ out int val_between, out int val_above);
+ PUB.DetectConvValue[camIdx] = val_below;
+
+ var det_value = camIdx == PUB.setting.CameraIndexL ? PUB.setting.ConvDetectValueL : PUB.setting.ConvDetectValueR;
+ PUB.DetectConv[camIdx] = val_below < det_value;
+ }
+ }
+ }
+ else PUB.DetectConv[camIdx] = false;
+
+ //QR코드를 읽는다
+ List qrdataList = new List();
+
+ if (isTrigger)
+ {
+ var qrrlt = Util_Vision.DetectQR(OrgImage[camIdx],
+ null, prccnt++, out msg,
+ PUB.setting.erodevaluestr,
+ PUB.setting.GainOffsetListStr,
+ PUB.setting.blob_area_min,
+ PUB.setting.blob_area_max,
+ PUB.setting.blob_sigmaxy,
+ PUB.setting.blob_sigmayy,
+ PUB.setting.blob_sigmaxx,
+ PUB.setting.blob_minw,
+ PUB.setting.blob_maxw,
+ PUB.setting.blob_minh,
+ PUB.setting.blob_maxh, finddata: PUB.lastdata[camIdx]);
+
+ qrdataList = qrrlt.Item1;
+
+ PUB.ProcessTime[camIdx] = qrrlt.Item4;
+ var target = camIdx == PUB.setting.CameraIndexL ? eTarget.Left : eTarget.Right;
+ // var pan = target == eTarget.Left ? pIvLeft : pIvRight;
+ DrawImage(target, Piv, OrgImage[camIdx], qrrlt.Item1, qrrlt.Item2, qrrlt.Item3);
+
+ DataCount = qrdataList.Count;
+ }
+ else DataCount = 0;
+
+ //데이터가 확인되었다면 읽은 경우이다
+ if (DataCount > 0)
+ {
+ var bidx = 0;
+ foreach (var item in qrdataList.OrderByDescending(t => t.sid))
+ {
+ datalist.Add(item.data);
+ ptlist.Add(item.corner);
+ codedata = item;
+
+ if (bcdlist.isEmpty() == false) bcdlist += "\n";
+ bcdlist += $"[#{bidx}] {item.data}";
+ bidx += 1;
+ }
+ }
+
+ var tsrun = DateTime.Now - _CrevisRunTime[camIdx];
+ var dispMessage = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " (" + tsrun.TotalMilliseconds.ToString("N0") + "ms)";
+ if (barcodeMessage.isEmpty() == false) dispMessage += "\n" + barcodeMessage;
+
+ if (bcdlist.isEmpty() == false && lastlogbarcode != bcdlist)
+ {
+ if(bcdlist.Equals(prebarcodedata[camIdx])==false)
+ {
+ PUB.log_[logIdx].Add("BARCODE", "New recognition:" + bcdlist);
+ prebarcodedata[camIdx] = bcdlist;
+ }
+
+ lastlogbarcode = bcdlist;
+ RaiseRemoteCommand(remotelist.barcodeupdate, camIdx, bcdlist); //값이 변경되었으니 표시해준다
+
+ }
+ else if (bcdlist.isEmpty() && lastlogbarcode.isEmpty() == false)
+ {
+ RaiseRemoteCommand(remotelist.barcodeupdate, camIdx, string.Empty);
+ lastlogbarcode = string.Empty;
+ }
+
+ var tsparse = DateTime.Now - parsetime;
+ if (tsparse.TotalMilliseconds >= PUB.setting.GrabDelaySlow)
+ {
+ //var data = codedata.data;//: String.Empty;
+ if (PUB.RequestNewRead)
+ {
+ //신규 요청받고 처음들어온 데이터는 처리하지 말자 - 211213
+ PUB.RequestNewRead = false;
+ }
+ else
+ {
+ if (PUB.setting.SendRawData) //211210
+ {
+ if (PUB.BarcodeParsing(camIdx, qrdataList, "CREVIS"))
+ parsetime = DateTime.Now;
+ else
+ parsetime = DateTime.Now.AddMilliseconds(50);
+ }
+ else
+ {
+ if (PUB.BarcodeParsing(camIdx, datalist, "CREVIS"))
+ parsetime = DateTime.Now;
+ else
+ parsetime = DateTime.Now.AddMilliseconds(50);
+ }
+ }
+ }
+ else //이떄에는 용량을 체크한다. 210805
+ {
+ try
+ {
+ if (PUB.setting.AutoDeleteSeconds > 0 && PUB.setting.AutoDeleteSeconds < 99)
+ {
+ var di = new System.IO.DirectoryInfo(PUB.setting.ImageSavePath);
+ var ttime = DateTime.Now.AddSeconds(-PUB.setting.AutoDeleteSeconds);
+ var dellist = di.GetFiles().Where(t => t.CreationTime <= ttime).FirstOrDefault();
+ if (dellist != null) dellist.Delete();
+ }
+ }
+ catch { }
+ }
+ //iv[camIdx].Invalidate();
+
+ wat.Stop();
+ PUB.ProcessTime[camIdx] = wat.ElapsedMilliseconds;
+ _CrevisRunTime[camIdx] = DateTime.Now;
+ return true;
+ }
+ catch (Exception ex)
+ {
+ //var tracemsg = $"File:{fileName},Line:{lineNumber}\n{TraceInfo}";
+ PUB.log_[logIdx].AddE($"Crevis Process({camIdx}):" + ex.Message);
+ return false;
+ }
+ finally
+ {
+ wat.Stop();
+ mre[camIdx].Set();
+ }
+
+
+ }
+
+ ///
+ /// 판넬이미지 변경
+ ///
+ ///
+ ///
+ ///
+ /// 확인된 qr이 있다면 표시합니다.
+ /// 흰색영역이 마킹된 영역
+ /// QR로 추정되는 영역
+ public static void DrawImage(eTarget target, Panel p, EImageBW8 grabimg,
+ List qrdata = null,
+ List rect_area = null,
+ List rect_reel = null)
+ {
+
+ var roi_reel = target == eTarget.Left ? PUB.setting.ROI_ReelDetect_L : PUB.setting.ROI_ReelDetect_R;
+ var roi_conv = target == eTarget.Left ? PUB.setting.ROI_ConvDetect_L : PUB.setting.ROI_ConvDetect_R;
+ var camIdx = target == eTarget.Left ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+
+ var detect_reel = PUB.DetectReel[camIdx];
+ var detect_conv = PUB.DetectConv[camIdx];
+
+ var zoomx = (p.Width * 1f) / grabimg.Width;
+ var zoomy = (p.Height * 1f) / grabimg.Height;
+
+ using (var g = p.CreateGraphics())
+ {
+ grabimg.Draw(g, zoomx, zoomy);
+
+
+ //이미지의 중앙부분으 포커스를 계산한다.
+ float focus = 0f;
+ if (OrgImage[camIdx].IsVoid == false)
+ {
+ var fw = (int)(OrgImage[camIdx].Width * 0.4f);
+ var fh = (int)(OrgImage[camIdx].Height * 0.4f);
+ var fx = (int)((OrgImage[camIdx].Width - fw) / 2f);
+ var fy = (int)((OrgImage[camIdx].Height - fw) / 2f);
+ //var frect = new Rectangle(fx, fy, fw, fh);
+ g.DrawRectangle(Pens.Gold, fx * zoomx, fy * zoomy, fw * zoomx, fh * zoomy);
+ using (var img = new EROIBW8())
+ {
+ img.Attach(OrgImage[camIdx]);
+ img.SetPlacement(fx, fy, fw, fh);
+ focus = EasyImage.Focusing(img);
+ }
+ }
+
+ using (Font f = new Font("Consolas", 10, FontStyle.Bold))
+ {
+ var msg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") +
+ $"\ncam:{camIdx},focus:{focus}" +
+ $"\nReel:{detect_reel},Value={PUB.DetectReelValue[camIdx]}" +
+ $"\nConv:{detect_conv},Value={PUB.DetectConvValue[camIdx]}";
+
+ g.DrawString(msg, f,
+ Brushes.White, 10, 10);
+ }
+
+ if (roi_reel.IsEmpty == false)
+ {
+ var rect = roi_reel;
+ var x = rect.X * zoomx;
+ var y = rect.Y * zoomy;
+ var w = rect.Width * zoomx;
+ var h = rect.Height * zoomy;
+ g.DrawRectangle(Pens.Lime, x, y, w, h);
+ }
+ if (roi_conv.IsEmpty == false)
+ {
+ var rect = roi_conv;
+ var x = rect.X * zoomx;
+ var y = rect.Y * zoomy;
+ var w = rect.Width * zoomx;
+ var h = rect.Height * zoomy;
+ g.DrawRectangle(Pens.Magenta, x, y, w, h);
+ }
+
+ //border
+ g.DrawRectangle(Pens.White, p.DisplayRectangle);
+
+ //검색영역표시(영역검사)
+ if (rect_area != null && rect_area.Any())
+ {
+ foreach (var item in rect_area)
+ {
+ var x = item.X * zoomx;
+ var y = item.Y * zoomy;
+ var w = item.Width * zoomx;
+ var h = item.Height * zoomy;
+ g.DrawRectangle(Pens.SkyBlue, x, y, w, h);
+ }
+ }
+
+ //검색영역표시(QR검사)
+ if (rect_reel != null && rect_reel.Any())
+ {
+ foreach (var item in rect_reel)
+ {
+ var x = item.X * zoomx;
+ var y = item.Y * zoomy;
+ var w = item.Width * zoomx;
+ var h = item.Height * zoomy;
+ g.DrawRectangle(Pens.Blue, x, y, w, h);
+ }
+ }
+
+
+ //바코드가 검색되었다면?
+ if (qrdata != null && qrdata.Any())
+ {
+ using (Font f = new Font("Consolas", 10, FontStyle.Bold))
+ {
+ foreach (var item in qrdata)
+ {
+ //각코너의 점을 표시한다.
+ var firstX = 0f;
+ var firstY = 0f;
+ foreach (var cn in item.corner)
+ {
+ var x = cn.X * zoomx;
+ var y = cn.Y * zoomy;
+ if (firstX == 0 && firstY == 0)
+ {
+ firstX = x;
+ firstY = y;
+ }
+ }
+ //첫번째 좌표에 데이터를 표시해준다
+ g.DrawString(item.data, f, Brushes.Lime, firstX, firstY);
+ }
+ }
+ }
+
+ g.Dispose();
+
+
+ }
+ }
+
+ public static string[] lastlog = new string[] { string.Empty, string.Empty };
+ public static DateTime[] logtime = new DateTime[] { DateTime.Now, DateTime.Now };
+
+
+ public static bool[] _trigger = new bool[] { false, false };
+ public static DateTime[] triggerTime = new DateTime[] { DateTime.Now, DateTime.Now };
+ public static Boolean[] IsTrigger = new bool[] { false, false };
+
+ public static DateTime TriggerStart = DateTime.Now;
+ public static Boolean BarcodeParsing(int camIdx, List data, string source, Boolean force = false)
+ {
+ var camTarget = PUB.GetTarget(camIdx);
+ if (camTarget == eTarget.None) return false;
+ var logIdx = camTarget == eTarget.Left ? 0 : 1;
+ var datatagstr = string.Empty;
+ foreach (var item in data)
+ if (item.data.isEmpty() == false)
+ {
+ if (datatagstr.Length > 0) datatagstr += "\n";
+ datatagstr += item.data;
+ }
+
+ PUB.lastbcd[camIdx] = datatagstr;
+
+ //스트림데이터가 꺼져있다면 처리하지 않는다.
+ if (force == false && PUB.setting.DisableStreamData)
+ {
+ //트리거모드일때 보내는 플래그가 없다면 보내지 않는다.
+ if (PUB.IsTrigger[camIdx] == false)
+ {
+ PUB.log_[logIdx].AddAT($"[SKIP-SEND] No Trigger Signal");
+ return false;
+ }
+ }
+ //TriggerSend = false;
+
+ //통신이 연결되어있지 않다면 처리하지 않는다
+ if (PUB.wsock_[logIdx].IsListening == false || PUB.wsock_[logIdx].ListClients().Count() < 1)
+ {
+ PUB.log_[logIdx].AddAT($"[SKIP-SEND] Disconnected");
+ return false;
+ }
+
+ //파일을 저장한다.
+ var path = "";
+ if (PUB.mre[camIdx].WaitOne(100))
+ {
+ try
+ {
+ PUB.mre[camIdx].Reset();
+ path = System.IO.Path.Combine(PUB.setting.ImageSavePath, $"[{camIdx}]barcode_{DateTime.Now.ToString("HHmmssfff")}.jpg");
+ var fi = new System.IO.FileInfo(path);
+ if (fi.Directory.Exists == false) fi.Directory.Create();
+ PUB.OrgImage[camIdx].Save(fi.FullName);
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"Save failed {ex.Message}");
+ }
+ finally
+ {
+ PUB.mre[camIdx].Set();
+ }
+ }
+ else
+ {
+ PUB.log_[logIdx].AddE($"Save failed (object is locked)");
+ }
+
+ //데이터 생성
+ var msg = new
+ {
+ guid = PUB.lastguid[camIdx],
+ command = PUB.lastcmd[camIdx],
+ data = data,
+ time = DateTime.Now.ToString(),
+ file = path
+ };
+
+
+ var json = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
+ Boolean sendok = false;
+ try
+ {
+ if (PUB.setting.Log_BarcodeTx)
+ {
+ if (lastlog[camIdx] == datatagstr)
+ {
+ var tsee = DateTime.Now - logtime[camIdx];
+ if (tsee.TotalSeconds > 60)
+ {
+ PUB.log_[logIdx].AddI(json);
+ lastlog[camIdx] = datatagstr;
+ logtime[camIdx] = DateTime.Now;
+ }
+ }
+ else
+ {
+ PUB.log_[logIdx].AddI(json);
+ lastlog[camIdx] = datatagstr;
+ }
+ }
+ //PUB.ws[camIdx].ListClients().ToList().ForEach(t => PUB.ws[camIdx].SendAsync(t, json).Wait());
+ PUB.lastsend[camIdx] = DateTime.Now;
+ Send_WSock(camTarget, json);
+ if (msg.guid.isEmpty() == false)
+ PUB.log_[logIdx].Add("Tx", json);
+ sendok = true;
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"Send failed {ex.Message}");
+ sendok = false;
+ }
+
+ if (sendok == false)
+ {
+ try
+ {
+ PUB.log_[logIdx].AddAT("Closing server due to send failure");
+ Time_WS_Listen[camIdx] = DateTime.Now;
+ PUB.wsock_[logIdx].Stop();
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"Server shutdown failed:{ex.Message}");
+ }
+ return false;
+ }
+ else return true;
+ }
+ public static ManualResetEvent[] mre_send = new ManualResetEvent[2];
+ public static bool Send_WSock(eTarget camTarget, string data)
+ {
+ if (camTarget == eTarget.None) return false;
+ var camIdx = camTarget == eTarget.Left ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camTarget == eTarget.Left ? 0 : 1;
+ if (PUB.wsock_[logIdx].IsListening == false || PUB.wsock_[logIdx].ListClients().Count() < 1)
+ {
+ PUB.log_[logIdx].AddAT($"[IGNORE-SEND] Not Listening or No Clients");
+ return false;
+ }
+
+ if (mre_send[camIdx].WaitOne(1000) == false)
+ {
+ PUB.log_[logIdx].AddE($"send error by mre-lock");
+ return false;
+ }
+ mre_send[camIdx].Reset();
+ var ws = PUB.wsock_[logIdx];
+ try
+ {
+ ws.ListClients().ToList().ForEach(t => ws.SendAsync(t, data).Wait());
+ PUB.log_[logIdx].AddI($"send Complete {data}");
+ return true;
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"send error by {ex.Message}");
+ return false;
+ }
+ finally
+ {
+ mre_send[camIdx].Set();
+ }
+
+ }
+ //마지막으로 전송에 사용한 데이터를 임시 저장한다. -211213 // 데이터 missing 현상 관련 처리 작업
+ public static string[] lastTxGuid = new string[] { string.Empty, string.Empty };
+ public static string[] lastTxRID = new string[] { string.Empty, string.Empty };
+ public static DateTime lastTxTime = DateTime.Now;
+
+ public static Boolean BarcodeParsing(int camIdx, List data, string source)
+ {
+ if (data == null || data.Count < 1) return false;
+
+ PUB.lastbcd[camIdx] = string.Join("|", data);
+ var camTarget = PUB.GetTarget(camIdx);
+ if (camTarget == eTarget.None) return false;
+ var logIdx = camTarget == eTarget.Left ? 0 : 1;
+
+ //스트림데이터가 꺼져있다면 처리하지 않는다.
+ if (PUB.setting.DisableStreamData)
+ {
+ //트리거모드일때 보내는 플래그가 없다면 보내지 않는다.
+ if (IsTrigger[camIdx] == false) return false;
+ }
+
+
+ //통신이 연결되어있지 않다면 처리하지 않는다
+ if (PUB.wsock_[logIdx].IsListening == false || PUB.wsock_[logIdx].ListClients().Count() < 1) return false;
+
+ //파일을 저장한다.
+ var path = "";
+ if (PUB.mre[camIdx].WaitOne(100))
+ {
+
+ try
+ {
+ path = System.IO.Path.Combine(PUB.setting.ImageSavePath, $"[{camIdx}]barcode_{DateTime.Now.ToString("HHmmssfff")}.jpg");
+ PUB.mre[camIdx].Reset();
+ var fi = new System.IO.FileInfo(path);
+ if (fi.Directory.Exists == false) fi.Directory.Create();
+ PUB.OrgImage[camIdx].Save(fi.FullName);
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"Save failed {ex.Message}");
+ }
+ finally
+ {
+ PUB.mre[camIdx].Set();
+ }
+ }
+
+
+ //데이터 생성
+ var msg = new
+ {
+ guid = PUB.lastguid[camIdx],
+ command = PUB.lastcmd[camIdx],
+ data = data,
+ time = DateTime.Now.ToString(),
+ file = path
+ };
+
+ //마지막으로전송한 RID값이 동일한경우
+ if (lastTxRID[camIdx].Trim() == PUB.lastbcd[camIdx].Trim())
+ {
+ if (lastTxGuid[camIdx].Trim() != PUB.lastguid[camIdx].Trim())
+ {
+ var tsTx = DateTime.Now - lastTxTime;
+ if (tsTx.TotalSeconds < 5)
+ {
+ //GUID가 다른데 rid가 같다 /
+ //missing data 의 패턴잉ㅆ다. 2113
+ //이때는 전송하지 않고 그냥 skip하게한다.
+ PUB.lastguid[camIdx] = string.Empty;
+ PUB.lastcmd[camIdx] = string.Empty;
+ PUB.log_[logIdx].Add($"Only GUID of last transmission data differs, processing skip. (within 5 seconds only)");
+ return false;
+ }
+ }
+ }
+
+ //마지막으로 전송한 데이터 값 저장
+ lastTxGuid[camIdx] = PUB.lastguid[camIdx];
+ lastTxRID = PUB.lastbcd;
+ lastTxTime = DateTime.Now;
+
+
+ var json = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
+ Boolean sendok = false;
+ try
+ {
+ if (PUB.lastbcd[camIdx].isEmpty() == false && PUB.setting.Log_BarcodeTx)
+ {
+ if (lastlog[camIdx] == PUB.lastbcd[camIdx])
+ {
+ var tsee = DateTime.Now - logtime[camIdx];
+ if (tsee.TotalSeconds > 60)
+ {
+ PUB.log_[logIdx].AddI(json);
+ lastlog[camIdx] = PUB.lastbcd[camIdx];
+ logtime[camIdx] = DateTime.Now;
+ }
+ }
+ else
+ {
+ PUB.log_[logIdx].AddI(json);
+ lastlog[camIdx] = PUB.lastbcd[camIdx];
+ }
+ }
+ //PUB.ws[camIdx].ListClients().ToList().ForEach(t => PUB.ws[camIdx].SendAsync(t, json).Wait());
+ PUB.lastsend[camIdx] = DateTime.Now;
+ Send_WSock(camTarget, json);
+ if (msg.guid.isEmpty() == false)
+ PUB.log_[logIdx].Add("Tx", json);
+
+ sendok = true;
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].Add($"Send failed {ex.Message}");
+ sendok = false;
+ }
+
+ if (sendok == false)
+ {
+ try
+ {
+ PUB.log_[logIdx].AddAT("Closing server due to send failure");
+ PUB.Time_WS_Listen[camIdx] = DateTime.Now;
+ PUB.wsock_[logIdx].Stop();
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"Server shutdown failed:{ex.Message}");
+ }
+ try
+ {
+ PUB.log_[logIdx].AddAT("Closing socket due to send failure");
+ PUB.wsock_[logIdx].Stop();
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"Socket shutdown failed:{ex.Message}");
+ }
+ return false;
+ }
+ else return true;
+ }
+
+ public static DateTime[] Time_WS_Connected = new DateTime[2];
+ public static DateTime[] Time_WS_Disconnected = new DateTime[2];
+ public static DateTime[] Time_WS_Listen = new DateTime[2];
+ public static DateTime[] Time_WS_Listen_Try = new DateTime[2];
+ public static DateTime[] Time_WS_Recv = new DateTime[2];
+ public static string[] WS_LastRecv = new string[] { string.Empty, string.Empty };
+ public static string[] WS_LastSend = new string[] { string.Empty, string.Empty };
+
+
+ public static void ChangeUIPopup(System.Windows.Forms.NumericUpDown valueCtl)
+ {
+ var value = valueCtl.Value.ToString();
+ var f = AR.UTIL.InputBox("input value", value);// new Dialog.fInput(value);
+ if(f.Item1 == true)
+ {
+ var val = decimal.Parse(f.Item2);
+ if (val < valueCtl.Minimum)
+ {
+ UTIL.MsgE(string.Format("Minimum input value is {0}.", valueCtl.Minimum));
+ val = valueCtl.Minimum;
+ }
+ if (val > valueCtl.Maximum)
+ {
+ UTIL.MsgE(string.Format("Maximum input value is {0}.", valueCtl.Maximum));
+ val = valueCtl.Maximum;
+ }
+ valueCtl.Value = val;
+ }
+
+ }
+
+ }
+}
diff --git a/QRValidation/Project/Program.cs b/QRValidation/Project/Program.cs
new file mode 100644
index 0000000..825e9f7
--- /dev/null
+++ b/QRValidation/Project/Program.cs
@@ -0,0 +1,127 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Resources;
+using System.Threading;
+using System.Diagnostics;
+
+namespace Project
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
+ AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
+ if (CheckSingleInstance() == false) return;
+ PUB.initCore();
+ Application.Run(new fMain());
+ }
+
+ static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
+ {
+ string emsg = "Fatal Error(UHE)\n\n" + e.ExceptionObject.ToString();
+ PUB.log_[0].AddE(emsg);
+ PUB.log_[0].Flush();
+ PUB.log_[1].AddE(emsg);
+ PUB.log_[1].Flush();
+ Util.SaveBugReport(emsg);
+ Shutdown();
+ var f = new fErrorException(emsg);
+ f.ShowDialog();
+ Application.ExitThread();
+ }
+
+ ///
+ /// Check for duplicate execution prevention
+ ///
+ /// true if single instance, false if duplicate execution
+ static bool CheckSingleInstance()
+ {
+ string processName = Process.GetCurrentProcess().ProcessName;
+ Process[] processes = Process.GetProcessesByName(processName);
+
+ if (processes.Length > 1)
+ {
+ // 중복실행 감지
+ string message = $"⚠️ {Application.ProductName} program is already running!\n\n" +
+ "Cannot run multiple programs simultaneously.\n\n" +
+ "Please select a solution:";
+
+ var result = MessageBox.Show(message + "\n\nYes(Y): Terminate existing program and start new\nNo(N): Cancel current execution",
+ "Duplicate Execution Detected",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Warning);
+
+ if (result == DialogResult.Yes)
+ {
+ // 기존 프로세스들을 종료
+ try
+ {
+ int currentProcessId = Process.GetCurrentProcess().Id;
+ foreach (Process process in processes)
+ {
+ if (process.Id != currentProcessId)
+ {
+ process.Kill();
+ process.WaitForExit(3000); // 3초 대기
+ }
+ }
+
+ // 잠시 대기 후 계속 진행
+ Thread.Sleep(1000);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"An error occurred while terminating the existing program:\n{ex.Message}\n\n" +
+ "Please terminate manually in Task Manager.",
+ "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+ else
+ {
+ // 현재 실행을 취소
+ return false;
+ }
+ }
+
+ return true; // 단일 인스턴스
+ }
+
+
+
+ static void Shutdown()
+ {
+ PUB.log_[0].Add("Program Close");
+ PUB.log_[0].Flush();
+ PUB.log_[1].Add("Program Close");
+ PUB.log_[1].Flush();
+ }
+
+ static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
+ {
+ string emsg = "Fatal Error(ATE)\n\n" + e.Exception.ToString();
+ PUB.log_[0].AddE(emsg);
+ PUB.log_[0].Flush();
+ PUB.log_[1].AddE(emsg);
+ PUB.log_[1].Flush();
+ AR.UTIL.SaveBugReport(emsg);
+ Shutdown();
+ var f = new fErrorException(emsg);
+ f.ShowDialog();
+ Application.ExitThread();
+ }
+ }
+}
diff --git a/QRValidation/Project/Properties/AssemblyInfo.cs b/QRValidation/Project/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..6e8b01b
--- /dev/null
+++ b/QRValidation/Project/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("※ Crevis QR-Code Reader")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Amkor K4")]
+[assembly: AssemblyProduct("※ Crevis QR-Code Reader")]
+[assembly: AssemblyCopyright("Copyright ©Amkor-EET 2021")]
+[assembly: AssemblyTrademark("EET")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("65f3e762-800c-772e-1818-b444642ec59f")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
+// 지정되도록 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("25.01.13.1120")]
+[assembly: AssemblyFileVersion("25.01.13.1120")]
diff --git a/QRValidation/Project/Properties/Resources.Designer.cs b/QRValidation/Project/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2c87022
--- /dev/null
+++ b/QRValidation/Project/Properties/Resources.Designer.cs
@@ -0,0 +1,173 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace Project.Properties {
+ using System;
+
+
+ ///
+ /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+ ///
+ // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+ // 클래스에서 자동으로 생성되었습니다.
+ // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
+ // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Project.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대한 현재 스레드의 CurrentUICulture
+ /// 속성을 재정의합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_cancel_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-cancel-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_checked_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-checked-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_checked_radio_button_48 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-checked-radio-button-48", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_copy_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-copy-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_exercise_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-exercise-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_new_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-new-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_no_running_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-no-running-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_plus_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-plus-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_running_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-running-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_save_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-save-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
+ ///
+ internal static System.Drawing.Bitmap icons8_unavailable_40 {
+ get {
+ object obj = ResourceManager.GetObject("icons8-unavailable-40", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/QRValidation/Project/Properties/Resources.resx b/QRValidation/Project/Properties/Resources.resx
new file mode 100644
index 0000000..946ae84
--- /dev/null
+++ b/QRValidation/Project/Properties/Resources.resx
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ ..\Resources\icons8-plus-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-no-running-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-save-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-unavailable-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-new-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-checked-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-exercise-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-running-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-checked-radio-button-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-cancel-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\icons8-copy-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/Properties/Settings.Designer.cs b/QRValidation/Project/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..7d14313
--- /dev/null
+++ b/QRValidation/Project/Properties/Settings.Designer.cs
@@ -0,0 +1,50 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace Project.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("BLUPRT.CBX012020_rzDFf7pQAsCS")]
+ public string chilkat {
+ get {
+ return ((string)(this["chilkat"]));
+ }
+ set {
+ this["chilkat"] = value;
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)]
+ [global::System.Configuration.DefaultSettingValueAttribute("http://k1xip00.amkor.co.kr:50000/XISOAPAdapter/MessageServlet?senderParty=&sender" +
+ "Service=eCIM_ATK&receiverParty=&receiverService=&interface=ZK_RFID_TRANS_SEQ&int" +
+ "erfaceNamespace=urn%3Asap-com%3Adocument%3Asap%3Arfc%3Afunctions")]
+ public string Logistics_Vision_wr_ZK_RFID_TRANS_SEQService {
+ get {
+ return ((string)(this["Logistics_Vision_wr_ZK_RFID_TRANS_SEQService"]));
+ }
+ }
+ }
+}
diff --git a/QRValidation/Project/Properties/Settings.settings b/QRValidation/Project/Properties/Settings.settings
new file mode 100644
index 0000000..bc6c0fb
--- /dev/null
+++ b/QRValidation/Project/Properties/Settings.settings
@@ -0,0 +1,12 @@
+
+
+
+
+
+ BLUPRT.CBX012020_rzDFf7pQAsCS
+
+
+ http://k1xip00.amkor.co.kr:50000/XISOAPAdapter/MessageServlet?senderParty=&senderService=eCIM_ATK&receiverParty=&receiverService=&interface=ZK_RFID_TRANS_SEQ&interfaceNamespace=urn%3Asap-com%3Adocument%3Asap%3Arfc%3Afunctions
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/Resources/icons8-cancel-40.png b/QRValidation/Project/Resources/icons8-cancel-40.png
new file mode 100644
index 0000000..7d1f298
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-cancel-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-checked-40.png b/QRValidation/Project/Resources/icons8-checked-40.png
new file mode 100644
index 0000000..8d08969
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-checked-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-checked-radio-button-48.png b/QRValidation/Project/Resources/icons8-checked-radio-button-48.png
new file mode 100644
index 0000000..7130e2f
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-checked-radio-button-48.png differ
diff --git a/QRValidation/Project/Resources/icons8-copy-40.png b/QRValidation/Project/Resources/icons8-copy-40.png
new file mode 100644
index 0000000..29c6ef5
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-copy-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-exercise-40.png b/QRValidation/Project/Resources/icons8-exercise-40.png
new file mode 100644
index 0000000..ee72597
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-exercise-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-new-40.png b/QRValidation/Project/Resources/icons8-new-40.png
new file mode 100644
index 0000000..85f3a28
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-new-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-no-running-40.png b/QRValidation/Project/Resources/icons8-no-running-40.png
new file mode 100644
index 0000000..be7c877
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-no-running-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-plus-40.png b/QRValidation/Project/Resources/icons8-plus-40.png
new file mode 100644
index 0000000..aab1bc3
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-plus-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-running-40.png b/QRValidation/Project/Resources/icons8-running-40.png
new file mode 100644
index 0000000..6329e3a
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-running-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-save-40.png b/QRValidation/Project/Resources/icons8-save-40.png
new file mode 100644
index 0000000..a096fb1
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-save-40.png differ
diff --git a/QRValidation/Project/Resources/icons8-unavailable-40.png b/QRValidation/Project/Resources/icons8-unavailable-40.png
new file mode 100644
index 0000000..ecf2604
Binary files /dev/null and b/QRValidation/Project/Resources/icons8-unavailable-40.png differ
diff --git a/QRValidation/Project/Setting/CSetting.cs b/QRValidation/Project/Setting/CSetting.cs
new file mode 100644
index 0000000..71b75d7
--- /dev/null
+++ b/QRValidation/Project/Setting/CSetting.cs
@@ -0,0 +1,195 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel;
+using AR;
+using System.Drawing.Design;
+
+namespace Project
+{
+ public class CSetting : AR.Setting
+ {
+ public System.Drawing.Rectangle ROI_ReelDetect_L { get; set; }
+ public System.Drawing.Rectangle ROI_ReelDetect_R { get; set; }
+ public System.Drawing.Rectangle ROI_ConvDetect_L { get; set; }
+ public System.Drawing.Rectangle ROI_ConvDetect_R { get; set; }
+
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int ConvDetectValueL { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int ConvDetectValueR { get; set; }
+
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public string cameraname { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int GrabDelayFast { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int GrabDelaySlow { get; set; }
+
+ [Description("Unit(seconds)"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int TriggerTimeout { get; set; }
+
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int AutoDeleteSeconds { get; set; }
+ public Boolean SendRawData { get; set; }
+ public Boolean DisableStreamData { get; set; }
+ public Boolean EnableDupRun { get; set; }
+
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public string ImageSavePath { get; set; }
+ public Boolean Log_AllBarcode { get; set; }
+ public Boolean Log_Ping { get; set; }
+ public Boolean Log_BarcodeTx { get; set; }
+ public Boolean Log_BarcodeRx { get; set; }
+
+ [Category("Developer Setting"), DisplayName("Listening Port(Left)"),
+ Description("Listening port for server communication(TCP) - Default: 7979")]
+ public int listenPortL { get; set; }
+ [Category("Developer Setting"), DisplayName("Listening Port(Right)"),
+ Description("Listening port for server communication(TCP) - Default: 7980")]
+ public int listenPortR { get; set; }
+
+ [Category("Save Data Path"), DisplayName("Data Save Path")]
+ public string Path_Data { get; set; }
+
+
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public int processCount { get; set; }
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public string erodevaluestr { get; set; }
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public uint blob_area_min { get; set; }
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public uint blob_area_max { get; set; }
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_sigmaxy { get; set; }
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_sigmayy { get; set; }
+ [Category("Vision"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_sigmaxx { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_rosscaleX { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_rosscaleY { get; set; }
+
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_minw { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_maxw { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_minh { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
+ public float blob_maxh { get; set; }
+
+ [Category("Vision")]
+ public Boolean SaveErrorImage { get; set; }
+ [Category("Vision")]
+ public string GainOffsetListStr { get; set; }
+
+
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor)), Description("Enter -1 if not used")]
+ public int CameraIndexL { get; set; }
+ [Editor(typeof(MyUITypeEditor), typeof(UITypeEditor)), Description("Enter -1 if not used")]
+ public int CameraIndexR { get; set; }
+
+
+ [Category("General Setting"), Browsable(false)]
+ public string Password_Setup { get; set; }
+
+ [Category("General Setting"), DisplayName("Full Screen Window State"),
+ Description("Use full screen mode.")]
+ public Boolean FullScreen { get; set; }
+
+ [Category("General Setting")]
+ public Boolean EnableDebugMode { get; set; }
+
+ public override void AfterLoad()
+ {
+ if (blob_minh == 0 && blob_maxh == 0)
+ {
+ blob_minh = 70;
+ blob_maxh = 190;
+ }
+ if (blob_minw == 0 && blob_maxw == 0)
+ {
+ blob_minw = 70;
+ blob_maxw = 190;
+ }
+ //if (TriggerTimeout == 0) TriggerTimeout = 30;
+ if (GrabDelayFast == 0) GrabDelayFast = 250;
+ if (GrabDelaySlow == 0) GrabDelaySlow = 500;
+ if (ImageSavePath.isEmpty()) ImageSavePath = Util.CurrentPath;
+
+ if (AutoDeleteSeconds == 0) AutoDeleteSeconds = 10;
+
+ if (blob_rosscaleX == 0) blob_rosscaleX = 1.5f;
+
+ if (blob_rosscaleY == 0) blob_rosscaleY = 1.5f;
+
+ if (processCount == 0 && blob_area_min == 0)
+ {
+ processCount = 6;
+ erodevaluestr = "3,1";
+ blob_area_min = 5000;
+ blob_area_max = 50000;
+ blob_sigmaxy = 500f;
+ blob_sigmaxx = 5000f;
+ blob_sigmayy = 500f;
+ }
+
+ if (GainOffsetListStr.isEmpty())
+ {
+ GainOffsetListStr = "1,0;1.3,0;1,50;1,-50;3,50;0.5,-20;2.5,150;2,0";
+ }
+
+ if (listenPortL == 0) listenPortL = 7979;
+ if (listenPortR == 0) listenPortR = 7980;
+ if (Password_Setup.isEmpty()) Password_Setup = "0000";
+ if (Path_Data == "")
+ Path_Data = System.IO.Path.Combine(Util.CurrentPath, "SaveData");
+
+ try
+ {
+ if (System.IO.Directory.Exists(Path_Data) == false)
+ System.IO.Directory.CreateDirectory(Path_Data);
+
+ }
+ catch
+ {
+
+ }
+
+ //if (Password_User.isEmpty()) Password_User = "9999";
+
+
+ }
+ public override void AfterSave()
+ {
+ //throw new NotImplementedException();
+ }
+
+ public void CopyTo(CSetting dest)
+ {
+ //이곳의 모든 쓰기가능한 속성값을 대상에 써준다.
+ Type thClass = this.GetType();
+ foreach (var method in thClass.GetMethods())
+ {
+ var parameters = method.GetParameters();
+ if (!method.Name.StartsWith("get_")) continue;
+
+ string keyname = method.Name.Substring(4);
+ string methodName = method.Name;
+
+ object odata = GetType().GetMethod(methodName).Invoke(this, null);
+ var wMethod = dest.GetType().GetMethod(Convert.ToString("set_") + keyname);
+ if (wMethod != null) wMethod.Invoke(dest, new object[] { odata });
+ }
+ }
+ }
+
+
+
+
+
+}
diff --git a/QRValidation/Project/Setting/fSetting.Designer.cs b/QRValidation/Project/Setting/fSetting.Designer.cs
new file mode 100644
index 0000000..9c92450
--- /dev/null
+++ b/QRValidation/Project/Setting/fSetting.Designer.cs
@@ -0,0 +1,497 @@
+namespace Project
+{
+ partial class fSetting
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fSetting));
+ this.button1 = new System.Windows.Forms.Button();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.bindingNavigatorAddNewItem = new System.Windows.Forms.ToolStripButton();
+ this.bindingNavigatorCountItem = new System.Windows.Forms.ToolStripLabel();
+ this.bindingNavigatorDeleteItem = new System.Windows.Forms.ToolStripButton();
+ this.bindingNavigatorMoveFirstItem = new System.Windows.Forms.ToolStripButton();
+ this.bindingNavigatorMovePreviousItem = new System.Windows.Forms.ToolStripButton();
+ this.bindingNavigatorSeparator = new System.Windows.Forms.ToolStripSeparator();
+ this.bindingNavigatorPositionItem = new System.Windows.Forms.ToolStripTextBox();
+ this.bindingNavigatorSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.bindingNavigatorMoveNextItem = new System.Windows.Forms.ToolStripButton();
+ this.bindingNavigatorMoveLastItem = new System.Windows.Forms.ToolStripButton();
+ this.bindingNavigatorSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton5 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
+ this.toolStripButton6 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton7 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton8 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripTextBox1 = new System.Windows.Forms.ToolStripTextBox();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton9 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton10 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton11 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
+ this.toolStripButton12 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton13 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton14 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripTextBox2 = new System.Windows.Forms.ToolStripTextBox();
+ this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton15 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton16 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+ this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components);
+ this.panel1.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.panel2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.button1.Location = new System.Drawing.Point(5, 5);
+ this.button1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(601, 53);
+ this.button1.TabIndex = 0;
+ this.button1.Text = "Save(&S)";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.button1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panel1.Location = new System.Drawing.Point(0, 557);
+ this.panel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.panel1.Name = "panel1";
+ this.panel1.Padding = new System.Windows.Forms.Padding(5);
+ this.panel1.Size = new System.Drawing.Size(611, 63);
+ this.panel1.TabIndex = 1;
+ //
+ // propertyGrid1
+ //
+ this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.propertyGrid1.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.propertyGrid1.LineColor = System.Drawing.SystemColors.ControlDark;
+ this.propertyGrid1.Location = new System.Drawing.Point(3, 3);
+ this.propertyGrid1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.propertyGrid1.Name = "propertyGrid1";
+ this.propertyGrid1.Size = new System.Drawing.Size(597, 518);
+ this.propertyGrid1.TabIndex = 1;
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point(0, 0);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(611, 557);
+ this.tabControl1.TabIndex = 2;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.propertyGrid1);
+ this.tabPage1.Location = new System.Drawing.Point(4, 29);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(603, 524);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "Advanced";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // panel2
+ //
+ this.panel2.Controls.Add(this.textBox1);
+ this.panel2.Controls.Add(this.label1);
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panel2.Location = new System.Drawing.Point(3, 322);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(597, 199);
+ this.panel2.TabIndex = 6;
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(10, 38);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(575, 148);
+ this.textBox1.TabIndex = 2;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(8, 11);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(61, 12);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Mail Subject:";
+ //
+ // bindingNavigatorAddNewItem
+ //
+ this.bindingNavigatorAddNewItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.bindingNavigatorAddNewItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorAddNewItem.Image")));
+ this.bindingNavigatorAddNewItem.Name = "bindingNavigatorAddNewItem";
+ this.bindingNavigatorAddNewItem.RightToLeftAutoMirrorImage = true;
+ this.bindingNavigatorAddNewItem.Size = new System.Drawing.Size(23, 22);
+ this.bindingNavigatorAddNewItem.Text = "Add New";
+ //
+ // bindingNavigatorCountItem
+ //
+ this.bindingNavigatorCountItem.Name = "bindingNavigatorCountItem";
+ this.bindingNavigatorCountItem.Size = new System.Drawing.Size(27, 22);
+ this.bindingNavigatorCountItem.Text = "/{0}";
+ this.bindingNavigatorCountItem.ToolTipText = "Total items";
+ //
+ // bindingNavigatorDeleteItem
+ //
+ this.bindingNavigatorDeleteItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.bindingNavigatorDeleteItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorDeleteItem.Image")));
+ this.bindingNavigatorDeleteItem.Name = "bindingNavigatorDeleteItem";
+ this.bindingNavigatorDeleteItem.RightToLeftAutoMirrorImage = true;
+ this.bindingNavigatorDeleteItem.Size = new System.Drawing.Size(23, 22);
+ this.bindingNavigatorDeleteItem.Text = "Delete";
+ //
+ // bindingNavigatorMoveFirstItem
+ //
+ this.bindingNavigatorMoveFirstItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.bindingNavigatorMoveFirstItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveFirstItem.Image")));
+ this.bindingNavigatorMoveFirstItem.Name = "bindingNavigatorMoveFirstItem";
+ this.bindingNavigatorMoveFirstItem.RightToLeftAutoMirrorImage = true;
+ this.bindingNavigatorMoveFirstItem.Size = new System.Drawing.Size(23, 22);
+ this.bindingNavigatorMoveFirstItem.Text = "Move first";
+ //
+ // bindingNavigatorMovePreviousItem
+ //
+ this.bindingNavigatorMovePreviousItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.bindingNavigatorMovePreviousItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMovePreviousItem.Image")));
+ this.bindingNavigatorMovePreviousItem.Name = "bindingNavigatorMovePreviousItem";
+ this.bindingNavigatorMovePreviousItem.RightToLeftAutoMirrorImage = true;
+ this.bindingNavigatorMovePreviousItem.Size = new System.Drawing.Size(23, 22);
+ this.bindingNavigatorMovePreviousItem.Text = "Move previous";
+ //
+ // bindingNavigatorSeparator
+ //
+ this.bindingNavigatorSeparator.Name = "bindingNavigatorSeparator";
+ this.bindingNavigatorSeparator.Size = new System.Drawing.Size(6, 25);
+ //
+ // bindingNavigatorPositionItem
+ //
+ this.bindingNavigatorPositionItem.AccessibleName = "Position";
+ this.bindingNavigatorPositionItem.AutoSize = false;
+ this.bindingNavigatorPositionItem.Name = "bindingNavigatorPositionItem";
+ this.bindingNavigatorPositionItem.Size = new System.Drawing.Size(50, 23);
+ this.bindingNavigatorPositionItem.Text = "0";
+ this.bindingNavigatorPositionItem.ToolTipText = "Current position";
+ //
+ // bindingNavigatorSeparator1
+ //
+ this.bindingNavigatorSeparator1.Name = "bindingNavigatorSeparator1";
+ this.bindingNavigatorSeparator1.Size = new System.Drawing.Size(6, 25);
+ //
+ // bindingNavigatorMoveNextItem
+ //
+ this.bindingNavigatorMoveNextItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.bindingNavigatorMoveNextItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveNextItem.Image")));
+ this.bindingNavigatorMoveNextItem.Name = "bindingNavigatorMoveNextItem";
+ this.bindingNavigatorMoveNextItem.RightToLeftAutoMirrorImage = true;
+ this.bindingNavigatorMoveNextItem.Size = new System.Drawing.Size(23, 22);
+ this.bindingNavigatorMoveNextItem.Text = "Move next";
+ //
+ // bindingNavigatorMoveLastItem
+ //
+ this.bindingNavigatorMoveLastItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.bindingNavigatorMoveLastItem.Image = ((System.Drawing.Image)(resources.GetObject("bindingNavigatorMoveLastItem.Image")));
+ this.bindingNavigatorMoveLastItem.Name = "bindingNavigatorMoveLastItem";
+ this.bindingNavigatorMoveLastItem.RightToLeftAutoMirrorImage = true;
+ this.bindingNavigatorMoveLastItem.Size = new System.Drawing.Size(23, 22);
+ this.bindingNavigatorMoveLastItem.Text = "Move last";
+ //
+ // bindingNavigatorSeparator2
+ //
+ this.bindingNavigatorSeparator2.Name = "bindingNavigatorSeparator2";
+ this.bindingNavigatorSeparator2.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButton5
+ //
+ this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton5.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton5.Image")));
+ this.toolStripButton5.Name = "toolStripButton5";
+ this.toolStripButton5.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton5.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton5.Text = "Add New";
+ //
+ // toolStripLabel1
+ //
+ this.toolStripLabel1.Name = "toolStripLabel1";
+ this.toolStripLabel1.Size = new System.Drawing.Size(27, 22);
+ this.toolStripLabel1.Text = "/{0}";
+ this.toolStripLabel1.ToolTipText = "Total items";
+ //
+ // toolStripButton6
+ //
+ this.toolStripButton6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton6.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton6.Image")));
+ this.toolStripButton6.Name = "toolStripButton6";
+ this.toolStripButton6.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton6.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton6.Text = "Delete";
+ //
+ // toolStripButton7
+ //
+ this.toolStripButton7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton7.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton7.Image")));
+ this.toolStripButton7.Name = "toolStripButton7";
+ this.toolStripButton7.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton7.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton7.Text = "Move first";
+ //
+ // toolStripButton8
+ //
+ this.toolStripButton8.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton8.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton8.Image")));
+ this.toolStripButton8.Name = "toolStripButton8";
+ this.toolStripButton8.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton8.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton8.Text = "Move previous";
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripTextBox1
+ //
+ this.toolStripTextBox1.AccessibleName = "Position";
+ this.toolStripTextBox1.AutoSize = false;
+ this.toolStripTextBox1.Name = "toolStripTextBox1";
+ this.toolStripTextBox1.Size = new System.Drawing.Size(50, 23);
+ this.toolStripTextBox1.Text = "0";
+ this.toolStripTextBox1.ToolTipText = "Current position";
+ //
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButton9
+ //
+ this.toolStripButton9.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton9.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton9.Image")));
+ this.toolStripButton9.Name = "toolStripButton9";
+ this.toolStripButton9.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton9.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton9.Text = "Move next";
+ //
+ // toolStripButton10
+ //
+ this.toolStripButton10.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton10.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton10.Image")));
+ this.toolStripButton10.Name = "toolStripButton10";
+ this.toolStripButton10.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton10.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton10.Text = "Move last";
+ //
+ // toolStripSeparator3
+ //
+ this.toolStripSeparator3.Name = "toolStripSeparator3";
+ this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButton11
+ //
+ this.toolStripButton11.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton11.Image")));
+ this.toolStripButton11.Name = "toolStripButton11";
+ this.toolStripButton11.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton11.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton11.Text = "Add New";
+ //
+ // toolStripLabel2
+ //
+ this.toolStripLabel2.Name = "toolStripLabel2";
+ this.toolStripLabel2.Size = new System.Drawing.Size(27, 22);
+ this.toolStripLabel2.Text = "/{0}";
+ this.toolStripLabel2.ToolTipText = "Total items";
+ //
+ // toolStripButton12
+ //
+ this.toolStripButton12.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton12.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton12.Image")));
+ this.toolStripButton12.Name = "toolStripButton12";
+ this.toolStripButton12.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton12.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton12.Text = "Delete";
+ //
+ // toolStripButton13
+ //
+ this.toolStripButton13.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image")));
+ this.toolStripButton13.Name = "toolStripButton13";
+ this.toolStripButton13.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton13.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton13.Text = "Move first";
+ //
+ // toolStripButton14
+ //
+ this.toolStripButton14.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
+ this.toolStripButton14.Name = "toolStripButton14";
+ this.toolStripButton14.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton14.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton14.Text = "Move previous";
+ //
+ // toolStripSeparator4
+ //
+ this.toolStripSeparator4.Name = "toolStripSeparator4";
+ this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripTextBox2
+ //
+ this.toolStripTextBox2.AccessibleName = "Position";
+ this.toolStripTextBox2.AutoSize = false;
+ this.toolStripTextBox2.Name = "toolStripTextBox2";
+ this.toolStripTextBox2.Size = new System.Drawing.Size(50, 23);
+ this.toolStripTextBox2.Text = "0";
+ this.toolStripTextBox2.ToolTipText = "Current position";
+ //
+ // toolStripSeparator5
+ //
+ this.toolStripSeparator5.Name = "toolStripSeparator5";
+ this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButton15
+ //
+ this.toolStripButton15.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton15.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton15.Image")));
+ this.toolStripButton15.Name = "toolStripButton15";
+ this.toolStripButton15.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton15.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton15.Text = "Move next";
+ //
+ // toolStripButton16
+ //
+ this.toolStripButton16.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.toolStripButton16.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton16.Image")));
+ this.toolStripButton16.Name = "toolStripButton16";
+ this.toolStripButton16.RightToLeftAutoMirrorImage = true;
+ this.toolStripButton16.Size = new System.Drawing.Size(23, 22);
+ this.toolStripButton16.Text = "Move last";
+ //
+ // toolStripSeparator6
+ //
+ this.toolStripSeparator6.Name = "toolStripSeparator6";
+ this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25);
+ //
+ // errorProvider1
+ //
+ this.errorProvider1.ContainerControl = this;
+ //
+ // fSetting
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(611, 620);
+ this.Controls.Add(this.tabControl1);
+ this.Controls.Add(this.panel1);
+ this.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.KeyPreview = true;
+ this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "fSetting";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Setting";
+ this.Load += new System.EventHandler(this.@__Load);
+ this.panel1.ResumeLayout(false);
+ this.tabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.panel2.ResumeLayout(false);
+ this.panel2.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.errorProvider1)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.PropertyGrid propertyGrid1;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.ToolTip toolTip1;
+ private System.Windows.Forms.ErrorProvider errorProvider1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.ToolStripButton bindingNavigatorAddNewItem;
+ private System.Windows.Forms.ToolStripLabel bindingNavigatorCountItem;
+ private System.Windows.Forms.ToolStripButton bindingNavigatorDeleteItem;
+ private System.Windows.Forms.ToolStripButton bindingNavigatorMoveFirstItem;
+ private System.Windows.Forms.ToolStripButton bindingNavigatorMovePreviousItem;
+ private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator;
+ private System.Windows.Forms.ToolStripTextBox bindingNavigatorPositionItem;
+ private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator1;
+ private System.Windows.Forms.ToolStripButton bindingNavigatorMoveNextItem;
+ private System.Windows.Forms.ToolStripButton bindingNavigatorMoveLastItem;
+ private System.Windows.Forms.ToolStripSeparator bindingNavigatorSeparator2;
+ private System.Windows.Forms.ToolStripButton toolStripButton5;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel1;
+ private System.Windows.Forms.ToolStripButton toolStripButton6;
+ private System.Windows.Forms.ToolStripButton toolStripButton7;
+ private System.Windows.Forms.ToolStripButton toolStripButton8;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.ToolStripTextBox toolStripTextBox1;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.ToolStripButton toolStripButton9;
+ private System.Windows.Forms.ToolStripButton toolStripButton10;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
+ private System.Windows.Forms.ToolStripButton toolStripButton11;
+ private System.Windows.Forms.ToolStripLabel toolStripLabel2;
+ private System.Windows.Forms.ToolStripButton toolStripButton12;
+ private System.Windows.Forms.ToolStripButton toolStripButton13;
+ private System.Windows.Forms.ToolStripButton toolStripButton14;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
+ private System.Windows.Forms.ToolStripTextBox toolStripTextBox2;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
+ private System.Windows.Forms.ToolStripButton toolStripButton15;
+ private System.Windows.Forms.ToolStripButton toolStripButton16;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/Setting/fSetting.cs b/QRValidation/Project/Setting/fSetting.cs
new file mode 100644
index 0000000..1b20860
--- /dev/null
+++ b/QRValidation/Project/Setting/fSetting.cs
@@ -0,0 +1,100 @@
+using AR;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Project
+{
+ public partial class fSetting : Form
+ {
+ CSetting dummySetting; //Temporarily saves settings and overwrites them when complete.
+
+ public fSetting()
+ {
+ InitializeComponent();
+
+ //setting
+ dummySetting = new CSetting();
+ PUB.setting.CopyTo(dummySetting);
+
+ this.KeyDown += (s1, e1) =>
+ {
+ if (e1.KeyCode == Keys.Escape)
+ this.Close();
+ if (DateTime.Now > PUB.LastInputTime) PUB.LastInputTime = DateTime.Now;
+ };
+ this.MouseMove += (s1, e1) => { if (DateTime.Now > PUB.LastInputTime) PUB.LastInputTime = DateTime.Now; };
+ this.FormClosed += __Closed;
+
+
+ }
+
+ private void __Closed(object sender, FormClosedEventArgs e)
+ {
+
+ }
+
+ private void __Load(object sender, EventArgs e)
+ {
+
+ this.Show();
+
+ this.propertyGrid1.SelectedObject = this.dummySetting;
+ this.propertyGrid1.Refresh();
+
+ //if (Pub.setting.Disable_UsingDataMatrix == true) btInspectDotDM.Text = "DOT Inspect";
+ //else btInspectDotDM.Text = "DM Inspect";
+
+
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ using (var f = new AR.Dialog.fPassword())
+ if (f.ShowDialog() == DialogResult.OK)
+ {
+ var pass = f.tbInput.Text;
+ if (pass != this.dummySetting.Password_Setup)
+ {
+ UTIL.MsgE("Password incorrect");
+ return;
+ }
+
+ this.Invalidate();
+
+
+ try
+ {
+ dummySetting.CopyTo(PUB.setting);
+ PUB.setting.Save();
+ PUB.log_[0].AddI("Setting Save");
+ PUB.log_[0].Add(PUB.setting.ToString());
+ PUB.log_[1].AddI("Setting Save");
+ PUB.log_[1].Add(PUB.setting.ToString());
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[0].AddE("Setting Save Error:" + ex.Message);
+ PUB.log_[1].AddE("Setting Save Error:" + ex.Message);
+ UTIL.MsgE("Error\n" + ex.Message + "\n\nPlease try again");
+ }
+
+ //Pub.flag.set(eFlag.TestRun, btLoaderDetect.BackColor == Color.Lime);
+
+ DialogResult = DialogResult.OK;
+ }
+
+
+ }
+
+
+
+
+ }
+}
+
diff --git a/QRValidation/Project/Setting/fSetting.resx b/QRValidation/Project/Setting/fSetting.resx
new file mode 100644
index 0000000..0952896
--- /dev/null
+++ b/QRValidation/Project/Setting/fSetting.resx
@@ -0,0 +1,2099 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAUpJREFUOE9jGLzg7gL2/7fmcf6/Oofr/8UZvP+hwsSD60CNfx41/v/zsOH/yckC
+ pBtwfjov3ICDPSKkG3B8kiBQc93/Pw+q/u9oFydswKWZPP/PTuX7fxKo8Ui/0P993SJAzeX//94r+r++
+ Qeb/qhq5/0srFf/PL1X+P6tIFdPAU0B//nlYD9RUC8SV///cKwHivP9/72b+/3sn+f/f23H//92MAOKQ
+ /5NyNDENONQrDHbu3/ulQI0FQI3ZQI2pQI0J///digZqDPv/70bQ/3/X/f53peliGrCzXeL/lmap/+vA
+ zpX/v6RC8f/fWzFAjeH/p+Zp/J+QpfW/O0P3f3uq/v/mREPCYTIb6E+Qc//dCPjfk6FDWAM6APnz3w1/
+ IPb735qsT7oB3em6YP+CcH2cEekGtCQZ/G+IN/xfE2v8vzLahHQD6AQYGAAkI9iedfyIaQAAAABJRU5E
+ rkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAW9JREFUOE+1kE0ow2Ecx3dV3krt4oJaOSCTvIRkMqSxyITIzCQHDouEdnFwIOVC
+ DrhIDiQl5UTiNG/z2ppafy1S2gX/uDwfY6i1v7Hie3nqeb7fz+/7/FR/Ilwn0G0Exw4fV5GJlXlEZxXC
+ rIet9bAQvB5Ymgn2sLYAvSZEux7RUQFzE4qQt4bCXAYjPaHvnDoCkLpsRGMB2JqCTGLIijDlwqQ9bEMV
+ i9OIytR3EMNWcJ/BWH8A6j8/bOGFxwXNxYEvGbMQ9XnQ1/K78KfY3/VXzkMY0qFGG2H4RoLGQshJQNbG
+ 86CNhdrsX9a/uQZTPhQl4rMY4OLofbl3aX7I8uwPC7y/g1YdjyVJuEvT8e1tfwUYteHUxCCfHChDeHmG
+ QQvokjlOU+PbWA0x3pZnILVVI3uvQyHsbiLnqnGmRCF1NYD8pDhpRxOH7HQoAKZGkFKjceszQbpSrumX
+ bO+G80MFwKUTxgfgcO/b8D9IpXoFiiMDHIQm0skAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAASpJREFUOE9jGDygcNbz/00Lnv/PnPj4P1QIA4S3P8Apx5A789n/VUfe/8elKL77
+ wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0
+ v3f1BxRFoa33wJpb1wFt7/z73yX/AG4DApsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvg
+ UXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbA
+ Iu/O/9T+11gVGSSd+C+b9vW/bvA83AYYZt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPu
+ lf8gBXgVDULAwAAA8HbAq6XlmnAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAALZJREFUOE9jGDogvP3BfyiTdBDf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w
+ 5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3vkn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ00F9gV3/6f
+ Puf3f/+ub/91Ct/9t0hYT3oY6Kec/29S9OK/Stan/8aRy0g3AAQMkk78l037+l83eB55BoCAfurl/xq+
+ 08g3AARUPCZQZsBgBQwMANAUYJgEulBVAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAKNJREFUOE9jGHygcNbz/1AmeSB35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78
+ n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuI
+ N8Sj6v7/krnv4JoVXXpIc4F96d3/gS3PyNMMAhZ5d/7bFFwhTzMIGGbdJl8zCOik3SBf81AEDAwAoH5f
+ oAc0QjgAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAASxJREFUOE9jGFygcNbz/1AmBgDJNS14/j9z4mOcahhyZz77n9B9D6sCkNyqI+//
+ h7c/wG1AxpSn/+ft//0/oesOhiKQ3MJ9H/4HN1zDbUBCz5P/s/f9+t+59e9/t9LLKApBctO2vP/vX30B
+ twGRXY/+T9n263/J0r//E6b//W+TexauGCTXu/rDf6/SE7gNCGx++L917XuwZuOSL/+lo6/9N45cBtYA
+ kqub/+6/S/4B3AZ4VN3/XzL3HVyzoksPXDFILn/am//2GdtxG2Bfevd/YMszDM0gAJLLnvz6v0XCetwG
+ WOTd+W9TcAVDMwiA5FL7X8O9hBUYZt3GqhkEQHJhLS//6wbPw22ATtoNnJIgOb/qh/81fKfhNgAfcMq9
+ 8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAUpJREFUOE9jGLzg7gL2/7fmcf6/Oofr/8UZvP+hwsSD60CNfx41/v/zsOH/yckC
+ pBtwfjov3ICDPSKkG3B8kiBQc93/Pw+q/u9oFydswKWZPP/PTuX7fxKo8Ui/0P993SJAzeX//94r+r++
+ Qeb/qhq5/0srFf/PL1X+P6tIFdPAU0B//nlYD9RUC8SV///cKwHivP9/72b+/3sn+f/f23H//92MAOKQ
+ /5NyNDENONQrDHbu3/ulQI0FQI3ZQI2pQI0J///digZqDPv/70bQ/3/X/f53peliGrCzXeL/lmap/+vA
+ zpX/v6RC8f/fWzFAjeH/p+Zp/J+QpfW/O0P3f3uq/v/mREPCYTIb6E+Qc//dCPjfk6FDWAM6APnz3w1/
+ IPb735qsT7oB3em6YP+CcH2cEekGtCQZ/G+IN/xfE2v8vzLahHQD6AQYGAAkI9iedfyIaQAAAABJRU5E
+ rkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAW9JREFUOE+1kE0ow2Ecx3dV3krt4oJaOSCTvIRkMqSxyITIzCQHDouEdnFwIOVC
+ DrhIDiQl5UTiNG/z2ppafy1S2gX/uDwfY6i1v7Hie3nqeb7fz+/7/FR/Ilwn0G0Exw4fV5GJlXlEZxXC
+ rIet9bAQvB5Ymgn2sLYAvSZEux7RUQFzE4qQt4bCXAYjPaHvnDoCkLpsRGMB2JqCTGLIijDlwqQ9bEMV
+ i9OIytR3EMNWcJ/BWH8A6j8/bOGFxwXNxYEvGbMQ9XnQ1/K78KfY3/VXzkMY0qFGG2H4RoLGQshJQNbG
+ 86CNhdrsX9a/uQZTPhQl4rMY4OLofbl3aX7I8uwPC7y/g1YdjyVJuEvT8e1tfwUYteHUxCCfHChDeHmG
+ QQvokjlOU+PbWA0x3pZnILVVI3uvQyHsbiLnqnGmRCF1NYD8pDhpRxOH7HQoAKZGkFKjceszQbpSrumX
+ bO+G80MFwKUTxgfgcO/b8D9IpXoFiiMDHIQm0skAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAASpJREFUOE9jGDygcNbz/00Lnv/PnPj4P1QIA4S3P8Apx5A789n/VUfe/8elKL77
+ wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0
+ v3f1BxRFoa33wJpb1wFt7/z73yX/AG4DApsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvg
+ UXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbA
+ Iu/O/9T+11gVGSSd+C+b9vW/bvA83AYYZt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPu
+ lf8gBXgVDULAwAAA8HbAq6XlmnAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAALZJREFUOE9jGDogvP3BfyiTdBDf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w
+ 5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3vkn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ00F9gV3/6f
+ Puf3f/+ub/91Ct/9t0hYT3oY6Kec/29S9OK/Stan/8aRy0g3AAQMkk78l037+l83eB55BoCAfurl/xq+
+ 08g3AARUPCZQZsBgBQwMANAUYJgEulBVAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAKNJREFUOE9jGHygcNbz/1AmeSB35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78
+ n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuI
+ N8Sj6v7/krnv4JoVXXpIc4F96d3/gS3PyNMMAhZ5d/7bFFwhTzMIGGbdJl8zCOik3SBf81AEDAwAoH5f
+ oAc0QjgAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAASxJREFUOE9jGFygcNbz/1AmBgDJNS14/j9z4mOcahhyZz77n9B9D6sCkNyqI+//
+ h7c/wG1AxpSn/+ft//0/oesOhiKQ3MJ9H/4HN1zDbUBCz5P/s/f9+t+59e9/t9LLKApBctO2vP/vX30B
+ twGRXY/+T9n263/J0r//E6b//W+TexauGCTXu/rDf6/SE7gNCGx++L917XuwZuOSL/+lo6/9N45cBtYA
+ kqub/+6/S/4B3AZ4VN3/XzL3HVyzoksPXDFILn/am//2GdtxG2Bfevd/YMszDM0gAJLLnvz6v0XCetwG
+ WOTd+W9TcAVDMwiA5FL7X8O9hBUYZt3GqhkEQHJhLS//6wbPw22ATtoNnJIgOb/qh/81fKfhNgAfcMq9
+ 8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAUpJREFUOE9jGLzg7gL2/7fmcf6/Oofr/8UZvP+hwsSD60CNfx41/v/zsOH/yckC
+ pBtwfjov3ICDPSKkG3B8kiBQc93/Pw+q/u9oFydswKWZPP/PTuX7fxKo8Ui/0P993SJAzeX//94r+r++
+ Qeb/qhq5/0srFf/PL1X+P6tIFdPAU0B//nlYD9RUC8SV///cKwHivP9/72b+/3sn+f/f23H//92MAOKQ
+ /5NyNDENONQrDHbu3/ulQI0FQI3ZQI2pQI0J///digZqDPv/70bQ/3/X/f53peliGrCzXeL/lmap/+vA
+ zpX/v6RC8f/fWzFAjeH/p+Zp/J+QpfW/O0P3f3uq/v/mREPCYTIb6E+Qc//dCPjfk6FDWAM6APnz3w1/
+ IPb735qsT7oB3em6YP+CcH2cEekGtCQZ/G+IN/xfE2v8vzLahHQD6AQYGAAkI9iedfyIaQAAAABJRU5E
+ rkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAW9JREFUOE+1kE0ow2Ecx3dV3krt4oJaOSCTvIRkMqSxyITIzCQHDouEdnFwIOVC
+ DrhIDiQl5UTiNG/z2ppafy1S2gX/uDwfY6i1v7Hie3nqeb7fz+/7/FR/Ilwn0G0Exw4fV5GJlXlEZxXC
+ rIet9bAQvB5Ymgn2sLYAvSZEux7RUQFzE4qQt4bCXAYjPaHvnDoCkLpsRGMB2JqCTGLIijDlwqQ9bEMV
+ i9OIytR3EMNWcJ/BWH8A6j8/bOGFxwXNxYEvGbMQ9XnQ1/K78KfY3/VXzkMY0qFGG2H4RoLGQshJQNbG
+ 86CNhdrsX9a/uQZTPhQl4rMY4OLofbl3aX7I8uwPC7y/g1YdjyVJuEvT8e1tfwUYteHUxCCfHChDeHmG
+ QQvokjlOU+PbWA0x3pZnILVVI3uvQyHsbiLnqnGmRCF1NYD8pDhpRxOH7HQoAKZGkFKjceszQbpSrumX
+ bO+G80MFwKUTxgfgcO/b8D9IpXoFiiMDHIQm0skAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAASpJREFUOE9jGDygcNbz/00Lnv/PnPj4P1QIA4S3P8Apx5A789n/VUfe/8elKL77
+ wf/ghmu4DciY8vT/wn0fsCqK73n4f+n+///9qy/gNiCh58n/aVveYyiKaL8P1pw56/9/r9ITuA2I7Hr0
+ v3f1BxRFoa33wJpb1wFt7/z73yX/AG4DApsf/q+b/w6uKLjl7v9Fe///7wBqzpjz879d3c//9hnbcRvg
+ UXX/f/60NyiK7Ipv/0+f8/u/f9e3/zqF7/5bJKzHbYB96d3/2ZNfYyjSTzn/36ToxX+VrE//jSOX4TbA
+ Iu/O/9T+11gVGSSd+C+b9vW/bvA83AYYZt3+H9byEqci/dTL/zV8p+E2QCftxn+/6od4Fal4TMBtgFPu
+ lf8gBXgVDULAwAAA8HbAq6XlmnAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAALZJREFUOE9jGDogvP3BfyiTdBDf/eB/cMM18gyI73n4f+n+///9qy+QbkBE+32w
+ 5sxZ//97lZ4gzYDQ1ntgza3rgLZ3/v3vkn+AeAOCW+7+X7T3//8OoOaMOT//29X9/G+fsZ00F9gV3/6f
+ Puf3f/+ub/91Ct/9t0hYT3oY6Kec/29S9OK/Stan/8aRy0g3AAQMkk78l037+l83eB55BoCAfurl/xq+
+ 08g3AARUPCZQZsBgBQwMANAUYJgEulBVAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAAKNJREFUOE9jGHygcNbz/1AmeSB35rP/Cd33yDckY8rT//P2//6f0HWHPEMSep78
+ n73v1//OrX//u5VeJt2QyK5H/6ds+/W/ZOnf/wnT//63yT1LmiGBzQ//t659D9ZsXPLlv3T0tf/GkcuI
+ N8Sj6v7/krnv4JoVXXpIc4F96d3/gS3PyNMMAhZ5d/7bFFwhTzMIGGbdJl8zCOik3SBf81AEDAwAoH5f
+ oAc0QjgAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAASxJREFUOE9jGFygcNbz/1AmBgDJNS14/j9z4mOcahhyZz77n9B9D6sCkNyqI+//
+ h7c/wG1AxpSn/+ft//0/oesOhiKQ3MJ9H/4HN1zDbUBCz5P/s/f9+t+59e9/t9LLKApBctO2vP/vX30B
+ twGRXY/+T9n263/J0r//E6b//W+TexauGCTXu/rDf6/SE7gNCGx++L917XuwZuOSL/+lo6/9N45cBtYA
+ kqub/+6/S/4B3AZ4VN3/XzL3HVyzoksPXDFILn/am//2GdtxG2Bfevd/YMszDM0gAJLLnvz6v0XCetwG
+ WOTd+W9TcAVDMwiA5FL7X8O9hBUYZt3GqhkEQHJhLS//6wbPw22ATtoNnJIgOb/qh/81fKfhNgAfcMq9
+ 8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg==
+
+
+
+ 208, 17
+
+
+ 528, 17
+
+
+ 102
+
+
+
+ AAABAAYAAAAAAAEAIAASGgAAZgAAAICAAAABACAAKAgBAHgaAABAQAAAAQAgAChCAACgIgEAMDAAAAEA
+ IACoJQAAyGQBACAgAAABACAAqBAAAHCKAQAQEAAAAQAgAGgEAAAYmwEAiVBORw0KGgoAAAANSUhEUgAA
+ AQAAAAEACAYAAABccqhmAAAZ2UlEQVR42u3da4xu11kf8P+z1r68l5l3Zs7xuXh87OBgk8ZBWEGBGEs0
+ caXKBiOiVHI+kMQNbYh6+YIqhBFVq1MqkIxQhVS1KCIo1MT94KhYIBAOaXGDRC7UAoIUm8RxjBOfm89l
+ 5szMO++7916Xfhh/IlnPPsnMmTMz6/+Tzqe99Mze+333f87WemYtAR1ZH/v4EwMAtTZmOt6OPWWapz/0
+ X5tbfS10c5hbfQJEdOswAIgyxgAgyhgDgChjDACijDEAiDLGACDKmNzqE6Dv7MO/9QsVgCJ13FhTlFXx
+ gFbDGnNaRE5oY6JEtQ8gRlwJHhe1MV3bfTF475Qh7vf+9W+0+3f36EYVuy9BN0kNYKgcHwJ4v1pBcB8E
+ 9+hDen8HvAzEF3vGfBXATDk+A8AAOID4CkCUMQYAUcYYAEQZYwAQZYwBQJQxBgBRxhgARBljI9BN8OHf
+ /sVVAAup49aYY6U1/06rUZbFGWPM8dRxY8TcceL4Ga1GXRa2Kgq7m2tpnfNN57w25tzlq6+HEEPqeAjh
+ ate517UanQ//xYdwTRmy9Xs/9+vnd3Mt9O3YCHRzCADtwSugBMSbFgFMlB9hjIi62o8RI9bs7j95Rowx
+ Ij3fE5kA6QDAThNQ3/UWPfeMv6xuAr4CEGWMAUCUMQYAUcYYAEQZYwAQZYwBQJQxTq38A49/4heXAVSp
+ 49aYcWHt/VqNqrC3GyOLqePGmIVRXat/y19Ye8wYk5w6ExFZWRwv6DWMFHZXbQBw3sP5oC4asrY53Yox
+ vbBICGHLea/N8WO7aZ4NIWyla8TN1vkLPef6ZR/CVBnSPvXRX1/f1Q05YtgH8O1OQ51/x50AfkErYIw5
+ VVgzTh0vrLUnVibHtRp1WWK3D+9eKKxFYa36i+L248uL2nHn/aTp3Ko25sKVa7c775MNRw5hCvhLPaf7
+ GwC+pRzfALC+LzfukOArAFHGGABEGWMAEGWMAUCUMQYAUcYYAEQZYwAQZexINQI9/ttPvBs7f0f/HVkj
+ byms+YBWYzwcHLPWJP/OviqLwW2TyV1ajbKw1hiTvLcigDVGn+SXG9iy45CIAKBvQAQfgteGhBBi57y6
+ MMmVjY1vtp2bJ3+GD810NlcbkpwPz/gQX1OGbD71c09+af/u3s111BqBBgDGyvFlAOoqOhAsiUiyE1BE
+ irKw6kIcZWFhdrkQx1EiwE7qKQqrdz2FIEDP91VEbhOR9BZlghbAqOd0lwFcUY53N/l27St+S4kyxgAg
+ yhgDgChjDACijDEAiDLGACDK2L5MNT/2zGO9P2th++47oEzzGDETgblDqzEoy/tFJLlIRmHNalUU/1Sr
+ UdfVyBpTpGtYuzQeaVONsNbAyFGZxT8YQozwPqhjrk+3p9qaAj4E1zTttlajdf5PXQjJhUdijFvztv2y
+ ViMinAsxbChD3Fv+fnSu55Lj2bNn9/o2fpv96gMQ9P9v4wEoTTwA3g5AXUWnrsrlwqYf3kFVFSeWJz2r
+ 6FgIH94Dx4jA9GxydNvSohrMMUY4749pYy5f3/jAvO2Sc/3OBzdv2+s9p/ssgJeU45sAfv8GLjvewJhd
+ 4SsAUcYYAEQZYwAQZYwBQJQxBgBRxhgARBljABBlrHfC+2Mf/5hBT1D4wbGHAZSp40bM2wTyoFZjaTy6
+ yxhJzuHXZbU4GQ9PazXKorBGWUdDRKSwVr0W9gAcbbFnYRLnQ1B3OYoxds6pC5NsTGcXm67dTNYI0V2f
+ bn9TPU/Ez4cYvqoM6V55dfBcz+WG/3v2rHrBN9oI1PdUHIeynRZ2dtP5Qa2AEVk2kl4lp7C2HFSVuhBH
+ YQ0fYFL1fT/KQv8FEWOE1ikKANvz9kTnzHL6JIKHvvsUsLPD0VXleIv+51LQ00zEVwCijDEAiDLGACDK
+ GAOAKGMMAKKMMQCIMiYf+eRZPQT89HQEVrUhRVH8M0i6D2BQVvcOqvJHtRqLo+GCEUmeS12WxcJoqE4D
+ WmP6lp8n2pUYAR/0hUm2tmdN03XJ/QlCjGFjOtvSajRd+5fzrn05fSLoOhf/V8/pnjd2eEkbUECfv0eE
+ vBfAh7UxAvlxxHRPwXhQ2ztOHFPnTuuy5Bw+HXgiO/0mmuXFcQ0g+csqxojlhbG2+A3OX7n2aNN2WsOR
+ Mybc33O6n8LO4iRJfAUgyhgDgChjDACijDEAiDLGACDKGAOAKGMMAKKMFdj5u2LNn0Hf5AAB8UEoC4JM
+ m+a+1y5deY9WY1BXJwwkuR7AoCrLpYXRUKtRclMPuslijOi8uh4Irm9tz7TNRQKinzftZa1G03WfC4gv
+ KkM6AH/Rc7oX0fN878nT8s9/94kHoSwuYsU+YEQe02qMB/WdIukVgRYGdXVieaI2T1RlyS256KYKMUJ5
+ tgEAl9c3NrfmTfLBizG66bz5Vs/P+bSP/ovKEPc/PvLk53d7PXwFIMoYA4AoYwwAoowxAIgyxgAgyhgD
+ gChjN7ovQJ+tnlqX0NNLEGNsoPQS+BgnTded0WugEmVREbOzMYjVaoi2swgdahFADH0bg3gflI1BYoyh
+ dZ06t+5jPBdj3FBqdAC+0XO6l7DzXCVPdS/uyYH5rj/+O0+8C8Agdbyw5oeskQ9qNQZldZcRSdYY1lV5
+ 6tjyklajrkpYw/8YHUU+BDStPod/6dr69ZkyKMQ4n3etuquPD/Fp58PfKkPmT/3LJ1+41fcD4CsAUdYY
+ AEQZYwAQZYwBQJQxBgBRxhgARBljABBlbK8agfbCKwC0Jp0LAP5OK+BDeGuQdC/BvOtWL1xbf0SrUVp7
+ 2ogkFx4prLXLC+MFtUZphb0Ee8uHgK7zahfP+tZ0y/n0ah0hxlnn/UWtRtt1z7ngz6eOx4g5+pt4XgNw
+ Xbuc/btzugPTCLQXPvLJJ+4BkHx4rTH3GmM+qtWobHGPEUkuPFKXZXn78ZVjWo1BXUqhNxzSd8l5j3nT
+ qQFw4eratabrtCaezda7r2s1Qgif8CG8rAyZ/e7PPqnWOEz4a4ooYwwAoowxAIgyxgAgyhgDgChjDACi
+ jB2kPoC90EHpJYjRzGKwa1qBEMs2iknO03qxpuugTkcZExCCMsUqQNHTJyCCI7PJSYwRUV+HAy4EaHfV
+ +RD77rt3hfdOkp9djKGNMaqff4yYAUFb8ENfUOCQORrfsBv0vn//R0sA3qGNqYbu50Xw9tRxW7b1eOWN
+ O7UaZT0vjXXJICqs4PTxkXqu40GNujoa+dy0DtN5o465eHUbTunzCb7wXTNQH77p2slv+a5K/qAY8VI7
+ K36z53S/8ge/+lPXkQm+AhBljAFAlDEGAFHGGABEGWMAEGWMAUCUMQYAUcYOUB9AVM/lfb/02SVjw1u0
+ MUVpH4JgOXm8KEbD4WhVqzGZDH/UFuZ46rixwdbDVl0QBDI3EKdcjwPsBb2EmQJIz52LCCZjvU+grgqU
+ xe7WJeicR9Pqm9BsTB2i2ulTI4ax/oP87VD70mIREQdBK9HMqq3glSYuF65ubMz+Uqsxm22fd85tp88D
+ 667zz/fcttee/dVH1nEIHKZOkzGA7+sZ85MA7kgdFJHKWrus/pDx0tJgUCe3KDPGoKoq9SR8aBBj+qEJ
+ scH6XO81ad0WXJgnjxsRlGWt1jBWdh8A3mPWs5vO2kaDoARAYSpUhd74tDx4K4ykr0ekEGtq9WLasl0K
+ IZ0R83mzOJ22K1oNEVkHoHUCngPwas9tuwxgHYcAXwGIMsYAIMoYA4AoYwwAoowxAIgyxgAgytieTAM+
+ 9tgz6vHwAxMLI+rP8v5zA8R0X0JR2kURo04m28KUIpKcKrLWGmut2m9gjOx6IQ4BtEsBIBD9dsBIBSPp
+ 6UYRIEY9v0MAfOhZiaNHCNL7c0RK9TeJkar3enfumrqGyg3RPjtjBH2fv7XWxBiVRWViiSh6U4Ng8th/
+ +t9TZUQMzusLJITozNc21A1EPv3pD9zgXUnbqz6AvsnmHwDwY9qAsnb/FkByjraqqmrcsyPP6VOnFqqy
+ TJ6LMQZlVeJmM6bu+a/VCCeK96gjQmgQlF6CGB2ubag9Lbi6dg0uXN3VtRRmGaW9XR1zeuFH1AfcSAFj
+ 9J6FvdDXn1HXdTmZTI5rY9quO671ErRtd8+lS5feqdWYbk232rbVegnWAPy3nsv5AoCv9YzZ9Q5DfAUg
+ yhgDgChjDACijDEAiDLGACDKGAOAKGMMAKKMyXvPPq+GwIrvTovyN/YAYK38Yyg9BfVgcHJQD+7Waiws
+ jH5MjBmmf4Y1Va1P9I5Ho8qadKOHiMDYw5F5MXpEKOtfxICZ0xcV8WGKEGf6z+k5DysjWKP/Lf+wuB2Q
+ 9H0VGCj9WQeKD0Fd3CR4H6fb29ocP9qmbb33yQ8vhjDb2tr+glZj3sxfbebzN5Qhzvv451qNCJxbs+VF
+ bUyB/v8FnAJwvzpC8C8ADFKHjZFBVVdq99Sx48cXiyL9dBpjYO3h+BLtBREL0fqrBBhX36fWiNEhRr1X
+ JPa02Al6mziPFNuzZRuslaqq1K4m732tNRM55xfbzv0TrUbbNVMI5sqQOYC+HYwcAC1E+ApAlDMGAFHG
+ GABEGWMAEGWMAUCUMQYAUcYYAEQZK07gshoC3k4KQNQGHIE1UMJEYER6ltkROVDbFB0JIsUNrMRDN4O6
+ HtTO4kc9v3zFCNSmBAPrep7L2Pt8838ARBljABBljAFAlDEGAFHGGABEGWMAEGWMAUCUsQL9mwtcAPDX
+ PWM+AWVBkBDDSte16u4S165efY+IJFeeMNYWZVkOtRrj8biyNr2mgIhktaYAffe89+qCIN77sDWdqrv6
+ uK6bB++Tu7qEGLe7rv2cViPGeAE7G4gkfwz6n8sL6Hm+96X35v3/8Y/PAHi7Nsaa8pcBJHdtKctyOBwO
+ jmk1VldXJ1VVJYPIGIO6vvk71NDh1TQN9J2BWnfu/AV1IY75bLbWdZ22FNNVH7pf6zmVl579lUdfv9nX
+ y1cAoowxAIgyxgAgyhgDgChjDACijDEAiDLGACDK2H6tFnEewKWeMV+E0pfQOndbu7n1Nq3A9tdf+Vci
+ ktzFyBgzLMtyVatx6tSphcFgoPYSjEZqPxLdItvbM3UOfz6fu0uXLm1pNbrOXQghJOfwY4znOu9+Sz2R
+ iK8KcEUdAXXTD6C/QW9P7EsAPPsrjwZA2+cKANBpB9/3H56rAKgfntmpkezAMsZ4Y4y6G1bcoY3Yj1tG
+ 35OodvHFGKP3Xv0AnXM+hOCUIZ1zXv0eAtj4g//8yMatvhs3gq8ARBljABBljAFAlDEGAFHGGABEGWMA
+ EGXsMO0aMQdwsWfMZwGsKMfHIcS71B8y2/4R59rkugRGTDGfzZa1GvVgIEVRJHsaRARVpe7pkJ22bdUp
+ POdcbOZzdQqv67r1ENNTeK5zV0OI/6/nVL4JYFs5vob+72HfHP+BkdVmPD/9y3+yAOCt2pjFhfLnRbTF
+ S2RkpLhPq3Hs+G12OBol760xBsvLS7f6dhwo6+vX1Sae2fZ2vHb1itocE6J7EYjJhzdGvLS51f1mz6l8
+ 4w9/7Sf65vmPDL4CEGWMAUCUMQYAUcYYAEQZYwAQZYwBQJQxBgBRxo5UH8DTz/31uwEsJi9WcLeY+DNa
+ jbqqzxhj0jsUGVPWdX2bVuOV89uytpVe3sD5iAtr6uYyGI0XUNXphUdEBCsry2oNkb35ePX1EYC1tXV1
+ TNvMsD3Vp9ZvX6lR2PT5riyU+P7VkXoiTdNcCSEkb3wIYbtpG3WzjRjkf8aIV5Uhmx985J1f2sXtPFAO
+ UyfgjRgAGKcOimBijZzUCgxrOyysLVPHrTHFcFiqT1ZVAEZZ/0QQ0LWteiGudrBFuu9lrx7uvdC3nZZz
+ rvd6BQWM8h/SqgAmI/2+z8QXXmkmct4PndM/fx8xiTH9HULPwjWHDV8BiDLGACDKGAOAKGMMAKKMMQCI
+ MsYAIMrYvkwDPvPMM0BPz4GbfP8d2vkYaybGpDf9AIBhXd8vgoXUcWvNalmYiVpjUA2tMcrGIGKrUr9t
+ p46NMKyTM4lwPqAsrFqj8RZd1JanF2xtXFdr2LJEUfR8xD3bHDjv4Dp95qsUB0i60HhscftkUa2xenyI
+ wqZ/H03GJYa1fi3W1FUIMXljfQi2LKy+qIgL93kfkovKxIitZ/7P34y0GiHEc8EHbV8A97Uv/vA56OLZ
+ szd/qne/+gAE/f/beABKEw+AtwN4v1agrovlwqYf3kFdFidWFha0GkVhYXY5x74y0XcO8iFifUtvBPrK
+ q+t4/Y1p8ngIEX9/7rJaY7SwiOFYvdzeAJhtb2G6tamOufvUGMak79mZk2O84251+h3LCzWs2e0XfqjN
+ 3yPECOf8MW3M5bWtD8ybdOI5H9ysafTkBZ4F8JJyfBPA79/ABd30XWj4CkCUMQYAUcYYAEQZYwAQZYwB
+ QJQxBgBRxhgARBnrnXj9+AsvGPQExdI1+zCAZOeLiLxNBA9qNVaWRndpDTiDulxcXBie1mpUhbWi/KG8
+ MSKFNeq17Mff2UcA3gd1zLz1aLv0mBjR20vw+pUZLlzTx/Q5fazGnbfpfQ3LCzW021aVBoNKb3yy1uzL
+ 6jR9i5s4H0JQBsUQY+u8ukHJ5tbs4rzpks0TPgS3dn37m/p54vMxxq8qQ7pT5fpzPZcbHnroIfWCb7QR
+ qO+zOQ5A2+vqTgA/qBUwRpaNkeS3pLCmHNZlrV6MNQdqoYwUefNcNQtDAyjPXYxApa+PgfVpi8LoQdNn
+ cWhxcmXQc64VDsFtB9Af8GXPBxNjhFWazQBgNmtOGCPLyRoQD0DtSAXwLQBXleMt+p9LQU8zEV8BiDLG
+ ACDKGAOAKGMMAKKMMQCIMsYAIMpY8cnnn1dDoLiG04iyqlYx+EdQ+gDqujgzqEp1Mnk0qEtjJHkuVVXY
+ /im+QzIXtRdkZ+5cMxmVOLkyvMGC6Rp9Pyen2w5I71RiVRU2KtNvIUTTLnj1g2lad6ZpupkypLvQTu7X
+ TzWe/+Tzz1/ShhTQ5+8hAe8F8GF1jMiPQ+kpWBgN7JnTK+rc6aAqDsUc/kEhAEY9K+Tce2YJ955ZutWn
+ eqSI9PdwrEzGNYBkz0qMEcuTkbpE0rlLa4+2rdMajlyE6AEQ8SnsLE6SxFcAoowxAIgyxgAgyhgDgChj
+ DACijDEAiDLGACDKWIGdvyvW/Bn0TQ4QYnwQSiPQdNbc99r5q+/Ragzr8oSR9HoAdV2WS4tDtXmiKix7
+ CeimijFCn54Hrm/OZo2yuUiI0c+aVt3VZd64z4UYX1SGdAD+oud0L6Ln+S5+9qGH+laMuPjmv6SnP/NX
+ QyiNQPOmq9rOvVOr4X1YMiLJGhGQxbG+MEVEZk1ptO8idnZl0sybzk23Gy0A3HTWaFuHIYT4dR/iXylD
+ 3Acf/uG/2e318BWAKGMMAKKMMQCIMsYAIMoYA4AoYwwAoozd6L4AfbZ6al1CTy9BjLGJSi+BD2HStN2Z
+ nhqVkfSiIiIiZWHVHSrECKcSj6gIIPZM4XXO+6hsDBJiDG3n1Ll1H8K5GGNymi/G2AH4Rs/pXsLOc5Xi
+ 9uKeHJjv+lN/8sK7ACQn+svC/JA15oNajWFd3WVEkjWGg6o8fWKirpAxqEv0bB5Eh5QPAfP09DwA4OLl
+ jeuzeavN4c9nTavu6uNDeLpz4W+VIfPHf+JdL9zq+wHwFYAoawwAoowxAIgyxgAgyhgDgChjDACijDEA
+ iDK2V41Ae+EVAFqTzgUAf6cVcM6/VZQ+AMzb1QtvXH9Eq1GW5rSIJBceKQtrlyfjBa1GVVphL8He8iGg
+ 7bzaxbO+Md3qnE+u1hFjnHVdUNe2mDfdc53z55Uac/Q38bwG4Lp2Oft353QHphFoL3zqj1+4B0Dy4S1K
+ e6+15qNajaq09xgjyV1b6qosV08uH9NqDOtSikJtOKTvknMes6ZTA+D8G+vXmlZZiSfEzbbzX9dqeB8+
+ 4Tr/sjJk9qFH36XWOEz4a4ooYwwAoowxAIgyxgAgyhgDgChjDACijB2kPoC90EHvJZiiZ48DACMAyWnA
+ iFg7HyqtQOt8FWJU7q3AWqPOExrBkdnkJMaInnU44H3wO0t2fGfOB+d8UBfiiDFeBNAoQzbR//lPoW+m
+ 0eEIORrfsD301Ge+dBpKL0Fli9XCFP9Gq2GMeYeInEwdLwpr7zi5fJtWYzyqZVAVR+LzmbcuTrcbNQLO
+ vbF+xelNPG8EH76i1XDB/fc2uPPKkNnjD7+7LwCywlcAoowxAIgyxgAgyhgDgChjDACijDEAiDLGACDK
+ 2FFrBNoLG9hpBkmZAfgdrUAEVmNMNxOFEMfrG1N1YZLN6fwuYyTZKyAisrQwWNRq1FVpqtLuqpeg7Xxs
+ 2i5oY65vzTfV3XRCvOK9VzfTCCE+F6Jy3yM2AWhz/MDOojLaZ3dgFuI4KBgA/8DjD797u2dIbzfZU5/5
+ 8hKAOnW8NG65bdo7tRpiTaWtTGSMmKowY62GNUZ2GwDO+Tibt2oAXF7b3A4hJsfEGC/GviaeiD/sgqwr
+ Q5rHH75fW2WHvgd8BSDKGAOAKGMMAKKMMQCIMsYAIMoYA4AoY5wGvDkitNUtgACgb7pxCzs9CSkmxjjR
+ CoQQKu/Drj7jEIKLMbY9wzbevCbtWvquN/Tcs54lReh7cSQWnDiKnvrMlxehLExiBcNK4i9pNcTKfWLk
+ nt2cRwzx5eDDi9qYLsqTPspMGTJ7/OH7N/fjvtF3h68ARBljABBljAFAlDEGAFHGGABEGWMAEGWMAUCU
+ MTYCHVwN9AUs5gCe7anxBQAntAHaQh5vuoL+3XTWADjluAMdSGwEOsKe+ewLAygLkwBA27m+AGg+9JMP
+ NKAjia8ARBljABBljAFAlDEGAFHGGABEGWMAEGWMAUCUsf8PzNlsT7yleHcAAAAASUVORK5CYIIoAAAA
+ gAAAAAABAAABACAAAAAAAAAAAQBhCgAAYQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMu6oEzLuqD8y7qg/Mu6oPzLuqD8i2pA7ItqQO
+ yLakDsi2pA7ItqQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAMy7qgTMu6oPzLuqD8y7qg/Mu6oPyLakDsi2pA7ItqQOyLakDsi2pAQAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLuqBMy7qg/Mu6oPzLuqD8y7qg/ItqQO
+ yLakDsi2pA7ItqQOyLakBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADMu6oEzLuqD8y7qg/Mu6oPzLuqD8i2pA7ItqQOyLakDsi2pA7ItqQEAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADRuaIN0bmiENG5ohDRuaIQ0LuqQ9C7q2/Qu6tv0Lurb9G9rH/SwK2s0sCtrNLArazSwK2s
+ 0sCtrNLArazSwK2s0sCtrNC9q37Pu6puz7uqbs+7qm7Pu6lC0bmiENG5ohDRuaIQ0bmiDQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5ohLRuaIW0bmiFtG5ohbQu6pb
+ 0Lurl9C7q5fQu6uX0b2srNLAreXSwK3l0sCt5dLAreXSwK3l0sCt5dLAreXSwK3l0L2rq8+7qpbPu6qW
+ z7uqls+7qVrRuaIW0bmiFtG5ohbRuaISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAA0bmiEtG5ohbRuaIW0bmiFtC7qlvQu6uX0Lurl9C7q5fRvays0sCt5dLAreXSwK3l
+ 0sCt5dLAreXSwK3l0sCt5dLAreXQvaurz7uqls+7qpbPu6qWz7upWtG5ohbRuaIW0bmiFtG5ohIAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRuaIS0bmiFtG5ohbRuaIW
+ 0LuqW9C7q5fQu6uX0Lurl9G9rKzSwK3l0sCt5dLAreXSwK3l0sCt5dLAreXSwK3l0sCt5dC9q6vPu6qW
+ z7uqls+7qpbPu6la0bmiFtG5ohbRuaIW0bmiEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5ogPRuaIK0bmiCtG5ogrRuqUO
+ 0LyrRNC8q0TQvKtE0LyrRNK/rGzTv6x207+sdtO/rHbYx7eg28y9xdvMvcXbzL3F3c7A0eHVxvHh1cbx
+ 4dXG8eHVxvHh1cbx4dXG8eHVxvHh1cbx3c7A0dvMvcXbzL3F28y9xdjHt6DTv6x207+sdtO/rHbSv6xs
+ 0LyrRNC8q0TQvKtE0LyrRNG6pQ7RuaIK0bmiCtG5ogrRuaIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAA0bmiB9G5ohbRuaIW0bmiFtG6pR7QvKuR0LyrkdC8q5HQvKuR07+t09PArePTwK3j
+ 08Ct49zNve/j18r649fK+uPXyvrn3ND78erg//Hq4P/x6uD/8erg//Hq4P/x6uD/8erg//Hq4P/n3ND7
+ 49fK+uPXyvrj18r63M2979PArePTwK3j08Ct49O/rdPQvKuR0LyrkdC8q5HQvKuR0bqlHtG5ohbRuaIW
+ 0bmiFtG5ogcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRuaIH0bmiFtG5ohbRuaIW
+ 0bqlHtC8q5HQvKuR0LyrkdC8q5HTv63T08Ct49PArePTwK3j3M297+PXyvrj18r649fK+ufc0Pvx6uD/
+ 8erg//Hq4P/x6uD/8erg//Hq4P/x6uD/8erg/+fc0Pvj18r649fK+uPXyvrczb3v08Ct49PArePTwK3j
+ 07+t09C8q5HQvKuR0LyrkdC8q5HRuqUe0bmiFtG5ohbRuaIW0bmiBwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAANG5ogfRuaIW0bmiFtG5ohbRuqUe0LyrkdC8q5HQvKuR0LyrkdO/rdPTwK3j
+ 08Ct49PArePczb3v49fK+uPXyvrj18r659zQ+/Hq4P/x6uD/8erg//Hq4P/x6uD/8erg//Hq4P/x6uD/
+ 59zQ++PXyvrj18r649fK+tzNve/TwK3j08Ct49PArePTv63T0LyrkdC8q5HQvKuR0LyrkdG6pR7RuaIW
+ 0bmiFtG5ohbRuaIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAMm5ogbJuaIHybmiB8m5ogfQvasW0b6sIdG+rCHRvqwh0r6sK9O/q0DTv6tA
+ 07+rQNTArUbXxban18W2p9fFtqfXxban2cm429rJuOnaybjp2sm46eHTxfLm28/75tvP++bbz/vp39P8
+ 8erg//Hq4P/x6uD/8erg//Hq4P/x6uD/8erg//Hq4P/p39P85tvP++bbz/vm28/74dPF8trJuOnaybjp
+ 2sm46dnJuNvXxban18W2p9fFtqfXxban1MCtRtO/q0DTv6tA07+rQNK+rCvRvawh0b2sIdG9rCHQvasW
+ ybmiB8m5ogfJuaIHybmiBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAybmiHcm5oiHJuaIh
+ ybmiIdC9q3DRvqyl0b6spdG+rKXSv6271MGv5tTBr+bUwa/m1cOx6Ofbzv3n287959vO/efbzv3w6N3/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8Ojd/+fbzv3n287959vO/efbzv3Vw7Ho
+ 1MGv5tTBr+bUwa/m0r+tu9G9rKXRvayl0b2spdC9q3DJuaIhybmiIcm5oiHJuaIdAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAADJuaIdybmiIcm5oiHJuaIh0L2rcNG+rKXRvqyl0b6spdK/rbvUwa/m
+ 1MGv5tTBr+bVw7Ho59vO/efbzv3n287959vO/fDo3f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/w6N3/59vO/efbzv3n287959vO/dXDsejUwa/m1MGv5tTBr+bSv6270b2spdG9rKXRvayl
+ 0L2rcMm5oiHJuaIhybmiIcm5oh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMm5oh3JuaIh
+ ybmiIcm5oiHQvatw0b6spdG+rKXRvqyl0r+tu9TBr+bUwa/m1MGv5tXDsejn287959vO/efbzv3n2879
+ 8Ojd//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Do3f/n287959vO/efbzv3n2879
+ 1cOx6NTBr+bUwa/m1MGv5tK/rbvRvayl0b2spdG9rKXQvatwybmiIcm5oiHJuaIhybmiHQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAybmiHcm5oiHJuaIhybmiIdC9q3DRvqyl0b6spdG+rKXSv627
+ 1MGv5tTBr+bUwa/m1cOx6Ofbzv3n287959vO/efbzv3w6N3/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8Ojd/+fbzv3n287959vO/efbzv3Vw7Ho1MGv5tTBr+bUwa/m0r+tu9G9rKXRvayl
+ 0b2spdC9q3DJuaIhybmiIcm5oiHJuaIdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAADMtaQRzLWkKsy1pCrMtaQqzrinO9G9q6rRvauq0b2rqtG9q6rUw7LT
+ 1cSz2tXEs9rVxLPa4tXH7One0vjp3tL46d7S+Ovi1vrw6N798Oje/fDo3v3w6d798erg//Hq4P/x6uD/
+ 8erg//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8erg//Hq4P/x6uD/
+ 8erg//Dp3v3w6N798Oje/fDo3v3r4tb66d7S+One0vjp3tL44tXH7NXEs9rVxLPa1cSz2tTDstPRvauq
+ 0b2rqtG9q6rRvauqzrinO8y1pCrMtaQqzLWkKsy1pBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMy1pBLMtaQt
+ zLWkLcy1pC3OuKc/0b2rttG9q7bRvau20b2rttXDsuDVxLPn1cSz59XEs+fi1cj16uDU/urg1P7q4NT+
+ 7eTY/vLr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh/+3k2P7q4NT+
+ 6uDU/urg1P7i1cj11cSz59XEs+fVxLPn1cOy4NG9q7bRvau20b2rttG9q7bOuKc/zLWkLcy1pC3MtaQt
+ zLWkEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLWkEsy1pC3MtaQtzLWkLc64pz/Rvau20b2rttG9q7bRvau2
+ 1cOy4NXEs+fVxLPn1cSz5+LVyPXq4NT+6uDU/urg1P7t5Nj+8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/7eTY/urg1P7q4NT+6uDU/uLVyPXVxLPn1cSz59XEs+fVw7Lg
+ 0b2rttG9q7bRvau20b2rts64pz/MtaQtzLWkLcy1pC3MtaQSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMtaQS
+ zLWkLcy1pC3MtaQtzrinP9G9q7bRvau20b2rttG9q7bVw7Lg1cSz59XEs+fVxLPn4tXI9erg1P7q4NT+
+ 6uDU/u3k2P7y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/t5Nj+
+ 6uDU/urg1P7q4NT+4tXI9dXEs+fVxLPn1cSz59XDsuDRvau20b2rttG9q7bRvau2zrinP8y1pC3MtaQt
+ zLWkLcy1pBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMt6Il
+ zLeiKMy3oijMt6Ioz7ypZdC9qoPQvaqD0L2qg9PArpPWxLSs1sS0rNbEtKzYx7e05NjL5+TYy+fk2Mvn
+ 5NjL5+je0vXp39P36d/T9+nf0/ft5Nn87+fd/+/n3f/v593/8One//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Dp3v/v593/7+fd/+/n3f/t5Nn86d/T9+nf0/fp39P3
+ 6N7S9eTYy+fk2Mvn5NjL5+TYy+fYx7e01sS0rNbEtKzWxLSs08Cuk9C9qoPQvaqD0L2qg8+8qWXMt6Io
+ zLeiKMy3oijMt6IlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMy3ojjMt6I8zLeiPMy3ojzPvKmX0L2qxdC9qsXQvarF
+ 08Gv1NfFtevXxbXr18W169rJuu7r4tb/6+LW/+vi1v/r4tb/8erg//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/x6uD/6+LW/+vi1v/r4tb/6+LW/9rJuu7XxbXr
+ 18W169fFtevTwa/U0L2qxdC9qsXQvarFz7ypl8y3ojzMt6I8zLeiPMy3ojgAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ zLeiOMy3ojzMt6I8zLeiPM+8qZfQvarF0L2qxdC9qsXTwa/U18W169fFtevXxbXr2sm67uvi1v/r4tb/
+ 6+LW/+vi1v/x6uD/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Hq4P/r4tb/6+LW/+vi1v/r4tb/2sm67tfFtevXxbXr18W169PBr9TQvarF0L2qxdC9qsXPvKmX
+ zLeiPMy3ojzMt6I8zLeiOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMt6I4zLeiPMy3ojzMt6I8z7ypl9C9qsXQvarF
+ 0L2qxdPBr9TXxbXr18W169fFtevaybru6+LW/+vi1v/r4tb/6+LW//Hq4P/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8erg/+vi1v/r4tb/6+LW/+vi1v/aybru
+ 18W169fFtevXxbXr08Gv1NC9qsXQvarF0L2qxc+8qZfMt6I8zLeiPMy3ojzMt6I4AAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM65pQzOuaUZzrmlGc65pRnPu6gk0b6rUdG+q1HRvqtR
+ 0b6rUdXDsn/Vw7KC1cOygtXDsoLczLy+3c+/3N3Pv9zdz7/c4NLD5eLVx/Pi1cfz4tXH8+TXyvXu5tr/
+ 7uba/+7m2v/u5tr/8erg//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/x6uD/7uba/+7m2v/u5tr/7uba/+TXyvXi1cfz4tXH8+LVx/Pg0sPl3c+/3N3Pv9zdz7/c
+ 3My8vtXDsoLVw7KC1cOygtXDsn/RvqtR0b6rUdG+q1HRvqtRz7uoJM65pRnOuaUZzrmlGc65pQwAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ zrmlHc65pT7OuaU+zrmlPs+7qFrRvqvL0b6ry9G+q8vRvqvL2ce36tnIuOzZyLjs2ci47Ofbzvnt5Nj/
+ 7eTY/+3k2P/v59z/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh/+/n3P/t5Nj/7eTY/+3k2P/n28752ci47NnIuOzZyLjs2ce36tG+q8vRvqvL
+ 0b6ry9G+q8vPu6hazrmlPs65pT7OuaU+zrmlHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOuaUdzrmlPs65pT7OuaU+z7uoWtG+q8vRvqvL
+ 0b6ry9G+q8vZx7fq2ci47NnIuOzZyLjs59vO+e3k2P/t5Nj/7eTY/+/n3P/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/7+fc/+3k2P/t5Nj/
+ 7eTY/+fbzvnZyLjs2ci47NnIuOzZx7fq0b6ry9G+q8vRvqvL0b6ry8+7qFrOuaU+zrmlPs65pT7OuaUd
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAM65pR3OuaU+zrmlPs65pT7Pu6ha0b6ry9G+q8vRvqvL0b6ry9nHt+rZyLjs2ci47NnIuOzn2875
+ 7eTY/+3k2P/t5Nj/7+fc//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/v59z/7eTY/+3k2P/t5Nj/59vO+dnIuOzZyLjs2ci47NnHt+rRvqvL
+ 0b6ry9G+q8vRvqvLz7uoWs65pT7OuaU+zrmlPs65pR0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAL+/nwG/v58Bv7+fAb+/nwHNuKQSzbikGM24pBjNuKQYzrqmNs+6p1fPuqdXz7qnV9G+q2/WxLLS
+ 1sSy0tbEstLWxLLS3My97d3Nvu/dzb7v3c2+7+jd0Pru5dn/7uXZ/+7l2f/v59z/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh/+/n3P/u5dn/
+ 7uXZ/+7l2f/o3dD63c2+793Nvu/dzb7v3My97dXEstLVxLLS1cSy0tXEstLRvqtvz7qnV8+6p1fPuqdX
+ z7qmNc65pRjOuaUYzrmlGM65pRK/v58Bv7+fAb+/nwG/v58Bv7+fCL+/nwi/v58Iv7+fCM24pIjNuKS3
+ zbikt824pLfPuqfV0Lyp+NC8qfjQvKn41sSz+e3k2P/t5Nj/7eTY/+3k2P/y6+D/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6uD/
+ 7OPX/+zj1//s49f/7OPX/9bEs/nQvKr40Lyq+NC8qvjPu6jUzrmltc65pbXOuaW1zrmlh7+/nwi/v58I
+ v7+fCL+/nwi/v58Iv7+fCL+/nwi/v58IzbikiM24pLfNuKS3zbikt8+6p9XQvKn40Lyp+NC8qfjWxLP5
+ 7eTY/+3k2P/t5Nj/7eTY//Lr4P/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lq4P/s49f/7OPX/+zj1//s49f/1sSz+dC8qvjQvKr4
+ 0Lyq+M+7qNTOuaW1zrmltc65pbXOuaWHv7+fCL+/nwi/v58Iv7+fCL+/nwi/v58Iv7+fCL+/nwjNuKSI
+ zbikt824pLfNuKS3z7qn1dC8qfjQvKn40Lyp+NbEs/nt5Nj/7eTY/+3k2P/t5Nj/8uvg//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8urg/+zj1//s49f/7OPX/+zj1//WxLP50Lyq+NC8qvjQvKr4z7uo1M65pbXOuaW1zrmltc65pYe/v58I
+ v7+fCL+/nwi/v58Iv7+fCL+/nwi/v58Iv7+fCM24pIjNuKS3zbikt824pLfPuqfV0Lyp+NC8qfjQvKn4
+ 1sSz+e3k2P/t5Nj/7eTY/+3k2P/y6+D/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6uD/7OPX/+zj1//s49f/7OPX/9bEs/nQvKr4
+ 0Lyq+NC8qvjPu6jUzrmltc65pbXOuaW1zrmlh7+/nwi/v58Iv7+fCL+/nwi/v58Bv7+fAb+/nwG/v58B
+ zbuiFc27oh3Nu6IdzbuiHc+7p0fPu6h4z7uoeM+7qHjRvauN1MKx4tTCseLUwrHi1MKx4t/Sw/Hg08Xy
+ 4NPF8uDTxfLq4dX77+jd/+/o3f/v6N3/8One//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/7+bb/+3i1v/t4tb/7eLW/+fWxf/WtJj/1rSY/9a0mP/WtJj/
+ 1rSY/9a0mP/WtJj/1rSY/+fWxf/t4tb/7eLW/+3i1v/v5tv/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/w6d7/7+jd/+/o3f/v6N3/6uHV++DTxfLg08Xy
+ 4NPF8t/Sw/HUwrHi1MKx4tTCseLUwrHi0b2rjc+7qXjPu6l4z7upeM+6qEfMuqgczLqoHMy6qBzMuqgV
+ v7+fAb+/nwG/v58Bv7+fAQAAAAAAAAAAAAAAAAAAAADMzJkEzMyZBczMmQXMzJkFz7unMc+6qGTPuqhk
+ z7qoZM+7qXzQvKrd0Lyq3dC8qt3QvKrd3M6/793PwPDdz8Dw3c/A8Onf0/rv59z/7+fc/+/n3P/w6d7/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/v5tr/
+ 7OHU/+zh1P/s4dT/5dPB/9Ksjf/SrI3/0qyN/9Ksjf/SrI3/0qyN/9Ksjf/SrI3/5dPB/+zh1P/s4dT/
+ 7OHU/+/m2v/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Dp3v/v59z/7+fc/+/n3P/p39P63c/A8N3PwPDdz8Dw3M6/79C8qt3QvKrd0Lyq3dC8qt3Pu6l8
+ z7qoZM+6qGTPuqhkzrqpMb+/vwS/v78Ev7+/BL+/vwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAMzMmQTMzJkFzMyZBczMmQXPu6cxz7qoZM+6qGTPuqhkz7upfNC8qt3QvKrd0Lyq3dC8qt3czr/v
+ 3c/A8N3PwPDdz8Dw6d/T+u/n3P/v59z/7+fc//Dp3v/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh/+/m2v/s4dT/7OHU/+zh1P/l08H/0qyN/9Ksjf/SrI3/
+ 0qyN/9Ksjf/SrI3/0qyN/9Ksjf/l08H/7OHU/+zh1P/s4dT/7+ba//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8One/+/n3P/v59z/7+fc/+nf0/rdz8Dw
+ 3c/A8N3PwPDczr/v0Lyq3dC8qt3QvKrd0Lyq3c+7qXzPuqhkz7qoZM+6qGTOuqkxv7+/BL+/vwS/v78E
+ v7+/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMyZBMzMmQXMzJkFzMyZBc+7pzHPuqhk
+ z7qoZM+6qGTPu6l80Lyq3dC8qt3QvKrd0Lyq3dzOv+/dz8Dw3c/A8N3PwPDp39P67+fc/+/n3P/v59z/
+ 8One//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 7+ba/+zh1P/s4dT/7OHU/+XTwf/SrI3/0qyN/9Ksjf/SrI3/0qyN/9Ksjf/SrI3/0qyN/+XTwf/s4dT/
+ 7OHU/+zh1P/v5tr/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/w6d7/7+fc/+/n3P/v59z/6d/T+t3PwPDdz8Dw3c/A8NzOv+/QvKrd0Lyq3dC8qt3QvKrd
+ z7upfM+6qGTPuqhkz7qoZM66qTG/v78Ev7+/BL+/vwS/v78DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADMzJkBzMyZAszMmQLMzJkCz7unFM+6qCjPuqgoz7qoKM+7qTLPvKpaz7yqWs+8qlrPvKpa
+ 18a2ltfGtprXxraa18a2mtzNvc/ez8Dp3s/A6d7PwOnh1MXu5trN9ebazfXm2s3159zP9/Do3f/w6N3/
+ 8Ojd//Do3f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6uD/
+ 7ePW/+3j1v/t49b/7ePW/+DItP/dwqv/3cKr/93Cq//Yt53/06+R/9Ovkf/Tr5H/1a2N/9ingP/Yp4D/
+ 2KeA/9ingP/Yp4D/2KeA/9ingP/Yp4D/1ayM/9Ovkf/Tr5H/06+R/9i3nf/dwqv/3cKr/93Cq//gyLT/
+ 7ePW/+3j1v/t49b/7ePW//Lq4P/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/w6N3/8Ojd//Do3f/w6N3/59zP9ubazfXm2s315trN9eHUxe7ez8Dp3s/A6d7PwOnczb3P
+ 18a2mtfGtprXxraa18a2ltG7qVrRu6la0bupWtG7qVrQuqkyz7qoKM+6qCjPuqgozrqpFL+/vwK/v78C
+ v7+/Ar+/vwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAqqqqAaqqqgOqqqoDqqqqA6qqqgPNuKZbzbimYc24pmHNuKZhz7ypstC9qtvQvarb
+ 0L2q29XEsuPdzr7v3c6+793Ovu/f0cLx7ubb/+7m2//u5tv/7ubb//Hq4P/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Hq4P/q3c7/6t3O/+rdzv/q3c7/1LGV/8+mh//Ppof/
+ z6aH/8mZdf/DjWX/w41l/8ONZf/Kk2r/3KR4/9ykeP/cpHj/3KR4/9yjeP/co3j/3KN4/9yjeP/Kk2n/
+ w41k/8ONZP/DjWT/yZl0/8+mh//Ppof/z6aH/9Sxlf/q3c7/6t3O/+rdzv/q3c7/8erg//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8erg/+7m2//u5tv/7ubb/+7m2//f0cLw
+ 3c6+7t3Ovu7dzr7u1cSy49C9qtvQvarb0L2q28+8qbLNuKZhzbimYc24pmHNuKZb/4CAAv+AgAL/gIAC
+ /4CAAv+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqqoBqqqqA6qqqgOqqqoD
+ qqqqA824plvNuKZhzbimYc24pmHPvKmy0L2q29C9qtvQvarb1cSy493Ovu/dzr7v3c6+79/RwvHu5tv/
+ 7ubb/+7m2//u5tv/8erg//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8erg/+rdzv/q3c7/6t3O/+rdzv/UsZX/z6aH/8+mh//Ppof/yZl1/8ONZf/DjWX/w41l/8qTav/cpHj/
+ 3KR4/9ykeP/cpHj/3KN4/9yjeP/co3j/3KN4/8qTaf/DjWT/w41k/8ONZP/JmXT/z6aH/8+mh//Ppof/
+ 1LGV/+rdzv/q3c7/6t3O/+rdzv/x6uD/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/x6uD/7ubb/+7m2//u5tv/7ubb/9/RwvDdzr7u3c6+7t3Ovu7VxLLj0L2q29C9qtvQvarb
+ z7ypss24pmHNuKZhzbimYc24plv/gIAC/4CAAv+AgAL/gIAC/4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAKqqqgGqqqoDqqqqA6qqqgOqqqoDzbimW824pmHNuKZhzbimYc+8qbLQvarb
+ 0L2q29C9qtvVxLLj3c6+793Ovu/dzr7v39HC8e7m2//u5tv/7ubb/+7m2//x6uD/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/x6uD/6t3O/+rdzv/q3c7/6t3O/9Sxlf/Ppof/
+ z6aH/8+mh//JmXX/w41l/8ONZf/DjWX/ypNq/9ykeP/cpHj/3KR4/9ykeP/co3j/3KN4/9yjeP/co3j/
+ ypNp/8ONZP/DjWT/w41k/8mZdP/Ppof/z6aH/8+mh//UsZX/6t3O/+rdzv/q3c7/6t3O//Hq4P/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Hq4P/u5tv/7ubb/+7m2//u5tv/
+ 39HC8N3Ovu7dzr7u3c6+7tXEsuPQvarb0L2q29C9qtvPvKmyzbimYc24pmHNuKZhzbimW/+AgAL/gIAC
+ /4CAAv+AgAL/gIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqAKqqqgKqqqoC
+ qqqqAqqqqgLNuKY8zbimQc24pkHNuKZBz7ypd9C9qpLQvaqS0L2qktXDsqLby7q628u6utvLurrdzb3B
+ 5drN8eXazfHl2s3x5drN8erg1Pfr4dX46+HV+Ovh1fjt49f87uTY/+7k2P/u5Nj/69/R/+bUw//m1MP/
+ 5tTD/+bTwf/dwqr/3cKq/93Cqv/dwqr/1aqJ/9Okgf/TpIH/06SB/9Kfef/Sm3H/0ptx/9Kbcf/Wn3X/
+ 46p+/+Oqfv/jqn7/46p+/+Oqfv/jqn7/46p+/+Oqfv/Wn3T/0ptx/9Kbcf/Sm3H/0p94/9Okgf/TpIH/
+ 06SB/9Wqif/dwqr/3cKq/93Cqv/dwqr/5tPB/+bUw//m1MP/5tTD/+vf0f/u5Nj/7uTY/+7k2P/t49f8
+ 6+HV+Ovh1fjr4dX46uDU9+XazfHl2s3x5drN8eXazfHdzb3A28u6udvLurnby7q51cOyotC9qpLQvaqS
+ 0L2qks+8qXfNuKZBzbimQc24pkHNuKY8/4CAAf+AgAH/gIAB/4CAAf+AgAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAz7ilIM+4pU/PuKVPz7ilT8+5pmHPvarVz72q1c+9qtXPvarV2sm559vLu+rby7vq
+ 28u76uHSwvfl1sf/5dbH/+XWx//exrL/z6aH/8+mh//Ppof/zqSF/8OMY//DjGP/w4xj/8OMY//WnXH/
+ 26F1/9uhdf/boXX/5qyA/++2iv/vtor/77aK/++2iv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL/++2iv/vtor/77aK/++2iv/mrID/26F1/9uhdf/boXX/1p1x/8OMY//DjGP/w4xj/8OMY//OpIX/
+ z6aH/8+mh//Ppof/3say/+XWx//l1sf/5dbH/+HSwvfby7vq28u76tvLu+raybnnz72q1c+9qtXPvarV
+ z72q1c+5pmHPuKVPz7ilT8+4pU/PuKUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPuKUgz7ilT8+4pU/PuKVP
+ z7mmYc+9qtXPvarVz72q1c+9qtXaybnn28u76tvLu+rby7vq4dLC9+XWx//l1sf/5dbH/97Gsv/Ppof/
+ z6aH/8+mh//OpIX/w4xj/8OMY//DjGP/w4xj/9adcf/boXX/26F1/9uhdf/mrID/77aK/++2iv/vtor/
+ 77aK//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/77aK/++2iv/vtor/77aK/+asgP/boXX/
+ 26F1/9uhdf/WnXH/w4xj/8OMY//DjGP/w4xj/86khf/Ppof/z6aH/8+mh//exrL/5dbH/+XWx//l1sf/
+ 4dLC99vLu+rby7vq28u76trJuefPvarVz72q1c+9qtXPvarVz7mmYc+4pU/PuKVPz7ilT8+4pSAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAM+4pSDPuKVPz7ilT8+4pU/PuaZhz72q1c+9qtXPvarVz72q1drJuefby7vq
+ 28u76tvLu+rh0sL35dbH/+XWx//l1sf/3say/8+mh//Ppof/z6aH/86khf/DjGP/w4xj/8OMY//DjGP/
+ 1p1x/9uhdf/boXX/26F1/+asgP/vtor/77aK/++2iv/vtor/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//vtor/77aK/++2iv/vtor/5qyA/9uhdf/boXX/26F1/9adcf/DjGP/w4xj/8OMY//DjGP/
+ zqSF/8+mh//Ppof/z6aH/97Gsv/l1sf/5dbH/+XWx//h0sL328u76tvLu+rby7vq2sm558+9qtXPvarV
+ z72q1c+9qtXPuaZhz7ilT8+4pU/PuKVPz7ilIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz7ilHc+4pUrPuKVK
+ z7ilSs+5plvPvKnKz7ypys+8qcrPvKnK2Ma05NnHtujZx7bo2ce26N/NvPbj0cD/49HA/+PRwP/cw63/
+ 0KaG/9Cmhv/Qpob/z6SE/8aPZv/Gj2b/xo9m/8aPZv/Yn3P/3KJ2/9yidv/conb/5q2B/++2iv/vtor/
+ 77aK/++2iv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/++2iv/vtor/77aK/++2iv/mrYH/
+ 3KJ2/9yidv/conb/2J9z/8aPZv/Gj2b/xo9m/8aPZv/PpIT/0KaG/9Cmhv/Qpob/3MOt/+PRwP/j0cD/
+ 49HA/9/NvPbZx7bo2ce26NnHtujYxrTkz7ypys+8qcrPvKnKz7ypys+5plvPuKVKz7ilSs+4pUrPuKUd
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt3pOBrd6Ti63ek4ut3pOLrd6Ti68h1yz
+ vIdcx7yHXMe8h1zHv4hd5sGIXvvBiF77wYhe+8uSZ/zfpXn/36V5/9+lef/gpnr/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL/+Cmev/fpXn/36V5/9+lef/Lkmf8wYhe+8GIXvvBiF77v4hd5ryHXMe8h1zHvIdcx7yHXLO3ek4u
+ t3pOLrd6Ti63ek4ut3pOBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAC3ek4Gt3pOLrd6Ti63ek4ut3pOLryHXLO8h1zHvIdcx7yHXMe/iF3mwYhe+8GIXvvBiF77
+ y5Jn/N+lef/fpXn/36V5/+Cmev/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/4KZ6/9+lef/fpXn/36V5/8uSZ/zBiF77
+ wYhe+8GIXvu/iF3mvIdcx7yHXMe8h1zHvIdcs7d6Ti63ek4ut3pOLrd6Ti63ek4GAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALd6Tga3ek4ut3pOLrd6Ti63ek4u
+ vIdcs7yHXMe8h1zHvIdcx7+IXebBiF77wYhe+8GIXvvLkmf836V5/9+lef/fpXn/4KZ6//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//gpnr/36V5/9+lef/fpXn/y5Jn/MGIXvvBiF77wYhe+7+IXea8h1zHvIdcx7yHXMe8h1yz
+ t3pOLrd6Ti63ek4ut3pOLrd6TgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAt3pOBrd6Ti63ek4ut3pOLrd6Ti68h1yzvIdcx7yHXMe8h1zHv4hd5sGIXvvBiF77
+ wYhe+8uSZ/zfpXn/36V5/9+lef/gpnr/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+Cmev/fpXn/36V5/9+lef/Lkmf8
+ wYhe+8GIXvvBiF77v4hd5ryHXMe8h1zHvIdcx7yHXLO3ek4ut3pOLrd6Ti63ek4ut3pOBgAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAuH1PIbh9TzG4fU8xuH1PMbqAU127gVWgu4FVoLuBVaC8glalwohcyMKIXMjCiFzI
+ wohcyNqhde7dpHj03aR49N2kePTjqn76566C/ueugv7nroL+6bCE/u2zh//ts4f/7bOH/+20iP/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/7bSI/+2zh//ts4f/7bOH/+mwhP7nroL+566C/ueugv7jqn763aR49N2kePTdpHj0
+ 2qF17sKIXMjCiFzIwohcyMKIXMi9glamvIFVobyBVaG8gVWhu4BTXrh9TzG4fU8xuH1PMbh9TyEAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4fU8puH1PPbh9Tz24fU89
+ uoBTdbuBVci7gVXIu4FVyLyCVs3DiV3uw4ld7sOJXe7DiV3u4KZ6/eSqfv/kqn7/5Kp+/+uyhv/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL/+uyhv/kqn7/5Kp+/+Sqfv/gpnr9w4ld7sOJXe7DiV3uw4ld7r2CVs68gVXJ
+ vIFVybyBVcm7gFN1uH1PPbh9Tz24fU89uH1PKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAALh9Tym4fU89uH1PPbh9Tz26gFN1u4FVyLuBVci7gVXIvIJWzcOJXe7DiV3u
+ w4ld7sOJXe7gpnr95Kp+/+Sqfv/kqn7/67KG//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/67KG/+Sqfv/kqn7/
+ 5Kp+/+Cmev3DiV3uw4ld7sOJXe7DiV3uvYJWzryBVcm8gVXJvIFVybuAU3W4fU89uH1PPbh9Tz24fU8p
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuH1PKbh9Tz24fU89
+ uH1PPbqAU3W7gVXIu4FVyLuBVci8glbNw4ld7sOJXe7DiV3uw4ld7uCmev3kqn7/5Kp+/+Sqfv/rsob/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//rsob/5Kp+/+Sqfv/kqn7/4KZ6/cOJXe7DiV3uw4ld7sOJXe69glbO
+ vIFVybyBVcm8gVXJu4BTdbh9Tz24fU89uH1PPbh9TykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1flEHtX5RJbV+USW1flEl
+ tX5RJbqAVGu6gFRwuoBUcLqAVHDCiFyNxItfm8SLX5vEi1+bzZNnudWccOXVnHDl1Zxw5dadcejconb3
+ 3KJ299yidvfconb36a+D/uqxhf/qsYX/6rGF/+61if/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+61if/qsYX/
+ 6rGF/+qxhf/pr4P+3KJ299yidvfconb33KJ299adcejVnHDm1Zxw5tWccObNk2e5xYtemsWLXprFi16a
+ wohbjLqAVHC6gFRwuoBUcLqAVGu1flEltX5RJbV+USW1flEltX5RBwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAALV+UQ61flFFtX5RRbV+UUW1flFFuoBUybqAVNK6gFTSuoBU0sOKXuTHjmLt
+ x45i7ceOYu3Um2/0566C/+eugv/nroL/6K+D//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 6K+D/+eugv/nroL/566C/9Wbb/TIjmHsyI5h7MiOYezEil3juoBU0rqAVNK6gFTSuoBUybV+UUW1flFF
+ tX5RRbV+UUW1flEOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtX5RDrV+UUW1flFF
+ tX5RRbV+UUW6gFTJuoBU0rqAVNK6gFTSw4pe5MeOYu3HjmLtx45i7dSbb/TnroL/566C/+eugv/or4P/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//or4P/566C/+eugv/nroL/1Ztv9MiOYezIjmHs
+ yI5h7MSKXeO6gFTSuoBU0rqAVNK6gFTJtX5RRbV+UUW1flFFtX5RRbV+UQ4AAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAC1flEOtX5RRbV+UUW1flFFtX5RRbqAVMm6gFTSuoBU0rqAVNLDil7k
+ x45i7ceOYu3HjmLt1Jtv9Oeugv/nroL/566C/+ivg//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL/+ivg//nroL/566C/+eugv/Vm2/0yI5h7MiOYezIjmHsxIpd47qAVNK6gFTSuoBU0rqAVMm1flFF
+ tX5RRbV+UUW1flFFtX5RDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAKqAVQKqgFUCqoBVAqqAVQK5gFIVuYBSHLmAUhy5gFIcvIFVK72BVju9gVY7vYFWO8CFWUfFjGBz
+ xYxgc8WMYHPFjGBzyY9j18mPZN7Jj2TeyY9k3tCWauvTmm7y05pu8tOabvLco3f36bCE/+mwhP/psIT/
+ 6rGF//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/6rGF/+mwhP/psIT/6bCE/9yjd/fTmm3x
+ 05pt8dOabfHQlmrryY9k3smPZN7Jj2TeyY9j18WMX3PFjF9zxYxfc8WMX3PAhVlHvYFWO72BVju9gVY7
+ vIFVK7mAUhy5gFIcuYBSHLmAUhWqgFUCqoBVAqqAVQKqgFUCqoBVBqqAVQaqgFUGqoBVBrmAUk+5gFJq
+ uYBSarmAUmq8gVWhvYFW372BVt+9gVbfwYZa49KXa/HSl2vx0pdr8dKXa/HpsIX+67KH/+uyh//rsof/
+ 7rWK//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+61iv/rsof/67KH/+uyh//psIX+
+ 0Zdq8tGXavLRl2ry0Zdq8sGGWuO9gVbfvYFW372BVt+8gVWhuYBSarmAUmq5gFJquYBST6qAVQaqgFUG
+ qoBVBqqAVQaqgFUGqoBVBqqAVQaqgFUGuYBST7mAUmq5gFJquYBSaryBVaG9gVbfvYFW372BVt/Bhlrj
+ 0pdr8dKXa/HSl2vx0pdr8emwhf7rsof/67KH/+uyh//utYr/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/7rWK/+uyh//rsof/67KH/+mwhf7Rl2ry0Zdq8tGXavLRl2rywYZa472BVt+9gVbf
+ vYFW37yBVaG5gFJquYBSarmAUmq5gFJPqoBVBqqAVQaqgFUGqoBVBqqAVQaqgFUGqoBVBqqAVQa5gFJP
+ uYBSarmAUmq5gFJqvIFVob2BVt+9gVbfvYFW38GGWuPSl2vx0pdr8dKXa/HSl2vx6bCF/uuyh//rsof/
+ 67KH/+61iv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//utYr/67KH/+uyh//rsof/
+ 6bCF/tGXavLRl2ry0Zdq8tGXavLBhlrjvYFW372BVt+9gVbfvIFVobmAUmq5gFJquYBSarmAUk+qgFUG
+ qoBVBqqAVQaqgFUGqoBVBqqAVQaqgFUGqoBVBrmAUk+5gFJquYBSarmAUmq8gVWhvYFW372BVt+9gVbf
+ wYZa49KXa/HSl2vx0pdr8dKXa/HpsIX+67KH/+uyh//rsof/7rWK//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL/+61iv/rsof/67KH/+uyh//psIX+0Zdq8tGXavLRl2ry0Zdq8sGGWuO9gVbf
+ vYFW372BVt+8gVWhuYBSarmAUmq5gFJquYBST6qAVQaqgFUGqoBVBqqAVQa/gEAEv4BABL+AQAS/gEAE
+ un1SSrp9UmS6fVJkun1SZLuAVJy7gVXdu4FV3buBVd3AhVnh0ZZq8NGWavDRlmrw0ZZq8OmwhP7rsob/
+ 67KG/+uyhv/utYn/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+62iv/ptYn/6bWJ/+m1if/ptYn/
+ 6baI/+m2iP/ptoj/6baI/+63iv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/7rWJ/+uyhv/rsob/
+ 67KG/+mwhP7Rlmrw0ZZq8NGWavDRlmrwwIVZ4buBVd27gVXdu4FV3buAVJy6fVJkun1SZLp9UmS6fVJK
+ v4BABL+AQAS/gEAEv4BABL+AQAS/gEAEv4BABL+AQAS6fVJKun1SZLp9UmS6fVJku4BUnLuBVd27gVXd
+ u4FV3cCFWeHRlmrw0ZZq8NGWavDRlmrw6bCE/uuyhv/rsob/67KG/+61if/wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/7raK/+m1if/ptYn/6bWJ/+m1if/ptoj/6baI/+m2iP/ptoj/7reK//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//utYn/67KG/+uyhv/rsob/6bCE/tGWavDRlmrw0ZZq8NGWavDAhVnh
+ u4FV3buBVd27gVXdu4BUnLp9UmS6fVJkun1SZLp9Ukq/gEAEv4BABL+AQAS/gEAEv4BABL+AQAS/gEAE
+ v4BABLp9Ukq6fVJkun1SZLp9UmS7gFScu4FV3buBVd27gVXdwIVZ4dGWavDRlmrw0ZZq8NGWavDpsIT+
+ 67KG/+uyhv/rsob/7rWJ//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//utor/6bWJ/+m1if/ptYn/
+ 6bWJ/+m2iP/ptoj/6baI/+m2iP/ut4r/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+61if/rsob/
+ 67KG/+uyhv/psIT+0ZZq8NGWavDRlmrw0ZZq8MCFWeG7gVXdu4FV3buBVd27gFScun1SZLp9UmS6fVJk
+ un1SSr+AQAS/gEAEv4BABL+AQAS/gEAEv4BABL+AQAS/gEAEun1SSrp9UmS6fVJkun1SZLuAVJy7gVXd
+ u4FV3buBVd3AhVnh0ZZq8NGWavDRlmrw0ZZq8OmwhP7rsob/67KG/+uyhv/utYn/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL/+62iv/ptYn/6bWJ/+m1if/ptYn/6baI/+m2iP/ptoj/6baI/+63iv/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/7rWJ/+uyhv/rsob/67KG/+mwhP7Rlmrw0ZZq8NGWavDRlmrw
+ wIVZ4buBVd27gVXdu4FV3buAVJy6fVJkun1SZLp9UmS6fVJKv4BABL+AQAS/gEAEv4BABL+AQAG/gEAB
+ v4BAAb+AQAG6fVIUun1SG7p9Uhu6fVIbun9UK7p/VT26f1U9un9VPb6DWEzEiV6IxIleiMSJXojEiV6I
+ yo9j4MqPY+fKj2Pnyo9j59OZbPDXnXD0151w9NedcPTfpXn467GG/+uxhv/rsYb/7LKH//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL/+q1if/otYj/6LWI/+i1iP/RsYH/va16/72tev+9rXr/tqx4/6Opc/+jqXP/
+ o6lz/6Opc/+jqnP/o6pz/6Oqc/+jqnP/t6x4/76tev++rXr/vq16/9Kxgf/otYj/6LWI/+i1iP/qtYn/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/7LOG/+uyhf/rsoX/67KF/9+mefjXnXD0151w9NedcPTTmWzw
+ yo9j58qPY+fKj2Pnyo9j4MSJXojEiV6IxIleiMSJXoi+g1hMun9VPbp/VT26f1U9un9UK7p9Uhu6fVIb
+ un1SG7p9UhS/gEABv4BAAb+AQAG/gEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqVVUB
+ qlVVA6pVVQOqVVUDt3lTFrl9U2K5fVNiuX1TYrl9U2K8gVXWvIFV3ryBVd68gVXeyI1h6s2TZvDNk2bw
+ zZNm8Nmfcvbpr4T/6a+E/+mvhP/qsIX/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/57WI/+W0h//ltIf/
+ 5bSH/8avff+rqnT/q6p0/6uqdP+iqXL/iaVr/4mla/+JpWv/iaVr/4mla/+JpWv/iaVr/4mla/+jqXL/
+ rKp0/6yqdP+sqnT/x699/+W0h//ltIf/5bSH/+e1iP/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//qsYT/
+ 6bCD/+mwg//psIP/2Z9y9s2TZvDNk2bwzZNm8MiNYeq8gVXevIFV3ryBVd68gVXWuX1TYrl9U2K5fVNi
+ uX1TYrd5UxaqVVUDqlVVA6pVVQOqVVUBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpVVQGqVVUDqlVVA6pVVQO3eVMWuX1TYrl9U2K5fVNi
+ uX1TYryBVda8gVXevIFV3ryBVd7IjWHqzZNm8M2TZvDNk2bw2Z9y9umvhP/pr4T/6a+E/+qwhf/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//ntYj/5bSH/+W0h//ltIf/xq99/6uqdP+rqnT/q6p0/6Kpcv+JpWv/
+ iaVr/4mla/+JpWv/iaVr/4mla/+JpWv/iaVr/6Opcv+sqnT/rKp0/6yqdP/Hr33/5bSH/+W0h//ltIf/
+ 57WI//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+qxhP/psIP/6bCD/+mwg//Zn3L2zZNm8M2TZvDNk2bw
+ yI1h6ryBVd68gVXevIFV3ryBVda5fVNiuX1TYrl9U2K5fVNit3lTFqpVVQOqVVUDqlVVA6pVVQEAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ qlVVAapVVQOqVVUDqlVVA7d5Uxa5fVNiuX1TYrl9U2K5fVNivIFV1ryBVd68gVXevIFV3siNYerNk2bw
+ zZNm8M2TZvDZn3L26a+E/+mvhP/pr4T/6rCF//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+e1iP/ltIf/
+ 5bSH/+W0h//Gr33/q6p0/6uqdP+rqnT/oqly/4mla/+JpWv/iaVr/4mla/+JpWv/iaVr/4mla/+JpWv/
+ o6ly/6yqdP+sqnT/rKp0/8evff/ltIf/5bSH/+W0h//ntYj/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 6rGE/+mwg//psIP/6bCD/9mfcvbNk2bwzZNm8M2TZvDIjWHqvIFV3ryBVd68gVXevIFV1rl9U2K5fVNi
+ uX1TYrl9U2K3eVMWqlVVA6pVVQOqVVUDqlVVAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqVVUBqlVVAqpVVQKqVVUCt3lTDLl9UzS5fVM0
+ uX1TNLl9UzS8gFVyvIBVd7yAVXe8gFV3xYpelsiOYaXIjmGlyI5hpc+UacHWnHDr1pxw69accOvXnXLt
+ 4KZ69uCmevbgpnr24KZ69uuyhv7ss4f/7LOH/+yzh//vtor/8LeL//C3i//wt4v/7reK/+u2if/rton/
+ 67aJ/+m1if/RsYH/0bGB/9Gxgf/RsYH/v657/7qtev+6rXr/uq16/6yve/+fsXv/n7F7/5+xe/+csnz/
+ kraA/5K2gP+StoD/kraA/5K2gP+StoD/kraA/5K2gP+csnz/n7F7/5+xe/+fsXv/rK97/7qtev+6rXr/
+ uq16/7+ue//RsYH/0bGB/9Gxgf/RsYH/6bWJ/+u2if/rton/67aJ/+63iv/wt4v/8LeL//C3i//vtor/
+ 7LOH/+yzh//ss4f/67KG/uCmevbgpnr24KZ69uCmevbXnnHt1pxw69accOvWnHDrz5VowciOYaXIjmGl
+ yI5hpcWKXpW8gVV2vIFVdryBVXa8gVVyuX1TNLl9UzS5fVM0uX1TNLd5UwyqVVUCqlVVAqpVVQKqVVUB
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAH/AAAB/wAAAf8AAAG4elA1
+ uHtRT7h7UU+4e1FPun9UhbuBVdW7gVXVu4FV1b2DV9jMkWXrzJFl68yRZevMkWXr5at//Oivg//or4P/
+ 6K+D/+20iP/wt4v/8LeL//C3i//stor/5bSH/+W0h//ltIf/4bOG/62rdf+tq3X/rat1/62rdf+Qpm3/
+ iaVr/4mla/+JpWv/jbB4/5G5g/+RuYP/kbmD/5S9if+dyZj/ncmY/53JmP+dyZj/ncmY/53JmP+dyZj/
+ ncmY/5S9if+RuYP/kbmD/5G5g/+NsHj/iaVr/4mla/+JpWv/kKZt/62rdf+tq3X/rat1/62rdf/hs4b/
+ 5bSH/+W0h//ltIf/7LaK//C3i//wt4v/8LeL/+20iP/or4P/6K+D/+ivg//lq3/8zJFl68yRZevMkWXr
+ zJFl672DV9i7gVXVu4FV1buBVdW6f1SFuHtRT7h7UU+4e1FPuHtRNQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAA/wAAAf8AAAH/AAAB/wAAAbh6UDW4e1FPuHtRT7h7UU+6f1SFu4FV1buBVdW7gVXV
+ vYNX2MyRZevMkWXrzJFl68yRZevlq3/86K+D/+ivg//or4P/7bSI//C3i//wt4v/8LeL/+y2iv/ltIf/
+ 5bSH/+W0h//hs4b/rat1/62rdf+tq3X/rat1/5Cmbf+JpWv/iaVr/4mla/+NsHj/kbmD/5G5g/+RuYP/
+ lL2J/53JmP+dyZj/ncmY/53JmP+dyZj/ncmY/53JmP+dyZj/lL2J/5G5g/+RuYP/kbmD/42weP+JpWv/
+ iaVr/4mla/+Qpm3/rat1/62rdf+tq3X/rat1/+Gzhv/ltIf/5bSH/+W0h//stor/8LeL//C3i//wt4v/
+ 7bSI/+ivg//or4P/6K+D/+Wrf/zMkWXrzJFl68yRZevMkWXrvYNX2LuBVdW7gVXVu4FV1bp/VIW4e1FP
+ uHtRT7h7UU+4e1E1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAB/wAAAf8AAAH/AAAB
+ uHpQNbh7UU+4e1FPuHtRT7p/VIW7gVXVu4FV1buBVdW9g1fYzJFl68yRZevMkWXrzJFl6+Wrf/zor4P/
+ 6K+D/+ivg//ttIj/8LeL//C3i//wt4v/7LaK/+W0h//ltIf/5bSH/+Gzhv+tq3X/rat1/62rdf+tq3X/
+ kKZt/4mla/+JpWv/iaVr/42weP+RuYP/kbmD/5G5g/+UvYn/ncmY/53JmP+dyZj/ncmY/53JmP+dyZj/
+ ncmY/53JmP+UvYn/kbmD/5G5g/+RuYP/jbB4/4mla/+JpWv/iaVr/5Cmbf+tq3X/rat1/62rdf+tq3X/
+ 4bOG/+W0h//ltIf/5bSH/+y2iv/wt4v/8LeL//C3i//ttIj/6K+D/+ivg//or4P/5at//MyRZevMkWXr
+ zJFl68yRZeu9g1fYu4FV1buBVdW7gVXVun9Uhbh7UU+4e1FPuHtRT7h7UTUAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAP8AAAH/AAAB/wAAAf8AAAG4elAquHtRP7h7UT+4e1E/un9UaruBVaq7gVWq
+ u4FVqr2DV67LkGTIy5BkyMuQZMjLkGTI3KV58N6oe/beqHv23qh79t6ugPvesoP93rKD/d6yg/3asYP+
+ 0rGB/9Kxgf/SsYH/0LGB/6iuef+ornn/qK55/6iuef+TrXX/jax0/42sdP+NrHT/kbV+/5S8h/+UvIf/
+ lLyH/5bAjP+dyZj/ncmY/53JmP+dyZj/ncmY/53JmP+dyZj/ncmY/5bAjP+UvIf/lLyH/5S8h/+RtX7/
+ jax0/42sdP+NrHT/k611/6iuef+ornn/qK55/6iuef/QsYH/0rGB/9Kxgf/SsYH/2rGD/t6yg/3esoP9
+ 3rKD/d6ugPveqHv23qh79t6oe/bcpXnwy5BkyMuQZMjLkGTIy5BkyL2DV667gVWqu4FVqruBVaq6f1Rq
+ uHtRP7h7UT+4e1E/uHtRKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtHtPCLR7Tzq0e086tHtPOrR7TzqwhVa/
+ sIVW07CFVtOwhVbTnpNf6ZSbZPeUm2T3lJtk95CeZvqIpWv/iKVr/4ila/+Jpm3/k7uH/5O7h/+Tu4f/
+ k7uH/5zGlf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+cxpX/k7uH/5O7h/+Tu4f/
+ k7uH/4mmbf+IpWv/iKVr/4ila/+Qnmb6lJtk95SbZPeUm2T3npNf6bCFVtOwhVbTsIVW07CFVr+0e086
+ tHtPOrR7Tzq0e086tHtPCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAC0e08ItHtPOrR7Tzq0e086tHtPOrCFVr+whVbTsIVW07CFVtOek1/plJtk95SbZPeUm2T3
+ kJ5m+oila/+IpWv/iKVr/4mmbf+Tu4f/k7uH/5O7h/+Tu4f/nMaV/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/5zGlf+Tu4f/k7uH/5O7h/+Tu4f/iaZt/4ila/+IpWv/iKVr/5CeZvqUm2T3
+ lJtk95SbZPeek1/psIVW07CFVtOwhVbTsIVWv7R7Tzq0e086tHtPOrR7Tzq0e08IAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALR7Twi0e086tHtPOrR7Tzq0e086
+ sIVWv7CFVtOwhVbTsIVW056TX+mUm2T3lJtk95SbZPeQnmb6iKVr/4ila/+IpWv/iaZt/5O7h/+Tu4f/
+ k7uH/5O7h/+cxpX/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nMaV/5O7h/+Tu4f/
+ k7uH/5O7h/+Jpm3/iKVr/4ila/+IpWv/kJ5m+pSbZPeUm2T3lJtk956TX+mwhVbTsIVW07CFVtOwhVa/
+ tHtPOrR7Tzq0e086tHtPOrR7TwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAtHtPCLR7Tzq0e086tHtPOrR7TzqwhVa/sIVW07CFVtOwhVbTnpNf6ZSbZPeUm2T3
+ lJtk95CeZvqIpWv/iKVr/4ila/+Jpm3/k7uH/5O7h/+Tu4f/k7uH/5zGlf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+cxpX/k7uH/5O7h/+Tu4f/k7uH/4mmbf+IpWv/iKVr/4ila/+Qnmb6
+ lJtk95SbZPeUm2T3npNf6bCFVtOwhVbTsIVW07CFVr+0e086tHtPOrR7Tzq0e086tHtPCAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHefYBF3n2Aqd59gKnefYCp5oGI8fKJlrnyiZa58omWu
+ fKJlroKla96DpWzmg6Vs5oOlbOaPtH/0lr2K/pa9iv6WvYr+mMCO/p3Hlv+dx5b/nceW/53Hlv+dyJj/
+ nciY/53ImP+dyJj/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/
+ nciY/53ImP+dyJj/nceW/53Hlv+dx5b/nceW/5jAjv6WvYr+lr2K/pa9iv6PtH/0g6Vs5oOlbOaDpWzm
+ gqVr3nyiZa58omWufKJlrnyiZa55oGI8d59gKnefYCp3n2Aqd59gEQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ d59gEnefYC13n2Atd59gLXmhYj97o2W2e6NltnujZbZ7o2W2f6ds4ICnbeeAp23ngKdt5462gfWWv43+
+ lr+N/pa/jf6ZwpH+nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ mcKR/pa/jf6Wv43+lr+N/o62gfWAp23ngKdt54Cnbed/p2zge6NltnujZbZ7o2W2e6NltnmhYj93n2At
+ d59gLXefYC13n2ASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3n2ASd59gLXefYC13n2AteaFiP3ujZbZ7o2W2
+ e6NltnujZbZ/p2zggKdt54CnbeeAp23njraB9Za/jf6Wv43+lr+N/pnCkf6eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+ZwpH+lr+N/pa/jf6Wv43+jraB9YCnbeeAp23n
+ gKdt53+nbOB7o2W2e6NltnujZbZ7o2W2eaFiP3efYC13n2Atd59gLXefYBIAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAHefYBJ3n2Atd59gLXefYC15oWI/e6NltnujZbZ7o2W2e6Nltn+nbOCAp23ngKdt54CnbeeOtoH1
+ lr+N/pa/jf6Wv43+mcKR/p7Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/5nCkf6Wv43+lr+N/pa/jf6OtoH1gKdt54CnbeeAp23nf6ds4HujZbZ7o2W2e6NltnujZbZ5oWI/
+ d59gLXefYC13n2Atd59gEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAHedXiV3nV4od51eKHedXih6oWRleqJlg3qiZYN6omWDfaRpk4CnbqyAp26sgKdurIOqcrSQuYTn
+ kLmE55C5hOeQuYTnlL6K9ZW+i/eVvov3lb6L95nDkfybxpX/m8aV/5vGlf+cx5b/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nMeW/5vGlf+bxpX/m8aV/5nDkfyVvov3
+ lb6L95W+i/eUvor1kLmE55C5hOeQuYTnkLmE54OqcrSAp26sgKdurICnbqx9pGmTeqJlg3qiZYN6omWD
+ eqFkZXedXih3nV4od51eKHedXiUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd51eOHedXjx3nV48d51ePHqhZJd6omXF
+ eqJlxXqiZcV9pWnUgahv64Gob+uBqG/rhKx07pfBj/+XwY//l8GP/5fBj/+dyJj/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53ImP+XwY//l8GP/5fBj/+XwY//
+ hKx07oGob+uBqG/rgahv632ladR6omXFeqJlxXqiZcV6oWSXd51ePHedXjx3nV48d51eOAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB3nV44d51ePHedXjx3nV48eqFkl3qiZcV6omXFeqJlxX2ladSBqG/rgahv64Gob+uErHTu
+ l8GP/5fBj/+XwY//l8GP/53ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nciY/5fBj/+XwY//l8GP/5fBj/+ErHTugahv64Gob+uBqG/rfaVp1HqiZcV6omXF
+ eqJlxXqhZJd3nV48d51ePHedXjx3nV44AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHedXjh3nV48d51ePHedXjx6oWSX
+ eqJlxXqiZcV6omXFfaVp1IGob+uBqG/rgahv64SsdO6XwY//l8GP/5fBj/+XwY//nciY/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/l8GP/5fBj/+XwY//
+ l8GP/4SsdO6BqG/rgahv64Gob+t9pWnUeqJlxXqiZcV6omXFeqFkl3edXjx3nV48d51ePHedXjgAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd6BfDHegXxl3oF8Zd6BfGXmhYSR7omRR
+ e6JkUXuiZFF7omRRf6drf4Cna4KAp2uCgKdrgoavdr6IsXnciLF53IixedyKs3zljbaB8422gfONtoHz
+ j7iD9ZrEk/+axJP/msST/5rEk/+dyJj/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/53ImP+axJP/msST/5rEk/+axJP/j7iD9Y22gfONtoHzjbaB84qzfOWIsXnc
+ iLF53IixedyGr3a+gKdrgoCna4KAp2uCf6drf3uiZFF7omRRe6JkUXuiZFF5oWEkd6BfGXegXxl3oF8Z
+ d6BfDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB3oF8dd6BfPnegXz53oF8+eaFhWnuiZMt7omTLe6Jky3uiZMuDqm/qg6tw7IOrcOyDq3Ds
+ kbuH+ZjDkf+Yw5H/mMOR/5rFlP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/msWU/5jDkf+Yw5H/mMOR/5G7h/mDq3Dsg6tw7IOrcOyDqm/q
+ e6Jky3uiZMt7omTLe6Jky3mhYVp3oF8+d6BfPnegXz53oF8dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHegXx13oF8+d6BfPnegXz55oWFa
+ e6Jky3uiZMt7omTLe6Jky4Oqb+qDq3Dsg6tw7IOrcOyRu4f5mMOR/5jDkf+Yw5H/msWU/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+axZT/
+ mMOR/5jDkf+Yw5H/kbuH+YOrcOyDq3Dsg6tw7IOqb+p7omTLe6Jky3uiZMt7omTLeaFhWnegXz53oF8+
+ d6BfPnegXx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAd6BfHXegXz53oF8+d6BfPnmhYVp7omTLe6Jky3uiZMt7omTLg6pv6oOrcOyDq3Ds
+ g6tw7JG7h/mYw5H/mMOR/5jDkf+axZT/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5rFlP+Yw5H/mMOR/5jDkf+Ru4f5g6tw7IOrcOyDq3Ds
+ g6pv6nuiZMt7omTLe6Jky3uiZMt5oWFad6BfPnegXz53oF8+d6BfHQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAgJ9gAYCfYAGAn2ABgJ9gAXacXxJ2nF8YdpxfGHacXxh4n2A2eKBhV3igYVd4oGFX
+ e6Nlb4Cna9KAp2vSgKdr0oCna9KGr3Xth69274evdu+Hr3bvk72J+pnEkv+ZxJL/mcSS/5vGlf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ m8aV/5nEkv+ZxJL/mcSS/5O9ifqHr3bvh69274evdu+Gr3XtgKdr0oCna9KAp2vSgKdr0nujZW94oGFX
+ eKBhV3igYVd3oGE1dp5gGHaeYBh2nmAYdp5gEoCfYAGAn2ABgJ9gAYCfYAGAn2AIgJ9gCICfYAiAn2AI
+ dpxfiHacX7d2nF+3dpxft3ieYtV6oGT4eqBk+HqgZPiAp235mMOR/5jDkf+Yw5H/mMOR/57JmP+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57JmP+YwpD/mMKQ/5jCkP+YwpD/f6dt+XmgZPh5oGT4eaBk+HifYtR2nmC1dp5gtXaeYLV2nmCH
+ gJ9gCICfYAiAn2AIgJ9gCICfYAiAn2AIgJ9gCICfYAh2nF+Idpxft3acX7d2nF+3eJ5i1XqgZPh6oGT4
+ eqBk+ICnbfmYw5H/mMOR/5jDkf+Yw5H/nsmY/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmY/5jCkP+YwpD/mMKQ/5jCkP9/p235
+ eaBk+HmgZPh5oGT4eJ9i1HaeYLV2nmC1dp5gtXaeYIeAn2AIgJ9gCICfYAiAn2AIgJ9gCICfYAiAn2AI
+ gJ9gCHacX4h2nF+3dpxft3acX7d4nmLVeqBk+HqgZPh6oGT4gKdt+ZjDkf+Yw5H/mMOR/5jDkf+eyZj/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZj/mMKQ/5jCkP+YwpD/mMKQ/3+nbfl5oGT4eaBk+HmgZPh4n2LUdp5gtXaeYLV2nmC1
+ dp5gh4CfYAiAn2AIgJ9gCICfYAiAn2AIgJ9gCICfYAiAn2AIdpxfiHacX7d2nF+3dpxft3ieYtV6oGT4
+ eqBk+HqgZPiAp235mMOR/5jDkf+Yw5H/mMOR/57JmP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57JmP+YwpD/mMKQ/5jCkP+YwpD/
+ f6dt+XmgZPh5oGT4eaBk+HifYtR2nmC1dp5gtXaeYLV2nmCHgJ9gCICfYAiAn2AIgJ9gCICfYAGAn2AB
+ gJ9gAYCfYAF0nGAVdJxgHXScYB10nGAdd6BjR3mhY3h5oWN4eaFjeHujZo1/p2zif6ds4n+nbOJ/p2zi
+ irN88Yu0ffKLtH3yi7R98pbAjfubxpX/m8aV/5vGlf+cx5b/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5zHlv+bxpX/m8aV/5vGlf+WwI37
+ i7R98ou0ffKLtH3yirN88X+nbOJ/p2zif6ds4n+nbOJ7o2aNeKFjeHihY3h4oWN4eJ9iR3eaXBx3mlwc
+ d5pcHHeaXBWAn2ABgJ9gAYCfYAGAn2ABAAAAAAAAAAAAAAAAAAAAAGaZZgRmmWYFZplmBWaZZgV3oWMx
+ eKFjZHihY2R4oWNkeaFkfHuiZt17ombde6Jm3XuiZt2Hr3jviLB58IiwefCIsHnwlb6L+pvFlP+bxZT/
+ m8WU/5zHlv+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nMeW/5vFlP+bxZT/m8WU/5W+i/qIsHnwiLB58IiwefCHr3jve6Jm3XuiZt17ombd
+ e6Jm3XmhZHx4oWNkeKFjZHihY2R4oGExgIBABICAQASAgEAEgIBAAwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAZplmBGaZZgVmmWYFZplmBXehYzF4oWNkeKFjZHihY2R5oWR8e6Jm3XuiZt17ombd
+ e6Jm3YeveO+IsHnwiLB58IiwefCVvov6m8WU/5vFlP+bxZT/nMeW/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+cx5b/m8WU/5vFlP+bxZT/
+ lb6L+oiwefCIsHnwiLB58IeveO97ombde6Jm3XuiZt17ombdeaFkfHihY2R4oWNkeKFjZHigYTGAgEAE
+ gIBABICAQASAgEADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmmWYEZplmBWaZZgVmmWYF
+ d6FjMXihY2R4oWNkeKFjZHmhZHx7ombde6Jm3XuiZt17ombdh69474iwefCIsHnwiLB58JW+i/qbxZT/
+ m8WU/5vFlP+cx5b/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/5zHlv+bxZT/m8WU/5vFlP+Vvov6iLB58IiwefCIsHnwh69473uiZt17ombd
+ e6Jm3XuiZt15oWR8eKFjZHihY2R4oWNkeKBhMYCAQASAgEAEgIBABICAQAMAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAGaZZgFmmWYCZplmAmaZZgJ3oWMUeKFjKHihYyh4oWMoeaFkMnqiZlp6omZa
+ eqJmWnqiZlqBqnCWgapwmoGqcJqBqnCah693z4ixeemIsXnpiLF56Yy0fu6QuoX1kLqF9ZC6hfWSvIf3
+ nMeW/5zHlv+cx5b/nMeW/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/5zHlv+cx5b/nMeW/5zHlv+SvIf2kbqF9ZG6hfWRuoX1jLV+7oixeemIsXnp
+ iLF56Yevd8+BqnCagapwmoGqcJqBqnCWe6JmWnuiZlp7omZae6JmWnmhZDJ4oWMoeKFjKHihYyh4oGEU
+ gIBAAoCAQAKAgEACgIBAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAABVqlUBVapVA1WqVQNVqlUDVapVA3agYVt2oGFhdqBhYXagYWF5oWOy
+ eqFk23qhZNt6oWTbf6ds44avd++Gr3fvhq9374mye/GaxZT/msWU/5rFlP+axZT/nciY/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/msWU/5rFlP+axZT/
+ msWU/4qze/CHsHfuh7B37oewd+5/p2zjeqFk23qhZNt6oWTbeaFjsnagYWF2oGFhdqBhYXagYVuAgIAC
+ gICAAoCAgAKAgIACgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWqVQFVqlUD
+ VapVA1WqVQNVqlUDdqBhW3agYWF2oGFhdqBhYXmhY7J6oWTbeqFk23qhZNt/p2zjhq9374avd++Gr3fv
+ ibJ78ZrFlP+axZT/msWU/5rFlP+dyJj/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/53ImP+axZT/msWU/5rFlP+axZT/irN78Iewd+6HsHfuh7B37n+nbON6oWTb
+ eqFk23qhZNt5oWOydqBhYXagYWF2oGFhdqBhW4CAgAKAgIACgICAAoCAgAKAgIAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVapVAVWqVQNVqlUDVapVA1WqVQN2oGFbdqBhYXagYWF2oGFh
+ eaFjsnqhZNt6oWTbeqFk23+nbOOGr3fvhq9374avd++JsnvxmsWU/5rFlP+axZT/msWU/53ImP+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciY/5rFlP+axZT/
+ msWU/5rFlP+Ks3vwh7B37oewd+6HsHfuf6ds43qhZNt6oWTbeqFk23mhY7J2oGFhdqBhYXagYWF2oGFb
+ gICAAoCAgAKAgIACgICAAoCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqlUA
+ VapVAlWqVQJVqlUCVapVAnagYTx2oGFBdqBhQXagYUF5oWN3eqFkknqhZJJ6oWSSf6ZrooSsc7qErHO6
+ hKxzuoaud8GRuobxkbqG8ZG6hvGRuobxlb+M95bAjfiWwI34lsCN+JrEk/ycx5f/nMeX/5zHl/+dyJf/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciX/5zHl/+cx5f/
+ nMeX/5rEk/yWwI34lsCN+JbAjfiVv4z3kbqG8ZG6hvGRuobxkbqG8Yevd8CFrXO5ha1zuYWtc7l/p2ui
+ eqFkknqhZJJ6oWSSeaFjd3agYUF2oGFBdqBhQXagYTyAgIABgICAAYCAgAGAgIABgICAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAB3m14gd5teT3ebXk93m15PeJxgYXqgZdV6oGXVeqBl1XqgZdWEq3Ln
+ ha106oWtdOqFrXTqkbuH95nDkv+Zw5L/mcOS/5vFlP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+bxZT/mcOS/5nDkv+Zw5L/kbuH94WtdOqFrXTqha106oSrcud6oGXV
+ eqBl1XqgZdV6oGXVeJxgYXebXk93m15Pd5teT3ebXiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHebXiB3m15P
+ d5teT3ebXk94nGBheqBl1XqgZdV6oGXVeqBl1YSrcueFrXTqha106oWtdOqRu4f3mcOS/5nDkv+Zw5L/
+ m8WU/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5vFlP+Zw5L/
+ mcOS/5nDkv+Ru4f3ha106oWtdOqFrXTqhKty53qgZdV6oGXVeqBl1XqgZdV4nGBhd5teT3ebXk93m15P
+ d5teIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd5teIHebXk93m15Pd5teT3icYGF6oGXVeqBl1XqgZdV6oGXV
+ hKty54WtdOqFrXTqha106pG7h/eZw5L/mcOS/5nDkv+bxZT/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/m8WU/5nDkv+Zw5L/mcOS/5G7h/eFrXTqha106oWtdOqEq3Ln
+ eqBl1XqgZdV6oGXVeqBl1XicYGF3m15Pd5teT3ebXk93m14gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3m14d
+ d5teSnebXkp3m15KeJxgWnqgZcd6oGXHeqBlx3qgZceDq3Lbha103oWtdN6FrXTekLqF8JfBkPuXwZD7
+ l8GQ+5nDkvycx5f+nMeX/pzHl/6cx5f+nciY/53ImP+dyJj/nciY/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsiY/57ImP+eyJj/nsiY/5zHl/6cx5f+nMeX/pzHl/6Zw5L8
+ l8GQ+5fBkPuXwZD7kLqF8IWtdN6FrXTeha103oOrctt6oGXHeqBlx3qgZcd6oGXHeJxgWnebXkp3m15K
+ d5teSnebXh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAHacXi92nF42dpxeNnacXjZ6oGSNe6Flx3uhZcd7oWXHfqRp0oKqcemCqnHpgqpx6YOsc+qWwY7/
+ lsGO/5bBjv+WwY7/nMeX/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53Hl/+XwY7/
+ l8GO/5fBjv+XwY7/hKxz6oKqcemCqnHpgqpx6X6kadJ7oWXHe6Flx3uhZcd6oGSNdpxeNnacXjZ2nF42
+ dpxeLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdpxeL3acXjZ2nF42dpxeNnqgZI17oWXH
+ e6Flx3uhZcd+pGnSgqpx6YKqcemCqnHpg6xz6pbBjv+WwY7/lsGO/5bBjv+cx5f/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nceX/5fBjv+XwY7/l8GO/5fBjv+ErHPqgqpx6YKqcemCqnHp
+ fqRp0nuhZcd7oWXHe6Flx3qgZI12nF42dpxeNnacXjZ2nF4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB2nF4vdpxeNnacXjZ2nF42eqBkjXuhZcd7oWXHe6Flx36kadKCqnHpgqpx6YKqcemDrHPq
+ lsGO/5bBjv+WwY7/lsGO/5zHl/+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dx5f/
+ l8GO/5fBjv+XwY7/l8GO/4Ssc+qCqnHpgqpx6YKqcel+pGnSe6Flx3uhZcd7oWXHeqBkjXacXjZ2nF42
+ dpxeNnacXi8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHacXi92nF42dpxeNnacXjZ6oGSN
+ e6Flx3uhZcd7oWXHfqRp0oKqcemCqnHpgqpx6YOsc+qWwY7/lsGO/5bBjv+WwY7/nMeX/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53Hl/+XwY7/l8GO/5fBjv+XwY7/hKxz6oKqcemCqnHp
+ gqpx6X6kadJ7oWXHe6Flx3uhZcd6oGSNdpxeNnacXjZ2nF42dpxeLwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAdpxeCXacXgt2nF4LdpxeC3qgZBx7oWUoe6FlKHuhZSh8omc1faRpT32kaU99pGlP
+ fqVqV4GpcMWBqXDFgalwxYGpcMWGrXXkhq527IauduyGrnbsj7mD9pfBjv6XwY7+l8GO/pnDkf6eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5nDkf6XwY7+l8GO/pfBjv6PuYP2hq527IauduyGrnbs
+ hq115IKpcMWCqXDFgqlwxYKpcMV+pWpXfaRpT32kaU99pGlPfKJnNXuhZSh7oWUoe6FlKHqgZBx2nF4L
+ dpxeC3acXgt2nF4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAHabXQ52m10pdptdKXabXSl3nF8yeqBltnqgZbZ6oGW2eqBltn+ma92Ap2zn
+ gKds54CnbOeMtH3zlb+L/pW/i/6Vv4v+l8KP/p7Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ l8KP/pW/i/6Vv4v+lb+L/oy0ffOAp2zngKds54CnbOd/pmvdeqBltnqgZbZ6oGW2eqBltnecXzJ2m10p
+ dptdKXabXSl2m10OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdptdDnabXSl2m10p
+ dptdKXecXzJ6oGW2eqBltnqgZbZ6oGW2f6Zr3YCnbOeAp2zngKds54y0ffOVv4v+lb+L/pW/i/6Xwo/+
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+Xwo/+lb+L/pW/i/6Vv4v+jLR984CnbOeAp2zn
+ gKds53+ma916oGW2eqBltnqgZbZ6oGW2d5xfMnabXSl2m10pdptdKXabXQ4AAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAB2m10OdptdKXabXSl2m10pd5xfMnqgZbZ6oGW2eqBltnqgZbZ/pmvd
+ gKds54CnbOeAp2znjLR985W/i/6Vv4v+lb+L/pfCj/6eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/5fCj/6Vv4v+lb+L/pW/i/6MtH3zgKds54CnbOeAp2znf6Zr3XqgZbZ6oGW2eqBltnqgZbZ3nF8y
+ dptdKXabXSl2m10pdptdDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHabXQZ2m10T
+ dptdE3abXRN3nF8YeqBlVXqgZVV6oGVVeqBlVX6lanF/pWt4f6VreH+la3iGrnWiirJ7x4qye8eKsnvH
+ i7R90o22gPGNtoDxjbaA8Y22gPGNtoDxjbaA8Y22gPGNtoDxjLR90ouze8eLs3vHi7N7x4eudqJ/pWt4
+ f6VreH+la3h+pWpxeqBlVXqgZVV6oGVVeqBlVXecXxh2m10TdptdE3abXRN2m10GAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ dJddEnSXXRZ0l10WdJddFnmfY1t6oGSXeqBkl3qgZJd7oWWsfaRo5X2kaOV9pGjlfaRo5X2kaOV9pGjl
+ faRo5X2kaOV8oWWrfKBklnygZJZ8oGSWe59jWnSXXRZ0l10WdJddFnSXXRIAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0l10SdJddFnSXXRZ0l10WeZ9jW3qgZJd6oGSX
+ eqBkl3uhZax9pGjlfaRo5X2kaOV9pGjlfaRo5X2kaOV9pGjlfaRo5XyhZat8oGSWfKBklnygZJZ7n2Na
+ dJddFnSXXRZ0l10WdJddEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAHSXXRJ0l10WdJddFnSXXRZ5n2NbeqBkl3qgZJd6oGSXe6FlrH2kaOV9pGjlfaRo5X2kaOV9pGjl
+ faRo5X2kaOV9pGjlfKFlq3ygZJZ8oGSWfKBklnufY1p0l10WdJddFnSXXRZ0l10SAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdJddDXSXXRB0l10QdJddEHmfY0N6oGRv
+ eqBkb3qgZG97oWV/faRorH2kaKx9pGisfaRorH2kaKx9pGisfaRorH2kaKx8oWV+fKBkbnygZG58oGRu
+ e59jQnSXXRB0l10QdJddEHSXXQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeZZgR3mWYPd5lmD3eZZg93mWYP
+ baRbDm2kWw5tpFsObaRbDm2kWwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAd5lmBHeZZg93mWYPd5lmD3eZZg9tpFsObaRbDm2kWw5tpFsObaRbBAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3mWYEd5lmD3eZZg93mWYP
+ d5lmD22kWw5tpFsObaRbDm2kWw5tpFsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAHeZZgR3mWYPd5lmD3eZZg93mWYPbaRbDm2kWw5tpFsObaRbDm2kWwQAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////g
+ B///////////////////4Af//////////////////+AH///////////////////gB///////////////
+ ///gAAAH////////////////4AAAB////////////////+AAAAf////////////////gAAAH////////
+ ///////AAAAAAAP/////////////wAAAAAAD/////////////8AAAAAAA//////////////AAAAAAAP/
+ ///////////AAAAAAAAAA///////////wAAAAAAAAAP//////////8AAAAAAAAAD///////////AAAAA
+ AAAAA///////////wAAAAAAAAAP/////////gAAAAAAAAAAAAf///////4AAAAAAAAAAAAH///////+A
+ AAAAAAAAAAAB////////gAAAAAAAAAAAAf//////gAAAAAAAAAAAAAAB/////4AAAAAAAAAAAAAAAf//
+ //+AAAAAAAAAAAAAAAH/////gAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAA
+ AAAA//8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP
+ 8AAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAA
+ AAAP///wAAAAAAAAAAAAAAAAD/////+AAAAAAAAAAAAB////////gAAAAAAAAAAAAf///////4AAAAAA
+ AAAAAAH///////+AAAAAAAAAAAAB////////+AAAAAAAAAAAH/////////gAAAAAAAAAAB/////////4
+ AAAAAAAAAAAf////////+AAAAAAAAAAAH///////+AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAH///
+ ///4AAAAAAAAAAAAAB//////+AAAAAAAAAAAAAAf////8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAA
+ AAAP///wAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAA
+ AAAA//8AAAAAAAAAAAAAAAAAAP///4AAAAAAAAAAAAAAH/////+AAAAAAAAAAAAAAB//////gAAAAAAA
+ AAAAAAAf/////4AAAAAAAAAAAAAAH///////+AAAAAAAAAAAH/////////gAAAAAAAAAAB/////////4
+ AAAAAAAAAAAf////////+AAAAAAAAAAAH////////4AAAAAAAAAAAAH///////+AAAAAAAAAAAAB////
+ ////gAAAAAAAAAAAAf///////4AAAAAAAAAAAAH//////4AAAAAAAAAAAAAAAf////+AAAAAAAAAAAAA
+ AAH/////gAAAAAAAAAAAAAAB/////4AAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAAA//8AAAAAAAAA
+ AAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAA
+ AAAAD/AAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///wAAAAAAAA
+ AAAAAAAAD///8AAAAAAAAAAAAAAAAA//////gAAAAAAAAAAAAf///////4AAAAAAAAAAAAH///////+A
+ AAAAAAAAAAAB////////gAAAAAAAAAAAAf/////////AAAAAAAAAA///////////wAAAAAAAAAP/////
+ /////8AAAAAAAAAD///////////AAAAAAAAAA///////////wAAAAAAAAAP////////////AAAAAAAP/
+ ////////////wAAAAAAD/////////////8AAAAAAA//////////////AAAAAAAP//////////////+AA
+ AAf////////////////gAAAH////////////////4AAAB////////////////+AAAAf/////////////
+ ////4Af//////////////////+AH///////////////////gB///////////////////4Af/////////
+ KAAAAEAAAACAAAAAAQAgAAAAAAAAQAAAYQoAAGEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLuqAsy7qg/Mu6oPyLakDsi2pA7ItqQC
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMy7qgLMu6oP
+ zLuqD8i2pA7ItqQOyLakAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5ogjRuaIT
+ 0LqoMdC7q4PQvKuM0sCtyNLArcjSwK3I0sCtyNC8q4vPu6qC0LqoMdG5ohPRuaIIAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADRuaIJ0bmiFtC6qDjQu6uX0LyrodLAreXSwK3l0sCt5dLAreXQvKuhz7uqltC6qDjRuaIW
+ 0bmiCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADRuaIL0bmiENC8qkDQvKtq0r6shdPArazXxrS64NLE4OHUx+Pp4NP46eDT+Ong0/jp4NP4
+ 4dTG49/SxN/XxrS608CtrNK+rIXQvKtq0LyqQNG5ohDRuaILAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0bmiD9G5ohbQvKpY0LyrkdK+rLLTwK3j2Me16ePXyvrl2s37
+ 8erg//Hq4P/x6uD/8erg/+Xazfvj18r62Me16dPArePSvqyy0LyrkdC8qljRuaIW0bmiDwAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAybmiEsm5ohTRvqxT0b6sY9PAroPUwa6T3My8tOHSxNLj1sjf
+ 5tvO9Ojd0Pbs49j97eTZ/fLr4f/y6+H/8uvh//Lr4f/t5Nn97OPY/ejd0Pbm287049bI3+HSxNLczLy0
+ 1MGuk9PAroPRvaxj0b2sU8m5ohTJuaISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMm5oh/JuaIh0b6si9G+rKXTwK7Q
+ 1MGv5t/PwPLn28796+HW/vLr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh/+vh1v7n287938/A8tTBr+bTwK7Q0b2spdG9rIvJuaIhybmiHwAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLWkBMy1pBXNt6YZ0b2rVdG9q1XTwrB7
+ 08Kxfd7Qwb7f0sPP4tTG5uPWyPLo3dD47OLX/u7m2/7y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/u5tv+7OLX/ujd0Pjj1sjy4tTG5t/Rw8/ez8G+08KxfdPCsHvRvatV
+ 0b2rVc23phnMtaQVzLWkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMy1pAnMtaQt
+ zbemNtG9q7bRvau21cSz5NXEs+fm28756uDU/u/n3f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh/+/n3f/q4NT+
+ 5tvO+dXEs+fVxLPk0b2rttG9q7bNt6Y2zLWkLcy1pAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMy3ognMt6IU
+ zrunI9C9qkLRvqxK1MGwbNXCsnPczL3O3My9zt/Sw+3f0sPv6uDU++3k2P7w6d7/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/w6d7/7eTY/urg1Pvf0sPv39LD7dzMvc7czL3O1cKyc9TBsGzRvqxK0L2qQs67pyPMt6IU
+ zLeiCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADMt6IczLeiPM67p2rQvarF0r+tzdfFtevYx7fs6+LW/+vi1v/y6uD/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lq4P/r4tb/6+LW/9jHt+zXxbXr
+ 0r+tzdC9qsXOu6dqzLeiPMy3ohwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADOuaUJzrmlDNC9qh3Rvqsp0r+sQtK/rV/Vw7GF18e10djIt9fdzb7v3s/A8Ozk2P/s5Nj/
+ 8uvg//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+D/
+ 7OTY/+zk2P/ez8Dw3c2+79jIt9fXx7XR1cOxhdK/rV/Sv6xC0b6rKdC9qh3OuaUMzrmlCQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzrmlLc65pT7QvaqT0b6ry9XDstrZyLjs4NLD8u3k2P/u5dr/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/u5dr/7eTY/+DSw/LZyLjs1cOy2tG+q8vQvaqT
+ zrmlPs65pS0AAAAAAAAAAAAAAAAAAAAAv7+fAb+/nwHNuKQLzbikDM66pjrOuqZK0sCtmtPBr87XxrXd
+ 28u77eHUxfPt5Nn/7uba//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/7uba/+3k2f/h1MXz
+ 28u77dfGtd3Twa/O0sCtms66pkrOuqY6zrmlDM65pQu/v58Bv7+fAb+/nwi/v58IzbikoM24pLfPu6jn
+ 0Lyp+OLUxvzt5Nj/7+fc//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/v59z/7OPX/+HUxfzQvKr40Lup5s65pbXOuaWev7+fCL+/nwi/v58I
+ v7+fCM24pKDNuKS3z7uo59C8qfji1Mb87eTY/+/n3P/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/7+fc/+zj1//h1MX80Lyq+NC7qebOuaW1
+ zrmlnr+/nwi/v58Iv7+fAb+/nwHNvqEPzb6hEc+6qFXPuqhu0b6sstK/rt/YyLjo3tHC8eTZy/bv59z/
+ 8Ojd//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8ene/+zi1f/p28z/1LCT/9Swk//UsJP/1LCT/+nbzP/s4tX/8ene//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8Ojd/+/n3P/k2cv23tHC8djIuOjSv63f
+ 0b6sss+6qG7PuqhVyrqrEMq6qw6/v58Bv7+fAQAAAAAAAAAAzMyZBMzMmQXPuqhLz7qoZNC8qq3QvKrd
+ 1sW15t3PwPDj18r17+fc//Do3f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Do3v/s4dT/6drL/9Ksjf/SrI3/0qyN/9Ksjf/p2sv/7OHU//Do3v/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Do3f/v59z/
+ 49fK9d3PwPDWxbXm0Lyq3dC8qq3Puqhkz7qoSr+/vwS/v78DAAAAAAAAAAAAAAAAAAAAAMzMmQHMzJkB
+ z7qoD8+6qBTOu6okzruqL9K/rlPTwbB+1cOyn9fGteLZybnl4dTF8uLVx/Pv59z/7+fc//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh/+/l2f/s4NL/4867/9a0mf/TrpH/y557/82fe//apnz/2qZ8/9qlfP/apXz/
+ zZ97/8ueev/TrpH/1rSZ/+POu//s4NL/7+XZ//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh/+/n3P/v59z/
+ 4tXH8uHUxfHZybnl18a14tXDsp/TwbB+07+uU9K6qS7Ruqgjz7qoFM+6qA+/v78Bv7+/AQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqAqqqqgPMuKYvzbimYc+7qIrQvarb08Gu393Ovu/e0MDw
+ 7ubb/+7m2//y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/u5Nf/6t3O/9/Hsv/Ppof/zJ9+/8ONZf/GkGj/
+ 3KR4/9ykeP/co3j/3KN4/8aQZ//DjWT/zJ9+/8+mh//fx7L/6t3O/+7k1//y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/u5tv/7ubb/97QwO/dzr7u08Gu39C9qtvPu6iKzbimYc63pS7/gIAC/4CAAQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqqqgGqqqoBzLimEM24piDPu6gu
+ 0L2qSdLArVXXxbSE2Ma1i9vMvOPbzLzj49bI8OPWyPHo3M786d3Q/+DIs//bvaX/1bGV/9Cnh//TpYL/
+ 16N7/9mkfP/gqH7/4ql//+mxhf/psYX/6bCF/+mwhf/iqX7/4Kh9/9mkfP/Xo3v/06WC/9Cnh//VsZX/
+ 272l/+DIs//p3dD/6NzO/OPWyPHj1sjw28y849vMvOPYxrWK18W0hNLArVXQvapJz7uoLs24piDOt6UP
+ /4CAAf+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAADPuKUQz7ilT8+5pljPvarVz72q1drKuunby7vq49TF++XWx//Wtpz/
+ z6aH/8mYdP/DjGP/zZRq/9uhdf/gp3v/77aK/++2iv/wt4v/8LeL//C3i//wt4v/77aK/++2iv/gp3v/
+ 26F1/82Uav/DjGP/yZh0/8+mh//Wtpz/5dbH/+PUxfvby7vq2sq66c+9qtXPvarVz7mmWM+4pU/PuKUQ
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz7ilB8+4pSXOtqIryrCYfMqwmHzMqo3R
+ zKmM19Gsj/XSrY/91qiF/tilgP/ZpHz/26N4/9+nfP/mrYH/6a+D//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/6a+D/+atgf/fp3z/26N4/9mkfP/YpYD/1qiF/tKtj/3RrI/1zKmM18yqjdHKsJh8
+ yrCYfM62oivPuKUlz7ilBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ t3pOA7d6Ti63ek4uvIdcvbyHXMfAiF7xwYhe+9WbcP7fpXn/6K+D//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//or4P/36V5/9WbcP7BiF77
+ wIhe8byHXMe8h1y9t3pOLrd6Ti63ek4DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ uH1PCLh9Txi5f1Iku4FVULyBVVPAhlp7wIZae86Wa9fOl2zd05pv9tSbcP3gpnv+5qyA/+uyhv/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 67KG/+asgP/gpnv+1Jtw/dOab/bOl2zdzpZr18CGWnvAhlp7vIFVU7yBVVC6f1IkuH1PGLh9TwgAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAALh9TxS4fU89uX9SWbuBVci8glbLw4ld7sOJXe7iqHz+5Kp+/+60iP/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//utIj/5Kp+/+KofP7DiV3uw4ld7r2CVsu8gVXJ
+ un9SWbh9Tz24fU8UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAALV+UQu1flESuX9TJLqAVDi9g1dJwYdabMOKXYHJj2PXyZBk2dCWavPQlmrz
+ 5qyA/uetgf/utYn/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/7rWJ/+etgf/mrID+
+ 0JZq89CWavPKkGTZyo9j18SKXYHBh1psvoNXSbqAVDi5f1MktX5RErV+UQsAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1flEptX5RRbl/U4e6gFTSv4VZ28eOYu3OlWnx
+ 566C/+ivg//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/6K+D/+eugv/PlWjwyI5h7L+FWdu6gFTSuX9Th7V+UUW1flEp
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqoBVAaqAVQG5gFIMuYBSDryBVRq9gVYev4ZZQ7+HWlzBh1uW
+ wohc2MaMYODNlGjv05pu8+ivg//psIT/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+mwhP/or4P/05pt8s6UZ+/GjGDg
+ wohc2MGIW5a/h1pcvoZZQ72BVh68gVUauYBSDrmAUgyqgFUBqoBVAaqAVQaqgFUGuYBSXbmAUmq8gVXA
+ vYFW38qPY+rSl2vx3qR4+Ouyh//ttIj/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/7bSI/+uyh//dpHj40Zdq8smPYuq9gVbfvIFVwLmAUmq5gFJdqoBVBqqAVQaqgFUG
+ qoBVBrmAUl25gFJqvIFVwL2BVt/Kj2Pq0pdr8d6kePjrsof/7bSI//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+20iP/rsof/3aR4+NGXavLJj2LqvYFW37yBVcC5gFJq
+ uYBSXaqAVQaqgFUGv4BABL+AQAS6fVJXun1SZLuAVb27gVXdyY5i6NGWavDeo3f367KG/+20iP/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//vt4v/6bWJ/+m1if/ptoj/6baI/++3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//ttIj/67KG/96jd/fRlmrw
+ yY5i6LuBVd27gFW9un1SZLp9Ule/gEAEv4BABL+AQAS/gEAEun1SV7p9UmS7gFW9u4FV3cmOYujRlmrw
+ 3qN39+uyhv/ttIj/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/77eL/+m1if/ptYn/6baI/+m2iP/vt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 7bSI/+uyhv/eo3f30ZZq8MmOYui7gVXdu4BVvbp9UmS6fVJXv4BABL+AQAS/gEABv4BAAbp9Ugy6fVIN
+ un1VG7p9VSC/g1lTwIRZdcKHW6jDiFziyI5i6NKYa/LXnXH16rCF/+qxhf/wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/7LaK/+a0iP/ZsoP/tKx3/7Crdv+Wp2//lqdv/5anb/+Wp2//
+ sat2/7Wsd//ZsoP/5rSI/+y2iv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 6rGF/+qxhP/XnXD10phr8siOYujDiFziwodbqMCEWXW/g1lTun1VILp9VRu6fVINun1SDL+AQAG/gEAB
+ AAAAAAAAAAAAAAAAAAAAAKpVVQKqVVUDuXxTPLl9U2K7gFScvIFV3sKHW+TNk2bw05ls8+mvhP/psIT/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+y2if/ltIf/1rGC/6uqdP+mqXP/
+ iaVr/4mla/+JpWv/iaVr/6epc/+sqnT/1rGC/+W0h//ston/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL/+mwhP/psIP/05ls882TZvDCh1vkvIFV3ruAVJy5fVNiuXxTPKpVVQOqVVUC
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqVVUBqlVVAbl8UxC5fVMavH9UKr1/VDzAhFhR
+ w4hcesWKXo7Jj2PgypBk4daccPDWnHDw6bCE/uqxhf/vtor/8LeL/+u2if/otYj/0rGB/7+ue/+zrHj/
+ oqly/5+sdv+YtX//mLaB/5i/jP+Yv4z/mL+M/5i/jP+YtoH/mLV//5+sdv+iqXL/s6x4/7+ue//SsYH/
+ 6LWI/+u2if/wt4v/77aK/+qxhf/psIT+1pxw8NaccPDKkGThyY9j4MWKXo7DiFx6wIRZULyBVTu7gFQq
+ uX1TGrl8UxCqVVUBqlVVAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAP8AAAD/AAABunhPG7h7UU+5fVNqu4FV1byCVtbMkWXrzJFl6+atgf7or4P/7rWJ//C3i//ptYj/
+ 5bSH/8evff+tq3X/n6lx/4mla/+LqnH/kbmD/5O7hv+dyZj/ncmY/53JmP+dyZj/k7uG/5G5g/+LqnH/
+ iaVr/5+pcf+tq3X/x699/+W0h//ptYj/8LeL/+61if/or4P/5q2B/syRZevMkWXrvIJW1ruBVdW5fVNq
+ uHtRT7h7URoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAALp4Twu4e1EguX1TKruBVVW8glZYxotfgcaLX4HJl2re
+ yZhq5bykcva6pnT6sal1/a2rdv+lsHv/nbWA/5q3g/+Wu4f/lr2J/5nDkP+Zw5H/nsmZ/57Jmf+eyZn/
+ nsmZ/5nDkf+Zw5D/lr2J/5a7h/+at4P/nbWA/6Wwe/+tq3b/sal1/bqmdPq8pHL2yZhq5cmXat7Gi1+B
+ xotfgbyCVli7gVVVuX1TKrh7USC4e1ELAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ tHtPBLR7Tzq0e086sIVWybCFVtOZl2LwlJtk94yiafyIpWv/jrF6/5O7h/+XwY7/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/l8GO/5O7h/+OsXr/iKVr/4yiafyUm2T3
+ mZdi8LCFVtOwhVbJtHtPOrR7Tzq0e08EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB3n2AEd59gFXydYBuKmF90iphfdJiWYdWZlmHclqhz9JWsd/qTs339kraA/5W8iP+Ywo//
+ msWT/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5rFk/+Ywo//
+ lbyI/5K2gP+Ts339lax3+paoc/SZlmHcmJZh1YqYX3SKmF90fJ1gG3efYBV3n2AEAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd59gCXefYC14oGE2e6NltnujZbaAp23kgKdt55K7h/mWv43+
+ m8aV/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/m8aV/5a/jf6Su4f5gKdt54CnbeR7o2W2e6NltnigYTZ3n2At
+ d59gCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd51eCXedXhR5oGIjeqJlQnujZ0p+pmtsf6dsc4evds6Hr3bO
+ irN87Yuzfe+Wv437mcKR/pzHlv+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5zHlv+ZwpH+lr+N+4uzfe+Ks3zt
+ h692zoevds5/p2xzfqZrbHujZ0p6omVCeaBiI3edXhR3nV4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHedXhx3nV48eaBianqiZcV8o2fN
+ gahv64OqceyXwY//l8GP/57ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsiY/5fBj/+XwY//g6px7IGob+t8o2fNeqJlxXmgYmp3nV48d51eHAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHegXwl3oF8MeqJjHXuiZCl8o2ZC
+ faRnX3+nbIWBqnDRg6ty14eveO+IsHrwmMOR/5jDkf+eyZj/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57JmP+Yw5H/mMOR/4iwevCHr3jvg6ty14GqcNF/p2yF
+ faRnX3yjZkJ7omQpeqJjHXegXwx3oF8JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3oF8t
+ d6BfPnqiY5N7omTLf6dq2oOrcOyKs3zymMOR/5nEk/+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/5nEk/+Yw5H/irN88oOrcOx/p2rae6Jky3qiY5N3oF8+d6BfLQAAAAAAAAAAAAAAAAAAAACAn2AB
+ gJ9gAXacXwt2nF8MeKBgOnigYEp8pGaafaVozoGpbd2FrXPtjLV+85jDkv+axZP/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+axZP/mMOS/4y1fvOFrXPtgalt3X2laM58pGaad6BgSnegYDp2nmAM
+ dp5gC4CfYAGAn2ABgJ9gCICfYAh2nF+gdpxft3mfY+d6oGT4jLV//JjDkf+bxpX/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5vFlP+YwpD/
+ jLV//HmgZPh4oGPmdp5gtXaeYJ6An2AIgJ9gCICfYAiAn2AIdpxfoHacX7d5n2PneqBk+Iy1f/yYw5H/
+ m8aV/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+bxZT/mMKQ/4y1f/x5oGT4eKBj5naeYLV2nmCegJ9gCICfYAiAn2ABgJ9gAXKbYQ9ym2ER
+ eKFjVXihY258pGiyfaVp34OrcuiKsnvxkLmE9pvFlP+cxpX/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+cxpX/m8WU/5C5hPaKsnvxg6ty6H2kad98pGiyeKFjbnigY1V4l1gQeJdYDoCfYAGAn2AB
+ AAAAAAAAAABmmWYEZplmBXihY0t4oWNkeqJlrXuiZt2BqW/miLB58I+3gvWbxZT/nMaV/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nMaV/5vFlP+Pt4L1iLB58IGpb+Z7ombdeqJlrXihY2R4oWJK
+ gIBABICAQAMAAAAAAAAAAAAAAAAAAAAAZplmAWaZZgF4oWMPeKFjFHmiZSR5omUvfKVpU32man5/qGyf
+ galv4oOscuWLtH7yjLaA85vGlf+bxpX/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/m8aV/5vGlf+NtoDyjLV+8YSscuWBqW/if6hsn32man58pWlT
+ e6FnLnqhZiN4oWMUeKFiD4CAQAGAgEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVqlUC
+ VapVA3WgYS92oGFheKFjinqhZNt9pGjfhq9374exefCaxZT/msWU/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5rFlP+axZT/iLF574ewd+59pGjf
+ eqFk23ihY4p2oGFhdp9iLoCAgAKAgIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAVapVAVWqVQF1oGEQdqBhIHihYy56oWRJfKNnVYCnbYSBqG6Lhq5344aud+ONtoDw
+ jreB8ZjCkfybxZT/nciX/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciX/5vFlP+YwpH8jreB8Y22gPCGrnfj
+ hq5344GoboqBqG2EfKNnVXqhZEl4oWMudqBhIHafYg+AgIABgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHebXhB3m15P
+ d5xfWHqgZdV6oGXVhKxz6YWtdOqVv4z7mcOS/5zHl/+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5zHl/+Zw5L/
+ lb+M+4WtdOqErHPpeqBl1XqgZdV3nF9Yd5teT3ebXhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB3m14Hd5teJXecXyl6oGVjeqBlY4Gpb4eCqW+KirJ70IuzfeGOt4LtkLmF85W/jfqaxZP/
+ m8aV/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5zGlf+axZP/
+ lb+N+pC5hfOOt4Lti7N94Yqye9CCqW+Kgalvh3qgZWN6oGVjd5xfKXebXiV3m14HAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2nF4ydpxeNnuhZap7oWXH
+ gKdt3oKqcemNt4H1lsGO/5nEkv+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+axJL/l8GO/463gfWCqnHpgKdt3nuhZcd7oWWqdpxeNnacXjIAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ dpxeHnacXiB7oWVme6Fld3+mbJCBqG+ciLF6wY22geKPuYTqk7yI9ZW/i/iaxZP/m8aU/57Jmf+eyZn/
+ nsmZ/57Jmf+bxpT/msWT/5W/i/iTvIj1kLmE6o62geKJsXrBgahvnH+mbJB7oWV3e6FlZnacXiB2nF4e
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2m10bdptdKXmfZHR6oGW2faNoyoCnbOeGrnXt
+ lb+L/pbAjf6eyZn/nsmZ/57Jmf+eyZn/lsCN/pW/i/6GrnXtgKds532jaMp6oGW2eZ9kdHabXSl2m10b
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdptdFHabXR55n2RV
+ eqBlhX2jaJaApmuvha1zvZC5hOORuoXllsCN+JbAjfiWwI34lsCN+JG6heWRuoTiha1zvYCma699o2iW
+ eqBlhXmfZFV2m10edptdFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAB0l10JdJddFnidYjh6oGSXe6FloX2kaOV9pGjlfaRo5X2kaOV8oWWh
+ fKBklnqdYjh0l10WdJddCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdJddCHSXXRN4nWIxeqBkg3uhZYx9pGjI
+ faRoyH2kaMh9pGjIfKFli3ygZIJ6nWIxdJddE3SXXQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB3mWYCd5lmD3eZZg9tpFsObaRbDm2kWwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd5lmAneZZg93mWYPbaRbDm2kWw5tpFsCAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////4H/////////gf////
+ ////gAH///////+AAf//////+AAAH//////4AAAf/////4AAAAH/////gAAAAf////AAAAAAD///8AAA
+ AAAP//8AAAAAAAD//wAAAAAAAP/wAAAAAAAAD/AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADAAAAAAAAAA8AAAAAAAAAD/AAAAAAAAD/8AAAAAAAAP//wAAAAAA////AAAAAAD////AAA
+ AAA////AAAAAAAP//8AAAAAAA//8AAAAAAAAP/wAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAA/wAAAAAAAAD/8AAAAAAAP//wAAAAAAA////AAA
+ AAA////wAAAAAA////AAAAAAD///AAAAAAAA//8AAAAAAAD/8AAAAAAAAA/wAAAAAAAADwAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAPAAAAAAAAAA/wAAAAAAAA//AAAAAAAAD//8AAA
+ AAAP///wAAAAAA////+AAAAB/////4AAAAH/////+AAAH//////4AAAf//////+AAf///////4AB////
+ ////+B/////////4H////ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAAGEKAABhCgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLuqCcy7qg/ItqQOyLakCAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0bmiB9C6qBPQu6s80b6sVdHArWXRv6xk0b6sVM+7qjzQuqcT
+ 0bmiBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0bmiEtC6qDDQu6uX0b6sxtLAreXSwK3l
+ 0b6sxc+7qpbQuqcw0bmiEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRuaIB0bmiEdC7qTnQvKt007+trNbEs8Ph08bm
+ 593Q8uvi1/rr4tf6593Q8uDTxubWxLPD07+trNC8q3TQu6k50bmiEdG5ogEAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJuaIBybmiB9C9qxbRvqwi07+rPtbDsmnXxban
+ 2cm429zNvezm28/77eTZ/fHq4P/x6uD/7eTZ/ebbz/vczb3s2cm429fFtqfWw7Jp07+rPtG9rCLQvasW
+ ybmiB8m5ogEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJuaIHybmiIdC9q3DRvqyo
+ 1MGv49zMvO/n28798Ojd//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8Ojd/+fbzv3czLzv
+ 1MGv49G9rKjQvatwybmiIcm5ogcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMtaQLzLWkG9G9q13Sv612
+ 1MOymN7QwcDj1sjc59vO9Orf0/nu5dn+8erf//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8erf/+7l2f7q39P559vO9OPWyNze0MHA1MOymNK/rXbRvatdzLWkG8y1pAsAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMt6ICzLijA9C9qgjOuaga
+ zrinNdK/rZ/Twa/C1sa16OPWyfXr4dX+8uvg//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvg/+vh1f7j1sn11sa16NPBr8LSv62fzrinNc65qBrQvaoI
+ zLijA8y3ogIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMt6Ij
+ zLijP9C9qrfTwa/M18W14+fcz/fs49f88erf/vHq4P/y6+D/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4P/x6uD/8erf/uzj1/zn3M/3
+ 18W149PBr8zQvaq3zLijP8y3oiMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOuaUU
+ z7uoJNG+q1HUwrBv1sSzht3Pv9jg0sPl4tXH8+zi1/3v59z/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh/+/n3P/s4tf94tXH8+DSw+Xdz7/Y1sSzhtTCsG/RvqtRz7uoJM65pRQAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADOuaUyz7uoWtG+q8vWxLPf2sm57ezj1/7v59z/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh/+/n3P/s49f+2sm57dbEs9/RvqvLz7uoWs65pTIAAAAA
+ AAAAAAAAAAC/v58GzLikPs24pJLPu6jG1cOy2uje0fXr4tb57eXa+/Hp3//x6uD/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Hq4P/x6d//7eXa++vh1vno3dD1
+ 1cOy2tC7qcbOuaWRzbmlPr+/nwa/v58GzLmkP824pJPPu6jM1cOy4Ojd0Pjs4tb67ubb/PHq4P/y6+D/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4P/x6d7/7uPW/+ze0P/s3tD/
+ 7uPW//Hp3v/y6+D/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4P/x6uD/
+ 7ubb/Ovi1vrn3M/41cOy4NC7qczOuaWSzbmlPr+/nwYAAAAAzMyZAszMmQXPuqhRz7upfNC8qt3YyLjo
+ 3tDB8e7m2/7w6d7/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Hp3v/s4dT/
+ 3MGp/9Ksjf/SrI3/3MGp/+zh1P/x6d7/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Dp3v/u5tv+3tDB8djIuOjQvKrdz7upfM+6qFG/v78Ev7+/AgAAAAAAAAAAzMyZAczMmQLPuqgg
+ z7upMs+8qlrVw7OB18e3nt3PwObh1MXu5trN9e7l2v3w6d7/8uvh//Lr4f/y6+H/8uvh//Do3P/t49b/
+ 4Mi0/9u+pv/Tr5H/1qqH/9ingP/Yp4D/1qqH/9Ovkf/bvqb/4Mi0/+3j1v/w6Nz/8uvh//Lr4f/y6+H/
+ 8uvh//Dp3v/u5dr95trN9eHUxe7dz8Dm18e3ntXDs4DRu6la0LqpMs+6qCC/v78Cv7+/AQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAqqqqAaqqqgPMuKY5zbimYtC9qs3VxLLb3c6+6Org1Pnu5tv98erg/vHq4P/x6uD/
+ 8ejd/+3i1f/o2sr/1LCU/82hgP/Fj2f/05xx/92lef/dpHn/05tx/8WPZv/NoYD/1LCU/+jayv/t4tX/
+ 8ejd//Hq4P/x6uD/8erg/u7m2/3q4NT53c6+59XEstrQvarNzbimYs63pTn/gIAC/4CAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqqqAKqqqgDMuKYCzbimBNC9qgnRu6go0buoVtG/rL3TwrDb
+ 3My96+LTxPfl1cb/0auN/8yfff/Fj2f/1p5z/96lef/ttIj/7rWK/++2iv/vtor/7rWJ/+20iP/epXn/
+ 1p5z/8WPZ//Mn33/0auN/+XVxv/i08T33My969PCsNvRv6y90buoVtG7qCjQvaoJzbimBM63pQL/gIAA
+ /4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPuKUT
+ z7ilL8y1n37NtJ2h0LKZ3NS1nPDXtpz91aaD/9WifP/VnXP/4ad8/+asgP/vtor/8LeL//C3i//wt4v/
+ 8LeL/++2iv/mrID/4ad8/9Wdc//Vonz/1aaD/9e2nP3UtZzw0LKZ3M20naHMtZ9+z7ilL8+4pRMAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAALd6TiW6gVVNvIdcx7+IXebCiV/73qR4/+asgP/wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//mrID/3qR4/8KJX/u/iF3mvIdcx7qBVU23ek4l
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAuH1PArh9Ty+6gFNdu4FVoMGHW8DJj2PQ3aR49OOqfvrnroL+7LOH/+61if/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//utYn/7LOH/+eugv7jqn76
+ 3aR49MmPY9DBh1vAvIFVobuAU164fU8vuH1PAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAtX5RA7V+UQ65gFMfuoBULL+FWF7DiV2Oxoxg08uRZevSmGz05q2B/+yzh//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//ss4f/5q2B/9KYbPTLkWXrxoxg1MSJXY7AhVheu4BULLmAUx+1flEOtX5RAwAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtX5RDrV+UUW5gFOau4FV08eNYezUm2/0566C/+61if/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//utYn/566C/9Wbb/THjWHru4FV07mAU5q1flFF
+ tX5RDgAAAAAAAAAAAAAAAAAAAACqgFUEuIBSHLmAUkC9gVZ4wYVajc2TZ6zWnHDT2qF17eCne/flrID7
+ 7LOH/++2iv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//vtor/7LOH/+WsgPrgp3v3
+ 2qF17dWccNPNk2atwYVajr2BVni5gFJAuIBSHKqAVQSqgFUGuIBSLrmAUmq9gVbIwYZa49KXa/HhqHz5
+ 67KH//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/67KH/+GofPrRl2rywYZa472BVsi5gFJquIBSLqqAVQa/gEAEun1RKrp9UmS7gVXF
+ wIVZ4dGWavDhp3v567KG//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/7LaK/+m1if/ptoj/7LaJ//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/67KG/+Gne/nRlmrwwIVZ4buBVcW6fVJkun1RKr+AQAS/gEAC
+ un1RGbp9Ujy7gFV3v4VZkMyRZbfVm2/a2qB08uKpfPnnrYH77bSI/++2iv/wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/7LaK/+e1iP/UsoL/yrB//8Ovff/Dr3z/yrB//9Wygv/ntYj/7LaK//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//vtor/7bSI/+eugfviqXz52qB08tWbb9rMkWW3v4VZkLuAVXe6fVI8
+ un1RGb+AQAIAAAAAAAAAAAAAAACqVVUCt3lTFrl9U2K7gFWsvYJW38ySZe/Zn3L26a+E/++1iv/wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/57WI/9myg/+rqnT/l6dv/4mla/+JpWv/l6dv/6yqdP/asoP/
+ 57WI//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//vton/6bCD/9mfcvbMkmXvvYJW37uAVay5fVNi
+ t3lTFqpVVQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqVVUAt3lTBLl9UxS8flMjvn9UMMGFWmzEiV2b
+ xoxg3dGXa+vYnnLy6rGF/+20iP/wt4v/6LWI/9Wygv+6rXn/oqly/5qrdP+WtoD/mL2J/5nCj/+Zwo//
+ mL2J/5a2gP+aq3T/oqly/7qtef/VsoL/6LWI//C3i//ttIj/6rGF/9iecvLRl2vrxoxg3cSJXZvBhVps
+ vIFVL7uAVSK5fVMUt3lTBKpVVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA
+ yF8/A7h7UT26f1Rqu4FVqsiNYcLPlWnR3qh79t6ugPvesoP907GB/8Gwfv+ornn/k611/46veP+UvIf/
+ mcSR/53JmP+dyZj/mcSR/5S8h/+Or3j/k611/6iuef/BsH7/07GB/96yg/3eroD73qh79s+VadHIjWHC
+ u4FVqrp/VGq4e1E9uHtRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALR7Ty6ygFJZsIVW056TX+mTm2T3iKVr/4yudv+Tu4f/
+ nMaV/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nMaV/5O7h/+Mrnb/iKVr/5ObZPeek1/p
+ sIVW07KAUlm0e08uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3n2ALd59gG4ScYW+Jm2KXkppk35SodPCVsX37
+ lbqG/5e+i/+aw5L/nciY/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nciY/5rDkv+Xvov/
+ lbqG/5WxffuUqHTwkppk34mbYpeEnGFvd59gG3efYAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3nV4Cd55fA3qiZQh5oWMaeaFjNXykZ59+pmnC
+ galv6I63gvWXwI7+nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/5fAjv6Ot4L1galv6H6macJ8pGefeaFjNXmhYxp6omUId55fA3edXgIAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3nV4jd55fP3qiZbd9pWnM
+ gahv45K8iPeYwpD8nciX/p3ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/nciX/pjCkPySvIj3gahv432lacx6omW3
+ d55fP3edXiMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3oF8UeaFhJHuiZFF+pmlv
+ gKhshoixediKs3zljbaB85fBj/2bxZT/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5vFlP+XwY/9
+ jbaB84qzfOWIsXnYgKhshn6maW97omRReaFhJHegXxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3oF8y
+ eaFhWnuiZMuAqGzfhKxx7ZfCkP6axZT/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/5rFlP+XwpD+hKxx7YCobN97omTLeaFhWnegXzIAAAAAAAAAAAAAAACAn2AG
+ d5xfPnacX5J5n2PGgKds2pO+ivWXwY75mcSS+53Il/+dyJj/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53ImP+dyJf/mcSS+5fBjvmTvYn1f6Zs2nigY8Z2nmCR
+ d55gPoCfYAaAn2AGd5xfP3acX5N5n2PMf6ds4JO9ifiXwY/6msST/J3ImP+eyZj/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57JmP+dyJj/msST/JfBj/qTvIn4
+ f6Zs4HmgY8x2nmCSd55gPoCfYAYAAAAAZplmAmaZZgV4oWNReaFkfHuiZt2Dq3LoibF68ZrEk/6cx5b/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5zHlv+axJP+
+ ibF68YOrcuh7ombdeaFkfHihY1GAgEAEgIBAAgAAAAAAAAAAZplmAWaZZgJ4oWMgeaFkMnqiZlp/qG2B
+ gqpwnoixeeaMtH7ukLqF9ZnEk/2cx5f/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/5zHl/+ZxJP9
+ kbqF9Yy1fu6IsXnmgqpwnn+obYB7omZaeaFkMnihYyCAgEACgIBAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ VapVAVWqVQN1oGE5dqBhYnqhZM1/p2zbhq936JXAjfmaxZP9nciY/p3ImP+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/
+ nciY/prFk/2WwI35h7B353+nbNp6oWTNdqBhYnagYTmAgIACgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAVapVAFWqVQB1oGECdqBhBHqhZAl5nmEoeZ1hVnuhZ71+pWrbhq5265K7h/eZw5P/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/5nDk/+Su4f3hq52636latt7oWe9eZ1hVnmeYSh6oWQJdqBhBHagYQKAgIAAgICAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3m14Td5teL3qgZHB8o2iH
+ g6txoouzfcyPuIPpk72K9pbBjvqbxpX/nciY/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nciY/5vGlf+XwY76k72K9o+4g+mLs33Mg6txonyjaId6oGRwd5teL3ebXhMAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB2nF4LdpxeNnqgZI17oWbIgqpx6Iq0ffKWwY7/nMeX/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nceX/5fBjv+LtH3ygqpx6HuhZsh6oGSNdpxeNnacXgsAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAB2nF4CdpxeC3qgZBx7oWUpfaRpToCnbX6BqXDFhq115Iqye++XwY7+
+ m8aV/57Jmf+eyZn/m8aV/5fBjv6Ksnvvhq115IKpcMWAp21+faRpTnuhZSl6oGQcdpxeC3acXgIAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2m10BdptdH3mfY056oGWS
+ f6ZrtISrcsaSu4bplb+M85jCkPqYwpD6lr+M85K7humEq3LGf6ZrtHqgZZJ5n2NOdptdH3abXQEAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAdJddEnidYTB6oGSXfKNnxn2kaOV9pGjlfaNnxXygZJZ5nWEwdJddEgAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdJddB3idYRN6oGQ8fKJnVXyjaGV8pGdkfKNmVHygZDx5nWET
+ dJddBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd5lmCXeZZg9tpFsO
+ baRbCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///w///8AAP//4Af//wAA///gB///AAD//gAA
+ f/8AAP/wAAAP/wAA//AAAA//AAD/gAAAAf8AAPwAAAAAPwAA/AAAAAA/AADgAAAAAAcAAOAAAAAABwAA
+ AAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAgAAAAAABAADwAAAAAA8AAPAAAAAADwAA/4AAAAH/AAD/4AAA
+ B/8AAP4AAAAAfwAA8AAAAAAPAADwAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 4AAAAAAHAADgAAAAAAcAAPwAAAAAfwAA/+AAAAf/AAD/gAAAAf8AAPwAAAAAPwAA/AAAAAA/AADgAAAA
+ AAcAAOAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAgAAAAAABAADwAAAAAA8AAPAAAAAADwAA
+ /4AAAAH/AAD/8AAAD/8AAP/wAAAP/wAA//4AAH//AAD//+AH//8AAP//4Af//wAA///8P///AAAoAAAA
+ IAAAAEAAAAABACAAAAAAAAAQAABhCgAAYQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMu6oBzLuqD8i2pA7ItqQBAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRuaIE0LqnJdC7q5LSwK3X0sCt18+7qpHQuqYk
+ 0bmiBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRuaIG0LuoL9G9rIzVw7HN4tbJ7u3l2vzt5dr8
+ 4tbJ7tXDsc3RvayM0LuoL9G5ogYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJuaIMz72qRdK/rZfZyLfI5trN6+3k2Prv593+
+ 8uvh//Lr4f/v593+7eTY+ubazevZyLfI0r+tl8+8qkXJuaIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMtaQU0LyqV9PAr5rczr7H59zP7Ozi1/rw6N3/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8Ojd/+zi1/rn3M/s3M6+x9PAr5rQvKpXzLWkFAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMt6Idz7ypZdTBsJzf0MLL5tvP7uzi1/rw6d7/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Dp3v/s4tf65tvP7t/QwsvUwbCc
+ z7ypZcy3oh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOuaUg0b6radbEs5rg0sPS5trN8ezi1/vx6d//
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/x6d//
+ 7OLX++bazfHg0sPS1sSzmtG+q2nOuaUgAAAAAAAAAAC/v58EzbikW8+7qJnf0cHZ5drM8u3k2Pzx6t//
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/
+ 8uvh//Lr4f/y6+H/8erf/+3k2Pzl2czy3tDB2dC7qZnOuaVav7+fBL+/nwTNuKRe0LuoqN7PwOPm2872
+ 7ubb/fHq4P/y6+H/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6uD/7uXZ/+POuv/jzrr/7uXZ//Lq4P/y6+H/
+ 8uvh//Lr4f/y6+H/8uvh//Lr4f/x6uD/7ubb/ebbzvbdz7/j0LupqM65pVy/v58EAAAAAMzMmQPPuqg0
+ 0Lyqd9jHt6rh1Mbd593Q9e3l2vzx6uD/8uvh//Lr4f/x6t//7eHU/+PNuv/bvqX/1qmF/9aohf/bvqX/
+ 4826/+3h1P/x6t//8uvh//Lr4f/x6uD/7eXa/Ofd0PXh1Mbd2Me3qtC7qnfPuqg0v7+/AgAAAAAAAAAA
+ AAAAAAAAAACqqqoCzbimMM+8qXfXxrWq4dTF1+jd0fTs4tb769/R/+TPvP/bvKL/06N//9Occv/jqn7/
+ 46p+/9Occv/To3//27yi/+TPvP/r39H/7OLW++jd0fTh1MXX18a1qc+8qXfNuKYw/4CAAQAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM+4pSPOuKR10bqkw9e+p+zZuJ7+0qJ+/9ObcP/jqX3/
+ 77aK//C3i//wt4v/77aK/+Opff/Tm3D/0qJ+/9m4nv7Xvqfs0bqkw864pHXPuKUjAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4fU8IuoBUHb2CVkDDi2CPyJBm49OZbv3mrID/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//mrID/05lu/ciQZuPDi2CPvYJWQLuAVB24fU8I
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1flEHuYBUF72DVkLBh1uexoxg4dedcffqsIT/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/6rCE/9edcffHjGDh
+ wodbn72DVUK5gFQXtX5RBwAAAAAAAAAAAAAAAKqAVQC5gFIHvYFWDruDVkO+hFiyxo1h5tyjd/jss4f/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL/+yzh//do3f4x41g5b6EWLK7g1ZDvYFWDrmAUgeqgFUAqoBVBrmAUmO9gVbPzpNn7eWrgPvutYr/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//utYr/5KuA/M2TZu69gVbPuYBSY6qAVQa/gEAEun1SXruBVc3Nkmbs
+ 5Kt/++61if/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//ptYn/6baI//C3i//wt4v/
+ 8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+61if/kq3/7zZJm7LuBVc26fVJev4BABL+AQAC6fVIG
+ uHpVELyAVlm/hFjBypBk69+levnttIj/8LeL//C3i//wt4v/8LeL/+62iv/fs4X/rat1/4+mbf+Ppm3/
+ rqt1/9+zhf/utor/8LeL//C3i//wt4v/8LeL/+20iP/fpnn5ypBk67+EWMG8gFZZuHpVELp9Uga/gEAA
+ AAAAAAAAAACqVVUAuX1TC719Uxq/gldNwYdbq8qQZOXdo3f27LOH/+22iv/asoP/r6t2/5Wpcf+VuIL/
+ msSS/5rEkv+VuIL/lalx/6+rdv/asoP/7baK/+yzh//do3f2ypBk5cGHW6u+gldNvIBVGbl9UwuqVVUA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAALh6UAu6gFQgv4VZRr6MXpizlmXno6Nu+5qsdv+Zuob/
+ msKQ/5zGlf+eyZn/nsmZ/5zGlf+awpD/mbqG/5qsdv+jo277s5Zl576MXpi/hVlGuoBUILh7UQsAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHefYBR/n2Jfh59luZCoc+yWuYb9
+ mcGP/5zGlf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+cxpX/mcGP/5a5hv2QqHPsh59luX+fYl93n2AU
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHedXh16oWRlfqVrnIqye8uSvIfu
+ l8GP+pzHlv+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nMeW/5fBj/qSvIfu
+ irJ7y36la5x6oWRld51eHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHegXyB7omRpgKhrmou0fdKRu4bx
+ l8KQ+53Hl/+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/53Hl/+XwpD7kbuG8Yu0fdKAqGuae6JkaXegXyAAAAAAAAAAAICfYAR2nF9beaBjmYmyetmQuoXy
+ mMOR/J3ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+dyJj/mMOR/JC6hPKJsnrZeKBjmXaeYFqAn2AEgJ9gBHacX155oGOo
+ ibJ645K7h/aaxJP9nciY/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53ImP+axJP9kruH9omxeuN5oGOodp1fXICfYAQAAAAA
+ ZplmA3ihYzR6omZ3gqpxqoy1ft2TvIj1mcSS/J3ImP+eyZn/nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53ImP+ZxJL8k7yI9Yy1ft2CqnGqe6Jmd3ihYzSAgEAC
+ AAAAAAAAAAAAAAAAAAAAAFWqVQJ2oGEweaFjd4CobqqLtH/Xk72K9JnDkfudyJf/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53Il/+Zw5H7k72K9Iy1f9eBqW6peaFjd3agYTCAgIAB
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd5teI3mfY25/pmyqi7N80JS9ivOYw5H7
+ nMeX/57Jmf+eyZn/nsmZ/57Jmf+eyZn/nsmZ/53Hl/+Yw5H7lL2K84uzfNB/pmyqeZ9jbnebXiMAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHacXhR6oGNa
+ faRpq4evd8+TvYrymcOR+5zHlv+eyZn/nsmZ/5zHlv+Zw5H7lL2K8oevd899pGmreqBjWnacXhQAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAB2m10MeJ5iRHuiZ6eDqnDQk72J8ZrFk/yaxZP8k72J8YOqcNB7omeneJ5iRHabXQwAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdJddBHecYSV6oGSSfaRo132kaNd8oGSReJxhJHSXXQQAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHeZZgF3mWYPbaRbDm2kWwEAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8P///8A//
+ /8AD//8AAP/8AAA/8AAAD8AAAAMAAAAAAAAAAIAAAAHgAAAH/AAAP/gAAB/gAAAHAAAAAAAAAAAAAAAA
+ AAAAAMAAAAPwAAAf/AAAP/AAAA/AAAADAAAAAAAAAACAAAAB4AAAB/wAAD//AAD//8AD///wD////D//
+ KAAAABAAAAAgAAAAAQAgAAAAAAAABAAAYQoAAGEKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAANG6pgrRvqxe0b6sXtC6pgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ zrypFNXDsWXg0sTQ7OPY+uzj2Prg0sTQ1cOxZc68qRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPu6ch
+ 2Ma2dOLVx9Lt5dn58erg//Lr4f/y6+H/8erg/+3l2fni1cfS2Ma2dM+7pyEAAAAAAAAAAMy4pBjWxbN/
+ 49fJ1u3l2fvy6+D/8uvh//Lr4f/y6+H/8uvh//Lr4f/y6+H/8uvg/+3l2fvj18nW1sWzf825pRjMuaMZ
+ 1cOyjuTZy97u5tv88uvh//Lr4P/t4dT/4cav/+HGr//t4dT/8uvg//Lr4f/u5tv85NnL3tXDso7NuqYZ
+ AAAAAKqqqgDPu6gq2Mi3huDPvujewqr/2amE/+Wtgf/lrYH/2amE/97Cqv/gz77o2Mi3hs+7qCr/gIAA
+ AAAAAAAAAAC1flECvIJVGMOJXHfVnHHa5q2B/vC3i//wt4v/8LeL//C3i//mrYH+1Zxx2sOJXHe8glUY
+ tX5RAgAAAAC4gFIcxIleg9ifc+TqsYX98LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//qsYX9
+ 2J9z5MSJXYS4gFIcun1RGsOIXYnZn3Pq67KG/vC3i//wt4v/67aJ/8Wvff/Gr33/67aJ//C3i//wt4v/
+ 67KG/tmfc+rDiF2Jun1RGgAAAAC4e1MDvoBVHMWKXn3RoHPdwa58/p60f/+aw5D/msOQ/560f//Brnz+
+ 0aBz3cWKXn29gVYcuHtTAwAAAAAAAAAAAAAAAHmgYyGDqXB2kbJ945rCkf6dyJj/nsmZ/57Jmf+dyJj/
+ msKR/pGyfeODqXB2eaBjIQAAAAAAAAAAdpxfGICobX+OuILWmcOS+57JmP+eyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZj/mcOS+464gtaAqG1/dp5gGHacXxmAp22OkLmE3prEk/yeyZn/nsmZ/57Jmf+eyZn/
+ nsmZ/57Jmf+eyZn/nsmZ/5rEk/yQuYTef6dtjnedXxkAAAAAVapVAHihYyqDqnKFj7iD2prEk/ueyZj/
+ nsmZ/57Jmf+eyZj/msST+4+4g9qDq3KEeKFjKoCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmfYhuBqG5y
+ jLV/2ZrFk/uaxZP7jbV/2YGobnJ5n2IbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAHebYAp8omdefKNmXnibYAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8PwAA8A8AAMADAAAAAAAA
+ AAAAAIABAACAAQAAAAAAAAAAAACAAQAAwAMAAAAAAAAAAAAAgAEAAPAPAAD8PwAA
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/StateMachine/DisplayTextHandler.cs b/QRValidation/Project/StateMachine/DisplayTextHandler.cs
new file mode 100644
index 0000000..f53724c
--- /dev/null
+++ b/QRValidation/Project/StateMachine/DisplayTextHandler.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Project
+{
+ public partial class fMain
+ {
+ delegate void ShowLotTextHandler(string value);
+
+ delegate void UpdateDMTextHandler(string value1);
+
+ //void UpdateResultText(string value1)
+ //{
+ // if (this.lbResult.InvokeRequired)
+ // {
+ // lbResult.BeginInvoke(new UpdateDMTextHandler(UpdateResultText), new object[] { value1 });
+ // }
+ // else
+ // {
+ // lbResult.Text = value1;
+ // }
+ //}
+
+ delegate void UpdateLabelTextHandler(Control ctl, string value);
+ void UpdateLabelText(Control ctl, string value)
+ {
+ if (ctl.InvokeRequired)
+ {
+ ctl.BeginInvoke(new UpdateLabelTextHandler(UpdateLabelText), new object[] { ctl, value });
+ }
+ else
+ {
+ ctl.Text = value;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Project/StateMachine/EnumStruct.cs b/QRValidation/Project/StateMachine/EnumStruct.cs
new file mode 100644
index 0000000..e1da4cb
--- /dev/null
+++ b/QRValidation/Project/StateMachine/EnumStruct.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Project
+{
+ public partial class StateMachine
+ {
+
+ public enum eMsgOpt : byte
+ {
+ NORMAL,
+ STEPCHANGE,
+ ERROR,
+ }
+
+
+ ///
+ /// 000~020 : System Define
+ /// 020~255 : User Define
+ ///
+ public enum eSMStep : byte
+ {
+ NOTSET = 0,
+ INIT,
+ IDLE,
+ REQSERVM,
+ REQSERV,
+ RUN,
+ ///
+ /// 작업완룡
+ ///
+ FINISH,
+ ///
+ /// 왼쪽(출구)에서 자재를 투입합니다
+ ///
+ LTAKE,
+
+ ///
+ /// 오른쪽(입구)에서 자채를 투입합니다
+ ///
+ //RTAKE,
+
+ POSITION_RESET,
+ PAUSE,
+ ///
+ /// 시작명령을 기다리는중(PAUSE 상태에서 RESET시 설정 됨)
+ ///
+ WAITSTART,
+ ERROR,
+ UNLOADER_CHK,
+ OVERLOAD,
+
+ RESET,
+ SAFTY,
+ EMERGENCY,
+ CLEAR,
+ HOME,
+ HOMECHK,
+ QHOME,
+
+
+ CLOSING,
+ CLOSEWAIT,
+ CLOSED,
+ }
+ }
+
+
+}
diff --git a/QRValidation/Project/StateMachine/EventArgs.cs b/QRValidation/Project/StateMachine/EventArgs.cs
new file mode 100644
index 0000000..7a6c1ed
--- /dev/null
+++ b/QRValidation/Project/StateMachine/EventArgs.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Project
+{
+ public partial class StateMachine
+ {
+ public class StateMachineMessageEventArgs : EventArgs
+ {
+ public string Header { get; set; }
+ public string Message { get; set; }
+ public StateMachineMessageEventArgs(string header_, string message_)
+ {
+ this.Message = message_;
+ this.Header = header_;
+ }
+ }
+ public event EventHandler Message;
+ void RaiseMessage(string header, string msg)
+ {
+ if (Message != null) Message(this, new StateMachineMessageEventArgs(header, msg));
+ }
+
+ public class StepChangeEventArgs : EventArgs
+ {
+ public eSMStep Old { get; set; }
+ public eSMStep New { get; set; }
+ public StepChangeEventArgs(eSMStep old_,eSMStep new_)
+ {
+ this.Old = old_;
+ this.New = new_;
+ }
+ }
+ public class RunningEventArgs : EventArgs {
+ // public object sender { get; set; }
+ public Boolean isFirst { get; set; }
+ public eSMStep Step { get; set; }
+ public TimeSpan StepTime { get; set; }
+ public RunningEventArgs(eSMStep step_, Boolean isfirst_,TimeSpan steptime_)
+ {
+ this.isFirst = isfirst_;
+ this.Step = step_;
+ StepTime = steptime_;
+ // this.sender = sender_;
+ }
+ }
+ //public event EventHandler StepChanged;
+ //public event EventHandler SPS;
+ //public event EventHandler Running;
+ }
+
+
+}
diff --git a/QRValidation/Project/StateMachine/_BW_Conn.cs b/QRValidation/Project/StateMachine/_BW_Conn.cs
new file mode 100644
index 0000000..e615c00
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_BW_Conn.cs
@@ -0,0 +1,327 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using WatsonWebsocket;
+
+namespace Project
+{
+ public partial class fMain
+ {
+
+
+ Byte sendseq = 0;
+ DateTime[] cameraconntimechk = new DateTime[] { DateTime.Now, DateTime.Now };
+
+ private void bwConn_DoWork(object sender, DoWorkEventArgs e)
+ {
+ PUB.log_[0].Add("Device connection thread start");
+ PUB.log_[1].Add("Device connection thread start");
+ var logIdx = 0;
+ System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
+ int idx = 0;
+ while (bRunConnection && this.IsDisposed == false && this.Disposing == false)
+ {
+ //Check listener status
+ if (idx == 0)
+ {
+ //left socket listening
+ if (PUB.setting.CameraIndexL >= 0)
+ {
+ logIdx = 0;
+ if (PUB.wsock_[logIdx].IsListening == false)
+ {
+ var tsli = DateTime.Now - PUB.Time_WS_Listen_Try[PUB.setting.CameraIndexL];
+ if (tsli.TotalSeconds > 5)
+ {
+ //Server retry
+ PUB.log_[logIdx].AddAT($"Server listen retry port:{PUB.setting.listenPortL}");
+
+ try
+ {
+ PUB.wsock_[logIdx] = new Class.WebSocket("localhost", PUB.setting.listenPortL);
+ PUB.wsock_[logIdx].Start();
+ PUB.wsock_[logIdx].MessageReceived += Ws_DataArrival;
+ PUB.wsock_[logIdx].ClientConnected += Ws_Connected;
+ PUB.wsock_[logIdx].ClientDisconnected += Ws_Disconnected;
+ }
+ catch (Exception ex)
+ {
+ PUB.wsock_[logIdx].MessageReceived -= Ws_DataArrival;
+ PUB.wsock_[logIdx].ClientConnected -= Ws_Connected;
+ PUB.wsock_[logIdx].ClientDisconnected -= Ws_Disconnected;
+ PUB.log_[logIdx].AddE("Server retry listen failed:" + ex.Message);
+ }
+ PUB.Time_WS_Listen_Try[PUB.setting.CameraIndexL] = DateTime.Now;
+ }
+ }
+ }
+ idx += 1;
+ }
+ else if (idx == 1)
+ {
+ //right socket listening
+ if (PUB.setting.CameraIndexR >= 0)
+ {
+ logIdx = 1;
+ if (PUB.wsock_[logIdx].IsListening == false)
+ {
+ var tsli = DateTime.Now - PUB.Time_WS_Listen_Try[PUB.setting.CameraIndexR];
+ if (tsli.TotalSeconds > 5)
+ {
+ //Server retry
+ PUB.log_[logIdx].AddAT($"Server listen retry port:{PUB.setting.listenPortR}");
+
+ try
+ {
+ PUB.wsock_[logIdx] = new Class.WebSocket("localhost", PUB.setting.listenPortR);
+ PUB.wsock_[logIdx].Start();
+ PUB.wsock_[logIdx].MessageReceived += Ws_DataArrival;
+ PUB.wsock_[logIdx].ClientConnected += Ws_Connected;
+ PUB.wsock_[logIdx].ClientDisconnected += Ws_Disconnected;
+ }
+ catch (Exception ex)
+ {
+ PUB.wsock_[logIdx].MessageReceived -= Ws_DataArrival;
+ PUB.wsock_[logIdx].ClientConnected -= Ws_Connected;
+ PUB.wsock_[logIdx].ClientDisconnected -= Ws_Disconnected;
+ PUB.log_[logIdx].AddE("Server retry listen failed:" + ex.Message);
+ }
+ PUB.Time_WS_Listen_Try[PUB.setting.CameraIndexR] = DateTime.Now;
+ }
+ }
+ }
+ idx += 1;
+ }
+ else if (idx == 2)
+ {
+ //Initialization process
+ try
+ {
+ var status = PUB._virtualFG40.InitSystem();
+ if (status != Crevis.VirtualFG40Library.VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ PUB.log_[0].AddE($"Crevis:System Initialize failed : {status}");
+ PUB.log_[1].AddE($"Crevis:System Initialize failed : {status}");
+ }
+ else Console.WriteLine("Camera init ok");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Camera init error {ex.Message}");
+ }
+ idx += 1;
+ }
+
+ else if (idx == 3)
+ {
+ //open camera
+ if (camNum > 0 && PUB.setting.CameraIndexL >= 0 && PUB.setting.CameraIndexL < camNum)
+ {
+ bool initok = false;
+ PUB._virtualFG40.IsInitSystem(ref initok);
+ if (initok)
+ {
+ var camIdx = PUB.setting.CameraIndexL;
+ if (camIdx >= camNum)
+ {
+ //Card corresponding to specified index does not exist
+ }
+ else if (PUB._hDevice[camIdx] < 0)
+ {
+ //Camera index is 0,1 but vision index uses 0,2 as before. 1 is for central Keyence
+ PUB.log_[logIdx].Add($"Camera {camIdx} connection in progress");
+ var Piv = camIdx == PUB.setting.CameraIndexL ? this.pivLeft : this.pIvRight;
+ if (CrevisOpen(camIdx)) PUB.CrevisGrab(camIdx, true, Piv); //Try to capture one image
+ cameraconntimechk[camIdx] = DateTime.Now;
+ }
+ else
+ {
+ //Has been connected before.
+ var ts = DateTime.Now - cameraconntimechk[camIdx];
+ if (ts.TotalSeconds > 5)
+ {
+ bool iscon = false;
+ var rlt = PUB._virtualFG40.IsOpenDevice(PUB._hDevice[camIdx], ref iscon);
+ if (rlt == Crevis.VirtualFG40Library.VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ var status = PUB._virtualFG40.GetAvailableCameraNum(ref camNum);
+ if (iscon == false)
+ {
+ var Piv = camIdx == PUB.setting.CameraIndexL ? this.pivLeft : this.pIvRight;
+ if (CrevisOpen(camIdx)) PUB.CrevisGrab(camIdx, true, Piv); //Try to capture one image
+ }
+ else
+ {
+ //Already connected.
+ }
+ }
+ else if (rlt == Crevis.VirtualFG40Library.VirtualFG40Library.MCAM_ERR_NO_DEVICE)
+ {
+ //Device not found, refreshing list.
+ PUB._virtualFG40.UpdateDevice();
+ var status = PUB._virtualFG40.GetAvailableCameraNum(ref camNum);
+ if (camNum <= camIdx)
+ {
+ PUB._virtualFG40.FreeSystem();
+ PUB.log_[logIdx].AddE("The camera can not be connected.");
+ }
+ //else
+ //{
+ PUB._hDevice[camIdx] = -1; //Induce reconnection work
+ //}
+ }
+ cameraconntimechk[camIdx] = DateTime.Now;
+ }
+
+ }
+ }
+
+ }
+ //Pub.flag.set(eFlag.CHECKCAMERA, false, "LOAD");
+ idx += 1;
+ }
+ else if (idx == 4)
+ {
+ //open camera
+ bool initok = false;
+ try
+ {
+ PUB._virtualFG40.IsInitSystem(ref initok);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Error _virtualFG40.IsInitSystem : {ex.Message}");
+ initok = false;
+ }
+
+ if (initok)
+ {
+ var camIdx = PUB.setting.CameraIndexR;
+ if (camIdx >= camNum)
+ {
+ //지정한 인덱스에 해당하는 카드가 존재하지 않음
+ }
+ else if (camIdx != PUB.setting.CameraIndexL)
+ {
+ if (PUB._hDevice[camIdx] < 0)
+ {
+ //Camera index is 0,1 but vision index uses 0,2 as before. 1 is for central Keyence
+ PUB.log_[logIdx].Add($"Camera {camIdx} connection in progress");
+ var Piv = camIdx == PUB.setting.CameraIndexL ? this.pivLeft : this.pIvRight;
+ if (CrevisOpen(camIdx)) PUB.CrevisGrab(camIdx, true, Piv); //Try to capture one image
+ cameraconntimechk[camIdx] = DateTime.Now;
+ }
+ else
+ {
+ //최소 셋팅된 번호와 현재 카메라 번호가 다르면 초기화를 해준다.
+ if (FirstCrevisIndex[camIdx] != -1 && FirstCrevisIndex[camIdx] != PUB._hDevice[camIdx])
+ {
+ PUB.log_[logIdx].AddE($"Camera Index({camIdx}) error");
+ PUB._hDevice[camIdx] = -1;
+ }
+ else if(PUB._hDevice[0] == PUB._hDevice[1]) //error condition
+ {
+ PUB.log_[logIdx].AddE($"Camera Index({camIdx}) error init");
+ PUB._hDevice[0] = -1;
+ PUB._hDevice[1] = -1;
+ FirstCrevisIndex[0] = -1;
+ FirstCrevisIndex[1] = -1;
+ }
+ else
+ {
+ //Has been connected before.
+ var ts = DateTime.Now - cameraconntimechk[camIdx];
+ if (ts.TotalSeconds > 5)
+ {
+ bool iscon = false;
+ var rlt = PUB._virtualFG40.IsOpenDevice(PUB._hDevice[camIdx], ref iscon);
+ if (rlt == Crevis.VirtualFG40Library.VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ var status = PUB._virtualFG40.GetAvailableCameraNum(ref camNum);
+ if (iscon == false)
+ {
+ var Piv = camIdx == PUB.setting.CameraIndexL ? this.pivLeft : this.pIvRight;
+ if (CrevisOpen(camIdx)) PUB.CrevisGrab(camIdx, true, Piv); //Try to capture one image
+ }
+ else
+ {
+ //Already connected.
+ }
+ }
+ else if (rlt == Crevis.VirtualFG40Library.VirtualFG40Library.MCAM_ERR_NO_DEVICE)
+ {
+ //Device not found, refreshing list.
+ PUB._virtualFG40.UpdateDevice();
+ var status = PUB._virtualFG40.GetAvailableCameraNum(ref camNum);
+ if (camNum <= camIdx)
+ {
+ PUB._virtualFG40.FreeSystem();
+ PUB.log_[logIdx].AddE("The camera can not be connected.");
+ }
+ //else
+ //{
+ PUB._hDevice[camIdx] = -1; //Induce reconnection work
+ //}
+ }
+ cameraconntimechk[camIdx] = DateTime.Now;
+ }
+ }
+
+
+ }
+
+ }
+ }
+
+
+ // panMiniDisplay.Invalidate();
+ //Pub.flag.set(eFlag.CHECKCAMERA, false, "LOAD");
+
+ idx += 1;
+ }
+ else
+ {
+ idx = 0;
+ }
+ if (sendseq == 0)
+ {
+ if (PUB.setting.CameraIndexL >= 0)
+ SendStatus(eTarget.Left);
+ sendseq += 1;
+ }
+ else if (sendseq == 1)
+ {
+ if (PUB.setting.CameraIndexR >= 0 && PUB.setting.CameraIndexR != PUB.setting.CameraIndexL)
+ SendStatus(eTarget.Right);
+ sendseq += 1;
+ }
+ else sendseq = 0;
+
+
+ if (idx > 4) idx = 0;
+
+ //heartbeat
+ if (this.IsDisposed == false)
+ {
+ this.Invoke(new Action(() =>
+ {
+ try
+ {
+ if (this.sbConnState.ForeColor == Color.LimeGreen)
+ this.sbConnState.ForeColor = Color.Green;
+ else
+ this.sbConnState.ForeColor = Color.LimeGreen;
+ }
+ catch { }
+ }));
+ }
+
+ System.Threading.Thread.Sleep(250);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/StateMachine/_BW_Left.cs b/QRValidation/Project/StateMachine/_BW_Left.cs
new file mode 100644
index 0000000..bb48fb6
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_BW_Left.cs
@@ -0,0 +1,112 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using WatsonWebsocket;
+
+namespace Project
+{
+ public partial class fMain
+ {
+ private void bwLeft_DoWork(object sender, DoWorkEventArgs e)
+ {
+ var camIdx = PUB.setting.CameraIndexL;
+ var logIdx = 0;
+
+ PUB.log_[logIdx].Add("Camera thread(L) start");
+ System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
+ var framedelay = (int)(1000f / 12f);//Time required to get 1 frame 12f / 1000;
+ while (bRunConnection && this.IsDisposed == false && this.Disposing == false)
+ {
+
+ wat.Restart();
+ var _fpsms = framedelay;// IsTrigger ? Pub.setting.GrabDelayFast : Pub.setting.GrabDelaySlow;
+
+ if (PUB.imgque == null || PUB.imgque.Any() == false) continue;
+ if (PUB.imgque.Peek().Equals(this.Name) == false) continue;
+
+ if (camIdx < 0)
+ {
+ this.BeginInvoke(new Action(() =>
+ {
+ sbConnCamL.ForeColor = Color.Red;
+ }));
+ System.Threading.Thread.Sleep(1000);
+ continue;
+ }
+
+
+ //If camera is not connected, do not process.
+ if (PUB._isCrevisOpen[camIdx] == false || PUB.IsLive[camIdx] == false || PUB.flag.get(eFlag.CAMERAINIT) == false) _fpsms = 1000;
+ else
+ {
+ //Data processing after image acquisition
+ var Piv = camIdx == PUB.setting.CameraIndexL ? this.pivLeft : this.pIvRight;
+ if (PUB.CrevisGrab(camIdx, true, Piv))
+ {
+ if (PUB.IsProcess[camIdx] || PUB.IsTrigger[camIdx])
+ PUB.CreavisProcess(camIdx, PUB.IsTrigger[camIdx], Piv);
+ }
+
+ //this.BeginInvoke(new Action(() => {
+ // //Update current time
+ // if (iv[camIdx] != null)
+ // {
+ // if (iv[camIdx].Shapes.Count < 1)
+ // iv[camIdx].Shapes.AddText(100, 100, DateTime.Now.ToShortTimeString(), Color.Lime, 100);
+ // else
+ // iv[camIdx].Shapes[0].Title = DateTime.Now.ToShortTimeString();
+ // iv[camIdx].Invalidate();
+ // }
+ //}));
+
+ if (PUB.IsTrigger[camIdx] && PUB.setting.TriggerTimeout > 0 && PUB.setting.TriggerTimeout < 999)
+ {
+ var ts = DateTime.Now - PUB.triggerTime[camIdx];
+ if (ts.TotalSeconds > PUB.setting.TriggerTimeout)
+ {
+ PUB.log_[logIdx].Add($"Trigger maximum time({PUB.setting.TriggerTimeout}) exceeded, releasing");
+ PUB.IsTrigger[camIdx] = false;
+ PUB.IsLive[camIdx] = false;
+ PUB.IsProcess[camIdx] = false;
+ }
+ }
+ }
+ wat.Stop();
+ if (wat.ElapsedMilliseconds < _fpsms)
+ {
+ try
+ {
+ if (PUB.setting.AutoDeleteSeconds > 0 && PUB.setting.AutoDeleteSeconds < 99)
+ {
+ var di = new System.IO.DirectoryInfo(PUB.setting.ImageSavePath);
+ var ttime = DateTime.Now.AddSeconds(-PUB.setting.AutoDeleteSeconds);
+ var dellist = di.GetFiles().Where(t => t.CreationTime <= ttime).FirstOrDefault();
+ if (dellist != null) dellist.Delete();
+ }
+ }
+ catch { }
+ System.Threading.Thread.Sleep(_fpsms - (int)wat.ElapsedMilliseconds);
+ }
+
+ //heart beat
+ this.BeginInvoke(new Action(() =>
+ {
+ if (sbConnCamL.ForeColor == Color.Green)
+ sbConnCamL.ForeColor = Color.LimeGreen;
+ else
+ sbConnCamL.ForeColor = Color.Green;
+ }));
+ }
+
+
+ }
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/StateMachine/_BW_Right.cs b/QRValidation/Project/StateMachine/_BW_Right.cs
new file mode 100644
index 0000000..0543e92
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_BW_Right.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using WatsonWebsocket;
+
+namespace Project
+{
+ public partial class fMain
+ {
+
+
+
+ private void bwRight_DoWork(object sender, DoWorkEventArgs e)
+ {
+ var camIdx = PUB.setting.CameraIndexR;
+ var logIdx = 1;
+
+ PUB.log_[logIdx].Add("Camera thread(R) start");
+ System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
+ var framedelay = (int)(1000f / 12f);//Time required to get 1 frame 12f / 1000;
+ while (bRunConnection && this.IsDisposed == false && this.Disposing == false)
+ {
+
+
+ wat.Restart();
+ var _fpsms = framedelay;// IsTrigger ? Pub.setting.GrabDelayFast : Pub.setting.GrabDelaySlow;
+
+ if (PUB.imgque == null || PUB.imgque.Any() == false) continue;
+ if (PUB.imgque.Peek().Equals(this.Name) == false) continue;
+
+ if (camIdx < 0 || PUB.setting.CameraIndexL == PUB.setting.CameraIndexR)
+ {
+ this.BeginInvoke(new Action(() =>
+ {
+ sbConnCamR.ForeColor = Color.Red;
+ }));
+ System.Threading.Thread.Sleep(1000);
+ continue;
+ }
+
+ //If camera is not connected, do not process.
+ if (PUB._isCrevisOpen[camIdx] == false || PUB.IsLive[camIdx] == false || PUB.flag.get(eFlag.CAMERAINIT) == false) _fpsms = 1000;
+ else
+ {
+ //Data processing after image acquisition
+ var Piv = this.pIvRight;
+ if (PUB.CrevisGrab(camIdx, true, Piv))
+ {
+ if (PUB.IsProcess[camIdx])
+ PUB.CreavisProcess(camIdx, PUB.IsTrigger[camIdx], Piv);
+ }
+
+
+ if (PUB.setting.TriggerTimeout > 0 && PUB.setting.TriggerTimeout < 999)
+ {
+ var ts = DateTime.Now - PUB.triggerTime[camIdx];
+ if (PUB.IsTrigger[camIdx] && ts.TotalSeconds > PUB.setting.TriggerTimeout)
+ {
+ PUB.log_[logIdx].Add($"Trigger maximum time({PUB.setting.TriggerTimeout}) exceeded, releasing");
+ PUB.IsTrigger[camIdx] = false;
+ }
+ }
+ }
+ wat.Stop();
+ if (wat.ElapsedMilliseconds < _fpsms)
+ {
+ try
+ {
+ if (PUB.setting.AutoDeleteSeconds > 0 && PUB.setting.AutoDeleteSeconds < 99)
+ {
+ var di = new System.IO.DirectoryInfo(PUB.setting.ImageSavePath);
+ var ttime = DateTime.Now.AddSeconds(-PUB.setting.AutoDeleteSeconds);
+ var dellist = di.GetFiles().Where(t => t.CreationTime <= ttime).FirstOrDefault();
+ if (dellist != null) dellist.Delete();
+ }
+ }
+ catch { }
+ System.Threading.Thread.Sleep(_fpsms - (int)wat.ElapsedMilliseconds);
+ }
+
+ //heart beat
+ this.BeginInvoke(new Action(() =>
+ {
+ if (sbConnCamR.ForeColor == Color.Green)
+ sbConnCamR.ForeColor = Color.LimeGreen;
+ else
+ sbConnCamR.ForeColor = Color.Green;
+ }));
+
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/StateMachine/_Close.cs b/QRValidation/Project/StateMachine/_Close.cs
new file mode 100644
index 0000000..9f29d35
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_Close.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace Project
+{
+ public partial class fMain
+ {
+ ///
+ /// Function executed once when closing the program
+ ///
+ private void _Close_Start()
+ {
+ //동작코드off
+ PUB.IsTrigger[0] = PUB.IsTrigger[1] = false;
+ PUB.IsProcess[0] = PUB.IsProcess[1] = false;
+ PUB.IsLive[0] = PUB.IsLive[1] = false;
+
+ tmDisplay.Stop();
+ PUB.log_[0].Add("Socket close");
+ PUB.log_[1].Add("Socket close");
+ try
+ {
+ PUB.wsock_[0].Stop();
+ PUB.wsock_[1].Stop();
+ }
+ catch { }
+
+ //연결체크용 쓰레드 종료
+ bRunConnection = false;
+
+ PUB.log_[0].Add("Program Close");
+ PUB.log_[1].Add("Program Close");
+ PUB.LogFlush();
+
+ //크레비스OFF - 210203
+ try
+ {
+ if (PUB._hDevice[PUB.setting.CameraIndexL] > 0)
+ PUB._virtualFG40.AcqStop(PUB._hDevice[PUB.setting.CameraIndexL]);
+ if (PUB._hDevice[PUB.setting.CameraIndexR] > 0)
+ PUB._virtualFG40.AcqStop(PUB._hDevice[PUB.setting.CameraIndexR]);
+ PUB._virtualFG40.FreeSystem();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+
+ }
+
+ }
+}
diff --git a/QRValidation/Project/StateMachine/_Crevis.cs b/QRValidation/Project/StateMachine/_Crevis.cs
new file mode 100644
index 0000000..5002e6d
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_Crevis.cs
@@ -0,0 +1,258 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Crevis.VirtualFG40Library;
+using Emgu.CV;
+using Emgu.CV.CvEnum;
+using Emgu.CV.Structure;
+#if V22
+using Euresys.Open_eVision_22_12;
+using Euresys.Open_eVision_22_12.Easy3D;
+#else
+using Euresys.Open_eVision_2_11;
+#endif
+
+namespace Project
+{
+ public partial class fMain
+ {
+
+
+ UInt32 camNum = 0;
+
+
+
+
+
+ ///
+ /// Crevis must be initialized in the main thread
+ ///
+ void _SM_RUN_INIT_CAMERA()
+ {
+ //Crevis Init
+ PUB._virtualFG40 = new VirtualFG40Library();
+ Int32 status = VirtualFG40Library.MCAM_ERR_SUCCESS;
+ try
+ {
+ //System InitializSend_WSocke
+
+ status = PUB._virtualFG40.InitSystem();
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ PUB.log_[0].AddE($"Crevis:System Initialize failed : {status}");
+ PUB.log_[1].AddE($"Crevis:System Initialize failed : {status}");
+ }
+ else
+ {
+ // Update Device List
+ //status = _virtualFG40.UpdateDevice();
+ //if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ //{
+ // _virtualFG40.FreeSystem();
+ // throw new Exception(String.Format("Update Device list failed : {0}", status));
+ //}
+
+ status = PUB._virtualFG40.GetAvailableCameraNum(ref camNum);
+ if (camNum <= 0)
+ {
+ PUB._virtualFG40.FreeSystem();
+ PUB.log_[0].AddE("The camera can not be connected.");
+ PUB.log_[1].AddE("The camera can not be connected.");
+ }
+ else Console.WriteLine($"Camera {camNum} Found");
+
+ //camNum = 1;
+ }
+
+ //if (camNum > 0)
+ //{
+ // //카메라 인덱스는 0,1 이지만 비젼인덱스는 기존대로 0,2번을 사용한다. 1번은 중앙 키엔스용이다
+ // Pub.log.Add($"{Pub.setting.CameraIndex}번 카메라 연결 진행");
+ // if (CrevisOpen(Pub.setting.CameraIndex)) CrevisGrab(true); //한장을 수집해본다
+ //}
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[0].AddE("Crevis:" + ex.Message);
+ PUB.log_[1].AddE("Crevis:" + ex.Message);
+ }
+ }
+
+ int[] FirstCrevisIndex = new int[] { -1, -1 };
+
+ ///
+ /// Camera open
+ ///
+ ///
+ ///
+ Boolean CrevisOpen(int camIdx)
+ {
+ Int32 status = VirtualFG40Library.MCAM_ERR_SUCCESS;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ try
+ {
+ // camera open
+ status = PUB._virtualFG40.OpenDevice((uint)camIdx, ref PUB._hDevice[camIdx]);
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ PUB._virtualFG40.FreeSystem();
+ PUB.log_[logIdx].AddE($"Open device failed : {status}");
+ PUB._isCrevisOpen[camIdx] = false;
+
+ return false;
+ }
+
+ if (FirstCrevisIndex[camIdx] == -1)
+ FirstCrevisIndex[camIdx] = PUB._hDevice[camIdx];
+
+ PUB._isCrevisOpen[camIdx] = true;
+
+ // Call Set Feature
+ CrevisSetFeature((uint)camIdx);
+
+ // Get Width
+ status = PUB._virtualFG40.GetIntReg(PUB._hDevice[camIdx], VirtualFG40Library.MCAM_WIDTH, ref PUB._width[camIdx]);
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ throw new Exception(String.Format("Read Register MCAM_WIDTH failed : {0}", status));
+ }
+
+ // Get Height
+ status = PUB._virtualFG40.GetIntReg(PUB._hDevice[camIdx], VirtualFG40Library.MCAM_HEIGHT, ref PUB._height[camIdx]);
+
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ throw new Exception(String.Format("Read Register MCAM_HEIGHT failed : {0}", status));
+ }
+
+ // Get FPS
+ //status = _virtualFG40.GetIntReg(_hDevice, VirtualFG40Library.MCAM_ACQUISITION_FRAME_COUNT, ref _fps);
+ //if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ //{
+ // throw new Exception(String.Format("Read Register MCAM_ACQUISITION_FRAME_COUNT failed : {0}", status));
+ //}
+
+
+ PUB.log_[logIdx].AddI($"Camera({camIdx}) connection complete({PUB._width[camIdx]}x{PUB._height[camIdx]})");
+
+ uint grabtimeout = 0;
+ status = PUB._virtualFG40.GetGrabTimeout(PUB._hDevice[camIdx], ref grabtimeout);
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ throw new Exception(String.Format("Read TimeOut failed : {0}", status));
+ }
+ else PUB._virtualFG40.SetGrabTimeout(PUB._hDevice[camIdx], 1000); //타임아웃 1초로 지정(기본값:5초) 210113
+
+
+
+ // Image buffer allocation
+ PUB._bufferSize[camIdx] = PUB._width[camIdx] * PUB._height[camIdx];
+ PUB.camPtr[camIdx] = Marshal.AllocHGlobal(PUB._bufferSize[camIdx]);
+
+ //데이터를 받을 저장소 초기화(흑백)
+ var bitsPerPixel = 8;
+ PUB._stride[camIdx] = (Int32)((PUB._width[camIdx] * bitsPerPixel + 7) / 8);
+ //var imgRect = new Rectangle(0, 0, _width[camIdx], _height[camIdx]);
+ //OrgBitmap = new Bitmap(_width, _height, _stride, PixelFormat.Format8bppIndexed, _pImage);
+ // SetGrayscalePalette(OrgBitmap);
+
+ //오픈이비젼은 사용가능하면 처리한다
+ //if (OrgEImage[camIdx] != null) OrgEImage[camIdx].Dispose();
+ //OrgEImage[camIdx] = new EImageBW8();
+ //OrgEImage[camIdx].SetImagePtr(_width[camIdx], _height[camIdx], pImage);
+
+ //openCv 이미지 처리
+ // OrgImage = new Image(_width, _height, _stride, _pImage);
+ //OrgCImage = new Image(_width, _height, new Bgr(Color.Black));
+
+ //데이터를 표시할 저장소 초기화 (컬러)
+ //OrgBitmapC = new Bitmap(_width, _height, PixelFormat.Format24bppRgb);
+ //var lockColor = OrgBitmapC.LockBits(imgRect, ImageLockMode.ReadOnly, OrgBitmapC.PixelFormat);
+ //OrgImageC = new Image(_width, _height, lockColor.Stride, lockColor.Scan0);
+ //OrgBitmapC.UnlockBits(lockColor);
+
+ }
+ catch (Exception ex)
+ {
+
+ PUB._isCrevisOpen[camIdx] = false;
+ MakeBlankImage(camIdx, "ERROR"); //빈 이미지 설정
+ PUB.log_[logIdx].AddE("Crevis Error:" + ex.Message);// MessageBox.Show(ex.Message);
+ }
+
+ PUB.flag.set(eFlag.CAMERAINIT, PUB._isCrevisOpen[camIdx], "");
+ //이미지를 화면에 표시한다.
+ //ivL.Image = OrgEImage; ivL.ZoomFit();
+ return PUB._isCrevisOpen[camIdx];
+ }
+
+ void MakeBlankImage(int camIdx, string title = "")
+ {
+ PUB._width[camIdx] = 1024;
+ PUB._height[camIdx] = 768;
+
+ if (PUB.mre[camIdx].WaitOne(100))
+ {
+ PUB.mre[camIdx].Reset();
+ PUB.OrgImage[camIdx] = new EImageBW8();
+ PUB.OrgImage[camIdx].SetSize(PUB._width[camIdx], PUB._height[camIdx]);
+ PUB.mre[camIdx].Set();
+ }
+ }
+
+ private void CrevisSetFeature(uint camIdx)
+ {
+ Int32 status = VirtualFG40Library.MCAM_ERR_SUCCESS;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ try
+ {
+ // Set Trigger Mode
+ status = PUB._virtualFG40.SetEnumReg(PUB._hDevice[camIdx], VirtualFG40Library.MCAM_TRIGGER_MODE, VirtualFG40Library.TRIGGER_MODE_OFF);
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ throw new Exception(String.Format("Write Register failed : {0}", status));
+ }
+
+ // Set PixelFormat
+ status = PUB._virtualFG40.SetEnumReg(PUB._hDevice[camIdx], VirtualFG40Library.MCAM_PIXEL_FORMAT, VirtualFG40Library.PIXEL_FORMAT_MONO8);
+ if (status != VirtualFG40Library.MCAM_ERR_SUCCESS)
+ {
+ throw new Exception(String.Format("Write Register failed : {0}", status));
+ }
+ }
+ catch (Exception ex)
+ {
+ //MessageBox.Show(ex.Message);
+ PUB.log_[logIdx].AddE(ex.Message);
+ }
+ }
+
+
+
+
+
+
+
+ //private void SetGrayscalePalette(Bitmap bitmap)
+ //{
+ // ColorPalette GrayscalePalette = bitmap.Palette;
+ // for (int i = 0; i < 255; i++)
+ // {
+ // GrayscalePalette.Entries[i] = Color.FromArgb(i, i, i);
+ // }
+ // bitmap.Palette = GrayscalePalette;
+ //}
+
+
+
+
+
+ }
+}
diff --git a/QRValidation/Project/StateMachine/_Socket.cs b/QRValidation/Project/StateMachine/_Socket.cs
new file mode 100644
index 0000000..6300124
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_Socket.cs
@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+using WatsonWebsocket;
+
+namespace Project
+{
+ public partial class fMain
+ {
+
+ public object listlock = new object();
+ public List ClientList = new List();
+
+ private void Ws_Disconnected(object sender, ClientDisconnectedEventArgs e)
+ {
+ var ws = sender as Class.WebSocket;
+ var ip = e.IpPort;
+ var logIdx = ws.Target == eTarget.Left ? 0 : 1;
+ PUB.Time_WS_Disconnected[ws.TargetIdx] = DateTime.Now;
+ PUB.log_[logIdx].AddAT("Host connection terminated");
+ lock (ClientList)
+ {
+ if (ClientList.Contains(ip))
+ ClientList.Remove(ip);
+ }
+
+ }
+
+ private void Ws_Connected(object sender, ClientConnectedEventArgs e)
+ {
+ var ws = sender as Class.WebSocket;
+ var logIdx = ws.Target == eTarget.Left ? 0 : 1;
+ PUB.Time_WS_Connected[ws.TargetIdx] = DateTime.Now;
+ PUB.log_[logIdx].AddAT("Host connection completed");
+ lock (ClientList)
+ {
+ if (ClientList.Contains(e.IpPort))
+ ClientList.Add(e.IpPort);
+ }
+ }
+
+
+
+ void SendStatus(eTarget cam)
+ {
+ var camIdx = cam == eTarget.Left ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = cam == eTarget.Left ? 0 : 1;
+ var camTarget = PUB.GetTarget(camIdx);
+ if (camTarget == eTarget.None) return;
+ //데이터 생성
+ var msg = new
+ {
+ command = "status",
+ camera = PUB._isCrevisOpen[camIdx] ? "1" : "0",
+ live = PUB.IsLive[camIdx] ? "1" : "0",
+ stream = PUB.setting.DisableStreamData ? "0" : "1",
+ listen = PUB.wsock_[logIdx].IsListening ? "1" : "0",
+ trig = PUB.IsTrigger[camIdx] ? "1" : "0",
+ license = PUB.VisionLicense ? "1" : "0",
+ reel = PUB.DetectReel[camIdx] ? "1" : "0",
+ conv = "0",
+ };
+ var json = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
+ try
+ {
+ //PUB.log_[logIdx].Add("상태전송:" + msg);
+ PUB.lastsendStatus[camIdx] = DateTime.Now;
+ PUB.Send_WSock(camTarget, json);
+ //PUB.ws[camIdx].ListClients().ToList().ForEach(t => PUB.ws[camIdx].SendAsync(t, json).Wait());
+ }
+ catch (Exception ex)
+ {
+ PUB.log_[logIdx].AddE($"(STATUS) send failed {ex.Message}");
+ }
+ }
+
+
+
+ private void Ws_DataArrival(object sender, MessageReceivedEventArgs e)
+ {
+ var ws = sender as Class.WebSocket;
+ var ip = e.IpPort;
+ var raw = Encoding.UTF8.GetString(e.Data);
+ var logIdx = ws.Target == eTarget.Left ? 0 : 1;
+ var camIdx = ws.TargetIdx;
+ var camTarget = PUB.GetTarget(camIdx);
+
+ PUB.log_[logIdx].Add($"Received:{raw}");
+
+ PUB.Time_WS_Recv[camIdx] = DateTime.Now;
+
+ var jvalue = JObject.Parse(raw);
+
+ //데이터 생성
+ var msg = new
+ {
+ guid = jvalue.Value("guid"),
+ command = jvalue.Value("command"),
+ data = jvalue.Value("data")
+ };
+
+ if (msg.command == "ON" || msg.command == "BCDIN")
+ {
+ PUB.RequestNewRead = true;
+ PUB.triggerTime[ws.TargetIdx] = DateTime.Now;
+ PUB.lastguid[ws.TargetIdx] = msg.guid;
+ PUB.lastcmd[ws.TargetIdx] = msg.command;
+ PUB.lastdata[ws.TargetIdx] = msg.data;
+ PUB.lastip[ws.TargetIdx] = e.IpPort;
+ if (string.IsNullOrEmpty(PUB.lastlogbarcode)) PUB.lastlogbarcode = string.Empty;
+ PUB.IsTrigger[ws.TargetIdx] = true;
+ PUB.TriggerStart = DateTime.Now;
+ PUB.log_[logIdx].Add("Clearing existing data due to barcode GUID reception, value=" + PUB.lastlogbarcode);
+ PUB.lastlogbarcode = string.Empty; //211206
+ PUB.parsetime = DateTime.Now;
+ }
+ else if (msg.command == "TRIG")
+ {
+ PUB.RequestNewRead = true;
+ PUB.triggerTime[ws.TargetIdx] = DateTime.Now;
+ PUB.lastguid[ws.TargetIdx] = msg.guid;
+ PUB.lastcmd[ws.TargetIdx] = msg.command;
+ PUB.lastdata[ws.TargetIdx] = msg.data;
+ PUB.lastip[ws.TargetIdx] = e.IpPort;
+ if (string.IsNullOrEmpty(PUB.lastlogbarcode)) PUB.lastlogbarcode = string.Empty;
+ PUB.IsTrigger[ws.TargetIdx] = true;
+ PUB.TriggerStart = DateTime.Now;
+ PUB.log_[logIdx].Add("Clearing existing data due to barcode GUID reception, value=" + PUB.lastlogbarcode);
+ PUB.lastlogbarcode = string.Empty; //211206
+ PUB.parsetime = DateTime.Now;
+ PUB.IsLive[ws.TargetIdx] = true;
+ PUB.IsProcess[ws.TargetIdx] = true;
+ }
+ else if (msg.command == "LIVEON")
+ {
+ PUB.IsLive[ws.TargetIdx] = true;
+ PUB.log_[logIdx].Add("live on received");
+ }
+ else if (msg.command == "LIVEOFF")
+ {
+ PUB.IsLive[ws.TargetIdx] = false;
+ PUB.log_[logIdx].Add("live off received");
+ }
+ else if (msg.command == "STREAMOFF")
+ {
+ PUB.setting.DisableStreamData = true;
+ PUB.setting.Save();
+ }
+ else if (msg.command == "STREAMON")
+ {
+ PUB.setting.DisableStreamData = false;
+ PUB.setting.Save();
+ }
+ else if (msg.command == "OFF")
+ {
+ PUB.IsTrigger[ws.TargetIdx] = false;
+ PUB.log_[logIdx].Add("OFF 수신으로 트리거상태를 해제 합니다");
+ PUB.IsLive[ws.TargetIdx] = false;
+ PUB.IsProcess[ws.TargetIdx] = false;
+ }
+ else if (msg.command == "STATUS")
+ {
+ //나의 상태값을 전송 해야한다
+ SendStatus(camTarget);
+
+ }
+ else
+ {
+ PUB.log_[logIdx].AddAT($"Unknown command({msg.command})");
+ }
+
+ }
+ }
+}
diff --git a/QRValidation/Project/StateMachine/_TMDisplay.cs b/QRValidation/Project/StateMachine/_TMDisplay.cs
new file mode 100644
index 0000000..4ab6cba
--- /dev/null
+++ b/QRValidation/Project/StateMachine/_TMDisplay.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using WatsonWebsocket;
+
+namespace Project
+{
+ public partial class fMain
+ {
+ DateTime tm1minute = DateTime.Now.AddDays(-1);
+ DateTime tm5minute = DateTime.Now;
+ Boolean displayOn = false;
+ DateTime tmPaint = DateTime.Now;
+
+ private void tmDisplay_Tick(object sender, EventArgs e)
+ {
+ if (displayOn == false) displayOn = true;
+ else
+ {
+ //Pub.log.AddAT("Display Timer Overlab");// Console.WriteLine("display overlab");
+ return;
+ }
+
+ //메인화면3초에 한번씩 업데이트한다
+ var tsPaint = DateTime.Now - tmPaint;
+ if (tsPaint.TotalSeconds > 3)
+ {
+ //panMiniDisplay.Invalidate();
+ tmPaint = DateTime.Now;
+ }
+
+
+
+ //트리거버튼
+ btTrigL.BackColor = PUB.IsTrigger[PUB.setting.CameraIndexL] ? Color.Lime : SystemColors.Control;
+ btTrigR.BackColor = PUB.IsTrigger[PUB.setting.CameraIndexR] ? Color.Lime : SystemColors.Control;
+
+ //라이브상태표시
+ if (PUB.setting.CameraIndexL >= 0)
+ btLiveL.BackColor = PUB.IsLive[PUB.setting.CameraIndexL] ? Color.Lime : SystemColors.Control;
+ else btLiveL.BackColor = SystemColors.Control;
+
+ if (PUB.setting.CameraIndexR >= 0 && PUB.setting.CameraIndexR != PUB.setting.CameraIndexL)
+ btLiveR.BackColor = PUB.IsLive[PUB.setting.CameraIndexR] ? Color.Lime : SystemColors.Control;
+ else btLiveR.BackColor = SystemColors.Control;
+
+ //프로세스버튼
+ btProcessL.BackColor = PUB.IsProcess[PUB.setting.CameraIndexL] ? Color.Lime : SystemColors.Control;
+ btProcessR.BackColor = PUB.IsProcess[PUB.setting.CameraIndexR] ? Color.Lime : SystemColors.Control;
+
+ //데이터정보
+ lbGuidL.Text = $"GUID : {PUB.lastguid[PUB.setting.CameraIndexL]}";
+ lbGuidR.Text = $"GUID : {PUB.lastguid[PUB.setting.CameraIndexR]}";
+ lbTimeL.Text = $"TIME : " + PUB.Time_WS_Recv[PUB.setting.CameraIndexL].ToString("yyyy-MM-dd HH:mm:ss.fff");
+ lbTimeR.Text = $"TIME : " + PUB.Time_WS_Recv[PUB.setting.CameraIndexR].ToString("yyyy-MM-dd HH:mm:ss.fff");
+ lbDataL.Text = $"DATA : " + PUB.lastdata[PUB.setting.CameraIndexL];
+ lbDataR.Text = $"DATA : " + PUB.lastdata[PUB.setting.CameraIndexR];
+
+ lbproctimel.Text = $"(Analysis {PUB.ProcessTime[PUB.setting.CameraIndexL]}ms)";
+ lbproctimer.Text = $"(Analysis {PUB.ProcessTime[PUB.setting.CameraIndexR]}ms)";
+
+ label1.Text = $"STAT: {PUB.lastsendStatus[PUB.setting.CameraIndexL].ToString("HH:mm:ss.fff")}";
+ label8.Text = $"STAT : {PUB.lastsendStatus[PUB.setting.CameraIndexR].ToString("HH:mm:ss.fff")}";
+
+ label2.Text = $"SEND: {PUB.lastsend[PUB.setting.CameraIndexL].ToString("HH:mm:ss.fff")}";
+ label9.Text = $"SEND : {PUB.lastsend[PUB.setting.CameraIndexR].ToString("HH:mm:ss.fff")}";
+
+
+ //sbMemMapL.ForeColor = swplc[PUB.setting.CameraIndexL].Init ? Color.Lime : Color.Red;
+ //sbMemMapR.ForeColor = swplc[PUB.setting.CameraIndexR].Init ? Color.Lime : Color.Red;
+
+ if (PUB.setting.CameraIndexL >= 0)
+ {
+ sbConnCamL.ForeColor = PUB._isCrevisOpen[PUB.setting.CameraIndexL] ? Color.Green : Color.Red;
+ sbLiveL.ForeColor = PUB.IsLive[PUB.setting.CameraIndexL] ? Color.Green : Color.Red;
+ sbDetectReelL.ForeColor = PUB.DetectReel[PUB.setting.CameraIndexL] ? Color.Lime : Color.Black;
+ sbDetectCVL.ForeColor = PUB.DetectConv[PUB.setting.CameraIndexL] ? Color.Lime : Color.Black;
+ sbTrigL.ForeColor = PUB.IsTrigger[PUB.setting.CameraIndexL] ? Color.Green : Color.Red;
+ }
+ else
+ {
+ var c = Color.DimGray;
+ sbConnCamL.ForeColor =c;
+ sbLiveL.ForeColor =c;
+ sbDetectReelL.ForeColor =c;
+ sbDetectCVL.ForeColor =c;
+ sbTrigL.ForeColor = c;
+ }
+ if (PUB.setting.CameraIndexR >= 0)
+ {
+ sbConnCamR.ForeColor = PUB._isCrevisOpen[PUB.setting.CameraIndexR] ? Color.Green : Color.Red;
+ sbLiveR.ForeColor = PUB.IsLive[PUB.setting.CameraIndexR] ? Color.Green : Color.Red;
+ sbDetectReelR.ForeColor = PUB.DetectReel[PUB.setting.CameraIndexR] ? Color.Lime : Color.Black;
+ sbDetectCVR.ForeColor = PUB.DetectConv[PUB.setting.CameraIndexR] ? Color.Lime : Color.Black;
+ sbTrigR.ForeColor = PUB.IsTrigger[PUB.setting.CameraIndexR] ? Color.Green : Color.Red;
+ }
+ else
+ {
+ var c = Color.DimGray;
+ sbConnCamR.ForeColor = c;
+ sbLiveR.ForeColor = c;
+ sbDetectReelR.ForeColor = c;
+ sbDetectCVR.ForeColor = c;
+ sbTrigR.ForeColor = c;
+ }
+
+ sbConnHostL.ForeColor = PUB.wsock_[0].ListClients().Count() > 0 ? Color.Green : Color.Red;
+ sbConnHostR.ForeColor = PUB.wsock_[1].ListClients().Count() > 0 ? Color.Green : Color.Red;
+ sbStream.ForeColor = PUB.setting.DisableStreamData ? Color.Red : Color.Green;
+ sbListenL.ForeColor = PUB.wsock_[0].IsListening ? Color.Green : Color.Red;
+ sbListenR.ForeColor = PUB.wsock_[1].IsListening ? Color.Green : Color.Red;
+ sbLicense.ForeColor = PUB.VisionLicense ? Color.Green : Color.Red;
+
+ #region retgion"1분 time 루틴"
+ var ts = DateTime.Now - tm1minute;
+ if (ts.TotalMinutes >= 1)
+ {
+ //리셋카운트
+
+ tm1minute = DateTime.Now;
+ }
+ #endregion
+
+ #region retgion"5분 time 루틴"
+ ts = DateTime.Now - tm5minute;
+ if (ts.TotalMinutes >= 5)
+ {
+ //남은디스크확인
+
+ tm5minute = DateTime.Now;
+ }
+ #endregion
+
+ //wat.Stop();
+ //Console.WriteLine("disp time : " + wat.ElapsedMilliseconds.ToString() + "ms");
+ displayOn = false;
+ }
+
+
+
+
+ }
+}
diff --git a/QRValidation/Project/Util.cs b/QRValidation/Project/Util.cs
new file mode 100644
index 0000000..54bac4a
--- /dev/null
+++ b/QRValidation/Project/Util.cs
@@ -0,0 +1,301 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Text;
+using System.Windows.Forms;
+using System.Data;
+using AR;
+namespace Project
+{
+
+ public static class Util
+ {
+
+
+ public static void SaveBugReport(string content, string subdirName = "BugReport")
+ {
+ try
+ {
+ var path = CurrentPath + subdirName;
+ if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path);
+ var file = path + "\\" + DateTime.Now.ToString("yyyyMMdd_HHmmss_fff") + ".txt";
+ System.IO.File.WriteAllText(file, content, System.Text.Encoding.UTF8);
+ }
+ catch
+ {
+ //nothing
+ }
+ }
+
+
+ ///
+ /// Returns the currently executing folder.
+ ///
+ public static string CurrentPath
+ {
+ get
+ {
+ return AppDomain.CurrentDomain.BaseDirectory;
+ }
+ }
+
+
+ #region "convert"
+ public static string RectToStr(Rectangle rect)
+ {
+ return string.Format("{0};{1};{2};{3}", rect.X, rect.Y, rect.Width, rect.Height);
+ }
+ public static string RectToStr(RectangleF rect)
+ {
+ return string.Format("{0};{1};{2};{3}", rect.X, rect.Y, rect.Width, rect.Height);
+ }
+ public static string PointToStr(Point pt)
+ {
+ return string.Format("{0};{1}", pt.X, pt.Y);
+ }
+ public static string PointToStr(PointF pt)
+ {
+ return string.Format("{0};{1}", pt.X, pt.Y);
+ }
+ public static Rectangle StrToRect(string str)
+ {
+ if (str.isEmpty() || str.Split(';').Length != 4) str = "0;0;0;0";
+ var roibuf1 = str.Split(';');
+ return new System.Drawing.Rectangle(
+ int.Parse(roibuf1[0]),
+ int.Parse(roibuf1[1]),
+ int.Parse(roibuf1[2]),
+ int.Parse(roibuf1[3]));
+ }
+ public static RectangleF StrToRectF(string str)
+ {
+ if (str.isEmpty() || str.Split(';').Length != 4) str = "0;0;0;0";
+ var roibuf1 = str.Split(';');
+ return new System.Drawing.RectangleF(
+ float.Parse(roibuf1[0]),
+ float.Parse(roibuf1[1]),
+ float.Parse(roibuf1[2]),
+ float.Parse(roibuf1[3]));
+ }
+ public static Point StrToPoint(string str)
+ {
+ if (str.isEmpty() || str.Split(';').Length != 2) str = "0;0";
+ var roibuf1 = str.Split(';');
+ return new System.Drawing.Point(
+ int.Parse(roibuf1[0]),
+ int.Parse(roibuf1[1]));
+ }
+ public static PointF StrToPointF(string str)
+ {
+ if (str.isEmpty() || str.Split(';').Length != 2) str = "0;0";
+ var roibuf1 = str.Split(';');
+ return new System.Drawing.PointF(
+ float.Parse(roibuf1[0]),
+ float.Parse(roibuf1[1]));
+ }
+ #endregion
+
+ #region "NIC"
+
+ ///
+ /// Checks if the specified NIC card exists in the current list.
+ ///
+ ///
+ public static Boolean ExistNIC(string NICName)
+ {
+ if (string.IsNullOrEmpty(NICName)) return false;
+ foreach (string NetName in NICCardList())
+ {
+ if (NetName.ToLower() == NICName.ToLower())
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ ///
+ /// Sets the Ethernet Card to disabled. (Administrator privileges required)
+ ///
+ ///
+ public static Boolean NICDisable(string NICName)
+ {
+ //해당 nic 가 현재 목록에 존재하는지 확인한다.
+
+ string cmd = "interface set interface " + NICName + " disable";
+ Process prc = new Process();
+ ProcessStartInfo si = new ProcessStartInfo("netsh", cmd);
+ si.WindowStyle = ProcessWindowStyle.Hidden;
+ prc.StartInfo = si;
+ prc.Start();
+
+ ////목록에서 사라질때까지 기다린다.
+ DateTime SD = DateTime.Now;
+ Boolean timeout = false;
+ while ((true))
+ {
+
+ bool FindNetwork = false;
+ foreach (string NetName in NICCardList())
+ {
+ if (NetName == NICName.ToLower())
+ {
+ FindNetwork = true;
+ break; // TODO: might not be correct. Was : Exit For
+ }
+ }
+
+ if (!FindNetwork)
+ break; // TODO: might not be correct. Was : Exit While
+
+ System.Threading.Thread.Sleep(1000);
+ TimeSpan ts = DateTime.Now - SD;
+ if (ts.TotalSeconds > 10)
+ {
+ timeout = true;
+ break; // TODO: might not be correct. Was : Exit While
+ }
+ }
+ return !timeout;
+ }
+
+ public static List NICCardList()
+ {
+ List Retval = new List();
+ foreach (System.Net.NetworkInformation.NetworkInterface Net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
+ {
+ if (Net.NetworkInterfaceType == System.Net.NetworkInformation.NetworkInterfaceType.Ethernet)
+ {
+ Retval.Add(Net.Name.ToUpper());
+ }
+ }
+ return Retval;
+ }
+
+ ///
+ /// Sets the Ethernet card to enabled.
+ ///
+ ///
+ public static Boolean NICEnable(string NICName)
+ {
+ string cmd = "interface set interface " + NICName + " enable";
+ System.Diagnostics.Process prc = new System.Diagnostics.Process();
+ System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("netsh", cmd);
+ si.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
+ prc.StartInfo = si;
+ prc.Start();
+
+
+ ////목록에생길떄까지 대기
+ DateTime SD = DateTime.Now;
+ while ((true))
+ {
+
+ bool FindNetwork = false;
+ foreach (string NetName in NICCardList())
+ {
+ if (NetName.ToLower() == NICName.ToLower())
+ {
+ FindNetwork = true;
+ break; // TODO: might not be correct. Was : Exit For
+ }
+ }
+
+ if (FindNetwork)
+ break; // TODO: might not be correct. Was : Exit While
+
+ System.Threading.Thread.Sleep(1000);
+ TimeSpan ts = DateTime.Now - SD;
+ if (ts.TotalSeconds > 10)
+ {
+ return false;
+ }
+ }
+
+ ////결이 완료될떄까지 기다린다.
+ SD = DateTime.Now;
+ while ((true))
+ {
+
+ bool FindNetwork = false;
+ foreach (System.Net.NetworkInformation.NetworkInterface Net in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
+ {
+ if (Net.NetworkInterfaceType != System.Net.NetworkInformation.NetworkInterfaceType.GigabitEthernet &&
+ Net.NetworkInterfaceType != System.Net.NetworkInformation.NetworkInterfaceType.Ethernet) continue;
+ if (Net.Name.ToLower() == NICName.ToLower())
+ {
+ //string data = Net.GetIPProperties().GatewayAddresses[0].ToString();
+
+ if (Net.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up)
+ {
+
+ FindNetwork = true;
+ break; // TODO: might not be correct. Was : Exit For
+ }
+ }
+ }
+ if (FindNetwork)
+ return true;
+
+ System.Threading.Thread.Sleep(1000);
+ TimeSpan ts = DateTime.Now - SD;
+ if (ts.TotalSeconds > 10)
+ {
+ return false;
+ }
+ }
+
+ }
+
+ #endregion
+
+ public static void RunExplorer(string arg)
+ {
+ System.Diagnostics.ProcessStartInfo si = new ProcessStartInfo("explorer");
+ si.Arguments = arg;
+ System.Diagnostics.Process.Start(si);
+ }
+
+
+
+ #region "web function"
+ ///
+ /// Receives a string from URL.
+ ///
+ ///
+ ///
+ ///
+ public static string GetStrfromurl(string url, out Boolean isError)
+ {
+ isError = false;
+ string result = "";
+ try
+ {
+ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
+ request.Timeout = 60000;
+ request.ReadWriteTimeout = 60000;
+
+ request.MaximumAutomaticRedirections = 4;
+ request.MaximumResponseHeadersLength = 4;
+ request.Credentials = CredentialCache.DefaultCredentials;
+ var response = request.GetResponse() as HttpWebResponse;
+ var txtReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
+ result = txtReader.ReadToEnd();
+ }
+ catch (Exception ex)
+ {
+ isError = true;
+ result = ex.Message.ToString();
+ }
+ return result;
+ }
+
+ #endregion
+
+ }
+}
diff --git a/QRValidation/Project/Util_Vision.cs b/QRValidation/Project/Util_Vision.cs
new file mode 100644
index 0000000..24d6ed1
--- /dev/null
+++ b/QRValidation/Project/Util_Vision.cs
@@ -0,0 +1,676 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Runtime.InteropServices;
+using AR;
+#if EMGU
+using Emgu.CV;
+using Emgu.CV.Structure;
+#endif
+#if V22
+using Euresys.Open_eVision_22_12;
+#else
+using Euresys.Open_eVision_2_11;
+#endif
+
+namespace Project
+{
+ public static class Util_Vision
+ {
+ public struct SCodeData
+ {
+ public Point[] corner;
+ public string data;
+ public string model;
+ public string version;
+ public string level;
+ public string sid;
+ public void SetSID(string sid_) { sid = sid_; }
+ public Rectangle rect
+ {
+ get
+ {
+ if (corner == null || corner.Length != 4) return Rectangle.Empty;
+ var minx = corner.Min(t => t.X);
+ var maxx = corner.Max(t => t.X);
+ var miny = corner.Min(t => t.Y);
+ var maxy = corner.Max(t => t.Y);
+ return new Rectangle((int)minx, (int)miny, (int)(maxx - minx), (int)(maxy - miny));
+ }
+ }
+ public float intersectPerc(Rectangle r)
+ {
+ //입력한 영역이 얼마나 겹쳐있는지
+ if (rect.IsEmpty) return 0f;
+
+ //현재 영역이랑 겹치는 영역이 없다면 0f
+ if (rect.IntersectsWith(r) == false) return 0f;
+
+ var cx = r.Left + r.Width / 2f;
+ var cy = r.Top + r.Height / 2f;
+ if (rect.Contains((int)cx, (int)cy)) return 1f;
+ if (rect.Contains(r)) return 1f;
+
+ return 0f;
+ }
+ }
+
+ public static void DisplayQRData(List DataArr, Rectangle roi, arCtl.ImageBoxEvision iv)
+ {
+ iv.Shapes.Clear();
+ foreach (var item in DataArr)
+ {
+ var p = new PointF[4];
+ p[0] = new PointF(item.corner[0].X + roi.Left, item.corner[0].Y + roi.Top);
+ p[1] = new PointF(item.corner[1].X + roi.Left, item.corner[1].Y + roi.Top);
+ p[2] = new PointF(item.corner[2].X + roi.Left, item.corner[2].Y + roi.Top);
+ p[3] = new PointF(item.corner[3].X + roi.Left, item.corner[3].Y + roi.Top);
+
+ iv.Shapes.AddLine(p[0], p[1], Color.Gold, 5);
+ iv.Shapes.AddLine(p[1], p[2], Color.Gold, 5);
+ iv.Shapes.AddLine(p[2], p[3], Color.Gold, 5);
+ iv.Shapes.AddLine(p[3], p[0], Color.Gold, 5);
+
+ if (item.data.isEmpty() == false)
+ {
+ iv.Shapes.AddText(item.corner[1], item.data, Color.Black, 200f);
+ }
+ }
+ }
+
+ private static List GetGainOffsetList(string gainstr)
+ {
+ var retval = new List();
+ var list = gainstr.Split(';');
+ foreach (var item in list)
+ {
+ var ptitem = item.Split(',');
+ if (ptitem.Length == 2)
+ {
+ retval.Add(new System.Drawing.PointF(float.Parse(ptitem[0]), float.Parse(ptitem[1])));
+ }
+ }
+ return retval;
+ }
+
+ // static SoftekBarcodeNet.BarcodeReader barcode = null;// new SoftekBarcodeNet.BarcodeReader();
+
+ static List ReadQR_EVision(EImageBW8 TargetImage, EQRCodeReader EQRCode1, RectangleF rect)
+ {
+ var retval = new System.Collections.Generic.List();
+ EQRCode1.SearchField = TargetImage;
+ var EQRCode2Result = EQRCode1.Read();
+ for (int j = 0; j < EQRCode2Result.Length; j++)
+ {
+ var QrData = EQRCode2Result[j];
+ if (QrData.IsDecodingReliable)
+ {
+ var geo = QrData.Geometry;
+ var pos = geo.Position;
+ var cornous = pos.Corners;
+
+ var resultData = new Util_Vision.SCodeData();
+
+ //테두리좌표 읽기
+ var resultcorns = new List();
+ for (int k = 0; k < cornous.Length; k++)
+ {
+ var con = cornous[k];
+ resultcorns.Add(new Point((int)(con.X + rect.X), (int)(con.Y + rect.Y)));
+ con.Dispose();
+ }
+ resultData.corner = resultcorns.ToArray();
+
+ //데이터읽기
+ resultData.model = QrData.Model.ToString();
+ resultData.version = QrData.Version.ToString();
+ resultData.level = QrData.Level.ToString();
+ resultData.sid = string.Empty;
+
+ //바코드데이터확인
+ var decodestr = QrData.DecodedStream;
+ resultData.data = string.Empty;
+ foreach (var item in decodestr.DecodedStreamParts)
+ {
+ resultData.data += System.Text.Encoding.Default.GetString(item.DecodedData);
+ item.Dispose();
+ }
+
+ //var c = new Class.CAmkorSTDBarcode(resultData.data);
+ //if (c.isValid) resultData.sid = c.SID;
+ //else resultData.sid = string.Empty;
+ //if (c.isValid) break;
+ //else resultData.data = string.Empty;
+
+ //결과데이터 추가
+ if (resultData.data.isEmpty() == false)
+ {
+ if (retval.Where(t => t.data == resultData.data).Any() == false)
+ {
+ retval.Add(resultData);
+ }
+ }
+
+ decodestr.Dispose();
+ decodestr = null;
+
+ cornous = null;
+ pos.Dispose();
+ geo.Dispose();
+ }
+ QrData.Dispose();
+ }
+ return retval;
+ }
+ //static List ReadQR_Softtek(EImageBW8 Image, RectangleF roi, Boolean useMedianfilter = false, int timeout = 50)
+ //{
+
+ // if (barcode == null)
+ // {
+ // barcode = new SoftekBarcodeNet.BarcodeReader();
+ // barcode.LicenseKey = "PC6q6K38G6bG9EWMlQxDr4O8aQzJWPSB";
+ // Pub.log.Add("softtek barcode init");
+
+ // // Turn on the barcode types you want to read.
+ // // Turn off the barcode types you don't want to read (this will increase the speed of your application)
+ // barcode.ReadCode128 = false;
+ // barcode.ReadCode39 = false;
+ // barcode.ReadCode25 = false;
+ // barcode.ReadEAN13 = false;
+ // barcode.ReadEAN8 = false;
+ // barcode.ReadUPCA = false;
+ // barcode.ReadUPCE = false;
+ // barcode.ReadCodabar = false;
+ // barcode.ReadPDF417 = false;
+ // barcode.ReadDataMatrix = true;
+ // barcode.ReadDatabar = false;
+ // barcode.ReadMicroPDF417 = false;
+ // barcode.ReadQRCode = true;
+
+ // // If you want to read more than one barcode then set Multiple Read to 1
+ // // Setting MutlipleRead to False will make the recognition faster
+ // barcode.MultipleRead = false;
+ // barcode.MaxBarcodesPerPage = 1;
+ // barcode.UseFastScan = true;
+
+ // // You may need to set a small quiet zone if your barcodes are close to text and pictures in the image.
+ // // A value of zero uses the default.
+ // barcode.QuietZoneSize = 0; //사용하면 느려짐
+
+ // // LineJump controls the frequency at which scan lines in an image are sampled.
+ // // The default is 9 - decrease this for difficult barcodes.
+ // barcode.LineJump = 3; //속도가 빨라지나 결과 검출 영향 많이 줌
+ // // The value is a mask where 1 = Left to Right, 2 = Top to Bottom, 4 = Right To Left, 8 = Bottom to Top
+ // barcode.ScanDirection = 15; //방향을 조정해주면 속도 가 빨라짐
+
+ // barcode.ColorProcessingLevel = 2;
+ // barcode.MinLength = 4;
+ // barcode.MaxLength = 9999;
+ // }
+
+ // barcode.MedianFilter = useMedianfilter;//Pub.setting.CameraMeanFilter;
+ // barcode.TimeOut = timeout;// 50;// Pub.setting.CameraTimeOut;
+
+ // int nBarCode;
+ // var retval = new List();
+
+ // var Scan0 = Image.GetImagePtr();
+ // using (var bmp = new Bitmap(Image.Width, Image.Height, Image.RowPitch, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, Scan0))
+ // {
+ // //비트맵 개체로 데이터를 읽어본다
+ // nBarCode = barcode.ScanBarCodeFromBitmap(bmp);
+
+ // if (nBarCode <= -6)
+ // {
+ // //Result.Text += "License key error: either an evaluation key has expired or the license key is not valid for processing pdf documents\r\n";
+ // }
+ // else if (nBarCode < 0)
+ // {
+ // //Result.Text += "ScanBarCode returned error number ";
+ // //Result.Text += nBarCode.ToString();
+ // //Result.Text += "\r\n";
+ // //Result.Text += "Last Softek Error Number = ";
+ // //Result.Text += barcode.GetLastError().ToString();
+ // //Result.Text += "\r\n";
+ // //Result.Text += "Last Windows Error Number = ";
+ // //Result.Text += barcode.GetLastWinError().ToString();
+ // //Result.Text += "\r\n";
+ // }
+ // else if (nBarCode == 0)
+ // {
+ // //Result.Text += "No barcode found on this image\r\n";
+ // }
+ // else
+ // {
+ // //Result.Text += "\r\n";
+ // for (int i = 1; i <= nBarCode; i++)
+ // {
+ // var rect = barcode.GetBarStringRect(i);
+
+ // var resultData = new SCodeData()
+ // {
+ // corner = new Point[] {
+ // new Point((int)(rect.Left+roi.X),(int)(rect.Top + roi.Y)),
+ // new Point((int)(rect.Right+roi.X),(int)(rect.Top+roi.Y)),
+ // new Point((int)(rect.Left+roi.X),(int)(rect.Bottom+roi.Y)),
+ // new Point((int)(rect.Right+roi.X),(int)(rect.Bottom+roi.Y))
+ // },
+ // data = barcode.GetBarString(i),
+ // level = string.Empty,
+ // model = string.Empty,
+ // sid = string.Empty,
+ // version = string.Empty,
+ // };
+
+ // //결과데이터 추가
+ // if (resultData.data.isEmpty() == false)
+ // {
+ // if (retval.Where(t => t.data == resultData.data).Any() == false)
+ // {
+ // retval.Add(resultData);
+ // }
+ // }
+ // }
+ // }
+ // return retval;
+ // }
+ //}
+
+ public static Tuple, List, List, double> DetectQR(
+ EImageBW8 EBW8Image4,
+ arCtl.ImageBoxEvision iv1, int idx,
+ out string Message,
+ string erodevaluestr = "3,1",
+ string gainoffsetlist = "2,1",
+ uint blob_area_min = 20000,
+ uint blob_area_max = 70000,
+ float blob_sigmaxy = 500f,
+ float blob_sigmayy = 500f,
+ float blob_sigmaxx = 5000f,
+ float blob_minw = 50,
+ float blob_maxw = 350,
+ float blob_minh = 50,
+ float blob_maxh = 350,
+ //bool addSofttekRead = false,
+ string maskfile = "",
+ string finddata = ""//,
+ // Image DispImage = null
+ )
+ {
+ Message = string.Empty;
+ var pts = new System.Collections.Generic.List();
+ System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
+ wat.Restart();
+
+ List ros = new List();
+ List whiterects = new List();
+
+ uint objectCountT = 0;
+ //Blob 으로 바코드영역을 찾는다
+ using (ECodedImage2 codedImage4 = new ECodedImage2()) // ECodedImage2 instance
+ {
+ using (EImageEncoder codedImage4Encoder = new EImageEncoder()) // EIma
+ {
+ using (EObjectSelection codedImage4ObjectSelection = new EObjectSelection())
+ {
+ codedImage4ObjectSelection.FeretAngle = 0.00f;
+
+ //기본이미지에서 흰색영역을 찾아서 해당 영역만 처리한다.
+ using (var psegment = codedImage4Encoder.GrayscaleSingleThresholdSegmenter) //.BlackLayerEncoded = true;
+ {
+ psegment.BlackLayerEncoded = false;
+ psegment.WhiteLayerEncoded = true;
+ psegment.Mode = EGrayscaleSingleThreshold.MaxEntropy;
+ }
+
+ //마스크적용 - 210209
+ if (maskfile.isEmpty() == false && System.IO.File.Exists(maskfile))
+ {
+ using (var maskmig = new EImageBW8())
+ {
+ maskmig.Load(maskfile);//이미지불러오지
+ EasyImage.Oper(EArithmeticLogicOperation.BitwiseAnd, EBW8Image4, maskmig, EBW8Image4);
+ }
+ }
+
+
+
+ //흰색데이터강조
+ using (var deilimage = new EImageBW8(EBW8Image4.Width, EBW8Image4.Height))
+ {
+ EasyImage.DilateBox(EBW8Image4, deilimage, 30);
+ codedImage4Encoder.Encode(deilimage, codedImage4);
+ codedImage4ObjectSelection.Clear();
+ codedImage4ObjectSelection.AddObjects(codedImage4);
+ codedImage4ObjectSelection.RemoveUsingUnsignedIntegerFeature(EFeature.Area, 50000, ESingleThresholdMode.LessEqual);
+ for (uint i = 0; i < codedImage4ObjectSelection.ElementCount; i++)
+ {
+ var elm = codedImage4ObjectSelection.GetElement(i);
+ var x = elm.BoundingBoxCenterX - elm.BoundingBoxWidth / 2f;
+ var y = elm.BoundingBoxCenterY - elm.BoundingBoxHeight / 2f;
+ var w = elm.BoundingBoxWidth;
+ var h = elm.BoundingBoxHeight;
+ whiterects.Add(new Rectangle((int)x, (int)y, (int)w, (int)h));
+ elm.Dispose();
+ }
+ }
+
+ //침식해서 바코드영역이 뭉치도록 한다. (바코드는 검은색 영역이 된다)
+ List erodevalues = new List();
+ var erodebuffer = erodevaluestr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
+ foreach (var erbuf in erodebuffer) erodevalues.Add(uint.Parse(erbuf));
+ using (var psegment = codedImage4Encoder.GrayscaleSingleThresholdSegmenter) //.BlackLayerEncoded = true;
+ {
+ psegment.BlackLayerEncoded = true;
+ psegment.WhiteLayerEncoded = false;
+ }
+
+ //QR코드예상위치를 저장할 영역변수
+
+ //찾은 흰색영역에서 작업을 진행한다
+ foreach (var roi in whiterects)
+ {
+ //각영역을 erod 처리하여 추가 영역을 찾는다
+ using (EROIBW8 roimage = new EROIBW8())
+ {
+ roimage.Attach(EBW8Image4);
+ roimage.SetPlacement(roi.X, roi.Y, roi.Width, roi.Height);
+
+ for (int maxtype = 0; maxtype < 2; maxtype++)
+ {
+ //침식데이터도 여러개를 사용한다.
+ foreach (var erodevalue in erodevalues)
+ {
+ //Erode image
+ using (var ErodeImageBW8 = new EImageBW8(roimage.Width, roimage.Height))
+ {
+ EasyImage.ErodeBox(roimage, ErodeImageBW8, erodevalue);
+
+
+ using (var psegment = codedImage4Encoder.GrayscaleSingleThresholdSegmenter)
+ {
+ if (maxtype == 0)
+ psegment.Mode = EGrayscaleSingleThreshold.MinResidue;
+ else if (maxtype == 1)
+ psegment.Mode = EGrayscaleSingleThreshold.MaxEntropy;
+ else if (maxtype == 2)
+ psegment.Mode = EGrayscaleSingleThreshold.IsoData;
+ }
+
+ codedImage4Encoder.Encode(ErodeImageBW8, codedImage4);
+ codedImage4ObjectSelection.Clear();
+ codedImage4ObjectSelection.AddObjects(codedImage4);
+ codedImage4ObjectSelection.AttachedImage = ErodeImageBW8;
+
+ //너무큰 개체를 제거한다.
+ codedImage4ObjectSelection.RemoveUsingUnsignedIntegerFeature(EFeature.Area, blob_area_min, ESingleThresholdMode.LessEqual);
+ codedImage4ObjectSelection.RemoveUsingUnsignedIntegerFeature(EFeature.Area, blob_area_max, ESingleThresholdMode.GreaterEqual);
+
+ codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.BoundingBoxWidth, blob_minw, ESingleThresholdMode.LessEqual);
+ codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.BoundingBoxWidth, blob_maxw, ESingleThresholdMode.GreaterEqual);
+
+ codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.BoundingBoxHeight, blob_minh, ESingleThresholdMode.LessEqual);
+ codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.BoundingBoxHeight, blob_maxh, ESingleThresholdMode.GreaterEqual);
+
+ //개체제거
+ codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.SigmaXY, blob_sigmaxy, ESingleThresholdMode.GreaterEqual);
+ //codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.SigmaYY, blob_sigmayy, ESingleThresholdMode.LessEqual);
+ codedImage4ObjectSelection.RemoveUsingFloatFeature(EFeature.SigmaXX, blob_sigmaxx, ESingleThresholdMode.GreaterEqual);
+
+ //찾은데이터수량
+ var objectCount = codedImage4ObjectSelection.ElementCount;
+
+ objectCountT += objectCount;
+
+ //데이터표시
+ //찾은영역을 표시한다.
+ for (uint i = 0; i < objectCount; i++)
+ {
+ //각 요소를 가져와서 처리한다.
+ using (var elm = codedImage4ObjectSelection.GetElement(i))
+ {
+ var x = elm.BoundingBoxCenterX - elm.BoundingBoxWidth / 2f;
+ var y = elm.BoundingBoxCenterY - elm.BoundingBoxHeight / 2f;
+ var w = elm.BoundingBoxWidth;
+ var h = elm.BoundingBoxHeight;
+
+ //절대좌표로 변경(
+ x += roimage.TotalOrgX;
+ y += roimage.TotalOrgY;
+
+ var rect = new RectangleF(x, y, w, h);
+
+ //이전 ROS에 겹치는 영역이 있다면 해당 ROS값을 확장해준다
+ bool find = false;
+ for (int j = 0; j < ros.Count; j++)
+ {
+ if (ros[j].IntersectsWith(rect))
+ {
+ //겹쳐있으니 영역을 확장해준다.
+ var x1 = Math.Min(ros[j].X, rect.X);
+ var y1 = Math.Min(ros[j].Y, rect.Y);
+ var w1 = Math.Max(ros[j].Right, rect.Right) - x1;
+ var h1 = Math.Max(ros[j].Bottom, rect.Bottom) - y1;
+ ros[j] = new RectangleF(x1, y1, w1, h1);
+ find = true;
+ break;
+ }
+ }
+ if (find == false) ros.Add(rect); //겹치는 영역이 없으니 추가한다.
+
+
+ }
+ }
+
+ }
+
+ }
+ }
+
+ }
+ }
+
+ //whitelist 에서 QR을 검색한다.(밝기조정없음)
+ var find2 = false;
+
+ //ROS에서 QR을 검색한다(밝기조정함)
+ if (find2 == false)
+ {
+ foreach (var roi in ros)
+ {
+ //대상자료를 찾았다면 멈춘다
+ if (ReadQRData(EBW8Image4, roi.toRect(), gainoffsetlist, ref pts, finddata))
+ {
+ find2 = true;
+ break;
+ }
+
+ }
+ }
+
+ if (find2 == false)
+ {
+ foreach (var roi in whiterects)
+ {
+ //대상자료를 찾았다면 멈춘다
+ if (ReadQRData(EBW8Image4, roi, "1,0", ref pts, finddata))
+ {
+ find2 = true; //대상을 찾았다면 더 진행하지 않는다
+ break;
+ }
+ }
+ }
+
+
+ }
+
+ }
+ }
+
+ wat.Stop();
+
+ //검사시간 저장
+ var rosrect = ros.Select(t => new Rectangle((int)t.X, (int)t.Y, (int)t.Width, (int)t.Height)).ToList();
+ return new Tuple, List, List, double>(pts, whiterects, rosrect, wat.ElapsedMilliseconds);
+ }
+
+ ///
+ /// 지정한 영역에서 QR코드를 검색합니다.
+ ///
+ ///
+ /// 검색영역
+ /// 밝기변경값
+ /// 결과저장소
+ /// 특정검색데이터
+ ///
+ static bool ReadQRData(EImageBW8 EBW8Image4, Rectangle rect, string gainoffsetlist, ref List pts, string finddata = "")
+ {
+ var retval = false;
+ var GainOffsetList = GetGainOffsetList(gainoffsetlist);
+
+ //해당영역을 ROI로 잡고 이미지를 검색한다
+ var RoiImage2 = new EROIBW8();
+ RoiImage2.Attach(EBW8Image4);
+
+ //ROI로 사용할 영역의 오류를 체크해야한다
+ var rLeft = (int)rect.Left;
+ var rTop = (int)rect.Top;
+ if (rLeft < 0) rLeft = 0;
+ if (rTop < 0) rTop = 0;
+
+ var rWid = (int)rect.Width;
+ var rHei = (int)rect.Height;
+
+ //roi 오류수정 210621
+ if (rLeft + rWid > EBW8Image4.Width) rWid = EBW8Image4.Width - rLeft - 1;
+ if (rTop + rHei > EBW8Image4.Height) rHei = EBW8Image4.Height - rTop - 1;
+
+ var rourect = new Rectangle(rLeft, rTop, rWid, rHei);
+ RoiImage2.SetPlacement(rourect.Left, rourect.Top, rourect.Width, rourect.Height); //ROI적용
+
+ var TargetImage = new EImageBW8(RoiImage2.Width, RoiImage2.Height);
+
+ //밝기를 변경해서 처리해야한다
+ //int processCount = 9;
+
+ foreach (var param in GainOffsetList) //원본, gain +-, offset +- 5가지 색상처리함
+ {
+ //크기를 동일하게 맞춰야 한다
+ EasyImage.ScaleRotate(RoiImage2,
+ RoiImage2.Width / 2f, RoiImage2.Height / 2f,
+ TargetImage.Width / 2f, TargetImage.Height / 2f,
+ 1.0f, 1.0f, 0f, TargetImage);
+ //EasyImage.Copy(RoiImage, TargetImage);
+
+ //밝기를 변경해서 사용할 것이므로 해당 변경된 밝기를 저장할 이미지를 생성한다. 210128
+ //var roiimg = new EImageBW8(TargetImage);
+ //var param = Util_Vision.GetGainOffset(bright);
+ if (param.X != 1.0f || param.Y != 0.0f) EasyImage.GainOffset(TargetImage, TargetImage, param.X, param.Y);
+ //else RoiImage.CopyTo(TargetImage); ;// TargetImage.CopyTo(roiimg); //변경하지 않고 그대로 사용한다
+
+ using (EQRCodeReader EQRCode1 = new EQRCodeReader())
+ {
+ //EQRCode1.DetectionMethod = 15; //모든방법으로 데이터를 찾는다
+ EQRCode1.TimeOut = 1000 * 1000; //timeout (1초)
+
+ if (TargetImage.Width < 500 || TargetImage.Height < 500)
+ EQRCode1.ForegroundDetectionThreshold = 3;
+
+ var datas = ReadQR_EVision(TargetImage, EQRCode1, rect);
+ if (datas.Any())
+ {
+ //중복데이터는 제거한다 211211
+ foreach (var dataitem in datas)
+ {
+ if (pts.Where(t => t.data == dataitem.data).Any() == false)
+ pts.Add(dataitem);
+ else if (pts.Where(t => t.intersectPerc(dataitem.rect) > 0f).Any() == false)
+ pts.Add(dataitem);
+
+ //해당 데이터가 찾는 데이터라면 진행을 멈춘다
+ if (finddata.isEmpty() == false && dataitem.data.Equals(finddata))
+ {
+ //검색대상 자료이므로 진행을 멈춘다
+ retval = true;
+ break;
+ }
+
+ //해당데이터가 amkor standard 라면 문제없이 진행한다.
+ var splitbuf = dataitem.data.Split(';');
+ if (splitbuf.Length > 6 && splitbuf[0].StartsWith("10"))
+ {
+ //amkor std 라벨이므로 진행하지 않습니다.
+ retval = true;
+ break;
+ }
+ }
+ //pts.AddRange(datas);
+ }
+
+ //sDisplayQRInfo(datas, iv1);
+ }
+ if (retval == true) break; //대상자료르 찾았다면 진행을 멈춘다
+ }
+ RoiImage2.Dispose();
+ TargetImage.Dispose();
+ TargetImage = null;
+ return retval;
+ }
+
+#if EMGU
+ static void DisplayQRInfo(List datas, arImageViewer.EVision.UI.CustomControl1 iv1)
+#else
+ static void DisplayQRInfo(List datas, arCtl.ImageBoxEvision iv1)
+#endif
+ {
+ if (iv1 == null) return;
+ var idx = 0;
+ foreach (var resultData in datas)
+ {
+ //var c = new Class.CAmkorSTDBarcode(resultData.data);
+ //if (c.isValid) resultData.SetSID(c.SID); // = c.SID;
+ //else resultData.SetSID(string.Empty);
+
+ //결과데이터 추가
+ if (resultData.data.isEmpty() == false)
+ {
+
+ //자료가잇다면 표시한다.
+ var dispvalue = $"#{idx}";// resultData.data;
+ //if (c.isValid == false) dispvalue += "\n" + c.Message;
+ //else if (c.DateError) dispvalue += "\n** Date Error **";
+
+ iv1.Shapes.AddText(resultData.corner[1].X + 1, resultData.corner[1].Y + 1, dispvalue, Color.Black, 50);
+ iv1.Shapes.AddText(resultData.corner[1].X, resultData.corner[1].Y, dispvalue, Color.Yellow, 50);
+
+
+ //if (DispImage != null)
+ // CvInvoke.PutText(DispImage,
+ // dispvalue,
+ // new Point(resultData.corner[1].X, resultData.corner[1].Y), FontFace.HersheyDuplex, 2,
+ // new Bgr(Color.Tomato).MCvScalar, 2);
+
+ //찾은테두리를 화면에 표시한다.
+ foreach (var pt in resultData.corner)
+ {
+ iv1.Shapes.AddPoint(pt, Color.Lime, 20f);
+ //if (DispImage != null)
+ //{
+ // CvInvoke.Line(DispImage,
+ // new Point(pt.X - 10, pt.Y - 10),
+ // new Point(pt.X + 10, pt.Y + 10),
+ // new Bgr(Color.Lime).MCvScalar, 2);
+
+ // CvInvoke.Line(DispImage,
+ // new Point(pt.X + 10, pt.Y - 10),
+ // new Point(pt.X - 10, pt.Y + 10),
+ // new Bgr(Color.Lime).MCvScalar, 2);
+ //}
+ }
+ }
+ idx++;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Project/VisionCrevis_v2.csproj b/QRValidation/Project/VisionCrevis_v2.csproj
new file mode 100644
index 0000000..2c19b35
--- /dev/null
+++ b/QRValidation/Project/VisionCrevis_v2.csproj
@@ -0,0 +1,304 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {65F3E762-800C-499E-862F-A535642EC59F}
+ WinExe
+ Project
+ CrevisQRCode
+ v4.7
+ 512
+ 게시\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+ False
+ False
+ False
+ OnBuildSuccess
+ False
+ False
+ False
+ obj\$(Configuration)\
+
+
+
+ x86
+ true
+ Full
+ False
+ ..\..\..\..\..\amkor\ReelSorter\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ ..\..\..\ManualMapEditor\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ icons8_iris_scan_80_XQd_icon.ico
+
+
+ LocalIntranet
+
+
+ false
+
+
+
+ true
+ ..\..\..\..\CrevisQRCode%28L%29\
+ TRACE;DEBUG;V2,EMGU
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ false
+
+
+ bin\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ false
+
+
+ Project
+ False
+ obj\
+
+
+ 4194304
+ False
+ Auto
+
+
+
+ ..\DLL\ArLog.Net4.dll
+
+
+ False
+ ..\DLL\ArSetting.Net4.dll
+
+
+ ..\DLL\ChilkatDotNet4.dll
+
+
+ False
+ ..\DLL\Crevis\x86\Crevis.VirtualFG40Library.dll
+
+
+ False
+ ..\DLL\Emgu\Emgu.CV.DebuggerVisualizers.VS2017.dll
+
+
+ False
+ ..\DLL\Emgu\Emgu.CV.UI.dll
+
+
+ False
+ ..\DLL\Emgu\Emgu.CV.World.dll
+
+
+ ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
+
+
+ False
+ C:\Program Files (x86)\Euresys\Open eVision 2.11\Bin32\Open_eVision_NetApi_2_11.dll
+
+
+ ..\DLL\SoftekBarcodeNet.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\DLL\WatsonWebsocket.dll
+
+
+
+
+
+
+
+
+ Form
+
+
+ fTeach.cs
+
+
+ Form
+
+
+ fLog.cs
+
+
+ Form
+
+
+ fErrorException.cs
+
+
+ Form
+
+
+ fMain.cs
+
+
+ Form
+
+
+ fSetting.cs
+
+
+
+
+
+
+
+
+ Form
+
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+
+ Form
+
+
+ fTeach.cs
+
+
+ fLog.cs
+
+
+ fErrorException.cs
+
+
+ fMain.cs
+ Designer
+
+
+ fSetting.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ False
+ Microsoft .NET Framework 4%28x86 및 x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+ False
+ Windows Installer 4.5
+ true
+
+
+
+
+ {9264cd2e-7cf8-4237-a69f-dcda984e0613}
+ UIControl
+
+
+ {f31c242c-1b15-4518-9733-48558499fe4b}
+ arControl
+
+
+ {a16c9667-5241-4313-888e-548375f85d29}
+ arFrameControl
+
+
+ {c42cd2f4-5adb-4728-b654-ad9c2e1b22e7}
+ arImageViewer.EVision_v22
+
+
+ {140af52a-5986-4413-bf02-8ea55a61891b}
+ MemoryMapCore
+
+
+ {14e8c9a5-013e-49ba-b435-ffffff7dd623}
+ arCommUtil
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/VisionCrevis_v22.csproj b/QRValidation/Project/VisionCrevis_v22.csproj
new file mode 100644
index 0000000..b1d70f5
--- /dev/null
+++ b/QRValidation/Project/VisionCrevis_v22.csproj
@@ -0,0 +1,294 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {65F3E762-800C-499E-862F-A535642EC500}
+ WinExe
+ Project
+ CrevisQRCode
+ v4.8
+ 512
+ 게시\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+ False
+ False
+ False
+ OnBuildSuccess
+ False
+ False
+ False
+ obj\$(Configuration)\
+
+
+
+ x86
+ true
+ Full
+ False
+ ..\..\..\..\..\amkor\ReelSorter\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ ..\..\..\ManualMapEditor\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ icons8_iris_scan_80_XQd_icon.ico
+
+
+ LocalIntranet
+
+
+ false
+
+
+
+ true
+ ..\..\..\..\..\amkor\CrevisQRCode\
+ TRACE;DEBUG;V22
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ false
+
+
+ bin\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ false
+
+
+ Project
+ False
+ obj\
+
+
+ 4194304
+ False
+ Auto
+
+
+
+ False
+ ..\DLL\arCommUtil.dll
+
+
+ ..\DLL\ChilkatDotNet4.dll
+
+
+ False
+ C:\Program Files\CREVIS\Cameras\MCam40\bin\x64\Crevis.VirtualFG40Library.dll
+
+
+ False
+ ..\DLL\Emgu\Emgu.CV.DebuggerVisualizers.VS2017.dll
+
+
+ False
+ ..\DLL\Emgu\Emgu.CV.UI.dll
+
+
+ False
+ ..\DLL\Emgu\Emgu.CV.World.dll
+
+
+ ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
+
+
+ False
+ C:\Program Files (x86)\Euresys\Open eVision 22.12\Bin64\Open_eVision_NetApi_22_12.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\DLL\WatsonWebsocket.dll
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ fviewer.cs
+
+
+ Form
+
+
+ fTeach.cs
+
+
+ Form
+
+
+ fErrorException.cs
+
+
+ Form
+
+
+ fMain.cs
+
+
+ Component
+
+
+ LogTextBox.cs
+
+
+ Form
+
+
+ fSetting.cs
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+
+ Form
+
+
+ Form
+
+
+ Form
+
+
+
+ Form
+
+
+ fviewer.cs
+
+
+ fTeach.cs
+
+
+ fErrorException.cs
+
+
+ fMain.cs
+ Designer
+
+
+ fSetting.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ False
+ Microsoft .NET Framework 4%28x86 및 x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+ False
+ Windows Installer 4.5
+ true
+
+
+
+
+ {c42cd2f4-5adb-4728-b654-ad9c2e1b22e7}
+ arImageViewer.EVision_v22
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/app.config b/QRValidation/Project/app.config
new file mode 100644
index 0000000..d53753e
--- /dev/null
+++ b/QRValidation/Project/app.config
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BLUPRT.CBX012020_rzDFf7pQAsCS
+
+
+
+
+
+
+ http://k1xip00.amkor.co.kr:50000/XISOAPAdapter/MessageServlet?senderParty=&senderService=eCIM_ATK&receiverParty=&receiverService=&interface=ZK_RFID_TRANS_SEQ&interfaceNamespace=urn%3Asap-com%3Adocument%3Asap%3Arfc%3Afunctions
+
+
+
+
diff --git a/QRValidation/Project/fMain.Designer.cs b/QRValidation/Project/fMain.Designer.cs
new file mode 100644
index 0000000..87aa5e7
--- /dev/null
+++ b/QRValidation/Project/fMain.Designer.cs
@@ -0,0 +1,2472 @@
+namespace Project
+{
+ partial class fMain
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fMain));
+ this.tmDisplay = new System.Windows.Forms.Timer(this.components);
+ this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
+ this.systemParameterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
+ this.demoRunToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+ this.messageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.errorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.informationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.attentionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setHomeSetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.saveDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sMHistoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.unitHistoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.frontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.rearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmOpenDir = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.맵데이터보기ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.저장폴더열기ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.캡처ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.저장ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.이미지ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.수량ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.cmGrid = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.sendSPNToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.sendSPN2dAPCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sendSPNRejectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sendSPNRejectAPCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sendBinDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sendBinDataRejectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.displayBinDataToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
+ this.setNewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setBlinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setNormalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setRejectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setErrorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
+ this.cmDebug = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.countToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sMResetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.debugModeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sAPSID목록보기ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.exceptionTestToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator();
+ this.motionEmulatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.dIOEmulatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.dIOMonitorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.refreshControklToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sceanToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.normalToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.motorHomeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.작업선택화면ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.unlaoderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.stateReadyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.setPortNoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem10 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem14 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem17 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem18 = new System.Windows.Forms.ToolStripMenuItem();
+ this.setSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripMenuItem();
+ this.clearZoneItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addInputZoneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addBCDZoneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addPLCZoneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addJobItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addSidItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.addBcdItemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.historyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.testToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.detectCountToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.menusToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.sampleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.clearToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+ this.screenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.jOBStartToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.debugWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.motionParameterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.axis0ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.axis1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.axis2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.axis3ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.axis4ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.processListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.errorHandleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.idxDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.stripIdDataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.oKDataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.nGDataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.mISSDataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.fileMapDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.dataPathDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.mapOriginDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.mapArrayDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.testmenuToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.pLeft = new System.Windows.Forms.Panel();
+ this.pivLeft = new System.Windows.Forms.Panel();
+ this.statusStrip3 = new System.Windows.Forms.StatusStrip();
+ this.sbConnCamL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel30 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbConnHostL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel34 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbLiveL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel38 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbTrigL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel42 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbMemMapL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel44 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbDetectReelL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel46 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbDetectCVL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbListenL = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStrip2 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton9 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton11 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton12 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton3 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton13 = new System.Windows.Forms.ToolStripButton();
+ this.toolStrip4 = new System.Windows.Forms.ToolStrip();
+ this.btTeachL = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripDropDownButton1 = new System.Windows.Forms.ToolStripDropDownButton();
+ this.toolStripMenuItem7 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem19 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem20 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
+ this.btLiveL = new System.Windows.Forms.ToolStripButton();
+ this.btProcessL = new System.Windows.Forms.ToolStripButton();
+ this.btTrigL = new System.Windows.Forms.ToolStripButton();
+ this.tabControl2 = new System.Windows.Forms.TabControl();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.rtLeft = new System.Windows.Forms.RichTextBox();
+ this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.lbTimeL = new System.Windows.Forms.Label();
+ this.lbGuidL = new System.Windows.Forms.Label();
+ this.lbDataL = new System.Windows.Forms.Label();
+ this.groupBox5 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.tabPage4 = new System.Windows.Forms.TabPage();
+ this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.sbLicense = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel8 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbStream = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel7 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbConnState = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel6 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.lbproctimel = new System.Windows.Forms.ToolStripStatusLabel();
+ this.lbproctimer = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton7 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton4 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton5 = new System.Windows.Forms.ToolStripButton();
+ this.cmMini = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.toolStripMenuItem81 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
+ this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.pRight = new System.Windows.Forms.Panel();
+ this.pIvRight = new System.Windows.Forms.Panel();
+ this.statusStrip2 = new System.Windows.Forms.StatusStrip();
+ this.sbConnCamR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel12 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbConnHostR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel16 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbLiveR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel20 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbTrigR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel24 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbMemMapR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel26 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbDetectReelR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel28 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbDetectCVR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.sbListenR = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel();
+ this.toolStrip3 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton14 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton15 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton16 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton17 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton18 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton19 = new System.Windows.Forms.ToolStripButton();
+ this.toolStrip5 = new System.Windows.Forms.ToolStrip();
+ this.btTeachR = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripDropDownButton2 = new System.Windows.Forms.ToolStripDropDownButton();
+ this.toolStripMenuItem21 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem22 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem23 = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
+ this.btLiveR = new System.Windows.Forms.ToolStripButton();
+ this.btProcessR = new System.Windows.Forms.ToolStripButton();
+ this.btTrigR = new System.Windows.Forms.ToolStripButton();
+ this.tabControl3 = new System.Windows.Forms.TabControl();
+ this.tabPage5 = new System.Windows.Forms.TabPage();
+ this.rtRight = new System.Windows.Forms.RichTextBox();
+ this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
+ this.groupBox7 = new System.Windows.Forms.GroupBox();
+ this.label8 = new System.Windows.Forms.Label();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label10 = new System.Windows.Forms.Label();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
+ this.lbTimeR = new System.Windows.Forms.Label();
+ this.lbGuidR = new System.Windows.Forms.Label();
+ this.lbDataR = new System.Windows.Forms.Label();
+ this.tabPage6 = new System.Windows.Forms.TabPage();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.bwLeft = new System.ComponentModel.BackgroundWorker();
+ this.bwRight = new System.ComponentModel.BackgroundWorker();
+ this.bwConn = new System.ComponentModel.BackgroundWorker();
+ this.cmOpenDir.SuspendLayout();
+ this.cmGrid.SuspendLayout();
+ this.cmDebug.SuspendLayout();
+ this.pLeft.SuspendLayout();
+ this.statusStrip3.SuspendLayout();
+ this.toolStrip2.SuspendLayout();
+ this.toolStrip4.SuspendLayout();
+ this.tabControl2.SuspendLayout();
+ this.tabPage3.SuspendLayout();
+ this.tableLayoutPanel3.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.groupBox5.SuspendLayout();
+ this.statusStrip1.SuspendLayout();
+ this.toolStrip1.SuspendLayout();
+ this.cmMini.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.pRight.SuspendLayout();
+ this.statusStrip2.SuspendLayout();
+ this.toolStrip3.SuspendLayout();
+ this.toolStrip5.SuspendLayout();
+ this.tabControl3.SuspendLayout();
+ this.tabPage5.SuspendLayout();
+ this.tableLayoutPanel4.SuspendLayout();
+ this.groupBox7.SuspendLayout();
+ this.groupBox4.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tmDisplay
+ //
+ this.tmDisplay.Interval = 150;
+ this.tmDisplay.Tick += new System.EventHandler(this.tmDisplay_Tick);
+ //
+ // systemParameterToolStripMenuItem
+ //
+ this.systemParameterToolStripMenuItem.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.systemParameterToolStripMenuItem.Name = "systemParameterToolStripMenuItem";
+ this.systemParameterToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.systemParameterToolStripMenuItem.Text = "System Parameter";
+ //
+ // toolStripMenuItem4
+ //
+ this.toolStripMenuItem4.Name = "toolStripMenuItem4";
+ this.toolStripMenuItem4.Size = new System.Drawing.Size(209, 6);
+ //
+ // demoRunToolStripMenuItem
+ //
+ this.demoRunToolStripMenuItem.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold);
+ this.demoRunToolStripMenuItem.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0)))));
+ this.demoRunToolStripMenuItem.Name = "demoRunToolStripMenuItem";
+ this.demoRunToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.demoRunToolStripMenuItem.Text = "Demo Run";
+ //
+ // toolStripMenuItem1
+ //
+ this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(209, 6);
+ //
+ // messageToolStripMenuItem
+ //
+ this.messageToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.errorToolStripMenuItem,
+ this.informationToolStripMenuItem,
+ this.attentionToolStripMenuItem});
+ this.messageToolStripMenuItem.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold);
+ this.messageToolStripMenuItem.Name = "messageToolStripMenuItem";
+ this.messageToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.messageToolStripMenuItem.Text = "Message";
+ //
+ // errorToolStripMenuItem
+ //
+ this.errorToolStripMenuItem.Name = "errorToolStripMenuItem";
+ this.errorToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+ this.errorToolStripMenuItem.Text = "Error";
+ //
+ // informationToolStripMenuItem
+ //
+ this.informationToolStripMenuItem.Name = "informationToolStripMenuItem";
+ this.informationToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+ this.informationToolStripMenuItem.Text = "Information";
+ //
+ // attentionToolStripMenuItem
+ //
+ this.attentionToolStripMenuItem.Name = "attentionToolStripMenuItem";
+ this.attentionToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
+ this.attentionToolStripMenuItem.Text = "Attention";
+ //
+ // setHomeSetToolStripMenuItem
+ //
+ this.setHomeSetToolStripMenuItem.Name = "setHomeSetToolStripMenuItem";
+ this.setHomeSetToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.setHomeSetToolStripMenuItem.Text = "Set HomeSet";
+ //
+ // saveDataToolStripMenuItem
+ //
+ this.saveDataToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sMHistoryToolStripMenuItem,
+ this.unitHistoryToolStripMenuItem});
+ this.saveDataToolStripMenuItem.Name = "saveDataToolStripMenuItem";
+ this.saveDataToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.saveDataToolStripMenuItem.Text = "Save Data";
+ //
+ // sMHistoryToolStripMenuItem
+ //
+ this.sMHistoryToolStripMenuItem.Name = "sMHistoryToolStripMenuItem";
+ this.sMHistoryToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
+ this.sMHistoryToolStripMenuItem.Text = "SM : History";
+ //
+ // unitHistoryToolStripMenuItem
+ //
+ this.unitHistoryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.frontToolStripMenuItem,
+ this.rearToolStripMenuItem});
+ this.unitHistoryToolStripMenuItem.Name = "unitHistoryToolStripMenuItem";
+ this.unitHistoryToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
+ this.unitHistoryToolStripMenuItem.Text = "Unit History";
+ //
+ // frontToolStripMenuItem
+ //
+ this.frontToolStripMenuItem.Name = "frontToolStripMenuItem";
+ this.frontToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+ this.frontToolStripMenuItem.Text = "Front";
+ //
+ // rearToolStripMenuItem
+ //
+ this.rearToolStripMenuItem.Name = "rearToolStripMenuItem";
+ this.rearToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+ this.rearToolStripMenuItem.Text = "Rear";
+ //
+ // cmOpenDir
+ //
+ this.cmOpenDir.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.맵데이터보기ToolStripMenuItem,
+ this.저장폴더열기ToolStripMenuItem,
+ this.캡처ToolStripMenuItem1,
+ this.저장ToolStripMenuItem,
+ this.이미지ToolStripMenuItem,
+ this.수량ToolStripMenuItem});
+ this.cmOpenDir.Name = "cmLot1";
+ this.cmOpenDir.Size = new System.Drawing.Size(121, 136);
+ //
+ // 맵데이터보기ToolStripMenuItem
+ //
+ this.맵데이터보기ToolStripMenuItem.Name = "맵데이터보기ToolStripMenuItem";
+ this.맵데이터보기ToolStripMenuItem.Size = new System.Drawing.Size(120, 22);
+ this.맵데이터보기ToolStripMenuItem.Text = "Program";
+ this.맵데이터보기ToolStripMenuItem.Click += new System.EventHandler(this.맵데이터보기ToolStripMenuItem_Click);
+ //
+ // 저장폴더열기ToolStripMenuItem
+ //
+ this.저장폴더열기ToolStripMenuItem.Name = "저장폴더열기ToolStripMenuItem";
+ this.저장폴더열기ToolStripMenuItem.Size = new System.Drawing.Size(120, 22);
+ this.저장폴더열기ToolStripMenuItem.Text = "Log";
+ this.저장폴더열기ToolStripMenuItem.Click += new System.EventHandler(this.저장폴더열기ToolStripMenuItem_Click);
+ //
+ // 캡처ToolStripMenuItem1
+ //
+ this.캡처ToolStripMenuItem1.Name = "캡처ToolStripMenuItem1";
+ this.캡처ToolStripMenuItem1.Size = new System.Drawing.Size(120, 22);
+ this.캡처ToolStripMenuItem1.Text = "Capture";
+ this.캡처ToolStripMenuItem1.Click += new System.EventHandler(this.캡처ToolStripMenuItem1_Click);
+ //
+ // 저장ToolStripMenuItem
+ //
+ this.저장ToolStripMenuItem.Name = "저장ToolStripMenuItem";
+ this.저장ToolStripMenuItem.Size = new System.Drawing.Size(120, 22);
+ this.저장ToolStripMenuItem.Text = "Save";
+ this.저장ToolStripMenuItem.Click += new System.EventHandler(this.저장ToolStripMenuItem_Click);
+ //
+ // 이미지ToolStripMenuItem
+ //
+ this.이미지ToolStripMenuItem.Name = "이미지ToolStripMenuItem";
+ this.이미지ToolStripMenuItem.Size = new System.Drawing.Size(120, 22);
+ this.이미지ToolStripMenuItem.Text = "Image";
+ this.이미지ToolStripMenuItem.Click += new System.EventHandler(this.이미지ToolStripMenuItem_Click);
+ //
+ // 수량ToolStripMenuItem
+ //
+ this.수량ToolStripMenuItem.Name = "수량ToolStripMenuItem";
+ this.수량ToolStripMenuItem.Size = new System.Drawing.Size(120, 22);
+ this.수량ToolStripMenuItem.Text = "Quantity";
+ this.수량ToolStripMenuItem.Click += new System.EventHandler(this.수량ToolStripMenuItem_Click);
+ //
+ // cmGrid
+ //
+ this.cmGrid.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sendSPNToolStripMenuItem1,
+ this.sendSPN2dAPCToolStripMenuItem,
+ this.sendSPNRejectToolStripMenuItem,
+ this.sendSPNRejectAPCToolStripMenuItem,
+ this.sendBinDataToolStripMenuItem,
+ this.sendBinDataRejectToolStripMenuItem,
+ this.displayBinDataToolStripMenuItem,
+ this.toolStripMenuItem2,
+ this.setNewToolStripMenuItem,
+ this.setBlinkToolStripMenuItem,
+ this.setNormalToolStripMenuItem,
+ this.setRejectToolStripMenuItem,
+ this.setErrorToolStripMenuItem,
+ this.toolStripMenuItem5});
+ this.cmGrid.Name = "cmVision";
+ this.cmGrid.Size = new System.Drawing.Size(200, 280);
+ //
+ // sendSPNToolStripMenuItem1
+ //
+ this.sendSPNToolStripMenuItem1.Name = "sendSPNToolStripMenuItem1";
+ this.sendSPNToolStripMenuItem1.Size = new System.Drawing.Size(199, 22);
+ this.sendSPNToolStripMenuItem1.Text = "Send SPN(2D)";
+ //
+ // sendSPN2dAPCToolStripMenuItem
+ //
+ this.sendSPN2dAPCToolStripMenuItem.Name = "sendSPN2dAPCToolStripMenuItem";
+ this.sendSPN2dAPCToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.sendSPN2dAPCToolStripMenuItem.Text = "Send SPN(2d) - APC";
+ //
+ // sendSPNRejectToolStripMenuItem
+ //
+ this.sendSPNRejectToolStripMenuItem.Name = "sendSPNRejectToolStripMenuItem";
+ this.sendSPNRejectToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.sendSPNRejectToolStripMenuItem.Text = "Send SPN(Reject)";
+ //
+ // sendSPNRejectAPCToolStripMenuItem
+ //
+ this.sendSPNRejectAPCToolStripMenuItem.Name = "sendSPNRejectAPCToolStripMenuItem";
+ this.sendSPNRejectAPCToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.sendSPNRejectAPCToolStripMenuItem.Text = "Send SPN(Reject) - APC";
+ //
+ // sendBinDataToolStripMenuItem
+ //
+ this.sendBinDataToolStripMenuItem.Name = "sendBinDataToolStripMenuItem";
+ this.sendBinDataToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.sendBinDataToolStripMenuItem.Text = "Send BinData(2D)";
+ //
+ // sendBinDataRejectToolStripMenuItem
+ //
+ this.sendBinDataRejectToolStripMenuItem.Name = "sendBinDataRejectToolStripMenuItem";
+ this.sendBinDataRejectToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.sendBinDataRejectToolStripMenuItem.Text = "Send BinData(Reject)";
+ //
+ // displayBinDataToolStripMenuItem
+ //
+ this.displayBinDataToolStripMenuItem.Name = "displayBinDataToolStripMenuItem";
+ this.displayBinDataToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.displayBinDataToolStripMenuItem.Text = "Display BinData";
+ //
+ // toolStripMenuItem2
+ //
+ this.toolStripMenuItem2.Name = "toolStripMenuItem2";
+ this.toolStripMenuItem2.Size = new System.Drawing.Size(196, 6);
+ //
+ // setNewToolStripMenuItem
+ //
+ this.setNewToolStripMenuItem.Name = "setNewToolStripMenuItem";
+ this.setNewToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.setNewToolStripMenuItem.Tag = "3";
+ this.setNewToolStripMenuItem.Text = "Set New";
+ //
+ // setBlinkToolStripMenuItem
+ //
+ this.setBlinkToolStripMenuItem.Name = "setBlinkToolStripMenuItem";
+ this.setBlinkToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.setBlinkToolStripMenuItem.Tag = "2";
+ this.setBlinkToolStripMenuItem.Text = "Set Empty";
+ //
+ // setNormalToolStripMenuItem
+ //
+ this.setNormalToolStripMenuItem.Name = "setNormalToolStripMenuItem";
+ this.setNormalToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.setNormalToolStripMenuItem.Tag = "5";
+ this.setNormalToolStripMenuItem.Text = "Set Normal";
+ //
+ // setRejectToolStripMenuItem
+ //
+ this.setRejectToolStripMenuItem.Name = "setRejectToolStripMenuItem";
+ this.setRejectToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.setRejectToolStripMenuItem.Tag = "6";
+ this.setRejectToolStripMenuItem.Text = "Set Limit";
+ //
+ // setErrorToolStripMenuItem
+ //
+ this.setErrorToolStripMenuItem.Name = "setErrorToolStripMenuItem";
+ this.setErrorToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.setErrorToolStripMenuItem.Tag = "4";
+ this.setErrorToolStripMenuItem.Text = "Set Error";
+ //
+ // toolStripMenuItem5
+ //
+ this.toolStripMenuItem5.Name = "toolStripMenuItem5";
+ this.toolStripMenuItem5.Size = new System.Drawing.Size(196, 6);
+ //
+ // cmDebug
+ //
+ this.cmDebug.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold);
+ this.cmDebug.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.countToolStripMenuItem,
+ this.sMResetToolStripMenuItem,
+ this.systemParameterToolStripMenuItem,
+ this.toolStripMenuItem4,
+ this.debugModeToolStripMenuItem,
+ this.demoRunToolStripMenuItem,
+ this.toolStripMenuItem1,
+ this.sAPSID목록보기ToolStripMenuItem,
+ this.setHomeSetToolStripMenuItem,
+ this.messageToolStripMenuItem,
+ this.saveDataToolStripMenuItem,
+ this.exceptionTestToolStripMenuItem,
+ this.toolStripMenuItem8,
+ this.motionEmulatorToolStripMenuItem,
+ this.dIOEmulatorToolStripMenuItem,
+ this.dIOMonitorToolStripMenuItem,
+ this.refreshControklToolStripMenuItem,
+ this.sceanToolStripMenuItem,
+ this.작업선택화면ToolStripMenuItem,
+ this.unlaoderToolStripMenuItem,
+ this.clearZoneItemToolStripMenuItem,
+ this.historyToolStripMenuItem,
+ this.menusToolStripMenuItem,
+ this.screenToolStripMenuItem,
+ this.motionParameterToolStripMenuItem,
+ this.processListToolStripMenuItem,
+ this.errorHandleToolStripMenuItem});
+ this.cmDebug.Name = "cmVision";
+ this.cmDebug.Size = new System.Drawing.Size(213, 550);
+ //
+ // countToolStripMenuItem
+ //
+ this.countToolStripMenuItem.Name = "countToolStripMenuItem";
+ this.countToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.countToolStripMenuItem.Text = "Debug Window";
+ //
+ // sMResetToolStripMenuItem
+ //
+ this.sMResetToolStripMenuItem.Name = "sMResetToolStripMenuItem";
+ this.sMResetToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.sMResetToolStripMenuItem.Text = "S/M Reset";
+ //
+ // debugModeToolStripMenuItem
+ //
+ this.debugModeToolStripMenuItem.Name = "debugModeToolStripMenuItem";
+ this.debugModeToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.debugModeToolStripMenuItem.Text = "Debug Mode";
+ //
+ // sAPSID목록보기ToolStripMenuItem
+ //
+ this.sAPSID목록보기ToolStripMenuItem.Name = "sAPSID목록보기ToolStripMenuItem";
+ this.sAPSID목록보기ToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.sAPSID목록보기ToolStripMenuItem.Text = "SAP SID 목록 보기";
+ //
+ // exceptionTestToolStripMenuItem
+ //
+ this.exceptionTestToolStripMenuItem.Name = "exceptionTestToolStripMenuItem";
+ this.exceptionTestToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.exceptionTestToolStripMenuItem.Text = "Exception Test";
+ this.exceptionTestToolStripMenuItem.Click += new System.EventHandler(this.exceptionTestToolStripMenuItem_Click);
+ //
+ // toolStripMenuItem8
+ //
+ this.toolStripMenuItem8.Name = "toolStripMenuItem8";
+ this.toolStripMenuItem8.Size = new System.Drawing.Size(209, 6);
+ //
+ // motionEmulatorToolStripMenuItem
+ //
+ this.motionEmulatorToolStripMenuItem.Name = "motionEmulatorToolStripMenuItem";
+ this.motionEmulatorToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.motionEmulatorToolStripMenuItem.Text = "Motion Emulator";
+ //
+ // dIOEmulatorToolStripMenuItem
+ //
+ this.dIOEmulatorToolStripMenuItem.Name = "dIOEmulatorToolStripMenuItem";
+ this.dIOEmulatorToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.dIOEmulatorToolStripMenuItem.Text = "DIO Emulator";
+ //
+ // dIOMonitorToolStripMenuItem
+ //
+ this.dIOMonitorToolStripMenuItem.Name = "dIOMonitorToolStripMenuItem";
+ this.dIOMonitorToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.dIOMonitorToolStripMenuItem.Text = "DIO Monitor";
+ //
+ // refreshControklToolStripMenuItem
+ //
+ this.refreshControklToolStripMenuItem.Name = "refreshControklToolStripMenuItem";
+ this.refreshControklToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.refreshControklToolStripMenuItem.Text = "Refresh Controkl";
+ //
+ // sceanToolStripMenuItem
+ //
+ this.sceanToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.normalToolStripMenuItem,
+ this.motorHomeToolStripMenuItem});
+ this.sceanToolStripMenuItem.Name = "sceanToolStripMenuItem";
+ this.sceanToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.sceanToolStripMenuItem.Text = "Scean";
+ //
+ // normalToolStripMenuItem
+ //
+ this.normalToolStripMenuItem.Name = "normalToolStripMenuItem";
+ this.normalToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
+ this.normalToolStripMenuItem.Text = "Normal";
+ //
+ // motorHomeToolStripMenuItem
+ //
+ this.motorHomeToolStripMenuItem.Name = "motorHomeToolStripMenuItem";
+ this.motorHomeToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
+ this.motorHomeToolStripMenuItem.Text = "Motor Home";
+ //
+ // 작업선택화면ToolStripMenuItem
+ //
+ this.작업선택화면ToolStripMenuItem.Name = "작업선택화면ToolStripMenuItem";
+ this.작업선택화면ToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.작업선택화면ToolStripMenuItem.Text = "Data Buffer (History)";
+ //
+ // unlaoderToolStripMenuItem
+ //
+ this.unlaoderToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.stateReadyToolStripMenuItem,
+ this.setPortNoToolStripMenuItem,
+ this.setSizeToolStripMenuItem});
+ this.unlaoderToolStripMenuItem.Name = "unlaoderToolStripMenuItem";
+ this.unlaoderToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.unlaoderToolStripMenuItem.Text = "Unlaoder";
+ //
+ // stateReadyToolStripMenuItem
+ //
+ this.stateReadyToolStripMenuItem.Name = "stateReadyToolStripMenuItem";
+ this.stateReadyToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
+ this.stateReadyToolStripMenuItem.Text = "State = ready";
+ //
+ // setPortNoToolStripMenuItem
+ //
+ this.setPortNoToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItem6,
+ this.toolStripMenuItem10,
+ this.toolStripMenuItem13,
+ this.toolStripMenuItem14,
+ this.toolStripMenuItem15,
+ this.toolStripMenuItem16,
+ this.toolStripMenuItem17,
+ this.toolStripMenuItem18});
+ this.setPortNoToolStripMenuItem.Name = "setPortNoToolStripMenuItem";
+ this.setPortNoToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
+ this.setPortNoToolStripMenuItem.Text = "Set Port No";
+ //
+ // toolStripMenuItem6
+ //
+ this.toolStripMenuItem6.Name = "toolStripMenuItem6";
+ this.toolStripMenuItem6.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem6.Text = "11";
+ //
+ // toolStripMenuItem10
+ //
+ this.toolStripMenuItem10.Name = "toolStripMenuItem10";
+ this.toolStripMenuItem10.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem10.Text = "12";
+ //
+ // toolStripMenuItem13
+ //
+ this.toolStripMenuItem13.Name = "toolStripMenuItem13";
+ this.toolStripMenuItem13.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem13.Text = "21";
+ //
+ // toolStripMenuItem14
+ //
+ this.toolStripMenuItem14.Name = "toolStripMenuItem14";
+ this.toolStripMenuItem14.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem14.Text = "22";
+ //
+ // toolStripMenuItem15
+ //
+ this.toolStripMenuItem15.Name = "toolStripMenuItem15";
+ this.toolStripMenuItem15.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem15.Text = "31";
+ //
+ // toolStripMenuItem16
+ //
+ this.toolStripMenuItem16.Name = "toolStripMenuItem16";
+ this.toolStripMenuItem16.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem16.Text = "32";
+ //
+ // toolStripMenuItem17
+ //
+ this.toolStripMenuItem17.Name = "toolStripMenuItem17";
+ this.toolStripMenuItem17.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem17.Text = "41";
+ //
+ // toolStripMenuItem18
+ //
+ this.toolStripMenuItem18.Name = "toolStripMenuItem18";
+ this.toolStripMenuItem18.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem18.Text = "42";
+ //
+ // setSizeToolStripMenuItem
+ //
+ this.setSizeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItem11,
+ this.toolStripMenuItem12});
+ this.setSizeToolStripMenuItem.Name = "setSizeToolStripMenuItem";
+ this.setSizeToolStripMenuItem.Size = new System.Drawing.Size(159, 22);
+ this.setSizeToolStripMenuItem.Text = "Set Size";
+ //
+ // toolStripMenuItem11
+ //
+ this.toolStripMenuItem11.Name = "toolStripMenuItem11";
+ this.toolStripMenuItem11.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem11.Text = "7";
+ //
+ // toolStripMenuItem12
+ //
+ this.toolStripMenuItem12.Name = "toolStripMenuItem12";
+ this.toolStripMenuItem12.Size = new System.Drawing.Size(95, 22);
+ this.toolStripMenuItem12.Text = "13";
+ //
+ // clearZoneItemToolStripMenuItem
+ //
+ this.clearZoneItemToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.clearToolStripMenuItem,
+ this.addInputZoneToolStripMenuItem,
+ this.addBCDZoneToolStripMenuItem,
+ this.addPLCZoneToolStripMenuItem,
+ this.addJobItemToolStripMenuItem,
+ this.addSidItemToolStripMenuItem,
+ this.addBcdItemToolStripMenuItem});
+ this.clearZoneItemToolStripMenuItem.Name = "clearZoneItemToolStripMenuItem";
+ this.clearZoneItemToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.clearZoneItemToolStripMenuItem.Text = " ZoneItem";
+ //
+ // clearToolStripMenuItem
+ //
+ this.clearToolStripMenuItem.Name = "clearToolStripMenuItem";
+ this.clearToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.clearToolStripMenuItem.Text = "Clear";
+ //
+ // addInputZoneToolStripMenuItem
+ //
+ this.addInputZoneToolStripMenuItem.Name = "addInputZoneToolStripMenuItem";
+ this.addInputZoneToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.addInputZoneToolStripMenuItem.Text = "Add Input Zone";
+ //
+ // addBCDZoneToolStripMenuItem
+ //
+ this.addBCDZoneToolStripMenuItem.Name = "addBCDZoneToolStripMenuItem";
+ this.addBCDZoneToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.addBCDZoneToolStripMenuItem.Text = "Add BCD Zone";
+ //
+ // addPLCZoneToolStripMenuItem
+ //
+ this.addPLCZoneToolStripMenuItem.Name = "addPLCZoneToolStripMenuItem";
+ this.addPLCZoneToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.addPLCZoneToolStripMenuItem.Text = "Add PLC Zone";
+ //
+ // addJobItemToolStripMenuItem
+ //
+ this.addJobItemToolStripMenuItem.Name = "addJobItemToolStripMenuItem";
+ this.addJobItemToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.addJobItemToolStripMenuItem.Text = "Add Job Item";
+ //
+ // addSidItemToolStripMenuItem
+ //
+ this.addSidItemToolStripMenuItem.Name = "addSidItemToolStripMenuItem";
+ this.addSidItemToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.addSidItemToolStripMenuItem.Text = "Add Sid Item";
+ //
+ // addBcdItemToolStripMenuItem
+ //
+ this.addBcdItemToolStripMenuItem.Name = "addBcdItemToolStripMenuItem";
+ this.addBcdItemToolStripMenuItem.Size = new System.Drawing.Size(175, 22);
+ this.addBcdItemToolStripMenuItem.Text = "Add Bcd Item";
+ //
+ // historyToolStripMenuItem
+ //
+ this.historyToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.testToolStripMenuItem,
+ this.detectCountToolStripMenuItem});
+ this.historyToolStripMenuItem.Name = "historyToolStripMenuItem";
+ this.historyToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.historyToolStripMenuItem.Text = "History";
+ //
+ // testToolStripMenuItem
+ //
+ this.testToolStripMenuItem.Name = "testToolStripMenuItem";
+ this.testToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
+ this.testToolStripMenuItem.Text = "test";
+ //
+ // detectCountToolStripMenuItem
+ //
+ this.detectCountToolStripMenuItem.Name = "detectCountToolStripMenuItem";
+ this.detectCountToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
+ this.detectCountToolStripMenuItem.Text = "Detect Count";
+ //
+ // menusToolStripMenuItem
+ //
+ this.menusToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sampleToolStripMenuItem,
+ this.clearToolStripMenuItem1});
+ this.menusToolStripMenuItem.Name = "menusToolStripMenuItem";
+ this.menusToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.menusToolStripMenuItem.Text = "Menus";
+ //
+ // sampleToolStripMenuItem
+ //
+ this.sampleToolStripMenuItem.Name = "sampleToolStripMenuItem";
+ this.sampleToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
+ this.sampleToolStripMenuItem.Text = "Add";
+ //
+ // clearToolStripMenuItem1
+ //
+ this.clearToolStripMenuItem1.Name = "clearToolStripMenuItem1";
+ this.clearToolStripMenuItem1.Size = new System.Drawing.Size(111, 22);
+ this.clearToolStripMenuItem1.Text = "Clear";
+ //
+ // screenToolStripMenuItem
+ //
+ this.screenToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.jOBStartToolStripMenuItem,
+ this.debugWindowToolStripMenuItem});
+ this.screenToolStripMenuItem.Name = "screenToolStripMenuItem";
+ this.screenToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.screenToolStripMenuItem.Text = "Screen";
+ //
+ // jOBStartToolStripMenuItem
+ //
+ this.jOBStartToolStripMenuItem.Name = "jOBStartToolStripMenuItem";
+ this.jOBStartToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+ this.jOBStartToolStripMenuItem.Text = "JOB Start";
+ //
+ // debugWindowToolStripMenuItem
+ //
+ this.debugWindowToolStripMenuItem.Name = "debugWindowToolStripMenuItem";
+ this.debugWindowToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+ this.debugWindowToolStripMenuItem.Text = "Debug Window";
+ //
+ // motionParameterToolStripMenuItem
+ //
+ this.motionParameterToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.axis0ToolStripMenuItem,
+ this.axis1ToolStripMenuItem,
+ this.axis2ToolStripMenuItem,
+ this.axis3ToolStripMenuItem,
+ this.axis4ToolStripMenuItem});
+ this.motionParameterToolStripMenuItem.Name = "motionParameterToolStripMenuItem";
+ this.motionParameterToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.motionParameterToolStripMenuItem.Text = "Motion Parameter";
+ //
+ // axis0ToolStripMenuItem
+ //
+ this.axis0ToolStripMenuItem.Name = "axis0ToolStripMenuItem";
+ this.axis0ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+ this.axis0ToolStripMenuItem.Text = "Axis 0";
+ //
+ // axis1ToolStripMenuItem
+ //
+ this.axis1ToolStripMenuItem.Name = "axis1ToolStripMenuItem";
+ this.axis1ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+ this.axis1ToolStripMenuItem.Text = "Axis 1";
+ //
+ // axis2ToolStripMenuItem
+ //
+ this.axis2ToolStripMenuItem.Name = "axis2ToolStripMenuItem";
+ this.axis2ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+ this.axis2ToolStripMenuItem.Text = "Axis 2";
+ //
+ // axis3ToolStripMenuItem
+ //
+ this.axis3ToolStripMenuItem.Name = "axis3ToolStripMenuItem";
+ this.axis3ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+ this.axis3ToolStripMenuItem.Text = "Axis 3";
+ //
+ // axis4ToolStripMenuItem
+ //
+ this.axis4ToolStripMenuItem.Name = "axis4ToolStripMenuItem";
+ this.axis4ToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
+ this.axis4ToolStripMenuItem.Text = "Axis 4";
+ //
+ // processListToolStripMenuItem
+ //
+ this.processListToolStripMenuItem.Name = "processListToolStripMenuItem";
+ this.processListToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.processListToolStripMenuItem.Text = "Process List";
+ this.processListToolStripMenuItem.Click += new System.EventHandler(this.processListToolStripMenuItem_Click);
+ //
+ // errorHandleToolStripMenuItem
+ //
+ this.errorHandleToolStripMenuItem.Name = "errorHandleToolStripMenuItem";
+ this.errorHandleToolStripMenuItem.Size = new System.Drawing.Size(212, 22);
+ this.errorHandleToolStripMenuItem.Text = "Error Handle";
+ this.errorHandleToolStripMenuItem.Click += new System.EventHandler(this.errorHandleToolStripMenuItem_Click);
+ //
+ // idxDataGridViewTextBoxColumn
+ //
+ this.idxDataGridViewTextBoxColumn.DataPropertyName = "idx";
+ this.idxDataGridViewTextBoxColumn.HeaderText = "idx";
+ this.idxDataGridViewTextBoxColumn.Name = "idxDataGridViewTextBoxColumn";
+ this.idxDataGridViewTextBoxColumn.Width = 5;
+ //
+ // stripIdDataGridViewTextBoxColumn2
+ //
+ this.stripIdDataGridViewTextBoxColumn2.DataPropertyName = "StripId";
+ this.stripIdDataGridViewTextBoxColumn2.HeaderText = "StripId";
+ this.stripIdDataGridViewTextBoxColumn2.Name = "stripIdDataGridViewTextBoxColumn2";
+ this.stripIdDataGridViewTextBoxColumn2.Width = 5;
+ //
+ // oKDataGridViewTextBoxColumn2
+ //
+ this.oKDataGridViewTextBoxColumn2.DataPropertyName = "OK";
+ this.oKDataGridViewTextBoxColumn2.HeaderText = "OK";
+ this.oKDataGridViewTextBoxColumn2.Name = "oKDataGridViewTextBoxColumn2";
+ this.oKDataGridViewTextBoxColumn2.Width = 5;
+ //
+ // nGDataGridViewTextBoxColumn2
+ //
+ this.nGDataGridViewTextBoxColumn2.DataPropertyName = "NG";
+ this.nGDataGridViewTextBoxColumn2.HeaderText = "NG";
+ this.nGDataGridViewTextBoxColumn2.Name = "nGDataGridViewTextBoxColumn2";
+ this.nGDataGridViewTextBoxColumn2.Width = 5;
+ //
+ // mISSDataGridViewTextBoxColumn2
+ //
+ this.mISSDataGridViewTextBoxColumn2.DataPropertyName = "MISS";
+ this.mISSDataGridViewTextBoxColumn2.HeaderText = "MISS";
+ this.mISSDataGridViewTextBoxColumn2.Name = "mISSDataGridViewTextBoxColumn2";
+ this.mISSDataGridViewTextBoxColumn2.Width = 5;
+ //
+ // fileMapDataGridViewTextBoxColumn
+ //
+ this.fileMapDataGridViewTextBoxColumn.DataPropertyName = "FileMap";
+ this.fileMapDataGridViewTextBoxColumn.HeaderText = "FileMap";
+ this.fileMapDataGridViewTextBoxColumn.Name = "fileMapDataGridViewTextBoxColumn";
+ this.fileMapDataGridViewTextBoxColumn.Width = 5;
+ //
+ // dataPathDataGridViewTextBoxColumn
+ //
+ this.dataPathDataGridViewTextBoxColumn.DataPropertyName = "DataPath";
+ this.dataPathDataGridViewTextBoxColumn.HeaderText = "DataPath";
+ this.dataPathDataGridViewTextBoxColumn.Name = "dataPathDataGridViewTextBoxColumn";
+ this.dataPathDataGridViewTextBoxColumn.Width = 5;
+ //
+ // mapOriginDataGridViewTextBoxColumn
+ //
+ this.mapOriginDataGridViewTextBoxColumn.DataPropertyName = "MapOrigin";
+ this.mapOriginDataGridViewTextBoxColumn.HeaderText = "MapOrigin";
+ this.mapOriginDataGridViewTextBoxColumn.Name = "mapOriginDataGridViewTextBoxColumn";
+ this.mapOriginDataGridViewTextBoxColumn.Width = 5;
+ //
+ // mapArrayDataGridViewTextBoxColumn
+ //
+ this.mapArrayDataGridViewTextBoxColumn.DataPropertyName = "MapArray";
+ this.mapArrayDataGridViewTextBoxColumn.HeaderText = "MapArray";
+ this.mapArrayDataGridViewTextBoxColumn.Name = "mapArrayDataGridViewTextBoxColumn";
+ this.mapArrayDataGridViewTextBoxColumn.Width = 5;
+ //
+ // testmenuToolStripMenuItem
+ //
+ this.testmenuToolStripMenuItem.Name = "testmenuToolStripMenuItem";
+ this.testmenuToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.testmenuToolStripMenuItem.Text = "testmenu";
+ //
+ // pLeft
+ //
+ this.pLeft.BackColor = System.Drawing.SystemColors.Control;
+ this.pLeft.Controls.Add(this.pivLeft);
+ this.pLeft.Controls.Add(this.statusStrip3);
+ this.pLeft.Controls.Add(this.toolStrip2);
+ this.pLeft.Controls.Add(this.toolStrip4);
+ this.pLeft.Controls.Add(this.tabControl2);
+ this.pLeft.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pLeft.Location = new System.Drawing.Point(3, 3);
+ this.pLeft.Name = "pLeft";
+ this.pLeft.Size = new System.Drawing.Size(578, 621);
+ this.pLeft.TabIndex = 139;
+ //
+ // pivLeft
+ //
+ this.pivLeft.BackColor = System.Drawing.Color.Magenta;
+ this.pivLeft.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pivLeft.Location = new System.Drawing.Point(0, 31);
+ this.pivLeft.Name = "pivLeft";
+ this.pivLeft.Size = new System.Drawing.Size(578, 343);
+ this.pivLeft.TabIndex = 143;
+ this.pivLeft.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pivLeft_MouseClick);
+ //
+ // statusStrip3
+ //
+ this.statusStrip3.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sbConnCamL,
+ this.toolStripStatusLabel30,
+ this.sbConnHostL,
+ this.toolStripStatusLabel34,
+ this.sbLiveL,
+ this.toolStripStatusLabel38,
+ this.sbTrigL,
+ this.toolStripStatusLabel42,
+ this.sbMemMapL,
+ this.toolStripStatusLabel44,
+ this.sbDetectReelL,
+ this.toolStripStatusLabel46,
+ this.sbDetectCVL,
+ this.toolStripStatusLabel1,
+ this.sbListenL,
+ this.toolStripStatusLabel3});
+ this.statusStrip3.Location = new System.Drawing.Point(0, 374);
+ this.statusStrip3.Name = "statusStrip3";
+ this.statusStrip3.Size = new System.Drawing.Size(578, 24);
+ this.statusStrip3.TabIndex = 145;
+ this.statusStrip3.Text = "statusStrip3";
+ //
+ // sbConnCamL
+ //
+ this.sbConnCamL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbConnCamL.Name = "sbConnCamL";
+ this.sbConnCamL.Size = new System.Drawing.Size(23, 19);
+ this.sbConnCamL.Text = "●";
+ //
+ // toolStripStatusLabel30
+ //
+ this.toolStripStatusLabel30.Name = "toolStripStatusLabel30";
+ this.toolStripStatusLabel30.Size = new System.Drawing.Size(48, 19);
+ this.toolStripStatusLabel30.Text = "Camera";
+ //
+ // sbConnHostL
+ //
+ this.sbConnHostL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbConnHostL.Name = "sbConnHostL";
+ this.sbConnHostL.Size = new System.Drawing.Size(23, 19);
+ this.sbConnHostL.Text = "●";
+ //
+ // toolStripStatusLabel34
+ //
+ this.toolStripStatusLabel34.Name = "toolStripStatusLabel34";
+ this.toolStripStatusLabel34.Size = new System.Drawing.Size(57, 19);
+ this.toolStripStatusLabel34.Text = "Host(WS)";
+ //
+ // sbLiveL
+ //
+ this.sbLiveL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbLiveL.Name = "sbLiveL";
+ this.sbLiveL.Size = new System.Drawing.Size(23, 19);
+ this.sbLiveL.Text = "●";
+ //
+ // toolStripStatusLabel38
+ //
+ this.toolStripStatusLabel38.Name = "toolStripStatusLabel38";
+ this.toolStripStatusLabel38.Size = new System.Drawing.Size(28, 19);
+ this.toolStripStatusLabel38.Text = "Live";
+ //
+ // sbTrigL
+ //
+ this.sbTrigL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbTrigL.Name = "sbTrigL";
+ this.sbTrigL.Size = new System.Drawing.Size(23, 19);
+ this.sbTrigL.Text = "●";
+ //
+ // toolStripStatusLabel42
+ //
+ this.toolStripStatusLabel42.Name = "toolStripStatusLabel42";
+ this.toolStripStatusLabel42.Size = new System.Drawing.Size(44, 19);
+ this.toolStripStatusLabel42.Text = "Trigger";
+ //
+ // sbMemMapL
+ //
+ this.sbMemMapL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbMemMapL.Name = "sbMemMapL";
+ this.sbMemMapL.Size = new System.Drawing.Size(23, 19);
+ this.sbMemMapL.Text = "●";
+ //
+ // toolStripStatusLabel44
+ //
+ this.toolStripStatusLabel44.Name = "toolStripStatusLabel44";
+ this.toolStripStatusLabel44.Size = new System.Drawing.Size(59, 19);
+ this.toolStripStatusLabel44.Text = "Memmap";
+ //
+ // sbDetectReelL
+ //
+ this.sbDetectReelL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbDetectReelL.Name = "sbDetectReelL";
+ this.sbDetectReelL.Size = new System.Drawing.Size(23, 19);
+ this.sbDetectReelL.Text = "●";
+ //
+ // toolStripStatusLabel46
+ //
+ this.toolStripStatusLabel46.Name = "toolStripStatusLabel46";
+ this.toolStripStatusLabel46.Size = new System.Drawing.Size(29, 19);
+ this.toolStripStatusLabel46.Text = "Reel";
+ //
+ // sbDetectCVL
+ //
+ this.sbDetectCVL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbDetectCVL.Name = "sbDetectCVL";
+ this.sbDetectCVL.Size = new System.Drawing.Size(23, 19);
+ this.sbDetectCVL.Text = "●";
+ //
+ // toolStripStatusLabel1
+ //
+ this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
+ this.toolStripStatusLabel1.Size = new System.Drawing.Size(35, 19);
+ this.toolStripStatusLabel1.Text = "Conv";
+ //
+ // sbListenL
+ //
+ this.sbListenL.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbListenL.Name = "sbListenL";
+ this.sbListenL.Size = new System.Drawing.Size(23, 19);
+ this.sbListenL.Text = "●";
+ //
+ // toolStripStatusLabel3
+ //
+ this.toolStripStatusLabel3.Name = "toolStripStatusLabel3";
+ this.toolStripStatusLabel3.Size = new System.Drawing.Size(38, 19);
+ this.toolStripStatusLabel3.Text = "Listen";
+ //
+ // toolStrip2
+ //
+ this.toolStrip2.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton9,
+ this.toolStripButton11,
+ this.toolStripButton12,
+ this.toolStripButton2,
+ this.toolStripButton3,
+ this.toolStripButton13});
+ this.toolStrip2.Location = new System.Drawing.Point(0, 398);
+ this.toolStrip2.Name = "toolStrip2";
+ this.toolStrip2.Size = new System.Drawing.Size(578, 25);
+ this.toolStrip2.TabIndex = 142;
+ this.toolStrip2.Text = "toolStrip2";
+ //
+ // toolStripButton9
+ //
+ this.toolStripButton9.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton9.Image")));
+ this.toolStripButton9.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton9.Name = "toolStripButton9";
+ this.toolStripButton9.Size = new System.Drawing.Size(51, 22);
+ this.toolStripButton9.Tag = "L";
+ this.toolStripButton9.Text = "Save";
+ this.toolStripButton9.Click += new System.EventHandler(this.toolStripButton9_Click_2);
+ //
+ // toolStripButton11
+ //
+ this.toolStripButton11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton11.Image")));
+ this.toolStripButton11.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton11.Name = "toolStripButton11";
+ this.toolStripButton11.Size = new System.Drawing.Size(53, 22);
+ this.toolStripButton11.Tag = "L";
+ this.toolStripButton11.Text = "Load";
+ this.toolStripButton11.Click += new System.EventHandler(this.toolStripButton11_Click_1);
+ //
+ // toolStripButton12
+ //
+ this.toolStripButton12.BackColor = System.Drawing.Color.Red;
+ this.toolStripButton12.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton12.Image")));
+ this.toolStripButton12.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton12.Name = "toolStripButton12";
+ this.toolStripButton12.Size = new System.Drawing.Size(40, 22);
+ this.toolStripButton12.Tag = "L";
+ this.toolStripButton12.Text = "Fit";
+ this.toolStripButton12.Visible = false;
+ this.toolStripButton12.Click += new System.EventHandler(this.toolStripButton12_Click_1);
+ //
+ // toolStripButton2
+ //
+ this.toolStripButton2.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton2.BackColor = System.Drawing.Color.Red;
+ this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
+ this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton2.Name = "toolStripButton2";
+ this.toolStripButton2.Size = new System.Drawing.Size(43, 22);
+ this.toolStripButton2.Tag = "L";
+ this.toolStripButton2.Text = "ZO";
+ this.toolStripButton2.Visible = false;
+ this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click_1);
+ //
+ // toolStripButton3
+ //
+ this.toolStripButton3.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton3.BackColor = System.Drawing.Color.Red;
+ this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
+ this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton3.Name = "toolStripButton3";
+ this.toolStripButton3.Size = new System.Drawing.Size(37, 22);
+ this.toolStripButton3.Tag = "L";
+ this.toolStripButton3.Text = "ZI";
+ this.toolStripButton3.Visible = false;
+ this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click_1);
+ //
+ // toolStripButton13
+ //
+ this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image")));
+ this.toolStripButton13.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton13.Name = "toolStripButton13";
+ this.toolStripButton13.Size = new System.Drawing.Size(61, 22);
+ this.toolStripButton13.Tag = "L";
+ this.toolStripButton13.Text = "debug";
+ this.toolStripButton13.Click += new System.EventHandler(this.toolStripButton13_Click);
+ //
+ // toolStrip4
+ //
+ this.toolStrip4.ImageScalingSize = new System.Drawing.Size(24, 24);
+ this.toolStrip4.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.btTeachL,
+ this.toolStripSeparator2,
+ this.toolStripDropDownButton1,
+ this.toolStripSeparator4,
+ this.btLiveL,
+ this.btProcessL,
+ this.btTrigL});
+ this.toolStrip4.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip4.Name = "toolStrip4";
+ this.toolStrip4.Size = new System.Drawing.Size(578, 31);
+ this.toolStrip4.TabIndex = 144;
+ this.toolStrip4.Text = "toolStrip4";
+ //
+ // btTeachL
+ //
+ this.btTeachL.Image = ((System.Drawing.Image)(resources.GetObject("btTeachL.Image")));
+ this.btTeachL.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btTeachL.Name = "btTeachL";
+ this.btTeachL.Size = new System.Drawing.Size(66, 28);
+ this.btTeachL.Tag = "L";
+ this.btTeachL.Text = "Teach";
+ this.btTeachL.Click += new System.EventHandler(this.toolStripButton6_Click_1);
+ //
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(6, 31);
+ //
+ // toolStripDropDownButton1
+ //
+ this.toolStripDropDownButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItem7,
+ this.toolStripMenuItem19,
+ this.toolStripMenuItem20});
+ this.toolStripDropDownButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripDropDownButton1.Image")));
+ this.toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripDropDownButton1.Name = "toolStripDropDownButton1";
+ this.toolStripDropDownButton1.Size = new System.Drawing.Size(115, 28);
+ this.toolStripDropDownButton1.Text = "Test Function";
+ //
+ // toolStripMenuItem7
+ //
+ this.toolStripMenuItem7.Name = "toolStripMenuItem7";
+ this.toolStripMenuItem7.Size = new System.Drawing.Size(135, 22);
+ this.toolStripMenuItem7.Tag = "L";
+ this.toolStripMenuItem7.Text = "Test";
+ this.toolStripMenuItem7.Click += new System.EventHandler(this.toolStripMenuItem7_Click);
+ //
+ // toolStripMenuItem19
+ //
+ this.toolStripMenuItem19.Name = "toolStripMenuItem19";
+ this.toolStripMenuItem19.Size = new System.Drawing.Size(135, 22);
+ this.toolStripMenuItem19.Tag = "L";
+ this.toolStripMenuItem19.Text = "Send";
+ this.toolStripMenuItem19.Click += new System.EventHandler(this.toolStripMenuItem19_Click);
+ //
+ // toolStripMenuItem20
+ //
+ this.toolStripMenuItem20.Name = "toolStripMenuItem20";
+ this.toolStripMenuItem20.Size = new System.Drawing.Size(135, 22);
+ this.toolStripMenuItem20.Tag = "L";
+ this.toolStripMenuItem20.Text = "Send Status";
+ this.toolStripMenuItem20.Click += new System.EventHandler(this.toolStripMenuItem20_Click);
+ //
+ // toolStripSeparator4
+ //
+ this.toolStripSeparator4.Name = "toolStripSeparator4";
+ this.toolStripSeparator4.Size = new System.Drawing.Size(6, 31);
+ //
+ // btLiveL
+ //
+ this.btLiveL.Image = ((System.Drawing.Image)(resources.GetObject("btLiveL.Image")));
+ this.btLiveL.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btLiveL.Name = "btLiveL";
+ this.btLiveL.Size = new System.Drawing.Size(56, 28);
+ this.btLiveL.Text = "Live";
+ this.btLiveL.Click += new System.EventHandler(this.toolStripButton21_Click);
+ //
+ // btProcessL
+ //
+ this.btProcessL.Image = ((System.Drawing.Image)(resources.GetObject("btProcessL.Image")));
+ this.btProcessL.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btProcessL.Name = "btProcessL";
+ this.btProcessL.Size = new System.Drawing.Size(75, 28);
+ this.btProcessL.Tag = "L";
+ this.btProcessL.Text = "Process";
+ this.btProcessL.Click += new System.EventHandler(this.btProcessR_Click);
+ //
+ // btTrigL
+ //
+ this.btTrigL.Image = ((System.Drawing.Image)(resources.GetObject("btTrigL.Image")));
+ this.btTrigL.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btTrigL.Name = "btTrigL";
+ this.btTrigL.Size = new System.Drawing.Size(72, 28);
+ this.btTrigL.Tag = "L";
+ this.btTrigL.Text = "Trigger";
+ this.btTrigL.Click += new System.EventHandler(this.btTrigR_Click);
+ //
+ // tabControl2
+ //
+ this.tabControl2.Controls.Add(this.tabPage3);
+ this.tabControl2.Controls.Add(this.tabPage4);
+ this.tabControl2.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tabControl2.Location = new System.Drawing.Point(0, 423);
+ this.tabControl2.Name = "tabControl2";
+ this.tabControl2.SelectedIndex = 0;
+ this.tabControl2.Size = new System.Drawing.Size(578, 198);
+ this.tabControl2.TabIndex = 147;
+ //
+ // tabPage3
+ //
+ this.tabPage3.Controls.Add(this.rtLeft);
+ this.tabPage3.Controls.Add(this.tableLayoutPanel3);
+ this.tabPage3.Location = new System.Drawing.Point(4, 27);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage3.Size = new System.Drawing.Size(570, 167);
+ this.tabPage3.TabIndex = 0;
+ this.tabPage3.Text = "Barcode information";
+ this.tabPage3.UseVisualStyleBackColor = true;
+ //
+ // rtLeft
+ //
+ this.rtLeft.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.rtLeft.Location = new System.Drawing.Point(3, 3);
+ this.rtLeft.Name = "rtLeft";
+ this.rtLeft.Size = new System.Drawing.Size(564, 76);
+ this.rtLeft.TabIndex = 0;
+ this.rtLeft.Text = "";
+ //
+ // tableLayoutPanel3
+ //
+ this.tableLayoutPanel3.ColumnCount = 2;
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel3.Controls.Add(this.groupBox1, 0, 0);
+ this.tableLayoutPanel3.Controls.Add(this.groupBox5, 1, 0);
+ this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 79);
+ this.tableLayoutPanel3.Name = "tableLayoutPanel3";
+ this.tableLayoutPanel3.RowCount = 1;
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel3.Size = new System.Drawing.Size(564, 85);
+ this.tableLayoutPanel3.TabIndex = 146;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.lbTimeL);
+ this.groupBox1.Controls.Add(this.lbGuidL);
+ this.groupBox1.Controls.Add(this.lbDataL);
+ this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBox1.Location = new System.Drawing.Point(3, 3);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(276, 79);
+ this.groupBox1.TabIndex = 140;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Handler Request";
+ //
+ // lbTimeL
+ //
+ this.lbTimeL.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lbTimeL.Location = new System.Drawing.Point(3, 22);
+ this.lbTimeL.Name = "lbTimeL";
+ this.lbTimeL.Size = new System.Drawing.Size(270, 18);
+ this.lbTimeL.TabIndex = 0;
+ this.lbTimeL.Text = "TIME:";
+ //
+ // lbGuidL
+ //
+ this.lbGuidL.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lbGuidL.Location = new System.Drawing.Point(3, 40);
+ this.lbGuidL.Name = "lbGuidL";
+ this.lbGuidL.Size = new System.Drawing.Size(270, 18);
+ this.lbGuidL.TabIndex = 0;
+ this.lbGuidL.Text = "GUID : ";
+ //
+ // lbDataL
+ //
+ this.lbDataL.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lbDataL.Location = new System.Drawing.Point(3, 58);
+ this.lbDataL.Name = "lbDataL";
+ this.lbDataL.Size = new System.Drawing.Size(270, 18);
+ this.lbDataL.TabIndex = 1;
+ this.lbDataL.Text = "DATA:";
+ //
+ // groupBox5
+ //
+ this.groupBox5.Controls.Add(this.label1);
+ this.groupBox5.Controls.Add(this.label2);
+ this.groupBox5.Controls.Add(this.label3);
+ this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBox5.Location = new System.Drawing.Point(285, 3);
+ this.groupBox5.Name = "groupBox5";
+ this.groupBox5.Size = new System.Drawing.Size(276, 79);
+ this.groupBox5.TabIndex = 140;
+ this.groupBox5.TabStop = false;
+ this.groupBox5.Text = "Vision Response";
+ //
+ // label1
+ //
+ this.label1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label1.Location = new System.Drawing.Point(3, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(270, 18);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "TIME:";
+ //
+ // label2
+ //
+ this.label2.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label2.Location = new System.Drawing.Point(3, 40);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(270, 18);
+ this.label2.TabIndex = 0;
+ this.label2.Text = "GUID : ";
+ //
+ // label3
+ //
+ this.label3.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label3.Location = new System.Drawing.Point(3, 58);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(270, 18);
+ this.label3.TabIndex = 1;
+ this.label3.Text = "--";
+ //
+ // tabPage4
+ //
+ this.tabPage4.Location = new System.Drawing.Point(4, 27);
+ this.tabPage4.Name = "tabPage4";
+ this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage4.Size = new System.Drawing.Size(570, 167);
+ this.tabPage4.TabIndex = 1;
+ this.tabPage4.Text = "Send lOg";
+ this.tabPage4.UseVisualStyleBackColor = true;
+ //
+ // statusStrip1
+ //
+ this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sbLicense,
+ this.toolStripStatusLabel8,
+ this.sbStream,
+ this.toolStripStatusLabel7,
+ this.sbConnState,
+ this.toolStripStatusLabel6,
+ this.lbproctimel,
+ this.lbproctimer});
+ this.statusStrip1.Location = new System.Drawing.Point(1, 696);
+ this.statusStrip1.Name = "statusStrip1";
+ this.statusStrip1.Size = new System.Drawing.Size(1182, 24);
+ this.statusStrip1.TabIndex = 140;
+ this.statusStrip1.Text = "statusStrip1";
+ //
+ // sbLicense
+ //
+ this.sbLicense.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbLicense.Name = "sbLicense";
+ this.sbLicense.Size = new System.Drawing.Size(23, 19);
+ this.sbLicense.Text = "●";
+ //
+ // toolStripStatusLabel8
+ //
+ this.toolStripStatusLabel8.Name = "toolStripStatusLabel8";
+ this.toolStripStatusLabel8.Size = new System.Drawing.Size(46, 19);
+ this.toolStripStatusLabel8.Text = "License";
+ //
+ // sbStream
+ //
+ this.sbStream.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbStream.Name = "sbStream";
+ this.sbStream.Size = new System.Drawing.Size(23, 19);
+ this.sbStream.Text = "●";
+ //
+ // toolStripStatusLabel7
+ //
+ this.toolStripStatusLabel7.Name = "toolStripStatusLabel7";
+ this.toolStripStatusLabel7.Size = new System.Drawing.Size(44, 19);
+ this.toolStripStatusLabel7.Text = "Stream";
+ //
+ // sbConnState
+ //
+ this.sbConnState.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbConnState.Name = "sbConnState";
+ this.sbConnState.Size = new System.Drawing.Size(23, 19);
+ this.sbConnState.Text = "●";
+ //
+ // toolStripStatusLabel6
+ //
+ this.toolStripStatusLabel6.Name = "toolStripStatusLabel6";
+ this.toolStripStatusLabel6.Size = new System.Drawing.Size(36, 19);
+ this.toolStripStatusLabel6.Text = "Conn";
+ //
+ // lbproctimel
+ //
+ this.lbproctimel.Name = "lbproctimel";
+ this.lbproctimel.Size = new System.Drawing.Size(91, 19);
+ this.lbproctimel.Text = "Processing time";
+ //
+ // lbproctimer
+ //
+ this.lbproctimer.Name = "lbproctimer";
+ this.lbproctimer.Size = new System.Drawing.Size(91, 19);
+ this.lbproctimer.Text = "Processing time";
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton7,
+ this.toolStripButton4,
+ this.toolStripButton5});
+ this.toolStrip1.Location = new System.Drawing.Point(1, 1);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(1182, 31);
+ this.toolStrip1.TabIndex = 141;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // toolStripButton7
+ //
+ this.toolStripButton7.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton7.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton7.Image")));
+ this.toolStripButton7.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton7.Name = "toolStripButton7";
+ this.toolStripButton7.Size = new System.Drawing.Size(53, 28);
+ this.toolStripButton7.Text = "Exit";
+ this.toolStripButton7.Click += new System.EventHandler(this.toolStripButton7_Click);
+ //
+ // toolStripButton4
+ //
+ this.toolStripButton4.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton4.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton4.Image")));
+ this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton4.Name = "toolStripButton4";
+ this.toolStripButton4.Size = new System.Drawing.Size(72, 28);
+ this.toolStripButton4.Text = "Setting";
+ this.toolStripButton4.Click += new System.EventHandler(this.toolStripButton4_Click);
+ //
+ // toolStripButton5
+ //
+ this.toolStripButton5.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton5.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton5.Image")));
+ this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton5.Name = "toolStripButton5";
+ this.toolStripButton5.Size = new System.Drawing.Size(100, 28);
+ this.toolStripButton5.Text = "Open Folder";
+ this.toolStripButton5.Click += new System.EventHandler(this.toolStripButton5_Click);
+ //
+ // cmMini
+ //
+ this.cmMini.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold);
+ this.cmMini.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItem81,
+ this.toolStripMenuItem3,
+ this.exitToolStripMenuItem});
+ this.cmMini.Name = "cmVision";
+ this.cmMini.Size = new System.Drawing.Size(114, 54);
+ //
+ // toolStripMenuItem81
+ //
+ this.toolStripMenuItem81.Name = "toolStripMenuItem81";
+ this.toolStripMenuItem81.Size = new System.Drawing.Size(113, 22);
+ this.toolStripMenuItem81.Text = "Show";
+ //
+ // toolStripMenuItem3
+ //
+ this.toolStripMenuItem3.Name = "toolStripMenuItem3";
+ this.toolStripMenuItem3.Size = new System.Drawing.Size(110, 6);
+ //
+ // exitToolStripMenuItem
+ //
+ this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+ this.exitToolStripMenuItem.Size = new System.Drawing.Size(113, 22);
+ this.exitToolStripMenuItem.Text = "Exit";
+ this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage2);
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point(1, 32);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(1182, 664);
+ this.tabControl1.TabIndex = 143;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.tableLayoutPanel1);
+ this.tabPage1.Location = new System.Drawing.Point(4, 27);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(1174, 633);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "Camera";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 2;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.Controls.Add(this.pLeft, 0, 0);
+ this.tableLayoutPanel1.Controls.Add(this.pRight, 1, 0);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 1;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(1168, 627);
+ this.tableLayoutPanel1.TabIndex = 0;
+ //
+ // pRight
+ //
+ this.pRight.BackColor = System.Drawing.SystemColors.Control;
+ this.pRight.Controls.Add(this.pIvRight);
+ this.pRight.Controls.Add(this.statusStrip2);
+ this.pRight.Controls.Add(this.toolStrip3);
+ this.pRight.Controls.Add(this.toolStrip5);
+ this.pRight.Controls.Add(this.tabControl3);
+ this.pRight.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pRight.Location = new System.Drawing.Point(587, 3);
+ this.pRight.Name = "pRight";
+ this.pRight.Size = new System.Drawing.Size(578, 621);
+ this.pRight.TabIndex = 139;
+ //
+ // pIvRight
+ //
+ this.pIvRight.BackColor = System.Drawing.Color.Magenta;
+ this.pIvRight.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pIvRight.Location = new System.Drawing.Point(0, 31);
+ this.pIvRight.Name = "pIvRight";
+ this.pIvRight.Size = new System.Drawing.Size(578, 343);
+ this.pIvRight.TabIndex = 143;
+ this.pIvRight.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pIvRight_MouseClick);
+ //
+ // statusStrip2
+ //
+ this.statusStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.sbConnCamR,
+ this.toolStripStatusLabel12,
+ this.sbConnHostR,
+ this.toolStripStatusLabel16,
+ this.sbLiveR,
+ this.toolStripStatusLabel20,
+ this.sbTrigR,
+ this.toolStripStatusLabel24,
+ this.sbMemMapR,
+ this.toolStripStatusLabel26,
+ this.sbDetectReelR,
+ this.toolStripStatusLabel28,
+ this.sbDetectCVR,
+ this.toolStripStatusLabel2,
+ this.sbListenR,
+ this.toolStripStatusLabel4});
+ this.statusStrip2.Location = new System.Drawing.Point(0, 374);
+ this.statusStrip2.Name = "statusStrip2";
+ this.statusStrip2.Size = new System.Drawing.Size(578, 24);
+ this.statusStrip2.TabIndex = 145;
+ this.statusStrip2.Text = "statusStrip2";
+ //
+ // sbConnCamR
+ //
+ this.sbConnCamR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbConnCamR.Name = "sbConnCamR";
+ this.sbConnCamR.Size = new System.Drawing.Size(23, 19);
+ this.sbConnCamR.Text = "●";
+ //
+ // toolStripStatusLabel12
+ //
+ this.toolStripStatusLabel12.Name = "toolStripStatusLabel12";
+ this.toolStripStatusLabel12.Size = new System.Drawing.Size(48, 19);
+ this.toolStripStatusLabel12.Text = "Camera";
+ //
+ // sbConnHostR
+ //
+ this.sbConnHostR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbConnHostR.Name = "sbConnHostR";
+ this.sbConnHostR.Size = new System.Drawing.Size(23, 19);
+ this.sbConnHostR.Text = "●";
+ //
+ // toolStripStatusLabel16
+ //
+ this.toolStripStatusLabel16.Name = "toolStripStatusLabel16";
+ this.toolStripStatusLabel16.Size = new System.Drawing.Size(57, 19);
+ this.toolStripStatusLabel16.Text = "Host(WS)";
+ //
+ // sbLiveR
+ //
+ this.sbLiveR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbLiveR.Name = "sbLiveR";
+ this.sbLiveR.Size = new System.Drawing.Size(23, 19);
+ this.sbLiveR.Text = "●";
+ //
+ // toolStripStatusLabel20
+ //
+ this.toolStripStatusLabel20.Name = "toolStripStatusLabel20";
+ this.toolStripStatusLabel20.Size = new System.Drawing.Size(28, 19);
+ this.toolStripStatusLabel20.Text = "Live";
+ //
+ // sbTrigR
+ //
+ this.sbTrigR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbTrigR.Name = "sbTrigR";
+ this.sbTrigR.Size = new System.Drawing.Size(23, 19);
+ this.sbTrigR.Text = "●";
+ //
+ // toolStripStatusLabel24
+ //
+ this.toolStripStatusLabel24.Name = "toolStripStatusLabel24";
+ this.toolStripStatusLabel24.Size = new System.Drawing.Size(44, 19);
+ this.toolStripStatusLabel24.Text = "Trigger";
+ //
+ // sbMemMapR
+ //
+ this.sbMemMapR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbMemMapR.Name = "sbMemMapR";
+ this.sbMemMapR.Size = new System.Drawing.Size(23, 19);
+ this.sbMemMapR.Text = "●";
+ //
+ // toolStripStatusLabel26
+ //
+ this.toolStripStatusLabel26.Name = "toolStripStatusLabel26";
+ this.toolStripStatusLabel26.Size = new System.Drawing.Size(59, 19);
+ this.toolStripStatusLabel26.Text = "Memmap";
+ //
+ // sbDetectReelR
+ //
+ this.sbDetectReelR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbDetectReelR.Name = "sbDetectReelR";
+ this.sbDetectReelR.Size = new System.Drawing.Size(23, 19);
+ this.sbDetectReelR.Text = "●";
+ //
+ // toolStripStatusLabel28
+ //
+ this.toolStripStatusLabel28.Name = "toolStripStatusLabel28";
+ this.toolStripStatusLabel28.Size = new System.Drawing.Size(29, 19);
+ this.toolStripStatusLabel28.Text = "Reel";
+ //
+ // sbDetectCVR
+ //
+ this.sbDetectCVR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbDetectCVR.Name = "sbDetectCVR";
+ this.sbDetectCVR.Size = new System.Drawing.Size(23, 19);
+ this.sbDetectCVR.Text = "●";
+ //
+ // toolStripStatusLabel2
+ //
+ this.toolStripStatusLabel2.Name = "toolStripStatusLabel2";
+ this.toolStripStatusLabel2.Size = new System.Drawing.Size(35, 19);
+ this.toolStripStatusLabel2.Text = "Conv";
+ //
+ // sbListenR
+ //
+ this.sbListenR.Font = new System.Drawing.Font("맑은 고딕", 10F);
+ this.sbListenR.Name = "sbListenR";
+ this.sbListenR.Size = new System.Drawing.Size(23, 19);
+ this.sbListenR.Text = "●";
+ //
+ // toolStripStatusLabel4
+ //
+ this.toolStripStatusLabel4.Name = "toolStripStatusLabel4";
+ this.toolStripStatusLabel4.Size = new System.Drawing.Size(38, 19);
+ this.toolStripStatusLabel4.Text = "Listen";
+ //
+ // toolStrip3
+ //
+ this.toolStrip3.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.toolStrip3.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton14,
+ this.toolStripButton15,
+ this.toolStripButton16,
+ this.toolStripButton17,
+ this.toolStripButton18,
+ this.toolStripButton19});
+ this.toolStrip3.Location = new System.Drawing.Point(0, 398);
+ this.toolStrip3.Name = "toolStrip3";
+ this.toolStrip3.Size = new System.Drawing.Size(578, 25);
+ this.toolStrip3.TabIndex = 142;
+ this.toolStrip3.Text = "toolStrip2";
+ //
+ // toolStripButton14
+ //
+ this.toolStripButton14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton14.Image")));
+ this.toolStripButton14.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton14.Name = "toolStripButton14";
+ this.toolStripButton14.Size = new System.Drawing.Size(51, 22);
+ this.toolStripButton14.Tag = "R";
+ this.toolStripButton14.Text = "Save";
+ this.toolStripButton14.Click += new System.EventHandler(this.toolStripButton9_Click_2);
+ //
+ // toolStripButton15
+ //
+ this.toolStripButton15.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton15.Image")));
+ this.toolStripButton15.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton15.Name = "toolStripButton15";
+ this.toolStripButton15.Size = new System.Drawing.Size(53, 22);
+ this.toolStripButton15.Tag = "R";
+ this.toolStripButton15.Text = "Load";
+ this.toolStripButton15.Click += new System.EventHandler(this.toolStripButton11_Click_1);
+ //
+ // toolStripButton16
+ //
+ this.toolStripButton16.BackColor = System.Drawing.Color.Red;
+ this.toolStripButton16.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton16.Image")));
+ this.toolStripButton16.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton16.Name = "toolStripButton16";
+ this.toolStripButton16.Size = new System.Drawing.Size(40, 22);
+ this.toolStripButton16.Tag = "R";
+ this.toolStripButton16.Text = "Fit";
+ this.toolStripButton16.Visible = false;
+ this.toolStripButton16.Click += new System.EventHandler(this.toolStripButton12_Click_1);
+ //
+ // toolStripButton17
+ //
+ this.toolStripButton17.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton17.BackColor = System.Drawing.Color.Red;
+ this.toolStripButton17.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton17.Image")));
+ this.toolStripButton17.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton17.Name = "toolStripButton17";
+ this.toolStripButton17.Size = new System.Drawing.Size(43, 22);
+ this.toolStripButton17.Text = "ZO";
+ this.toolStripButton17.Visible = false;
+ this.toolStripButton17.Click += new System.EventHandler(this.toolStripButton2_Click_1);
+ //
+ // toolStripButton18
+ //
+ this.toolStripButton18.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
+ this.toolStripButton18.BackColor = System.Drawing.Color.Red;
+ this.toolStripButton18.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton18.Image")));
+ this.toolStripButton18.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton18.Name = "toolStripButton18";
+ this.toolStripButton18.Size = new System.Drawing.Size(37, 22);
+ this.toolStripButton18.Text = "ZI";
+ this.toolStripButton18.Visible = false;
+ this.toolStripButton18.Click += new System.EventHandler(this.toolStripButton3_Click_1);
+ //
+ // toolStripButton19
+ //
+ this.toolStripButton19.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton19.Image")));
+ this.toolStripButton19.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton19.Name = "toolStripButton19";
+ this.toolStripButton19.Size = new System.Drawing.Size(61, 22);
+ this.toolStripButton19.Tag = "R";
+ this.toolStripButton19.Text = "debug";
+ this.toolStripButton19.Click += new System.EventHandler(this.toolStripButton13_Click);
+ //
+ // toolStrip5
+ //
+ this.toolStrip5.ImageScalingSize = new System.Drawing.Size(24, 24);
+ this.toolStrip5.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.btTeachR,
+ this.toolStripSeparator5,
+ this.toolStripDropDownButton2,
+ this.toolStripSeparator6,
+ this.btLiveR,
+ this.btProcessR,
+ this.btTrigR});
+ this.toolStrip5.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip5.Name = "toolStrip5";
+ this.toolStrip5.Size = new System.Drawing.Size(578, 31);
+ this.toolStrip5.TabIndex = 144;
+ this.toolStrip5.Tag = "R";
+ this.toolStrip5.Text = "toolStrip5";
+ //
+ // btTeachR
+ //
+ this.btTeachR.Image = ((System.Drawing.Image)(resources.GetObject("btTeachR.Image")));
+ this.btTeachR.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btTeachR.Name = "btTeachR";
+ this.btTeachR.Size = new System.Drawing.Size(66, 28);
+ this.btTeachR.Tag = "R";
+ this.btTeachR.Text = "Teach";
+ this.btTeachR.Click += new System.EventHandler(this.toolStripButton6_Click_1);
+ //
+ // toolStripSeparator5
+ //
+ this.toolStripSeparator5.Name = "toolStripSeparator5";
+ this.toolStripSeparator5.Size = new System.Drawing.Size(6, 31);
+ //
+ // toolStripDropDownButton2
+ //
+ this.toolStripDropDownButton2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripMenuItem21,
+ this.toolStripMenuItem22,
+ this.toolStripMenuItem23});
+ this.toolStripDropDownButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripDropDownButton2.Image")));
+ this.toolStripDropDownButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripDropDownButton2.Name = "toolStripDropDownButton2";
+ this.toolStripDropDownButton2.Size = new System.Drawing.Size(115, 28);
+ this.toolStripDropDownButton2.Text = "Test Function";
+ //
+ // toolStripMenuItem21
+ //
+ this.toolStripMenuItem21.Name = "toolStripMenuItem21";
+ this.toolStripMenuItem21.Size = new System.Drawing.Size(135, 22);
+ this.toolStripMenuItem21.Tag = "R";
+ this.toolStripMenuItem21.Text = "Test";
+ this.toolStripMenuItem21.Click += new System.EventHandler(this.toolStripMenuItem7_Click);
+ //
+ // toolStripMenuItem22
+ //
+ this.toolStripMenuItem22.Name = "toolStripMenuItem22";
+ this.toolStripMenuItem22.Size = new System.Drawing.Size(135, 22);
+ this.toolStripMenuItem22.Tag = "R";
+ this.toolStripMenuItem22.Text = "Send";
+ this.toolStripMenuItem22.Click += new System.EventHandler(this.toolStripMenuItem19_Click);
+ //
+ // toolStripMenuItem23
+ //
+ this.toolStripMenuItem23.Name = "toolStripMenuItem23";
+ this.toolStripMenuItem23.Size = new System.Drawing.Size(135, 22);
+ this.toolStripMenuItem23.Tag = "R";
+ this.toolStripMenuItem23.Text = "Send Status";
+ this.toolStripMenuItem23.Click += new System.EventHandler(this.toolStripMenuItem20_Click);
+ //
+ // toolStripSeparator6
+ //
+ this.toolStripSeparator6.Name = "toolStripSeparator6";
+ this.toolStripSeparator6.Size = new System.Drawing.Size(6, 31);
+ //
+ // btLiveR
+ //
+ this.btLiveR.Image = ((System.Drawing.Image)(resources.GetObject("btLiveR.Image")));
+ this.btLiveR.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btLiveR.Name = "btLiveR";
+ this.btLiveR.Size = new System.Drawing.Size(56, 28);
+ this.btLiveR.Text = "Live";
+ this.btLiveR.Click += new System.EventHandler(this.btLiveR_Click);
+ //
+ // btProcessR
+ //
+ this.btProcessR.Image = ((System.Drawing.Image)(resources.GetObject("btProcessR.Image")));
+ this.btProcessR.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btProcessR.Name = "btProcessR";
+ this.btProcessR.Size = new System.Drawing.Size(75, 28);
+ this.btProcessR.Tag = "R";
+ this.btProcessR.Text = "Process";
+ this.btProcessR.Click += new System.EventHandler(this.btProcessR_Click);
+ //
+ // btTrigR
+ //
+ this.btTrigR.Image = ((System.Drawing.Image)(resources.GetObject("btTrigR.Image")));
+ this.btTrigR.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.btTrigR.Name = "btTrigR";
+ this.btTrigR.Size = new System.Drawing.Size(72, 28);
+ this.btTrigR.Tag = "R";
+ this.btTrigR.Text = "Trigger";
+ this.btTrigR.Click += new System.EventHandler(this.btTrigR_Click);
+ //
+ // tabControl3
+ //
+ this.tabControl3.Controls.Add(this.tabPage5);
+ this.tabControl3.Controls.Add(this.tabPage6);
+ this.tabControl3.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tabControl3.Location = new System.Drawing.Point(0, 423);
+ this.tabControl3.Name = "tabControl3";
+ this.tabControl3.SelectedIndex = 0;
+ this.tabControl3.Size = new System.Drawing.Size(578, 198);
+ this.tabControl3.TabIndex = 148;
+ //
+ // tabPage5
+ //
+ this.tabPage5.Controls.Add(this.rtRight);
+ this.tabPage5.Controls.Add(this.tableLayoutPanel4);
+ this.tabPage5.Location = new System.Drawing.Point(4, 27);
+ this.tabPage5.Name = "tabPage5";
+ this.tabPage5.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage5.Size = new System.Drawing.Size(570, 167);
+ this.tabPage5.TabIndex = 0;
+ this.tabPage5.Text = "Barcode information";
+ this.tabPage5.UseVisualStyleBackColor = true;
+ //
+ // rtRight
+ //
+ this.rtRight.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.rtRight.Location = new System.Drawing.Point(3, 3);
+ this.rtRight.Name = "rtRight";
+ this.rtRight.Size = new System.Drawing.Size(564, 76);
+ this.rtRight.TabIndex = 0;
+ this.rtRight.Text = "";
+ //
+ // tableLayoutPanel4
+ //
+ this.tableLayoutPanel4.ColumnCount = 2;
+ this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel4.Controls.Add(this.groupBox7, 1, 0);
+ this.tableLayoutPanel4.Controls.Add(this.groupBox4, 0, 0);
+ this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 79);
+ this.tableLayoutPanel4.Name = "tableLayoutPanel4";
+ this.tableLayoutPanel4.RowCount = 1;
+ this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel4.Size = new System.Drawing.Size(564, 85);
+ this.tableLayoutPanel4.TabIndex = 147;
+ //
+ // groupBox7
+ //
+ this.groupBox7.Controls.Add(this.label8);
+ this.groupBox7.Controls.Add(this.label9);
+ this.groupBox7.Controls.Add(this.label10);
+ this.groupBox7.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBox7.Location = new System.Drawing.Point(285, 3);
+ this.groupBox7.Name = "groupBox7";
+ this.groupBox7.Size = new System.Drawing.Size(276, 79);
+ this.groupBox7.TabIndex = 140;
+ this.groupBox7.TabStop = false;
+ this.groupBox7.Text = "Vision Response";
+ //
+ // label8
+ //
+ this.label8.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label8.Location = new System.Drawing.Point(3, 22);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(270, 18);
+ this.label8.TabIndex = 0;
+ this.label8.Text = "TIME:";
+ //
+ // label9
+ //
+ this.label9.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label9.Location = new System.Drawing.Point(3, 40);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(270, 18);
+ this.label9.TabIndex = 0;
+ this.label9.Text = "GUID : ";
+ //
+ // label10
+ //
+ this.label10.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label10.Location = new System.Drawing.Point(3, 58);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(270, 18);
+ this.label10.TabIndex = 1;
+ this.label10.Text = "--";
+ //
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.lbTimeR);
+ this.groupBox4.Controls.Add(this.lbGuidR);
+ this.groupBox4.Controls.Add(this.lbDataR);
+ this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBox4.Location = new System.Drawing.Point(3, 3);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(276, 79);
+ this.groupBox4.TabIndex = 140;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Text = "Handler Request";
+ //
+ // lbTimeR
+ //
+ this.lbTimeR.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lbTimeR.Location = new System.Drawing.Point(3, 22);
+ this.lbTimeR.Name = "lbTimeR";
+ this.lbTimeR.Size = new System.Drawing.Size(270, 18);
+ this.lbTimeR.TabIndex = 0;
+ this.lbTimeR.Text = "TIME:";
+ //
+ // lbGuidR
+ //
+ this.lbGuidR.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lbGuidR.Location = new System.Drawing.Point(3, 40);
+ this.lbGuidR.Name = "lbGuidR";
+ this.lbGuidR.Size = new System.Drawing.Size(270, 18);
+ this.lbGuidR.TabIndex = 0;
+ this.lbGuidR.Text = "GUID : ";
+ //
+ // lbDataR
+ //
+ this.lbDataR.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.lbDataR.Location = new System.Drawing.Point(3, 58);
+ this.lbDataR.Name = "lbDataR";
+ this.lbDataR.Size = new System.Drawing.Size(270, 18);
+ this.lbDataR.TabIndex = 1;
+ this.lbDataR.Text = "DATA:";
+ //
+ // tabPage6
+ //
+ this.tabPage6.Location = new System.Drawing.Point(4, 27);
+ this.tabPage6.Name = "tabPage6";
+ this.tabPage6.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage6.Size = new System.Drawing.Size(570, 167);
+ this.tabPage6.TabIndex = 1;
+ this.tabPage6.Text = "Send lOg";
+ this.tabPage6.UseVisualStyleBackColor = true;
+ //
+ // tabPage2
+ //
+ this.tabPage2.Controls.Add(this.tableLayoutPanel2);
+ this.tabPage2.Location = new System.Drawing.Point(4, 27);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage2.Size = new System.Drawing.Size(1174, 633);
+ this.tabPage2.TabIndex = 1;
+ this.tabPage2.Text = "Log";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ //
+ // tableLayoutPanel2
+ //
+ this.tableLayoutPanel2.ColumnCount = 2;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 1;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(1168, 627);
+ this.tableLayoutPanel2.TabIndex = 137;
+ //
+ // bwLeft
+ //
+ this.bwLeft.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bwLeft_DoWork);
+ //
+ // bwRight
+ //
+ this.bwRight.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bwRight_DoWork);
+ //
+ // bwConn
+ //
+ this.bwConn.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bwConn_DoWork);
+ //
+ // fMain
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.ClientSize = new System.Drawing.Size(1184, 721);
+ this.Controls.Add(this.tabControl1);
+ this.Controls.Add(this.toolStrip1);
+ this.Controls.Add(this.statusStrip1);
+ this.DoubleBuffered = true;
+ this.Font = new System.Drawing.Font("Calibri", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.KeyPreview = true;
+ this.Name = "fMain";
+ this.Padding = new System.Windows.Forms.Padding(1);
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.Load += new System.EventHandler(this.@__Load);
+ this.cmOpenDir.ResumeLayout(false);
+ this.cmGrid.ResumeLayout(false);
+ this.cmDebug.ResumeLayout(false);
+ this.pLeft.ResumeLayout(false);
+ this.pLeft.PerformLayout();
+ this.statusStrip3.ResumeLayout(false);
+ this.statusStrip3.PerformLayout();
+ this.toolStrip2.ResumeLayout(false);
+ this.toolStrip2.PerformLayout();
+ this.toolStrip4.ResumeLayout(false);
+ this.toolStrip4.PerformLayout();
+ this.tabControl2.ResumeLayout(false);
+ this.tabPage3.ResumeLayout(false);
+ this.tableLayoutPanel3.ResumeLayout(false);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox5.ResumeLayout(false);
+ this.statusStrip1.ResumeLayout(false);
+ this.statusStrip1.PerformLayout();
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.cmMini.ResumeLayout(false);
+ this.tabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.pRight.ResumeLayout(false);
+ this.pRight.PerformLayout();
+ this.statusStrip2.ResumeLayout(false);
+ this.statusStrip2.PerformLayout();
+ this.toolStrip3.ResumeLayout(false);
+ this.toolStrip3.PerformLayout();
+ this.toolStrip5.ResumeLayout(false);
+ this.toolStrip5.PerformLayout();
+ this.tabControl3.ResumeLayout(false);
+ this.tabPage5.ResumeLayout(false);
+ this.tableLayoutPanel4.ResumeLayout(false);
+ this.groupBox7.ResumeLayout(false);
+ this.groupBox4.ResumeLayout(false);
+ this.tabPage2.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Timer tmDisplay;
+ private System.Windows.Forms.ToolTip toolTip1;
+ private System.Windows.Forms.ToolStripMenuItem systemParameterToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem4;
+ private System.Windows.Forms.ToolStripMenuItem demoRunToolStripMenuItem;
+ private System.Windows.Forms.ContextMenuStrip cmDebug;
+ private System.Windows.Forms.ContextMenuStrip cmOpenDir;
+ private System.Windows.Forms.ToolStripMenuItem 맵데이터보기ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem 저장폴더열기ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem messageToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem errorToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem informationToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem attentionToolStripMenuItem;
+ private System.Windows.Forms.DataGridViewTextBoxColumn idxDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn stripIdDataGridViewTextBoxColumn2;
+ private System.Windows.Forms.DataGridViewTextBoxColumn oKDataGridViewTextBoxColumn2;
+ private System.Windows.Forms.DataGridViewTextBoxColumn nGDataGridViewTextBoxColumn2;
+ private System.Windows.Forms.DataGridViewTextBoxColumn mISSDataGridViewTextBoxColumn2;
+ private System.Windows.Forms.DataGridViewTextBoxColumn fileMapDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn dataPathDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn mapOriginDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn mapArrayDataGridViewTextBoxColumn;
+ private System.Windows.Forms.ToolStripMenuItem setHomeSetToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem saveDataToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem 캡처ToolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem 저장ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem 이미지ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem 수량ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem testmenuToolStripMenuItem;
+ private System.Windows.Forms.ContextMenuStrip cmGrid;
+ private System.Windows.Forms.ToolStripMenuItem sendSPNToolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem sendBinDataToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sendSPNRejectToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sendBinDataRejectToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
+ private System.Windows.Forms.ToolStripMenuItem setNewToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem setBlinkToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem setRejectToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem setNormalToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem setErrorToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem displayBinDataToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
+ private System.Windows.Forms.ToolStripMenuItem sMResetToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sMHistoryToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem unitHistoryToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem frontToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem rearToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem exceptionTestToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sendSPN2dAPCToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sendSPNRejectAPCToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem8;
+ private System.Windows.Forms.ToolStripMenuItem motionEmulatorToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem dIOEmulatorToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem dIOMonitorToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem refreshControklToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sceanToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem normalToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem motorHomeToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem 작업선택화면ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem unlaoderToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem stateReadyToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem setPortNoToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem6;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem10;
+ private System.Windows.Forms.ToolStripMenuItem setSizeToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem11;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem12;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem13;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem14;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem15;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem16;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem17;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem18;
+ private System.Windows.Forms.ToolStripMenuItem clearZoneItemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem historyToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem testToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem addInputZoneToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem addBCDZoneToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem addPLCZoneToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem menusToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sampleToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem debugModeToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem addJobItemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem addSidItemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem addBcdItemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem detectCountToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem countToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem screenToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem jOBStartToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem motionParameterToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem axis0ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem axis1ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem axis2ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem axis3ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem axis4ToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem1;
+ private System.Windows.Forms.ToolStripMenuItem processListToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem debugWindowToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem errorHandleToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem sAPSID목록보기ToolStripMenuItem;
+ private System.Windows.Forms.Panel pLeft;
+ private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label lbGuidL;
+ private System.Windows.Forms.Label lbTimeL;
+ private System.Windows.Forms.ToolStripButton toolStripButton4;
+ private System.Windows.Forms.ToolStripButton toolStripButton5;
+ private System.Windows.Forms.ContextMenuStrip cmMini;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem81;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
+ private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+ private System.Windows.Forms.ToolStripButton toolStripButton7;
+ private System.Windows.Forms.RichTextBox rtLeft;
+ private System.Windows.Forms.ToolStripStatusLabel sbStream;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel7;
+ private System.Windows.Forms.ToolStripStatusLabel sbLicense;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel8;
+ private System.Windows.Forms.ToolStrip toolStrip2;
+ private System.Windows.Forms.ToolStripButton toolStripButton9;
+ private System.Windows.Forms.ToolStripButton toolStripButton11;
+ private System.Windows.Forms.ToolStripButton toolStripButton12;
+ private System.Windows.Forms.ToolStripButton toolStripButton2;
+ private System.Windows.Forms.ToolStripButton toolStripButton3;
+ private System.Windows.Forms.ToolStripButton toolStripButton13;
+ private System.Windows.Forms.Panel pivLeft;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.Panel pRight;
+ private System.Windows.Forms.Panel pIvRight;
+ private System.Windows.Forms.ToolStrip toolStrip3;
+ private System.Windows.Forms.ToolStripButton toolStripButton14;
+ private System.Windows.Forms.ToolStripButton toolStripButton15;
+ private System.Windows.Forms.ToolStripButton toolStripButton16;
+ private System.Windows.Forms.ToolStripButton toolStripButton17;
+ private System.Windows.Forms.ToolStripButton toolStripButton18;
+ private System.Windows.Forms.ToolStripButton toolStripButton19;
+ private System.Windows.Forms.RichTextBox rtRight;
+ private System.Windows.Forms.GroupBox groupBox4;
+ private System.Windows.Forms.Label lbTimeR;
+ private System.Windows.Forms.Label lbGuidR;
+ private System.Windows.Forms.ToolStrip toolStrip4;
+ private System.Windows.Forms.ToolStripButton btTeachL;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem7;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem19;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem20;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
+ private System.Windows.Forms.ToolStripButton btLiveL;
+ private System.Windows.Forms.ToolStripButton btTrigL;
+ private System.Windows.Forms.ToolStripButton btProcessL;
+ private System.Windows.Forms.ToolStrip toolStrip5;
+ private System.Windows.Forms.ToolStripButton btTeachR;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
+ private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton2;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem21;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem22;
+ private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem23;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
+ private System.Windows.Forms.ToolStripButton btLiveR;
+ private System.Windows.Forms.ToolStripButton btTrigR;
+ private System.Windows.Forms.ToolStripButton btProcessR;
+ private System.ComponentModel.BackgroundWorker bwLeft;
+ private System.ComponentModel.BackgroundWorker bwRight;
+ private System.Windows.Forms.StatusStrip statusStrip3;
+ private System.Windows.Forms.ToolStripStatusLabel sbConnCamL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel30;
+ private System.Windows.Forms.ToolStripStatusLabel sbConnHostL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel34;
+ private System.Windows.Forms.ToolStripStatusLabel sbLiveL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel38;
+ private System.Windows.Forms.ToolStripStatusLabel sbTrigL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel42;
+ private System.Windows.Forms.ToolStripStatusLabel sbMemMapL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel44;
+ private System.Windows.Forms.ToolStripStatusLabel sbDetectReelL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel46;
+ private System.Windows.Forms.StatusStrip statusStrip2;
+ private System.Windows.Forms.ToolStripStatusLabel sbConnCamR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel12;
+ private System.Windows.Forms.ToolStripStatusLabel sbConnHostR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel16;
+ private System.Windows.Forms.ToolStripStatusLabel sbLiveR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel20;
+ private System.Windows.Forms.ToolStripStatusLabel sbTrigR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel24;
+ private System.Windows.Forms.ToolStripStatusLabel sbMemMapR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel26;
+ private System.Windows.Forms.ToolStripStatusLabel sbDetectReelR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel28;
+ private System.Windows.Forms.ToolStripStatusLabel sbDetectCVL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
+ private System.Windows.Forms.ToolStripStatusLabel sbDetectCVR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2;
+ private System.Windows.Forms.ToolStripStatusLabel sbListenL;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel3;
+ private System.Windows.Forms.ToolStripStatusLabel sbListenR;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4;
+ private System.ComponentModel.BackgroundWorker bwConn;
+ private System.Windows.Forms.ToolStripStatusLabel sbConnState;
+ private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel6;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ private System.Windows.Forms.Label lbDataL;
+ private System.Windows.Forms.Label lbDataR;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
+ private System.Windows.Forms.GroupBox groupBox5;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
+ private System.Windows.Forms.GroupBox groupBox7;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.TabControl tabControl2;
+ private System.Windows.Forms.TabPage tabPage3;
+ private System.Windows.Forms.TabPage tabPage4;
+ private System.Windows.Forms.TabControl tabControl3;
+ private System.Windows.Forms.TabPage tabPage5;
+ private System.Windows.Forms.TabPage tabPage6;
+ private System.Windows.Forms.ToolStripStatusLabel lbproctimel;
+ private System.Windows.Forms.ToolStripStatusLabel lbproctimer;
+ }
+}
+
diff --git a/QRValidation/Project/fMain.cs b/QRValidation/Project/fMain.cs
new file mode 100644
index 0000000..224ea1f
--- /dev/null
+++ b/QRValidation/Project/fMain.cs
@@ -0,0 +1,898 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using System.Diagnostics;
+using System.Threading;
+using static Project.Util_Vision;
+using AR;
+using Euresys.Open_eVision_22_12;
+
+namespace Project
+{
+ public partial class fMain : Form
+ {
+ Boolean exit = false;
+ Boolean bRunConnection = true;
+ private arCtl.LogTextBox rtLogR;
+ private arCtl.LogTextBox rtLogL;
+
+ public fMain()
+ {
+ InitializeComponent();
+ InitRTLog();
+
+ PUB.mre[0] = new ManualResetEvent(true);
+ PUB.mre[1] = new ManualResetEvent(true);
+
+ PUB.mre_send[0] = new ManualResetEvent(true);
+ PUB.mre_send[1] = new ManualResetEvent(true);
+
+
+ this.KeyDown += (s1, e1) =>
+ {
+ if (e1.KeyCode == Keys.Escape) this.Close();
+ if (DateTime.Now > PUB.LastInputTime) PUB.LastInputTime = DateTime.Now;
+ };
+
+ //dotList = new List();
+ //dotList.AddRange(new arCtl.arLabel[] { lbDot1, lbDot2, lbDot3, lbDot4, lbDot5, lbDot6, lbDot7, lbDot8, lbDot9, lbDot10 });
+
+ this.MouseMove += (s1, e1) => { if (DateTime.Now > PUB.LastInputTime) PUB.LastInputTime = DateTime.Now; };
+ this.FormClosing += __Closing;
+
+ PUB._hDevice[0] = -1;
+ PUB._hDevice[1] = -1;
+
+ if (System.Diagnostics.Debugger.IsAttached) this.TopMost = false;
+ //else this.TopMost = true;
+ PUB.imgque.Push(this.Name);
+ PUB.RemoteCommand += PUB_RemoteCommand;
+ }
+
+ void InitRTLog()
+ {
+ this.rtLogR = new arCtl.LogTextBox();
+ this.rtLogL = new arCtl.LogTextBox();
+
+ arCtl.sLogMessageColor sLogMessageColor1 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor2 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor3 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor4 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor5 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor6 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor7 = new arCtl.sLogMessageColor();
+ arCtl.sLogMessageColor sLogMessageColor8 = new arCtl.sLogMessageColor();
+
+ //
+ // rtLogR
+ //
+ this.rtLogR.BackColor = System.Drawing.SystemColors.Control;
+ this.rtLogR.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ sLogMessageColor1.color = System.Drawing.Color.Black;
+ sLogMessageColor1.gubun = "NOR";
+ sLogMessageColor2.color = System.Drawing.Color.Red;
+ sLogMessageColor2.gubun = "ERR";
+ sLogMessageColor3.color = System.Drawing.Color.Tomato;
+ sLogMessageColor3.gubun = "WARN";
+ sLogMessageColor4.color = System.Drawing.Color.DeepSkyBlue;
+ sLogMessageColor4.gubun = "MSG";
+ this.rtLogR.ColorList = new arCtl.sLogMessageColor[] {
+ sLogMessageColor1,
+ sLogMessageColor2,
+ sLogMessageColor3,
+ sLogMessageColor4};
+ this.rtLogR.DateFormat = "mm:ss.fff";
+ this.rtLogR.DefaultColor = System.Drawing.Color.LightGray;
+ this.rtLogR.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.rtLogR.EnableDisplayTimer = false;
+ this.rtLogR.EnableGubunColor = true;
+ this.rtLogR.Font = new System.Drawing.Font("Consolas", 9F);
+ this.rtLogR.ListFormat = "[{0}] {1}";
+ this.rtLogR.Location = new System.Drawing.Point(587, 3);
+ this.rtLogR.MaxListCount = ((ushort)(200));
+ this.rtLogR.MaxTextLength = ((uint)(4000u));
+ this.rtLogR.MessageInterval = 50;
+ this.rtLogR.Name = "rtLogR";
+ this.rtLogR.Size = new System.Drawing.Size(578, 626);
+ this.rtLogR.TabIndex = 136;
+ this.rtLogR.Text = "";
+ //
+ // rtLogL
+ //
+ this.rtLogL.BackColor = System.Drawing.SystemColors.Control;
+ this.rtLogL.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ sLogMessageColor5.color = System.Drawing.Color.Black;
+ sLogMessageColor5.gubun = "NOR";
+ sLogMessageColor6.color = System.Drawing.Color.Red;
+ sLogMessageColor6.gubun = "ERR";
+ sLogMessageColor7.color = System.Drawing.Color.Tomato;
+ sLogMessageColor7.gubun = "WARN";
+ sLogMessageColor8.color = System.Drawing.Color.DeepSkyBlue;
+ sLogMessageColor8.gubun = "MSG";
+ this.rtLogL.ColorList = new arCtl.sLogMessageColor[] {
+ sLogMessageColor5,
+ sLogMessageColor6,
+ sLogMessageColor7,
+ sLogMessageColor8};
+ this.rtLogL.DateFormat = "mm:ss.fff";
+ this.rtLogL.DefaultColor = System.Drawing.Color.LightGray;
+ this.rtLogL.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.rtLogL.EnableDisplayTimer = false;
+ this.rtLogL.EnableGubunColor = true;
+ this.rtLogL.Font = new System.Drawing.Font("Consolas", 9F);
+ this.rtLogL.ListFormat = "[{0}] {1}";
+ this.rtLogL.Location = new System.Drawing.Point(3, 3);
+ this.rtLogL.MaxListCount = ((ushort)(200));
+ this.rtLogL.MaxTextLength = ((uint)(4000u));
+ this.rtLogL.MessageInterval = 50;
+ this.rtLogL.Name = "rtLogL";
+ this.rtLogL.Size = new System.Drawing.Size(578, 626);
+ this.rtLogL.TabIndex = 136;
+ this.rtLogL.Text = "";
+
+ this.tableLayoutPanel2.Controls.Add(this.rtLogR, 1, 0);
+ this.tableLayoutPanel2.Controls.Add(this.rtLogL, 0, 0);
+ }
+ private void PUB_RemoteCommand(object sender, remoteargs e)
+ {
+ switch (e.Command)
+ {
+ case remotelist.barcodeupdate:
+ this.BeginInvoke(new Action(() =>
+ {
+ if (e.CamIdx == PUB.setting.CameraIndexL)
+ {
+ rtLeft.Text = e.strdata;
+ }
+ else
+ {
+ rtRight.Text = e.strdata;
+ }
+ }));
+ break;
+ }
+ }
+
+ void addsendlogmsg(RichTextBox rt, string msg)
+ {
+ if (rt.InvokeRequired)
+ {
+ rt.BeginInvoke(new Action(addsendlogmsg), new object[] { rt, msg });
+ }
+ else
+ {
+ string pretext = "";
+ if (rt.TextLength > 500)
+ {
+ pretext = rt.Text.Substring(400);
+ rt.Clear();
+ }
+ rt.AppendText(pretext + "\n" + msg);
+ }
+
+ }
+
+ private void __Closing(object sender, FormClosingEventArgs e)
+ {
+ if (exit == false)
+ {
+ // viewmode(true);
+ e.Cancel = true;
+ return;
+ }
+ else
+ {
+ if (UTIL.MsgQ("Do you really want to exit?") != DialogResult.Yes)
+ {
+ e.Cancel = true;
+ return;
+ }
+ else
+ {
+ _Close_Start();
+ }
+ }
+ }
+
+ void UpdateControl()
+ {
+ this.Text = Application.ProductName + " ver " + Application.ProductVersion + $"({PUB.setting.cameraname})";
+
+ if (PUB.wsock_[0] != null)
+ {
+ PUB.wsock_[0].TargetIdx = PUB.setting.CameraIndexL;
+ PUB.wsock_[0].Target = eTarget.Left;
+ }
+
+ if (PUB.wsock_[1] != null)
+ {
+ PUB.wsock_[1].TargetIdx = PUB.setting.CameraIndexR;
+ PUB.wsock_[1].Target = eTarget.Right;
+ }
+
+ }
+ private void __Load(object sender, EventArgs e)
+ {
+
+ PUB.log_[0].RaiseMsg += Log_RaiseMsgL;
+ PUB.log_[1].RaiseMsg += Log_RaiseMsgR;
+
+ // if (System.Diagnostics.Debugger.IsAttached) viewmode(false);
+ // else viewmode(true);
+ this.Show();
+ Application.DoEvents();
+
+
+ //Shared memory setup 230811
+ //if (PUB.setting.CameraIndexL >= 0)
+ //{
+ // swplc[0] = new AR.MemoryMap.Server("crevisv22L", 1024);
+ // swplc[0].Idx = (int)PUB.setting.CameraIndexL;
+ // swplc[0].ValueChanged += Plc_ValueChanged;
+ // swplc[0].Start();
+ //}
+
+ //if (PUB.setting.CameraIndexR >= 0)
+ //{
+ // swplc[1] = new AR.MemoryMap.Server("crevisv22R", 1024);
+ // swplc[1].Idx = (int)PUB.setting.CameraIndexR;
+ // swplc[1].ValueChanged += Plc_ValueChanged;
+ // swplc[1].Start();
+ //}
+
+ //Socket initialization
+ //Pub.log.Add("Socket event assignment");
+ //Pub.wsListen.ConnectionRequest += WsListen_ConnectionRequest;
+ //Application.DoEvents();
+
+ PUB.log_[0].Add($"Server listening port:{PUB.setting.listenPortL}");
+ try
+ {
+ PUB.wsock_[0] = new Class.WebSocket("127.0.0.1", PUB.setting.listenPortL);
+ PUB.wsock_[0].TargetIdx = PUB.setting.CameraIndexL;
+ PUB.wsock_[0].Target = eTarget.Left;
+ PUB.wsock_[0].Start();
+ PUB.wsock_[0].MessageReceived += Ws_DataArrival;
+ PUB.wsock_[0].ClientConnected += Ws_Connected;
+ PUB.wsock_[0].ClientDisconnected += Ws_Disconnected;
+ PUB.log_[0].Add("Camera initialization");
+ }
+ catch (Exception ex)
+ {
+ PUB.wsock_[0].MessageReceived -= Ws_DataArrival;
+ PUB.wsock_[0].ClientConnected -= Ws_Connected;
+ PUB.wsock_[0].ClientDisconnected -= Ws_Disconnected;
+ PUB.log_[0].AddE("Server listen failed:" + ex.Message);
+ }
+
+ PUB.log_[1].Add($"Server listening port:{PUB.setting.listenPortR}");
+ try
+ {
+ PUB.wsock_[1] = new Class.WebSocket("127.0.0.1", PUB.setting.listenPortR);
+ PUB.wsock_[1].TargetIdx = PUB.setting.CameraIndexR;
+ PUB.wsock_[1].Target = eTarget.Right;
+ PUB.wsock_[1].Start();
+ PUB.wsock_[1].MessageReceived += Ws_DataArrival;
+ PUB.wsock_[1].ClientConnected += Ws_Connected;
+ PUB.wsock_[1].ClientDisconnected += Ws_Disconnected;
+ PUB.log_[1].Add("Camera initialization");
+ }
+ catch (Exception ex)
+ {
+ PUB.wsock_[1].MessageReceived -= Ws_DataArrival;
+ PUB.wsock_[1].ClientConnected -= Ws_Connected;
+ PUB.wsock_[1].ClientDisconnected -= Ws_Disconnected;
+ PUB.log_[1].AddE("Server listen failed:" + ex.Message);
+ }
+
+ Application.DoEvents();
+
+ _SM_RUN_INIT_CAMERA();
+
+ tmDisplay.Start(); //start Display
+
+ PUB.flag.set(eFlag.CHECKLICENSE, true, "LOAD");
+ PUB.flag.set(eFlag.CHECKCAMERAL, true, "LOAD");
+ PUB.flag.set(eFlag.CHECKCAMERAR, true, "LOAD");
+ Task.Run(new Action(() =>
+ {
+ //license chedk
+ try
+ {
+
+ using (var img = new EImageBW8())
+ {
+ PUB.log_[0].Add("evision check OK");
+ PUB.log_[1].Add("evision check OK");
+ }
+ PUB.VisionLicense = true;
+ }
+ catch (Exception ex)
+ {
+ PUB.VisionLicense = false;
+ PUB.log_[0].AddE($"evision check Error:{ex.Message}");
+ PUB.log_[1].AddE($"evision check Error:{ex.Message}");
+
+ }
+ PUB.flag.set(eFlag.CHECKLICENSE, false, "LOAD");
+ // panMiniDisplay.Invalidate();
+ }));
+ UpdateControl();
+ PUB.log_[0].Add($"Program start(left:{PUB.setting.CameraIndexL})");
+ PUB.log_[1].Add($"Program start(right:{PUB.setting.CameraIndexR})");
+ //PUB.CheckNRegister3(Application.ProductName, "chi", Application.ProductVersion);
+
+ //Image collection thread start - 231003
+ bwLeft.RunWorkerAsync();
+ bwRight.RunWorkerAsync();
+ bwConn.RunWorkerAsync();
+
+ //set live mode
+ if (PUB.setting.CameraIndexL >= 0) PUB.IsLive[PUB.setting.CameraIndexL] = true;
+ if (PUB.setting.CameraIndexR >= 0) PUB.IsLive[PUB.setting.CameraIndexR] = true;
+ if (PUB.setting.CameraIndexL >= 0) PUB.IsProcess[PUB.setting.CameraIndexL] = true;
+ if (PUB.setting.CameraIndexR >= 0) PUB.IsProcess[PUB.setting.CameraIndexR] = true;
+ }
+ //private void Plc_ValueChanged(object sender, AR.MemoryMap.Core.monitorvalueargs e)
+ //{
+ // var ws = sender as AR.MemoryMap.Server;
+ //}
+
+ #region "Mouse Drag"
+
+ Boolean mousecap = false;
+ Point mousepos;
+ private void Panel1_MouseDown(object sender, MouseEventArgs e)
+ {
+ mousepos = e.Location;
+ mousecap = true;
+ // panMiniDisplay.Invalidate();
+ }
+ private void Panel1_DoubleClick(object sender, EventArgs e)
+ {
+ // viewmode(false);
+ this.Invalidate();
+ }
+
+ private void Panel1_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (mousecap)
+ {
+ var offx = e.Location.X - mousepos.X;
+ var offy = e.Location.Y - mousepos.Y;
+ this.Location = new Point(this.Location.X + offx, this.Location.Y + offy);
+ //mousepos = e.Location;
+ }
+ }
+
+ private void Panel1_MouseUp(object sender, MouseEventArgs e)
+ {
+ mousecap = false;
+ }
+
+ #endregion
+
+ private void Log_RaiseMsgL(DateTime LogTime, string TypeStr, string Message)
+ {
+ if (this.rtLogL != null)
+ this.rtLogL.AddMsg(LogTime, TypeStr, Message);
+ }
+
+ private void Log_RaiseMsgR(DateTime LogTime, string TypeStr, string Message)
+ {
+ if (this.rtLogR != null)
+ this.rtLogR.AddMsg(LogTime, TypeStr, Message);
+ }
+
+
+ #region "Mouse Form Move"
+
+ private Boolean fMove = false;
+ private Point MDownPos;
+
+ private void LbTitle_DoubleClick(object sender, EventArgs e)
+ {
+ if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
+ else this.WindowState = FormWindowState.Maximized;
+ //this.loader1.RemakeRect();
+ }
+ private void LbTitle_MouseMove(object sender, MouseEventArgs e)
+ {
+ if (fMove)
+ {
+ Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
+ this.Left += offset.X;
+ this.Top += offset.Y;
+ offset = new Point(0, 0);
+ }
+ }
+ private void LbTitle_MouseUp(object sender, MouseEventArgs e)
+ {
+ fMove = false;
+ }
+ private void LbTitle_MouseDown(object sender, MouseEventArgs e)
+ {
+ MDownPos = new Point(e.X, e.Y);
+ fMove = true;
+ }
+
+ #endregion
+
+
+ private void 맵데이터보기ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ Util.RunExplorer(Util.CurrentPath);
+ }
+
+ private void 저장폴더열기ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ PUB.LogFlush();
+
+
+ var fi = new System.IO.FileInfo(PUB.log_[0].FileName);
+ Util.RunExplorer(fi.Directory.FullName);
+ }
+
+ private void 캡처ToolStripMenuItem1_Click(object sender, EventArgs e)
+ {
+ string savefile = System.IO.Path.Combine(Util.CurrentPath, "ScreenShot", DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");
+ var grpath = new System.IO.FileInfo(savefile);
+ Util.RunExplorer(grpath.Directory.FullName);
+ }
+
+ private void 저장ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var path = System.IO.Path.Combine(
+ PUB.setting.Path_Data, "History",
+ DateTime.Now.Year.ToString("0000"),
+ DateTime.Now.Month.ToString("00"),
+ DateTime.Now.Day.ToString("00"));
+ if (System.IO.Directory.Exists(path))
+ Util.RunExplorer(path);
+ else
+ Util.RunExplorer(System.IO.Path.Combine(PUB.setting.Path_Data, "History"));
+ }
+
+ private void 이미지ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var path = System.IO.Path.Combine(
+ PUB.setting.Path_Data, "Images",
+ DateTime.Now.Year.ToString("0000"),
+ DateTime.Now.Month.ToString("00"),
+ DateTime.Now.Day.ToString("00"));
+ if (System.IO.Directory.Exists(path))
+ Util.RunExplorer(path);
+ else
+ Util.RunExplorer(System.IO.Path.Combine(PUB.setting.Path_Data, "History"));
+ }
+
+ private void 수량ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var path = System.IO.Path.Combine(
+ PUB.setting.Path_Data, "Count",
+ DateTime.Now.Year.ToString("0000"),
+ DateTime.Now.Month.ToString("00"),
+ DateTime.Now.Day.ToString("00"));
+ if (System.IO.Directory.Exists(path))
+ Util.RunExplorer(path);
+ else
+ Util.RunExplorer(System.IO.Path.Combine(PUB.setting.Path_Data, "History"));
+ }
+
+ private void exceptionTestToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ int a = 0;
+ int b = 1;
+ var c = b / a;
+ }
+
+ private void processListToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ PUB.log_[0].Add("process list");
+ PUB.log_[1].Add("process list");
+ foreach (var prc in System.Diagnostics.Process.GetProcesses())
+ {
+ if (prc.ProcessName.StartsWith("svchost")) continue;
+ if (prc.ProcessName.Contains(".host")) continue;
+ PUB.log_[0].Add(prc.ProcessName);
+ PUB.log_[1].Add(prc.ProcessName);
+ }
+ }
+
+
+ private void errorHandleToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ int a = 3;
+ int b = 0;
+ var c = a / b;
+ }
+
+ private void toolStripButton4_Click(object sender, EventArgs e)
+ {
+
+ //라이브, 프로세스, 트리거상태 보존
+ var l0 = PUB.IsLive[0];
+ var t0 = PUB.IsTrigger[0];
+ var p0 = PUB.IsProcess[0];
+
+ for (int i = 0; i < 2; i++)
+ {
+ PUB.IsLive[i] = false;
+ PUB.IsTrigger[i] = false;
+ PUB.IsProcess[i] = false;
+ }
+
+ using (var f = new fSetting())
+ {
+ f.TopMost = true;
+ f.ShowDialog();
+ }
+
+ UpdateControl();
+
+ if (PUB.setting.CameraIndexL >= 0)
+ {
+ PUB.IsLive[PUB.setting.CameraIndexL] = l0;
+ PUB.IsTrigger[PUB.setting.CameraIndexL] = t0;
+ PUB.IsProcess[PUB.setting.CameraIndexL] = p0;
+ }
+
+ if (PUB.setting.CameraIndexR >= 0)
+ {
+ PUB.IsLive[PUB.setting.CameraIndexR] = l0;
+ PUB.IsTrigger[PUB.setting.CameraIndexR] = t0;
+ PUB.IsProcess[PUB.setting.CameraIndexR] = p0;
+ }
+
+ }
+
+ private void toolStripButton5_Click(object sender, EventArgs e)
+ {
+ Util.RunExplorer(PUB.setting.ImageSavePath);
+ }
+
+
+
+ private void exitToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ exit = true;
+ this.Close();
+ }
+
+ private void toolStripButton7_Click(object sender, EventArgs e)
+ {
+ exit = true;
+ this.Close();
+ }
+
+
+ private void toolStripButton9_Click_2(object sender, EventArgs e)
+ {
+ //camera image save
+ var bt = sender as ToolStripButton;
+ var camidx = bt.Name.Equals("toolStripButton9") ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camidx == PUB.setting.CameraIndexL ? 0 : 1;
+ var sd = new SaveFileDialog();
+ sd.Filter = "bitmap|*.bmp";
+ if (sd.ShowDialog() != DialogResult.OK) return;
+
+ //이미지가 없다면 한장 찍는다
+ //if (this.iv[camidx].Image == null) CrevisGrab(camidx, true);
+ if (PUB.mre[camidx].WaitOne(100))
+ {
+ PUB.mre[camidx].Reset();
+ if (PUB.OrgImage[camidx] != null && PUB.OrgImage[camidx].IsVoid == false)
+ {
+ PUB.OrgImage[camidx].Save(sd.FileName);
+ PUB.log_[logIdx].Add($"File save completed {sd.FileName}");
+ }
+ else UTIL.MsgE("No image");
+ PUB.mre[camidx].Set();
+ }
+ else PUB.log_[logIdx].AddE($"Image is locked");
+
+
+ }
+
+ private void toolStripButton11_Click_1(object sender, EventArgs e)
+ {
+ var bt = sender as ToolStripButton;
+ var tagstr = bt.Tag.ToString();
+
+ OpenFileDialog od = new OpenFileDialog();
+ od.Filter = "image file|*.jpg;*.bmp";
+ od.FilterIndex = 0;
+ if (od.ShowDialog() != DialogResult.OK) return;
+
+ //Turn off live mode
+ var camIdx = tagstr == "L" ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ PUB.IsLive[camIdx] = false;
+ //iv[camidx].Image = null;
+
+ //Remove existing image
+ if (PUB.mre[camIdx].WaitOne(100))
+ {
+ PUB.mre[camIdx].Reset();
+ if (PUB.OrgImage[camIdx] != null) PUB.OrgImage[camIdx].Dispose();
+ PUB.OrgImage[camIdx] = new EImageBW8();
+ PUB.OrgImage[camIdx].Load(od.FileName);
+
+ var target = tagstr == "L" ? eTarget.Left : eTarget.Right;
+ var pan = target == eTarget.Left ? pivLeft : pIvRight;
+
+ //draw image
+ PUB.DrawImage(target, pan, PUB.OrgImage[camIdx]);
+ PUB.mre[camIdx].Set();
+ }
+ else
+ {
+ PUB.log_[logIdx].AddE($"Cannot execute because image is locked");
+ return;
+ }
+
+
+ }
+
+ private void toolStripButton12_Click_1(object sender, EventArgs e)
+ {
+ //ivL.ZoomFit();
+ }
+
+ private void toolStripButton3_Click_1(object sender, EventArgs e)
+ {
+ // ivL.ZoomIn();
+ }
+
+ private void toolStripButton2_Click_1(object sender, EventArgs e)
+ {
+ //ivL.ZoomOut();
+ }
+
+ private void toolStripButton13_Click(object sender, EventArgs e)
+ {
+ // this.ivL.DebugMode = !this.ivL.DebugMode;
+ // this.ivL.Invalidate();
+ }
+
+
+
+ List[] coderesult = new List[] {
+ new List(),
+ new List()
+ };
+
+ private void toolStripMenuItem7_Click(object sender, EventArgs e)
+ {
+ var bt = sender as ToolStripMenuItem;
+ var tagstr = bt.Tag.ToString();
+ var camIdx = tagstr == "L" ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var target = PUB.GetTarget(camIdx);// tagstr == "L" ? eTarget.Left : eTarget.Right;
+ var logIdx = target == eTarget.Left ? 0 : 1;
+ if (target == eTarget.None)
+ {
+ UTIL.MsgE("Target not specified");
+ return;
+ }
+
+ PUB.log_[logIdx].Add("Image Test run");
+
+ System.Diagnostics.Stopwatch wat = new Stopwatch();
+ wat.Restart();
+
+ if (PUB.mre[camIdx].WaitOne(100))
+ {
+ PUB.mre[camIdx].Reset();
+ var rlt = Util_Vision.DetectQR(PUB.OrgImage[camIdx], null, 0,
+ out string resultMessage,
+ PUB.setting.erodevaluestr,
+ PUB.setting.GainOffsetListStr,
+ PUB.setting.blob_area_min,
+ PUB.setting.blob_area_max,
+ PUB.setting.blob_sigmaxy,
+ PUB.setting.blob_sigmayy,
+ PUB.setting.blob_sigmaxx,
+ PUB.setting.blob_minw,
+ PUB.setting.blob_maxw,
+ PUB.setting.blob_minh,
+ PUB.setting.blob_maxh);
+ coderesult[camIdx] = rlt.Item1;
+
+ PUB.ProcessTime[camIdx] = rlt.Item4;
+ var pan = target == eTarget.Left ? pivLeft : pIvRight;
+
+ PUB.DrawImage(target, pan, PUB.OrgImage[camIdx], rlt.Item1, rlt.Item2, rlt.Item3);
+ PUB.mre[camIdx].Set();
+ }
+ else PUB.log_[logIdx].AddE($"Image is locked");
+
+ wat.Stop();
+ PUB.log_[logIdx].Add($"{wat.ElapsedMilliseconds}ms");
+ }
+
+ private void toolStripMenuItem19_Click(object sender, EventArgs e)
+ {
+ var bt = sender as ToolStripMenuItem;
+ var camIdx = bt.Tag.ToString().Equals("L") ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ PUB.log_[logIdx].Add("Image Test run");
+
+ if (PUB.mre[camIdx].WaitOne(100) == false)
+ {
+ PUB.log_[logIdx].AddE($"Image is locked");
+ return;
+ }
+ PUB.mre[camIdx].Reset();
+
+ System.Diagnostics.Stopwatch wat = new Stopwatch();
+ wat.Restart();
+
+ var rlt = Util_Vision.DetectQR(PUB.OrgImage[camIdx], null, 0,
+ out string resultMessage,
+ PUB.setting.erodevaluestr,
+ PUB.setting.GainOffsetListStr,
+ PUB.setting.blob_area_min,
+ PUB.setting.blob_area_max,
+ PUB.setting.blob_sigmaxy,
+ PUB.setting.blob_sigmayy,
+ PUB.setting.blob_sigmaxx, PUB.setting.blob_minw,
+ PUB.setting.blob_maxw,
+ PUB.setting.blob_minh,
+ PUB.setting.blob_maxh);
+ coderesult[camIdx] = rlt.Item1;
+
+ PUB.mre[camIdx].Set();
+ PUB.ProcessTime[camIdx] = rlt.Item4;
+
+
+ Util_Vision.SCodeData codedata;
+ List data = new List();
+ Boolean FindAmkorQR = false;
+ if (coderesult[camIdx].Count > 0)
+ {
+ foreach (var item in coderesult[camIdx].OrderByDescending(t => t.sid))
+ {
+ //datalist.Add(item.data);
+ // ptlist.Add(item.corner);
+ if (FindAmkorQR == false)
+ {
+ var bcd = new Class.CAmkorSTDBarcode(item.data);
+ if (bcd.isValid)
+ {
+ codedata = item;
+ FindAmkorQR = true;
+ data.Add(item.data);// = item.data;
+ break;
+ }
+ }
+ }
+ }
+
+
+
+ PUB.IsTrigger[camIdx] = true;
+ if (PUB.setting.SendRawData) //211210
+ {
+ if (PUB.BarcodeParsing(camIdx, coderesult[camIdx], "CREVIS"))
+ PUB.parsetime = DateTime.Now;
+ else
+ PUB.parsetime = DateTime.Now.AddMilliseconds(50);
+ }
+ else
+ {
+ if (PUB.BarcodeParsing(camIdx, data, "CREVIS"))
+ PUB.parsetime = DateTime.Now;
+ else
+ PUB.parsetime = DateTime.Now.AddMilliseconds(50);
+ }
+
+ wat.Stop(); ;
+ PUB.log_[logIdx].Add($"{wat.ElapsedMilliseconds}ms");
+ }
+
+ private void toolStripMenuItem20_Click(object sender, EventArgs e)
+ {
+ if (PUB.setting.CameraIndexL >= 0)
+ SendStatus(eTarget.Left);
+
+ if (PUB.setting.CameraIndexR >= 0)
+ SendStatus(eTarget.Right);
+ }
+
+ private void toolStripButton21_Click(object sender, EventArgs e)
+ {
+ if (PUB.setting.CameraIndexL >= 0)
+ PUB.IsLive[PUB.setting.CameraIndexL] = !PUB.IsLive[PUB.setting.CameraIndexL];
+ }
+
+
+ private void btTrigR_Click(object sender, EventArgs e)
+ {
+ var but = sender as ToolStripButton;
+ if (but == null) return;
+ var camIdx = but.Tag.ToString().Equals("L") ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ PUB.triggerTime[camIdx] = DateTime.Now;
+ PUB.IsTrigger[camIdx] = !PUB.IsTrigger[camIdx];
+ PUB.lastdata[camIdx] = string.Empty;
+ PUB.log_[logIdx].Add("User trigger setting value:" + PUB.IsTrigger[camIdx].ToString());
+ }
+
+ private void toolStripButton25_Click(object sender, EventArgs e)
+ {
+ var camIdx = PUB.setting.CameraIndexL;
+ var camTarget = PUB.GetTarget(camIdx);
+ if (camTarget == eTarget.None) return;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ PUB.IsProcess[camIdx] = !PUB.IsProcess[camIdx];
+ PUB.log_[logIdx].Add("Process setting value:" + PUB.IsProcess.ToString());
+ }
+
+ private void btProcessR_Click(object sender, EventArgs e)
+ {
+ var bt = sender as ToolStripButton;
+ var camIdx = bt.Tag.ToString().Equals("L") ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ var camTarget = PUB.GetTarget(camIdx);
+
+ if (camTarget == eTarget.None)
+ {
+ UTIL.MsgE("Target camera not found");
+ return;
+ }
+ PUB.IsProcess[camIdx] = !PUB.IsProcess[camIdx];
+ PUB.log_[logIdx].Add("Process setting value:" + PUB.IsProcess.ToString());
+ }
+
+
+
+ private void btLiveR_Click(object sender, EventArgs e)
+ {
+ if (PUB.setting.CameraIndexR >= 0 && PUB.setting.CameraIndexR != PUB.setting.CameraIndexL)
+ PUB.IsLive[PUB.setting.CameraIndexR] = !PUB.IsLive[PUB.setting.CameraIndexR];
+ }
+ private void toolStripButton6_Click_1(object sender, EventArgs e)
+ {
+ //Use dummy image
+ var bt = sender as ToolStripButton;
+ var camIdx = bt.Tag.ToString().Equals("L") ? PUB.setting.CameraIndexL : PUB.setting.CameraIndexR;
+ var logIdx = camIdx == PUB.setting.CameraIndexL ? 0 : 1;
+ if (PUB.mre[camIdx].WaitOne(100))
+ {
+ PUB.mre[camIdx].Reset();
+ var OrgEImage = new EImageBW8(PUB.OrgImage[camIdx].Width, PUB.OrgImage[camIdx].Height);
+ PUB.OrgImage[camIdx].CopyTo(OrgEImage);
+ PUB.mre[camIdx].Set();
+
+ var f = new fTeach(OrgEImage);
+ f.TopMost = true;
+ f.ShowDialog();
+ OrgEImage.Dispose();
+ }
+ else PUB.log_[logIdx].AddE($"Image is locked");
+ }
+
+
+
+ private void pIvRight_MouseClick(object sender, MouseEventArgs e)
+ {
+ var f = new fviewer(PUB.setting.CameraIndexR);
+ f.ShowDialog();
+ }
+
+
+ private void pivLeft_MouseClick(object sender, MouseEventArgs e)
+ {
+ var f = new fviewer(PUB.setting.CameraIndexL);
+ f.ShowDialog();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Project/fMain.resx b/QRValidation/Project/fMain.resx
new file mode 100644
index 0000000..762de15
--- /dev/null
+++ b/QRValidation/Project/fMain.resx
@@ -0,0 +1,1241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 124, 17
+
+
+ 327, 17
+
+
+ 442, 17
+
+
+ 221, 17
+
+
+ 320, 56
+
+
+ 956, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE1SURBVDhPY/hPIQAbcOn57//T915BwW1rjoFx/oJz//N6
+ VqHgsNxeMA03YN3lp/9vv4YYhAtsuQ6h55/9A8aBidVgPtiADZcegzWDFN1/9///qy8IDOKDcPfu1/9/
+ /vn/v3rt/f9TD38BuwJuwIrT9wka0L79BdiAkuW3MA0A+fnog///V12GKAZ5BxcGGQByDYoXYAbA/Aey
+ AYRBCkE2N256AnY6SDMoUEF8FANAoQ0zAFkzCCNrhhkAor3CczENwGYzuu1JM8+BaQwDQAGITzOyASDs
+ 4huPMAAkATIA3c/YNIdNPAHGKAaAUhUoBghphhng0rTnv71bGKoBoADE5mR0zVgNACUK9BgAGYbudJBG
+ GNY0dEYYAMsgMAyKYxAGhTQIg/wLwiBbQRikGSUdkA/+/wcAgXJEf04PwQkAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEfSURBVDhPYwCB/0QCsGJsACTZt3I3Bq6asAiM08o7iTPg
+ 0dsvcPzi4zcwBrFhBsAAVBsCgARhBvy/wfB/3s3//xfe+v9/ye3/cAOQXQIDcM2vL88GGwCycQFQ87I7
+ //+vvf///8YH/8FiocmlKC55fcoCTKMYALIBpDhpuh4K3n75AYoBfz8fxWLAxR6wASDFMI2vjwRD8C4X
+ BN5sCcHrjdAMgClGwrgA2AXYDEAHv9+u/f/z5dL/35/N+//14RQ4/vXuEHYD/n69+P/3h80QDNSMbsCn
+ W61g/OPVTgIG4ND4/nIhGH97shqLAcAAAvkNl80wzQQNALkCjIFskF9BzgVhkCYYxu4F5KgCYVh0oWOg
+ RhhGMYBcADaAMsDAAAA9c9ORjmwOmQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE1SURBVDhPpZK9S8NQFEf9cxyFgmtAilNFcBDs0snByUGo
+ o7sUvwahg7hUWujQTRw7tJOLH4tkEAchEAhkyWiunGtu47MvWbxw8iD3/g4vL29F/lkqeI1Smbx8KqPH
+ d7mdvcnVw5NyMpgqx/175fBsIjsHp9LtDUsBwSzLJE1TJUkShziOF0RRpCsSR0CwcS4O++Mv2bvLldZN
+ Ls1+LsG1LAvYtgnWL3/4KzMQsAtHwDcjIMgA+MJgglb7qBRwWAho2lZ9YaC3JOCUEdCsC4MJmludUsDv
+ 8R1iFbUC6mM70PVi3tY1fu7pyh0wQbC5q+9UQMME/Lo6KgVhGC4uk10eyi6PQZ/Z1bUN7TsCVsL8Y07Z
+ 4HuBsM16BWAXxFeEbM4REDL0ZUXRI2jorD5/VTFbWcVYUSLfOSkOFdjUoOMAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+ 1062, 17
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACWSURBVDhPY6AK+P+58D+UCQf/7yzDEMMJQAbAMJx/rIBE
+ A5ZIg/HdiQr/V+5c8///Tn+IYcS6BKTx7mSV/zBwZG0D8a6AOR9kyO3bt6FG/P+/csMawgaAnAiyCeTk
+ /xus/q8tVwMbApIC4cmrdxPnChCAGQbVRJoh6IFFliHoYJgaAgNkG4KcTig2hCwDQACkEYJ3/wcAFYfc
+ vQg8mLAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFNSURBVDhPhZKvSwRRFIXnn7BYLBsE2aZB2GAQDcqCBkVw
+ MYhJLK7BokWTLJiMFi3aBIuIGPwRloXVRVE2rKhBEEQE/4Cr3+Xdx5sZxzlwYOfO/c68d9goS5KQG+fL
+ 7cv4QdF7eKfXTXOCWDDo6fvRu/11qyEW5NbjMtigs7dD2X6uyFZnRo5eduXusy7Nj0spbRTSISHMEqDB
+ eLM9Jautshy/7sn1+4n0V3viIWGAwRaAgPFSYzQdwA9g7smx7av2ZdNifURdu6/qXt9ct841gHIIAAih
+ pOavhqRyUfo7gJLWHybVWQKePh/ULmIBNEt5+52aLN+MeXNnk8ErjVkNKJS7dO57IISCgOy+HBkZPHE6
+ kIYRDzRLAKewuxpoMAXyn0gFIAuhILzWXFAIc2zATNjEC8rBHBWH4L+wSTd+ZUAIIreWL7fv5cYJRdEP
+ Fas4M5JsXd4AAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+ 534, 17
+
+
+ 651, 17
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVDhPrZI9CsJAFIRzDi9gaStYCCm8gCgIYgoRISA2
+ gj+9lXYieAJP4CXSC6YSbEQQCxsrk6fzcGI02dg4MMVu3vdlw8b6jmTkNWIOhiaViqzm86iLXk+L/UwJ
+ Hs6aTQl9X8TztOF6LfflMuq0UEiXxOHLcKg9DwbaU7+vPbquyGiUlGDRte2fMHpot1XSyOXeEgpum00E
+ IoT9UknXgClwi0XdSwgIoQhhQBSEz5MYBTwqmgbvWy0VGD+B3xmHEYBspoBv0jxhQshPAe55V6sZ69fr
+ sq1WkwIEC6dc1ivkYFoBj/P5T5iJS4JOR66O81HsEQ6CIClA8BBXhL8NwyzWPLYRZnTKkNfIP2NZD+oj
+ J+O97B4lAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKGSURBVDhPfVNNS2phED74A9z7E/oVbly41IIIXJkGCpkt
+ 1QglDSRq0yIQS4rQRLNQKPGjjpX5VSfxo0isFpkcFHLlVufOvJ1udLk1IMfzvjPP88wzc7if4ubmxnB9
+ fc3n83n+/PzcIB3/Ho1GY6JUKskBQFYsFvvdbhfe3t7g8PCw73Q6Zaenp/Kjo6MJKf17VKtVP8/zo0ql
+ Il5cXCguLy/Fl5cXeH5+huPjYzEWiykQSDw4OBjt7e35pbKPwOKlp6cneH9/h3a7DVg8RMbxw8MDNJtN
+ oP9YPMS2QBRFSCaTsLa2tiSVc1y5XF6mJAKhglarxYA+Aei9Xq8DAWCLYLfbx4uLi8tS+UegYauUfHt7
+ CwgI6XQatre3AeWSIigUCoCtMXav17sqlXEcIgpXV1edTCYzeHx8BEEQIJvNwsrKSsFms6lQmWp9fb2A
+ OQyI7vF94PF4OpgjcGRcr9djcon57u4OgsEguN1ulcTB+Xw+FXoAOFKmjNSQuUqlcsQAXl9fWY90QQzx
+ eBw2Nzf/AmxtbanC4TBTQC3kcjmWzwB2d3eFjY2Nzs7OzgCnwUDIh0AgUCBmAqIWqH9qLZVKgV6vH0xP
+ T3empqYEiYPjUOIqGsmMoicuEkQiEcC5szPcRjg5OWFnZrP5y0SKaDTKxnh/f8+KaVy1Wo15QkCkiM7P
+ zs7Y3cLCwnhubu5rjPv7+0skjzYvFArR4rBFItOob4vFMjaZTEO6o95dLhdMTk5+LRIFHvrJFKPRKDoc
+ DgVOQSQ2UjA7OyvqdDrFzMyMSDlqtfr7Kn+G1WqdQDY5ssvw1yfJiUQCsJh9TPiUazSa/39M/8b8/LwB
+ GXmtVsuj3B8+Z477A5ykGua7KkF4AAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADxSURBVDhPzZE9C4JQFIb9S7U0tbb3M/oDQXNjNdfaGhER
+ 5FRTH1tKSFNLUEQpCXFDE62T52h+dVGopRceEK/vc8/1Cv8T4MRfyg5+rCkdD7kB2qpGZCVWpphShAVc
+ pApoy7KHnIuByRREeTKRwOdPwboJYDN3MSzTrpNSiFj0GBVAG+QTgveYERzzFGDrM+KujuHB5nwBTeBD
+ Rb1PWOcumIc2YexaJOILDCU4Z7KMRbatEzgFV+Dc5KDIK183VcI4DjkC9yfh2dLKeKWIse+lCHAKF3zG
+ s1rqlEbGXbGI4DuuILimKHhlPJKCb0OC3yIIL23FiCaG84ANAAAAAElFTkSuQmCC
+
+
+
+ 757, 17
+
+
+ 203, 56
+
+
+ 850, 17
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE1SURBVDhPY/hPIQAbcOn57//T915BwW1rjoFx/oJz//N6
+ VqHgsNxeMA03YN3lp/9vv4YYhAtsuQ6h55/9A8aBidVgPtiADZcegzWDFN1/9///qy8IDOKDcPfu1/9/
+ /vn/v3rt/f9TD38BuwJuwIrT9wka0L79BdiAkuW3MA0A+fnog///V12GKAZ5BxcGGQByDYoXYAbA/Aey
+ AYRBCkE2N256AnY6SDMoUEF8FANAoQ0zAFkzCCNrhhkAor3CczENwGYzuu1JM8+BaQwDQAGITzOyASDs
+ 4huPMAAkATIA3c/YNIdNPAHGKAaAUhUoBghphhng0rTnv71bGKoBoADE5mR0zVgNACUK9BgAGYbudJBG
+ GNY0dEYYAMsgMAyKYxAGhTQIg/wLwiBbQRikGSUdkA/+/wcAgXJEf04PwQkAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEfSURBVDhPYwCB/0QCsGJsACTZt3I3Bq6asAiM08o7iTPg
+ 0dsvcPzi4zcwBrFhBsAAVBsCgARhBvy/wfB/3s3//xfe+v9/ye3/cAOQXQIDcM2vL88GGwCycQFQ87I7
+ //+vvf///8YH/8FiocmlKC55fcoCTKMYALIBpDhpuh4K3n75AYoBfz8fxWLAxR6wASDFMI2vjwRD8C4X
+ BN5sCcHrjdAMgClGwrgA2AXYDEAHv9+u/f/z5dL/35/N+//14RQ4/vXuEHYD/n69+P/3h80QDNSMbsCn
+ W61g/OPVTgIG4ND4/nIhGH97shqLAcAAAvkNl80wzQQNALkCjIFskF9BzgVhkCYYxu4F5KgCYVh0oWOg
+ RhhGMYBcADaAMsDAAAA9c9ORjmwOmQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE1SURBVDhPpZK9S8NQFEf9cxyFgmtAilNFcBDs0snByUGo
+ o7sUvwahg7hUWujQTRw7tJOLH4tkEAchEAhkyWiunGtu47MvWbxw8iD3/g4vL29F/lkqeI1Smbx8KqPH
+ d7mdvcnVw5NyMpgqx/175fBsIjsHp9LtDUsBwSzLJE1TJUkShziOF0RRpCsSR0CwcS4O++Mv2bvLldZN
+ Ls1+LsG1LAvYtgnWL3/4KzMQsAtHwDcjIMgA+MJgglb7qBRwWAho2lZ9YaC3JOCUEdCsC4MJmludUsDv
+ 8R1iFbUC6mM70PVi3tY1fu7pyh0wQbC5q+9UQMME/Lo6KgVhGC4uk10eyi6PQZ/Z1bUN7TsCVsL8Y07Z
+ 4HuBsM16BWAXxFeEbM4REDL0ZUXRI2jorD5/VTFbWcVYUSLfOSkOFdjUoOMAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+ 1168, 17
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACWSURBVDhPY6AK+P+58D+UCQf/7yzDEMMJQAbAMJx/rIBE
+ A5ZIg/HdiQr/V+5c8///Tn+IYcS6BKTx7mSV/zBwZG0D8a6AOR9kyO3bt6FG/P+/csMawgaAnAiyCeTk
+ /xus/q8tVwMbApIC4cmrdxPnChCAGQbVRJoh6IFFliHoYJgaAgNkG4KcTig2hCwDQACkEYJ3/wcAFYfc
+ vQg8mLAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFNSURBVDhPhZKvSwRRFIXnn7BYLBsE2aZB2GAQDcqCBkVw
+ MYhJLK7BokWTLJiMFi3aBIuIGPwRloXVRVE2rKhBEEQE/4Cr3+Xdx5sZxzlwYOfO/c68d9goS5KQG+fL
+ 7cv4QdF7eKfXTXOCWDDo6fvRu/11qyEW5NbjMtigs7dD2X6uyFZnRo5eduXusy7Nj0spbRTSISHMEqDB
+ eLM9Jautshy/7sn1+4n0V3viIWGAwRaAgPFSYzQdwA9g7smx7av2ZdNifURdu6/qXt9ct841gHIIAAih
+ pOavhqRyUfo7gJLWHybVWQKePh/ULmIBNEt5+52aLN+MeXNnk8ErjVkNKJS7dO57IISCgOy+HBkZPHE6
+ kIYRDzRLAKewuxpoMAXyn0gFIAuhILzWXFAIc2zATNjEC8rBHBWH4L+wSTd+ZUAIIreWL7fv5cYJRdEP
+ Fas4M5JsXd4AAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
+ YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
+ 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
+ bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
+ VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
+ c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
+ Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
+ mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
+ kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
+ TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+
+
+
+ 17, 56
+
+
+ 106, 56
+
+
+ 437, 56
+
+
+ 142
+
+
+
+ AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA
+ IACoJQAA7h4AAFBQAAABACAA6GcAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAACvGwAArxsAAAAA
+ AAAAAAAAnIt4FJyLeD2ci3g7nIt4D5yLeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACci3gAnIt4D5yL
+ eDuci3g9nIt4FJyLeD2ci3hcnIt4MpyLeA2ei3cAykAFAOuneQrvs4Ya77OGGuuneQrJOgAAnot2AJyL
+ eA2ci3gynIt4XJyLeD2ci3g8nIt4NJyLeAD2y6EA77WJGPXGnHH40ai9+tev2/rXr9v40ai99cabcO+1
+ iBj2y6EAnIt4AJyLeDSci3g8nIt4D5yLeA3Ws5AA8bqPLPjQp7/94br9/+fB///owv//6ML//+fB//3h
+ uv340Ke+8bqPLNaykACci3gNnIt4DwAAAADxuY0A77SIF/jQp73+5b///+nD///pw//+5sD//ubA///p
+ w///6cP//uW+//jQpr3vtIcX8bmNAAAAAADwsIMA/eO9APTFm3D94br+/+nD//3mwP/pyqX/1a6L/9au
+ i//pyqX//ebA///pw//94br99MWbcP3juwDuroMA/+rED/zfuTr41KzF/uW////nwf/u0q7/z6iG/8uj
+ gf/Lo4H/z6iG/+/Srv//58H//uW///jUrMX84Lk6/+rED//1zw7ox59K5bSK5PTEmf/wwZf/moFp/3Vl
+ Vf93Z1b/d2dW/3VlVP+agWn/8MGX//TEmf/ltIrk6cefSv/1zw60eEwAr3NHGtuhdNvwt4v/7bSJ/35j
+ T/9HOzL/Sz40/0o9NP9LPzb/gGVR/+20iP/wt4v/26B02q9zRxq0eEwAtXpOAKBkOAvUm2+977aK//K4
+ jP+1jGz/U0U5/0k9M/9cUUn/ure0/9rBrv/wt4z/77aK/9SabrygZDcKtXpOALV6TwDss4YAx41hcueu
+ gv7xuIz/7LSJ/7WMbP9/ZE//mYJw//n18P/75tX/8bmN/+eugv7HjGBy6rGFALV7TgAAAAAAuH1RALJ3
+ SxjTmW2/7bOH//G4jP/yuIz/7bWJ/+22i//yw5//8r+X/+yzh//TmW2/sndKGLh9UQAAAAAAnIt4D5yL
+ eA26jmsAun9TLtOZbcDnroL977aK//G4jP/xt4v/77WJ/+eugf3TmW3Aun9TLrqOagCci3gNnIt4D5yL
+ eDyci3g0nIt4AM6TaACzeEwYx41hcdWbb73boXXa26F12tWbb7zHjWFxs3hLGM2TaACci3gAnIt4NJyL
+ eDyci3g9nIt4XJyLeDKci3gNm4h0ADYAAAChZjoKsHRIGq90SBqhZjoKMwAAAJuIdQCci3gNnIt4MpyL
+ eFyci3g9nIt4FJyLeD2ci3g7nIt4D5yLeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACci3gAnIt4D5yL
+ eDuci3g9nIt4FA/wAAAMMAAAMAwAACAEAADAAwAAwAMAAAAAAAAAAAAAgAEAAIABAADAAwAAwAMAACAE
+ AAAwDAAADDAAAA/wAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAACvGwAArxsAAAAAAAAAAAAAnIt4AJyL
+ eAici3gOnIt4DpyLeAqci3gAnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACci3gAnIt4AJyLeAqci3gOnIt4DpyLeAici3gAnIt4CJyLeICci3iGnIt4g5yLeGGci3gEnIt4AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACci3gAnIt4BJyLeGGci3iDnIt4hpyL
+ eICci3gInIt4DpyLeISci3gYnIt4DJyLeAmci3gAnIt4AAAAAADspHQA5pxsAu2sfhDtr4Ib7a+CG+2s
+ fxDmm20C6qJ1AAAAAACci3gAnIt4AJyLeAmci3gMnIt4GJyLeISci3gOnIt4DpyLeIGci3gMnIt4AAAA
+ AADpoHEA8buPAO6vgg/xuY1Q88KXm/bJn8n3zaTc982k3PbJn8nzwpeb8biNT+6ugQ/xuo8A6aBvAAAA
+ AACci3gAnIt4DJyLeIGci3gOnIt4CpyLeGGci3gJnIt4AO6wgwDffk4A8LaKOfTEmrX51a32/eG6//7m
+ wP//6ML//+jC//7mwP/94br/+dWs9vTEmbTwtoo5435FAO+wggCci3gAnIt4CZyLeGGci3gKnIt4AJyL
+ eASci3gA5K2FAP//2QDwuI1N9syi3/3hu///6cP//+jC///owv//6ML//+jC///owv//6ML//+jD//3h
+ uv/2y6Le8LiMTP/zygDjrYUAnIt4AJyLeASci3gAAAAAAAAAAADxt4kA8bmOAPC2ijj2y6Ld/uS+///p
+ w///6ML//+jC///owv//6cP//+nD///owv//6ML//+jC///pw//+5L7/9suh3fC2ijjwuY4A8bmIAAAA
+ AAAAAAAAAAAAAAAAAADwt4oA7q6BDvTEmrL94br//+nD///owv//6ML//+nC//rhu//y1rH/8tax//rh
+ u///6cL//+jC///owv//6cP//eG6//TEmbHtroAN8LeKAAAAAAAAAAAAAAAAAPG2iwDxu5AA8biNT/nV
+ rfb/6cP//+jC///owv/+5sD/6cmk/8+mg//Hmnj/x5p4/9Cmg//pyaX//ubB///owv//6ML//+jD//nV
+ rPXwuIxP8buPAO+ziwAAAAAA/+jCAP/owgn+4boN9cWbnP3iu///6cP//+nD///qxP/tzqn/y598/8ia
+ eP/Im3j/yJt4/8iaeP/Ln3z/7c6p///qxP//6cP//+nD//3iu//1xZuc/uG6Df/owgn/6MIA/+jCBf/o
+ w2H74ryL8s6l4/vbs//73LX//Ny1//TXsf/NtJX/xKqM/8WrjP/Fq4z/xauM/8WrjP/Eqoz/zrSV//TX
+ sf/83LX/+9y1//vbs//yzqXj++K8i//ow2H/6MIF/+jCAP//3AfGlmwn0Zlt3/C4jP/xuY3/87qO/86g
+ e/9cTUD/U0Y7/1RHPP9URzz/VEc8/1RHPP9TRjv/XE1A/8+ge//zuo7/8bmN//C4jP/RmW3fxpZsJv//
+ 3Af/6MIAAAAAALV6TgCrcEMbz5Vp3fC2iv/wt4v/8riM/82eef9WRzv/TD81/01ANv9NQDb/TUA2/0w/
+ Nf9KPTP/VUU5/86eef/yuIz/8LeL/++2iv/PlWncq29EG7V6TgAAAAAAAAAAALV6TgCnbEARy5Flye61
+ if/wt4v/8biL/+KthP9tWEf/Sz41/01ANv9NQDb/TD81/1RIPv9wZl//gW1d/+Ksg//xuIv/8LeL/+60
+ iP/LkWXIqGxAELZ6TgAAAAAAAAAAALR5TgBmKQACwodbnOiugv/wuIz/8LeL//G4i/+yimv/VEU6/0s+
+ Nf9MPzb/TUA2/6SdmP/09PT/8OXd//G+l//wt4r/8biM/+iugv/Ch1ubXx8AAbZ5TAAAAAAAAAAAALZ6
+ TwC6gFQAt3xQUtmgdPfxuIz/8LeL//C3i//ttYn/sopr/25YR/9XRzv/XExA/9HLxv///////vr3//PG
+ o//wtor/8biM/9mgdPa3fFBRun9TALV8TgAAAAAAAAAAAAAAAAC1eU0Aq29DD8WLX7Xor4P/8biM//C3
+ i//wt4v/8biM/+KthP/Onnn/z595/+zFp//76tz/99rE//G6kP/xt4v/6K+D/8WLXrSrb0MPtXpNAAAA
+ AAAAAAAAAAAAAAAAAACydkwAuX9SALR5TTvOlGjg7LOH//G4jP/wt4v/8LeL//G4i//yuYz/8riM//C3
+ i//wuI3/8LeL//G3i//ss4f/zpRo37R5TTq5flIAtHdLAAAAAAAAAAAAnIt4AJyLeASci3gAsHlOAP//
+ /wC3fFBRzpRo4Oivg//xuIz/8LiM//C3i//wt4v/8LeL//C3i//wt4v/8biM/+ivg//OlGjgt3xQUP//
+ /wCveE8AnIt4AJyLeASci3gAnIt4CpyLeGGci3gJnIt4AK5yRACISxcBtHlNO8WLX7baoHT26K+D/+60
+ iP/vtor/77aK/+60iP/or4P/2qB09sWLX7W0eU06gUETAa1wRACci3gAnIt4CZyLeGGci3gKnIt4DpyL
+ eIGci3gMnIt4AAAAAACYXDAAun9TAKpwRA+3fFBRwohcm8uRZcjPlWnbz5Vp28uRZcjCiFybt3xQUKtv
+ Qw+6flMAl1stAAAAAACci3gAnIt4DJyLeIGci3gOnIt4DpyLeISci3gYnIt4DJyLeAmci3gAnIt4AAAA
+ AACbYDMAkFYpAqdrPxCrcEQaq3BEGqZrPxCRUygCml0xAAAAAACci3gAnIt4AJyLeAmci3gMnIt4GJyL
+ eISci3gOnIt4CJyLeICci3iGnIt4g5yLeGGci3gEnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3gAnIt4BJyLeGGci3iDnIt4hpyLeICci3gInIt4AJyLeAici3gOnIt4DpyL
+ eAqci3gAnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACci3gAnIt4AJyL
+ eAqci3gOnIt4DpyLeAici3gAh//hAAP/wAAHgeAAHgB4ABwAOAC4AB0A8AAPAOAABwDgAAcAgAABAAAA
+ AACAAAEAwAADAMAAAwDAAAMA4AAHAOAABwDwAA8AuAAdABgAGAAeAHgAB4HgAAP/wACH/+EAKAAAACAA
+ AABAAAAAAQAgAAAAAAAAEAAArxsAAK8bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeCqci3hqnIt4apyL
+ eGqci3hrnIt4LJyLeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeCyci3hrnIt4apyLeGqci3hqnIt4KpyLeACci3gAnIt4aZyL
+ eKqci3honIt4a5yLeGyci3gsnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACci3gAnIt4LJyLeGyci3hrnIt4aJyLeKqci3hpnIt4AJyL
+ eACci3hqnIt4a5yLeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7bCCAP+2zgDvsIQI7rCDFO6w
+ hBvusIQb7rCDFO+whAj/xnMA7a+FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACci3gAnIt4a5yL
+ eGqci3gAnIt4AJyLeGqci3hrnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAA8LOGAO+xgwbvtIgy8LiMdvK9
+ kq7zwpfN9MSa3fTEmt3zwpfN8r2SrvC4i3bvtIcx7q+DBu+xhgAAAAAAAAAAAAAAAAAAAAAAAAAAAJyL
+ eACci3hrnIt4apyLeACci3gAnIt4apyLeGuci3gAAAAAAAAAAAAAAAAA8bWJAPG0hwHvtYky8bqPnPXH
+ nej51Kz+/N63//3jvP/+5sD//ua///3jvf/83rf/+dSs/vXGnOjxuo+c77WIMfCzhQHwtYgAAAAAAAAA
+ AAAAAAAAnIt4AJyLeGuci3hqnIt4AJyLeACci3gsnIt4LJyLeAAAAAAAAAAAAO+1igDvtIgG8LaKYvTD
+ md7617D//uW////pw///6cP//+jC///owv//6ML//+jC///pw///6cP//uW///rXr//0w5je8LaKYe+z
+ hgbvtYgAAAAAAAAAAACci3gAnIt4LJyLeCyci3gAAAAAAAAAAAAAAAAAAAAAAAAAAADvtYoA7rGGBfC4
+ jHX1yZ/y/eK7///pw///6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+nD//3h
+ u//1yZ/y8LeLdO6yhgXvtooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8beMAPWO
+ bwDwtoph9cif8f7kvf//6cP//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+nD//7kvf/1yJ7w8LaKYN6mZgDwuIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPO3
+ iwDwt4oA77SIMPTDmNz94br//+nD///owv//6ML//+jC///owv//6cP//+nD///pw///6cP//+nD///p
+ w///6ML//+jC///owv//6ML//+nD//3huv/zwpjc77WIL/C3iwDxuYcAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA8beLAO+vggXxuo+a+tew///pw///6ML//+jC///owv//6ML//+jC//fdt//oyKP/3ruX/967
+ l//oyKP/9923///owv//6ML//+jC///owv//6ML//+nD//rXr//xuo+Z7a+BBfC3iwAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADwt4sA77SIMvXGnOf+5b///+jC///owv//6ML//+jC//7mwf/pyaT/zaOA/8SX
+ df/DlXP/w5Vz/8SXdf/No4D/6cmk//7nwf//6ML//+jC///owv//6ML//uW///XGnOfvs4cx8LeLAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPG5jgDwt4t0+dSs///pw///6ML//+jC///owv//6ML/6Mij/8aZ
+ d//Ck3L/w5Ry/8OUcv/DlHL/w5Ry/8KTcv/GmXf/6Mik///owv//6ML//+jC///owv//6cP/+dSr//C2
+ i3Pxuo0AAAAAAAAAAAAAAAAA/+jCAP/owiz/6MJs/+fBbPnUq8j94bv//+nD///ow///6MP//+nD//3m
+ wP/mxKD/3biV/965lf/euZX/3rmV/965lf/euZX/3rmV/924lf/mxKD//ebA///pw///6MP//+jD///p
+ w//94bv/+dSrx//owWz/6MJs/+jCLP/owgD/6MIA/+jCLP/pw2v22rR537SL5/PIn//2y6L/9sui//bL
+ ov/3zKL/yquK/5aFcP+XhnD/l4Zw/5eGcP+XhnD/l4Zw/5eGcP+XhnD/l4Zw/5aFcP/Kq4v/98yi//bL
+ ov/2y6L/9sui//PIn//ftIvn9tu0ef/pw2v/6MIs/+jCAAAAAAAAAAAAs3hLAKxvQxvDiFvd7LOG//C2
+ iv/wtor/8LaK//G3i/+VdFr/Rzsy/0k9M/9JPTP/ST0z/0k9M/9JPTP/ST0z/0k9M/9JPTP/Rzsy/5V0
+ W//xt4v/8LaK//C2iv/wtor/7LKG/8OIXNyrb0Mbs3hMAAAAAAAAAAAAAAAAAAAAAAC1ek4ArXJGG8WK
+ Xt3ttIj/8LeL//C3i//wt4v/8riM/5d2XP9LPjX/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9LPjX/l3Zd//K4jP/wt4v/8LeL//C3i//ttIj/xIpe3a1yRhu1ek4AAAAAAAAAAAAAAAAAAAAAALV6
+ TgCtckUVwohczuqxhf/wt4v/8LeL//C3i//yuYz/sYlq/05BN/9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9LPjT/Sz40/00/Nf+xiWr/8rmM//C3i//wt4v/8LeL/+qxhf/CiFzNrXJGFLZ6TgAAAAAAAAAAAAAA
+ AAAAAAAAtXlOAKtvRAi8glau5Kt///G4jP/wt4v/8LeL//G4jP/ap3//ZlJD/0s/Nf9NQDb/TUA2/01A
+ Nv9NQDb/T0I4/4B3cP+vqqb/oZOJ/9uqhP/xuIv/8LeL//C3i//xuIz/5Kt//7yCVa2scEIHtnpNAAAA
+ AAAAAAAAAAAAAAAAAACwd08Aun9SALZ7T3nZn3P/8biM//C3i//wt4v/8LeL//G3i/+yiWr/VUY6/0s/
+ Nf9NQDb/TUA2/0s+NP92bGT/7evq///////+/Pr/9dG1//C2iv/wt4v/8LeL//G4jP/Yn3P/tntPd7h/
+ UwC7dUYAAAAAAAAAAAAAAAAAAAAAAAAAAAC1e04AsXZKNciOYunttIj/8LeL//C3i//wt4v/8LeL/+21
+ if+xiWr/ZlJD/05BN/9LPzX/SDsx/5CIgv/+/v7////////////43sv/8LaK//C3i//wt4v/7bSI/8iO
+ Yumxdko0tXpOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV6TgCscUUGun9Tn92kd//xuIz/8LeL//C3
+ i//wt4v/8LeL//G3i//ap4D/sopq/5l3Xf+Ydlz/w6GG//vx6v///////vj0//TMrP/wtor/8LeL//G4
+ jP/do3f/un9Tna1xQwa2ek0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuHpLALR5TgCyd0szxIld3+mv
+ g//xuIz/8LeL//C3i//wt4v/8LeL//G4jP/yuYz/8riM//K4jP/xuIz/88Of//bSt//zyKb/8LiM//C3
+ i//xuIz/6K+D/8SJXd6yd0sytHlNALV8TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtntPAKpu
+ QAG1ek5ly5Fl8+uyhv/xuIz/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wtor/8LaJ//C2
+ iv/wt4v/8biM/+uyhv/LkWXytXlNZKBrNAC1e00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAtXpOALJ3Sge2e096y5Fl8+mwhP/xuIz/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//G4jP/psIT/y5Fl87Z7T3mydUkGtXlNAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyL
+ eCyci3gsnIt4AAAAAAAAAAAAs3dKALF1SAe1ek1lxIpe4N2jd//ttIj/8biM//G4jP/wt4v/8LeL//C3
+ i//wt4v/8biM//G4jP/ttIj/3aN3/8SKXt+1ek1ksHZIB7J4SwAAAAAAAAAAAJyLeACci3gsnIt4LJyL
+ eACci3gAnIt4apyLeGuci3gAAAAAAAAAAAAAAAAAsXdLAK50SQKyd0szuX9TncmOYunZn3P+5Kt//+qx
+ hf/ttIf/7bSH/+qxhf/kq3//2Z9z/siOYum6f1OdsndKM692RwKyeEoAAAAAAAAAAAAAAAAAnIt4AJyL
+ eGuci3hqnIt4AJyLeACci3hqnIt4a5yLeAAAAAAAAAAAAAAAAAAAAAAAAAAAAK90SQCscEUGsXZKM7Z7
+ T3e9glaswohbzMSKXtvEil7bwohbzL2CVqy2e092sXZKM61wRAawdEgAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACci3gAnIt4a5yLeGqci3gAnIt4AJyLeGqci3hrnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACmcEQA/2kzAKpwRAetcUUUrXJGGq1yRhqscUUUq29CB7mkeACqbEAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAJyLeACci3hrnIt4apyLeACci3gAnIt4aZyLeKqci3honIt4a5yLeGyci3gsnIt4AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACci3gAnIt4LJyLeGyci3hrnIt4aJyLeKqci3hpnIt4AJyLeACci3gqnIt4apyLeGqci3hqnIt4a5yL
+ eCyci3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAJyLeACci3gsnIt4a5yLeGqci3hqnIt4apyLeCqci3gAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////gf//gYH/
+ /4Gf+B/5n8AD+Z8AAPmeAAB5/AAAP/wAAD/4AAAf8AAAD/AAAA/wAAAPgAAAAYAAAAHgAAAH4AAAB+AA
+ AAfgAAAH8AAAD/AAAA/wAAAP+AAAH/gAAD/8AAA/ngAAeZ8AAPmfwAP5n/gf+YH//4GB//+B/////ygA
+ AAAwAAAAYAAAAAEAIAAAAAAAACQAAK8bAACvGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAnIt4AJyLeFqci3idnIt4npyLeJ2ci3idnIt4nZyLeKGci3henIt4AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeF6ci3ihnIt4nZyLeJ2ci3idnIt4npyL
+ eJ2ci3hanIt4AAAAAAAAAAAAnIt4AJyLeJqci3jdnIt4nJyLeJ2ci3idnIt4nZyLeKGci3henIt4AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeF6ci3ihnIt4nZyL
+ eJ2ci3idnIt4nJyLeN2ci3ianIt4AAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwuosA8LuLAfG3
+ jAjxt4sQ8LaLFfC3ixnwt4sZ8LaLFfG3ixDxto0H8LeTAfC3kQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyL
+ eJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwu48A8JBpAPG1
+ iwrvtYk277WJavC2i5vwt4u88LeM0vC4jOHwuIzh8LeM0vC3i7zwtoub77WJau+1iDbxuIgK8LGUAPC3
+ hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAA
+ AAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8bWNAPaw
+ mADwt4sX8LaKXfC3i7PyvJHk88OY/PbLov/506r/+tmx//vctP/73LT/+tmx//nTq//2y6L/88KX/PK8
+ keTwt4qz8LaKXPC3ihb3v4EA8biIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyL
+ eJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADxuY0A8rmNCvC2ilTwt4u+8r6T+PfOpf/73LX//uW////owv//6ML//+nD///pw///6cP//+nD///o
+ wv//6ML//uW///vctf/3zqX/8r+T+PC3i73wtopT8biLCfG4jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyLeF6ci3henIt4AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA97uIAOuzjADwtoob8LaKkfG8ke/3zaT//eC5///owv//6cP//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///pw///6MH//eC5//fNpP/xvJDv8LaKj/G2iRrus4wA97uEAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeF6ci3henIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADrjKAA8b2IAPC3jCrwt4u088KX+/vas///58H//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///nwf/72rL/88KX+/C3
+ irPvtoop8reFAMmq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxt4sA77aLKfC3i8D1xpz//eG6///pw///6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6cP//eG6//XGnP/wt4u+77aKKPG3igDut4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC3jADwtosb8LeLsfXFm//94rv//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC//3iu//0xZv/8LaLr++2jBrvt40AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8beLAPK4jAjwtoqM88GX/P3g
+ uf//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///ow//94Lj/88GW/PC2iovxuooH8LiLAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD1t4sA7reKAPC2
+ ilDxu5Du+9qy///pw///6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6cP//+nD///q
+ xP//6sT//+nD///pw///6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6cP/+9mx//G7
+ j+3wt4pP7raMAPS5hgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADxt4sA8LaKFvC3i7z3zaT//+fB///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+nD//7n
+ wf/23Lf/7c+q/+jJpP/oyaT/7c+q//bct//+58H//+nD///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+fB//fNo//wt4u677eKFvC3igAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADvt4sA8LaKXfK/lPj94Lr//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML/89iy/9y4lP/NooD/x5p4/8SWdP/ElnT/x5p4/82jgP/duJT/9Niy///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC//3guf/yvpP38LaKW++3iwDwt4sAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPG3jQDxt4wK8LeLs/fOpf//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC//7mwP/pyaX/zKF//8OVc//DlXP/xJZ0/8SWdP/ElnT/xJZ0/8OVc//ElXP/zKF//+nK
+ pf/+5sD//+jC///owv//6ML//+jC///owv//6ML//+jC///owv/3zqX/8LaKsfC0jAnws40AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC3iwDwtYo28byQ4/vctP//6cP//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC/+rKpv/JnHr/w5Vz/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/w5Vz/8mdev/qy6b//+jC///owv//6ML//+jC///owv//6ML//+jC///pw//727T/8byQ4u+1
+ ijXvtowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA76uAAPC9kQDvtIdn88KX/f7l
+ v///6ML//+jC///owv//6ML//+jC///owv//6cP/89ey/8ygfv/DlHL/w5Vz/8OVc//DlXP/w5Vz/8OV
+ c//DlXP/w5Vz/8OVc//DlXP/w5Vz/8OUcv/MoX7/89ey///pw///6ML//+jC///owv//6ML//+jC///o
+ wv/+5b7/88KX/e+zh2XxvpQA7al6AAAAAAAAAAAAAAAAAAAAAAAAAAAA/+jCAP/owl7/6MKh/+jCnf/o
+ wp783bbP/Ny1///pw///6cP//+nD///pw///6cP//+nD///pw///6sT/+N23/+vKpf/ryqb/68qm/+vK
+ pv/ryqb/68qm/+vKpv/ryqb/68qm/+vKpv/ryqb/68qm/+vKpv/ryqX/+N24///qxP//6cP//+nD///p
+ w///6cP//+nD///pw///6cP//Ny1//zdts//6MKe/+jCnf/owqH/6MJe/+jCAAAAAAAAAAAA/+jCAP/o
+ wl7/6MKh/+jCnfvjvaXmw5vs8Myj//nUrP/51Kz/+dSs//nUrP/51Kz/+dSs//rVrP/qyqT/vqqO/7il
+ i/+4pov/uKaL/7imi/+4pov/uKaL/7imi/+4pov/uKaL/7imi/+4pov/uKaL/7imi/+4pYv/v6qO/+vK
+ pP/61az/+dSs//nUrP/51Kz/+dSs//nUrP/51Kz/8Myj/+bDm+z8472l/+jCnf/owqH/6MJe/+jCAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtHhMALR4TBa1eU3U3KJ1//C3i//wtor/8LaK//C2iv/wtor/8LaK//K4
+ jP+/knD/U0Q5/0o9NP9KPjT/Sj40/0o+NP9KPjT/Sj40/0o+NP9KPjT/Sj40/0o+NP9KPjT/Sj40/0o+
+ NP9KPTT/VEQ5/7+Tcf/yuIz/8LaK//C2iv/wtor/8LaK//C2iv/wt4v/3KF1/7V5TdO0eEwWtHhMAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtXpOALV6Thm2e0/g4Kd6//G4jP/wt4v/8LeL//C3
+ i//wt4v/8LeL//O5jf+yimr/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/7KKa//zuY3/8LeL//C3i//wt4v/8LeL//C3i//xuIz/4KZ7/7Z7
+ T9+1ek4ZtXpOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtXpOALV6Thm2e0/g4Kd7//G4
+ jP/wt4v/8LeL//C3i//wt4v/8LeL//O5jf+zi2v/TkE2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TkE3/7SLa//zuY3/8LeL//C3i//wt4v/8LeL//C3
+ i//xuIz/4Kd7/7Z7T9+1ek4ZtXpOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtXpOALV6
+ Tha2e0/V3qR4//G4jP/wt4v/8LeL//C3i//wt4v/8LeL//O5jP/AlHL/VkY6/0w/Nv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9MPzb/Vkc7/8CUcv/zuYz/8LeL//C3
+ i//wt4v/8LeL//C3i//xuIz/3aR4/7Z7T9O1ek4WtXpOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAtXpOALV6TRC1ek6+155y//C3i//wt4v/8LeL//C3i//wt4v/8LeL//G4jP/Zpn//Z1ND/0s/
+ Nf9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9MPzX/Sj0z/0k8Mv9JPDL/Z1NE/9qn
+ gP/xuIz/8LeL//C3i//wt4v/8LeL//C3i//wt4v/151x/7Z7T7y2e08QtnpOAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtXlOALZ5Tge1eU2azpRo//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//utor/kHFZ/0w/Nf9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/0w/Nf9XS0L/gXhx/5KK
+ hP94b2f/l3df/+61if/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/zpRo/7R6TZm1ekwHtXpNAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAs3lPALd7TQCzeExtw4ld/+20iP/wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//yuIz/0J96/2NQQf9MPzX/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TD81/1pO
+ Rf+4sq7/9vX0///////w7+7/69C8//C5jv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//ts4j/w4ld/rN4
+ TGuyfFIAuHhKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV6TgCzeEw7u4BU5uKo
+ fP/xuIz/8LeL//C3i//wt4v/8LeL//C3i//wt4v/77aL/7OKbP9ZSTz/TD81/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/Sz40/5OLhf/6+fn//////////////////vj1//TIp//wtor/8LeL//C3i//wt4v/8LeL//G4
+ jP/hqHz/u4BU5bN4TDm1e04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALd6
+ UAC2eU8MtXpOuNGYbP/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+20if+yimr/YlBB/0w/
+ Nf9LPzX/TD82/01ANv9NQDb/Sj0z/7GsqP////////////////////////////bSt//wton/8LeL//C3
+ i//wt4v/8LeL//C3i//Rl2v/tXpOt7V8Tgu2fk8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAC2eU0AtHlNY7+FWfnor4L/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//vt4v/z596/5BxWf9oVET/V0c7/09CN/9PQjf/VUU5/6+jmv/+/v3//////////////////vv4//TM
+ rP/wton/8LeL//C3i//wt4v/8LeL/+eugv+/hFj5tHlMYrN6TwC2ek0AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2ek4AtnlNGbZ7T8HRl2v/77aK//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8riM/+62iv/bp4D/wZVz/7WMbP+1jGz/wZRy/+Czkf/66+D///7+////
+ /////fz/+ePR//G7kv/wt4v/8LeL//C3i//wt4v/77aK/9CWav+2e0+/tHlNGLV6TgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4ekkAsnlRALR4TFa7gFTw4Kd6//G4
+ jP/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//xuIz/8rmM//O5jf/zuY3/8rmM//G3
+ i//ywJr/99e///jfzP/207n/8b2U//C3iv/wt4v/8LeL//C3i//xuIz/4KZ6/7uAVO+0eU1UtXhNALV8
+ TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtXpOALR5
+ Twm0eU2Sw4hc/eivg//wuIv/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4r/8LaK//C2if/wtor/8LeL//C3i//wt4v/8LeL//C3jP/or4P/w4hc/LR5
+ TZC1eUwJtXpNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAALZ7TQC2ek0etXpOuMiOYv/psIT/8LeM//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LiM/+mw
+ hP/IjWH/tXpOtrR5TB21eU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0eE0AtXpOMLZ6T8bIjmL/6K+D//G4jP/wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//xuIz/6K+D/8iOYv+1e07FtXlOLrN4TAC3e08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8elcAr3hFALV5TS+1ek66xIld/OGn
+ e//vtor/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL/++2iv/hp3v/xIld+7V6Tbm0ek0utINTALVvRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeF6ci3henIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAu31GAK94
+ VQC1ek0dtHlNlLuAVfHRl2v/6K6C//C3i//xuIz/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//G4jP/wt4v/6K6C/9GXav+7gVTxtHlNkrR5TBy0f08AtnNKAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAnIt4AJyLeF6ci3henIt4AAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAC1eFAAtHlPC7R5TVa1e0/Av4RY+NKYbP/iqX3/7bSI//C3i//wt4v/8biM//G4
+ jP/xuIz/8biM//C3i//wt4v/7bSI/+Kpff/SmG3/v4RY+LZ6Tr+0eUxVtXtNCrR6TgAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsnxQAK+CVgGzek4YtHlNX7V6Tra7gVXlxIld/M6U
+ aP/XnXH/3aN3/9+mev/fpnr/3aN3/9edcf/OlGj/w4ld/LuBVeW1ek61tHlNXrV4TReweVUAs3hPAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyL
+ eJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5ek4A////ALR5
+ SwuzeEs4s3hMabR5TZe1ek66tntP07Z7T9u2e0/btntP0rV6Trq0eU2Xs3hMaLN4TDe0fEwK/1P/ALV6
+ TgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAA
+ AAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACugVUArINXALN6TQe1ek0PtXpOFrV6Thi1ek4YtXpOFrR6TQ+0eEwHunZKALh3
+ SwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyL
+ eJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAnIt4AJyLeJ2ci3idnIt4AAAAAAAAAAAAnIt4AJyLeJqci3jdnIt4nJyLeJ2ci3idnIt4nZyL
+ eKGci3henIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4AJyL
+ eF6ci3ihnIt4nZyLeJ2ci3idnIt4nJyLeN2ci3ianIt4AAAAAAAAAAAAnIt4AJyLeFqci3idnIt4npyL
+ eJ2ci3idnIt4nZyLeKGci3henIt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAnIt4AJyLeF6ci3ihnIt4nZyLeJ2ci3idnIt4npyLeJ2ci3hanIt4AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD///////8AAP///////wAAwD////wDAADAP////AMAAM//////8wAAz//gB//z
+ AADP/4AB//MAAM/+AAB/8wAAz/gAAB/zAADP8AAAD/MAAP/gAAAH/wAA/8AAAAP/AAD/gAAAAf8AAP8A
+ AAAA/wAA/wAAAAD/AAD+AAAAAH8AAP4AAAAAfwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAAwAAAAAAD
+ AADAAAAAAAMAAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPwA
+ AAAAPwAA/AAAAAA/AAD8AAAAAD8AAP4AAAAAfwAA/gAAAAB/AAD/AAAAAP8AAP8AAAAA/wAA/4AAAAH/
+ AAD/wAAAA/8AAP/gAAAH/wAAz/AAAA/zAADP+AAAH/MAAM/8AAB/8wAAz/+AAf/zAADP//AP//MAAM//
+ ////8wAAwD////wDAADAP////AMAAP///////wAA////////AAAoAAAAUAAAAKAAAAABACAAAAAAAABk
+ AACvGwAArxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOazgArwuItE8baMfvG4
+ i6Hwt4vA8LaL2vC3i+zwt4v+8LeL/vC3i+zwtova8LeLwPG4i6Hxtox+8LeNQ+azgAoAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8rOMFPC3
+ i2fwt4u98LeL+fC3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL+fC3irzwtotl8ryGEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA8reLOfC4jKjwt4v68LeL//C3i//wuIv/88GW//bLov/51az/+9y0//3ivP/+5b///+jC///o
+ wv/+5b///eO8//vctP/51a3/9sui//PAlf/wuIv/8LeL//C3i//wt4v68LeKpvG1izcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA8baNOPC4i8Hwt4v/8LeL//C3jP/1x53/+tev//7lvv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC//7lvv/61q//9ced//C3
+ jP/wt4v/8LeL//C3i7/xuIk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9LyQF/C3i6nwt4v+8LeL//G5jv/3z6b//eO8///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//eO8//fOpf/xuo7/8LeL//C3i/7wt4qm87mLFgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPG3i1jwt4vs8LeL//C4
+ jf/3zqX//uW+///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC//7lvv/3zaX/8LiM//C3
+ i//wt4vq8LeKVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+/
+ gATvtouT8LeL//C3i//0xZv//eG7///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv/94br/9MSZ//C3i//wt4v/8baKkP+/gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADttpIO8LeMvvC3i//wuIz/+dOq///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML/+NKq//C4jP/wt4v/8LeKvOux
+ iQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA76+PEPC4i8jwt4v/8buP//zdtv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//N22//G7kP/wt4v/8LeLxu22kg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOuxiQ3wt4vK8LeL//K/
+ k//94bv//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//eG7//K+kv/wt4v/8LeKx+i5iwsAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD/qqoD8LeLrvC3i//yu5H//eK7///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//eG5//G7
+ kP/wt4v/8LaLrP+qqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC3i5jwt4v/8bqP//3huv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//eG6//G6jv/wt4v/77eMlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxt4xH8LeL/vC4i//72rL//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML/+9qx//C4i//wt4v+8LmMRQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA87mLFvC3
+ i+vwt4v/+NKq///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML/+NGo//C3i//wt4vp8ryGEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADwt4qZ8LeL//PCl///58L//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//58H/88CW//C3i//wt4uVAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8reLOfC3i/7wuI3//eG6///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv/94br/8LiM//C3
+ i/3xuIk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwt4u48LeL//fN
+ pf//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML/8dSw/9+7mP/Tq4f/yp98/8WYdv/FmHb/yp98/9OriP/fvJj/8dSv///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv/3zaP/8LeL/++3i7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA8reLOfC3i//xuo7//ubA///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6MH/6sun/82igP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/zqOB/+vMp///6MH//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC//7lv//xuo7/8LeL//G3jDUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwt4ur8LeL//fOpf//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML/99y3/9Gohf/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/9Gohf/33bf//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC//fN
+ pf/wt4v/8LeKpgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8biOEvC3i/jwt4z//eO8///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC/+7R
+ q//Hmnj/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8ebef/v0a3//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//eO8//C3i//wt4v376+PEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADxt4xq8LeL//TFm///6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv/v0q3/xph2/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8aZd//w067//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML/9MWa//C3i//wt4xmAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC3i7fwt4v/+tev///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML/+N+5/8mcev/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8md
+ ev/537r//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv/61q7/8LeL/++2jLMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/tpIH8LeL8/C3i//+5L3//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owf/RqIb/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/9Kphv//6MH//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC//7jvf/wt4v/8LeL8v+qgAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO+3
+ i0Dwt4v/88CW///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML/6cml/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SW
+ dP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/8SWdP/ElnT/xJZ0/+rKpv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC//PBlf/wt4v/7riKPQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD/6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///owv//6ML//+jC///o
+ wv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV6
+ Tsi1ek7/4ql8//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i/+beV7/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv+ceV//8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+KofP+1ek7/tXpOxQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtXpP4LV6Tv/mrYD/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL/3ZeS/9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/3deTP/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/5qyA/7V6Tv+1ek7eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1ek3ttXpO/+qxhP/wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/X00//01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/YE5A//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//qsIX/tXpO/7V6TusAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV6
+ Tvq1ek7/7rWJ//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i/9TRDj/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9TRDn/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+61if+1ek7/tXpO+AAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtXpO+bV6Tv/utor/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL/1RGOv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/1VGOv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/7raK/7V6Tv+1ek74AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1ek3ttXpO/+yzh//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/ZVJC/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/ZlJD//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//rsof/tXpO/7V6TusAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV6
+ T+C1ek7/6bCD//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i/92Xkv/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv93Xkz/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/+ivg/+1ek7/tXpO3QAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtXpNybV6Tv/iqX3/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL/5t5Xv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/517YP/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/4ql8/7V6Tv+2ek/GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1ek6jtXpO/9qgdP/wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/zp55/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/0KB7//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//Zn3P/tXpO/7Z7TqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZ5
+ TXq1ek7/z5Vp//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//vtor/Z1NE/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/2hTRP/wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/86Uaf+1ek7/tHpNdwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtHpPR7V6Tv/Ch1r/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i/+3jW3/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/h353/9TRz//5+fn/+fn5/9TR
+ zv+GfXb/uY9u//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/wYda/7V6Tv+3ekxDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxdk4NtXpO+7Z7T//ttIj/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/++2iv9wWUj/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/6eh
+ nP/////////////////////////////////32sT/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL/+2ziP+2e0//tXpO+bl0RgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAC0ek7DtXpO/92jd//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL/9Wjff9WRjv/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv+DenP////////////////////////////////////////////0zK3/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/26J2/7V6Tv+1ek6+AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAALV6TnW1ek7/yI5i//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/8eYdv9QQzj/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/9TRz///////////////////////////////
+ //////////////vt4v/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//HjWH/tXpO/7R7TXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuHpSGbV6Tvy2e0//67KH//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/7+T
+ cf9URjr/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/9/f2////
+ /////////////////////////////////////////vv5//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/67KG/7Z7T/+1ek77uYBRFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAtXtOt7V6Tv/Tmm7/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL/9emfv9tV0b/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/01A
+ Nv9NQDb/TUA2/01ANv/39/b////////////////////////////////////////////++/n/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//SmW3/tXpO/7V6TrQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0ek9HtXpO/7qAVP/utYn/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL/++2iv+4jm7/ZlFD/01A
+ Nv9NQDb/TUA2/01ANv9NQDb/TUA2/01ANv9NQDb/TUA2/9TRz///////////////////////////////
+ //////////////vt4v/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/7rWJ/7p/
+ U/+1ek7/t3pMQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2ek/GtXpO/9Sb
+ bv/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/0aB6/599Yf95YU3/aVVF/1tKPf9bSj3/aVVF/3lhTf+gfGH/4MCm////
+ ////////////////////////////////////////9c6v//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//TmW3/tXpO/7V6TsIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAALd6TEO1ek7/t31R/+mwg//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/+N/M//////////////////////////////////jeyv/wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/6K+D/7d8UP+1ek7+tXtOPgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV5Tai1ek7/x41g//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/9c6x//vu4//++vf//vr3//vt
+ 4//1zrD/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C2iv/GjF//tXpO/7V6
+ TqMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsXZOGrV6
+ TvC1ek7/155x//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/1p1x/7V6Tv+1ek7vtXVKGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAtntPV7V6Tv+2e1D/5at///C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL/+Wrf/+2fFD/tXpO/7V7TVMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtntOoLV6Tv+9gVb/6rGE//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//qsIX/vIJV/7V6Tv+1ek2bAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAC/gEAItXpOwrV6Tv+9g1f/6rGF//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/6rCF/72C
+ Vv+1ek7/tnlNv7ZtSQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5gFEWtXpO2rV6Tv+/hFn/6rGF//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL/+qxhf+/hVn/tXpO/7V6TtW4gFUSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4elIZtXlO0rV6
+ Tv+7gVT/5q2A//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//lq3//u4FU/7V6Tv+1e07QtXVKGAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAC2eUkVtXpOyrV6Tv+4fFD+2qF1//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/26F1/7h8UP61ek7/tXpNybOA
+ TRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/gEAItXtOnLV6Tv+1ek7/yI1h/+qw
+ hP/wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/6bCD/8eN
+ Yf+1ek7/tXpO/7V6TZi2bUkHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAtHpOXLR6TvO1ek7/t3xQ/9Sbbv/utYn/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/7rSI/9SZbf+3fVH/tXpO/7V6TvK1e01ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtnZSHLV6Tqm1ek7/tXpO/7l/U//Vmm//7bOI//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/7bOI/9Sab/+5f1P/tXpO/7V6Tv61ek2ls3tMGwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALN8
+ UEC1ek7BtXpO/7V6Tv+3fFD/yY5i/9+lef/utIj/8LeL//C3i//wt4v/8LeL//C3i//wt4v/8LeL//C3
+ i//wt4v/8LeL//C3i//wt4v/8LeL//C3i//utIj/3qR4/8mPY/+2e1D/tXpO/7V6Tv+2eU2/tHlPPQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0eU89tnpOsbV6Tvq1ek7/tXpO/7Z7T//DiFz/z5Vp/9if
+ cv/hqHv/6K6C/+qxhP/ss4f/7LOH/+qxhP/oroL/4ah7/9iec//PlWn/wodc/7Z7T/+1ek7/tXpO/7V6
+ Tvq1ek6wtnlOOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtnlJFbR6
+ TW21ek6+tXpO97V6Tv+1ek7/tXpO/7V6Tv+1ek7/tXpO/7V6Tv+1ek7/tXpO/7V6Tv+1ek7/tXpO/7V6
+ Tv+1ek7/tXpO9rR6T7y2e05ss4BNFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/gEAIs3xQQLR5TXS1ek2btXpOxLV6Tt21ek7mtXpO7rV6
+ Tu61ek7mtXpO3bR6TsO1ek2btHlNdLZ5TT+2bUkHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAACci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yL
+ eP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yL
+ eP+ci3j/nIt4/5yLeP+ci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyLeP+ci3j/nIt4/5yLeP+ci3j/nIt4/5yL
+ eP+ci3j/nIt4/5yLeP+ci3j/nIt4/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ //////////8AAP////////////8AAP////////////8AAP////////////8AAPAA////////AA8AAPAA
+ ////////AA8AAPP//////////88AAPP//////////88AAPP//////////88AAPP//////////88AAPP/
+ //8AAP///88AAPP///gAAB///88AAPP//+AAAAf//88AAPP//4AAAAH//88AAPP//gAAAAB//88AAPP/
+ /AAAAAA//88AAP//8AAAAAAP//8AAP//4AAAAAAH//8AAP//wAAAAAAD//8AAP//gAAAAAAB//8AAP//
+ AAAAAAAA//8AAP//AAAAAAAA//8AAP/+AAAAAAAAf/8AAP/8AAAAAAAAP/8AAP/8AAAAAAAAP/8AAP/4
+ AAAAAAAAH/8AAP/4AAAAAAAAH/8AAP/wAAAAAAAAD/8AAP/wAAAAAAAAD/8AAP/gAAAAAAAAB/8AAP/g
+ AAAAAAAAB/8AAP/gAAAAAAAAB/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAPAAAAAAAAAAAA8AAPAA
+ AAAAAAAAAA8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/A
+ AAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/A
+ AAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/AAAAAAAAAA/8AAP/gAAAAAAAAB/8AAP/gAAAAAAAAB/8AAP/g
+ AAAAAAAAB/8AAP/wAAAAAAAAD/8AAP/wAAAAAAAAD/8AAP/4AAAAAAAAH/8AAP/4AAAAAAAAH/8AAP/8
+ AAAAAAAAP/8AAP/8AAAAAAAAP/8AAP/+AAAAAAAAf/8AAP//AAAAAAAA//8AAP//AAAAAAAA//8AAP//
+ gAAAAAAB//8AAP//wAAAAAAD//8AAP//4AAAAAAH//8AAP//8AAAAAAP//8AAPP//AAAAAA//88AAPP/
+ /gAAAAB//88AAPP//4AAAAH//88AAPP//+AAAAf//88AAPP///gAAB///88AAPP///8AAP///88AAPP/
+ /////////88AAPP//////////88AAPP//////////88AAPP//////////88AAPAA////////AA8AAPAA
+ ////////AA8AAP////////////8AAP////////////8AAP////////////8AAP////////////8AAA==
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Project/icons8_iris_scan_80_XQd_icon.ico b/QRValidation/Project/icons8_iris_scan_80_XQd_icon.ico
new file mode 100644
index 0000000..70c3385
Binary files /dev/null and b/QRValidation/Project/icons8_iris_scan_80_XQd_icon.ico differ
diff --git a/QRValidation/Project/packages.config b/QRValidation/Project/packages.config
new file mode 100644
index 0000000..3b927c9
--- /dev/null
+++ b/QRValidation/Project/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/ReadMe.txt b/QRValidation/ReadMe.txt
new file mode 100644
index 0000000..78a2cfc
--- /dev/null
+++ b/QRValidation/ReadMe.txt
@@ -0,0 +1,98 @@
+
+M1 : Y-PICK (Pitch:20mm) - 0.001 mm
+M2 : Z-FRONT (Pitch:10mm) - 0.001 mm
+M3 : Z-REAR (Pitch:10mm) - 0.001 mm
+M4 : X-FRONT (Pitch:25mm) - 0.001 mm
+M5 : X-REAR (Pitch:25mm) - 0.001 mm
+
+
+[δ]
+ ⱸ ʿ
+
+[δ]
+ ۾ϸ ϱ
+
+ ÷ (draw cv item - ÷ )
+ ش X iLock ϵ ϱ - Է ص, ϰ Ѵ
+
+210112 chi (Ʈ )
+210110 chi * active ͵ δ ۵Ǵ
+ * Ʈ Ҵ(lot/cms۾) δ Ͱ 켱 ǵ (麸ٴ ո 켱)
+ * ش X iLock ϵ ϱ - Է ص, ϰ Ѵ
+ * draw cvitem lock ü
+
+ cim ڷ ȸ. ð Ųٷ , crash (ð ȸ ȵǰ )
+
+201221 chi ڵ Ʈ / DLL Ʈϴ Ʈ ߰
+201217 chi ڵй ǥ
+201207 chi Ʈ
+201130 chi ڵ,mnbr ⺻ Է
+201127 chi δƮ Ŭ ȭ鿡 active θ ǥѴ
+ ۾ ȭ鿡 11,12 ȣ /Ʒ ٲ ִ
+ ű۾۽ - ̾ Ѵ.<--ڵ忡 ־
+ CMS۾
+ ۽ SID ؼ
+
+
+201125 chi ڵ忡 LOT Ȯ ʰ ־, ۾Ϸ sid/lot/cms и, ȭ鿡 ۾ ǥ(sid/lot/cms)
+ sid ۾ ǰ
+ LOT۾ÿ sid reference ϰ
+
+201124 chi cms/cmw ߰
+201120 chi ۾۽ CMS ۾߰( ڵ ) , sid ref ױ
+201111 chi ڵ尪 ߰ - ڵ ø
+201105 chi resultview Ʈ
+201029 chi Ϻȭ , Ϻ ߰
+ sidϿ ° 1° ý óѴ(1ȸ ڿ ˷ش)
+201026 chi DoubleItemCheck Ȱ ȭ 0,1 ְԵǸ óϸ, ڵ sps ۾ ,, ڵ带 ϴ ŸӾƿϴ ΰǿ ڵ带 Է
+201022 chi Խ. X и ڵ ȭ
+ Ը
+ ۾۽ и
+201021 chi Ʈ α ߰ - ߰
+201020 chi δǥñ. ü ǥѴ
+ δ Ÿ̸ ̰ Ѵ
+ ȭ鿡 ǥ
+ ϴ ߰
+
+201016 chi űԼ
+ ҰŴ SPS
+ ۾۽ ¥
+ ȯ漳 SAP SID ǥ
+
+201015 chi ۾ ģ Ͱ ٽ Ǵ°
+ ۼҰ۾ sps ϰ
+201014 chi ȣ ÿϷ ¶, ٽ ʰѴ (double error check)
+ ε Ƣ ڷᰡ ̸ 찡 ־ . ش 1 üũϰ( 2 üũ)
+ ȯ漳 ο
+201013 chi üũ. -1 üũϰ
+ USERSID - δǥø
+ CONV_DET1B ߰ (Or)
+ unloaderfull ߰
+ ִ ĭ ߰
+ δ Ŭ Ŭ ʰѴ => װ õǾ, 夿
+201005 chi sid Ÿ (ΰ:߿)
+ δǥ , ġ ϰ ǥ
+200921 chi δ Է , ( Ÿ̹ 2ʿ 3.5ʷ )
+ ۾ȭ type , sid Ȯ ϰ
+ ȭ鿡 üŬ Ͽ ڵ qty ̰
+ ִʰ ذ/ִ밪 ǥ
+ Ʈ з н ڼ
+ ۾ҽ ϵ ڷᰡ ֵ ڷḦ ذϵ ؾ
+ ǥ
+ chi sid ֵ ɼ ó ʿ(⺻ )
+ ŵ Ͽ ǥõ ʰ ־. - ߰ ʿ
+
+200909 chi ڸ ͺ̽ ҷ
+ δ δ Ī
+200824 chi ڵ qty ǥõǰ
+200810 chi ڵ SID Ͽ ó(ɼ)
+200806 chi barcode ŸӾƿ 13ġ 7ġ
+ ε Ʈ, 3ȸ õ
+200729 chi jobend ڵ߰
+200728 chi sid ߰
+ ߰
+ Ȩ üũ ߰
+200720 chi ⱸ 2 ó
+200712 chi Y-P ߿ off ǥ
+200709 chi (Z Ʒ ¿. ۾ ߸ Ʈ ٴڱ ̵ϴ )
+ Ʒ Z Detect Ǿ. Ʈ Ǵ° Ǵܵ (ذ)
\ No newline at end of file
diff --git a/QRValidation/Sub/arImageViewer.EVision b/QRValidation/Sub/arImageViewer.EVision
new file mode 160000
index 0000000..7921942
--- /dev/null
+++ b/QRValidation/Sub/arImageViewer.EVision
@@ -0,0 +1 @@
+Subproject commit 79219428843677c79c19d91698cb2eb25b01635f
diff --git a/QRValidation/Sub/arMCFrame b/QRValidation/Sub/arMCFrame
new file mode 160000
index 0000000..a398dc0
--- /dev/null
+++ b/QRValidation/Sub/arMCFrame
@@ -0,0 +1 @@
+Subproject commit a398dc0ae44ab17f278f05274e2cb744736f27be
diff --git a/QRValidation/Sub/arRS232 b/QRValidation/Sub/arRS232
new file mode 160000
index 0000000..aa13b53
--- /dev/null
+++ b/QRValidation/Sub/arRS232
@@ -0,0 +1 @@
+Subproject commit aa13b53aa559a5daea78169268584cda5d3f2c30
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC.sln b/QRValidation/Test/Emulator_PLC/Emulator_PLC.sln
new file mode 100644
index 0000000..d50d3d6
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.902
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Emulator_PLC", "Emulator_PLC\Emulator_PLC.csproj", "{C8371A98-310A-4C78-BD07-40BD3878B90A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C8371A98-310A-4C78-BD07-40BD3878B90A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8371A98-310A-4C78-BD07-40BD3878B90A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8371A98-310A-4C78-BD07-40BD3878B90A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8371A98-310A-4C78-BD07-40BD3878B90A}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {60258DA6-5CEE-4C96-9ED0-071FF3B75697}
+ EndGlobalSection
+EndGlobal
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/App.config b/QRValidation/Test/Emulator_PLC/Emulator_PLC/App.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Emulator_PLC.csproj b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Emulator_PLC.csproj
new file mode 100644
index 0000000..4e44697
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Emulator_PLC.csproj
@@ -0,0 +1,95 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {C8371A98-310A-4C78-BD07-40BD3878B90A}
+ WinExe
+ Emulator_PLC
+ Emulator_PLC
+ v4.5
+ 512
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\Source\Handler\DLL\arControl.Net4.dll
+
+
+ ..\..\Source\Handler\DLL\ArLog.Net4.dll
+
+
+ ..\..\Source\Handler\DLL\ArSetting.Net4.dll
+
+
+ ..\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.Designer.cs b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.Designer.cs
new file mode 100644
index 0000000..6f24071
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.Designer.cs
@@ -0,0 +1,48 @@
+namespace Emulator_PLC
+{
+ partial class Form1
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Name = "Form1";
+ this.Text = "Form1";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
+
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.cs b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.cs
new file mode 100644
index 0000000..455e74e
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Net.Sockets;
+using System.Net;
+
+namespace Emulator_PLC
+{
+ public partial class Form1 : Form
+ {
+ Modbus.Device.ModbusTcpSlave slave;
+ TcpListener listener;
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ listener = new TcpListener(IPAddress.Any, 502); //modebus tcp
+ listener.Start();
+
+ byte devid = 0;
+ slave = Modbus.Device.ModbusTcpSlave.CreateTcp(devid,listener);
+ slave.Listen();
+ slave.ModbusSlaveRequestReceived += Slave_ModbusSlaveRequestReceived;
+ slave.WriteComplete += Slave_WriteComplete;
+
+ }
+
+ private void Slave_WriteComplete(object sender, Modbus.Device.ModbusSlaveRequestEventArgs e)
+ {
+ //throw new NotImplementedException();
+ }
+
+ private void Slave_ModbusSlaveRequestReceived(object sender, Modbus.Device.ModbusSlaveRequestEventArgs e)
+ {
+ //throw new NotImplementedException();
+ }
+ }
+}
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.resx b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Program.cs b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Program.cs
new file mode 100644
index 0000000..889c9e2
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Emulator_PLC
+{
+ static class Program
+ {
+ ///
+ /// 해당 응용 프로그램의 주 진입점입니다.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/AssemblyInfo.cs b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c23f741
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("Emulator_PLC")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Emulator_PLC")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("c8371a98-310a-4c78-bd07-40bd3878b90a")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
+// 지정되도록 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Resources.Designer.cs b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..02b1de3
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace Emulator_PLC.Properties
+{
+
+
+ ///
+ /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+ ///
+ // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+ // 클래스에서 자동으로 생성되었습니다.
+ // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
+ // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Emulator_PLC.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
+ /// 재정의합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Resources.resx b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Settings.Designer.cs b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..88ff8f3
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Emulator_PLC.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Settings.settings b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/QRValidation/Test/Emulator_PLC/Emulator_PLC/packages.config b/QRValidation/Test/Emulator_PLC/Emulator_PLC/packages.config
new file mode 100644
index 0000000..2fab4ac
--- /dev/null
+++ b/QRValidation/Test/Emulator_PLC/Emulator_PLC/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_AzinMotion/App.config b/QRValidation/Test/Test_AzinMotion/App.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_AzinMotion/Form1.Designer.cs b/QRValidation/Test/Test_AzinMotion/Form1.Designer.cs
new file mode 100644
index 0000000..a8050db
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Form1.Designer.cs
@@ -0,0 +1,314 @@
+namespace Test_AzinMotion
+{
+ partial class Form1
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ arDev.AzinAxt.ColorListItem colorListItem1 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem2 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem3 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem4 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem5 = new arDev.AzinAxt.ColorListItem();
+ arDev.AzinAxt.ColorListItem colorListItem6 = new arDev.AzinAxt.ColorListItem();
+ this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.lbInit = new System.Windows.Forms.ToolStripStatusLabel();
+ this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+ this.emulatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.logTextBox1 = new arCtl.LogTextBox();
+ this.tmDisplay = new System.Windows.Forms.Timer(this.components);
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.tblFG = new arDev.AzinAxt.GridView();
+ this.jogController1 = new arDev.AzinAxt.JogController();
+ this.statusStrip1.SuspendLayout();
+ this.menuStrip1.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // statusStrip1
+ //
+ this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.lbInit});
+ this.statusStrip1.Location = new System.Drawing.Point(0, 375);
+ this.statusStrip1.Name = "statusStrip1";
+ this.statusStrip1.Size = new System.Drawing.Size(927, 22);
+ this.statusStrip1.TabIndex = 0;
+ this.statusStrip1.Text = "statusStrip1";
+ //
+ // lbInit
+ //
+ this.lbInit.Name = "lbInit";
+ this.lbInit.Size = new System.Drawing.Size(75, 17);
+ this.lbInit.Text = "{motion init}";
+ //
+ // menuStrip1
+ //
+ this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.emulatorToolStripMenuItem});
+ this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+ this.menuStrip1.Name = "menuStrip1";
+ this.menuStrip1.Size = new System.Drawing.Size(927, 24);
+ this.menuStrip1.TabIndex = 1;
+ this.menuStrip1.Text = "menuStrip1";
+ //
+ // emulatorToolStripMenuItem
+ //
+ this.emulatorToolStripMenuItem.Name = "emulatorToolStripMenuItem";
+ this.emulatorToolStripMenuItem.Size = new System.Drawing.Size(67, 20);
+ this.emulatorToolStripMenuItem.Text = "Emulator";
+ this.emulatorToolStripMenuItem.Click += new System.EventHandler(this.emulatorToolStripMenuItem_Click);
+ //
+ // logTextBox1
+ //
+ this.logTextBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24)))));
+ this.logTextBox1.ColorList = new arCtl.sLogMessageColor[0];
+ this.logTextBox1.DateFormat = ":mm:ss.fff";
+ this.logTextBox1.DefaultColor = System.Drawing.Color.LightGray;
+ this.logTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.logTextBox1.EnableDisplayTimer = false;
+ this.logTextBox1.EnableGubunColor = true;
+ this.logTextBox1.Font = new System.Drawing.Font("Consolas", 9F);
+ this.logTextBox1.ListFormat = "[{0}] {1}";
+ this.logTextBox1.Location = new System.Drawing.Point(0, 171);
+ this.logTextBox1.MaxListCount = ((ushort)(200));
+ this.logTextBox1.MaxTextLength = ((uint)(4000u));
+ this.logTextBox1.MessageInterval = 50;
+ this.logTextBox1.Name = "logTextBox1";
+ this.logTextBox1.Size = new System.Drawing.Size(927, 204);
+ this.logTextBox1.TabIndex = 2;
+ this.logTextBox1.Text = "";
+ //
+ // tmDisplay
+ //
+ this.tmDisplay.Interval = 200;
+ this.tmDisplay.Tick += new System.EventHandler(this.tmDisplay_Tick);
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.tblFG);
+ this.panel1.Controls.Add(this.jogController1);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panel1.Location = new System.Drawing.Point(0, 24);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(927, 147);
+ this.panel1.TabIndex = 37;
+ //
+ // tblFG
+ //
+ this.tblFG.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120)))));
+ this.tblFG.BorderSize = 1;
+ colorListItem1.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(210)))), ((int)(((byte)(210)))));
+ colorListItem1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230)))));
+ colorListItem1.Remark = "title";
+ colorListItem2.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(160)))), ((int)(((byte)(160)))), ((int)(((byte)(160)))));
+ colorListItem2.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
+ colorListItem2.Remark = "gray";
+ colorListItem3.BackColor1 = System.Drawing.Color.Orange;
+ colorListItem3.BackColor2 = System.Drawing.Color.DarkOrange;
+ colorListItem3.Remark = "orange";
+ colorListItem4.BackColor1 = System.Drawing.Color.Green;
+ colorListItem4.BackColor2 = System.Drawing.Color.ForestGreen;
+ colorListItem4.Remark = "green";
+ colorListItem5.BackColor1 = System.Drawing.Color.Red;
+ colorListItem5.BackColor2 = System.Drawing.Color.Tomato;
+ colorListItem5.Remark = "red";
+ colorListItem6.BackColor1 = System.Drawing.Color.SkyBlue;
+ colorListItem6.BackColor2 = System.Drawing.Color.DeepSkyBlue;
+ colorListItem6.Remark = "blue";
+ this.tblFG.ColorList = new arDev.AzinAxt.ColorListItem[] {
+ colorListItem1,
+ colorListItem2,
+ colorListItem3,
+ colorListItem4,
+ colorListItem5,
+ colorListItem6};
+ this.tblFG.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.tblFG.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tblFG.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.tblFG.FontPin = new System.Drawing.Font("Consolas", 6.75F);
+ this.tblFG.ForeColor = System.Drawing.Color.Black;
+ this.tblFG.ForeColorPin = System.Drawing.Color.WhiteSmoke;
+ this.tblFG.Location = new System.Drawing.Point(0, 0);
+ this.tblFG.MatrixSize = new System.Drawing.Point(9, 7);
+ this.tblFG.MenuBorderSize = 1;
+ this.tblFG.MenuGap = 5;
+ this.tblFG.MinimumSize = new System.Drawing.Size(100, 50);
+ this.tblFG.Name = "tblFG";
+ this.tblFG.Names = null;
+ this.tblFG.ShadowColor = System.Drawing.Color.White;
+ this.tblFG.showDebugInfo = false;
+ this.tblFG.ShowIndexString = true;
+ this.tblFG.Size = new System.Drawing.Size(718, 147);
+ this.tblFG.TabIndex = 35;
+ this.tblFG.Tags = null;
+ this.tblFG.Text = "gridView1";
+ this.tblFG.TextAttachToImage = true;
+ this.tblFG.Titles = new string[] {
+ "Axis|CMD|ACT|ORG|-|+|INP|ALM|HOME.SET",
+ "[0] Axis||||||||",
+ "[1] Axis||||||||",
+ "[2] Axis||||||||",
+ "[3] Axis||||||||",
+ "[4] Axis||||||||",
+ "[5] Axis||||||||"};
+ this.tblFG.Values = new ushort[] {
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(1)),
+ ((ushort)(2)),
+ ((ushort)(3)),
+ ((ushort)(4)),
+ ((ushort)(5)),
+ ((ushort)(6)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0)),
+ ((ushort)(0))};
+ this.tblFG.ItemClick += new System.EventHandler(this.tblFG_ItemClick);
+ //
+ // jogController1
+ //
+ this.jogController1.arAutoUpdate = false;
+ this.jogController1.arAxis = 0;
+ this.jogController1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.jogController1.arBorderColor = System.Drawing.Color.Transparent;
+ this.jogController1.ardAct = 0D;
+ this.jogController1.arDebugMode = false;
+ this.jogController1.Dock = System.Windows.Forms.DockStyle.Right;
+ this.jogController1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Bold);
+ this.jogController1.arIsAlm = false;
+ this.jogController1.arIsHSet = false;
+ this.jogController1.arIsInit = false;
+ this.jogController1.arIsInp = false;
+ this.jogController1.arIsLimN = false;
+ this.jogController1.arIsLimP = false;
+ this.jogController1.arIsOrg = false;
+ this.jogController1.arIsSvON = false;
+ this.jogController1.Location = new System.Drawing.Point(718, 0);
+ this.jogController1.arMaxLength = 400;
+ this.jogController1.arMinLength = -10;
+ this.jogController1.Name = "jogController1";
+ this.jogController1.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
+ this.jogController1.arBottomSensorHeight = 35;
+ this.jogController1.arShowJogButton = true;
+ this.jogController1.arShowPositionBar = true;
+ this.jogController1.arShowSensor = true;
+ this.jogController1.arShowTitleBar = true;
+ this.jogController1.Size = new System.Drawing.Size(209, 147);
+ this.jogController1.TabIndex = 36;
+ this.jogController1.Text = "jogController1";
+ this.jogController1.arUpdateInterval = ((ushort)(200));
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(927, 397);
+ this.Controls.Add(this.logTextBox1);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.statusStrip1);
+ this.Controls.Add(this.menuStrip1);
+ this.MainMenuStrip = this.menuStrip1;
+ this.Name = "Form1";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Form1";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.statusStrip1.ResumeLayout(false);
+ this.statusStrip1.PerformLayout();
+ this.menuStrip1.ResumeLayout(false);
+ this.menuStrip1.PerformLayout();
+ this.panel1.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.MenuStrip menuStrip1;
+ private System.Windows.Forms.ToolStripMenuItem emulatorToolStripMenuItem;
+ private arCtl.LogTextBox logTextBox1;
+ private arDev.AzinAxt.GridView tblFG;
+ private System.Windows.Forms.Timer tmDisplay;
+ private System.Windows.Forms.ToolStripStatusLabel lbInit;
+ private arDev.AzinAxt.JogController jogController1;
+ private System.Windows.Forms.Panel panel1;
+ }
+}
+
diff --git a/QRValidation/Test/Test_AzinMotion/Form1.cs b/QRValidation/Test/Test_AzinMotion/Form1.cs
new file mode 100644
index 0000000..bc33885
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Form1.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Test_AzinMotion
+{
+ public partial class Form1 : Form
+ {
+ arDev.AzinAxt.MOT mot;
+ arUtil.Log log;
+ Setting setting;
+ public Form1()
+ {
+ InitializeComponent();
+ mot = new arDev.AzinAxt.MOT();
+ mot.Init();
+
+ log = new arUtil.Log();
+ setting = new Setting();
+ setting.Load();
+
+ log.RaiseMsg += Log_RaiseMsg;
+ this.FormClosed += Form1_FormClosed;
+ }
+
+ private void Form1_FormClosed(object sender, FormClosedEventArgs e)
+ {
+ log.Flush();
+ mot.Dispose();
+ }
+
+ private void Log_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
+ {
+ this.logTextBox1.AddMsg(LogTime, TypeStr, Message);
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ log.Add("프로그램 시작");
+ if (mot.IsInit == false) log.AddE("모션 초기화 실패(" + mot.errorMessage + ")");
+ else log.Add("모션 초기화 성공");
+ this.jogController1.MotionObject = mot;
+ this.jogController1.arAxis = 0;
+ tmDisplay.Start();
+ tblFG.setItemEnable(true);
+ }
+
+ private void emulatorToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var f = new arDev.AzinAxt.Emulator.fEmulatorM(5, this.mot);
+ mot.Emulator(f.devM);
+ f.Show();
+ }
+
+ private void tmDisplay_Tick(object sender, EventArgs e)
+ {
+ lbInit.Text = mot.IsInit ? "Init:OK" : "Init:Error(" + mot.errorMessage + ")";
+ lbInit.ForeColor = mot.IsInit ? Color.Black : Color.Red;
+ jogController1.UpdateInfo();
+ jogController1.Invalidate();
+ if (mot.IsInit == false)
+ {
+ //if (this.tblFG.Enabled == true) tblFG.Enabled = false;
+ }
+ else
+ {
+ //if (tblFG.Enabled == false) tblFG.Enabled = true;
+
+ //각축별 기본 상태를 표시해준다.
+ for (int axis = 0; axis < 5; axis++)
+ {
+ this.tblFG.setValue(axis + 1, 0, mot.isSERVOON[axis] ? "title" : "orange");
+ this.tblFG.setTitle(axis + 1, 1, string.Format("{0}mm", mot.dCMDPOS[axis]));
+ this.tblFG.setTitle(axis + 1, 2, string.Format("{0}mm", mot.dACTPOS[axis]));
+ this.tblFG.setValue(axis + 1, 3, mot.isOrg[axis] ? "blue" : "gray"); //MotStatus_Home[axis].BackColor = Pub.mot.isOrg[axis] ? Color.Lime : sbBackColor;
+ this.tblFG.setValue(axis + 1, 4, mot.isLimitN[axis] ? "red" : "gray"); //MotStatus_NLIM[axis].BackColor = Pub.mot.isLimitN[axis] ? Color.Red : sbBackColor;
+ this.tblFG.setValue(axis + 1, 5, mot.isLimitP[axis] ? "red" : "gray"); //MotStatus_PLIM[axis].BackColor = Pub.mot.isLimitP[axis] ? Color.Red : sbBackColor;
+ this.tblFG.setValue(axis + 1, 6, mot.isINP[axis] ? "blue" : "gray"); //MotStatus_INP[axis].BackColor = Pub.mot.isINP[axis] ? Color.Lime : sbBackColor;
+ this.tblFG.setValue(axis + 1, 7, mot.isSERVOAlarm[axis] ? "red" : "gray"); //MotStatus_ALM[axis].BackColor = Pub.mot.isSERVOAlarm[axis] ? Color.Lime : sbBackColor;
+ this.tblFG.setValue(axis + 1, 8, mot.isHomeSet[axis] ? "green" : "gray"); //MotStatus_SVON[axis].BackColor = Pub.mot.isHomeSet[axis] ? Color.Lime : Color.Magenta;
+ }
+ }
+ this.tblFG.Invalidate();
+ }
+
+ private void tblFG_ItemClick(object sender, arDev.AzinAxt.GridView.ItemClickEventArgs e)
+ {
+ if(e.Item.row > 0)
+ {
+ jogController1.arAxis = e.Item.row - 1;
+ jogController1.Invalidate();
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_AzinMotion/Form1.resx b/QRValidation/Test/Test_AzinMotion/Form1.resx
new file mode 100644
index 0000000..0d0f7d9
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Form1.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 134, 17
+
+
+ 250, 17
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_AzinMotion/Program.cs b/QRValidation/Test/Test_AzinMotion/Program.cs
new file mode 100644
index 0000000..988648d
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Test_AzinMotion
+{
+ static class Program
+ {
+ ///
+ /// 해당 응용 프로그램의 주 진입점입니다.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_AzinMotion/Properties/AssemblyInfo.cs b/QRValidation/Test/Test_AzinMotion/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..1cbb98a
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("Test_AzinMotion")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Test_AzinMotion")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("5709c3ec-eb33-4fd7-a933-e0ce173de61f")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
+// 지정되도록 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/QRValidation/Test/Test_AzinMotion/Properties/Resources.Designer.cs b/QRValidation/Test/Test_AzinMotion/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..16ebe4d
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_AzinMotion.Properties
+{
+
+
+ ///
+ /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+ ///
+ // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+ // 클래스에서 자동으로 생성되었습니다.
+ // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
+ // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Test_AzinMotion.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
+ /// 재정의합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_AzinMotion/Properties/Resources.resx b/QRValidation/Test/Test_AzinMotion/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_AzinMotion/Properties/Settings.Designer.cs b/QRValidation/Test/Test_AzinMotion/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..beba929
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_AzinMotion.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_AzinMotion/Properties/Settings.settings b/QRValidation/Test/Test_AzinMotion/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/QRValidation/Test/Test_AzinMotion/Setting.cs b/QRValidation/Test/Test_AzinMotion/Setting.cs
new file mode 100644
index 0000000..922aaea
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Setting.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Test_AzinMotion
+{
+ public class Setting : arUtil.Setting
+ {
+ public override void AfterLoad()
+ {
+ //throw new NotImplementedException();//
+ }
+ public override void AfterSave()
+ {
+ //throw new NotImplementedException();
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_AzinMotion/Test_AzinMotion.csproj b/QRValidation/Test/Test_AzinMotion/Test_AzinMotion.csproj
new file mode 100644
index 0000000..cbc7c22
--- /dev/null
+++ b/QRValidation/Test/Test_AzinMotion/Test_AzinMotion.csproj
@@ -0,0 +1,99 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {5709C3EC-EB33-4FD7-A933-E0CE173DE61F}
+ WinExe
+ Test_AzinMotion
+ Test_AzinMotion
+ v4.5
+ 512
+ true
+
+
+ x86
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\DLL\ArLog.Net4.dll
+
+
+ ..\DLL\ArSetting.Net4.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ {4f457e76-bf83-4b98-8565-ae87d7d16744}
+ arAzinAxt
+
+
+ {f31c242c-1b15-4518-9733-48558499fe4b}
+ arControl
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_IOPanel/Program.cs b/QRValidation/Test/Test_IOPanel/Program.cs
new file mode 100644
index 0000000..9e43de8
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Program.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Test_IOPanel
+{
+ static class Program
+ {
+ ///
+ /// 해당 응용 프로그램의 주 진입점입니다.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new fIOMonitor());
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_IOPanel/Properties/AssemblyInfo.cs b/QRValidation/Test/Test_IOPanel/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..0c7ba4c
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리의 일반 정보는 다음 특성 집합을 통해 제어됩니다.
+// 어셈블리와 관련된 정보를 수정하려면
+// 이 특성 값을 변경하십시오.
+[assembly: AssemblyTitle("Test_IOPanel")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Test_IOPanel")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("8244ffd3-0ef5-4619-9f90-86eb6a84284e")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로
+// 지정되도록 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/QRValidation/Test/Test_IOPanel/Properties/Resources.Designer.cs b/QRValidation/Test/Test_IOPanel/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..8c70256
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_IOPanel.Properties
+{
+
+
+ ///
+ /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+ ///
+ // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+ // 클래스에서 자동으로 생성되었습니다.
+ // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
+ // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Test_IOPanel.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대한 현재 스레드의 CurrentUICulture
+ /// 속성을 재정의합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_IOPanel/Properties/Resources.resx b/QRValidation/Test/Test_IOPanel/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_IOPanel/Properties/Settings.Designer.cs b/QRValidation/Test/Test_IOPanel/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..f78da3c
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_IOPanel.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_IOPanel/Properties/Settings.settings b/QRValidation/Test/Test_IOPanel/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/QRValidation/Test/Test_IOPanel/Test_IOPanel.csproj b/QRValidation/Test/Test_IOPanel/Test_IOPanel.csproj
new file mode 100644
index 0000000..6c03846
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/Test_IOPanel.csproj
@@ -0,0 +1,85 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {0029978E-035A-42D4-8489-CC8600BCB2F6}
+ WinExe
+ Properties
+ Test_IOPanel
+ Test_IOPanel
+ v4.0
+ 512
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ fIOMonitor.cs
+
+
+
+
+ fIOMonitor.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_IOPanel/fIOMonitor.Designer.cs b/QRValidation/Test/Test_IOPanel/fIOMonitor.Designer.cs
new file mode 100644
index 0000000..8e5027b
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/fIOMonitor.Designer.cs
@@ -0,0 +1,180 @@
+namespace Test_IOPanel
+{
+ partial class fIOMonitor
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.tblDI = new System.Windows.Forms.TableLayoutPanel();
+ this.label1 = new System.Windows.Forms.Label();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.tblDO = new System.Windows.Forms.TableLayoutPanel();
+ this.label4 = new System.Windows.Forms.Label();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.panel2.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 1;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 0);
+ this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 1);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 2;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(984, 761);
+ this.tableLayoutPanel1.TabIndex = 0;
+ //
+ // panel2
+ //
+ this.panel2.BackColor = System.Drawing.Color.White;
+ this.panel2.Controls.Add(this.tblDI);
+ this.panel2.Controls.Add(this.label1);
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel2.Location = new System.Drawing.Point(3, 3);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(978, 374);
+ this.panel2.TabIndex = 1;
+ //
+ // tblDI
+ //
+ this.tblDI.ColumnCount = 6;
+ this.tblDI.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDI.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDI.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDI.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDI.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDI.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDI.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tblDI.Location = new System.Drawing.Point(0, 23);
+ this.tblDI.Name = "tblDI";
+ this.tblDI.RowCount = 8;
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDI.Size = new System.Drawing.Size(978, 351);
+ this.tblDI.TabIndex = 1;
+ //
+ // label1
+ //
+ this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
+ this.label1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.label1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label1.Location = new System.Drawing.Point(0, 0);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(978, 23);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Digital Input";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.Color.White;
+ this.panel1.Controls.Add(this.tblDO);
+ this.panel1.Controls.Add(this.label4);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel1.Location = new System.Drawing.Point(3, 383);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(978, 375);
+ this.panel1.TabIndex = 0;
+ //
+ // tblDO
+ //
+ this.tblDO.ColumnCount = 6;
+ this.tblDO.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDO.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDO.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDO.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDO.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDO.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
+ this.tblDO.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tblDO.Location = new System.Drawing.Point(0, 23);
+ this.tblDO.Name = "tblDO";
+ this.tblDO.RowCount = 8;
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
+ this.tblDO.Size = new System.Drawing.Size(978, 352);
+ this.tblDO.TabIndex = 1;
+ //
+ // label4
+ //
+ this.label4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
+ this.label4.Dock = System.Windows.Forms.DockStyle.Top;
+ this.label4.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label4.Location = new System.Drawing.Point(0, 0);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(978, 23);
+ this.label4.TabIndex = 1;
+ this.label4.Text = "Digital Output";
+ this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // fIOMonitor
+ //
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.ClientSize = new System.Drawing.Size(984, 761);
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.Name = "fIOMonitor";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "fIOMonitor";
+ this.Load += new System.EventHandler(this.fIOMonitor_Load);
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.panel2.ResumeLayout(false);
+ this.panel1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Panel panel2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.TableLayoutPanel tblDI;
+ private System.Windows.Forms.TableLayoutPanel tblDO;
+ }
+}
\ No newline at end of file
diff --git a/QRValidation/Test/Test_IOPanel/fIOMonitor.cs b/QRValidation/Test/Test_IOPanel/fIOMonitor.cs
new file mode 100644
index 0000000..fa25ee0
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/fIOMonitor.cs
@@ -0,0 +1,158 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Test_IOPanel
+{
+ ///
+ /// I/O창에 표시되는 핀 이름
+ ///
+ enum eDIName
+ {
+ SW_START, STOP, RESET, AIR, DOOR ,EMERGENCY, SPARE06, SPARE07,
+ MGZ_LOAD_IN, MGZ_LOAD_LIMIT, MGZ_HOLD1, MGZ_HOLD2, MGZ_CLAMP_OPEN, MGZ_CLAMP_CLOSE, SPARE14, SPARE15,
+ PCB_PICKER_OVERLOAD, PUSHER_LIMIT1, PUSHER_LIMIT2, GRIPER_OPEN, GRIPER_CLOSE, GRIP_DETECT, PCB_DETECT, SPARE23,
+ PCB_PUSHER_OVERLOAD, PUSH_OPEN, PUSH_CLOSE, MGZ_SAFTY, SPARE28, SPARE29, SPARE30, SPARE31,
+ SPARE32, SPARE33, SPARE34, SPARE35, SPARE36, SPARE37, SPARE38, SPARE39,
+ SPARE40, SPARE41, SPARE42, SPARE43, SPARE44, SPARE45, SPARE46, SPARE47,
+ }
+ ///
+ /// 실제 작업시사용하는 이름
+ ///
+ enum eDIPin
+ {
+ X00, X01, X02, X03, X04, X05, X06, X07,
+ X08, X09, X0A, X0B, X0C, X0D, X0E, X0F,
+ X10, X11, X12, X13, X14, X15, X16, X17,
+ X18, X19, X1A, X1B, X1C, X1D, X1E, X1F,
+ X20, X21, X22, X23, X24, X25, X26, X27,
+ X28, X29, X2A, X2B, X2C, X2D, X2E, X2F
+ }
+
+ enum eDOName
+ {
+ LED_START, LED_STOP, LED_RESET, LED_AIR, LED_INSIDE, SPARE05, SPARE06, SPARE07,
+ PUSHER, GRIPPER, MGZ_LOADER, MGZ_CLAMP_ON, MGZ_CLAMP_OFF, SPARE13, SPARE14, SPARE15,
+ TWR_RED, TWR_GRN, TWR_YEL, TWR_BUZZER, SPARE20, SPARE21, SPARE22, SPARE23,
+ AIR_ON, SPARE25, SPARE26, SPARE27, SPARE28, SPARE29, SPARE30, SPARE31,
+ SPARE32, SPARE33, SPARE34, SPARE35, SPARE36, SPARE37, SPARE38, SPARE39,
+ SPARE40, SPARE41, SPARE42, SPARE43, SPARE44, SPARE45, SPARE46, SPARE47,
+ }
+
+ enum eDOPin
+ {
+ Y00, Y01, Y02, Y03, Y04, Y05, Y06, Y07,
+ Y08, Y09, Y0A, Y0B, Y0C, Y0D, Y0E, Y0F,
+ Y10, Y11, Y12, Y13, Y14, Y15, Y16, Y17,
+ Y18, Y19, Y1A, Y1B, Y1C, Y1D, Y1E, Y1F,
+ Y20, Y21, Y22, Y23, Y24, Y25, Y26, Y27,
+ Y28, Y29, Y2A, Y2B, Y2C, Y2D, Y2E, Y2F
+ }
+
+ public partial class fIOMonitor : Form
+ {
+
+ public fIOMonitor()
+ {
+ InitializeComponent();
+ //this.WindowState = FormWindowState.Maximized;
+
+ for (int r = 0; r < 8; r++)
+ {
+ for (int i = 0; i < 6; i++)
+ {
+ var idx = i * 8 + r;
+ var pinNo = Enum.GetName(typeof(eDIPin), idx);
+ var pinName = Enum.GetName(typeof(eDIName), idx);
+
+ var but = new Button();
+ if (pinName.StartsWith("SPARE"))
+ {
+ pinName = "--";
+ but.ForeColor = Color.Gray;
+ }
+ but.Text = string.Format("[{0}]\n{1}", pinNo, pinName, idx);
+ but.TextAlign = ContentAlignment.MiddleLeft;
+ but.Dock = DockStyle.Fill;
+ but.Font = new System.Drawing.Font("Consolas", 9, FontStyle.Bold);
+ but.Tag = idx;
+ but.Click += butI_Click;
+ this.tblDI.Controls.Add(but);
+ }
+ }
+
+ for (int r = 0; r < 8; r++)
+ {
+ for (int i = 0; i < 6; i++)
+ {
+ var idx = i * 8 + r;
+ var pinNo = Enum.GetName(typeof(eDOPin), idx);
+ var pinName = Enum.GetName(typeof(eDOName), idx);
+
+ var but = new Button();
+ if (pinName.StartsWith("SPARE"))
+ {
+ pinName = "--";
+ but.ForeColor = Color.Gray;
+ }
+ but.Font = new System.Drawing.Font("Consolas", 9, FontStyle.Bold);
+ but.Text = string.Format("[{0}]\n{1}", pinNo, pinName, idx);
+ but.TextAlign = ContentAlignment.MiddleLeft;
+ but.Dock = DockStyle.Fill;
+ but.Tag = idx;
+ but.Click += butO_Click;
+ this.tblDO.Controls.Add(but);
+ }
+ }
+ }
+
+ private void fIOMonitor_Load(object sender, EventArgs e)
+ {
+
+ this.Text = "I/O Monitor";
+ this.Show();
+ Application.DoEvents();
+
+ for(int i = 0; i < this.tblDI.Controls.Count; i++)
+ {
+ var but = tblDI.Controls[i] as Button;
+ var idx = int.Parse(but.Tag.ToString());
+ but.BackColor = Color.Lime;
+ }
+ for (int i = 0; i < this.tblDO.Controls.Count; i++)
+ {
+ var but = tblDO.Controls[i] as Button;
+ var idx = int.Parse(but.Tag.ToString());
+ but.BackColor = Color.Pink;
+ }
+
+
+ }
+
+ void butI_Click(object sender, EventArgs e)
+ {
+ var but = sender as Button;
+ var idx = int.Parse(but.Tag.ToString());
+ //var curvalue = Pub.dio.INPUT(idx);
+ //Pub.dio.RaiseEvent(arDev.AzinAxt.eIOPINDIR.INPUT, idx, !curvalue);
+ //Pub.log.AddI("I/O MON : User DI event idx=" + idx.ToString() + ",oldvalue= " + curvalue.ToString());
+ }
+ void butO_Click(object sender, EventArgs e)
+ {
+ var but = sender as Button;
+ var idx = int.Parse(but.Tag.ToString());
+ var 몫 = (int)(Math.Floor(idx / 8.0));
+ var 나머지 = (idx % 8.0);
+ var idx2 = 나머지 * 6 + 몫;
+ Console.WriteLine(string.Format("idx={0}, 몫={1},나머지={2},컨트롤인덱스={3}", idx, 몫, 나머지, idx2));
+ //var curvalue = Pub.dio.OUTPUT(idx);
+ //if (Pub.dio.initOK) Pub.dio.SetOutput(idx, !curvalue);
+ //else Pub.dio.RaiseEvent(arDev.AzinAxt.eIOPINDIR.OUTPUT, idx, !curvalue);
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_IOPanel/fIOMonitor.resx b/QRValidation/Test/Test_IOPanel/fIOMonitor.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/QRValidation/Test/Test_IOPanel/fIOMonitor.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_Modbus/App.config b/QRValidation/Test/Test_Modbus/App.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_Modbus/Form1.Designer.cs b/QRValidation/Test/Test_Modbus/Form1.Designer.cs
new file mode 100644
index 0000000..f86a1ba
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Form1.Designer.cs
@@ -0,0 +1,61 @@
+namespace Test_Modbus
+{
+ partial class Form1
+ {
+ ///
+ /// 필수 디자이너 변수입니다.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 사용 중인 모든 리소스를 정리합니다.
+ ///
+ /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form 디자이너에서 생성한 코드
+
+ ///
+ /// 디자이너 지원에 필요한 메서드입니다.
+ /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
+ ///
+ private void InitializeComponent()
+ {
+ this.button1 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(16, 19);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(100, 100);
+ this.button1.TabIndex = 0;
+ this.button1.Text = "button1";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(284, 261);
+ this.Controls.Add(this.button1);
+ this.Name = "Form1";
+ this.Text = "Form1";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ }
+}
+
diff --git a/QRValidation/Test/Test_Modbus/Form1.cs b/QRValidation/Test/Test_Modbus/Form1.cs
new file mode 100644
index 0000000..690e968
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Form1.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Modbus.Device;
+using System.Net.Sockets;
+
+namespace Test_Modbus
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+
+ ModbusIpMaster master;
+ TcpClient client;
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ client = new TcpClient();
+ client.SendTimeout = 2000;
+ client.ReceiveTimeout = 2000;
+ client.Connect("192.168.1.90", 502);
+
+ if(client.Connected)
+ {
+ master = ModbusIpMaster.CreateIp(client);
+ master.Transport.ReadTimeout = 2000;
+ master.Transport.WriteTimeout = 2000;
+
+ var listI = master.ReadInputRegisters(0, 1);
+ master.WriteSingleRegister(0, 2);
+ }
+
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_Modbus/Form1.resx b/QRValidation/Test/Test_Modbus/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_Modbus/Program.cs b/QRValidation/Test/Test_Modbus/Program.cs
new file mode 100644
index 0000000..08bf574
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Test_Modbus
+{
+ static class Program
+ {
+ ///
+ /// 해당 응용 프로그램의 주 진입점입니다.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_Modbus/Properties/AssemblyInfo.cs b/QRValidation/Test/Test_Modbus/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..2a68ce1
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리의 일반 정보는 다음 특성 집합을 통해 제어됩니다.
+// 어셈블리와 관련된 정보를 수정하려면
+// 이 특성 값을 변경하십시오.
+[assembly: AssemblyTitle("Test_Modbus")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Test_Modbus")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("59f24e25-226b-4802-9dc4-3735da2ad119")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+// 주 버전
+// 부 버전
+// 빌드 번호
+// 수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로
+// 지정되도록 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/QRValidation/Test/Test_Modbus/Properties/Resources.Designer.cs b/QRValidation/Test/Test_Modbus/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..e29e484
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 이 코드는 도구를 사용하여 생성되었습니다.
+// 런타임 버전:4.0.30319.42000
+//
+// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+// 이러한 변경 내용이 손실됩니다.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_Modbus.Properties
+{
+
+
+ ///
+ /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+ ///
+ // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+ // 클래스에서 자동으로 생성되었습니다.
+ // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
+ // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Test_Modbus.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대한 현재 스레드의 CurrentUICulture
+ /// 속성을 재정의합니다.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_Modbus/Properties/Resources.resx b/QRValidation/Test/Test_Modbus/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/QRValidation/Test/Test_Modbus/Properties/Settings.Designer.cs b/QRValidation/Test/Test_Modbus/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..0d36581
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Test_Modbus.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/QRValidation/Test/Test_Modbus/Properties/Settings.settings b/QRValidation/Test/Test_Modbus/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/QRValidation/Test/Test_Modbus/Test_Modbus.csproj b/QRValidation/Test/Test_Modbus/Test_Modbus.csproj
new file mode 100644
index 0000000..ec566a8
--- /dev/null
+++ b/QRValidation/Test/Test_Modbus/Test_Modbus.csproj
@@ -0,0 +1,91 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {A8BB8A5A-A923-430F-9685-8CAD117D2B5A}
+ WinExe
+ Properties
+ Test_Modbus
+ Test_Modbus
+ v4.5
+ 512
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QRValidation/VisionCrevis.sln b/QRValidation/VisionCrevis.sln
new file mode 100644
index 0000000..95c77cf
--- /dev/null
+++ b/QRValidation/VisionCrevis.sln
@@ -0,0 +1,71 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Express 15 for Windows Desktop
+VisualStudioVersion = 15.0.28307.1000
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionCrevis_v22", "Project\VisionCrevis_v22.csproj", "{65F3E762-800C-499E-862F-A535642EC500}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sub", "Sub", "{C423C39A-44E7-4F09-B2F7-7943975FF948}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B0C10112-30D8-439E-B951-A41287A343D5}"
+ ProjectSection(SolutionItems) = preProject
+ ReadMe.txt = ReadMe.txt
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arImageViewer.EVision_v22", "Sub\arImageViewer.EVision\arImageViewer.EVision_v22.csproj", "{C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|x64.Build.0 = Debug|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|x86.ActiveCfg = Debug|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Debug|x86.Build.0 = Debug|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|Mixed Platforms.Build.0 = Release|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|x64.ActiveCfg = Release|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|x64.Build.0 = Release|Any CPU
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|x86.ActiveCfg = Release|x86
+ {65F3E762-800C-499E-862F-A535642EC500}.Release|x86.Build.0 = Release|x86
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|x64.Build.0 = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Debug|x86.Build.0 = Debug|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|x64.ActiveCfg = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|x64.Build.0 = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|x86.ActiveCfg = Release|Any CPU
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {C42CD2F4-5ADB-4728-B654-AD9C2E1B22E7} = {C423C39A-44E7-4F09-B2F7-7943975FF948}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {B5B1FD72-356F-4840-83E8-B070AC21C8D9}
+ EndGlobalSection
+EndGlobal
diff --git a/QRValidation/default_model.csv b/QRValidation/default_model.csv
new file mode 100644
index 0000000..b5d9488
--- /dev/null
+++ b/QRValidation/default_model.csv
@@ -0,0 +1,24 @@
+ver 1
+idx Title pidx MotIndex PosIndex PosTitle Position SpdTitle Speed SpeedAcc Check
+1 Default -1 0 -1 0 0 0 False
+2 1 0 0 Ready 0 250 400 True
+3 1 0 1 FrontPick 45 250 400 True
+4 1 0 2 RearPick 487.963 250 400 True
+5 1 0 3 FConveyorOff 499.334 250 400 True
+6 1 1 0 Ready 0 100 150 True
+7 1 1 1 Pick 170 100 150 True
+8 1 2 0 Ready 0 100 150 True
+9 1 2 1 Pick 166 100 150 True
+10 1 3 0 Ready 0 150 400 True
+11 1 3 1 LeftIn 0 150 400 True
+12 1 3 2 LeftPick 589.029 150 400 True
+13 1 3 3 RightIn 577.656 150 400 True
+14 1 3 4 RightPick -5.987 150 400 True
+15 1 4 0 Ready 0 150 400 True
+16 1 4 1 LeftIn 0 150 400 True
+17 1 4 2 LeftPick 591.672 150 400 True
+18 1 4 3 RightIn 584.861 150 400 True
+19 1 4 4 RightPick -12.312 150 400 True
+20 1 0 4 RConveyorOff 39.566 250 400 True
+21 1 1 2 PickOff 0 100 150 True
+22 1 2 2 PickOff 0 100 150 True
diff --git a/QRValidation/icons8-iris-scan-80.png b/QRValidation/icons8-iris-scan-80.png
new file mode 100644
index 0000000..820ec51
Binary files /dev/null and b/QRValidation/icons8-iris-scan-80.png differ
diff --git a/QRValidation/icons8_iris_scan_80_XQd_icon.ico b/QRValidation/icons8_iris_scan_80_XQd_icon.ico
new file mode 100644
index 0000000..70c3385
Binary files /dev/null and b/QRValidation/icons8_iris_scan_80_XQd_icon.ico differ