From ce47cef1610d38a3ece1bf8ee89ab837d684f2db Mon Sep 17 00:00:00 2001 From: jeffreytsai1004 Date: Tue, 25 Nov 2025 02:46:08 +0800 Subject: [PATCH] Update --- 2023/icons/ngSkinTools2.ico | Bin 60062 -> 0 bytes 2023/icons/ngSkinTools2ShelfIcon.png | Bin 2384 -> 0 bytes 2023/icons/offsetkeys.png | Bin 0 -> 5427 bytes 2023/scripts/animation_tools/offsetkeys.py | 178 +++++++++++++++++++++ 2023/shelves/shelf_Nexus_Animation.mel | 34 ++++ 5 files changed, 212 insertions(+) delete mode 100644 2023/icons/ngSkinTools2.ico delete mode 100644 2023/icons/ngSkinTools2ShelfIcon.png create mode 100644 2023/icons/offsetkeys.png create mode 100644 2023/scripts/animation_tools/offsetkeys.py diff --git a/2023/icons/ngSkinTools2.ico b/2023/icons/ngSkinTools2.ico deleted file mode 100644 index caf8aef2d284e0220c213da92306333c84e4e93e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60062 zcmdqK1$K|2-ec zzVXN-Pd@U%-S@Ef44>&?*So)Gc>n)v=iU1%um3ZB?EZN}JmmcAufBX}yY=N4 zcv$hEdK6L+#eyu+g+4_r4l_#_+uRxEo^B9mB7_xCz7d z<;~Aw*bJ}9dH2t2ob|E$ZyP?BKJVU-pL(tDm*Y>}^RM*2VSgUhr|#DcUmK3AA)az> zh>2jN@%!TQ&!F4Q&pyR}r0M(RsJ}rw?8fy6?bGX@;KnB(KWNuK{s@N6@S2><{nGSz$oI*2 z{}k@>O!A!isGs>i(m%s{{uMFp{>+B``A6q^oD5|~BzCf}oR7t9Uu)|ksPb(eAd{Qsz*hS$4~*T3Rx!~Pha z8;*xQ?=G)~va03F5KoPz;PkYI4$%{NrL`o`;c^Yz#8#%otpd;Q9*koMZEuc)S9>+5o_d`5p> zzDw|z@79zIC5;ALXd~Z+PrJUjK@(4f|u*Uw!^lxOSIUEvq7LGX5f$ zg2@|izK+*kzk(~Ty^2>}y^PDRT*9TxFXQD)7jg0B3lEMLE}n;BGrT7E%4g)W@*S^U z;auQ%%6H3eXw0>&YZ=$_t#ypZwjtIUXF2NrcE|c(1ye&DyPq5OP0n?{{}HxYUPV?# zmIPNBYb~Q9i&tK``~XkE@7(#bID764&YV4sQ>Ra=cJkB-oH%*>p-ryIeW%ZyQlF8} z%6FW>YNpzqgwjwt&rb=Ep#-eLw%rC!889jdv7tWnk_y|_VPaMOs<41Ai=wTc_atH?x z9Z>DS!Tpf7|G>V#Y5IM+@6h3c>N7`=9Z}yQ-=(pa-;m#u-!#Nqo=J3xJforg7TMM| zTlBcL*BWcXv5<4aaeCPKKReEb{V|kZ>34TqYlyAbK`pa_tH`Uy_54}N>8X=AdHfho z96R~|Pr-2SzCGBzXBT$u-ie*Nc3{WO?W%3xu?^d{Z~dDl@9FDuuY6|D-reduthW?Mpt+uxsTNxjXt&E#s`^qKS)eE$vlqHSp@uNp@TjC7C)ea2xmP|TpWVD=6Si*KqVN~o z_wCt@1N-*k@WBH(dbkVo(#AZw13}sr|>W9g+;n*3D=|9uC z;WHZIt1&i|UFo;x$fD=8PS)6JnU!&r@f2B-@fBQU%y;jkjBcY`ZrS_*Pr*xY>{zuD z?JHMcMSC0CRxHQzwq;nhycMm>TGY|-T&~GIa<6=5Wk)+!t?p2BLgT)5^CoQHx&^y- zY{%Z+yB^>zb4}#i5Nny2TCN3a>6_SVt-lR9nZ{YhM~|1`82+Y|oxPrF8MJBZqP50BtGdRdAKD-m-~ux}Gw+W;NEV>QLAS zPJ&%aYcraf8`0R*fQH6;)Hl?juD%wvbu|xda!s1tE1!|iHn%jX`5@mZxXW+IZ^>`U zZ_6{tv&b{av&q~OyCKgk`bPR7dR$|z?X_U7^|y?L$h6ko8gCgpL!9OOp8;#bXEMZB zo?lvbyDNQ_`K@`f*filXqLW1?L^ceu75R~I-Lzpn)~}`B<(PN0Q%;vtK3kd};3-(u z)K;Uax)POD6{x5zM|njV%F0VoT2_LR(&E2q@}69id*ojEjC@wUL*p)(%Wt$TYsJbH zZCKs0QsFJnB06N}_H9bGMZajQwOosxk-mxkmcB}#A7-cZIQ_ z8=qcRHc9lA@DZ8UBD-2IUwHXtoIZON$LQY(uRU;ZFZS&vXWBuT-Mk)K*3!1FT0>mh zmELWp&TVccw)OR>sjNmtRTYZL%29M5!@S}mBo(J2y*dMnmWE^c%o#|n&O}mSGI9#C zkyV(7%z|7L6cnJaAO}VHg*+Cau&@vX#f9p7N=r*oQCf~Vet&gsIqK^x(b8ChWvz{9 z72UtG9UZGzW8H?0P`aG_O}O4(ay8*;!pnu9y?UREOJ6ky*LGTDT6DL_z{9wA_whBv zTCN$s{+~GS{`(KZSagx}LHZ*2O5Zf65`H4GD;)LA>Ek$l?2zI#2X<2@Z`)3txC!gl zuID(e!HN~lSiYIj6DMkAyw8jH(g5m^$8h~g+DmLwykI2Gyn8OY7cLO~w! zXUix4g~dECrM#Dwp{Be7^;OlJTXjmOFK=x@d)sm)+Z)!cReVjjx^Q#h<)Vv(OGqCL zW!lhAYn&g(#k!BN#?kP7{oen?(eQUfezgpX-qG@_ZLjENjjy)5(r2++h`d(L!B+-YB<({W%t+r8~6&p zlBV(1_E+Yp^g;R}eUiQj7ZJNFaVUvbNE|}^6S23OH*Tb@TSL3I0!_;rQPW(5il#Ee zl%*iDjJTCA#k^W#xhxjJtKzYELn@YR%SQB$TrAmDfVjg&h}n~a*xdz)KU9FcQ`K-v z3cwKWsYpLrg}5X6NIX!4SYAs!R*KYv6-eBZj~IS7a%-0QzJ(nLSkN4UMb$9~EsaHZ zVH~keL3&;~a&j|~PrUQ<3Q$y31kvYJ73FBGtwC#J14OQcCkQ{=ym5o#{o(@%FB1+f zoJ{(z`IzW#vC(3`M9+y#XuYj*)|}fASHtuF4SZ#u$@55)IoKUv&8@^9XE*R6$&r^gqqeyMS#{Zntcpiqc?1@=L?N^z9uXT;5VJcQi3bajdY}~P z`^%8KzY3{GiV<_L05M1Nka(gH$)_q2d$Jh0uQb6ie;&pMS)=GmE0WKaA?;i>63>-k z>2cn7q8v%5%29Bn0l7zOka4U6smDqXe;^M_w`U-7Z88=uk3mR%9Kyk#eL2v3ql==hG3oItd}ovFh2v3W#@3qQbf`I|q6B)aB%A z<+R&1Rh7zKw>CF*@o@U1`R;zlZbx6vl@53dRq! zzcM#vj%scteUiROTv#}XaFcZ#*Q1U8XWg=DWY=*ls}nK5F$Te_6A`&HOUY~c;S!E{ zH8M|A&d$^#{ah`wuQa0c!*)8H3?Us6m>6t^ zel9~1(7FJA%NHW3JsL~4rz7onDM~K4pzfn}sJgWlwYN5);>H>jzP$|Dmm86Jp&nW1 z*!Y_nC-}X@J9UVd&$^_Z&u|m(5`GbsB~tUgI!!ff?-6yb!!13fYw7nol~=@YM#?ezqDV@3a!{ zT4Y^lH!>~$wdii) z-r`dW&SIlA&N4=Vvy7Rc-qwDV##q~C8Gnt(e;3C3`}9$M%MjmBKkurA`s977t@)7r z>TSIGs^tA%!OLgQtG*mRvY)zYtD4KJ)~rQi`*K8;(cadCA!c=&!Z!I(5z;6#g%>HO zmzz;=sS#!GbfEr=ji~-`HByci!@FWW#xJC7x(!Dkhrt-&JOaJu4#$wlNf@7GiP4$n zm{RPB$t6yhTjzS-&m(bU3 zC`Qen43{E5#2(B>1$BSjSF6=;=kZwzFEvAssiH5a2ht9fAaQFp`FR{di=&a0OCKyf z6|`r0%X2PF7P#KGsU^-NqOWao)U@IPX?**<;5K|Bc?(_F3y~9s3lV^|)({ z^-<%}{rI23-|(|qhDCnmcZFj~>{*)lM_1o^6R*EPes$%N%EPMM5dFkGq{#Y)mKVOgHPu3v& z^;Q(V+JfRMO~^P~gQO!>Sh6_*-c<|WnmiXFN#RIJi9>cyMwjj`C`4s>nTnq^w=_J6 zhi}^=db^8r%NU6*(>zS%S#+Tx&f2GvaTg49GsLF*`F|E;{heBV1z*w8!UI41_!FgL z-hJ(zznIWcgyK%~-tPGzf#|jKky<8<ic^I^St1}rxOz-r?Rxa?biv1v9K7(4+EyXV4c`%GAGnhCpYv*EC19&ESF zhRc@uu-iBrwi{-_cHInEE%$+WjTcOFT`)4l7(LyG;6<0gm>Oe^_``Xq{CFj5KV75v zTK1(n#mmEYq#>Xo1g-^hU=ra9*U;%m$%;p2Y6|@=#?XrL7&9$qyu6CBlX~VrT2;MSiqTrR7=U(H&RA*Z&cW4e!_ADHv;fbqq`N^E=nx#+z4P zQ~1iWo~JJ;zJmCN!YPZJs^Ael3r@+t@GhAHx1w1vPxORQs6FgTsT=A4 ze+;r8schz?rB;|!We2k+H&`y84%1~GFlnXEUFL}?P3{<1?SP53j+oNu4C8uN7&X|d z^QlcPuw3hlm%=Bbx7QF@QnshHyThc-6I0vVFs0cIlUki&(&&z{^^Uye4bzq0n7Z79 zx_~mi${*(Zy(yIO@#$t5=sO(!tOmhusVfrp=cDkAW@KEfg6Hx;7)3e2EZGw-1v4$W@j$MjEY6bJXnsxQ_SS4=E){NFyK1$;v`;PClv`R~J9Jp|MuwKqcm*`L_5~g0sX)BnKz9S#UPg z*`hnOFQu{880n+N((tvM>-Y6hUzejHzS;(hj+WSr;?VEB!}>Pzt4rr`QGBGs$8co- zL2TKz6?JQfVbKE2uMJ1ep$g=jAx9=}seY4uhCXTwb}-gdh=I;S(bsYSMlCVHlnPf& zD73+tY%>f?L;@GP2x=$v>YXQd)1GaIFOgY~7MT*=sco~yxVtQO$53AXM=;hLOWR@i}gF}DatDVL$2<`K_4Ecz-J^S{bK;H@+Sev*N?AEi-7v(@>W_fiqa z*J0lkQ7(NkIKc#qKF`Ix8@!+I2MX3a&bgk7#e9FxtrRT$j=s=WjAs((C0`dK@|z-r ze_M#q@A5JGaso_OO~=U8X&4=40+S+VOsugZH=l;*OnPHNqzSTLsYBzpTTxG2UH*DA z${1IZSW4*TWXvxMM?_&P(sJoXXJjbfO6;@bR)lY_Vh&6EXR&D#4-=nCb1-e2h0p4E zr(mFQ7JPNna`|7u_+dI)@}Lj=;8(6F{c_?YYpci~B!*SHx{+~$D8)tM50#<#Yzrzb zwxIF@<{3J7BInh5n1tG)_n3a@Icpfq(_Ar}GCU~NSn;NLuf<{U$JxY}m{PVxCS}aS zIp#~gE5MR(ix9#0M1Dhvi?l_=Uyd>dJarT80z)Et!N~ zWBX(5Ok>0!DZ=u5J5YafEp_)YRK3=Y?9+{yvmycuDwiO=l0H>#HuZKUic1O<-)^d{ zS8;C1X9zEq+5;Iwkrl~TY1`agmIY_gsTyBHS^g=EwJhtoppWv|ulZdf$71tEM}Knt zW4!-CSDsMj*~JT&aq9e872`O%cQ00KT7d<1(eP_pMENa2&V_1}Utyf_+G@1k-GylS z!Q=gjr^hhHDTZVCqVbqoXsi658J8Iw{vscd-{m2U;~aF8<9jn3VRx8IxL1T|eQckhn7<|g>wY|pCdN@p-dl#!*Ot*fHDTVWFwCu8%zS7OlGCz~ zo|}WR;(S!pmZ%yOsX3DRvdvpIFix~X#XLo4zrtLVj(3VoX<0VpUs`8t%rusUI=cIN z`d)?a{dkAy2C)T#@kbwjsPe$V{bZh9eEA$s9X+P>Oxxym#MGx^R!umfw&tMVTm$l6 zX+iD#ZP;-80D?E9;02q380a%f#UR8NomT4(|07WddMh1?UsogM+Y*FwY-3T1_`79@ zxJ~&Z9&tR6CvMR{R3YkCrP9r=JHs$C-UO~Y0}*&72@9#O!>%)q{Z%b8(FTXT;y+m+ z;m0~GBF2L4(%TgZ!+5@q>?~B+M|N^7k>80&oLyBaY@FwMyHu!c=S|E$##J6t`Jx> zdB7;!1?inDIA@rnVvDETN1$BIp(J7+EAq|POZi*UqS!>wi|&ZvQLe?KLgBoW_eN8` zV<_js^=8wi3|V4~;h7eglxvSs^NiTX=ipvB7t6lhftH&aP=2)?WpB14d0!y{8pE-; zF#*X1NysACF3OQyMk%>=jk3+FJ33Sj!%$~yo~>gey4F)<+0b7$#Lf^;eJ)4Cdjwx; zqNBg~@}|Q0`i-twmf$PAUgno@gOkjS?%J~r$@LkS(-4K(9kIwcRgcnFT2X#&h06ad zUY~*gUN>_HbA|1Gek^Fd%B0;<1U;vr&|h*gK_I+F4EvIHq78@LP`gtEsSF zl)6Pa>Q}o#NDajc_k7$nMdX^v9lTp_o~#Kl6e&;cHmwmqV5oXws?6S zc}_l`G|AoNLgq0l(A3bt9L92$Ls$M3dCifd2Os1v#4ZZQ)p?8V9NQ2- zjjOz;vDHU;Pvfh(){W0URWdAgSo182p-Zeo)+Zd^e*{(Q8xY=}gjubTh~1TsQrh2= zw^<8A`AyiJhvzK%saWL1B1gDyo(GS;3t>V{AFc zy4o7!D;+T;c@l;YXNR`Ai2t?)S!hMVooeD-k0fF%*hv#ylh_1j!91BVFHNu%{T|Df z$T=eSE+zJH#5WDiDt03AlYpZUaG;$wY4pS3*_7vL&tnPg^J*MIBXgSNAFe!Qdas^20DToC6wT zkzujJqNhcMW&Vgw5IZcfRaqM(b$08vZbD=${gQR@%)KR|>e4clz0rzgUv6ejuoV4m zhu}H)L9ndyh12$VDwY^e};lD7i^qVLD52jW)s`$v{0vk*&wZc^DahVI2wH}Op zx?^IcGX^digVE8(h<>9SIUM=D#meGtDb6Ycl*qMEs^hHGmPvyr}f z8*7W&SyNQbIx_lHxssP;ooIb6YloIC!`ju%JF}Kw_?PyXWy}p_S=WMf_oFnH8fQcK z)z<`LkzpOPR2VbfA^iP4>S>uzvgYq3*MV(golZ(qDx%isz<S0n~ke$xPcfqVRDrNW}J&c%n$YOzLW^BeGB2VVrjIuv?{Yo-TNWX9YY~E23z1orf$XAe6qMwnvXb?mlx2yH$oh@# ztWA}=UWsRS_oYOZg#&9pO7m;MPp~w^Sf6*tSmuY=b>VUHeecs2T%)d#`6O%m4zQl1 zX~i-uSrLgPoSTc*XQT4<70ku8qv5m7FimhnAL>%062_$4X25$(INbLJWAWRmN^Zix zEyvV6XN0|;i42Zy{PztoYxYF{#iKBp{AB|5@3=BM#xgx9hqfv%Ex0gAp=UgnBvE1Y1_N?B){)XtbRW7MXMWlOAk$_mCQv#s%z(?Cp! z<#(4m(BE}XF;Ab}k(hHb5#d*vDa2aoZt7~WC#iRu zA@*m+E6LOe&4~ZJ4E`sUz>T)Zb!!lR*Hgtl$IdrK!_D^4Uip zEfxg*syyuYa*Ab8o7ncv1cA*9QK1vXuGu&!L2dM9*v8&gn5S_ zT($?nll`9ida|->DU^ZuuNxWLa>t@q8Mns<*sKi1h;Sp?U3-jgae*oEG;MTMd0@#q z7}qnWu#9p_`LyZqhgH1~el_SZ{I2KkVOGg&%rBU?5@%v6N2_+8H@hm_r}BG@>wGb( z&KZ-|IABqcp)2UpS2+W zP6uVYjnB%wBI=Y3r~KFq;{sPKeyfNatwC|JkWaGVOPqc7EmFCy37i8xtp~y_XBJl7 z*@Ko_n^FEo8y0uOApK|+7B5dgPHjFirEZ9IBo&pVlx5bCtXzpr>sPDz*CEyv=vcO{ zC(!<~a4*4GY-@LnHP+oRmV33Het_}&w8P9BzD|Gm65}sYlU3ASf$)x0#53L;w3?m? zW6-tNHz4CkHJ-EXgBNEFhgF5A%KzCjkLPx90fMg=(9f)7ETRHQx0^A!+zB(zBqQW} z8V1BpfN6yreIsH^4rA6l9p=r%u9kVCIwzRddl5(Go2r~)Nu6z8>W1I-|1*B|{O>Ti z&=IDz&yyZw-l;_Px9yC;tU>a(%_?US{8jRC;OL?@Q{+>oT zoK{1brtO#@w;Sz&p zjKB-bTS3oa8T!kTmy)%cI$t3^ zti-W(J*VbgVwVl&_F)*ye31KPZb-~S;+EImaQv8O^L(FaWtJ;#hw)b$!n$alaW zEuT>}I-=935nnUrhbPyND^=c?zZ!Q;t)}j#jH`SUx!A-UYZ%3u;?ZaSh(EmWC?=+u z6K69_$s|wXaZ^0Kvv`mh2%`y=4IVitx*8KKv#!B~8WwS}Ay zVzbl8&Bga#a4iGgha(jSvsp`h!oK!#9uD{1S&WZtqtDz5x2A=N+n0wp>caTuR1_3; z)o+(om7=kMb=xh=)EY0zOBr%6oqN>!S~$~B#l5sVYdvnrr$tYTF1YqC_sF^W7Ot?q z;}qAeY~H;E@$H$IvnCpg)}|nEWh~6@e6-HA7;$c4y6tpm281$EuMpQO8_R56HQ~@b}DVJ$fD#FC(tjRRN)9hWrDI%_8S^kUc*$inbE^GSoKn?F zZ3|R9Yx>zmNdAFy`(_oa$u&n7TEb=RETnzRSpDtBFO)->hIQ`;r zDVD^Ibz9lC%7-!{4>DrC-Gnqt7%_)CF4h#kd-hNGZLddRL?3Hnp$*2Rbzwc4dB4%j z`;Oy#Quj4H-yGx195ANR4pUm3VZ|B}%VoYW+2oJDGbeDqn4|peR^;AYNqya-WVrNR zJF#9)yW4^S`bc@wI7cOhl74p?itnwbzD|To$6VxpwHAK6qG3jzW6qkfh3^+4om_n3 zwG?<93}@ZZLRfF`!L$l@400Qza^;f}ZDAB|jRkAtk$b)#p(_)R(Uy;lGWt=h*OprC zhPpacr!6rN9p4mvE$eC|mMr>OFcN*;onISbEI4a97F#UyLF;MJ_rkT_e*FzxK7Rq5 z4sU~BK@b+NNAx~;#-tQ03`=58mO6EG`c%d_iHGEAiSMLjYnW4(jmnsxFJtVI@j@$d zYV$@nI8d*fGOqEnKEKAlzw{`~$hRF>(`CbYEMwv)w%e@972{baG$qd-=A!56BaJV% z!K7N&164CuO&{8HlP|_**x@PK<+S(PDW7Xl+}TEK+fjZ`^mdDqWzpe9Yo(O^e@hH~Wxxk1%OW?(Hq;xW7EZl~&5c75!`pp?lp6o*1Y=Z&u6EQm87$cXA z$MDFB7_evpUI=6@v^QhUGe@AG&v5kg9DsiQL(nT=FrIbpi$6Z`XFT@gAMw2RAoQNa zx@x~6=J*sc=Rg^PUJl zR!n`p4i(hVS;VuXlX-s1v7F};cfnb7w!}yB82c`}yA~$oh(6oGI44$7M>nc|<@4Io zcPnAjK1=z1&PRy#%gOL%9gEb5PGoGapZ7?Z%(lXUZHaI%orj5G7OYWaoq4;gzg(); z%@%XLY<*3+TK_EhWvR^;eJyLJBu}9AwP9{qWcjD~wP37mvD~LImd{^(llxR%ejU3` z@5ADnD9kDe#;tJo4v9 z@NZB48-Di0&+%{1{tA!u_$7YP`fzUO=QiO>?tO7&N@$_bB*G&hw~1_;SZyp!0(>_J%0Z5zpM7!K7YjH6aK>Zb{`Ci9FGY( zcGSOKN*@OAjz{#d0wl8*yX;a2GIo^VS0ny}Cyky((V+&ETv&nRqh$!+n}vDwbEdBg zh8^Q3#_5h297e9-(I0=9@C@T7zr(M3{2ae};+LEkzrTE;+RUAuA&akyR(eAEmyLfb4TKy8<73ka!jP(9Q_XWDd3!y*mWj3Sq|qw+Fgl> zH*!vN!0$o~h9?=T_<6vYP}r}ZO~20(&)fHd#S%v>*u>a9$I`aI8x~0}m|ehFU`9k& zY_p_P?ROzH1YNOB)&p^^r{sbpo-F&s8QNsAvD$|cOtr4=j}S^V%9jT`kAB0%v4=-pu<*0+e6`5HxJes?r=%*L0CbQTK`;GR>8V# z`cRCANS%nRBa-!=YM%n`6DRutN?!Tz`N@X7TIAc%FBV%YpBMhNnKhQPQiEU_>j2kW zA53qU58oB6r)^k(-bMp3(DNmg2b$L4fzgR(s-|)FTdd1?GegDlC1)pdJe|iZ&UeAs zve6qaFsD2+W*Y0^rc#GF!uR4LEMe}wkUr@~oWzN{Z{xMQUlOq&@!7o}@y*>kxC8Lj zZM^o$74)6>B8Hj_!$-vU`_3P6kJrAxdk;5pm-FB@-shbcIzPdIdsm3cew30AN3llC zX-|;y!zWf*U`&A}9yNXv184NdEY8{B!-+_^N}KX|Basrkw-c>xN}h{5MUS^LHnJA8 zjwWGJi7T?crd)Fl2nQFRT8_fMMPH>-=P$WghWT$Z?|L>7W0_x(T5*>RtO;H;1uu;6 z1GnNC2wW8bkA^vLDG7jSv?E-jr(;QGj9TX`wSCPk%sH-Fsd7=WCQ$a&ki4JNN=hD3 z`^jQs4gF*-$68P8_?FzK>pdi2Dc@7xQUkLP2UsLHz_WA)yqW?re|;3}Qrz*(kmoUI z-f)Z(!>;GSYUeDBETJFP;Ew)IBk+vL(-<6Qgl85F z!3)77F_>{2(-dd;wTB?$WDYW^n4%0$iKaYxJnF#7}J(#(Kd#g8c}xzsR5s7Ml{~eA`IZ#Meim3F zI5m`eRTOvaS$_3Wt#d53b$7;YN% zbk<$wY3_0TpTrbyuY}}zdYJdd$b_kw)M$fwZ^e<(24Oky#5xxz%J_U zYRX|CYwpdMZyZ}_rRp{$=H+#cc5(j<*l%G>hCbSmyea4zG8%p6lBds~1fz5(`0QAM zl=rG(yF381w?|XPcamQ)H+7e5)$hx4m(G^lMKeNJcNqLZCKg;t#N1bt;JSMehG#K` z6JvoMMm;dZb2R3y2&Y~QhF9%8t^@Oe@e&&Z#Lq=mexBNMNcNx--X-;3ns><_pTfID z&kFC-HQ0vS`lm3~xkSld$s9TV$_2Id+eCCoi61=6XK^j>0?b+-ikF;5;<1U(qQBiB zj+GsA!yyPbPHy;e9A>={&zM#o5`JK=m3k|`lYR(s7QR_S-4}DY2+tb##-M1%#Wqey z@|V>(hAX&rmw*tWJH$rty3LmlWb+R35@pT9+n>FQzEcNau*FE+{Q5?haPwXYKF_=6 zgZeDr(w~u!U%zvk^XLkazN~@8zUdeiKL!8Z@Anv&$=J-%`Ec3m2fJOfV1J0~sE*Ht z!;!hL*x`e*%j_{IZyE-KkH_Fyqwu(6Z`hKTqzpGJJShU0P~roSA`ybJwe#si;Z?N@K}L6}}Shx%fH!q~lJCZ;X5#?15}WV3ca z_Lq{qq-4J^L*6CaT6mZ6B}3lzFpLFjvBf(6@i&~B81Fo=8-6i!F*Vu_PQ||PtqH_z z){=Tro_kL1Ls=S%o_>SjypFl0L!t0Hy9Bc?$70^w%#kww5&bpuvFvN^-B#*o`kls5 z{mH@dn8#R4KDLhhi*e9S+9t|&4C@gWe3FkK#;<2mcT7J`9d~#MhDI3SdDDS-VNze% zXL(}w+Aw(6&sQ>Jp6meUC7#GFDo_{;?-Fh;`%g&S=6>!QB-~o|`u)#ftn-P67)w67 zvb_=JQ8qA7bcRs7{^QE z+M@z2V107I-DZ`?Nw`tZ*k2$9EM$x~(iFe3dKx{P`oQB%2-e&?hR?~D1y{imIbn{~jw;6?grZ3^co1d!bpfBH*SL#;zpL`d2nmX`*Gy-qqTdcl&6w@y) z#xv%9@E5ZeVY|-{_D5#Ib=y3c9`J_sF0Ost6$qQ%T<^$pIoj@-1-reo;dC$%&WGm1 zVgFomHwO%i8jn6f<6u%AfXLS?i1T{NavPHFR3Y-S0=0H0=-pH-VE)|i;!?(kBFIB5 zFwAi{{xYc-Oy^s`Z{1?@oO$pq2iL27oUZE6Gk;hP&vlU)7&H;R7YxCu7HjyNilm=78IKNqg0X=a zSk}28Hw9OMbC>#>u-wP#uSY|SKmOtqjI`q#apOVw?2FIU{bG;hpIC2sLu|Qx=0~OM zyEr+B?-zIOksTj}BiE?@vj3w>U%Qw>)zcY{9Tk1edz=Gu%Kxd^+Kiv_PHBj9`-{7%H+Maspn zS!2~&pwS-V;JtDI{Fep8yL=8DvRGTZ)D2--OBC-CIhL5F#JjZrB>N&s{g1>nbzQEm zvHyD*i!Rr4EOuPvIISwT3*$@=xR(VWpox2H5aY4_6Y<rza?KcXZ1XOqV*ulmy%vnXMCMUl80Yjp6b#qBb6~pF6Fo-t;F_dKXrhh& zT7*yOVgkie;ack7ee51!%xl-bx`A=dMi?-qpQ;a*Yxl$!^PjqpAHDx+zQb$0^kXNn z=RKcOkFUJ9AH$YRz#oP^$=rk+oM?A#$nEX-&0#$j{rr8t3UiIGJ_@!PcfokteqY${ zrk$cLw?7mBiw&M!BQqAy2aSU7wn!wAkH}h_`R}ss_N^SuxUdv64n^U)`HZzL9Ha6$ z1FZ&QI^zv9+7>EZ?V8Wpv}k9{O$;XQ;u?4QPqOEPU@Uv7h#U*X-Q~DD#v;F3mJQ>W zBJaY{G{(u*nT*Fcz%IuV?&S7@u}@o&;#<#5?1|wa6VW$tw5pZxzZgqh&Aqc&qZoc8 zpZNnXJn8--Yw$+Ge7y&p4s(2Vvo2t#FIxcDg)YR>kwE)`ox}! z9IAg0!T2-!OOri~(c8E`uHXFZzRb$q{EPsqFcx{HPT=8dxx}M<^;hI%aj#b4@v)Dp z=XX3wT=$V*?IyN+WZmmbSncCl^HsU*Q5!Xvu4y3&qsA3?pPS>My z7JX)}hhFN8fP^{R8;t8Is->2%@jorcg0XIY598R%B$#m>wP5U4H3R;Q!I;k4jXq|B z@q%ez3}lVnsL(0&fy^{z?zp za4hZj%!B1FKm2jbA22b_61zIjOMpZ9KuXiz$M&yK-^ZMXFTVd0X8xAwWzvPQ+}b7Q z_wV5wHyHQ2#(8t*9{1b5`z^nQcA7Dg*Lh`1j6Hro;g8&dfVk}8-U8cZ!kvDBCv%}5 z$GI;6IkpqIwaB$Jkz*^)OWmxu`$KTH*(uoa^Ypjv_jB$1MlVcjbA>fI-1sIN^jkO# zPZQ5Mr(?NBHWhQ<%~I>(hb-VasYNDu(e5Smp412Sg?`Fk@u*?_Y7zM#_nh*M_h-#! zE@~QB`@{X9ls(?ON$rg!v95olt2MrIG{m^Ot`5l$gH?R+dmy*_SG`I!MGOsf_1Aa4fqkG8dQI)Ea;IJMfVP}> zQH1gN-5+q|$JbDMdkfbS?!)!Y?|9`0{s)A!w&B-`S=&3;e94tHP4fa;l^viwFGmKX~ElJ2jzZu04#U=V%jG9wkw(2Y++p*YfVf$ zSVz{*b*)j8@r>UfuIq|M%x6W4lMki-8yP(X{oIG)xzW#a?I!aZ?Tg^fxQb&T>%!w) z;Slb|y=1t8r?E>{Z(xp5?Ip60^VpOb&s)@GQgxnzO!gYO~b566ZDt zOj_=Yv0Se-jeU3C=FNFO7j7pR6TKXPe({s=r1|4$yu4BA-5(g6eDLpqXx=~J;k(Z7 z;kL*V&lvS!zMDQ5-xD1#^Wb~_|D8KGvF68P$o;w%+wPpemz{#{T~r=hr}V~vl<^3B zEgCNLpTwv4qzqeb_U3*f)8TR?5WZ(4;3Mrq1Y@j`@Oya){CV^}AI|qf=>u^bjt9f> z2xGjvxOdDt&STd4PFv3X2Uc+Z3f9(39Azr&$fhlGhEbv^`UZ`L>y8kWBR8UK42m18 za;DFYdJbmH1I%2>8nC(mI2Cdqn>crv&F3BnaiJ)yEo0qJ1NZ-3%^JR~*tc)r{h0Nc zzl*WP*HDfhhOvFP6FC>>RFRj$SnRQDnHQcN+XuZJ2H~Z}<1sXo>$>8}A6$lG0QXoi zp^lo^!n(Q^8`eSEVI2D{_?oS7Q~NPktfzk5L7s9V2>z#{;qz(~<}l7B`QBcp&!gkQ zZfaG*Q`%n-hI0G^<=iXWhq?I)Mx z>B&9t;_PAYc_j>ftbKPswHO}6OX^kpSl=(cui1L)tfS-|7nWf9#Rzy4SKS0-!8(AL z`|;fK0|ykwvS!qf zSO1jnBv^Nkfk^CA$GJS>d|*ra@0{-qhZ-LQEL*7J=+97&UvM7Cyxka#NitRI%6dhQ zU_C9@Hq=UelO3kA{&9S>EvB|}ts%$FZflo6B6(EDy^qLiLvOH$O~iPahY+PbAj+X849mcpj z5Cwl8MaHKeU!?AJ*fU4<#cAI>g|!X)D1DVa8@1Z2wOK}WwyYa=WPJc@ArcuUqaQIQ z)eOUy8sSC%m+->K7nN@I>j;8#BYpG|AGPO*d8jSIlb4{nzDlikTf25Gwvty%{oYxF zy+d^FNqDv74aIj7OhtZmosS{L-Q(3>34XAOc7jtL>uIWe;nxxjmqLH^7~31YxZYq$ z*m#Uen5JUwMy#coQf=F7`(zf@yiLn#t`b8nHQL^JwqK#j9mG9KHV_(Iu-)^ZRA$0zjE2jnzS=v z@I4o)^tRY!*CW9y_Tk9qwcpLXiioY?EdG%?9__c1U$5sLGL&bddalFbm`tsv zJ}b4u_*`q&GnwM0CF9V`XE1Z5FTyIp9lk3WSE=P*V${{LuZ$h*YhtqEQP)(f_HbLb zj_Z?mZdd#C3C0r3d{|xA-@{mPi#qQlH6W6cn4Ul`Lf^^ZKE}SyK`N&C?D$@I(Q!~0 z#&J_IM)E1FV;Nh*I@lU(Okv-wsrO_rH0Pbno3YIIO7f?-Z(+lQ zz3@z*jYmzN!ebt+{p4OuvtD70=^XXYDaM9R(59Y7y-YkY-QOTQlAylbwqM>1E8Dbo{cS#QWSwNh(3K973> zvaV44bJ>63`O&>$k?0DacE-=@W_H=*1Q&&Id~VVMjMuMcEy$i-YR?AQA4_r)-PguE zEbpYbm&mdq#*&ki+@f#N9GEj7As9PV`71egEMzx9c(|A7+>;^jJ+%<-r-}2qP;#aacu_V5TWKETf5N9cjx6AQZ9Ym4g-d%2#)rwh z=|2g^;!6v@qKCToNBY>+#GktFQ&FZZR(WA^odZS{(yp;)R4|shwSHbh@!Y7MFiUk& z7`xSRo)nV%#XG}3+y#mGDQIk}!>Ts!0kmO5m*2#it_x?l?>YaDoaBu}9u0Ggx^7SF zYD0`g#&sQt)D}oSV|H3_7sk0<^H4#IDaX#0e&{)+FZ!^a`lW@`)s$m-?lEPo)8yI+ z`_06Xu>tA79pn0fv7X~vSL@fJqeT{M#jX)&SBd}cW{mLQ99S?e?8^9rGsoAc*%1Sy zhogs2Pdw?=6VI}C4JXrrT{UEWTuOhJtN5(6rt#rji@>YwL9!jU0ZuNn~ zG1lyp2T$j|Y?A--IJy{4CxYqM22tnIA7B$KXPl%?=DBcbEx%rrZ)t+J%mvqdfyCGY z66^3iMSey*?Lb?ixuP5eW8EKpls?G0%xg8jMW<7jS*`QqevOR(a8FMo#sfwqOvaE< z)}C7T!;8$3I#+X_KCXjzV&2EOi0go29pN16uJ*x~z4R_eX@A%LPO|Py{*I_# zcdp}@KZUWDWszfzv98%ms7i)O826N8PQsb_W3T$T@ZuW7VeaGbtWhuYWj9LSlf-A?xZ8z7SbIfd*yK~w`olT&I+fNb0x>bS7h6ZIWW1`^KdZvq9-i3`YO40=j$#T{8yhq zV=R4<`P?<9#Wrc(#l8r~VC|yp?P#~2&(FA;d9$;s10KNogXhfpV4&qtcr?$0*K*GB za*k2KbeJ%g>lNjv)+e{oZ`!nW9rv`~q5ejoUc;zs_H;eh->ccv7>kT|$2hko4`v$U zVt=^T%!2P4?o;JE1y3>W)MplJg>#87Yd~a8k;t+1N7jEhQBMiRcC<^9cmJ!cGSJK;39gKw$=AI zbJ*0i-o#9FuN!4nIFsmKx$bs46pp9KkI9z>XNkc~r_UsQu99QgYBe7?hpaa;Zp=8l z;O%~pvCaEf>UnB-lyhl&xeLV&CO6vWJ8<_gs~6vFvb%Z9CWORk$!7I0nzK zPGX4dNK9YG^}EaXnG(j&GF?Na8`>$~p9&IQGG8U?F-iwWvrsBv-KZ*_PYF+yBujdk56uT=; z^s%aglEYT=Ei%lx;7#6T&-xTA`pOOm#6O~5;9eIF%sDvh zp^oC-Up9gt=b`Eg?YH17{nOa1IYHcQITp4XnbTn0UgFrY-rb_k6Jy9@o*Tou!Ml2-86m|E3&LHmj3Fw zE=Q4FEx(5E3$7YtIT~Us_;$zGk>f8us~h7|o|H-9Ozy;5n&2(C{Ztbf_Bk2GI3~F> zIk%F1+HaXFE{7Lj+D1Rv(8qPy9ia4v=npIAn8g=x*~xv8MbEGwg0b$ygSmRYzk<17 zEc0GCmt_an+A^Lk>oX=MS>X8zeKBQ;1p-!)Z`8BDg^Y30E}DnfAT%vf@Q7+Hs`ZL!E>cfR#gaxDInw#hojchFp2>%t1CHzb<7p%o6dRUWdUdOw1yeIu-=VM)V+>1DiT`*h6Jtx+Y5Aazf zzvMtWA^gFS`7%ebxqG}HV66M4kJ4AIvus$?Eg0LZ_JJwmoaU5cvvOCAiJFQ5)f1rPLiv$>@GX;>w+eMaW_h;y+fff&)Aq0$AJM^rp~hGAb9Y^>G1hTwnICVxdlg}M zk?QX@*s)GPp2MSMHs-MIdt!(=`uUE)lvMh}TqA7By_PJvM}zemaxcoV@JYc~WZ7_@ zD}RHspt-4Ft>r=CCfMC?-Q`x}tT7g!Rb*M$-)NZ@tOax7Wm>M~y!&gXQ{(`|+Lh~) zTn=~L??!$uKAgy~J>xjeYR*wV(|4EJ250hm+1JH+KXo%@S^6P;5`1+(HO3O(v)RN{%oQMPal_vGJGsZoD(MC)nU7sPPC zREalhJ#85K=#H`Atg)7B!neOX&MrY*2yoslb?DaWpL0f^Y1tYo=2{}#uj zIIb}yhmifI&55(ksxCi4V!npHleSfAJS4t*ziF)HXsDaz+z?~^TH`D8K>SbrzR0xL zXN|KQ#n%$Kepr)h4y?U&Kf?8gtWEJbM(%u&9GLaDc6=6#_2fVM0^rO%lmq>Bd-`Bs%oekggV55}^kB{6|Ccr9-7(g(toijvAAEpqN4LW)$QriETo+3JT=aF! z-b~f{@^7$=4VeOq67H))eQmbP3$`m5Q>R`MjJsl7f3;UK25LMMo`3a2y6~ke2zNGU z-7$WEC-IdWz19J?J4L2w%Nd81xP_K$IZ6{tS8EzQS=o>$jLgG26qr&fn6{{Qy(;PtRqAx5T*CaBut7 zw8z|ALDturR&sy)SPS&!-!YKd>daGRDyQenS}MCV?zO+b7D=UP>hH9*91F%G%Od+?$8UW25zf4F8t#$g3arnRn5G+R_hR>Dq5REOObfQf0H0x) zmPLKdwG!sbX`|YRG5LkWY7OIDdK}b|I!^03IsUbAJ{WK<9XHfiYy3rqB|h=D7U<_eJbkQ^4=wT(H_t8_j2zXV85!#8>&rT>mQjOj&o3OL3jFNsS|>7CGQ0 z@|e-S6Zp5JDv@`Nf488D_M4pAB+dag3!G3~Q-n1gQWLQG!JaRor}dsMhI(3buFgYf zJ*{=KKK>NO^4U*6`UG!&@CIUQ5-~O00uHSCaiyQUbXO)?K3$KcjmhZe@e;5}=eYJSG`<=G8S^fjyD-++id+g_8aH_@O8dY4!eD<^EnWV$y|rn+ix(8!c5ejMCPlyYTcin zJ^*f8LSV{%ja|x|AY+jBYnTH(xcC9ax_^STH0h_reQf`4d)FDIRdufKzx(&Db^qM5 zl68}t++1%=H1>uBa0)Q=Krptb2*#R-#Eu%p0%Ac#P++LTh?IeWp*q9NFffJbOz*vy zZ+gS$KF>b$!f`ITTwYe9S&nS?IcL5(-#Po)@4Mf=ci-V?Sp3c9$giXQgLM$JU(J25 zFJdjT-K;PAzKf#|dSfnbJO4G&oy`a1i*_w2n*1V$zO7NZ_3-sD zmtLc_(_|q(eL0zL6pN`RC_5xAa`9x!NuIJ}0TvW3B{r-vME&Nnhi||Sna@5wfi|b!na?)+|*o;l)Mx-zvN2}W!{r8UQ@XZ>D_r)y830ewkTix*YDGY%r$Hh zZC$Ps{p6Yc?xv=Bjol2j^&oFt@-FUTQ9o}x;PMg~w5wdPRu78X)H|6Ip?>3Be z990W*(x$s`?Nh-nmru6yxhI%!s&#`l+gV3wf2Chhe#v0^G~{oZ62W8EnVG~Ip5xw{ zhRg3^T<+5gklU4qkE>Ycix^L14A*Vs)1i;ecDAkPDCI;%!!K)@PCV8J;pfv|g|VK@M)5c@urf*J0wj^c#m$ z{%72lVywXSP;%PK3x|Z!*O~>+c>A8L~@4sCACw=b8idXP@!$+9A_fghzn}_QjnZO## zKVjWm@}qFp0%A?wo7d3i&%NNTUT_`j2i=Cb$7xHa{5LO_^-$?wa{PtyAliQ_Y^Umt z(eBN8Kau-WT_bdqY-a2W&g}Y1<_R|*!3Z7nZ@#+%|2FH#82>73ZBUPr zt}i`7Jlomg50JJvp0WoBXOD(G`=za6#*2-f{d$p(4PX7QNJIzlJOgqkFI=T0{&&fPgzSW)YWXf zVFlxNNQ<|SXI=f5$@uAmzrvjTTpwsV*P0}sTgYMR!+Z|WZ&)Pf1=r#r*5DntVmkig z-pd%Hbsze>2awp2hK)5l@ywx@aqIKUSA8TDudjX;(NUDO81JE2`HQW?eqXVlhE1;W zV`|6N+h;__CSSLAw9rq%T0f0V$S=#sl2y-e%?QFBYZqco;Wq4O+~;yd%gd^8&0XVM zO!@@Y<55jJS0|5q-c6<5Yx;iLdBv~U6w54{b~V}@J&)R|WkcZDtBDSUi^ZxNZ5zJo zMaSX+j&|9*SSr%9VJ+K(Xj^l@n^&GZWNWkL)|K?B{Nm9YX>(`n=*nQ$MrJ(Dhn%OI zr(^am)&OKZw;zZ6)Y+HCZ#56bzf0RL>x*4W+<*DN4U{#fx;dvgJmVna_YP5({&b$> z>yx+fZy29BVbvV`>d%w7_uFNNO+4xXm!g|uNhdq-F!vR?>G2T!=Bc}|C2|7}Q+%K|u532i` z6q=6Z+g9NRjN`lhIrqwJt`(!qAVW9jiBdt-nCao(;RX#oHgXw6X+?Ut8kV<>!yTfymZehtyL__&)h(qY&{=W03@4QmbmK`3k4-}F!T*E#=*|CxUcuD*w{#LO?gVF7i) zKTO0G^RH$s&cEZzdv3*z3&%5W_-b5pA9K%tb2)w(_TTu&N&oC>`prM_F!QBo*W)}^ zozN-V6H@Oj8}Ed7W-})0THMT7r8A}3j6GzIe0LQ-;XVZKrme-Ttb;Z8iQBO?Vgv0R zM<9HYl9*^$)#G$O?Sf3Gv zX^cr$yrTA|5yrPsj+X2#dxvW5Y9G+6pPk_HoHrcb?DD5o=ODc^50PzAcxwMkxc0$` zSi0&(#2z|;<42AmHeqznT<*&!--G2Pnt#c!FNxQF9gO|-{C{X#cCP^K*Oa~7y4=u; zGS*jo?DfT%x@0y!$ls3LZAVbnSFDIhm&X12!L_)IbtG?i;WoDiK+t;X%G@Jh3Ne<= zXLhvqER`RfG(Ae!qG?agru~WXk~PEVLhtEUCW9H)hONy9^`dj}dq2i@AMps`{j3+?MX>t*H&l7=I8 zN8q!=M`*K5aC6DkX3F*aho&njhsE#}pFU5AJ~}omjaCg$yKcSx-u1+|yNfx?-JX53 zy{QEa++QL#I{`rpr{d9wXRtfKxbC)O_s-%&O?~ZneD{mod+ipCdxiU^FeX`K2I9v*hFz;ib*;$D3-Fq5@< zZlkS3F{xUIU9IfbCc9X-nXJ7~+FHUta~YY)=+4EiKpd9Fyo?D8gIPcE4aBf^QeteJ ztD~2ZndahZRc}~vlk(&HY+^)@r=B zbrpWSI0Rb@cVX{f9BPJGvw;|EFw$%Dm{akXi!mL)jJ1X-gUOcd{EwvP;3&o$>?h8n zbbJA0j=$^~TrbTYCBALztFEcpHMjO^{biHAOFmv}VTZX6JGqTMVCEK^{$v=-u5v@f zG|XOhJ6gKDJoOPJ$LbA;qu%3mPAY!C{5EP4Ze#4A z_Sn{*Cbw>w!@V*lx)^|Y8y>)+%B1sirg^vvN4w$?QMcRC@FOohiakg6x_HZ!lSxj_ z(jL-^$Ezs5_&zYg*LbuaU(w_@!MMMx+uctX2T0H26cs!o09ql6l92+>ny^?n! znEAfiFXXeMv}MI7A}cN3+e@JEEbCzAJDaq8eu~F2d@p8~Hk|yu@n=8gWAXK$3tycJ z<4($6`aAcX&9sHLw4$z|5pQo@i924p8`15@@!4P^0t4Ng?-EQ{Vx_+yTeBnZmqOMs zI`|yqTe+EbhFh7FJY_rQJ#F=2)SYL@Rz$r+doYNmt@&kczirI$8r%EvH@(R|z7ZhbNzd^d#k}D8@tnUB8_5WjxxC@z=%HaPB3x;{Q7D@9lB+kgjgep54;a zM2s8I#AkVG^|N?k^DBrSVNKTI5|=xOVXn!=aw)q=Z zhG7z8cV0U7Hda;d#@p$e(a=&)$%K-(BmF_t3{)d-Bo!}lzaQ0rh~Bpk2}y}aPEJN9 zYhNmNNilfZU#Xt>ihkt_5ZE5nHSF;c4db z-|`;og|D0LY@VUA8E{RL{xO~V$jpqP4TCl#!}bFImP}^yx5t+aSEEhC`eJna1$m8g z;x{pjm8ZNWKgGNQi`*Vm6Oa5B*GJG+xt2ETwT#QzOg;Z2`V1l&n|OdZLCmw6MjoX7 zNPf=zp9i=889NH1@nO>*yh)ozMRTQBe}?! z%QIPAgY#HRjr>`9u=Z$as;zUm{<1syX&OE&TDFw*mEVlBI;axEk~DIRhb*IC8TYyEbz8s#<}JK2rBe0$2H zQNFYJCp0glbKCrwrN8IBY|U0)rOQi-VGQ3f#(T;Y&HIcsl6JQgwsZ|$Zv%yl@0gp((6 zHao@fXXTd)Uw^E$t-+=zT?}78MwjB)a2CdXoNcYpGc`8X;s9g69(iX8jyIe_=5Ri1 z)dt+Vy4U8L5BK*Ws^BxckiM1`Wm8em-h}0GA0mu0%PrJHCT*ddN?Ty)CyZBR43zwm z(`o0Q#{DT~99-mTcc@O|Zp9Nb$cD<=ne zXTAJk@o2+$tc>O7(PR1ZrNGsH55ri!ALo9acXe?8YuY-sZq$=+A4&WSPp*CrM>}bA zJy(i>!Ct2}_wnsrCA6V)NUh1ltC{a%OUFJG^w*-esS5AKZ@|om2XP~L;LV#@XM%M^ zWLHqFBjp*$?>?2dN&gi-s+B7qD{RHfl`A=mv66FQNQdOR)44Z^Vt{8K=KLUi%6~tD zZ8|@vIikr3#>G2Ziei$uPRu&M`NO}PwEK6g>!CdxXEJ`A{)&xvVA=7N$Z9A= z#ZWU2^q<6=xgX+KX*`DdDR}T_NJK1Ib8rx4s6t#{3ZCEcD&AYa%IyW7mUPP1)l$vc zq5`kRxF27Og%|y*iGD9e!-j_+qf2pY_x0o4*-o1p?RPv|4%;a1yCdcY<>$57acm@XA(wzvTD)6x zKElkb4qxdg4@n z0p6+Df>oItkRHf&n9B6y)p(PRG(hUD#o2QOShjOH-rl&9zJAu6K9hy?oNU@R&Y~ng z7xk4@=jCUkU*n5kMZbO=E(NY*@8Q3{=(($lah;rN0mgB5(09?=Mt?Kysx2*b*ni>x zR&0MAiGg%vj+B7Xo3~bxj}7rZmVluBcL1^FX?QjL1H4tW0U1Ljj?eW3x{*?zht+B8 zv2for+@oneuGv7Hi}fc$$TMBM@*c|Ji%9*^pzU$=3xlcj$D>0-Pd&sw}yr_n&WkMx65R*(6hJrc`u zR^wPfB3gR54oRmHW7f-%gjFlOkdjDZcP8H1w+?HS2Yj+@Th_Wd^p?X^_v@s=BrQ)L$){#HD z4D%U>6GU25-7oE@cvCp{-y`m-s}r<~HSd@sICVGIWBP8T=S(KwRoxxQ?AllN*VJd_ zx7YrSw`}I$F^*^Mt_ShNA@1Lt^f5jwpk21zlNSewVFkHRcy~0ODOiq8IgzMrsp3=d zCG^iQ=4*7b1{kGdB(|qx6>ENnM{Y-I3jKqbv`vzJ^NMKSC@Vy5RT*k)Dp1|z;cNU^ zYn|b1>!E+Fb!-^gbvwV*z1`n^CuL>nQ-Oe|Gk14Wm!qDf=M~0*hJNIhWaERKockq- zoa42qW5phCjEFMFiR{k5d!N8V z(a+)e1n!BJu>nU}Hzchp1C@aqPj2uYh8jTtsYB)Xxb+~GvF>7c_70TQmpa>sY6?lR za1X>I)e=+9URG>CVofUE*s=n9V)i0GITtxOIVhz6sEoDFD$0u;w)Kp2746n?ZTmX% z^B2aOb_(HX*Df`-{`=W?^mj3LriV82z8>^;bYh5lwB}+nb>}w5khIfx(aKn%ii!$E zA7NdZwByJds6{pR_UIAs7LOy)o=P|kI}q@~i$mwfImQruF;`&FQczf(Q)f&Ol9VmUm8m8vX$ zjs`wY@^B?~P|sOi&3*auxw~db6iWHG{8HCG|J?gN)o#_~6uzS0%HakaJbMHmN3KOu zLaeJTom$9x4#n9hE7cx7+|#g%dvwq*+t}LRFb*_(drbRn9Dey~tQ_rV>aU2g;cZx} zH~wO>pvetxu2Q#>|MPTuGWNyCAf<+OchYAs|LbG(=tAShHu@t7+Irg^pAOIC9xVmj zTc;u%>l^puKvybK21`*r!uiD6;`tHy2cvW-+?@S|mxP}#s|iuMFqntjqA%VF4##ns07Z{2?t&WiaHT?=m)*H61xNlhtY zP9Dawj5w6^)e~v*9-`#!12H3~|V~Flb#)-ac^7yli3(m#qzC0xL=ix+u7GkBH?uBvc+ zShfjk8G9H}ydQ~m>8K#BcMkT^Pvos54qrZsdk*)%5%;XB-B&i$g1DS`Y&{TxW2cTI z<1BRu*4k0-x9l3SIZH1xd^N`nU!z^42cr-FSnBw1jjjLt{m*94t6shg;VW7e*3u1H zX`^eR+?|`BPMgVLoGH&n^&o3!bM!ihwYQ58$CWs%E~3ddBprvlbdjvqatXwY*h$yZ9q~Sh^J-6-QuG!A^emAdc3?BdIwR zWnGj5huiqA173YM5jwwDQ_Sf?Iv^b@=A)0#()M{bY6nQW4Mq6m#D2sa+mEcX+}oW# zK`$q`oOb6@=9YN-k!oI#rCr0jzPP3jjjoFw z=ep23)Pd$+&Y2#r57gb;sN;0@^`dK_A3cM#QfNKUebwB&8NClX_oG^V;vZUrc_6Ob z&N)!~c_%U&i*YFBxQn07%SlHObzQ|xR>>Aw&Na6}e7Od7^|h#{OeMNCxyrr!C{OeA zW{s17>})*0&AtD52Pk)oetRjCDfX|UgZ>lh)S~Au;w^csxrKWzH&&ytBnQb^w2f8f zkycvKNL&8Uh#P1PHZkGAYwX?sbigK@^bvQR9cj)Qub%(WHGTB_&**(LOn}clWY1(w^e6xB#AMTjE&CBPD8Q$_~OaM#i*!|FR+??xr%Ep*PdqO4>h{?(tB#% zHQF`aY#95;O2^-3T>a1Hf9@XAuY8hvC+W`t>RGL{jkOVL;oZWR65;IDDe~}U+PurE zi;$jw1_{JFqbUzH!%a@AQWVDE2&sy=8;z9Ie+C z$;grm0<_H3QI9b(Hw&YZbO? zdLP5qlxBv91#7 zg;_|*JdLEhROHpux7ttM%QaCoZF|Vmh50b)&HebXJ%2$|s^7C$u#KAlI#=A~AQ6@B zL%;avU1;DstNN$|%>e047WMIW(NGt6Z(>1CW)x7I1rbfBI5obhqZ zB2oY?3eJOIH)VYKE(yZoezE`%UMX;qLD>4*q8I-_bVL zG07|9d(u19B%_LUl!Gg}Dl9EP24$awWX41lWFei*t}snuRmPv=tYg zLCV=woXSjsY89PIr~fBE%jFVDW>Soee7K5r)xD+DO81f8qx=Nvwvv%e|Iu^#*IJ`l z!`9x(|E_lYO~>!M@OSo({(kHn*Vq^xXx!8cZ;h#8F03`?iVv--E_ZPh<<(^zpEDoS%tIVb5b-m(BQWA#D`Jv@KSaJ3LK?6_(ZvQ`3D6TR*OPF2mL^9s551 zceUg10#^T@XSDbHs@}#)<7POI#ad%M7W1}N(mL1j<|fh{d8wM#$%e*y*9$kvy$zI) z)O74!^Jr9f8m6Z6d>wkV=l!a8vfurG#_qfNxAyL1dmA_7eL6Q9H@rnhM&puUJIFuP zI)%UVQu227iW63DZF8geJ>?><_126&FNUdKF8(I;s(1RX;&LgUdn~s8bKz>|hPm~| z8=cNg--mK&{g~)jwicszHwQEi*d+T}v+Fir{Cq>l_C40y_ginz_htR19IL;ld-=yp z@1^sxW2$pU*V4IZTXDJ=V?}kWm{Fs%aAer+WKd_5SC& z*zw;J2H%EvG2H!Q?eOTOZ*vrL;qL4%JU>4th_!O`dYGf<8nN@^=*QCLm;XEb@2>0q z^Y4$p=-c*>+t}kT8>@?bPCEC1&&Hy^6;8^-^JA#LH7xCKWPh=1cJHz0cHMgav+0_h nkNv%!kL~UAf6e|MzW@1t1il}E??>SK5%_)tz8`_V`Uw0l6VE3x diff --git a/2023/icons/ngSkinTools2ShelfIcon.png b/2023/icons/ngSkinTools2ShelfIcon.png deleted file mode 100644 index 08b27e1f48e6f85b6907dc62e5ea05892d974a88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2384 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 literal 0 HcmV?d00001 diff --git a/2023/scripts/animation_tools/offsetkeys.py b/2023/scripts/animation_tools/offsetkeys.py new file mode 100644 index 0000000..4b64f97 --- /dev/null +++ b/2023/scripts/animation_tools/offsetkeys.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Key Offset Tool +Made by Martin Chang, 2021 +Modified for multi-version Maya compatibility, 2025 +""" + +import maya.cmds as cmds + +# Global variables +bakeLayer = True +keyOffsetField = None +startOffsetField = None +endOffsetField = None + +def offsetKeys(forward, *args): + """Offset keys for selected objects""" + global keyOffsetField + + objects = cmds.ls(orderedSelection=True, long=False) + + if not keyOffsetField or not cmds.floatField(keyOffsetField, exists=True): + cmds.warning("Key Offset Tool window not found. Please open the tool first.") + return + + try: + keyOffset = cmds.floatField(keyOffsetField, query=True, value=True) + except RuntimeError: + cmds.warning("Failed to get keyframe offset value.") + return + + if not objects: + cmds.confirmDialog(title='Error', message='Select one or more objects to convert to offset keys') + return + + if forward: + for i in range(len(objects)): + try: + cmds.keyframe(objects[i], edit=True, relative=True, timeChange=keyOffset*(i+1)) + except RuntimeError as e: + cmds.warning("Failed to offset keys for {}: {}".format(objects[i], str(e))) + else: + for i in range(len(objects)): + try: + startTime = cmds.playbackOptions(q=True, minTime=True) + firstKey = cmds.findKeyframe(objects[i], which='first') + cmds.keyframe(objects[i], edit=True, relative=True, timeChange=-(firstKey-startTime)) + except RuntimeError as e: + cmds.warning("Failed to revert offset for {}: {}".format(objects[i], str(e))) + +def scaleToStart(*args): + """Scale keys to start of time range""" + global startOffsetField + + objects = cmds.ls(orderedSelection=True, long=False) + + if not startOffsetField or not cmds.floatField(startOffsetField, exists=True): + cmds.warning("Key Offset Tool window not found. Please open the tool first.") + return + + try: + startOffset = cmds.floatField(startOffsetField, query=True, value=True) + startTime = cmds.playbackOptions(q=True, minTime=True) + except RuntimeError: + cmds.warning("Failed to get offset or time range values.") + return + + if not objects: + cmds.confirmDialog(title='Error', message='Select one or more objects to scale keys to start') + return + + for i in range(len(objects)): + try: + firstKey = cmds.findKeyframe(objects[i], which='first') + if startOffset == 0: + cmds.warning("Offset from Start cannot be zero for {}".format(objects[i])) + continue + cmds.selectKey(objects[i], time=(firstKey, firstKey+startOffset)) + cmds.scaleKey(timePivot=firstKey+startOffset, timeScale=(firstKey-startTime)/startOffset + 1) + if firstKey+startOffset <= startTime: + cmds.warning('The desired keyframe to scale from is in front of the beginning of the time range, which will cause scaling issues') + except (RuntimeError, ZeroDivisionError) as e: + cmds.warning("Failed to scale keys for {}: {}".format(objects[i], str(e))) + +def scaleToEnd(*args): + """Scale keys to end of time range""" + global endOffsetField + + objects = cmds.ls(orderedSelection=True, long=False) + + if not endOffsetField or not cmds.floatField(endOffsetField, exists=True): + cmds.warning("Key Offset Tool window not found. Please open the tool first.") + return + + try: + endOffset = cmds.floatField(endOffsetField, query=True, value=True) + endTime = cmds.playbackOptions(q=True, maxTime=True) + except RuntimeError: + cmds.warning("Failed to get offset or time range values.") + return + + if not objects: + cmds.confirmDialog(title='Error', message='Select one or more objects to scale keys to end') + return + + for i in range(len(objects)): + try: + lastKey = cmds.findKeyframe(objects[i], which='last') + if endOffset == 0: + cmds.warning("Offset from End cannot be zero for {}".format(objects[i])) + continue + cmds.selectKey(objects[i], time=(lastKey, lastKey-endOffset)) + cmds.scaleKey(timePivot=lastKey-endOffset, timeScale=1-((lastKey-endTime)/endOffset)) + if lastKey-endOffset >= endTime: + cmds.warning('The desired keyframe to scale from is behind the end of the time range, which will cause scaling issues') + except (RuntimeError, ZeroDivisionError) as e: + cmds.warning("Failed to scale keys for {}: {}".format(objects[i], str(e))) + + +def show(): + """Show the Key Offset Tool window""" + global keyOffsetField, startOffsetField, endOffsetField + + # Delete existing window if it exists + if cmds.window("keyWin", exists=True): + cmds.deleteUI("keyWin") + + # Create window + physWindow = cmds.window( + "keyWin", + title="Key Offset Tool", + resizeToFitChildren=True, + sizeable=False, + minimizeButton=False, + maximizeButton=False, + menuBar=False + ) + cmds.window(physWindow, edit=True, h=100, w=100) + + cmds.columnLayout(columnAttach=('both', 0), columnWidth=190) + + cmds.text(label='Offset Keys:', height=30) + + cmds.setParent('..') + cmds.rowLayout(numberOfColumns=2) + cmds.text(label='Keyframe Offset:', width=120) + keyOffsetField = cmds.floatField(value=0.5, precision=2) + + cmds.setParent('..') + cmds.rowLayout(numberOfColumns=2, height=30) + cmds.button(label='Offset', width=75, command=lambda *args: offsetKeys(1)) + cmds.button(label='RevertOffset', width=75, command=lambda *args: offsetKeys(0)) + + cmds.setParent('..') + cmds.text(label='Scale Keys to Time Range:', height=30) + + cmds.setParent('..') + cmds.rowLayout(numberOfColumns=2) + cmds.text(label='Offset from Start:', width=120) + startOffsetField = cmds.floatField(value=10, precision=1) + + cmds.setParent('..') + cmds.button(label='Scale To Start', width=75, command=scaleToStart) + + cmds.setParent('..') + cmds.rowLayout(numberOfColumns=2) + cmds.text(label='Offset from End:', width=120) + endOffsetField = cmds.floatField(value=10, precision=1) + + cmds.setParent('..') + cmds.button(label='Scale To End', width=75, command=scaleToEnd) + + cmds.showWindow(physWindow) + + +if __name__ == '__main__': + show() \ No newline at end of file diff --git a/2023/shelves/shelf_Nexus_Animation.mel b/2023/shelves/shelf_Nexus_Animation.mel index 48c2859..981e21f 100644 --- a/2023/shelves/shelf_Nexus_Animation.mel +++ b/2023/shelves/shelf_Nexus_Animation.mel @@ -214,5 +214,39 @@ global proc shelf_Nexus_Animation () { -commandRepeatable 1 -flat 1 ; + shelfButton + -enableCommandRepeat 1 + -flexibleWidthType 3 + -flexibleWidthValue 32 + -enable 1 + -width 35 + -height 34 + -manage 1 + -visible 1 + -preventOverride 0 + -annotation "Key Offset Tool - Offset and scale keyframes for multiple objects" + -enableBackground 0 + -backgroundColor 0 0 0 + -highlightColor 0.321569 0.521569 0.65098 + -align "center" + -label "Offset Keys" + -labelOffset 0 + -rotation 0 + -flipX 0 + -flipY 0 + -useAlpha 1 + -font "plainLabelFont" + -overlayLabelColor 0.8 0.8 0.8 + -overlayLabelBackColor 0 0 0 0.5 + -image "offsetkeys.png" + -image1 "offsetkeys.png" + -style "iconOnly" + -marginWidth 0 + -marginHeight 1 + -command "import animation_tools.offsetkeys\nanimation_tools.offsetkeys.show()" + -sourceType "python" + -commandRepeatable 1 + -flat 1 + ; }