From 8eb315b394a52be2e1ad2858eb4a856cb59ae52b Mon Sep 17 00:00:00 2001 From: "liu.wenjie" Date: Sat, 18 Dec 2021 10:37:44 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0PMA=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E5=B7=A5=E5=85=B7=202=E3=80=81=E5=BB=BA=E7=AB=8B?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E6=A6=82=E5=BF=B5=EF=BC=8C=E5=AF=B9=E5=B7=A5?= =?UTF-8?q?=E7=A8=8B=E8=BF=9B=E8=A1=8C=E4=BF=9D=E5=AD=98=E5=92=8C=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=203=E3=80=81=E5=B0=86=E5=9B=BE=E5=83=8F=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E7=AA=97=E5=8F=A3=E6=9B=B4=E6=94=B9=E4=B8=BASmartwind?= =?UTF-8?q?owControl=204=E3=80=81=E5=85=B6=E4=BB=96bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/VisionEdit/v14/.suo | Bin 589312 -> 653824 bytes .../CaliperTool.csproj.FileListAbsolute.txt | 6 +- CommonMethods/Interface/CommonStruct.cs | 2 + .../CommonHelper.csproj.FileListAbsolute.txt | 1 - DataStruct/DataStruct.cs | 4 +- ...FindCircleTool.csproj.FileListAbsolute.txt | 6 +- FindLine/FindLine.cs | 4 +- FindLine/FormFindLine.Designer.cs | 42 +- .../FindLineTool.csproj.FileListAbsolute.txt | 6 +- .../HalconTool.csproj.FileListAbsolute.txt | 6 +- PMAlignTool/FormPMAlignTool.Designer.cs | 976 ++++++++++-------- PMAlignTool/FormPMAlignTool.cs | 135 ++- PMAlignTool/FormPMAlignTool.resx | 2 +- PMAlignTool/PMAlign.cs | 409 +++++++- ToolLib.VisionJob/FormToolBox.Designer.cs | 5 +- ToolLib.VisionJob/FormToolBox.resx | 664 ++++++------ ToolLib.VisionJob/VisionJob.cs | 1 - ToolLib.VisionToolList/VisionToolList.cs | 13 +- VisionEdit/VisionEdit.csproj | 7 + VisionEdit/bin/Debug/DockPanel.config | Bin 5344 -> 5344 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 8831 -> 8897 bytes .../VisionEdit.csproj.FileListAbsolute.txt | 16 +- VisionEdit/几何.ico | Bin 0 -> 5430 bytes 23 files changed, 1494 insertions(+), 811 deletions(-) create mode 100644 VisionEdit/几何.ico diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo index de35ceb26b52a0abd7b07d64c452d16886f0f872..a8e47c56e6485d3b260566ffbe2bfea7d586342c 100644 GIT binary patch delta 23751 zcmeHv3tSat`u};~Idf(}L_k17)FYyzA|4PC%oGt2O%2qwGE`8(%i;~e%v6qSncKRB zjPY2Ri>L=PGX!<4ERW`Ht*M!r$>aSK7WVLm-l{|_kG^y zHgm>)t&ROs`(j%%H`QJ~CX#m z!#`hKTvoz!y-g#l8s(jRk9nbzX^u9V&t@NLU-3dY3f(o=9*`bv{Cl&>1&msPWw#nQnJq!(P$O#7$fjFQSFcRnk+y)E)urj6;AOaW#3<27q zm%9~g{3WQxU^ys#nl0QiA5Bb*jjNJX^dqoI?`g% z8=;;k6N@gw-?r!`(|(gln_+JIKeX~H?(|oze4E1gvdL5g`~i3fcoZK>;CDcrS=;N~E-)6^ z+mU=8NCtKS{!H_1GN8}{(HbBUtwB=;#|uC@4CyT3GMYvpJc+y(2yaIifxN*8Mg0p1 zKLO?g3BVlGxgVh*(BTMC)zlY|kv|Dx6v8hNUIMBf|WA+Fn_H^@|QnH&t0_#nm$qzbm_<1Rfi5f&PrN@>0y=ZC?orN7N&)TwDMqL zUA8yuO3M$qOM8t+RbLA6k_x}ZPThme@c(Ns5`V?{o00V)e$Qz6> zn7R$+?F;Wkv>X@#+y`U=BY{!CRa6~=a4e7kWCP=X9KZyO2POf(2da>DKf+vKGB6Dg zLw84h9^zusGZ5wj1;9*T7BdByW+U--08fqb{m9-JuMEO?smdwO{ z5L?Y6D8DsZRMj!mvpO{JIID`a231=#YFK%ixx~M(hp8j#`HQ-4%3+^t1^$KXGwmz< z|5Pgo_*40Ci=zkQRii?~szYOrv+{?0%AexprRI{Osb-<_)U~b7Ke~vOFY_rs$jjHO zntgB>g&k$JMD@12CS@LFV~wd^I?B@2eaNqImkHXX{9|lU`IeR?!}3{*RxqrPC23y` zE99S=w3)w~=c%D?iQq@3>g(@?nX5ysn9}jYiiDRqcZ9N_l?jpD(UW;OT5`U50JBrkk~pDoEVR@ZQxufnDCmuGh-aC)<1YsBZl-9{7^5@`dS#AjEdItBa4qNzpjOH(7ZM9a@1NGaB*k7em&ilF!vC!=6c82mfA7&O5U6-X_;@pcl7P5Bb zNxXC&Pg1`XizZWv&7&ISf}IF{jZ43AAA9o0CutG1`-GV`l(FE& z#W6Ij2eX;W#VsuC!6IVTBlZGN32XqWfNEePunE`<=)e}>Mc^fXPWND`fo~%w`fhk# zbdNKk?UyLN1c-$b*PXbDD@cEhurt7cBh)%v3DEgwcAc?B8cQ5s7>BLuhE0k#w!fPZ z?}m+!L5?Vk!-hs-)1$G~t*&SGkjE39Az*^pKjQCpp%W)*zmG}%kO7Nf-3+)0 zll&0|-1bKq@LW`$2NVMH0rDLvH>H*rl@PtlF6PVl_-tZdtASKB?RQlQV#sa@~(JwJa>ulV0ZJ)v})qg{yeC+mAk zq~kDzf@d0IleF|kLq|*li}*cI0ZazOVVqhUPDhvr%mDI%0$?U^KQIe;0GJIt2+RTI z0`q`Ez%J|8k1=j8tzxNWq1n3FQ%xUkC3_XiXZ`7`Dptr+si2w_MhG{G5NP7cg-S6I z)_=Y!5=V80Y4zr%tAKrX3sI7BTE;y z@_loQ|C+`-msU?{U2fd+TYFf#ZZ-27M*B}H;WvSM2!0`i#8^W_bOkTT27~~Lg|Nv1 z&#<8+2YIpJ8C`)agU5*2SZ?ZG-J#-cR=$;&Ze%aF__#`)`um9& zK^-}2mxAB&U_!h9qCUI1RZ}0nQdO!l&E7Ihb94*VdWBl_q(HtEIYRiK1X-V`Z?GhQ zzB)cFK+%5!^}c4uFLTn3BrE_IpQLxAK$I*J{VJS`-Gc9 zb%K`0fwrT$M>@HUto(IsZiE(vB@ifq%J=1EaUfnxbW${R}R?i z8Zibf+Q&aTiGgaRp2(MV;B6Pv9)tKVI^liM8`oR@9^KVxn>pv-s{ z;3-%h)=Dhb4V|^6Rbi}^p?^(8$x%VxbtP??RlSB}Pm$$b@v0hBSChp~q=c6)OC5Y*0tb2-V>A2AzR*^C9r zFr^wLhGf2Z=4^yzxS;(L=yW%zhO$KFEjq3fVFqNx|HN zA$VR}vAS7!CscY8Z~)7I3gB5l)LM&h9k3Cg${cQGC(x$3htNXAwE?MCi;EZ1vhkSw zby_i=2WhRBHf_2R4fNOfQL~U`=oY6eORkm(4xAFOIjat>5s})j8 zc&3lf>HVwTj)-qEetG8WUsagi7aOcED&hG|7*qee1}#ohH2z|7R${TWY8tZ{x2Ejd^oN5K%R&ydjm( z{G(YW4aR=6H!)9Pcx}3VXa0T*{6Ry;NM8 zj7Tvu;A=r|r4ihzigk^aV70sv!Q+_2oAL4;=JH+jG%J?*2Q(|lSY*3sR-EaZO|$+# zLbE2v0!(f%FD>EYe`Zs~%3wJvupHdshZfh(4u97IIIeQlp(1XUI89GgLTF#1>aW{8 z`99_dM82n_Vr?w?mHU}$*403EMXI>+pjd4Q8^LlKQ}LJlsnR$;i<$KY;`k$sF4@eX z)N7^c?ds;=C5jzA8?cpN9BkJX1-RLY*dl|iApCCe{HEdmie2jQW4j~>gX4&bnTSh9 z+yW?o3U~kk?qllDo4XEqUnTIs&&+-Y*@^F)WwJo!lONRCRiAj3Z zyP(j0NBEUSgi;veAujbd0qUk}wu%PwjK&lfgwP0hF??Z&-relT81AZE~(VFvAE_52jEDub~qi|H#TMkuC& z?RaMVI9ey@-=yDo1oBunJfWIDiUZ4e%_m7I+SL9uWJt9^nf>C9nag0;++Hz$SV-gEccw^;RTb z0bT{R0q=^@x-2dZHw#fr_iW%HnL-GEfU+9k1mG6Jrw|uH_+x}(7u-VlGsHg!+(P&q z;$lkY5ncdwzhQ$yJRdLH@Q!yzhgOeu!jGTC_pA!S#(P+A=s=cn4a+B*PSNI zTHIt#vUW8foXSI3sBu0ziRE$m1E1vqW@wT7Y5ob`SF>@Ic5Y#>P+72K*5#A@WzLdm z`y0HsSMs2gVd&T-LOS8C#F&%&4o#z^zw@4@o=O5a|ITYX){bA}*RSS1mO|4vNF%ko zzVV`#Eo3jf`JJ<4Xl9uiaSX^w;XFbLj zGQH#qpTcU#;nG1ym7S%nx-CMgk=#dTulgvUl$^3T^NCIO|Tu_eCvI{&!Ki^tXnP73Df-EK6vv^Ke zPq=S`EHk(uT&=uqsFu{+CLcl8)7m!y9kkH4tv!q#7je+OVN}f>?aWhuF((3 z$~1|JQ)RQhJYP!WR9-G;>Y4uLvZk9yNy`HTO}!tWJ11GL@lDs1$2jfZDW&PQ`=v^W zs?y~MeNJz=7yN#!EoG%y(kMN1wX~E`-XoT9I=$KwDhAlh^r~IbDy~0NC}k*Aa!|_G zD-W9oFxQa!$%E3XlD_;=F??O`Oh38BynyNJACYIPw4=rxVJwe6>H(>URTTA>xnAWk zTbO=*wPcZ~<}dP6qkrFuqGXv@6vfM&iu%b{sb&*c%<-osj#jtJW*Sl?SvNl;)iAxN zuYA>9U+zJn1LSdf(qE)yj7l!^fi&%uc|W25lQiTEFV$zRkS4K;8i&LyYRbVUPCX)p z={Bq61-`OY+NY0sSUT&W+v8@dblQq zHMr_4TP$Qd&nM|6$#M!8a~;6w>JjraoiCI3%lg@&awI3apCwSY`^ld%3f&`*pn*2? zDmwm-6ih{(`w(B=?fZwn^Hkr#&t`>P0@!NJ09vGIMb&$7j&ei|0zib=%|eMcK7P7;mFQ=gXu= z^+(T|w>HwN9=7;PG;M>lPA}VRena|)y78r|eRApM`SNG7Zmnmf=l>+1HS6WcQYsS* zYF8Vu?7&+L z$|b#Kh-`&G`6v4STWj5R*u0C;t|&{1M+ANO=J6Bnu|9Mm+HyA)cZNN*Z-C`!Gb(yg z_Sc=>mNOo-KV1%YEwO#9B_g0=U66(A>tFqNvQBEk+^t9Z(Oh68#`!o zfrH*^rbN*a6q7SZ@rO7!8xeO()z#aSIHvn8k$jlGb+YBWnKs^rm0TXIjN#-Aml7N; z6g;YGr8vzrrHztM8m8Dw+bIdU^D!lX`4$*XuZ-GJ5s+^?r3;n+1>`)WowA-&LI-6a zjp-`Ih?rRm<35HiK|viAS4_MkV1gcOnhm6wdf3+|+NWlryh=R7@V^W=$T=^NhMDHaC# zm-P9uN^kI$B&8*!Vi3Lk4#Q>&*IKSgcgCUn(p4C?B1yTI>?un7&B=Js8(FHl;8A zb&iYc9@9A{J|?kqTy(6hv#onnN_2cwpFUl?Ce59bGBt1Vz=>lrYC~cLN|)dqWac7M zgcB!cjnBS+;*@by?~fcigH~)+I_Zle)d!h4vdm?}nzqhJ_~DdTfIeuO@~l#^ZnhX6!5z8(!XPV%>u;T^cNGq+dXm2J;`_gLX)qmUVcAbcpEvJN(1!F#d5GjHV-9; zD!=3peUAk){?r1>x~c|wf4>XbFih=4_IH%#)O(-e<=GMY6aggta9tWVO2M24PMngB zDcx>NDZrhR;f~Z5`MPuJio`%eJbci#c+o3~uoo}W*D0z$O|MeA(((ILA8G82JB=%M`=%$DXJF^ zo$5*N?!kepPqy!`_VpDn?76O*ZS4>V)ccN5eHm>?RU_$+eyShs9HKt1f6-5E&17Mx z7Sn}em~`<4xa*4dsEKSAv4hIPl=lf3f7$1XA9=s8M6#!-^&9H%Xx}$Dt}7}nBlTx| zl(F(pij-94w@8sI(k*e(P{{o6hzmzDxVim3r6GHmcV##bUfJhG{%UO-?F*fIHBA z+Jm*?p;p|p;44SzuKO+blh;dlUOnoB(voFRpEr4L+V&a?LEDph;YW%G-hDWwRI*A} z-Cp}}1CROPeH3qTgIT4g@Y+ksNyUe;BC$w#{Qi&{)JQzun_-%TF{0_*CrWp5&v-EP zsp8LuiHvN)j_imV)gF>T({0KN%4uD6JukOI>*NM zv2}||jOv@%H)igfVN<8(LWPJNK5@pxsZ(638TlDMo^1?HkKd(wH_J!6+=-|;(`e{U z8Y%|cLyf}K65slwoUF0=Q}Z5hmHyQz^>CF=nmWdnyRlv?QXpe^Xv3P>B`lxo&OC`->P#KM$mwEREPG3ZX$WGee-u!K?zDJtW`e6EjWcj1e?K>^sgjdsAbdgrcRoZ(<1|K(NL2DrS&h9a#P>$ z9}IMImrE0^iC4Xw*PWN2tJUl$Y6)d9B~a{}>#{nxq8D(PZ%Y+ew4;Pk?&EL@4CU3wYLZ9=WK$wc-ubd zr%t=SpIc`Zi#DWS3dT%yjhWU{4N(414j)oLeTJ(M)M}g3e5m-5itF-mwnoGts(*t~ z^$!~@?G20OKWUDn1e|iOnJLV9xiurA%z1c4fMUjX^-R~EbE$xCUfuhI2Sv@sZ)yNB#qqFgng+4p0SlJp{@mDFi z^sJJhm28^wFVa;ZHjmK?CzRcrpr*ohjq;cQU)B_HQ~Dhj6`8rT=6bn}SFJ-SsS4s4 zMs7;um+&H)a1{Oy8fP|b_#3;=P*COnRt@)oU!}Yfdl9Pq_4BY2E*(%O(fUSe0!Zy6H0KJGprVhIoAEx^KlM(t8E)GQdgU{vnfxJkyrhnd6KTf=+_C*THMVrSsmu-0(gVWe=uLy0 zTD&RtIBbx?^!Q2T_x~k73~D2PhC8n{F%5eW4jMnYdL0`#OKf6)daMe*sF9&8n2N6} zJ)UT(_8{vUxN}2|b>2`q3cE1h<>GPP!=h;yQ@zYQ3mdFPZ&dhAnpeSeE?97!jO*eDt-qZ`A7-F7?gNXKu$^*X?;=H7&N1jTP_ z{@FK{Z(|?PpCcfQF~>Twx%!9GtIu7;i3Up%_;BD~6`(x@RURGxu7=uJ$=q1&sd z!FrxW^<-2dt0e?$dyz2T2e^7#?xosvP@l@&egR|Cz>rn4HNr;09KIRn>Snwr*@k^8 zynnwVYh%?WwtNz;?F0|PoF*U#STqB){ssOJA#HK@GaJyF?XnsK-jYn|G7epFV>k$Q zG*M>@PK;Gpj759uD3;IL5C6pNQt){-kp}pxIW9X1i(zASxAX~aBi`i{KbMPvu!_gq zoZ|OT;(sJ~wu{%-kZ)7WH-X@9!fWPTFr|+%r741k_IB}x%z0`A zThL%*&mY2BxHuONI&5>*3=pv4EbdVVj)DzNpu*iOrnC^J zevpS5r_=RKYCFArqd5K0F^n_sP4U#Pj-nLqne$OX6$Z)pd&w1a<%cCeN{D}u>#OUgG?&2CBgTT=cX|MB=ODgVD9 z<+tya(#dn9+R`QQdkdu~h{}ZSVmuVhcvnrLh|6pYREb@*_(k<|y0isqNd6Ypu1|xC zf_MF1QRfIvxc(`E-}j!uoxj(Iu6C1r&_e+I`DOKKz5G=uT|#wApoDC0BPePBynyB{)v)7w43soO^J(Qyf6g5{(*ILXDq~*e%gSwMJ#S8I#5?_WOo5+H0gEy_V zt8qe2o50fQl%p_OdkE^3{S8=&Eou4|s9in`w^z0kzgXY#nz{fsbiEP@1Jg<`eW?Vo zLg7c4OqgpfT|cSx(mrzxr@cEc6qLtA%G||+=?GMH=x>KH#RZ1O-R~d%MIej=@e4uM zC+l*J&a{|R{{SmK5N9MVUkC+8eM%>s^KBin$EUr=kK?OO)*?p zEh&62J{J(P2MR2nD0NoH)6?NfAo_k^_$emSsCPjXYd>b07~nNy>+4_fIKB^bx})yl zY+9|_`yx*z=Uccn5T&8jN79t1WH0o&RsZ50{1U*m!{fE~_lkj5KB zJzBqIn$I1p;^-Aw~mvqa4HNz8VN z(C_aotyaCYd$$XtHy4?;hNEz>Xv;TtL~a-47SjnC2d;95>_=zcWPX%+MDb%Q1ucxH zgp*jGniFcKK?XO$_PZIM6lu>+(bP|{{F$e)$}ou5lJi3~Q!n`xs|lA!J;C^lU^c_s zF&*zfsI95;q_RlVHB<3vSonr>x$+|%m0H^nk355Dos31cUW1EmAw6?Soi3;%ko=Cz zq5nBX8A2t^@Vd7319*egGaw)MGhKdCZPN1L*vWZr61}g@&;6j;^_eomJ8&EM9hTr$ z8^Qc)M+ zy>#>%+_d;2Qpo0S)IKb5>a^^SJmv4 zaVb4APHkQKNrnBRS0Dc9dB>?2%RYXo_>;2v8N&xz)AFWTqity0-4+#Ti;Rkl{fS(X z-&I;!#Q^T_E_I!dpFgcfmo78LPRO2|H6wEJ#Ibq0{aY130vJ4;h1GsQCg%GekZIU~ zh@0XtyWvCoP92w>;d+ZBc^qDqN%&56mJVkLCATNg$g65MHjqx>J2Q%47eEMGbO27X;7m!M;_Zr^!eXry1&)#QGXYIAu zUVHDg_OAiqJWMl>w_>D@CEjx-9&^gz$#$3Xv>j0 zv_6JtC!izH4ppKN4g}gDzQ*>l)N$xeRJ0-`1c(P>fZo6;AP(S!3_u9h7?OZcU^Flc z*aX}OoCF2~(}6j*&c-$^52Dr9_{QBxxeG`I`T^;-EMuGS7RVWgw@hFHkPUbNIlx%t zJ%!K?Oa%r{zXaR5v-$yu0!t_LV4)8(s9tht+b3+hz#(M$s|BCoL;5}eA($*u~35*0T z011E*>5~v9Bm6tUOTcAF#@o$Xvs-LmH6K{tZ=>FCE{8YkH>d3P>o*$LpQioh3BOan zJvwa;@(y7V7dc9cW8Stp+1oe~a+7F#pv5C)!xL220eRj{^Vw&%X~PTI-)xuh_fy-n z5sS(*M9XGN+jO zNmh{}l^x4x{cO{Y6|%mz%f||ZL}r`*?p)I{e5g#_d}V~mRCc??7VL+%hwNf(jBQ@Q zNb0adaoaq0^v+wz(v4Y^?@+iSr;Ia}>Jr2j+O!R92(#@LIvcaW;~AU3c~CanilTzG z;AA0)DPN;>&xRU&C@8^BLVhEYH|H;3 z%qmXDmxW;HPa@~jrn$EKki(pOTYme+b_?^XNEPfonOmV73f+aN#V3v{LU*7!z?;4k zB+LP2T#VnryBpG*0Up4;fEnPd@r)n5$AH#3Sk;E z3^m+}2>Xv(jyTM0bGC%fED0%njvp3FtGlem$%gfB}aXU#18=p z89b2}=Ir1hhdbg3^f(XsGsD*Q39nwA>T6`7#K*uWypIO1)YmwRFtxtSNbqNTeVn(j zLf^QQmPFbvw6(4Y8o*3iP;a4**@rQy{G1v~{f@JUHmu~?%svmzesXZtq^y-gcWpQl zI^bC4;DswP-gzPF^sS5>$5|J*J##Ld-~Z^M{oO`>Qb!)ES+E<|Uih~Dl%H3N%>VKY z-|)R+C4g%+J185NO^4c58Wp;-mE_X0MC(I%F+i?aHcxDL6%VMrB-mA8Pu2x|AZM zDAh>f>q;Y8ls{BhT-Flv-Tx#jKgW_Od7>CYMdw&P8$g%Ou|n3Lrk!VnZd~zmEyka6 z7vVMa?cKY>zRjCjdXn~}3O((v0<%{!p?tKEEHzGAT^r_Lz7^8Yd16<6MkW@D+bM0H z7(zj-Su4V8Pb%8TKzTP7q|bT2MZM9SSM@p13DCZKjfsM-$Q!k4S*64U?RuXs)v}`! zmz2gNR|Xm$=QUCH+D-;Ke@j8IpI4cE4>OTRuG*ePGu5PZI>0;_-(u?<*j{w^LG*A| zlHf%}2U$^-AiTiLtG484fAY-8#3S)1-|ume-3cAzO@~Ecs1|gH)rt00CfJVxOE9_) z-~ zh9s)%ECi9`ygZVQ#R?&=HCvIRKTT+t?>g+l)98&@AzIAK3nxdc&`X>$b{xgV3A4;& zea61}&7P`*SGzt`qI4_Usdwm1oY2<(5eq1PnCY}r{=;mz#3ywlE!w4rnH$zVCP0x( z!bwJbPpV#}C8H>BrWkAF(_u5sn<@Glw_t{B~4bci!?gdf&Z>X=ghbV6#VWQy$&Dwzfq%WLE&7P z`w1p{GA2im;8OLJzyxAPg`G-g3=Zdzw(qDA!wP?>oPVojl@Ht>G6-FuK^g{u_lqy9 zh5ymAiqS;<#*-qC|A&jLiPycp%9`hZ#<@TtFb|-~bJbgEWuU6ilF24Ft=kjA8_XUd zn93u?nQV~uK&1Exvv-F=>n;lA$>JsELzk1qLe_$&^%o1}478ElOtAgyp4%vx2?1K~ zyTo109xq7c1!9mElp*r99E)J5)nW_VqhI@*gO_)n?tMOGU#A(-^!n!gU2So3zEt;y z5UAyk6c#i4aOnF?e5Z^qe~s^y(zI{HLbnpIBo^S$4QZ~LAex!3eUiu{OZ1|UEb+KK z8;xa)iIkEjN{S72b$Lt47E_q?32&-$lK9Na3DR~}o+l16bCttOG(bzu6N8wvl$R`; zEEd^Q1);n|NG{|Bys^#mso(1PBJ=}V0{%cNAOL6$1OjbCFKfaN_& z43@ZR))xycElFI->|+EWDBCc|kOhNEJ{Ewn2>;@1>(yf6BTEmzcgxw<83%__+)359 zv_#cnKVS~lnm0PXN#hS8{xI+eP+GrXR2a_iU05Z5^$oJumtKSL`TF=;gfG^|X+x$E zR9bR?o*FL%v&+1aSI2)K^Pj-iz&F4Z;9tPEz<0n^;2K~M40P?R8ux4Vq5+(VXi9&6 zsOiW&Sj;dz2X#0mkO~Hi1Ab;pYM&?sQ(2(uLn;4MV$5wm4UK&8>z$KF{p0y>=Bs6A zbZ%6V(*OQ+8KbEq*fyk%{>53t&|&=!{o`RspNo^QkW-bkLy zz73L80lWX;Z-cdDcj*;I!){e4Y7;Yra#rOjrHX7FZJa6IURpBTUI5kjE4Qe>Rz8%5 zBa3tJ&56S2tU-mxi;sxq$5^8BFGyb+P`{U3h$H$jwunKk?~~+)bV^GWTF~Xu4LW`Z z?S6zsn7}9Kd78D6wWr_>^_&03vx9!%Cw}1PJ6^i9fi0%H=84vZLqyNAdo4}Y2lG70 zdNJ@Iz-I=TGnsdPzB^oml*Pbf0N))hMOXrq0u8&vWr%ZCU5=1|hTY+E#GeEX+E%Uh z&EosRXYp1EtOod@XbnO>&z=X?0xtmT0j_cQ^Ah44fQ`T=;AOy>bM0Cc;u`P@z-iu! z@HOCAy&MG4T{Fahw9`mB1JnU$fpfrl-~-@8;3I&aA-S=l;SBjV#6JT*2fhHl1TFwy z0T+S41DAly03DqnhT1n_Ma~d~sv;4)sfbA?9~!udd1~#8*t^WW70Y-15}N5;LdT1R zF4vb(?P`{Y`g;W7hO1_IvFKp&R9!6g;pPi|!ZY+8oHU$P&6Xo2J(l>O*i-78a7T(Z z|3NW;sqNdnpR)VCcUcmZMjJ=jZvV!OhHNytQQ$-3xu0BsH7vlX0zJ1{EYV6H7V}`o z`q4r{SV%H(a21P`)*vMe&?T6kN&RSMKXJh?TD+STqa%D-c@S7Y%`$~MY-!8Pg-_%4 z8Gw)TN`$L`3gB5_HNexKs}Fhng(mTJ_3`xxUjjA&8-Y#0W?&2OGEfC*z$?J3z*gWj zU>h?O8nz>{1K0^TfNEeDup8I|ybkOI-T?LiZvy*)w}1n{LEsQ@7^ne`0JXr|z)|2G z;27{Oa2$9KI03v5oMag=Tp@BAI0MuHXMuCTdEf)!L*OIeV}Ntu6NH}ve*-=PJ_o)6 zcwWPE5$}HoE&*NwZCuIxOH0yxyrENl0A9=&p&!t-G21f+uib#|Ko8))hOGR1((pP4 z;59Sq!*K{Rf$_iu;C_JT^CuheNkDFWS{}m5z!YFAFb&}4<~4l6Ta%`UcZqC1jhZGt zTW(~~SPwJoXbZ#-7+E&l(8zfcou}<76u%XIn@ObcN#tq2A}IDJM8Pfr%SFlVA}aP3 zqNhDr6sR~$Uawgn7xzlEK@+!W)+({ag9LwLJXueP!)SJI(*{a>RNO`tj|qNcjgq6a zA+x1TD#h=XJZbTBVozU1tpXf~+9xx5lGLMPN z8EslC&ZP~tqD5O-BBqJ;`A?X-YeSBsku?{OO9ELANWHb*i={L_ZO05LUZ9nBF-1#p zNE<}juuP1kl`D+3+UfT43Q?=PD5ZL67X};6E}GffctN#?7!`Y>(Yq?cSi-apPZ&#@ zQSD>=Kv9kZ1zlWZ4A+Jf8uv3wnQIzS^_+35O2Q%WV=cUs9ov770j3)#dBTM*Hi8R;y z-=tkJni-8*C_b#k?lBgqG%U=xhnCzeXK2Yj##iJYcdLz7c3ARels3Y2RZD%)_yt?D z=_5&4Q{g7#&oHAv74Gt0t*D);ySiqR8Dv*Xk@jgR%Z&aag;$DxTFJdelR!r+jKSLJ zoko~rj*Mb{+WJw(VN%s}W4V#edCQ5~)oSB5wx%`(MV;iCO%9K$5Ytvss~u)4X5=^7 zIF~FXobpgp0i)VQrcAofT=vn-wbFd1Rpd$g1peI^wx*&CQc^rk{s*HCJxr2Lf=Tm? zGIkI&$0NpLBJCPzs-&VI;|j9wGw#r8uNsROVQh-l)D8j(QBXOY?RAzKBX9vODUxE3 zOWU-fmBu1T%baW6B*N|1vQ^!`Qj_ z3Ll4R+1aK8t+l*!Qms)-D>cQaWOXUnlj#)LRxVQ$MhrZ~*WEZeyF`p5vqkpS+%0laGws|S z(-KiDc~x{_O{9g_iq?u#OhK%CwXu%ISmf@!mgQzGUG%kA%8GrE>|T{B&urx!?-iBO z@fIY#Ck4}mb>anjYB@&xYM#+w=Xd#Y#`WYr(v)Hw9urE|XT&nDaDr*xYq-y>4%C8DWoQ<(P!D#fLqBmuUq&MYc*t2=!kvHW|jM>@>UThMT2C8jb zpF%Px7$NO^Q*J@a-juyLrQs`)ngZu~9Ihv1!3&gQ7;fMm7!LkmRW&%BABd>5;(*+a zV)x4qE%q%rmX+fV6&;W#)4Kh#+5GCTx}$L)jvu({o7=2Yzid5_JPyh;Z<6)=L3xXw z<@Li_CTyP_hh&(3521C(VY!IiW2;`>hhl5w*zzObmIIMBjw4`W(GfYe>L@57$J;1e zc|aa~lkcs2N1hp=n+9Mpi8KTml5wdc3;oS7&zXSB|4K&GICcRX(@A z7PW~}rDh_HS*iw7n-g+66&;rYu|M`E4}W+dmzDYv4fCuN-Q zY5gfV2l>u}j5O6>bgTZD8Pc#|k}Q!ml^i8=9E# zb&I_lO!s`WxiPJV@+ahGOigvZC6CL_8#jeg)+)X()xplYIIb}A z^-?xd-V2HvofH)v-7P7;YgpH=eG|eWBjdY;#dM2_4~tHW>KYZ_H8CQ(Z`_>O$?4f+ zb907+xKuq#tfvxbo}j04l2i34rEgZOi7z)$-6b)iYnN_`@nKQXonyixyTvDk#V182 zgheGJBqT=1MMWh35i%evVb!J_U>a5Xer%#S55Ba7? zkL?;6nI02n9T%A%7MVFVIxHq8I-Ooxt5maBXvbRR5fdkI$}}ontAr-L)IeTDLSpB5 zYeGa=VsvC&SY%>cWEdFRH!M0bF)A*;OH^Xth^RTUM`lgU%FXGUk(Hl%J<9pn$z{5p zH4a&n=B-4sn+#*00}WsN&xTQR%#mZIKXoyt=>N~U_~3P2?7%Yc^ZHhUzU{*`@Xu*l zILPR;I(b2}e}aWv+i{Gcd1vKzPR)DmnCugp3RRnnf7$w?I0nY#>xwi7_p)*gW1w7l zRcvTcw|B2!Qa%&)rr^Gmv;HJQIuv_4mfUgF=RDSd_x7>deyy+dMrxY4uhoUC!|MvL zQ^&Eof}B*ZAhUAv$4$vhA3H8J%Q=%L=8kDh`yCW;r?xl!KG#oKIhnc6uR4C6zW70} z18?@#>q^nr{t>nnaqdbBD&4G9ORWrvKUSR0JrdHhv#^*92eHGZ<jo@O(}!pva`mMW53dG zICmuKPf;(&!-(*UorxP8xbd5>RIbggFKe{&9i?N7>+jBGPG9l#EYBZjmA|coQ_XIr z)!mg&s`2;2&gS^bFOvQt%b-iM#wC-Uc}KCDf4Gq9sUAN}9Y@vsl_W11r|KW8gR|Ph zV9@S#SDu&Y)lj7kwFythL4@v zk0!sU+(v!YE1u1p>~OxH^S!+fi0eotJ(O0Xdo_MH++jvMf`9i9pB|xZF7*-)qWkOJ zx#g!PRZe5U)<0R0cJ9XsDkny9vvm@bzQ5nzL~-SVGB`bpw$~`3p4WFSseDK#{X{w@ zW~g&8_=Ruh6Yk)9YhB8J<=*B8y6WH7(0)Gsox8FDxnue_=yNcCgg#20ZpQo@DE!7s z{}v5=9yN~NfW+T)!~RRx3wO8vTs-?@{Xi!M>OH^prajNEUuqhQ{(@DB_tJwaHs=%W zXp4vkojj_P-E{l?&^u5e)o&`DY1BK4JL_{jPF3BM5M88#2Q@Sa#mU7h9^msFCry2) zG4!u@Z`9oTC<03?MUwNeIJmwY3M5uHtPS1bz|42(@OGsu<;+#0X^bms zsY3+*bCs^-u|OF}DGL=BDw%^(shq2fre#5DZ24Fr5d}_Bx=BqSM{^;R>J};{BmZ5< zM2dR|$6Rg?E1#<T^HIK^|=25Q?)oT30&}@yoInx6w_H*?O$G`TFGxA zgtUO-eART@hAn=mF^U=86}9NIeXB%8HRg_m+D31C5ex;FMZir-A&#Lz<+D0YN11aRf744BgwH1{Mc$z15C5g8c-lTRU}GY0YrYpJhBxd6yxSy4d+& zQeIrM>7oK7H*Y-cDjI+Ee&&yM?m#;e8(8i~7ybz%XVck{@>rU9MG3^EBt9W*=INI5 zD~d@IzJ+u+$NtktLE*oYWR}h4D~>iyQG+S(NmVgc>!Vb?0E069s^X{ff~=3BgIB-9 z_Ur>!J`>Ot8t|Pmn$2{M!%DO2O`|N#|MB^1cS=c6tgigxjPs6tQxV?5(B0x?7$==c zv5VDUV=Br`Ajn1E$7|FOx*(`I@WP6>r`}d~6b1#0X_q$?1XvWoB{YLPE$T#C`xdUlzSvw%V)@PySm~k0&@eAGLyPxR z;g-Q*CsUB8Y5|Xr95UX?=QqS|Gwt+N3#s^+u2K9TjPB%8Eplnt13q4G&f1gnl|fYG zqeiglbi`ZkM@6Yd7uw+mKCSmvcVPNJMMP2AW!a)xF3G2x>DDu?=4;u?T!(jdTD8oE zH+3^wGrpt2QEpOt4ph8;qGE?`l*5%gJMd%E8&AJ(Ap2<})98($D`*jB|LiLmvMjC= zO1T2fpwL!oJEy!lRVCMl-n7GCb>aH3H+6PVM)I{Wn$lV*MjCoZd5zw4QyhJMzXQ)7 zawc(_=Ju{t*8YCm*_)Z#`u~@=qra`i_Lpt|`~UGLqUJaRGWhuUvu$eZO=q4IWJtWp z6l>|rk0g9^qCCy~%Q!I%)>Q-= z?oa7Q`5E;M#na;_@|t}wj~}9)=Tskl6mmX6jt+=$t4HEZl}@Xc-)pC7$A(=e#Q&y+ znoxTaids;@+sZrFx7;p`%)QY*9KYH9;kloyqr+6T4@`-O#R^lp51T_h_DrnOi_(rM zCXc!GUB)F_$0Ee7KV{m z7DAt!uZ&gq@!s^j>N&%B-I=Pu=eFm~W*x=rx;Pmi?CO*Y|#-(72NQPu0#9);@W!kYL+TUcmx(?!9p zYK7Ad6Mk8Vw|zRxhxP}n$!sFGSG1sW70eIK6gVxEf0~Qx%|)kwbK_9HI)bd@1cl7L z_-#{axa=Z3rJxU;lGUvL_sv5Q2}+W!RSY*pyJ8zSyU}9Vf%4m_OV}`{z#YnmWWKsr z_M@D3stE>2SQLBFm>|`kN_=6f+vKAz`6U*dWP)`t0M{2F|1eRvRDaEs4o=!;|EaNai9{ws;a z!zIFf5fqfCw&TXmWTz)&MJ{(-o?@KCCm2mLvcuFZpI1=oe$sbn&)M7)>}Ee(@xHcM%g!&nXN!N#o{PhlRk zaP#$iRzz)=s`t@-b660$Pe*|Q@)&Bmoy=+>)7Z6pG&|t`i{*5R6vThg(Jx9%Fsq4^p-FpIONrcn7U6Y_#Xix!MRJs?!@c>u} z<1RRp4_16sfOz*$NQlCh1y8oGsR4H?lkklY@|do6t@lTCulGf93;du$jJkEM zI)#Q8V@ZI->!#;OE*SNk-!o4QL2nyYF6Ymt(dIUq+)f=&(H^Qh?PzKA0SBH22X;BX z4lhtj{Tk=AWuKUjc?`RBy*p;@M=T9BcB95zE<#Q1vDOY4tm9O;3_d!2@o{++Mtyxi zRxEH1NUY6qw-4uzCv{%{7U^QCi`UvfHXPKwPA^?lCQ<4Wko&bZ!G{VKA{Ozex&X%T zRnM755F7_EpDa>eVN;qIxUok1xkl9gY8SsQq9g60qf;P0&8Oh@>r}%`P#g*DX&f(j z4;(BKooR;T9H%!3?wk;^-owl)cVSEfbbI*-`k+MhHcrC(65i{3$$Ss98hM$WRJ{nY zkBaf!;}^-@0t&5vPjul<6mR2blv!BsjM05*Eu9RiSqfhQcMp`0Vp!*=VKj=Cf+M=) z=R_%t-nE~JfxlQSU<+_I%h->4mti|l!e{BdG`CJR(`N^9$9TgtCNr4(tnOvw{s?c| ziY?qz+6mM-w7n<=*8B)F-A zD0>DZqQi1^E_c&3x;q;OWU>ZdrOLE1m6+{6mXXelGIE4o@Kq;KO07CvS3VT`Aq$|B z2UsY&{4V$L<=Q@5JOnRyYUqD6#$7Luke3At@um4vr=7XIpCWk$-tg`wm!|{jUB$tZaH;Jw)kA0+#Y~s+(MI;-%Pw z%#U>@HBJce#2uKN@G0Y_^0{R&^~{-;U3E&0V+uFf;?6+~FJ+~t&Z#Zwu7eB{D^5^J lJ)yRyx+Gy7E$%1u(2CBexP1RcKcO2veG>lR*t4qR{{SIGo;v^l diff --git a/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt b/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt index 1fbb4fa..14b3644 100644 --- a/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt +++ b/CaliperTool/obj/Debug/CaliperTool.csproj.FileListAbsolute.txt @@ -32,9 +32,6 @@ G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources -F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\log4net.config F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CaliperTool.dll F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\CaliperTool.pdb @@ -60,5 +57,8 @@ F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\Newtonsoft.Json.xml F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\bin\Debug\DevComponents.DotNetBar2.xml +F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources +F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll F:\GitHubClone\最新克隆\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb diff --git a/CommonMethods/Interface/CommonStruct.cs b/CommonMethods/Interface/CommonStruct.cs index 1af3dff..d1f6857 100644 --- a/CommonMethods/Interface/CommonStruct.cs +++ b/CommonMethods/Interface/CommonStruct.cs @@ -49,6 +49,7 @@ namespace CommonMethods { String, IntValue, + DoubleValue, Region, Image, Point, @@ -89,6 +90,7 @@ namespace CommonMethods No_Input_String, Tool_Run_Error, Input_Value_Type_Error, + Model_UnFound, 未运行, 未启用, 缺少输入搜索区域, diff --git a/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt b/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt index a3eae75..703c107 100644 --- a/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt +++ b/CommonMethods/obj/Debug/CommonHelper.csproj.FileListAbsolute.txt @@ -12,4 +12,3 @@ F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\bin\Debug\Newtonsoft.Json.xml F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\obj\Debug\CommonMethods.dll F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\obj\Debug\CommonMethods.pdb -F:\GitHubClone\最新克隆\VisionEdit\CommonMethods\obj\Debug\CommonHelper.csprojResolveAssemblyReference.cache diff --git a/DataStruct/DataStruct.cs b/DataStruct/DataStruct.cs index 6683e7b..b5e748d 100644 --- a/DataStruct/DataStruct.cs +++ b/DataStruct/DataStruct.cs @@ -37,11 +37,11 @@ namespace DataStruct [Serializable] public class XYU { - internal XYU() + public XYU() { _point = new XY(); } - internal XYU(double x, double y, double u) + public XYU(double x, double y, double u) { _point = new XY(); _point.X = x; diff --git a/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt b/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt index 38ab3f2..0606f79 100644 --- a/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt +++ b/FindCircle/obj/Debug/FindCircleTool.csproj.FileListAbsolute.txt @@ -24,9 +24,6 @@ G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resource G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.dll G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources -F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\FindCircleTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\FindCircleTool.pdb F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\CommonMethods.dll @@ -41,5 +38,8 @@ F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\ToolBase.pdb F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\FindCircle\bin\Debug\Newtonsoft.Json.xml +F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources +F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindCircle\obj\Debug\FindCircleTool.pdb diff --git a/FindLine/FindLine.cs b/FindLine/FindLine.cs index 04c4f6d..3ae5ae2 100644 --- a/FindLine/FindLine.cs +++ b/FindLine/FindLine.cs @@ -1,11 +1,9 @@ using System; using HalconDotNet; -using DataStruct; using static DataStruct.DataStruct; using ToolBase; using CommonMethods; using System.Diagnostics; -using ChoiceTech.Halcon.Control; namespace FindLineTool { @@ -207,7 +205,7 @@ namespace FindLineTool { if(inputImage != null) { - FormFindLine.Instance.myHwindow.DispHWindow.DispImage(new HImage(inputImage)); + FormFindLine.Instance.myHwindow.DispImage(new HImage(inputImage)); } } diff --git a/FindLine/FormFindLine.Designer.cs b/FindLine/FormFindLine.Designer.cs index c6c4f00..eee906c 100644 --- a/FindLine/FormFindLine.Designer.cs +++ b/FindLine/FormFindLine.Designer.cs @@ -32,6 +32,9 @@ this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.panel1 = new System.Windows.Forms.Panel(); this.tabControl1 = new System.Windows.Forms.TabControl(); @@ -68,9 +71,6 @@ this.label7 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label(); - this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStrip1.SuspendLayout(); this.statusStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); @@ -119,6 +119,22 @@ this.statusStrip.TabIndex = 3; this.statusStrip.Text = "statusStrip1"; // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(120, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; @@ -528,23 +544,7 @@ this.label9.TabIndex = 105; this.label9.Text = "起点列坐标:"; // - // lb_RunStatus - // - this.lb_RunStatus.Name = "lb_RunStatus"; - this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); - // - // toolStripStatusLabel1 - // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(120, 17); - this.toolStripStatusLabel1.Text = " "; - // - // lb_RunTime - // - this.lb_RunTime.Name = "lb_RunTime"; - this.lb_RunTime.Size = new System.Drawing.Size(0, 17); - // - // FormFindLine2 + // FormFindLine // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; @@ -553,7 +553,7 @@ this.Controls.Add(this.statusStrip); this.Controls.Add(this.toolStrip1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "FormFindLine2"; + this.Name = "FormFindLine"; this.Text = "找线工具"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormFindLine2_FormClosing); this.Load += new System.EventHandler(this.FormFindLine2_Load); diff --git a/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt b/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt index 36c45a7..c42f8e1 100644 --- a/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt +++ b/FindLine/obj/Debug/FindLineTool.csproj.FileListAbsolute.txt @@ -32,9 +32,6 @@ G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.dll G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources -F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\log4net.config F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\FindLineTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\FindLineTool.pdb @@ -60,5 +57,8 @@ F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\Newtonsoft.Json.xml F:\GitHubClone\最新克隆\VisionEdit\FindLine\bin\Debug\DevComponents.DotNetBar2.xml +F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources +F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.dll F:\GitHubClone\最新克隆\VisionEdit\FindLine\obj\Debug\FindLineTool.pdb diff --git a/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt b/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt index 83ba5d4..f68bb43 100644 --- a/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt +++ b/HalconTool/obj/Debug/HalconTool.csproj.FileListAbsolute.txt @@ -32,9 +32,6 @@ G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.FormHalconTool.resource G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.csproj.GenerateResource.Cache G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.dll G:\VisionEdit\VisionEdit\HalconTool\obj\Debug\HalconTool.pdb -F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csprojResolveAssemblyReference.cache -F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.FormHalconTool.resources -F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\log4net.config F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\HalconTool.dll F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\HalconTool.pdb @@ -58,5 +55,8 @@ F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\HWindow_Tool.pdb F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\DevComponents.DotNetBar2.xml F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\halcondotnet.xml F:\GitHubClone\最新克隆\VisionEdit\HalconTool\bin\Debug\Newtonsoft.Json.xml +F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csprojResolveAssemblyReference.cache +F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.FormHalconTool.resources +F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.csproj.GenerateResource.Cache F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.dll F:\GitHubClone\最新克隆\VisionEdit\HalconTool\obj\Debug\HalconTool.pdb diff --git a/PMAlignTool/FormPMAlignTool.Designer.cs b/PMAlignTool/FormPMAlignTool.Designer.cs index f1de632..491860e 100644 --- a/PMAlignTool/FormPMAlignTool.Designer.cs +++ b/PMAlignTool/FormPMAlignTool.Designer.cs @@ -29,7 +29,10 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormPMAlignTool)); - this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); @@ -41,7 +44,6 @@ this.label4 = new System.Windows.Forms.Label(); this.panel9 = new System.Windows.Forms.Panel(); this.label3 = new System.Windows.Forms.Label(); - this.hWindowTool_Smart1 = new ViewROI.HWindowTool_Smart(); this.panel3 = new System.Windows.Forms.Panel(); this.label1 = new System.Windows.Forms.Label(); this.panel8 = new System.Windows.Forms.Panel(); @@ -61,9 +63,9 @@ this.rdo_templateRegionSub = new System.Windows.Forms.RadioButton(); this.rdo_templateRegionAdd = new System.Windows.Forms.RadioButton(); this.panel14 = new System.Windows.Forms.Panel(); - this.cNumErosionValue2 = new Controls.CNumericUpDown(); - this.cNumDilationValue2 = new Controls.CNumericUpDown(); - this.cNumErosionValue1 = new Controls.CNumericUpDown(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); this.cbCDilation1 = new System.Windows.Forms.CheckBox(); this.cbCErosion1 = new System.Windows.Forms.CheckBox(); this.cbCErosion2 = new System.Windows.Forms.CheckBox(); @@ -76,16 +78,6 @@ this.panel11 = new System.Windows.Forms.Panel(); this.label11 = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); - this.ckb_autoContrast = new Controls.CCheckBox(); - this.numericUpDown2 = new Controls.CNumericUpDown(); - this.nud_angleRange = new Controls.CNumericUpDown(); - this.numericUpDown1 = new Controls.CNumericUpDown(); - this.nud_angleStart = new Controls.CNumericUpDown(); - this.cbx_polarity = new Controls.CComboBox(); - this.nud_minScore = new Controls.CNumericUpDown(); - this.numericUpDown3 = new Controls.CNumericUpDown(); - this.nud_angleStep = new Controls.CNumericUpDown(); - this.nud_matchNum = new Controls.CNumericUpDown(); this.tkb_contrast = new System.Windows.Forms.TrackBar(); this.lbl_contastValue = new System.Windows.Forms.Label(); this.label87 = new System.Windows.Forms.Label(); @@ -100,7 +92,6 @@ this.label15 = new System.Windows.Forms.Label(); this.label85 = new System.Windows.Forms.Label(); this.panel5 = new System.Windows.Forms.Panel(); - this.cbx_searchRegionType = new Controls.CComboBox(); this.label5 = new System.Windows.Forms.Label(); this.tabPage4 = new System.Windows.Forms.TabPage(); this.panel6 = new System.Windows.Forms.Panel(); @@ -117,6 +108,25 @@ this.Column9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Column12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.hWindowTool_Smart1 = new ViewROI.HWindowTool_Smart(); + this.cmbErsion2 = new Controls.CComboBox(); + this.cmbDilation = new Controls.CComboBox(); + this.cmbErsion1 = new Controls.CComboBox(); + this.cNumErosionValue2 = new Controls.CNumericUpDown(); + this.cNumDilationValue2 = new Controls.CNumericUpDown(); + this.cNumErosionValue1 = new Controls.CNumericUpDown(); + this.nud_angleRange = new Controls.CNumericUpDown(); + this.ckb_autoContrast = new Controls.CCheckBox(); + this.nud_ScaleRange = new Controls.CNumericUpDown(); + this.nud_ScaleStart = new Controls.CNumericUpDown(); + this.nud_angleStart = new Controls.CNumericUpDown(); + this.cbx_polarity = new Controls.CComboBox(); + this.nud_minScore = new Controls.CNumericUpDown(); + this.numericUpDown3 = new Controls.CNumericUpDown(); + this.nud_angleStep = new Controls.CNumericUpDown(); + this.nud_matchNum = new Controls.CNumericUpDown(); + this.cbx_searchRegionType = new Controls.CComboBox(); + this.statusStrip.SuspendLayout(); this.toolStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); @@ -147,14 +157,33 @@ ((System.ComponentModel.ISupportInitialize)(this.dgv_matchResult)).BeginInit(); this.SuspendLayout(); // - // statusStrip1 + // statusStrip // - this.statusStrip1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.statusStrip1.Location = new System.Drawing.Point(0, 633); - this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(999, 22); - this.statusStrip1.TabIndex = 0; - this.statusStrip1.Text = "statusStrip1"; + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 633); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(999, 22); + this.statusStrip.TabIndex = 0; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); // // toolStrip1 // @@ -174,6 +203,7 @@ this.tsbtRunTool.Name = "tsbtRunTool"; this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); this.tsbtRunTool.Text = "运行工具"; + this.tsbtRunTool.Click += new System.EventHandler(this.tsbtRunTool_Click); // // splitContainer1 // @@ -310,18 +340,6 @@ this.label3.TabIndex = 11; this.label3.Text = "模板ROI方式"; // - // hWindowTool_Smart1 - // - this.hWindowTool_Smart1.DispStatus = false; - this.hWindowTool_Smart1.Dock = System.Windows.Forms.DockStyle.Fill; - this.hWindowTool_Smart1.hv_Image = null; - this.hWindowTool_Smart1.Location = new System.Drawing.Point(4, 5); - this.hWindowTool_Smart1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.hWindowTool_Smart1.Name = "hWindowTool_Smart1"; - this.tableLayoutPanel1.SetRowSpan(this.hWindowTool_Smart1, 3); - this.hWindowTool_Smart1.Size = new System.Drawing.Size(226, 169); - this.hWindowTool_Smart1.TabIndex = 0; - // // panel3 // this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(26)))), ((int)(((byte)(106)))), ((int)(((byte)(175))))); @@ -359,9 +377,10 @@ // this.panel18.Controls.Add(this.rabGray); this.panel18.Controls.Add(this.rabShape); - this.panel18.Location = new System.Drawing.Point(6, 2); + this.panel18.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel18.Location = new System.Drawing.Point(0, 0); this.panel18.Name = "panel18"; - this.panel18.Size = new System.Drawing.Size(367, 35); + this.panel18.Size = new System.Drawing.Size(376, 38); this.panel18.TabIndex = 147; // // rabGray @@ -376,6 +395,7 @@ this.rabGray.TabIndex = 143; this.rabGray.Text = "基于灰度"; this.rabGray.UseVisualStyleBackColor = true; + this.rabGray.CheckedChanged += new System.EventHandler(this.rabShape_CheckedChanged); // // rabShape // @@ -391,11 +411,13 @@ this.rabShape.TabStop = true; this.rabShape.Text = "基于轮廓"; this.rabShape.UseVisualStyleBackColor = true; + this.rabShape.CheckedChanged += new System.EventHandler(this.rabShape_CheckedChanged); // // groupBox1 // this.groupBox1.Controls.Add(this.rabFormLocal); this.groupBox1.Controls.Add(this.rabFormFlow); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.groupBox1.Location = new System.Drawing.Point(237, 3); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(142, 79); @@ -405,6 +427,9 @@ // // rabFormLocal // + this.rabFormLocal.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.rabFormLocal.AutoSize = true; this.rabFormLocal.Location = new System.Drawing.Point(6, 51); this.rabFormLocal.Name = "rabFormLocal"; @@ -415,6 +440,8 @@ // // rabFormFlow // + this.rabFormFlow.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.rabFormFlow.AutoSize = true; this.rabFormFlow.Checked = true; this.rabFormFlow.Location = new System.Drawing.Point(6, 25); @@ -578,6 +605,12 @@ // panel14 // this.tableLayoutPanel1.SetColumnSpan(this.panel14, 2); + this.panel14.Controls.Add(this.label8); + this.panel14.Controls.Add(this.label7); + this.panel14.Controls.Add(this.label6); + this.panel14.Controls.Add(this.cmbErsion2); + this.panel14.Controls.Add(this.cmbDilation); + this.panel14.Controls.Add(this.cmbErsion1); this.panel14.Controls.Add(this.cNumErosionValue2); this.panel14.Controls.Add(this.cNumDilationValue2); this.panel14.Controls.Add(this.cNumErosionValue1); @@ -591,95 +624,35 @@ this.panel14.Size = new System.Drawing.Size(376, 142); this.panel14.TabIndex = 127; // - // cNumErosionValue2 + // label8 // - this.cNumErosionValue2.BackColor = System.Drawing.Color.White; - this.cNumErosionValue2.DecimalPlaces = 2; - this.cNumErosionValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cNumErosionValue2.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue2.Location = new System.Drawing.Point(71, 85); - this.cNumErosionValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cNumErosionValue2.MaximumSize = new System.Drawing.Size(300, 26); - this.cNumErosionValue2.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.cNumErosionValue2.MinimumSize = new System.Drawing.Size(50, 26); - this.cNumErosionValue2.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue2.Name = "cNumErosionValue2"; - this.cNumErosionValue2.Size = new System.Drawing.Size(227, 26); - this.cNumErosionValue2.TabIndex = 174; - this.cNumErosionValue2.Value = 0.1D; - this.cNumErosionValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + this.label8.AutoSize = true; + this.label8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.Location = new System.Drawing.Point(218, 96); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(44, 17); + this.label8.TabIndex = 176; + this.label8.Text = "方式:"; // - // cNumDilationValue2 + // label7 // - this.cNumDilationValue2.BackColor = System.Drawing.Color.White; - this.cNumDilationValue2.DecimalPlaces = 2; - this.cNumDilationValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cNumDilationValue2.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumDilationValue2.Location = new System.Drawing.Point(71, 49); - this.cNumDilationValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cNumDilationValue2.MaximumSize = new System.Drawing.Size(300, 26); - this.cNumDilationValue2.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.cNumDilationValue2.MinimumSize = new System.Drawing.Size(50, 26); - this.cNumDilationValue2.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumDilationValue2.Name = "cNumDilationValue2"; - this.cNumDilationValue2.Size = new System.Drawing.Size(227, 26); - this.cNumDilationValue2.TabIndex = 174; - this.cNumDilationValue2.Value = 0.1D; - this.cNumDilationValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + this.label7.AutoSize = true; + this.label7.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label7.Location = new System.Drawing.Point(218, 54); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(44, 17); + this.label7.TabIndex = 176; + this.label7.Text = "方式:"; // - // cNumErosionValue1 + // label6 // - this.cNumErosionValue1.BackColor = System.Drawing.Color.White; - this.cNumErosionValue1.DecimalPlaces = 2; - this.cNumErosionValue1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cNumErosionValue1.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue1.Location = new System.Drawing.Point(71, 13); - this.cNumErosionValue1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cNumErosionValue1.MaximumSize = new System.Drawing.Size(300, 26); - this.cNumErosionValue1.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.cNumErosionValue1.MinimumSize = new System.Drawing.Size(50, 26); - this.cNumErosionValue1.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.cNumErosionValue1.Name = "cNumErosionValue1"; - this.cNumErosionValue1.Size = new System.Drawing.Size(227, 26); - this.cNumErosionValue1.TabIndex = 174; - this.cNumErosionValue1.Value = 0.1D; - this.cNumErosionValue1.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + this.label6.AutoSize = true; + this.label6.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label6.Location = new System.Drawing.Point(218, 19); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(44, 17); + this.label6.TabIndex = 176; + this.label6.Text = "方式:"; // // cbCDilation1 // @@ -706,7 +679,7 @@ // cbCErosion2 // this.cbCErosion2.AutoSize = true; - this.cbCErosion2.Location = new System.Drawing.Point(6, 85); + this.cbCErosion2.Location = new System.Drawing.Point(6, 92); this.cbCErosion2.Name = "cbCErosion2"; this.cbCErosion2.Size = new System.Drawing.Size(56, 24); this.cbCErosion2.TabIndex = 3; @@ -716,18 +689,18 @@ // // btnCreateModel // - this.btnCreateModel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); this.btnCreateModel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(150)))), ((int)(((byte)(219))))); this.btnCreateModel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.btnCreateModel.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCreateModel.Dock = System.Windows.Forms.DockStyle.Fill; this.btnCreateModel.FlatAppearance.BorderSize = 0; this.btnCreateModel.FlatAppearance.MouseDownBackColor = System.Drawing.Color.DarkGray; this.btnCreateModel.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray; this.btnCreateModel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnCreateModel.ForeColor = System.Drawing.Color.White; - this.btnCreateModel.Location = new System.Drawing.Point(259, 134); + this.btnCreateModel.Location = new System.Drawing.Point(237, 134); this.btnCreateModel.Name = "btnCreateModel"; - this.btnCreateModel.Size = new System.Drawing.Size(97, 42); + this.btnCreateModel.Size = new System.Drawing.Size(142, 42); this.btnCreateModel.TabIndex = 129; this.btnCreateModel.TabStop = false; this.btnCreateModel.Text = "创建模板"; @@ -736,18 +709,18 @@ // // btnAcqNewModelImage // - this.btnAcqNewModelImage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); this.btnAcqNewModelImage.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(150)))), ((int)(((byte)(219))))); this.btnAcqNewModelImage.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.btnAcqNewModelImage.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAcqNewModelImage.Dock = System.Windows.Forms.DockStyle.Fill; this.btnAcqNewModelImage.FlatAppearance.BorderSize = 0; this.btnAcqNewModelImage.FlatAppearance.MouseDownBackColor = System.Drawing.Color.DarkGray; this.btnAcqNewModelImage.FlatAppearance.MouseOverBackColor = System.Drawing.Color.LightGray; this.btnAcqNewModelImage.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnAcqNewModelImage.ForeColor = System.Drawing.Color.White; - this.btnAcqNewModelImage.Location = new System.Drawing.Point(259, 88); + this.btnAcqNewModelImage.Location = new System.Drawing.Point(237, 88); this.btnAcqNewModelImage.Name = "btnAcqNewModelImage"; - this.btnAcqNewModelImage.Size = new System.Drawing.Size(97, 40); + this.btnAcqNewModelImage.Size = new System.Drawing.Size(142, 40); this.btnAcqNewModelImage.TabIndex = 129; this.btnAcqNewModelImage.TabStop = false; this.btnAcqNewModelImage.Text = "获取图像"; @@ -844,10 +817,10 @@ // panel2 // this.panel2.BackColor = System.Drawing.Color.White; - this.panel2.Controls.Add(this.ckb_autoContrast); - this.panel2.Controls.Add(this.numericUpDown2); this.panel2.Controls.Add(this.nud_angleRange); - this.panel2.Controls.Add(this.numericUpDown1); + this.panel2.Controls.Add(this.ckb_autoContrast); + this.panel2.Controls.Add(this.nud_ScaleRange); + this.panel2.Controls.Add(this.nud_ScaleStart); this.panel2.Controls.Add(this.nud_angleStart); this.panel2.Controls.Add(this.cbx_polarity); this.panel2.Controls.Add(this.nud_minScore); @@ -873,266 +846,6 @@ this.panel2.Size = new System.Drawing.Size(376, 301); this.panel2.TabIndex = 149; // - // ckb_autoContrast - // - this.ckb_autoContrast.BackColor = System.Drawing.Color.White; - this.ckb_autoContrast.Checked = true; - this.ckb_autoContrast.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.ckb_autoContrast.Location = new System.Drawing.Point(85, 236); - this.ckb_autoContrast.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.ckb_autoContrast.Name = "ckb_autoContrast"; - this.ckb_autoContrast.Size = new System.Drawing.Size(96, 20); - this.ckb_autoContrast.TabIndex = 181; - this.ckb_autoContrast.TextStr = "自动"; - // - // numericUpDown2 - // - this.numericUpDown2.BackColor = System.Drawing.Color.White; - this.numericUpDown2.DecimalPlaces = 1; - this.numericUpDown2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.numericUpDown2.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown2.Location = new System.Drawing.Point(171, 183); - this.numericUpDown2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.numericUpDown2.MaximumSize = new System.Drawing.Size(300, 28); - this.numericUpDown2.MaxValue = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.numericUpDown2.MinimumSize = new System.Drawing.Size(50, 28); - this.numericUpDown2.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown2.Name = "numericUpDown2"; - this.numericUpDown2.Size = new System.Drawing.Size(141, 28); - this.numericUpDown2.TabIndex = 180; - this.numericUpDown2.Value = 0.1D; - // - // nud_angleRange - // - this.nud_angleRange.BackColor = System.Drawing.Color.White; - this.nud_angleRange.DecimalPlaces = 0; - this.nud_angleRange.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_angleRange.Incremeent = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nud_angleRange.Location = new System.Drawing.Point(171, 154); - this.nud_angleRange.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_angleRange.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_angleRange.MaxValue = new decimal(new int[] { - 180, - 0, - 0, - 0}); - this.nud_angleRange.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_angleRange.MinValue = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.nud_angleRange.Name = "nud_angleRange"; - this.nud_angleRange.Size = new System.Drawing.Size(141, 28); - this.nud_angleRange.TabIndex = 178; - this.nud_angleRange.Value = 0D; - // - // numericUpDown1 - // - this.numericUpDown1.BackColor = System.Drawing.Color.White; - this.numericUpDown1.DecimalPlaces = 1; - this.numericUpDown1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.numericUpDown1.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown1.Location = new System.Drawing.Point(85, 183); - this.numericUpDown1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.numericUpDown1.MaximumSize = new System.Drawing.Size(300, 28); - this.numericUpDown1.MaxValue = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.numericUpDown1.MinimumSize = new System.Drawing.Size(50, 28); - this.numericUpDown1.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(141, 28); - this.numericUpDown1.TabIndex = 179; - this.numericUpDown1.Value = 0.1D; - // - // nud_angleStart - // - this.nud_angleStart.BackColor = System.Drawing.Color.White; - this.nud_angleStart.DecimalPlaces = 0; - this.nud_angleStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_angleStart.Incremeent = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nud_angleStart.Location = new System.Drawing.Point(85, 154); - this.nud_angleStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_angleStart.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_angleStart.MaxValue = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.nud_angleStart.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_angleStart.MinValue = new decimal(new int[] { - 180, - 0, - 0, - -2147483648}); - this.nud_angleStart.Name = "nud_angleStart"; - this.nud_angleStart.Size = new System.Drawing.Size(141, 28); - this.nud_angleStart.TabIndex = 176; - this.nud_angleStart.Value = 0D; - // - // cbx_polarity - // - this.cbx_polarity.BackColor = System.Drawing.Color.White; - this.cbx_polarity.CanEdit = false; - this.cbx_polarity.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cbx_polarity.Items = new string[] { - "使用极性", - "忽略极性"}; - this.cbx_polarity.Location = new System.Drawing.Point(84, 129); - this.cbx_polarity.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cbx_polarity.Name = "cbx_polarity"; - this.cbx_polarity.SelectedIndex = 1; - this.cbx_polarity.Size = new System.Drawing.Size(231, 26); - this.cbx_polarity.TabIndex = 172; - this.cbx_polarity.TextStr = "忽略极性"; - // - // nud_minScore - // - this.nud_minScore.BackColor = System.Drawing.Color.White; - this.nud_minScore.DecimalPlaces = 2; - this.nud_minScore.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_minScore.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nud_minScore.Location = new System.Drawing.Point(85, 9); - this.nud_minScore.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_minScore.MaximumSize = new System.Drawing.Size(300, 26); - this.nud_minScore.MaxValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_minScore.MinimumSize = new System.Drawing.Size(50, 26); - this.nud_minScore.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 65536}); - this.nud_minScore.Name = "nud_minScore"; - this.nud_minScore.Size = new System.Drawing.Size(227, 26); - this.nud_minScore.TabIndex = 173; - this.nud_minScore.Value = 0.1D; - // - // numericUpDown3 - // - this.numericUpDown3.BackColor = System.Drawing.Color.White; - this.numericUpDown3.DecimalPlaces = 0; - this.numericUpDown3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.numericUpDown3.Incremeent = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.numericUpDown3.Location = new System.Drawing.Point(84, 96); - this.numericUpDown3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.numericUpDown3.MaximumSize = new System.Drawing.Size(300, 28); - this.numericUpDown3.MaxValue = new decimal(new int[] { - 10000, - 0, - 0, - 0}); - this.numericUpDown3.MinimumSize = new System.Drawing.Size(50, 28); - this.numericUpDown3.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.numericUpDown3.Name = "numericUpDown3"; - this.numericUpDown3.Size = new System.Drawing.Size(227, 28); - this.numericUpDown3.TabIndex = 177; - this.numericUpDown3.Value = 100D; - // - // nud_angleStep - // - this.nud_angleStep.BackColor = System.Drawing.Color.White; - this.nud_angleStep.DecimalPlaces = 0; - this.nud_angleStep.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_angleStep.Incremeent = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nud_angleStep.Location = new System.Drawing.Point(84, 67); - this.nud_angleStep.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_angleStep.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_angleStep.MaxValue = new decimal(new int[] { - 100, - 0, - 0, - 0}); - this.nud_angleStep.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_angleStep.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_angleStep.Name = "nud_angleStep"; - this.nud_angleStep.Size = new System.Drawing.Size(227, 28); - this.nud_angleStep.TabIndex = 175; - this.nud_angleStep.Value = 1D; - // - // nud_matchNum - // - this.nud_matchNum.BackColor = System.Drawing.Color.White; - this.nud_matchNum.DecimalPlaces = 0; - this.nud_matchNum.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.nud_matchNum.Incremeent = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_matchNum.Location = new System.Drawing.Point(85, 38); - this.nud_matchNum.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.nud_matchNum.MaximumSize = new System.Drawing.Size(300, 28); - this.nud_matchNum.MaxValue = new decimal(new int[] { - 10000, - 0, - 0, - 0}); - this.nud_matchNum.MinimumSize = new System.Drawing.Size(50, 28); - this.nud_matchNum.MinValue = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nud_matchNum.Name = "nud_matchNum"; - this.nud_matchNum.Size = new System.Drawing.Size(227, 28); - this.nud_matchNum.TabIndex = 174; - this.nud_matchNum.Value = 1D; - // // tkb_contrast // this.tkb_contrast.AutoSize = false; @@ -1174,7 +887,7 @@ this.label26.AutoSize = true; this.label26.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label26.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.label26.Location = new System.Drawing.Point(249, 159); + this.label26.Location = new System.Drawing.Point(318, 160); this.label26.Name = "label26"; this.label26.Size = new System.Drawing.Size(31, 17); this.label26.TabIndex = 171; @@ -1282,25 +995,6 @@ this.panel5.Size = new System.Drawing.Size(376, 181); this.panel5.TabIndex = 151; // - // cbx_searchRegionType - // - this.cbx_searchRegionType.BackColor = System.Drawing.Color.White; - this.cbx_searchRegionType.CanEdit = false; - this.cbx_searchRegionType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.cbx_searchRegionType.Items = new string[] { - "整幅图像", - "矩形", - "仿射矩形", - "圆", - "多点"}; - this.cbx_searchRegionType.Location = new System.Drawing.Point(79, 14); - this.cbx_searchRegionType.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.cbx_searchRegionType.Name = "cbx_searchRegionType"; - this.cbx_searchRegionType.SelectedIndex = 0; - this.cbx_searchRegionType.Size = new System.Drawing.Size(172, 26); - this.cbx_searchRegionType.TabIndex = 122; - this.cbx_searchRegionType.TextStr = "整幅图像"; - // // label5 // this.label5.AutoSize = true; @@ -1473,6 +1167,443 @@ this.Column12.Name = "Column12"; this.Column12.ReadOnly = true; // + // hWindowTool_Smart1 + // + this.hWindowTool_Smart1.DispStatus = false; + this.hWindowTool_Smart1.Dock = System.Windows.Forms.DockStyle.Fill; + this.hWindowTool_Smart1.hv_Image = null; + this.hWindowTool_Smart1.Location = new System.Drawing.Point(4, 5); + this.hWindowTool_Smart1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.hWindowTool_Smart1.Name = "hWindowTool_Smart1"; + this.tableLayoutPanel1.SetRowSpan(this.hWindowTool_Smart1, 3); + this.hWindowTool_Smart1.Size = new System.Drawing.Size(226, 169); + this.hWindowTool_Smart1.TabIndex = 0; + // + // cmbErsion2 + // + this.cmbErsion2.BackColor = System.Drawing.Color.White; + this.cmbErsion2.CanEdit = false; + this.cmbErsion2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbErsion2.Items = new string[] { + "octagon", + "rectangle", + "rhombus"}; + this.cmbErsion2.Location = new System.Drawing.Point(268, 91); + this.cmbErsion2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cmbErsion2.Name = "cmbErsion2"; + this.cmbErsion2.SelectedIndex = 1; + this.cmbErsion2.Size = new System.Drawing.Size(95, 26); + this.cmbErsion2.TabIndex = 175; + this.cmbErsion2.TextStr = "rectangle"; + this.cmbErsion2.SelectedIndexChanged += new Controls.DSelectedIndexChanged(this.cmbErsion1_SelectedIndexChanged); + // + // cmbDilation + // + this.cmbDilation.BackColor = System.Drawing.Color.White; + this.cmbDilation.CanEdit = false; + this.cmbDilation.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbDilation.Items = new string[] { + "octagon", + "rectangle", + "rhombus"}; + this.cmbDilation.Location = new System.Drawing.Point(268, 49); + this.cmbDilation.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cmbDilation.Name = "cmbDilation"; + this.cmbDilation.SelectedIndex = 1; + this.cmbDilation.Size = new System.Drawing.Size(95, 26); + this.cmbDilation.TabIndex = 175; + this.cmbDilation.TextStr = "rectangle"; + this.cmbDilation.SelectedIndexChanged += new Controls.DSelectedIndexChanged(this.cmbErsion1_SelectedIndexChanged); + // + // cmbErsion1 + // + this.cmbErsion1.BackColor = System.Drawing.Color.White; + this.cmbErsion1.CanEdit = false; + this.cmbErsion1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbErsion1.Items = new string[] { + "octagon", + "rectangle", + "rhombus"}; + this.cmbErsion1.Location = new System.Drawing.Point(268, 14); + this.cmbErsion1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cmbErsion1.Name = "cmbErsion1"; + this.cmbErsion1.SelectedIndex = 1; + this.cmbErsion1.Size = new System.Drawing.Size(95, 26); + this.cmbErsion1.TabIndex = 175; + this.cmbErsion1.TextStr = "rectangle"; + this.cmbErsion1.SelectedIndexChanged += new Controls.DSelectedIndexChanged(this.cmbErsion1_SelectedIndexChanged); + // + // cNumErosionValue2 + // + this.cNumErosionValue2.BackColor = System.Drawing.Color.White; + this.cNumErosionValue2.DecimalPlaces = 0; + this.cNumErosionValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cNumErosionValue2.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue2.Location = new System.Drawing.Point(71, 91); + this.cNumErosionValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cNumErosionValue2.MaximumSize = new System.Drawing.Size(300, 26); + this.cNumErosionValue2.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.cNumErosionValue2.MinimumSize = new System.Drawing.Size(50, 26); + this.cNumErosionValue2.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue2.Name = "cNumErosionValue2"; + this.cNumErosionValue2.Size = new System.Drawing.Size(127, 26); + this.cNumErosionValue2.TabIndex = 174; + this.cNumErosionValue2.Value = 1D; + this.cNumErosionValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + // + // cNumDilationValue2 + // + this.cNumDilationValue2.BackColor = System.Drawing.Color.White; + this.cNumDilationValue2.DecimalPlaces = 0; + this.cNumDilationValue2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cNumDilationValue2.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumDilationValue2.Location = new System.Drawing.Point(71, 49); + this.cNumDilationValue2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cNumDilationValue2.MaximumSize = new System.Drawing.Size(300, 26); + this.cNumDilationValue2.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.cNumDilationValue2.MinimumSize = new System.Drawing.Size(50, 26); + this.cNumDilationValue2.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumDilationValue2.Name = "cNumDilationValue2"; + this.cNumDilationValue2.Size = new System.Drawing.Size(127, 26); + this.cNumDilationValue2.TabIndex = 174; + this.cNumDilationValue2.Value = 1D; + this.cNumDilationValue2.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + // + // cNumErosionValue1 + // + this.cNumErosionValue1.BackColor = System.Drawing.Color.White; + this.cNumErosionValue1.DecimalPlaces = 0; + this.cNumErosionValue1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cNumErosionValue1.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue1.Location = new System.Drawing.Point(71, 14); + this.cNumErosionValue1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cNumErosionValue1.MaximumSize = new System.Drawing.Size(300, 26); + this.cNumErosionValue1.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.cNumErosionValue1.MinimumSize = new System.Drawing.Size(50, 26); + this.cNumErosionValue1.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.cNumErosionValue1.Name = "cNumErosionValue1"; + this.cNumErosionValue1.Size = new System.Drawing.Size(127, 26); + this.cNumErosionValue1.TabIndex = 174; + this.cNumErosionValue1.Value = 1D; + this.cNumErosionValue1.ValueChanged += new Controls.DValueChanged(this.PreValueChanged); + // + // nud_angleRange + // + this.nud_angleRange.BackColor = System.Drawing.Color.White; + this.nud_angleRange.DecimalPlaces = 0; + this.nud_angleRange.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_angleRange.Incremeent = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nud_angleRange.Location = new System.Drawing.Point(208, 154); + this.nud_angleRange.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_angleRange.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_angleRange.MaxValue = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.nud_angleRange.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_angleRange.MinValue = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nud_angleRange.Name = "nud_angleRange"; + this.nud_angleRange.Size = new System.Drawing.Size(102, 28); + this.nud_angleRange.TabIndex = 182; + this.nud_angleRange.Value = 10D; + // + // ckb_autoContrast + // + this.ckb_autoContrast.BackColor = System.Drawing.Color.White; + this.ckb_autoContrast.Checked = true; + this.ckb_autoContrast.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ckb_autoContrast.Location = new System.Drawing.Point(85, 236); + this.ckb_autoContrast.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ckb_autoContrast.Name = "ckb_autoContrast"; + this.ckb_autoContrast.Size = new System.Drawing.Size(96, 20); + this.ckb_autoContrast.TabIndex = 181; + this.ckb_autoContrast.TextStr = "自动"; + // + // nud_ScaleRange + // + this.nud_ScaleRange.BackColor = System.Drawing.Color.White; + this.nud_ScaleRange.DecimalPlaces = 1; + this.nud_ScaleRange.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_ScaleRange.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleRange.Location = new System.Drawing.Point(208, 183); + this.nud_ScaleRange.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_ScaleRange.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_ScaleRange.MaxValue = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nud_ScaleRange.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_ScaleRange.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleRange.Name = "nud_ScaleRange"; + this.nud_ScaleRange.Size = new System.Drawing.Size(104, 28); + this.nud_ScaleRange.TabIndex = 180; + this.nud_ScaleRange.Value = 1.1D; + // + // nud_ScaleStart + // + this.nud_ScaleStart.BackColor = System.Drawing.Color.White; + this.nud_ScaleStart.DecimalPlaces = 1; + this.nud_ScaleStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_ScaleStart.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleStart.Location = new System.Drawing.Point(85, 183); + this.nud_ScaleStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_ScaleStart.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_ScaleStart.MaxValue = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nud_ScaleStart.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_ScaleStart.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_ScaleStart.Name = "nud_ScaleStart"; + this.nud_ScaleStart.Size = new System.Drawing.Size(96, 28); + this.nud_ScaleStart.TabIndex = 179; + this.nud_ScaleStart.Value = 0.9D; + // + // nud_angleStart + // + this.nud_angleStart.BackColor = System.Drawing.Color.White; + this.nud_angleStart.DecimalPlaces = 0; + this.nud_angleStart.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_angleStart.Incremeent = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nud_angleStart.Location = new System.Drawing.Point(85, 154); + this.nud_angleStart.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_angleStart.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_angleStart.MaxValue = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.nud_angleStart.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_angleStart.MinValue = new decimal(new int[] { + 180, + 0, + 0, + -2147483648}); + this.nud_angleStart.Name = "nud_angleStart"; + this.nud_angleStart.Size = new System.Drawing.Size(96, 28); + this.nud_angleStart.TabIndex = 176; + this.nud_angleStart.Value = -10D; + // + // cbx_polarity + // + this.cbx_polarity.BackColor = System.Drawing.Color.White; + this.cbx_polarity.CanEdit = false; + this.cbx_polarity.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbx_polarity.Items = new string[] { + "ignore_color_polarity", + "ignore_global_polarity", + "ignore_local_polarity", + "use_polarity"}; + this.cbx_polarity.Location = new System.Drawing.Point(84, 129); + this.cbx_polarity.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cbx_polarity.Name = "cbx_polarity"; + this.cbx_polarity.SelectedIndex = 3; + this.cbx_polarity.Size = new System.Drawing.Size(231, 26); + this.cbx_polarity.TabIndex = 172; + this.cbx_polarity.TextStr = "use_polarity"; + // + // nud_minScore + // + this.nud_minScore.BackColor = System.Drawing.Color.White; + this.nud_minScore.DecimalPlaces = 2; + this.nud_minScore.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_minScore.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_minScore.Location = new System.Drawing.Point(85, 9); + this.nud_minScore.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_minScore.MaximumSize = new System.Drawing.Size(300, 26); + this.nud_minScore.MaxValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_minScore.MinimumSize = new System.Drawing.Size(50, 26); + this.nud_minScore.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.nud_minScore.Name = "nud_minScore"; + this.nud_minScore.Size = new System.Drawing.Size(227, 26); + this.nud_minScore.TabIndex = 173; + this.nud_minScore.Value = 0.8D; + // + // numericUpDown3 + // + this.numericUpDown3.BackColor = System.Drawing.Color.White; + this.numericUpDown3.DecimalPlaces = 0; + this.numericUpDown3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.numericUpDown3.Incremeent = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.numericUpDown3.Location = new System.Drawing.Point(84, 96); + this.numericUpDown3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.numericUpDown3.MaximumSize = new System.Drawing.Size(300, 28); + this.numericUpDown3.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.numericUpDown3.MinimumSize = new System.Drawing.Size(50, 28); + this.numericUpDown3.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDown3.Name = "numericUpDown3"; + this.numericUpDown3.Size = new System.Drawing.Size(227, 28); + this.numericUpDown3.TabIndex = 177; + this.numericUpDown3.Value = 100D; + // + // nud_angleStep + // + this.nud_angleStep.BackColor = System.Drawing.Color.White; + this.nud_angleStep.DecimalPlaces = 0; + this.nud_angleStep.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_angleStep.Incremeent = new decimal(new int[] { + 10, + 0, + 0, + 0}); + this.nud_angleStep.Location = new System.Drawing.Point(84, 67); + this.nud_angleStep.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_angleStep.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_angleStep.MaxValue = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.nud_angleStep.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_angleStep.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_angleStep.Name = "nud_angleStep"; + this.nud_angleStep.Size = new System.Drawing.Size(227, 28); + this.nud_angleStep.TabIndex = 175; + this.nud_angleStep.Value = 1D; + // + // nud_matchNum + // + this.nud_matchNum.BackColor = System.Drawing.Color.White; + this.nud_matchNum.DecimalPlaces = 0; + this.nud_matchNum.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.nud_matchNum.Incremeent = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_matchNum.Location = new System.Drawing.Point(85, 38); + this.nud_matchNum.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.nud_matchNum.MaximumSize = new System.Drawing.Size(300, 28); + this.nud_matchNum.MaxValue = new decimal(new int[] { + 10000, + 0, + 0, + 0}); + this.nud_matchNum.MinimumSize = new System.Drawing.Size(50, 28); + this.nud_matchNum.MinValue = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nud_matchNum.Name = "nud_matchNum"; + this.nud_matchNum.Size = new System.Drawing.Size(227, 28); + this.nud_matchNum.TabIndex = 174; + this.nud_matchNum.Value = 1D; + // + // cbx_searchRegionType + // + this.cbx_searchRegionType.BackColor = System.Drawing.Color.White; + this.cbx_searchRegionType.CanEdit = false; + this.cbx_searchRegionType.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbx_searchRegionType.Items = new string[] { + "整幅图像", + "矩形", + "仿射矩形", + "圆", + "多点"}; + this.cbx_searchRegionType.Location = new System.Drawing.Point(79, 14); + this.cbx_searchRegionType.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.cbx_searchRegionType.Name = "cbx_searchRegionType"; + this.cbx_searchRegionType.SelectedIndex = 0; + this.cbx_searchRegionType.Size = new System.Drawing.Size(172, 26); + this.cbx_searchRegionType.TabIndex = 122; + this.cbx_searchRegionType.TextStr = "整幅图像"; + // // FormPMAlignTool // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); @@ -1480,7 +1611,7 @@ this.ClientSize = new System.Drawing.Size(999, 655); this.Controls.Add(this.splitContainer1); this.Controls.Add(this.toolStrip1); - this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.statusStrip); this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); @@ -1488,6 +1619,8 @@ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "模板匹配工具"; this.Load += new System.EventHandler(this.FormPMAlignTool_Load); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); this.toolStrip1.ResumeLayout(false); this.toolStrip1.PerformLayout(); this.splitContainer1.Panel1.ResumeLayout(false); @@ -1536,7 +1669,7 @@ #endregion - private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.StatusStrip statusStrip; private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStripButton tsbtRunTool; private System.Windows.Forms.SplitContainer splitContainer1; @@ -1563,10 +1696,8 @@ public System.Windows.Forms.Label label15; public System.Windows.Forms.Label label85; internal Controls.CCheckBox ckb_autoContrast; - public Controls.CNumericUpDown numericUpDown2; - public Controls.CNumericUpDown nud_angleRange; - public Controls.CNumericUpDown numericUpDown1; - public Controls.CNumericUpDown nud_angleStart; + public Controls.CNumericUpDown nud_ScaleRange; + public Controls.CNumericUpDown nud_ScaleStart; public Controls.CComboBox cbx_polarity; public Controls.CNumericUpDown nud_minScore; public Controls.CNumericUpDown numericUpDown3; @@ -1624,5 +1755,16 @@ private System.Windows.Forms.CheckBox cbCErosion2; internal System.Windows.Forms.Button btnCreateModel; internal System.Windows.Forms.Button btnAcqNewModelImage; + public Controls.CNumericUpDown nud_angleRange; + public Controls.CNumericUpDown nud_angleStart; + public Controls.CComboBox cmbErsion1; + public System.Windows.Forms.Label label8; + public System.Windows.Forms.Label label7; + public System.Windows.Forms.Label label6; + public Controls.CComboBox cmbErsion2; + public Controls.CComboBox cmbDilation; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; } } \ No newline at end of file diff --git a/PMAlignTool/FormPMAlignTool.cs b/PMAlignTool/FormPMAlignTool.cs index 5f2cace..caafd9e 100644 --- a/PMAlignTool/FormPMAlignTool.cs +++ b/PMAlignTool/FormPMAlignTool.cs @@ -1,6 +1,7 @@ using ChoiceTech.Halcon.Control; using CommonMethods; using HalconDotNet; +using Logger; using System; using System.Collections.Generic; using System.ComponentModel; @@ -16,12 +17,13 @@ namespace PMAlignTool { public partial class FormPMAlignTool : Form { - private PMAlign myPMAlign = null; - private IToolInfo myToolInfo = null; + private PMAlign myPMAlign = new PMAlign(); + public IToolInfo myToolInfo = new IToolInfo(); public HWindowTool_Smart myHwindow = new HWindowTool_Smart(); private HDrawingObject selected_drawing_object = new HDrawingObject(); - private List templateModelListAdd = new List() { }; - private List templateModelListSub = new List() { }; + public List templateModelListAdd = new List() { }; + public List templateModelListSub = new List() { }; + public FormPMAlignTool(ref object pmalign) { InitializeComponent(); @@ -30,6 +32,7 @@ namespace PMAlignTool { myToolInfo = (IToolInfo)pmalign; myPMAlign = (PMAlign)myToolInfo.tool; + myPMAlign.toolName = myToolInfo.FormToolName; myPMAlign.DispImage(); } } @@ -70,15 +73,22 @@ namespace PMAlignTool myHwindow.Dock = DockStyle.Fill; InitTool(); } - + bool isInitTool = false; private void InitTool() { + isInitTool = true; cNumErosionValue1.Value = myPMAlign.imageProcess.erosionValue1.algValue; cbCErosion1.Checked = myPMAlign.imageProcess.erosionValue1.isEnable; + cmbErsion1.TextStr = myPMAlign.imageProcess.erosionValue1.algName; + cNumDilationValue2.Value = myPMAlign.imageProcess.dilationValue.algValue; cbCDilation1.Checked = myPMAlign.imageProcess.dilationValue.isEnable; + cmbDilation.TextStr = myPMAlign.imageProcess.dilationValue.algName; + cNumErosionValue2.Value = myPMAlign.imageProcess.erosionValue2.algValue; cbCErosion2.Checked = myPMAlign.imageProcess.erosionValue2.isEnable; + cmbErsion2.TextStr = myPMAlign.imageProcess.erosionValue2.algName; + isInitTool = false; } private void btnAcqNewModelImage_Click(object sender, EventArgs e) @@ -121,10 +131,12 @@ namespace PMAlignTool myHwindow.DispHWindow.AttachDrawingObjectToWindow(temp_object); if(rdo_templateRegionAdd.Checked) { + temp_object.SetDrawingObjectParams("color","green"); templateModelListAdd.Add(temp_object); } else { + temp_object.SetDrawingObjectParams("color", "red"); templateModelListSub.Add(temp_object); } } @@ -156,27 +168,124 @@ namespace PMAlignTool selectObj.Dispose(); } + public HObject contour; private void btnCreateModel_Click(object sender, EventArgs e) { - if(myPMAlign.modelID == -1) + if(myPMAlign.inputImage != null) { - myPMAlign.oldTrainImage = myPMAlign.inputImage; + if(myPMAlign.CreateModelTemplate() == 0) + { + if (myPMAlign.matchMode == MatchMode.BasedShape) + { + HOperatorSet.GetShapeModelContours(out contour, myPMAlign.modelID, (HTuple)1); + HTuple area, row, col; + HOperatorSet.AreaCenter(myPMAlign.templateRegion, out area, out row, out col); + HTuple homMat2D; + HOperatorSet.HomMat2dIdentity(out homMat2D); + HOperatorSet.HomMat2dTranslate(homMat2D, row, col, out homMat2D); + HOperatorSet.AffineTransContourXld(contour, out contour, homMat2D); + } + myHwindow.DispHWindow.ClearWindow(); + hWindowTool_Smart1.DispHWindow.ClearWindow(); + myHwindow.DispImage(myPMAlign.inputImage); + //在模板窗口显示模板 + HTuple row1, col1, row2, col2; + HOperatorSet.SmallestRectangle1(myPMAlign.templateRegion, out row1, out col1, out row2, out col2); + HObject outRectangle1; + HOperatorSet.GenRectangle1(out outRectangle1, row1 - 20, col1 - 20, row2 + 20, col2 + 20); + HObject imageReduced, imagePart; + HOperatorSet.ReduceDomain(myPMAlign.inputImage, outRectangle1, out imageReduced); + HObject outBoundary, inBoundary; + HOperatorSet.Boundary(myPMAlign.templateRegion, out outBoundary, "inner_filled"); + HOperatorSet.Boundary(myPMAlign.templateRegion, out inBoundary, "outer"); + HOperatorSet.CropDomain(imageReduced, out imagePart); + HOperatorSet.SetSystem("flush_graphic", "true"); + hWindowTool_Smart1.DispImage(imagePart); + hWindowTool_Smart1.DispHWindow.SetColor("green"); + hWindowTool_Smart1.DispHWindow.SetDraw("margin"); + hWindowTool_Smart1.DispHWindow.DispObj(outBoundary); + hWindowTool_Smart1.DispHWindow.DispObj(inBoundary); + if (myPMAlign.matchMode == MatchMode.BasedShape) + { + HOperatorSet.SetLineStyle(myHwindow.DispHWindow, new HTuple()); + HOperatorSet.SetColor(myHwindow.DispHWindow, new HTuple("orange")); + HOperatorSet.DispObj(contour, myHwindow.DispHWindow); + } + } + else + { + LoggerClass.WriteLog("创建模板失败!", MsgLevel.Exception); + } + } + else + { + myPMAlign.isCreateModel = false; + } + } + /// + /// 设定工具运行状态 + /// + /// 运行中的信息 + /// 运行状态 + public void SetToolStatus(string msg, ToolRunStatu status, Exception ex = null) + { + if (myPMAlign != null) + { + myPMAlign.runMessage = msg; + myPMAlign.toolRunStatu = status; + lb_RunStatus.Text = myPMAlign.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myPMAlign.runMessage}"; + lb_RunTime.Text = myPMAlign.runTime; + if (myPMAlign.toolRunStatu == ToolRunStatu.Succeed) + { + statusStrip.BackColor = Color.LimeGreen; + } + else + { + statusStrip.BackColor = Color.Red; + } } } private void PreProcess_CheckChanged(object sender, EventArgs e) { - myPMAlign.imageProcess.erosionValue1.isEnable = cbCErosion1.Checked; - myPMAlign.imageProcess.dilationValue.isEnable = cbCDilation1.Checked; - myPMAlign.imageProcess.erosionValue2.isEnable = cbCErosion2.Checked; + if(!isInitTool) + { + myPMAlign.imageProcess.erosionValue1.isEnable = cbCErosion1.Checked; + myPMAlign.imageProcess.dilationValue.isEnable = cbCDilation1.Checked; + myPMAlign.imageProcess.erosionValue2.isEnable = cbCErosion2.Checked; + } + } private void PreValueChanged(double value) { - myPMAlign.imageProcess.erosionValue1.algValue = cNumErosionValue1.Value; - myPMAlign.imageProcess.dilationValue.algValue = cNumDilationValue2.Value; - myPMAlign.imageProcess.erosionValue2.algValue = cNumErosionValue2.Value; + if (!isInitTool) + { + myPMAlign.imageProcess.erosionValue1.algValue = cNumErosionValue1.Value; + myPMAlign.imageProcess.dilationValue.algValue = cNumDilationValue2.Value; + myPMAlign.imageProcess.erosionValue2.algValue = cNumErosionValue2.Value; + } + } + + private void rabShape_CheckedChanged(object sender, EventArgs e) + { + myPMAlign.matchMode = rabShape.Checked ? MatchMode.BasedShape : MatchMode.BasedGray; + } + + private void cmbErsion1_SelectedIndexChanged() + { + if (!isInitTool) + { + myPMAlign.imageProcess.erosionValue1.algName = cmbErsion1.TextStr; + myPMAlign.imageProcess.dilationValue.algName = cmbDilation.TextStr; + myPMAlign.imageProcess.erosionValue2.algName = cmbErsion2.TextStr; + } + } + + private void tsbtRunTool_Click(object sender, EventArgs e) + { + myPMAlign.Run(SoftwareRunState.Debug); } } } diff --git a/PMAlignTool/FormPMAlignTool.resx b/PMAlignTool/FormPMAlignTool.resx index 5904e09..836d7e6 100644 --- a/PMAlignTool/FormPMAlignTool.resx +++ b/PMAlignTool/FormPMAlignTool.resx @@ -117,7 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs index 5d969a4..3340d4f 100644 --- a/PMAlignTool/PMAlign.cs +++ b/PMAlignTool/PMAlign.cs @@ -20,13 +20,25 @@ using CommonMethods; using HalconDotNet; using ToolBase; using static DataStruct.DataStruct; +using System.Windows.Forms; +using Logger; +using System.Diagnostics; +using System.IO; namespace PMAlignTool { [Serializable] - public class PMAlign:IToolBase + public class PMAlign : IToolBase { - + public string toolName { get; set; } = string.Empty; + /// + /// 输入姿态 + /// + public PosXYU inputPose = new PosXYU(); + /// + /// 制作模板时的输入位姿 + /// + public PosXYU templatePose = new PosXYU(); /// /// 是否显示匹配到的模板 /// @@ -50,7 +62,7 @@ namespace PMAlignTool /// /// 模板句柄 /// - internal HTuple modelID { get; set; } = -1; + internal HTuple modelID = -1; /// /// 行列间隔像素数 /// @@ -62,13 +74,11 @@ namespace PMAlignTool /// /// 模板区域 /// - internal HObject templateRegion { get; set; } + internal HObject templateRegion; /// /// 在进行模板创建及匹配时进行的图像预处理 /// public ImagePreProcess imageProcess { get; set; } = new ImagePreProcess(); - - internal HObject totalRegion; /// /// 搜索区域图像 /// @@ -101,10 +111,14 @@ namespace PMAlignTool /// 训练时所使用的模板图像,不点击获取图像时,不进行更新 /// public HObject oldTrainImage { get; set; } + public bool isCreateModel { get; set; } - internal void DispMainWindow(object dispHWindow) + public override void DispMainWindow(HWindow dispHWindow) { - throw new NotImplementedException(); + if (showFeature) + { + ShowTemplate(dispHWindow, false); + } } /// @@ -119,30 +133,365 @@ namespace PMAlignTool /// /// 模板匹配结果 /// - internal List L_result = new List(); + public List L_resultList { get; set; } = new List() { }; + /// + /// 匹配模式 + /// + public MatchMode matchMode { get; set; } = MatchMode.BasedShape; + /// + /// 缩放最小值 + /// + public HTuple minScale { get; internal set; } = 0.9; + /// + /// 缩放最大值 + /// + public HTuple maxScale { get; internal set; } = 1.1; + public bool isAutoConstants { get; set; } + public string modelFilePath { get; set; } + public RegionType searchRegionType { get; set; } + public HObject SearchRegion { get; private set; } public override void Run(SoftwareRunState softwareRunState) { - + Stopwatch sw = new Stopwatch(); + sw.Restart(); + + if (inputImage == null) + { + FormPMAlignTool.Instance.SetToolStatus("工具输入图像为空", ToolRunStatu.Not_Input_Image); + return; + } + try + { + if (softwareRunState == SoftwareRunState.Debug) + { + DispImage(); + } + if (inputPose != null) + { + HTuple Row = inputPose.X - templatePose.X; + HTuple Col = inputPose.Y - templatePose.Y; + HTuple angle = inputPose.U - templatePose.U; + + HTuple _homMat2D; + HOperatorSet.HomMat2dIdentity(out _homMat2D); + HOperatorSet.HomMat2dRotate(_homMat2D, (HTuple)(angle), (HTuple)templatePose.X, (HTuple)templatePose.Y, out _homMat2D); + HOperatorSet.HomMat2dTranslate(_homMat2D, (HTuple)(Row), (HTuple)(Col), out _homMat2D); + //对预期线的找模板区域做放射变换 + + } + minScore = FormPMAlignTool.Instance.nud_minScore.Value; + startAngle = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStart.Value); + angleRange = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleRange.Value); + angleStep = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStep.Value); + polarity = FormPMAlignTool.Instance.cbx_polarity.TextStr; + isAutoConstants = FormPMAlignTool.Instance.ckb_autoContrast.Checked; + minScale = FormPMAlignTool.Instance.nud_ScaleStart.Value; + maxScale = FormPMAlignTool.Instance.nud_ScaleRange.Value; + HObject findModelImg = ProcessImage(inputImage); + int ret = FindModelTemplate(findModelImg); + ToolRunStatu myState = ret == 0 ? ToolRunStatu.Succeed : ToolRunStatu.Model_UnFound; + string retMsg = ret == 0 ? "工具运行成功,已找到匹配项!" : "未找到匹配项"; + sw.Stop(); + runTime = $"运行时间: {sw.ElapsedMilliseconds} ms"; + FormPMAlignTool.Instance.SetToolStatus(retMsg, myState); + } + catch (Exception ex) + { + FormPMAlignTool.Instance.SetToolStatus($"工具运行异常,异常原因: {ex}", ToolRunStatu.Tool_Run_Error); + } + finally + { + + } } public override void DispImage() { + FormPMAlignTool.Instance.myHwindow.DispHWindow.ClearWindow(); if (inputImage != null) { FormPMAlignTool.Instance.myHwindow.DispHWindow.DispObj(inputImage); } } - - public override void DispMainWindow(HWindow window) + private void CreateModelRegion() { - throw new NotImplementedException(); + HOperatorSet.GenEmptyObj(out templateRegion); + foreach (var item in FormPMAlignTool.Instance.templateModelListAdd) + { + HObject selectObj = item.GetDrawingObjectIconic(); + HOperatorSet.Union2(selectObj, templateRegion, out templateRegion); + } + foreach (var item in FormPMAlignTool.Instance.templateModelListSub) + { + HObject selectObj = item.GetDrawingObjectIconic(); + HOperatorSet.Difference(templateRegion, selectObj, out templateRegion); + } } - public void CreateModelTemplate() + public int CreateModelTemplate() { - + HObject template; + oldTrainImage = inputImage; + if (FormPMAlignTool.Instance.templateModelListAdd.Count == 0) + { + LoggerClass.WriteLog("未划定模板建立区域", MsgLevel.Exception); + isCreateModel = false; + return -1; + } + CreateModelRegion(); + HObject createModelImg; + HOperatorSet.GenEmptyObj(out createModelImg); + createModelImg = ProcessImage(inputImage); + HOperatorSet.ReduceDomain(createModelImg, templateRegion, out template); + try + { + HTuple rows, cols, angles, scores, scale; + if (matchMode == MatchMode.BasedShape) + { + HOperatorSet.CreateScaledShapeModel(template, + "auto", + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange).TupleRad(), + "auto", + minScale, + maxScale, + "auto", + "auto", + polarity, + isAutoConstants ? (HTuple)"auto" : (HTuple)contrast, + "auto", + out modelID); + HOperatorSet.FindScaledShapeModel(inputImage, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + minScale, + maxScale, + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"least_squares", + (HTuple)0, + (HTuple)0.9, + out rows, + out cols, + out angles, + out scale, + out scores); + } + else + { + HOperatorSet.CreateNccModel(template, + "auto", + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange).TupleRad(), + "auto", + "use_polarity", + out modelID); + HOperatorSet.FindNccModel(inputImage, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"true", + (HTuple)0, + out rows, + out cols, + out angles, + out scores); + } + isCreateModel = true; + HOperatorSet.WriteRegion(templateRegion, FormPMAlignTool.Instance.myToolInfo.FormToolName + ".hobj"); + if (scores != null && scores.Type != HTupleType.EMPTY) + { + templatePose = new PosXYU { X = rows[0].D, Y = cols[0].D , U = angles[0].D }; + } + } + catch (Exception ex) + { + Logger.LoggerClass.WriteLog("创建模板时出现异常", ex); + isCreateModel = false; + return -1; + } + finally + { + FormPMAlignTool.Instance.templateModelListAdd.Clear(); + FormPMAlignTool.Instance.templateModelListSub.Clear(); + } + return 0; } + + public int FindModelTemplate(HObject findModelImage) + { + if (!isCreateModel) + { + LoggerClass.WriteLog("未创建或加载模板", MsgLevel.Exception); + return -1; + } + if (File.Exists(toolName + ".hobj")) + { + HOperatorSet.ReadRegion(out templateRegion, toolName + ".hobj"); + LoggerClass.WriteLog($"{FormPMAlignTool.Instance.myToolInfo.FormToolName} 已加载模板", MsgLevel.Info); + } + HObject image; + if (searchRegionType == RegionType.AllImage) + { + image = findModelImage; + } + else + { + HOperatorSet.ReduceDomain(inputImage, SearchRegion, out reducedImage); + image = reducedImage; + } + HTuple rows, cols, angles, scores; + L_resultList.Clear(); + try + { + if (matchMode == MatchMode.BasedShape) + { + HTuple temp; + + HOperatorSet.FindScaledShapeModel(image, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + minScale, + maxScale, + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"least_squares", + (HTuple)0, + (HTuple)0.9, + out rows, + out cols, + out angles, + out temp, + out scores); + + } + else + { + HOperatorSet.FindNccModel(image, + (HTuple)modelID, + ((HTuple)startAngle).TupleRad(), + ((HTuple)angleRange - startAngle).TupleRad(), + (HTuple)minScore, + (HTuple)matchNum, + (HTuple)0.5, + (HTuple)"true", + (HTuple)0, + out rows, + out cols, + out angles, + out scores); + } + FormPMAlignTool.Instance.myHwindow.DispHWindow.ClearWindow(); + FormPMAlignTool.Instance.myHwindow.DispImage(inputImage); + if (rows.TupleLength() > 0) + { + for (int i = 0; i < rows.TupleLength(); i++) + { + MatchResult matchResult = new MatchResult(); + matchResult.Row = Math.Round((double)rows[i], 3); + matchResult.Col = Math.Round((double)cols[i], 3); + matchResult.Angle = Math.Round((double)angles[i], 3); + matchResult.Socre = Math.Round((double)scores[i], 3); + L_resultList.Add(matchResult); + } + MatchResult temp; + for (int i = 0; i < L_resultList.Count - 1; i++) + { + for (int j = i + 1; j < L_resultList.Count; j++) + { + if (L_resultList[i].Socre < L_resultList[j].Socre) + { + temp = L_resultList[i]; + L_resultList[i] = L_resultList[j]; + L_resultList[j] = temp; + } + } + } + } + if(L_resultList.Count > 0) + { + toolRunStatu = ToolRunStatu.Succeed; + ShowTemplate(FormPMAlignTool.Instance.myHwindow.DispHWindow); + return 0; + } + } + catch (Exception ex) + { + LoggerClass.WriteLog("寻找模板时出现异常!", ex); + toolRunStatu = ToolRunStatu.Not_Succeed; + } + return -1; + } + + public HObject contour; + /// + /// 显示模板 + /// + internal void ShowTemplate(HWindow dispHWindow, bool clearImg = false) + { + try + { + if (modelID == null) + { + return; + } + if(clearImg) + { + dispHWindow.ClearWindow(); + dispHWindow.DispObj(inputImage); + } + if (matchMode == MatchMode.BasedShape) + { + HOperatorSet.GetShapeModelContours(out contour, modelID, new HTuple(1)); + HTuple area, row, col; + HOperatorSet.AreaCenter(templateRegion, out area, out row, out col); + HTuple homMat2D; + HOperatorSet.HomMat2dIdentity(out homMat2D); + HOperatorSet.HomMat2dTranslate(homMat2D, row, col, out homMat2D); + HOperatorSet.AffineTransContourXld(contour, out contour, homMat2D); + dispHWindow.SetColor("green"); + dispHWindow.DispObj(contour); + } + HObject outBoundary, inBoundary; + HOperatorSet.Boundary(templateRegion, out outBoundary, "inner_filled"); + HOperatorSet.Boundary(templateRegion, out inBoundary, "outer"); + HOperatorSet.SetColor(FormPMAlignTool.Instance.myHwindow.DispHWindow, "green"); + HOperatorSet.SetLineStyle(FormPMAlignTool.Instance.myHwindow.DispHWindow, new HTuple()); + dispHWindow.DispObj(outBoundary); + dispHWindow.DispObj(inBoundary); + } + catch (Exception ex) + { + Logger.LoggerClass.WriteLog("显示模板时出现错误", ex); + } + } + + private HObject ProcessImage(HObject inputImg) + { + if (inputImage == null) return inputImage; + if (imageProcess.erosionValue1.isEnable) + { + HOperatorSet.GrayErosionShape(inputImg, out inputImg, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algName); + } + if (imageProcess.dilationValue.isEnable) + { + HOperatorSet.GrayDilationShape(inputImg, out inputImg, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algValue, imageProcess.dilationValue.algName); + } + if (imageProcess.erosionValue2.isEnable) + { + HOperatorSet.GrayErosionShape(inputImg, out inputImg, imageProcess.erosionValue1.algValue, imageProcess.erosionValue1.algValue, imageProcess.erosionValue2.algName); + } + return inputImg; + } + } [Serializable] public class ImagePreProcess @@ -156,5 +505,35 @@ namespace PMAlignTool { public double algValue { get; set; } = 0; public bool isEnable { get; set; } = false; + public string algName { get; set; } = "rectangle"; + } + [Serializable] + public enum MatchMode + { + BasedShape, + BasedGray, + } + [Serializable] + public enum RegionType + { + AllImage, + Rectangle1, + Rectangle2, + Circle, + Ellipse, + MultPoint, + Ring, + Any, + } + /// + /// 模板匹配结果 + /// + [Serializable] + public struct MatchResult + { + internal double Row; + internal double Col; + internal double Angle; + internal double Socre; } } diff --git a/ToolLib.VisionJob/FormToolBox.Designer.cs b/ToolLib.VisionJob/FormToolBox.Designer.cs index 9481cf7..efbf627 100644 --- a/ToolLib.VisionJob/FormToolBox.Designer.cs +++ b/ToolLib.VisionJob/FormToolBox.Designer.cs @@ -96,8 +96,9 @@ treeNode4.Name = "节点3"; treeNode4.SelectedImageIndex = 3; treeNode4.Text = "HIKVision"; - treeNode5.ImageIndex = 4; + treeNode5.ImageKey = "相机.png"; treeNode5.Name = "节点0"; + treeNode5.SelectedImageKey = "相机.png"; treeNode5.Text = "获取图像"; treeNode6.Name = "节点5"; treeNode6.Text = "滤波"; @@ -173,6 +174,7 @@ this.imageList1.Images.SetKeyName(14, "停止.png"); this.imageList1.Images.SetKeyName(15, "几何_32.png"); this.imageList1.Images.SetKeyName(16, "图像预处理_32.png"); + this.imageList1.Images.SetKeyName(17, "相机.png"); // // richTextBoxEx1 // @@ -205,6 +207,7 @@ this.imageListTool.Images.SetKeyName(8, "卡尺.png"); this.imageListTool.Images.SetKeyName(9, "匹配.ico"); this.imageListTool.Images.SetKeyName(10, "模板.ico"); + this.imageListTool.Images.SetKeyName(11, "相机.png"); // // splitContainer1 // diff --git a/ToolLib.VisionJob/FormToolBox.resx b/ToolLib.VisionJob/FormToolBox.resx index 1f87590..a23f5a4 100644 --- a/ToolLib.VisionJob/FormToolBox.resx +++ b/ToolLib.VisionJob/FormToolBox.resx @@ -124,8 +124,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABs - LAAAAk1TRnQBSQFMAgEBEQEAAVgBAAFYAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADS + LgAAAk1TRnQBSQFMAgEBEgEAAXABAAFwAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABgAMAAaADAAEBAQABCAYAAVAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -153,168 +153,178 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wAHAAH/ARYBagiP - AWcBSgg4AVkBmgH/aAABFgqPAWcBSgo4AZpoAAFqCo8BZwFKCjgBWWgAC48BZwFKCzhoAAuPAWcBSgs4 - aAALjwFnAUoLOGgAC48BZwFKCzhoAAuPAWcBSgs4aAALjwFnAUoLUmgAC48BZwxDaAALjwFnAUkLcWgA - C48BZwFJC3FoAAuPAWcBSQtxaAALjwFnAUkLcWgADEMBSQtxaAALowFmAUkLcWgAC8YBZwFJC3FoAAvG - AWcBSQtxaAALxgFnAUkLcWgAC8YBZwFJC3FoAAvGAWcBSQtxaAALxgFnAUkKcQFWaAABsArGAWcBSQpx - AXhoAAH/AbABgAjGAWcBSQhxAVYBeAH0/wD/AHIAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGY - AXcGVQF3EgAL9BEACSUBTAglAW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGX - A1UB/wwAAusB8gsAAQcC6wwABCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0 - BCUSAAL/EwADVRIAAf8DVQsAAesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0 - AfEB/wkAAv8JAAH/AfEB9AYAA1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/ - AyUUAAH0AyUFAAH/AbwBcwHxAf8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0 - AQAC6wIAAfIB6wMAAesB7AEAAZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEH - Af8HAANVCAACVQ0AAlUBdwkAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgA - Af8BBwEcAfMB/wMAAvQDAAH/AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMA - AesB7AEAAZIB6wgAAyUB8wUAAW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/ - AfMBHAEHAf8CAAG8AfIBHAH0BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEA - AZIB6wgAAyUGAAFvCyUHAAMlAwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkA - BlUKAAJVAXcIAAHrAfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/ - BgAB/wG8AnMBvAH/BgAB9AEcAe8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGS - AesHAAH/AyUGAAFvCyUHAAMlAwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHr - AfQBAALrAgAB8gHrAwAB6wHsAQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHx - Av8LAAJVAfQJAAlVBwABnQJVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwsl - BwABbwIlCQAB9AH/AfMDAALxAwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHr - AewBAAGSAesHAAGTAiUBGgYAAW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0 - AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVV - Af8KAANVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkA - BFUMAAJVAfQIAAHrAfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/ - CAACVQEIDAABlwJVCQAB6wH0DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcA - Av8B6wHwDf8B7AHrAv8GAAH0AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHz - FQABbwMlEAAC8RIAA1UVAANVCAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALx - AgAB/xAAAfIDVREAA1UPAALrBwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALr - AfQFAAG8AesB7w8ABCUB8w0AAZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkA - AfMFJRQAAvEBAAEIAfABHBMABlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEA - AfIB/wHzAf8TAAH0DVUB/zAAARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEI - IQABwghaAfNPAAHCBlUB9B0AAfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZa - AQgEAAGeBVoNAAH0AXMB8gLzAfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEH - FgAB8wEHBgABvAEUBLgBkA0UBLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIA - Av8CAAH/AwAB/wMAAfMBBwYAAbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUA - Af8B8wHwAgAB8wFyAbwCBwEAAf8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4A - BFodAAH/AfQCAAHzAgcBvAH0AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgU - AZAC2QGzApACuAGQAxQBuAGQARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/ - AXMBBwH/CQABvAEUAbgHFAGQAtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHy - Ae8B9AHyARwB/wHwAf8BBwHyAfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/ - JAAB/wG8AXMB/wH0AXIB/wHvAfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUA - GFUBmAYAA1oUAANaCQAIBwHvDwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZ - AZoBAAGaAVkBGgoAG1UBmAIAAf8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0 - AfMB9AHzAfQB8xAAAZoBWQH0AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHz - AQcB8wEHAfMBCAIAAfIBvAHyAbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHz - AVkBmgH/AZoKABxVAZgBAANaAcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/ - AfQB8gHwAfIBvA0AAvQBAAGaAXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcA - AfQBcwH2AXID/wG8AXMB7wEcAQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEa - ARsBWQEaCgAcVQIAAf8DWg8ABFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEH - AQABBwH/AQcB/w0AAZoBegH/ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANa - AQAB/wNaBgABBwHyAfMBvAH/ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZ - AXoB/wEbAXoBWQF6Af8BmgFZARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHz - Av8B8wL0AQcBvAH0AXMB9AEHAfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEb - AgAB8wNaAwAB/wgAAbwB8AEAAvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6 - BVkBmgH/DAAVVgGYCQABfANaEgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/ - EAAB9gJ6ARoC/wHzAxoB9A4AFFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcA - AfQB8ggAAfcEAAH/AXoBWQF6AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/ - AfQC8wH0Af8B8wEIAf8FAAHzAQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARa - CgAB8wEHBgAB/wEHAXIBcwEcAe8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYA - DlYBlxIABVoMAARaAZ4KAAHzAQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/ - FAAFWgoABVoLAAH/AVAB7wIHAfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/ - A/MB9A4AAf8D8wH0JgAJVgEIGgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKe - Af//ADMAAfMDWigAAfMDWjAAAfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMA - Af8CWgH0AQAB8wNaAgABCAJaEQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4A - AWwC9AH/AwAB/wGuEgAdWQcAAfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHk - AVoRAAFaAf8KAAFsAvQBZgQAAfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFm - EgAdWQoAAfQBWhoAAVoUAAHCAVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFs - BPQBvAH3AgABZgL0EwAdWQwAAf8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/ - AVoWAAFaFwABWgUAAa4B8wX0AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8 - Aa4B/wGuAQkBkQG8EAAdWQ8AAfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/ - Aa4BCQFsAW0BuwHtDAAdWRAAAf8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0 - Aa4B9AFmAv8CCQJmDAAdWREAAf8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGu - AQcBZgH/Ae8BbAG7AfcLAB1ZEgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGu - AvQBtQFsAfcB/wGuAfALAB1ZEwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1Z - FAAB/wFaDwABWhYAAfQBWg0AAZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGe - AVoVAAFaDwABZgH/AgAB9wG8Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFa - FQABbAH/AWwBrgb0AWwB/wUAAzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFs - BAAdMRgAAf8BWg0AAloRAAFaAZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIA - EjElAAH0AVoNAAJaDQABWgHkIQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQA - AWwB9AFsAwARMScAAfMBWgEAAVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAA - Af8Bu20AAbIRAAGybAABsgEJAbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgA - AQlqAAH/AgABswIAAQkCAAHzAgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/ - AgABswIAAQkCAAHzAgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKz - CQAB/wIJAf8CCQH0AgABGQEJARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7 - GhkBigUAAf8UAAEZCQAB/wIJAQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGy - AfQIAAG6AbIEAAGzAYoCZQK7GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJ - DLIEAAGzAYoBuwJlAbsBCRgZAYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQA - AbMBigG7ARkCZQG7AQkJGQEJDBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkA - AboB9BkAAbMBigG7AhkCZQG7CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkA - AbMBigG7AxkCZQG7BhkBuwJlAbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGz - BAABswGKAbsEGQJlAbsFGQFmAmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyy - BAABswGKAbsFGQJlAbsDGQG7AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQA - BPQBswGyAfQIAAG6AbIEAAGzAYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWy - FAAB8wIJEwABugH0AgAIsgH0CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZ - AYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1 - A2UFGQJlAbsDGQEJAmUDGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIA - AbIGAAyyBAABswGKAbsQGQEJAWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHz - EgkLAAG6AfQCAAGyFgABswGKAbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIA - Af8IAAEZDAAB8wEJDv8DCQsAAboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/ - AbIVtAGyCwAB8wEJDgADCQoAB7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGy - FwABsgoAAfMBCQMAAgkJAAMJCQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGy - F7MBsgoAAfMBCQMAAgkJAAMJCQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7 - FhkBigQAAboXAAGyCgAB8wEJDgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6 - FwABsgoAAfMBCQ4AAwkJAAEJCLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUA - H4oEAAG6BAABsgH0CwABCQGyBAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMA - AbJnAAG6AgABsgMAAbIJAAGyAwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUA - AboBs3kAAboDsgEJbQABQgFNAT4HAAE+AwABKAMAAYADAAGgAwABAQEAAQEGAAEKFgAD/wEABP8MAAT/ - DAAE/wwABP8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHw - AgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEP + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAH2dgAAH0AWcdmAFn + YAAB7QFnHZgBZ2AAAe0BZwyYAW0DZwHrDJgBZ0QAAf8BFgFqCI8BZwFKCDgBWQGaAf8EAAHtAWcKmAHs + B2cBkgqYAWdEAAEWCo8BZwFKCjgBmgQAAe0BZwmYA2cF/wJnAesJmAFnRAABagqPAWcBSgo4AVkEAAHt + AWcJmAFnAfcH/wJnCZgBZ0QAC48BZwFKCzgEAAHtAWcImAJnCf8CZwiYAWdEAAuPAWcBSgs4BAAB7QFn + B5gB6wFnBP8B8wHtAfQE/wFnCJgBZ0QAC48BZwFKCzgEAAHtAWcHmAJnA/8FZwP/AmcHmAFnRAALjwFn + AUoLOAQAAe0BZweYAWcD/wFtAWcCmAHtAWcBBwP/AWcHmAFnRAALjwFnAUoLOAQAAe0BZweYAWcD/wFn + AewDmAJnA/8BZweYAWdEAAuPAWcBSgtSBAAB7QFnB5gBZwP/AWcFmAFnA/8BZweYAWdEAAuPAWcMQwQA + Ae0BZweYAWcD/wFnBZgBZwP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweYAWcD/wFnAZIDmAHqAWcD/wFn + B5gBZ0QAC48BZwFJC3EEAAHtAWcHmAFnA/8CZwOYAWcBjQP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweY + AWcB6wP/BWcD/wJnB5gBZ0QAC48BZwFJC3EEAAHtAWcHmAHrAWcE/wH3AWcBvAT/AWcImAFnRAAMQwFJ + C3EEAAHtAWcImAFnAW0J/wJnCJgBZ0QAC6MBZgFJC3EEAAHtAWcImAHsAWcB8wf/AZIBZwOYBWcBmAFn + RAALxgFnAUkLcQQAAe0BZwmYA2cF/wNnA5gFZwGYAWdEAAvGAWcBSQtxBAAB7QFnCpgBbQdnAewEmAFn + A+MBZwGYAWdEAAvGAWcBSQtxBAAB7QFnDJgFZwaYBWcBmAFnRAALxgFnAUkLcQQAAe0BZxeYAW0DZwHs + AZgBZ0QAC8YBZwFJC3EEAAHwAWcdmAFnRAALxgFnAUkKcQFWBQAfZ0QAAbAKxgFnAUkKcQF4BgAFBwJn + D24BZwHsBQdFAAH/AbABgAjGAWcBSQhxAVYBeAH0CwAB8AFnD5oBZwH/bgABZw+aAWdvAAFnD5oBZ28A + EWdvAAH0D2cB/1MAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGYAXcGVQF3EgAL9BEACSUBTAgl + AW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGXA1UB/wwAAusB8gsAAQcC6wwA + BCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0BCUSAAL/EwADVRIAAf8DVQsA + AesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0AfEB/wkAAv8JAAH/AfEB9AYA + A1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/AyUUAAH0AyUFAAH/AbwBcwHx + Af8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0AQAC6wIAAfIB6wMAAesB7AEA + AZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEHAf8HAANVCAACVQ0AAlUBdwkA + AesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgAAf8BBwEcAfMB/wMAAvQDAAH/ + AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUB8wUA + AW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/AfMBHAEHAf8CAAG8AfIBHAH0 + BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMl + AwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkABlUKAAJVAXcIAAHrAfQBAALr + AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/BgAB/wG8AnMBvAH/BgAB9AEc + Ae8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAH/AyUGAAFvCyUHAAMl + AwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHrAfQBAALrAgAB8gHrAwAB6wHs + AQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHxAv8LAAJVAfQJAAlVBwABnQJV + CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwslBwABbwIlCQAB9AH/AfMDAALx + AwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAGTAiUBGgYA + AW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEA + AZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVVAf8KAANVCAAB6wH0AQAC6wIA + AfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkABFUMAAJVAfQIAAHrAfQBAALr + AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/CAACVQEIDAABlwJVCQAB6wH0 + DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcAAv8B6wHwDf8B7AHrAv8GAAH0 + AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHzFQABbwMlEAAC8RIAA1UVAANV + CAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALxAgAB/xAAAfIDVREAA1UPAALr + BwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALrAfQFAAG8AesB7w8ABCUB8w0A + AZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkAAfMFJRQAAvEBAAEIAfABHBMA + BlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEAAfIB/wHzAf8TAAH0DVUB/zAA + ARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEIIQABwghaAfNPAAHCBlUB9B0A + AfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZaAQgEAAGeBVoNAAH0AXMB8gLz + AfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEHFgAB8wEHBgABvAEUBLgBkA0U + BLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIAAv8CAAH/AwAB/wMAAfMBBwYA + AbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUAAf8B8wHwAgAB8wFyAbwCBwEA + Af8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4ABFodAAH/AfQCAAHzAgcBvAH0 + AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgUAZAC2QGzApACuAGQAxQBuAGQ + ARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/AXMBBwH/CQABvAEUAbgHFAGQ + AtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHyAe8B9AHyARwB/wHwAf8BBwHy + AfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/JAAB/wG8AXMB/wH0AXIB/wHv + AfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUAGFUBmAYAA1oUAANaCQAIBwHv + DwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZAZoBAAGaAVkBGgoAG1UBmAIA + Af8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0AfMB9AHzAfQB8xAAAZoBWQH0 + AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHzAQcB8wEHAfMBCAIAAfIBvAHy + AbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHzAVkBmgH/AZoKABxVAZgBAANa + AcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/AfQB8gHwAfIBvA0AAvQBAAGa + AXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcAAfQBcwH2AXID/wG8AXMB7wEc + AQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEaARsBWQEaCgAcVQIAAf8DWg8A + BFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEHAQABBwH/AQcB/w0AAZoBegH/ + ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANaAQAB/wNaBgABBwHyAfMBvAH/ + ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZAXoB/wEbAXoBWQF6Af8BmgFZ + ARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHzAv8B8wL0AQcBvAH0AXMB9AEH + AfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEbAgAB8wNaAwAB/wgAAbwB8AEA + AvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6BVkBmgH/DAAVVgGYCQABfANa + EgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/EAAB9gJ6ARoC/wHzAxoB9A4A + FFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcAAfQB8ggAAfcEAAH/AXoBWQF6 + AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/AfQC8wH0Af8B8wEIAf8FAAHz + AQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARaCgAB8wEHBgAB/wEHAXIBcwEc + Ae8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYADlYBlxIABVoMAARaAZ4KAAHz + AQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/FAAFWgoABVoLAAH/AVAB7wIH + AfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/A/MB9A4AAf8D8wH0JgAJVgEI + GgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKeAf//ADMAAfMDWigAAfMDWjAA + AfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMAAf8CWgH0AQAB8wNaAgABCAJa + EQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4AAWwC9AH/AwAB/wGuEgAdWQcA + AfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHkAVoRAAFaAf8KAAFsAvQBZgQA + AfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFmEgAdWQoAAfQBWhoAAVoUAAHC + AVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFsBPQBvAH3AgABZgL0EwAdWQwA + Af8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/AVoWAAFaFwABWgUAAa4B8wX0 + AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8Aa4B/wGuAQkBkQG8EAAdWQ8A + AfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/Aa4BCQFsAW0BuwHtDAAdWRAA + Af8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0Aa4B9AFmAv8CCQJmDAAdWREA + Af8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGuAQcBZgH/Ae8BbAG7AfcLAB1Z + EgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGuAvQBtQFsAfcB/wGuAfALAB1Z + EwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1ZFAAB/wFaDwABWhYAAfQBWg0A + AZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGeAVoVAAFaDwABZgH/AgAB9wG8 + Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFaFQABbAH/AWwBrgb0AWwB/wUA + AzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFsBAAdMRgAAf8BWg0AAloRAAFa + AZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIAEjElAAH0AVoNAAJaDQABWgHk + IQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQAAWwB9AFsAwARMScAAfMBWgEA + AVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAAAf8Bu20AAbIRAAGybAABsgEJ + AbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgAAQlqAAH/AgABswIAAQkCAAHz + AgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/AgABswIAAQkCAAHzAgAB/wgA + ARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKzCQAB/wIJAf8CCQH0AgABGQEJ + ARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7GhkBigUAAf8UAAEZCQAB/wIJ + AQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGyAfQIAAG6AbIEAAGzAYoCZQK7 + GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJDLIEAAGzAYoBuwJlAbsBCRgZ + AYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQAAbMBigG7ARkCZQG7AQkJGQEJ + DBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkAAboB9BkAAbMBigG7AhkCZQG7 + CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkAAbMBigG7AxkCZQG7BhkBuwJl + AbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGzBAABswGKAbsEGQJlAbsFGQFm + AmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyyBAABswGKAbsFGQJlAbsDGQG7 + AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQABPQBswGyAfQIAAG6AbIEAAGz + AYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWyFAAB8wIJEwABugH0AgAIsgH0 + CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZAYoFAAH/AgABswIAAQkCAAHz + AgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1A2UFGQJlAbsDGQEJAmUDGQGK + BQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIAAbIGAAyyBAABswGKAbsQGQEJ + AWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHzEgkLAAG6AfQCAAGyFgABswGK + AbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDAAB8wEJDv8DCQsA + AboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/AbIVtAGyCwAB8wEJDgADCQoA + B7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGyFwABsgoAAfMBCQMAAgkJAAMJ + CQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGyF7MBsgoAAfMBCQMAAgkJAAMJ + CQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7FhkBigQAAboXAAGyCgAB8wEJ + DgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6FwABsgoAAfMBCQ4AAwkJAAEJ + CLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUAH4oEAAG6BAABsgH0CwABCQGy + BAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMAAbJnAAG6AgABsgMAAbIJAAGy + AwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUAAboBs3kAAboDsgEJbQABQgFN + AT4HAAE+AwABKAMAAYADAAGgAwABAQEAAQEGAAEKFgAD/wEABP8BgAsABP8MAAT/DAAE/wwAAfACAAEP DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHw - AgABDwwAAfACAAEPDAAB8AIAAQ8MAAT/DAAE/wwABP8MAAT/DAAB/wHwAQcG/wHgAQMG/wHAAQEG/wGA - AQAG/wIAAX8B/wHgAQMB/wH+AgABPwT/Af4BDwH4AT8B/wGAAQAB/wH8AQ8B+AEfBP8B+AE/Af4BDwH/ - AR8B/AF/AfgBPwH+AQ8B/wH+AX8B/wHwAv8BDwH/AT8B/gF/AfAC/wEHAf8B/gF/Af8B8QL/AYcB/wEm - AXIBfwHhAv8BgwHjAf4BfwHHAeMC/wHDAf8BJgFyAX8BwwL/AcMB4AH+AX8BBwHDAfsB/wHjAf8BJgFy - AX8BwwL/AeEB+AE+AXwBHwHHAfkB/wHxAf8BJgFyAX8BhwHAAQMB8QH+AQ4BcAF/AccB+AH/AfEB/wEm - AXIBfwGHAcABAwHwAeEBggFBAYcBjwH4AT8B+AH/ASYBcgF/AY8BwAEDAfgB4wHgAQcCjwH4AR8B+AH/ - ASYBcgF/AY8BwAEDAfgB4QH4AR8CjwH4AQ8B+AH/ASYBcgF/AQ8BwAEDAfgB4QH8AT8BhwGPAfgBAwH4 - Af8BJgFyAX8BDwHAAQMB+AH/AcIBQwH/AY8B+AEDAfgB/wEmAXIBfwEPAcABAwH4Af8BjgFxAf8BjwH4 - AQcB+AH/ASYBcgF/AQ8BwAEDAfgB/gE+AXwBfwGPAfgBDwH4Af8BJgFyAX8BDwHAAQMB+AH+An4BfwGP - AfgBHwH4Af8BJgFyAX8BjwHAAQMB+AH/Af4BfwH/AY8B+AF/AfgB/wEmAXIBfwGPAcABAwH4Af8B/gF/ - Af8BxwH4Af8B8QH/AT8B/gF/AYcBwAEDAfAB/wH+AX8B/wHHAfsB/wHxAfwCAAEfAYcBwAEDAfAB/wH+ - AX8B/wHDAv8B4wH8AgABHwHDAv8B4QH/Af4BfwH/AeMC/wHjAfwCAAEfAcMC/wHjAf8B/gF/Af8B8QL/ - AccB/AIAAR8B4QL/AcMB/wH+AW8B/wHwAv8BjwH/AecB8wH/AfAC/wGHAf8B/gFvAf8B+AE/Af4BDwH/ - AuMB/wH4AT8B/gEPAf8B/gFHAf8B/AEPAfgBPwH/AfABBwH/AfwBDwH4AR8B/wH+AUcC/wIAAX8B/wH4 - AQ8B/wH+AgABPwH/Af4BQwL/AYABAAb/AgABfwX/AfABBwb/AcABAQ7/AfwBHw3/AeAE/wGAAR8J/wHA - AT8C/wH+AQABBwn/AcABDwL/AfwBAAEDAf8B8AF/Af4BDwT/AcABBwL/AfgBDwEDAf8B4AF/Af4BBwHg - AgABBwHAAQEC/wHwAT8BwwH/AecC/wHnAeACAAEHAcABAAF/Af8B4AH/AfMB/wHmAQYBbgHnAeACAAEH - AcABAAE/Af8B4QP/AecBxgEIAecB4AIAAQcBwAEAAQ8B/wHDA/8B5gEMAQABJwHgAgABBwHAAQABAwH/ - AcME/wGAAbABPwHgAgABBwHAAgAB/wGHA/8B/AIAAf8B4AIAAQcBwAIAAX8BhwT/AYABMgH/AeACAAEH - AcACAAEfAY8C/wEfAfACAAEPAeACAAEHAcACAAEHAY8B/wH+AQ8F/wHgAQgB/wHAAgABAwEPAf8B/AEH - AfgCAAEfAf8B4AEAAf8BwAIAAQEBDwH/AfwBAwH4ARgBAAEfAf8B4AEAAf8BwAIAAQEBDwH/AfgBAQH4 - AgABHwH/AiAB/wHAAgABAQEPAf8B8AEAAf4BAAEiAR8B/wEgAQAB/wHAAgABAwEPAf8B4AEAAfwBAAEC - AR8B/wIAAf8BwAIAAQcBjwH/AeEBEAH8AgABPwH/AQABAQH/AcACAAEPAY8B/wHjARgB/AEgAQABPwH/ - AQABAQH/AcACAAE/AY8B/wH2AR0B/gFAAQABPwH/AYgBAwH/AcACAAH/AYcB/wH+AR8B/gEAAQIBfwH/ - AYABDwH/AcABAAEBAf8BxwH/AfwBPwHnAYABDwHnAfsBwAH/Ac8BwAEAAQcB/wHDAf8B/AE/AecBgAED - AecB+wHgAR8BzwHAAQABHwH/AeEB/wH4AX8B5wHgAQcB5wH7AfgBHwHPAcABAAF/Af8B4AH/AfABfwHn - AfgBHwHnAfgBPwH+AQ8BwAEAAv8B8AF/AeAB/wHgAX8B/gEHAfgBPwH+AQ8BwAEDAv8B+AEfAYEB/wHw - AX8B/gEPBP8BwAEPAv8B/AEAAQMJ/wHAAT8C/wH+AQABBwn/AeABfwP/AYABHwn/AfEE/wHwJv8BwwT/ - AfwBPwX/AcACAAEDAcsE/wHwAYcC/wGPAv8BwAIAAQEBwwT/AYQBMQL/AR8C/wHAAgABAQHhBP8BHgE8 - AX8B/gEcAv8BwAIAAQEB/AP/Af4BfwH/AT8B/AE8Av8BwAIAAQEB/gF/Av8B/AL/AZ8B+AF4Av8BwAIA - AQEB/wE/Av8B+QL/Ad8B8AH4Av8BwAIAAQEB/wGfAv8B+wL/Ac8C8AL/AcACAAEBAf8BzwL/AfMC/wHv - AeABMQL/AcACAAEBAf8B5wL/AfcC/wHnAeABAQL/AcACAAEBAf8B8wL/AfcC/wH3AcABAAL/AcACAAEB - Af8B+QL/AfcC/wH3AeABAAE/Af8BwAIAAQEB/wH8Av8BwwL/AcMBxgEAAQMB/wHAAgABAQH/Af4BfwH/ - AcsC/wHLAcwBAAEDAf8BwAIAAQEC/wE/Af8BwwL/AcMBjAGAAQEB/wHAAgABAQL/AZ8B/wHjAv8B4wH4 - AcABAQH/AcACAAEBAv8BzwH/AfcC/wH3AfkB8AEBAf8BwAIAAQEC/wHnAf8B9wL/AecB/wHAAQABfwHA - AgABAQL/AfMB/wHzAv8B7wH/AeYBAAEfAcACAAEBAv8B+QH/AfsC/wHPAv8BgAEHAcACAAEBAv8B/AH/ - AfkC/wHPAv8ByAEDAcACAAEBAv8B/gF/AfwC/wGfAv8B/gEAAcACAAEDA/8BPwH+AX8B/wE/A/8BgAHA - AQABDwT/AZ8B/wE/Af4BfwP/AcEBwAEAAQ8E/wHDAf8BjAE4BP8B8QHAAQABHwT/AcsB/wHgAYMM/wHD - Af8B/AE/DP8B4wH/Af4BPyX/Af4C/wE/DP8B/gL/Ab8M/wH8AgABHwz/AfkBbQG/Ad8M/wH7AW0BvwHf - AfABGAEMAQ8C/wEAAQ8BwAIAAQEB+wFtAb8B3wHwARgBDAEPAf8B/gEAAQ8BgAMAAfgCAAEfAfABGAEM - AQ8B/AEAAT8BzwQAAfsC/wHfAfEBGAGMAU8B+QH+AT8BzwQAAfsC/wHfAfABGAEMAQ8B+QH+AQABDwQA - AfsC/wHfAfABGAEMAQ8B+QH/AQABDwQAAfsC/wHfAfgBOAEcAQ8B+QP/BAAB+wL/Ad8B/AH+AT8BHwH5 - A/8EAAH7Av8B3wH8AgABHwH5Af8BAAEPBAAB+wL/Ad8B/AIAAR8B+QH+AQABDwQAAfsC/wHfAfwCAAEf - AfkB4AE/Ac8EAAH4AgABHwH/Af4BPwH/AfkBgAE/Ac8EAAH7AW0BvwHfAf8B/gE/Af8B+QG+AQABDwQA - AfsBbQG/Ad8B/wIAAX8B+QG/AQABDwQAAfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAH7AW0BvwHfAf4CAAE/ - AfkBvwL/BAAB8AIAAQ8B/gF/Af4BPwHwAQ8BAAEPBAAB9wL/AfcB/gFzAf4BPwHgAQ4BAAEPBAAB8AIA - AQcB/gFzAf4BPwHjAcABPwHPBAAB9wL/AfcB/gF/Af4BPwHjAcABPwHPBAAB9wL/AfcB/gF/Af4BPwHg - AQ4BAAEPBAAB9wL/AfcB/gIAAT8B8AEPAQABDwGAAwAB9wGfAfwB9wH+AgABPwT/AYACAAEBAfcBXwH9 - AXcM/wH2Ae8B+wG3DP8B8QHvAfMBhw3/AfMB5w7/AfwBHw3/Cw== + AgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEP + DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPAYALAAHwAgABDwHA + AgABAQgAAfACAAEPAf4CAAE/CAAF/wIAAX8IAAX/AgABfwgABf8CAAF/CAAF/wIAAX8IAAH/AfABBwb/ + AeABAwb/AcABAQb/AYABAAb/AgABfwH/AeABAwH/Af4CAAE/BP8B/gEPAfgBPwH/AYABAAH/AfwBDwH4 + AR8E/wH4AT8B/gEPAf8BHwH8AX8B+AE/Af4BDwH/Af4BfwH/AfAC/wEPAf8BPwH+AX8B8AL/AQcB/wH+ + AX8B/wHxAv8BhwH/ASYBcgF/AeEC/wGDAeMB/gF/AccB4wL/AcMB/wEmAXIBfwHDAv8BwwHgAf4BfwEH + AcMB+wH/AeMB/wEmAXIBfwHDAv8B4QH4AT4BfAEfAccB+QH/AfEB/wEmAXIBfwGHAcABAwHxAf4BDgFw + AX8BxwH4Af8B8QH/ASYBcgF/AYcBwAEDAfAB4QGCAUEBhwGPAfgBPwH4Af8BJgFyAX8BjwHAAQMB+AHj + AeABBwKPAfgBHwH4Af8BJgFyAX8BjwHAAQMB+AHhAfgBHwKPAfgBDwH4Af8BJgFyAX8BDwHAAQMB+AHh + AfwBPwGHAY8B+AEDAfgB/wEmAXIBfwEPAcABAwH4Af8BwgFDAf8BjwH4AQMB+AH/ASYBcgF/AQ8BwAED + AfgB/wGOAXEB/wGPAfgBBwH4Af8BJgFyAX8BDwHAAQMB+AH+AT4BfAF/AY8B+AEPAfgB/wEmAXIBfwEP + AcABAwH4Af4CfgF/AY8B+AEfAfgB/wEmAXIBfwGPAcABAwH4Af8B/gF/Af8BjwH4AX8B+AH/ASYBcgF/ + AY8BwAEDAfgB/wH+AX8B/wHHAfgB/wHxAf8BPwH+AX8BhwHAAQMB8AH/Af4BfwH/AccB+wH/AfEB/AIA + AR8BhwHAAQMB8AH/Af4BfwH/AcMC/wHjAfwCAAEfAcMC/wHhAf8B/gF/Af8B4wL/AeMB/AIAAR8BwwL/ + AeMB/wH+AX8B/wHxAv8BxwH8AgABHwHhAv8BwwH/Af4BbwH/AfAC/wGPAf8B5wHzAf8B8AL/AYcB/wH+ + AW8B/wH4AT8B/gEPAf8C4wH/AfgBPwH+AQ8B/wH+AUcB/wH8AQ8B+AE/Af8B8AEHAf8B/AEPAfgBHwH/ + Af4BRwL/AgABfwH/AfgBDwH/Af4CAAE/Af8B/gFDAv8BgAEABv8CAAF/Bf8B8AEHBv8BwAEBDv8B/AEf + Df8B4AT/AYABHwn/AcABPwL/Af4BAAEHCf8BwAEPAv8B/AEAAQMB/wHwAX8B/gEPBP8BwAEHAv8B+AEP + AQMB/wHgAX8B/gEHAeACAAEHAcABAQL/AfABPwHDAf8B5wL/AecB4AIAAQcBwAEAAX8B/wHgAf8B8wH/ + AeYBBgFuAecB4AIAAQcBwAEAAT8B/wHhA/8B5wHGAQgB5wHgAgABBwHAAQABDwH/AcMD/wHmAQwBAAEn + AeACAAEHAcABAAEDAf8BwwT/AYABsAE/AeACAAEHAcACAAH/AYcD/wH8AgAB/wHgAgABBwHAAgABfwGH + BP8BgAEyAf8B4AIAAQcBwAIAAR8BjwL/AR8B8AIAAQ8B4AIAAQcBwAIAAQcBjwH/Af4BDwX/AeABCAH/ + AcACAAEDAQ8B/wH8AQcB+AIAAR8B/wHgAQAB/wHAAgABAQEPAf8B/AEDAfgBGAEAAR8B/wHgAQAB/wHA + AgABAQEPAf8B+AEBAfgCAAEfAf8CIAH/AcACAAEBAQ8B/wHwAQAB/gEAASIBHwH/ASABAAH/AcACAAED + AQ8B/wHgAQAB/AEAAQIBHwH/AgAB/wHAAgABBwGPAf8B4QEQAfwCAAE/Af8BAAEBAf8BwAIAAQ8BjwH/ + AeMBGAH8ASABAAE/Af8BAAEBAf8BwAIAAT8BjwH/AfYBHQH+AUABAAE/Af8BiAEDAf8BwAIAAf8BhwH/ + Af4BHwH+AQABAgF/Af8BgAEPAf8BwAEAAQEB/wHHAf8B/AE/AecBgAEPAecB+wHAAf8BzwHAAQABBwH/ + AcMB/wH8AT8B5wGAAQMB5wH7AeABHwHPAcABAAEfAf8B4QH/AfgBfwHnAeABBwHnAfsB+AEfAc8BwAEA + AX8B/wHgAf8B8AF/AecB+AEfAecB+AE/Af4BDwHAAQAC/wHwAX8B4AH/AeABfwH+AQcB+AE/Af4BDwHA + AQMC/wH4AR8BgQH/AfABfwH+AQ8E/wHAAQ8C/wH8AQABAwn/AcABPwL/Af4BAAEHCf8B4AF/A/8BgAEf + Cf8B8QT/AfAm/wHDBP8B/AE/Bf8BwAIAAQMBywT/AfABhwL/AY8C/wHAAgABAQHDBP8BhAExAv8BHwL/ + AcACAAEBAeEE/wEeATwBfwH+ARwC/wHAAgABAQH8A/8B/gF/Af8BPwH8ATwC/wHAAgABAQH+AX8C/wH8 + Av8BnwH4AXgC/wHAAgABAQH/AT8C/wH5Av8B3wHwAfgC/wHAAgABAQH/AZ8C/wH7Av8BzwLwAv8BwAIA + AQEB/wHPAv8B8wL/Ae8B4AExAv8BwAIAAQEB/wHnAv8B9wL/AecB4AEBAv8BwAIAAQEB/wHzAv8B9wL/ + AfcBwAEAAv8BwAIAAQEB/wH5Av8B9wL/AfcB4AEAAT8B/wHAAgABAQH/AfwC/wHDAv8BwwHGAQABAwH/ + AcACAAEBAf8B/gF/Af8BywL/AcsBzAEAAQMB/wHAAgABAQL/AT8B/wHDAv8BwwGMAYABAQH/AcACAAEB + Av8BnwH/AeMC/wHjAfgBwAEBAf8BwAIAAQEC/wHPAf8B9wL/AfcB+QHwAQEB/wHAAgABAQL/AecB/wH3 + Av8B5wH/AcABAAF/AcACAAEBAv8B8wH/AfMC/wHvAf8B5gEAAR8BwAIAAQEC/wH5Af8B+wL/Ac8C/wGA + AQcBwAIAAQEC/wH8Af8B+QL/Ac8C/wHIAQMBwAIAAQEC/wH+AX8B/AL/AZ8C/wH+AQABwAIAAQMD/wE/ + Af4BfwH/AT8D/wGAAcABAAEPBP8BnwH/AT8B/gF/A/8BwQHAAQABDwT/AcMB/wGMATgE/wHxAcABAAEf + BP8BywH/AeABgwz/AcMB/wH8AT8M/wHjAf8B/gE/Jf8B/gL/AT8M/wH+Av8Bvwz/AfwCAAEfDP8B+QFt + Ab8B3wz/AfsBbQG/Ad8B8AEYAQwBDwL/AQABDwHAAgABAQH7AW0BvwHfAfABGAEMAQ8B/wH+AQABDwGA + AwAB+AIAAR8B8AEYAQwBDwH8AQABPwHPBAAB+wL/Ad8B8QEYAYwBTwH5Af4BPwHPBAAB+wL/Ad8B8AEY + AQwBDwH5Af4BAAEPBAAB+wL/Ad8B8AEYAQwBDwH5Af8BAAEPBAAB+wL/Ad8B+AE4ARwBDwH5A/8EAAH7 + Av8B3wH8Af4BPwEfAfkD/wQAAfsC/wHfAfwCAAEfAfkB/wEAAQ8EAAH7Av8B3wH8AgABHwH5Af4BAAEP + BAAB+wL/Ad8B/AIAAR8B+QHgAT8BzwQAAfgCAAEfAf8B/gE/Af8B+QGAAT8BzwQAAfsBbQG/Ad8B/wH+ + AT8B/wH5Ab4BAAEPBAAB+wFtAb8B3wH/AgABfwH5Ab8BAAEPBAAB+wFtAb8B3wH+AgABPwH5Ab8C/wQA + AfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAHwAgABDwH+AX8B/gE/AfABDwEAAQ8EAAH3Av8B9wH+AXMB/gE/ + AeABDgEAAQ8EAAHwAgABBwH+AXMB/gE/AeMBwAE/Ac8EAAH3Av8B9wH+AX8B/gE/AeMBwAE/Ac8EAAH3 + Av8B9wH+AX8B/gE/AeABDgEAAQ8EAAH3Av8B9wH+AgABPwHwAQ8BAAEPAYADAAH3AZ8B/AH3Af4CAAE/ + BP8BgAIAAQEB9wFfAf0Bdwz/AfYB7wH7AbcM/wHxAe8B8wGHDf8B8wHnDv8B/AEfDf8L @@ -324,159 +334,187 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACI - IwAAAk1TRnQBSQFMAgEBCwEAAUABAAFAAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABMAMAAQEBAAEgBgABMP8AJwAB/wH2AesB/3AAAyMBMwFOAVEBUAGZAzgBXBwAAU4BUQFQAZkBTgFR - AVABmVgAAf8B9gHrAf8DBgEIBAADDAEQKAABTAFEATQB/wHUAbgBAAH/AdQBuAEAAf8BTAFEATQB/wFM - AUQBNAH/AUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wHUAbgBAAH/AdQBuAEA - Af8BTAFEATQB/wwAAU4BUQFQAZksAAFOAVEBUAGZUAAB/wH2AesB/wFkAUgBLwH/CAAB/wH2AesB/ygA - AUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AfQB2wEAAf8B/gHk - AQAB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wHUAbgBAAH/AUwBRAE0Af8MAAFOAVEBUAGZCAADCwEP - A0IBdAQAAU4BeQFnAfABUAFTAVEBnwQAAU4BUAFPAZcIAAFOAVEBUAGZTAABtAGhAZAC/wH2AesB/wgA - AV8BWQFVAc8B/wH2AesB/ygAAUwBRAE0Af8BTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQC/wHl - AQAB/wFcAVMBLwL/AeUBAAL/AeUBAAH/AasBmQEXAf8BTAFEATQB/wHUAbgBAAH/AUwBRAE0Af8YAAMo - AT0BUwFbAVcBsQMkATUIAAFRAXYBZAHnAwgBCwFPAVIBUQGbVAAB/wH2AesC/wH2AesB/wF3AV0BRgH/ - AW4BUwE7Af8B4gHKAbAB/wGFAWgBUgH/KAABTAFEATQB/wFMAUQBNAH/AUwBRAE0Af8BTAFEATQB/wHS - Ab0BCwH/AWMBWQEtAv8B5QEAAf8BTAFEATQC/wHlAQAB/wHCAa4BEAH/AUwBRAE0Af8BTAFEATQB/wFM - AUQBNAH/GAABSAFKAUkBiAMVAR0BSgF8AWgB8gFTAVkBVwGtBAADCAELXAAB/wH2AesB/wFuAVMBOwL/ - AfYB6wL/AfYB6wH/AZMBewFpAf8BjgF0AWEB/wGoAY8BcQH/NAABSgG3Av8BTAFPAVIBkAMsAUQBSgG3 - Av8EAAFKAbcC/5QAAW4BUwE7Af8EAAJMAUsBjwHLAbIBmQH/AfsB8QHlAv8B9gHrAf8B+wHxAeUF/wHb - AcIBqAH/AWQBSAEvAf8sAAFKAbcC/wFKAbcC/wFAAkEBbwMhATABSgG3Av8DIgEyHAABTgFRAVABmQFO - AVEBUAGZAUoBTAFLAYsEAAFIAkkBhgFIAkkBhQFIAUoBSQGHAUsBTQFMAY4BTAFOAU0BkQFIAkkBhQFL - AU0BTAGOVAAB4gHKAbAB/wQAAWQBVQFKAecBdgFdAUYB/wGAAWMBTAL/AfYB6wH/AXgBXwFIBf8DOwFk - IAABUAGjAd0B9QQAAUoBtwL/AUoBtAH2Af0DBAEGAywBRAFHAUkBSgGCAUoBtwL/IAABVAFzAWUB4AFN - AYMBawH3Aw0BEQFIAkkBhQFTAVkBVwGtBAADEgEZBAADIwEzAzEBTVwAAVcBVgFUAbgBZAFIAS8B/wFy - AVkBQgH/AeIBygGwAv8B9gHrAv8B9gHrAf8B4wHWAckB/wFkAUgBLwH/HAACNwE4AVsBPgI/AWsBSgG3 - Av8DAwEEAU0BrAHqAfoBUQGgAdUB8gFWAWkBdAG9Aj0BPgFoHAABSwFOAU0BkAMxAU4DBQEHAwABAQM6 - AWIBUQFUAVMBoQFNAVABTwGWAVEBWAFVAakDIwE0AwABAXAAAfsB+gH5Af8BkwF4AWMC/wH2AesC/wH2 - AesC/wH2AesB/wMGAQgYAAFKAbcC/wQAAVIBogHZAfQBSgG3Av8BSgG3Av8BUAFZAV0BoyQAA0ABcAMm - ATkDBAEGAUgBfAFiAfYBUAFTAVEBnwFTAXYBZQHlAwIBAwMiATIBVQFxAWIB3HwAAf8B9gHrAv8B9gHr - Av8B9gHrAf8B7AHhAdQB/xQAAwoBDgFKAbcC/wM1AVYUAAGuAaQBkAH/EAADOAFcCAADQgF0AzEBTwFR - AXYBZAHnAVIBWgFWAbABRwF+AWUB+BAAAzgBXHgAA0ABcAH/AfYB6wH/AfEB5gHaAf8cAAE/AkABbQFN - AaEB1gHzAUkBSwFNAYgMAAGuAaQBkAH/EAABTgFRAVABmQwAAUsBTgFNAZABVgFuAWEB1wFRAVgBVgGq - AUcBgwFjAfsDHAEoDAABTgFRAVABmZAAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAA - AUcBfgFlAfgBTgFRAVABmQM4AVwcAAFOAVEBUAGZAU4BUQFQAZkDIgEx/wD/AP8AywADMgFQUAABJAH6 - ARUB/wEkAfoBFQH/BAABJAH6ARUB/wEkAfoBFQH/GAABqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8YAANQAZ4B2wGWAQwB/wHbAZYBDAH/AdsBlgEM - Af8DAAEBHAADMgFQASMB+gEUAf9AAAFRAVMBUQGgAxIBGAgAAzIBUAgAAT4BPwE+AWwDIQEwDAABfwFl - AUsB7wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/xQAAdsBlgEMAf8UAAHbAZYBDAH/IAABIwH6ARQB/zgAAVYBcgFTAc8kAAMhATAIAAF/AWUBSwHv - AeEBvQGKAf8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/ - EAAByQGWARgB/UAAASMB+gEUAf9cAAM7AWQIAAF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wFNASQBCwH/ - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/EAADNgFZHAAB2wGWAQwB/yQAASMB+gEU - Af8sAAEkAfoBFQH/LAABJAH6ARUB/wQAAX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8BTQEk - AQsB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFTASoBEQH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AfoB6wHSAf8wAAM1AVcoAAEjAfoBFAH/KAABJAH6ARUB/ywA - ASQB+gEVAf8EAAF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHh - Ab0BigH/AU0BJAELAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGK - Af8BcQFOATUB/wH6AesB0gH/IAAB2wGWAQwB/zwAASMB+gEUAf8gAAMyAVAsAAMyAVAIAAF/AWUBSwHv - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/ - IAAB2wGWAQwB/0AAASMB+gEUAf8gAAEkAfoBFQH/LAABJAH6ARUB/wQAAX8BZQFLAe8B4QG9AYoB/wFN - ASQBCwH/AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wHaAbYBhAH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8QAAHbAZYBDAH/ - DAAB2wGWAQwB/xAAAZoBegE1AfAwAAEjAfoBFAH/HAABJAH6ARUB/ywAASQB+gEVAf8EAAF/AWUBSwHv - AeEBvQGKAf8BTQEkAQsB/wHpAcwBoQH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - FAACTAFLAZAIAAHbAZYBDAH/SAABIwH6ARQB/0QAAxIBGAgAAX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8YAAHbAZYBDAH/BAAB2wGW - AQwB/wwAAdsBlgEMAf88AAEjAfoBFAH/GAABJAH6ARUB/yQAAVIBVgFSAagMAAGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/ygAAdsBlgEMAf8DQAFw - RAABIwH6ARQB/xgAASQB+gEVAf8cAAFWAWgBUwHHwAADMgFQIAABJAH6ARUB/wEkAfoBFQH/BAABJAH6 - ARUB/wEkAfoBFQH/zAADMgFQJAADMgFQ/wD/AP8APwAB2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGW - AQoB/wHbAZYBCgH/AdsBlgEKAf8MAAGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wQAAagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/BAABqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8MAAFpAWIBVAHfEAAB2wGWAQoB/xAAAloBWAHACAABfwFl - AUsB7wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wF/AWUBSwHvAU0BJAELAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AX8BZQFLAe8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/wgAAX8BZQFLAe8B4QG9AYoB/wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 + KQAAAk1TRnQBSQFMAgEBDAEAARgBAAEIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABQAMAAQEBAAEgBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A4gABIwEhASMBMAGt + AdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQA + Af8B9gHrAf9wAAMjATMBTgFQAU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkIAAFUAUEBWwG+Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/AWoBXgFuAf8BUAEsAVsB/wF3 + AXYBeAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/EAAB/wH2 + AesB/wMGAQgEAAMMARAoAAFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD + ATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/ + DAABTgFQAU4BmSwAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf + Af8BrQHbAZ8B/wFQASwBWw3/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGt + AdsBnwH/DAAB/wH2AesB/wFjAUcBLgH/CAAB/wH2AesB/ygAAUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/ + AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AfQB2wEAAf8B/gHkAQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD + ATMB/wHUAbgBAAH/AUsBQwEzAf8MAAFOAVABTgGZCAADCwEPA0IBdAQAAU4BdgFmAfABUAJRAZ8EAAFO + Ak8BlwgAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs + AVsV/wFQASwBWwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAG0AaEBkAL/AfYB6wH/ + CAABXQFZAVcBzwH/AfYB6wH/KAABSwFDATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwL/ + AeUBAAH/AVsBUgEuAv8B5QEAAv8B5QEAAf8BqwGZARYB/wFLAUMBMwH/AdQBuAEAAf8BSwFDATMB/xgA + AygBPQFVAVcBVgGxAyQBNQgAAVMBcgFkAecDCAELAU8BUQFQAZsMAAFUAUEBWwG+Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8BXgE9AWgF/wFQASwBWwH/AVABLAFbAf8BVAEwAV4F/wFSAS4BXQH/ + Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wL/AfYB6wH/AXYBXAFFAf8BbQFS + AToB/wHiAcoBsAH/AYUBZwFRAf8oAAFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdIBvQEK + Af8BYgFYASwC/wHlAQAB/wFLAUMBMwL/AeUBAAH/AcIBrgEPAf8BSwFDATMB/wFLAUMBMwH/AUsBQwEz + Af8YAAFIAkkBiAMVAR0BSwF6AWcB8gFTAVcBVQGtBAADCAELFAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwn/AYQBjQGBAf8BrQHbAZ8B/wFUATQBXgn/Aa0B2wGfAf8BrQHbAZ8B/wGt + AdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wH/AW0BUgE6Av8B9gHrAv8B9gHrAf8BkwF6AWgB/wGOAXMBYAH/ + AagBjwFwAf80AAFJAbcC/wFMAU0BTgGQAywBRAFJAbcC/wQAAUkBtwL/UAABVAFBAVsBvgGtAdsBnwH/ + Aa0B2wGfAf8BrQHbAZ8B/wGoAdIBnAn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8EAAFtAVIBOgH/BAACTAFLAY8BywGyAZkB/wH7AfEB5QL/AfYB6wH/ + AfsB8QHlBf8B2wHCAagB/wFjAUcBLgH/LAABSQG3Av8BSQG3Av8DQAFvAyEBMAFJAbcC/wMiATIcAAFO + AVABTgGZAU4BUAFOAZkDSgGLBAADSAGGA0gBhQFIAkkBhwFLAUwBSwGOAUwCTQGRA0gBhQFLAUwBSwGO + CAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/AVABLAFbAf8BrQHbAZ8B/wFQ + ASwBWwn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8MAAHiAcoBsAH/BAABZAFWAU0B5wF1 + AVwBRQH/AYABYgFLAv8B9gHrAf8BdwFeAUcF/wM7AWQgAAFRAZ4B0gH1BAABSQG3Av8BSQGzAfMB/QME + AQYDLAFEAkcBSAGCAUkBtwL/IAABVwFuAWQB4AFPAYIBawH3Aw0BEQNIAYUBUwFXAVUBrQQAAxIBGQQA + AyMBMwMxAU0IAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEsAVsJ/wFY + ATYBYwn/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQAAVcCVgG4AWMBRwEu + Af8BcQFYAUEB/wHiAcoBsAL/AfYB6wL/AfYB6wH/AeMB1gHJAf8BYwFHAS4B/xwAAzcBWwM+AWsBSQG3 + Av8DAwEEAU0BqQHjAfoBUwGbAckB8gFXAWIBaAG9Az0BaBwAAUsCTAGQAzEBTgMFAQcDAAEBAzoBYgFR + AlIBoQFNAk4BlgFSAVUBUwGpAyMBNAMAAQEMAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BggGJAYAB/wHpAeQB6g3/AZ0BiQGjAf8BqQHTAZwB/wGtAdsBnwH/AVABLAFbAf8BUAEs + AVsB/wGtAdsBnwH/JAAB+wH6AfkB/wGTAXcBYgL/AfYB6wL/AfYB6wL/AfYB6wH/AwYBCBgAAUkBtwL/ + BAABUgGcAc8B9AFJAbcC/wFJAbcC/wFQAVUBVgGjJAADQAFwAyYBOQMEAQYBSAF6AWIB9gFQAlEBnwFW + AXMBZQHlAwIBAwMiATIBVgFsAWEB3AwAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/AWcBWAFsAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8DeQH/Aa0B2wGfAf8BrQHb + AZ8B/wFwAU8B8AH/AXABTwHwAf8BrQHbAZ8B/zAAAf8B9gHrAv8B9gHrAv8B9gHrAf8B7AHhAdQB/xQA + AwoBDgFJAbcC/wM1AVYUAAGuAaQBkAH/EAADOAFcCAADQgF0AzEBTwFTAXIBZAHnAVMBVgFVAbABRwF9 + AWMB+BAAAzgBXAQAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs + AVsB/wFQASwBWwH/Aa0B2wGfAf80AANAAXAB/wH2AesB/wHxAeYB2gH/HAADPwFtAU0BmgHMAfMCSQFK + AYgMAAGuAaQBkAH/EAABTgFQAU4BmQwAAUsCTAGQAVkBaQFgAdcBUgFWAVQBqgFHAYIBYQH7AxwBKAwA + AU4BUAFOAZkIAAFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQ + ASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFb + Af8BUAEsAVsB/0wAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAAAUcBfQFjAfgBTgFQ + AU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkDIgExFAABUAEsAVsB/wGJAcoB/QH/AYkBygH9Af8BiQHK + Af0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AVABLAFbAf/cAAFQASwBWwH/AYkBygH9 + Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BUAEsAVsB/9wA + ASABHwEhASwBUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEs + AVsB/wMGAQj/AJEAAzIBUFAAASMB+gEUAf8BIwH6ARQB/wQAASMB+gEUAf8BIwH6ARQB/xgAAagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/GAADUAGe + AdsBlgELAf8B2wGWAQsB/wHbAZYBCwH/AwABARwAAzIBUAEiAfoBEwH/QAADUQGgAxIBGAgAAzIBUAgA + AT4BPwE+AWwDIQEwDAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/xQAAdsBlgELAf8UAAHbAZYBCwH/IAABIgH6ARMB/zgAAVgBbAFW + Ac8kAAMhATAIAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BfwFlAUsB7wHhAb0BigH/AU0BJAELAf8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF/AWUBSwHvAeEBvQGKAf8BTQEkAQsB/wHh - Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/DAADKgFAMAABfwFlAUsB7wHh - Ab0BigH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AU0BJAEL - Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wF/ - AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8BTQEkAQsB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFN - ASQBCwH/AX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/AU0BJAELAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wFNASQBCwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AU0BJAELAf8MAAMqAUAQAAHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/AdsBlgEK - Af8B2wGWAQoB/wgAAX8BZQFLAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/ - AfoB6wHSAf8B3QG5AYcB/wFTASoBEQH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wFNASQBCwH/AfoB6wHSAf8BfwFlAUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/ - AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVMBKgERAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ - AU0BJAELAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BUwEqAREB/wFNASQBCwH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/DAADKgFABAAB2wGWAQoB/wHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/xAAAloBWAHACAABfwFlAUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AU0BJAELAf8B4QG9AYoB/wFNASQBCwH/AfoB6wHSAf8B5wHVAbwB/wHhAb0BigH/AfoB6wHS - Af8B+gHrAdIB/wHhAb0BigH/AXEBTgE1Af8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8BTQEkAQsB/wHhAb0BigH/AU0BJAELAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGK - Af8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BcQFOATUB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AeEBvQGKAf8BTQEkAQsB/wH6AesB0gH/AecB1QG8 - Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFxAU4BNQH/AfoB6wHSAf8MAAMqAUAQAAHb - AZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wgAAX8BZQFLAe8B4QG9 - AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8BfwFl - AUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AfoB6wHSAf8B+gHrAdIB/wFNASQBCwH/AfoB6wHSAf8B+gHr - AdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AU0BJAELAf8B+gHr - AdIB/wH6AesB0gH/DAADKgFAMAABfwFlAUsB7wHhAb0BigH/AU0BJAELAf8B+gHrAdIB/wFNASQBCwH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AdoBtgGEAf8BTQEk - AQsB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8BTQEkAQsB/wH6AesB0gH/ - AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B2gG2 - AYQB/wFNASQBCwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wFNASQBCwH/ - AfoB6wHSAf8BTQEkAQsB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wHaAbYBhAH/AU0BJAELAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8IAAHbAZYBCgH/AdsBlgEK - Af8B2wGWAQoB/wHbAZYBCgH/CAAB2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/ - AdsBlgEKAf8IAAF/AWUBSwHvAeEBvQGKAf8BTQEkAQsB/wHpAcwBoQH/AU0BJAELAf8B+gHrAdIB/wH6 + Af8B+gHrAdIB/wHhAb0BigH/EAABxgGWARkB/UAAASIB+gETAf9cAAM7AWQIAAF7AWQBTAHvAeEBvQGK + Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHh + Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/EAADNgFZ + HAAB2wGWAQsB/yQAASIB+gETAf8sAAEjAfoBFAH/LAABIwH6ARQB/wQAAXsBZAFMAe8B4QG9AYoB/wH6 + AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEK + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8wAAM1AVcoAAEi + AfoBEwH/KAABIwH6ARQB/ywAASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHr + AdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/IAAB2wGWAQsB/zwAASIB+gETAf8gAAMy + AVAsAAMyAVAIAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEK + Af8B+gHrAdIB/wH6AesB0gH/IAAB2wGWAQsB/0AAASIB+gETAf8gAAEjAfoBFAH/LAABIwH6ARQB/wQA + AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8QAAHbAZYBCwH/DAAB2wGWAQsB/xAAAZQBdwE6AfAwAAEiAfoBEwH/HAABIwH6ARQB/ywA + ASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/AUwBIwEKAf8B+gHrAdIB/wH6 AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wFNASQBCwH/AekBzAGhAf8BTQEkAQsB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BfwFlAUsB7wHhAb0BigH/AU0BJAELAf8B6QHMAaEB/wFN - ASQBCwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfYB5wHO - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEKAf8IAAJaAVgBwAHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/xAAAloBWAHACAABfwFlAUsB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 + Af8B+gHrAdIB/wH6AesB0gH/FAACTAFLAZAIAAHbAZYBCwH/SAABIgH6ARMB/0QAAxIBGAgAAXsBZAFM + Ae8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF/AWUBSwHvAeEBvQGKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AX8BZQFLAe8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8IAAHbAZYBCgH/ - AdsBlgEKAf8B2wGWAQoB/wHbAZYBCgH/CAAB2wGWAQoB/wHbAZYBCgH/AdsBlgEKAf8B2wGWAQoB/wHb - AZYBCgH/AdsBlgEKAf8MAAGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wQAAagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGo - AVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEE - Af8BqAFWAQQB/wGoAVYBBAH/BAABqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/ - AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFWAQQB/wGoAVYBBAH/AagBVgEEAf8BqAFW - AQQB/wGoAVYBBAH/AagBVgEEAf//AP8A/wADAAFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUA - AYABARYAA/8BAAb/AgAB+wP/AccB8wIAAfIB/wHAAQEB3wH9AgAB5gH/AcABAQHZAS0CAAHMAf8BwAEB - AfgBxwIAAcAB/wHAAQEB+AFfAgABwAF/AfwBLwL/AgABoAEfAfwBDwHiAQMCAAHoAQ8B9AEPAfABUwIA - AfgBBwHwAQ8B4AEHAgAB/wGBAfoBHwHwAQcCAAH/AfAB+AH7AdgBPQIAAf8B+AH+ATsB3AEdAgAC/wHn - AfMBxwHxAgAG/wIABv8CAAz/Ab8B/wH8AZ8BgAEAAfwBHwHPAf8B8wFnAgAB+wHvAfcB/wHvAfsCAAH3 - Af8B+wL/AfsCAAL3Af0B/wHfAf0CAAH/AfcB/gH/Ad8B/QIAAf8BfwH/AX8BvwH7AgAB/wF/Af8BvwHf - Af0CAAH3AXsB/wLfAf0CAAH7AX8B/wHvAf8B+wIAAf0BdwH/AfcB7wH7AYABAAH/Ac8B/wH7AvcF/wH7 - AfwBnwX/Af0B/wF/Gf8BAwGAAQABgAEAAYABAAHvAXsGAAHvAQMGAAHvAf8GAAHvAQMGAAHoAXsGAAHv - AQMGAAHvAf8GAAHDAQMGAAHYAXsGAAHDAQMBgAEAAYABAAGAAQAY/ws= + Af8YAAHbAZYBCwH/BAAB2wGWAQsB/wwAAdsBlgELAf88AAEiAfoBEwH/GAABIwH6ARQB/yQAAVIBVQFS + AagMAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/ygAAdsBlgELAf8DQAFwRAABIgH6ARMB/xgAASMB+gEUAf8cAAFXAWEBVgHHwAADMgFQIAABIwH6 + ARQB/wEjAfoBFAH/BAABIwH6ARQB/wEjAfoBFAH/zAADMgFQJAADMgFQ/wD/AP8APwAB2wGWAQkB/wHb + AZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8MAAFmAWEBVgHfEAAB2wGW + AQkB/xAAAloBWAHACAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8BTAEjAQoB/wHhAb0BigH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJ + Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ + AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BewFkAUwB7wHhAb0BigH/ + AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF7AWQBTAHv + AeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/ + DAADKgFAMAABewFkAUwB7wHhAb0BigH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BTAEjAQoB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AUwBIwEKAf8B4QG9 + AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGW + AQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + Af8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEKAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHS + Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVIBKQEQAf8BTAEjAQoB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK + Af8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BUgEpARAB/wFM + ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/DAADKgFA + BAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8B5wHV + AbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXABTQE0Af8B+gHrAdIB/wF7AWQBTAHv + AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHr + AdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/ + AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8BTAEj + AQoB/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFwAU0BNAH/ + AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGW + AQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6 + AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wFM + ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6 + AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/DAADKgFAMAABewFkAUwB7wHhAb0BigH/AUwBIwEK + Af8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AdoBtgGEAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK + Af8BTAEjAQoB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFM + Ae8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJ + Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8IAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/ + AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHn + Ac4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ + AekBzAGhAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/ + AUwBIwEKAf8B6QHMAaEB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEJ + Af8IAAJaAVgBwAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHv + AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/ + AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ + AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV + AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/AagBVQED + Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo + AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf//AP8A/wADAAFCAU0BPgcAAT4DAAEo + AwABQAMAAUADAAEBAQABAQYAAQIWAAP/gQAG/wIAAfsD/wHHAfMCAAHyAf8BwAEBAd8B/QIAAeYB/wHA + AQEB2QEtAgABzAH/AcABAQH4AccCAAHAAf8BwAEBAfgBXwIAAcABfwH8AS8C/wIAAaABHwH8AQ8B4gED + AgAB6AEPAfQBDwHwAVMCAAH4AQcB8AEPAeABBwIAAf8BgQH6AR8B8AEHAgAB/wHwAfgB+wHYAT0CAAH/ + AfgB/gE7AdwBHQGAAQAC/wHnAfMBxwHxAfABBwb/AfABBwb/AfABBwz/Ab8B/wH8AZ8BgAEAAfwBHwHP + Af8B8wFnAgAB+wHvAfcB/wHvAfsCAAH3Af8B+wL/AfsCAAL3Af0B/wHfAf0CAAH/AfcB/gH/Ad8B/QIA + Af8BfwH/AX8BvwH7AgAB/wF/Af8BvwHfAf0CAAH3AXsB/wLfAf0CAAH7AX8B/wHvAf8B+wIAAf0BdwH/ + AfcB7wH7AYABAAH/Ac8B/wH7AvcF/wH7AfwBnwX/Af0B/wF/Gf8BAwGAAQABgAEAAYABAAHvAXsGAAHv + AQMGAAHvAf8GAAHvAQMGAAHoAXsGAAHvAQMGAAHvAf8GAAHDAQMGAAHYAXsGAAHDAQMBgAEAAYABAAGA + AQAY/ws= diff --git a/ToolLib.VisionJob/VisionJob.cs b/ToolLib.VisionJob/VisionJob.cs index 24595af..a58d489 100644 --- a/ToolLib.VisionJob/VisionJob.cs +++ b/ToolLib.VisionJob/VisionJob.cs @@ -267,7 +267,6 @@ namespace ToolLib.VisionJob TreeView tree = GetJobTree(); graph = tree.CreateGraphics(); tree.CreateGraphics().Dispose(); - foreach (KeyValuePair item in D_itemAndSource) { // 将此划线线程委托到JOB管理界面 diff --git a/ToolLib.VisionToolList/VisionToolList.cs b/ToolLib.VisionToolList/VisionToolList.cs index 680ef12..6f651a9 100644 --- a/ToolLib.VisionToolList/VisionToolList.cs +++ b/ToolLib.VisionToolList/VisionToolList.cs @@ -46,6 +46,7 @@ namespace VisionJobFactory public class FindLineToolInterface : IToolInfo { ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image); + ToolIO inputPos = new ToolIO("InputPos", null, DataType.Pose); ToolIO outputXld = new ToolIO("outputXld", null, DataType.Line); ToolIO startPointRow = new ToolIO("StartPointRow", null, DataType.IntValue); ToolIO startPointColumn = new ToolIO("StartPointColumn", null, DataType.IntValue); @@ -59,7 +60,7 @@ namespace VisionJobFactory tool = new FindLine(); FormToolName = "FindLineTool.FormFindLine"; FormTool = null; - toolInput = new List() { inputImage }; + toolInput = new List() { inputImage, inputPos }; toolOutput = new List() { outputXld, startPointRow, startPointColumn, endPointRow, endPointColumn }; } /// @@ -75,6 +76,7 @@ namespace VisionJobFactory public class CaliperInterface : IToolInfo { ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image); + ToolIO inputPos = new ToolIO("InputPos", null, DataType.Pose); ToolIO inputCenterRow = new ToolIO("inputCenterRow", null, DataType.IntValue); ToolIO inputCenterColumn = new ToolIO("inputCenterColumn", null, DataType.IntValue); ToolIO inputPhi = new ToolIO("inputPhi", null, DataType.IntValue); @@ -88,7 +90,7 @@ namespace VisionJobFactory tool = new Caliper(); FormToolName = "CaliperTool.FormCaliper"; FormTool = null; - toolInput = new List() { inputImage, inputCenterRow, inputCenterColumn, inputPhi }; + toolInput = new List() { inputImage, inputCenterRow, inputCenterColumn, inputPhi , inputPos }; toolOutput = new List() { outputCenterRow, outputCenterColumn }; } /// @@ -112,6 +114,10 @@ namespace VisionJobFactory { ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image); ToolIO outPose = new ToolIO("GetPose", null, DataType.Pose); + ToolIO outPoseX = new ToolIO("GetPose.X", null, DataType.IntValue); + ToolIO outPoseY = new ToolIO("GetPose.Y", null, DataType.IntValue); + ToolIO outPoseR = new ToolIO("GetPose.Z", null, DataType.DoubleValue); + ToolIO outPoseScore = new ToolIO("GetPose.Score", null, DataType.DoubleValue); public PMAlignToolToolInterface(string toolName) { enable = true; @@ -121,7 +127,8 @@ namespace VisionJobFactory FormToolName = "PMAlignTool.FormPMAlignTool"; FormTool = null; toolInput = new List() { inputImage }; - toolOutput = new List() { outPose }; + toolOutput = new List() { outPose, outPoseX, outPoseY, outPoseR, outPoseScore }; + } /// /// 只获取选择工具的描述信息 diff --git a/VisionEdit/VisionEdit.csproj b/VisionEdit/VisionEdit.csproj index 6ae89cd..b03d528 100644 --- a/VisionEdit/VisionEdit.csproj +++ b/VisionEdit/VisionEdit.csproj @@ -32,6 +32,10 @@ prompt 4 + + + + False @@ -151,6 +155,9 @@ + + +