From 74cc7ff9e5ebb5c8d650b189bc6dea8bd15b7063 Mon Sep 17 00:00:00 2001 From: h3xduck Date: Wed, 24 Nov 2021 12:17:31 -0500 Subject: [PATCH] Further refactored code and dealt with the verifier issues with string comparisons --- src/.output/xdp_filter.bpf.o | Bin 6840 -> 7128 bytes src/.output/xdp_filter.o | Bin 27488 -> 27792 bytes src/.output/xdp_filter.skel.h | 448 ++++++++++++----------- src/bin/xdp_filter | Bin 1573152 -> 1573168 bytes src/constants/constants.h | 1 + src/ebpf/xdp_filter.bpf.c | 31 +- src/include/common/common_utils.h | 35 ++ src/include/packet/packet_manager.h | 11 + src/include/packet/protocol/tcp_helper.h | 16 + src/include/packet/tcp_helper.h | 0 10 files changed, 311 insertions(+), 231 deletions(-) create mode 100644 src/include/common/common_utils.h create mode 100644 src/include/packet/protocol/tcp_helper.h delete mode 100644 src/include/packet/tcp_helper.h diff --git a/src/.output/xdp_filter.bpf.o b/src/.output/xdp_filter.bpf.o index 53ab89dfe537da65eafc58ce3c9674d26afd5bd5..8a789c79ac59762692c2be873e10810b7d167df2 100644 GIT binary patch delta 2193 zcmaKtUu=_A6u{5@`fn|;wcWb5Bf+n9e>xdgp2W)OAiF1r(bCRyK-)N<4yS7WF z+31K8eUt6JfKS7KF+q(^JgFZ0h10fiR&McZ}CNTyKQH&4uoZDMcYT`-Hckl0< zbI-l^eD}Lu>$=r_-ltq}Ek8QWY|F3snPoZG7Z!)k2woq+21Z)ZLJ@A^DLg(_0BGzvRB8?IXP$SmDeEHzzjzwpmps4Bd~VM} z#?3q-W%Tl&S;uh)(?LdBCLW5sDI#Zs7>aV7{gc+(G|CKN1ndIk` zy=#c%x>DbT>P4mG6iZbk`%ctJR9gHlQ*PbR&T=|ag_2zaeOd^zs`7@zpAfm;RTI#U~s3<8d zGnb01@k}C;_MvxgUsy|Ln)eH5bXxVD(lP-WMdm;|=%m-Rw?cgue=^8xdXUP??!lfjo_iC{QzGBFnq2SO1oblN9v zEo#x3j=rq5sNrBH7|`P3W?p4k9Q*%WhY~Y0iMYSe1m-f)SXyqEwoH?!GpV-8X!Hc_ z1N-gNr*-RxcQ^0PeQQ}^*?RyLSne~Z8>kKU3m=dX&u}lQ13xNN`sa`<>KUL(#9u`= z`xp!(Q~WomH3IJ4V zEM*G&Z=>#r;d?G)D>7AN9sTAFtVo%^wTvGxslZI!~qYg#d*QS#51s z3Von6Rw_#ZaBXEd1N_G-C#&Z+Yd72CN32ckRX%HVy5qP826}O4($M0tBm9!p+0!At zbX$@XZe)N;X{TG3q&SKWG-dPfyO`T6e1-d#y6;Kv1ozmSY?AlbPOw5jK9qNYTr~8kDB|+VP&SHhYqy{ z+Pe7cHV6N`c9Ex@S8$nbS2w%PpL0EF{y`3ZkzaImTZZu4Bl*M3zjN(VdUkNTyHDx2 p@=6vxlp-Mess!hW)Q3&@sQ*vi+k{n(;{G@+5GiH&vx*3`0=&sgaK8v|Ng zj4wQB((U-v)TA0s+SD3#U+}3RYSP3PV`@SSMiPw@eW@Q&tZDFn?#{)_{=?as-#KUI z&YXK^SWPY;x)9Um!ubb=#F6~#ouVsWXgS$NteXL=p)wcIVRU;E=s*!c6t;TBADx=5 z&Sc&aB0g|^x%xu`-cJdhIy<=a}j_(OiFwaI_Ap^D2G!q(%F zr(7Ru30>}TH~W*iHIZ(C?&hb)i_z*DD~V{Kgk=d|E8&|Z{EaSG z+)W{_@2@IUtELvRPjB&uJr-8mm2CIOdHuo1_}#FJcO8UrO}QU}aVfdaFR2m6lSg1F z82fj_24TF1L!QDtJt4|QpU;eSc61av$_%YL3QdkhW7#vA_TG`v*=%%APjo7KZeljp z9goNN?|+3jg@s|KGc%J@*%x9>$C~6_<7-({`BGOgSezx3o?f`SIXoc|px*iSU1;+5FH5fe15_#x&tL31kq1UTn?i)c|LOmV`)f|e9tV(t@k z1Ip%s4mQB+il1~*j*PQ{HkD%n13J&+ zN%-R(Gam$F)7u;bM;+V(#wNGpec-r*`@z`5cDx%rp!j1~4l8~`&~fGXiFa^85Ef|- zz#1%N6mKDJz9(qW!3KCq@c|qp<0>kq_zAGSjEX3}0p9gFDq?d^Io555;*Ao%qxf5n z-vXfYTp?Rt#eX9%08z#E17jr|SDdsHj+7+yDgFl&>T9To;(8oh@4ArhL>h9Junt}c zzdom)Q~n97{Xeo-`MEkyZCIcYZ_=sHl%F^2)cZyMNh&W1EEWUA)o^N1J(y35Qx}z= ztL0R^?D8e$s@E&$d=YV8=6zvv47q~b)}_O__K>4;#TV{wRZ;uqvZH)#c$EEb!1mw4 z4D4@^K7ZKci;KmV7wZO$qbYgR9~Oi18UMJLlPms5bL$+2c;OM)aqd7iFO~3>61Gch z=l7`v+05Sws{+RJAKb}uJn)+MpkM^Q*R*J3;g?#kkUv)iWo=|ZOT^`yk?UAzx0w{n za@u^v_(F{ylb@Q&idGyR)^FwVu6bCiuab$~y;`(J&Y-#Klb@g&@XO!PZ2D!Qu2;Ji Uk~4L^6}S1Khu#(PW%IuO0J)$2Q~&?~ diff --git a/src/.output/xdp_filter.o b/src/.output/xdp_filter.o index e5c396082e45b80a4700e73647934a1fb81885f4..4f368d8bfeb909dea29587bced12470dc0cd0512 100644 GIT binary patch delta 3688 zcmZWrdu)@}6~Fg7PV79Lr){uf=Rt7VB+ion1t%sv5=bGurqHxFiE(15Zk&h1T1pe> zHpZrv5zZf@RVIPP5TjeQ$YbrYsTE=x?bd0bW2_rQr5i0MswUXFj%JgxbH497bH5$s ze&_yvzjI&bKAhV(_{l%xU5BAAU{|nNIjOodSl(*e6C|r$?W?=j5lV%|)XvnOU^^;hDe!XY zYhrmaw565hIMp2RB<#Y8r9K&srqzmd$#5yHthhr}GqX@3>(k)F$xxYITt@6EDaj1A)T|mK15qEfBHA|; z8HrLn;f#x;p+f;!XDWvA>^=~l{HCR~`6JIf6B%@? z&Nmhfg-7M0Xkj$>(dbA`S19xp%@*smREJ2GIjOa{{IQrj=M*uj#gmIrW*o2re@($|8 zTbL1zUai5aHMm)WTP1Fc57?mz=tN8d{)Hy^31&cIJ-!yE`y8$nI^kr2VS=_M(fSlD zlnf>Ek4m0ao@jKgX!W$fM58l8Je{RPyP^QWW>s?6lJg!7T4pckK=gC zUk#)|DGp3=TyL$$A_0cr|QiJEFW3{7ym zFbPbKZk*e&qmj?T4;)R#Ioaa?Ja9A`x8Ut0`#X3;X0SO8(BZU*H5oAA^oV8?TtxSF z4$Pwq=E5UI9%0FY0d)5Y;3B$D3u5y{zvn`i5qqm-+Q0{3xT0nAej{GFH0qbz4BHVn zRA5&?kqQb8gQ%3Kz@aGnRNyp>qtXQn6>f{3W&RoaAtGxHRvJ`%0%|IAGv<+1o1_)a z!_LZP+kIqQ%wV{HKd%PEYX-*bfx&}}i>$0{_)(>me+E}8z5Fg1tIF|PSLNp?;5$`z zz8o%9Rq{6YYgG+@8S>rR_(#y=-m$VF9gkn6cYyKm>bsbEG1*x-%J^U*jV&gFuE59$ zEv+UY`5g+HGIDf7O>etDJRR*5pVXKNNPfG9 z$7VBI&xOXDFK?F=Xa=8n3cAKpYGLCL7t&u#L2aclJmY`B5Tkr>mtQ)3LjYyRo&HHzF zX356kLsX|U>X&5O8OZK2TQ6&Rz9OHsUxOFbziHae%bx!U!>HPni}SyHHOsY?z*$t+ zYSfox&s*Uds(YnM>!cO=`9_nNKGYubJ!+kO*jP<=(C=1BD{^q_iGqaK&Dx&f1@ zeymadL5V_p0GCm%z^g+RpVfps+^gULs$PwHRSjlADDs=FqZ;*fsUCx!s7`9s7O7r< zqp1E?qn?xM98CMo`a7h;HAimjw*Ryc9c^%^?^oiI9X9l@%AYG$V^cC@8*-5C%!M=k z7BSlaGyNWMrv?_#eWf1O20g+QfJ5kF^)Q33IRFdjHm`=YA&+>{3y09X=*8E+0A@oj naoh_F$XxKk+5wN~#J1>I3(TPF*a8a!9%E~tI`$Qqb~yeEVl_zW delta 3512 zcmZ9Oe^67|702(rA&?M$1Og@@33-5GKnO|D1$4#WPexQ&R~EMI3K4<|uwiP4W z>5j|T9pSW{ogF)4r(4G|?anf3XPvfN>)5(mJ3H0ZT`koXr|XWT{iBR+wf)DQ^Ku^> z-x+Ss{haT)zu$elGk@d@pYSt2u@IfBenp6jCCTrJyBXq`9bV1q=8f>DtU4Y9i)r;2 zY8crio9bAWfw5<>x-o3jpVRYHFh?aC$qO%=>ph)ZusFuXA{as|=9w&to-#V2)3j#QSVX8wCx86p2-e0T zso8e&|2(0Vl-ULUHrMipP?23@WZT&e2B!p_E~I9Wn(7%B>No^GD6f+S=eAy zyW|<@6fA8<_>Ltco;Sh`OXc2!DK#%&O=4_9$DrdM==hS3KQ=-nr?TMhGQ2`|%b_=? zVg(Ii&s0Ns+NRcK!i}8uJL#AxMC&iYLfcFAVl1?)RHyUuVxe<%VClp{@e(XuSg8AT znaR%F5QitZM&b7-U&}KKg=}y@@x}W_Yn%I{N8(D^Mr9;^ICjL>6bJ;WAZW9TZRN1H z;P=pIv%)Kd18r&}*={uQ<>AAT{x1%`L=9h##QS1Bqmg(#IzEE2s;@FFnf!s#fu7Ov z!IAhOUwLbJ)dn_^++~~LiBB0b;rvcuxr1fZ1IDcAGx0>XVkyRFO+hAo0@-Bc3_~g> zk-Ie$O-E=89ONxMkwJ~&Q3{wi#W{L zIb<3jiCo;v*t=5yE9v_`k-A-dO@`B`c14}UTFlUctAchU< zj^jx9M=K^?i;Rn2<|1SzjaMV%BA4|rav+VjBI6pC^(N$2$#aGT&iFKE9WwA4t>6r2 zI7zhu&OxyfeM1r0@Lk^jMGBX?fWurO2x~UwUbhyok+JX z7<1U2Gje#^mvnQ(>y8F~9WFaoJMqC_oMkZiuVH!Q0pL!1Q;Sr!{|;J5Yh+w|acOb7 zFw~n1o^#rl{{v|1Z*dZ&dSMb(dSj7kDqTQQyI{_FkRJnQ$&SPVC7@xq>RYaZDrg#? z((ySRYa6WPhvi@z(-T6Ljm3dw?b8gGN+zMhWlF|ew}nu=$<3u!4x5UKV8lC-9SX2r zn>Pn~f&p0aZh~|63B1VsF{+<6SA zQY@wOFzFAw7ck;uCewv1d^elk!PR)8BS#q*`S~2~`knkUc;s*4x1g!63V-|R`uGX> zpw7cBaKEmWH-Rk>^|^ZL3Y?##oiQ>TNjI?w}_`QO)Q>fsCKMitWnOYN(m&G=@6lTIVe| z8{EWiCGP}VjHO=}pBfE@zfHsqmS>H^@P<%~=ARk)iy6Y`GyE^Pq2VQ)_(uu6wbL(h zU2tuuKje|0KR4xJlf!wldKq8T#do-%y3HSYLCTr(snD9eDC2Hj9GgvHvjHhL>f}Kg z-=m9Tv&FXa;_nF-~g^lr@kQD&O!^SbGn|dq(0i%PhkwzKkM2q%AW7TcTvqzFV5%t6_#tW!3|Wa zb?P@{&+CEr*`3>@O6#N*^~i($5(H5_q-%R$w*3l3P@U4Lg;Je{X;k0Ssi)+uuEJ$h zKhdcVacr`Cu!O1`uMU|utAu>GE1|64?hNYG4^qjj8=gb8Pp7^o)uS+p>ZDHHBGorx z4%PQ{>f2KN2=4XUjWGsM&HCYbt}vsyehushVj@l#qU?7av#YqR8n8N*JBQG zt{oO*&Em%as2*$<&)35cx`jTNMfbIOSVU*-hw7nbv7!Nn(A9)t7Tw-3eh#ddIph=F mVW>XTERKa?2%WDVX3<@5fkkx6cBme1HanuJDO`aYiueCbHTre{ diff --git a/src/.output/xdp_filter.skel.h b/src/.output/xdp_filter.skel.h index 3bd5956..e4e74f0 100644 --- a/src/.output/xdp_filter.skel.h +++ b/src/.output/xdp_filter.skel.h @@ -24,7 +24,7 @@ struct xdp_filter_bpf { char xdp_receive_____fmt_1[2]; char xdp_receive_____fmt_2[2]; char xdp_receive_____fmt_3[2]; - char xdp_receive_____fmt_4[2]; + char xdp_receive_____fmt_4[6]; char xdp_receive_____fmt_5[2]; char xdp_receive_____fmt_6[2]; char xdp_receive_____fmt_7[54]; @@ -140,200 +140,214 @@ xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) s->progs[0].prog = &obj->progs.xdp_receive; s->progs[0].link = &obj->links.xdp_receive; - s->data_sz = 6840; + s->data_sz = 7128; s->data = (void *)"\ \x7f\x45\x4c\x46\x02\x01\x01\0\0\0\0\0\0\0\0\0\x01\0\xf7\0\x01\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\x78\x17\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x0d\0\ +\0\0\0\0\0\0\0\0\0\0\0\x98\x18\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x0d\0\ \x0c\0\x61\x12\x04\0\0\0\0\0\x61\x11\0\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\ \0\x0e\0\0\0\x3d\x32\x04\0\0\0\0\0\x18\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\ -\0\0\x13\0\0\0\x05\0\x38\0\0\0\0\0\xbf\x16\0\0\0\0\0\0\x07\x06\0\0\x22\0\0\0\ -\x3d\x62\x03\0\0\0\0\0\x18\x01\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\x05\0\x31\0\0\0\0\ +\0\0\x13\0\0\0\x05\0\x11\0\0\0\0\0\xbf\x16\0\0\0\0\0\0\x07\x06\0\0\x22\0\0\0\ +\x3d\x62\x03\0\0\0\0\0\x18\x01\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\x05\0\x0a\0\0\0\0\ \0\x71\x13\x17\0\0\0\0\0\x15\x03\x03\0\x06\0\0\0\x18\x01\0\0\x15\0\0\0\0\0\0\0\ -\0\0\0\0\x05\0\x2c\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\0\x36\0\0\0\x3d\x32\ -\x03\0\0\0\0\0\x18\x01\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\x05\0\x26\0\0\0\0\0\x69\ -\x13\x24\0\0\0\0\0\x15\x03\x03\0\x23\x28\0\0\x18\x01\0\0\x19\0\0\0\0\0\0\0\0\0\ -\0\0\x05\0\x21\0\0\0\0\0\x69\x13\x2e\0\0\0\0\0\x77\x03\0\0\x02\0\0\0\x57\x03\0\ -\0\x3c\0\0\0\x69\x14\x10\0\0\0\0\0\xdc\x04\0\0\x10\0\0\0\x1f\x34\0\0\0\0\0\0\ -\x71\x11\x0e\0\0\0\0\0\x67\x01\0\0\x02\0\0\0\x57\x01\0\0\x3c\0\0\0\x1f\x14\0\0\ -\0\0\0\0\x15\x04\x03\0\x04\0\0\0\x18\x01\0\0\x1b\0\0\0\0\0\0\0\0\0\0\0\x05\0\ -\x13\0\0\0\0\0\x0f\x36\0\0\0\0\0\0\xbf\x61\0\0\0\0\0\0\x07\x01\0\0\x04\0\0\0\ -\x3d\x12\x03\0\0\0\0\0\x18\x01\0\0\x1d\0\0\0\0\0\0\0\0\0\0\0\x05\0\x0c\0\0\0\0\ -\0\x18\x01\0\0\x1f\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x36\0\0\0\xbf\x63\0\0\0\0\ -\0\0\xb7\x04\0\0\x04\0\0\0\x85\0\0\0\x06\0\0\0\x71\x61\0\0\0\0\0\0\x55\x01\x02\ -\0\x74\0\0\0\x71\x61\x01\0\0\0\0\0\x15\x01\x06\0\x65\0\0\0\x18\x01\0\0\x55\0\0\ -\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x02\0\0\0\x85\0\0\0\x06\0\0\0\xb7\0\0\0\x02\0\0\ -\0\x95\0\0\0\0\0\0\0\x71\x61\x02\0\0\0\0\0\x55\x01\xf8\xff\x73\0\0\0\x71\x61\ -\x03\0\0\0\0\0\x55\x01\xf6\xff\x74\0\0\0\x18\x01\0\0\x57\0\0\0\0\0\0\0\0\0\0\0\ -\xb7\x02\0\0\x0f\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\x62\0\0\0\x73\x16\x01\0\ -\0\0\0\0\x05\0\xf3\xff\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\x44\x2f\x47\x50\x4c\ -\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\0\ -\x42\0\x43\0\x44\0\x45\0\x46\0\x47\0\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\ -\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\ -\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\ -\x65\x20\x25\x69\x0a\0\x48\0\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\ -\x0a\x20\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\x9c\x02\0\0\x9c\x02\0\0\x3d\x06\0\0\ -\0\0\0\0\0\0\0\x02\x02\0\0\0\x01\0\0\0\x06\0\0\x04\x18\0\0\0\x08\0\0\0\x03\0\0\ -\0\0\0\0\0\x0d\0\0\0\x03\0\0\0\x20\0\0\0\x16\0\0\0\x03\0\0\0\x40\0\0\0\x20\0\0\ -\0\x03\0\0\0\x60\0\0\0\x30\0\0\0\x03\0\0\0\x80\0\0\0\x3f\0\0\0\x03\0\0\0\xa0\0\ -\0\0\x4e\0\0\0\0\0\0\x08\x04\0\0\0\x54\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\0\0\ -\0\0\x01\0\0\x0d\x06\0\0\0\x61\0\0\0\x01\0\0\0\x65\0\0\0\0\0\0\x01\x04\0\0\0\ -\x20\0\0\x01\x69\0\0\0\x01\0\0\x0c\x05\0\0\0\x32\x05\0\0\0\0\0\x01\x01\0\0\0\ -\x08\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x08\0\0\0\x0a\0\0\0\x0d\0\0\0\x37\x05\0\ -\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\x4b\x05\0\0\0\0\0\x0e\x09\0\0\0\x01\0\0\0\0\0\ -\0\0\0\0\0\x0a\x08\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x13\0\0\ -\0\x53\x05\0\0\0\0\0\x0e\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\ -\x0a\0\0\0\x02\0\0\0\x67\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x7d\x05\0\0\0\0\0\ -\x0e\x0f\0\0\0\0\0\0\0\x93\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xa9\x05\0\0\0\0\ -\0\x0e\x0f\0\0\0\0\0\0\0\xbf\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xd5\x05\0\0\0\ -\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x36\0\ -\0\0\xeb\x05\0\0\0\0\0\x0e\x16\0\0\0\0\0\0\0\x01\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x0f\0\0\0\x17\x06\0\0\0\0\ -\0\x0e\x19\0\0\0\0\0\0\0\x2d\x06\0\0\x0a\0\0\x0f\0\0\0\0\x0e\0\0\0\0\0\0\0\x13\ -\0\0\0\x10\0\0\0\x13\0\0\0\x02\0\0\0\x11\0\0\0\x15\0\0\0\x02\0\0\0\x12\0\0\0\ -\x17\0\0\0\x02\0\0\0\x13\0\0\0\x19\0\0\0\x02\0\0\0\x14\0\0\0\x1b\0\0\0\x02\0\0\ -\0\x15\0\0\0\x1d\0\0\0\x02\0\0\0\x17\0\0\0\x1f\0\0\0\x36\0\0\0\x18\0\0\0\x55\0\ -\0\0\x02\0\0\0\x1a\0\0\0\x57\0\0\0\x0f\0\0\0\x35\x06\0\0\x01\0\0\x0f\0\0\0\0\ -\x0b\0\0\0\0\0\0\0\x0d\0\0\0\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\x74\x61\0\x64\ -\x61\x74\x61\x5f\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\x61\0\x69\x6e\ -\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\x5f\x71\x75\x65\ -\x75\x65\x5f\x69\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\ -\x64\x65\x78\0\x5f\x5f\x75\x33\x32\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\ -\x6e\x74\0\x63\x74\x78\0\x69\x6e\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ -\x65\0\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ -\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x78\ -\x64\x70\x5f\x66\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\x20\x20\x20\x20\ -\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\ -\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\ -\x74\x61\x5f\x65\x6e\x64\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\x20\x2a\x64\x61\ -\x74\x61\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\ -\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ -\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x2e\ -\x2e\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\x6b\x65\x74\x2f\x70\x61\ -\x63\x6b\x65\x74\x5f\x6d\x61\x6e\x61\x67\x65\x72\x2e\x68\0\x20\x20\x20\x20\x69\ -\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x65\x74\x68\x20\x2b\x20\x73\x69\ -\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x65\x74\x68\x68\x64\x72\x29\ -\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\ -\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\ -\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x65\x74\x68\x2c\x20\x64\x61\x74\x61\ -\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\ -\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ -\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x69\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ -\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\ -\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\ -\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x69\x70\x2c\x20\x64\x61\x74\x61\ -\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\x29\x3b\0\x20\x20\x20\x20\x73\ -\x77\x69\x74\x63\x68\x28\x69\x70\x2d\x3e\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x29\ -\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\x5f\x70\x72\x6f\x74\x6f\x63\ -\x6f\x6c\x28\x64\x61\x74\x61\x29\x20\x21\x3d\x20\x49\x50\x50\x52\x4f\x54\x4f\ -\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x43\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\ -\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ -\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ -\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x68\x65\x61\x64\x65\x72\ -\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x74\x63\x70\x2c\x20\x64\ -\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ -\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\x22\x29\x3b\0\x20\x20\x20\x20\ -\x69\x66\x20\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x20\x21\x3d\x20\x6e\x74\ -\x6f\x68\x73\x28\x39\x30\x30\x30\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\ -\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x22\x29\x3b\0\x20\x20\x20\ -\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3d\x20\x6e\x74\x6f\ -\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\x28\ -\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\x69\ -\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\x34\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ -\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\ -\x7a\x65\x6f\x66\x28\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x29\ -\x20\x2d\x20\x31\x29\x20\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\ -\x70\x72\x69\x6e\x74\x6b\x28\x22\x46\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ -\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\ -\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\ -\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ +\0\0\0\0\x05\0\x05\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\0\x36\0\0\0\x3d\x32\ +\x06\0\0\0\0\0\x18\x01\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x02\0\0\0\x85\ +\0\0\0\x06\0\0\0\xb7\0\0\0\x02\0\0\0\x95\0\0\0\0\0\0\0\x69\x13\x24\0\0\0\0\0\ +\x15\x03\x06\0\x23\x28\0\0\xdc\x03\0\0\x10\0\0\0\x18\x01\0\0\x19\0\0\0\0\0\0\0\ +\0\0\0\0\xb7\x02\0\0\x06\0\0\0\x85\0\0\0\x06\0\0\0\x05\0\xf6\xff\0\0\0\0\x69\ +\x13\x2e\0\0\0\0\0\x77\x03\0\0\x02\0\0\0\x57\x03\0\0\x3c\0\0\0\x69\x14\x10\0\0\ +\0\0\0\xdc\x04\0\0\x10\0\0\0\x1f\x34\0\0\0\0\0\0\x71\x11\x0e\0\0\0\0\0\x67\x01\ +\0\0\x02\0\0\0\x57\x01\0\0\x3c\0\0\0\x1f\x14\0\0\0\0\0\0\x15\x04\x03\0\x04\0\0\ +\0\x18\x01\0\0\x1f\0\0\0\0\0\0\0\0\0\0\0\x05\0\xe6\xff\0\0\0\0\x0f\x36\0\0\0\0\ +\0\0\xbf\x61\0\0\0\0\0\0\x07\x01\0\0\x04\0\0\0\x3d\x12\x03\0\0\0\0\0\x18\x01\0\ +\0\x21\0\0\0\0\0\0\0\0\0\0\0\x05\0\xdf\xff\0\0\0\0\x18\x01\0\0\x23\0\0\0\0\0\0\ +\0\0\0\0\0\xb7\x02\0\0\x36\0\0\0\xbf\x63\0\0\0\0\0\0\xb7\x04\0\0\x04\0\0\0\x85\ +\0\0\0\x06\0\0\0\x71\x61\0\0\0\0\0\0\x15\x01\x03\0\x74\0\0\0\x18\x01\0\0\x59\0\ +\0\0\0\0\0\0\0\0\0\0\x05\0\xd4\xff\0\0\0\0\x71\x61\x01\0\0\0\0\0\x55\x01\xfb\ +\xff\x65\0\0\0\x71\x61\x02\0\0\0\0\0\x55\x01\xf9\xff\x73\0\0\0\x71\x61\x03\0\0\ +\0\0\0\x55\x01\xf7\xff\x74\0\0\0\x18\x01\0\0\x5b\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\ +\0\0\x0f\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\x62\0\0\0\x73\x16\x01\0\0\0\0\0\ +\x05\0\xc9\xff\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\x44\x2f\x47\x50\x4c\0\x42\ +\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\0\x42\0\ +\x43\0\x44\0\x45\x20\x25\x69\x0a\0\x46\0\x47\0\x52\x65\x63\x65\x69\x76\x65\x64\ +\x20\x76\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\ +\x69\x74\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\ +\x69\x7a\x65\x20\x25\x69\x0a\0\x48\0\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\ +\x65\x64\x0a\x20\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\xb4\x02\0\0\xb4\x02\0\0\x26\ +\x07\0\0\0\0\0\0\0\0\0\x02\x02\0\0\0\x01\0\0\0\x06\0\0\x04\x18\0\0\0\x08\0\0\0\ +\x03\0\0\0\0\0\0\0\x0d\0\0\0\x03\0\0\0\x20\0\0\0\x16\0\0\0\x03\0\0\0\x40\0\0\0\ +\x20\0\0\0\x03\0\0\0\x60\0\0\0\x30\0\0\0\x03\0\0\0\x80\0\0\0\x3f\0\0\0\x03\0\0\ +\0\xa0\0\0\0\x4e\0\0\0\0\0\0\x08\x04\0\0\0\x54\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\ +\0\0\0\0\0\0\x01\0\0\x0d\x06\0\0\0\x61\0\0\0\x01\0\0\0\x65\0\0\0\0\0\0\x01\x04\ +\0\0\0\x20\0\0\x01\x69\0\0\0\x01\0\0\x0c\x05\0\0\0\x1b\x06\0\0\0\0\0\x01\x01\0\ +\0\0\x08\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x08\0\0\0\x0a\0\0\0\x0d\0\0\0\x20\ +\x06\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\x34\x06\0\0\0\0\0\x0e\x09\0\0\0\x01\0\0\ +\0\0\0\0\0\0\0\0\x0a\x08\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\ +\x13\0\0\0\x3c\x06\0\0\0\0\0\x0e\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\ +\x0c\0\0\0\x0a\0\0\0\x02\0\0\0\x50\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x66\x06\ +\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x7c\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x06\0\0\0\x92\x06\0\0\0\0\0\x0e\x13\0\ +\0\0\0\0\0\0\xa8\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xbe\x06\0\0\0\0\0\x0e\x0f\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x36\0\0\0\xd4\x06\ +\0\0\0\0\0\x0e\x17\0\0\0\0\0\0\0\xea\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x0f\0\0\0\0\x07\0\0\0\0\0\x0e\x1a\0\0\ +\0\0\0\0\0\x16\x07\0\0\x0a\0\0\x0f\0\0\0\0\x0e\0\0\0\0\0\0\0\x13\0\0\0\x10\0\0\ +\0\x13\0\0\0\x02\0\0\0\x11\0\0\0\x15\0\0\0\x02\0\0\0\x12\0\0\0\x17\0\0\0\x02\0\ +\0\0\x14\0\0\0\x19\0\0\0\x06\0\0\0\x15\0\0\0\x1f\0\0\0\x02\0\0\0\x16\0\0\0\x21\ +\0\0\0\x02\0\0\0\x18\0\0\0\x23\0\0\0\x36\0\0\0\x19\0\0\0\x59\0\0\0\x02\0\0\0\ +\x1b\0\0\0\x5b\0\0\0\x0f\0\0\0\x1e\x07\0\0\x01\0\0\x0f\0\0\0\0\x0b\0\0\0\0\0\0\ +\0\x0d\0\0\0\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\x74\x61\0\x64\x61\x74\x61\x5f\ +\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\x61\0\x69\x6e\x67\x72\x65\x73\ +\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\x5f\x71\x75\x65\x75\x65\x5f\x69\ +\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\ +\x5f\x5f\x75\x33\x32\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\x6e\x74\0\x63\ +\x74\x78\0\x69\x6e\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\0\x78\x64\ +\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\ +\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x78\x64\x70\x5f\x66\ +\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\x20\x20\x20\x20\x76\x6f\x69\x64\ +\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\ +\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x5f\x65\ +\x6e\x64\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x20\x3d\ +\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\ +\x3e\x64\x61\x74\x61\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\ +\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\ +\x63\x6b\x65\x74\x2f\x70\x61\x63\x6b\x65\x74\x5f\x6d\x61\x6e\x61\x67\x65\x72\ +\x2e\x68\0\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x65\ +\x74\x68\x20\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\ +\x65\x74\x68\x68\x64\x72\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\ +\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x65\x74\ +\x68\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\ +\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\ +\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\x22\x29\x3b\0\ +\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x69\x70\x20\ +\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\x64\x61\x74\ +\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\ +\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x69\ +\x70\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\ +\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\ +\x29\x3b\0\x20\x20\x20\x20\x73\x77\x69\x74\x63\x68\x28\x69\x70\x2d\x3e\x70\x72\ +\x6f\x74\x6f\x63\x6f\x6c\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\ +\x5f\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x28\x64\x61\x74\x61\x29\x20\x21\x3d\x20\ +\x49\x50\x50\x52\x4f\x54\x4f\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x20\x20\ +\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x43\x22\x29\x3b\0\x20\ +\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\x20\ +\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\x61\ +\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\ +\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\ +\x28\x74\x63\x70\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\ +\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\ +\x22\x29\x3b\0\x7d\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\ +\x54\x46\x47\x2f\x73\x72\x63\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\ +\x6b\x65\x74\x2f\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x2f\x74\x63\x70\x5f\x68\x65\ +\x6c\x70\x65\x72\x2e\x68\0\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x6e\x74\ +\x6f\x68\x73\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x29\x3b\0\x20\x20\x20\x20\ +\x69\x66\x20\x28\x67\x65\x74\x5f\x74\x63\x70\x5f\x64\x65\x73\x74\x5f\x70\x6f\ +\x72\x74\x28\x74\x63\x70\x29\x20\x21\x3d\x20\x53\x45\x43\x52\x45\x54\x5f\x50\ +\x41\x43\x4b\x45\x54\x5f\x44\x45\x53\x54\x5f\x50\x4f\x52\x54\x29\x7b\0\x20\x20\ +\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\ +\x20\x25\x69\x5c\x6e\x22\x2c\x20\x6e\x74\x6f\x68\x73\x28\x74\x63\x70\x2d\x3e\ +\x64\x65\x73\x74\x29\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\ +\x73\x69\x7a\x65\x20\x3d\x20\x6e\x74\x6f\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\ +\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\x28\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\ +\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\x69\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\ +\x34\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\ +\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\x7a\x65\x6f\x66\x28\x6d\x61\x74\x63\ +\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x29\x20\x2d\x20\x31\x29\x20\x7b\0\x20\x20\ +\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x46\ +\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\ +\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\ +\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\ +\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x70\x61\x79\x6c\x6f\x61\x64\x5f\x62\x6f\ +\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\ +\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x2c\x20\x64\x61\x74\x61\x5f\ +\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ \x72\x69\x6e\x74\x6b\x28\x22\x47\x22\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\ \x70\x72\x69\x6e\x74\x6b\x28\x22\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\x61\ \x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\x68\ \x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\x65\ \x20\x25\x69\x5c\x6e\x22\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\x70\x61\ -\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\ -\x20\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5b\x69\x5d\x20\x21\x3d\x20\ -\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x5b\x69\x5d\x29\x7b\0\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ -\x74\x6b\x28\x22\x48\x22\x29\x3b\0\x7d\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\ -\x5c\x6e\x20\x22\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x31\ -\x5d\x20\x3d\x20\x27\x62\x27\x3b\0\x63\x68\x61\x72\0\x5f\x5f\x41\x52\x52\x41\ -\x59\x5f\x53\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x4c\x49\x43\x45\x4e\x53\ -\x45\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\x2e\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ -\x66\x6d\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ -\x5f\x5f\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ -\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ -\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\ -\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\ -\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\ -\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\ -\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\ -\x2e\x72\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\ -\0\0\0\0\0\0\0\x14\0\0\0\x14\0\0\0\xcc\x02\0\0\xe0\x02\0\0\0\0\0\0\x08\0\0\0\ -\x75\0\0\0\x01\0\0\0\0\0\0\0\x07\0\0\0\x10\0\0\0\x75\0\0\0\x2c\0\0\0\0\0\0\0\ -\x7e\0\0\0\xaa\0\0\0\x29\xe4\0\0\x08\0\0\0\x7e\0\0\0\xdc\0\0\0\x25\xe8\0\0\x10\ -\0\0\0\x06\x01\0\0\x44\x01\0\0\x15\x28\0\0\x20\0\0\0\x7e\0\0\0\x7d\x01\0\0\x08\ -\x10\x01\0\x28\0\0\0\x7e\0\0\0\xb3\x01\0\0\x09\x14\x01\0\x48\0\0\0\x06\x01\0\0\ -\xdd\x01\0\0\x14\x44\0\0\x58\0\0\0\x7e\0\0\0\x0b\x02\0\0\x09\x28\x01\0\x60\0\0\ -\0\x7e\0\0\0\x3b\x02\0\0\x09\x2c\x01\0\x78\0\0\0\x06\x01\0\0\x54\x02\0\0\x10\ -\x94\0\0\x80\0\0\0\x7e\0\0\0\x6e\x02\0\0\x09\x3c\x01\0\x88\0\0\0\x7e\0\0\0\x9a\ -\x02\0\0\x09\x40\x01\0\xa0\0\0\0\x06\x01\0\0\xb3\x02\0\0\x15\x60\0\0\xb0\0\0\0\ -\x7e\0\0\0\xe3\x02\0\0\x09\x54\x01\0\xb8\0\0\0\x7e\0\0\0\x13\x03\0\0\x09\x58\ -\x01\0\xd0\0\0\0\x7e\0\0\0\x2c\x03\0\0\x0e\x68\x01\0\xd8\0\0\0\x7e\0\0\0\x2c\ -\x03\0\0\x09\x68\x01\0\xe0\0\0\0\x7e\0\0\0\x4f\x03\0\0\x09\x6c\x01\0\xf8\0\0\0\ -\x7e\0\0\0\x68\x03\0\0\x2f\x7c\x01\0\0\x01\0\0\x7e\0\0\0\x68\x03\0\0\x34\x7c\ -\x01\0\x10\x01\0\0\x7e\0\0\0\x68\x03\0\0\x14\x7c\x01\0\x20\x01\0\0\x7e\0\0\0\ -\x68\x03\0\0\x27\x7c\x01\0\x28\x01\0\0\x7e\0\0\0\x68\x03\0\0\x40\x7c\x01\0\x30\ -\x01\0\0\x7e\0\0\0\x68\x03\0\0\x44\x7c\x01\0\x40\x01\0\0\x7e\0\0\0\x68\x03\0\0\ -\x39\x7c\x01\0\x48\x01\0\0\x7e\0\0\0\xb1\x03\0\0\x09\x8c\x01\0\x50\x01\0\0\x7e\ -\0\0\0\xe6\x03\0\0\x09\x90\x01\0\x68\x01\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x70\x01\ -\0\0\x7e\0\0\0\xff\x03\0\0\x19\xa4\x01\0\x80\x01\0\0\x7e\0\0\0\xff\x03\0\0\x09\ -\xa4\x01\0\x88\x01\0\0\x7e\0\0\0\x33\x04\0\0\x09\xa8\x01\0\xa0\x01\0\0\x7e\0\0\ -\0\x4c\x04\0\0\x05\xb8\x01\0\xd0\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\ -\xd8\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\xe0\x01\0\0\x7e\0\0\0\xad\x04\ -\0\0\x0d\xc4\x01\0\xe8\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\xf0\x01\0\0\ -\x7e\0\0\0\xda\x04\0\0\x0d\xc8\x01\0\0\x02\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x10\ -\x02\0\0\x7e\0\0\0\xf7\x04\0\0\x01\x10\x02\0\x20\x02\0\0\x7e\0\0\0\xad\x04\0\0\ -\x0d\xc4\x01\0\x28\x02\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\x30\x02\0\0\x7e\ -\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\x38\x02\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\ -\0\x40\x02\0\0\x7e\0\0\0\xf9\x04\0\0\x05\xdc\x01\0\x68\x02\0\0\x7e\0\0\0\x1c\ -\x05\0\0\x10\xe0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x9a\x01\0\0\0\0\x02\0\xf8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5e\x01\0\0\0\0\x02\0\ -\x68\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x23\x01\0\0\0\0\x02\0\xa0\x01\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\xe8\0\0\0\0\0\x02\0\xf0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\0\ -\0\0\0\0\x02\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa5\0\0\0\0\0\x02\0\x08\x02\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\0\0\0\0\0\x02\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\x57\x01\0\0\0\0\x02\0\x48\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x01\0\0\0\0\ -\x02\0\x20\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\x02\0\x78\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\0\0\x02\0\xa0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9e\ -\0\0\0\0\0\x02\0\xd0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x01\0\x04\0\0\0\0\ -\0\0\0\0\0\x13\0\0\0\0\0\0\0\x7c\x01\0\0\x01\0\x04\0\x13\0\0\0\0\0\0\0\x02\0\0\ -\0\0\0\0\0\x66\x01\0\0\x01\0\x04\0\x15\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x41\x01\ -\0\0\x01\0\x04\0\x17\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x2b\x01\0\0\x01\0\x04\0\ -\x19\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x06\x01\0\0\x01\0\x04\0\x1b\0\0\0\0\0\0\0\ -\x02\0\0\0\0\0\0\0\xf0\0\0\0\x01\0\x04\0\x1d\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\ -\xcb\0\0\0\x01\0\x04\0\x1f\0\0\0\0\0\0\0\x36\0\0\0\0\0\0\0\xad\0\0\0\x01\0\x04\ -\0\x55\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x88\0\0\0\x01\0\x04\0\x57\0\0\0\0\0\0\0\ -\x0f\0\0\0\0\0\0\0\0\0\0\0\x03\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x03\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x78\0\0\0\x11\0\x03\0\0\0\0\0\0\0\ -\0\0\x0d\0\0\0\0\0\0\0\x43\0\0\0\x12\0\x02\0\0\0\0\0\0\0\0\0\x78\x02\0\0\0\0\0\ -\0\x28\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x60\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ -\x88\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xb8\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ -\xe0\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x50\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ -\x88\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xa0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\ -\0\xf0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x40\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\ -\0\0\x28\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x34\x02\0\0\0\0\0\0\x0a\0\0\0\x18\ -\0\0\0\x40\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x4c\x02\0\0\0\0\0\0\x0a\0\0\0\ -\x18\0\0\0\x58\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x64\x02\0\0\0\0\0\0\x0a\0\0\ -\0\x18\0\0\0\x70\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x7c\x02\0\0\0\0\0\0\x0a\0\ -\0\0\x18\0\0\0\x88\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x94\x02\0\0\0\0\0\0\x0a\ -\0\0\0\x18\0\0\0\xac\x02\0\0\0\0\0\0\0\0\0\0\x19\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\ +\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\ +\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x69\x6e\x63\x6c\ +\x75\x64\x65\x2f\x63\x6f\x6d\x6d\x6f\x6e\x2f\x63\x6f\x6d\x6d\x6f\x6e\x5f\x75\ +\x74\x69\x6c\x73\x2e\x68\0\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x73\ +\x74\x72\x31\x5b\x69\x69\x5d\x20\x21\x3d\x20\x73\x74\x72\x32\x5b\x69\x69\x5d\ +\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\ +\x6b\x28\x22\x48\x22\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ +\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x5c\x6e\x20\ +\x22\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x31\x5d\x20\x3d\ +\x20\x27\x62\x27\x3b\0\x63\x68\x61\x72\0\x5f\x5f\x41\x52\x52\x41\x59\x5f\x53\ +\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x4c\x49\x43\x45\x4e\x53\x45\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ +\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ +\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\ +\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\x72\x65\ +\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\x70\x5f\ +\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x2e\x72\ +\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\0\0\0\0\ +\0\0\0\x14\0\0\0\x14\0\0\0\xcc\x02\0\0\xe0\x02\0\0\0\0\0\0\x08\0\0\0\x75\0\0\0\ +\x01\0\0\0\0\0\0\0\x07\0\0\0\x10\0\0\0\x75\0\0\0\x2c\0\0\0\0\0\0\0\x7e\0\0\0\ +\xaa\0\0\0\x29\xf4\0\0\x08\0\0\0\x7e\0\0\0\xdc\0\0\0\x25\xf8\0\0\x10\0\0\0\x06\ +\x01\0\0\x3c\x01\0\0\x15\x28\0\0\x20\0\0\0\x7e\0\0\0\x75\x01\0\0\x08\x24\x01\0\ +\x28\0\0\0\x7e\0\0\0\xab\x01\0\0\x09\x28\x01\0\x48\0\0\0\x06\x01\0\0\xd5\x01\0\ +\0\x14\x44\0\0\x58\0\0\0\x7e\0\0\0\x03\x02\0\0\x09\x3c\x01\0\x60\0\0\0\x7e\0\0\ +\0\x33\x02\0\0\x09\x40\x01\0\x78\0\0\0\x06\x01\0\0\x4c\x02\0\0\x10\xb0\0\0\x80\ +\0\0\0\x7e\0\0\0\x66\x02\0\0\x09\x50\x01\0\x88\0\0\0\x7e\0\0\0\x92\x02\0\0\x09\ +\x54\x01\0\xa0\0\0\0\x06\x01\0\0\xab\x02\0\0\x15\x60\0\0\xb0\0\0\0\x7e\0\0\0\ +\xdb\x02\0\0\x09\x68\x01\0\xb8\0\0\0\x7e\0\0\0\x0b\x03\0\0\x09\x6c\x01\0\xc8\0\ +\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\xd8\0\0\0\x7e\0\0\0\x24\x03\0\0\x01\x20\x02\0\ +\xe8\0\0\0\x26\x03\0\0\x61\x03\0\0\x0c\x34\0\0\xf0\0\0\0\x7e\0\0\0\x7e\x03\0\0\ +\x09\x7c\x01\0\0\x01\0\0\x7e\0\0\0\xba\x03\0\0\x09\x80\x01\0\x28\x01\0\0\x7e\0\ +\0\0\xea\x03\0\0\x2f\x90\x01\0\x30\x01\0\0\x7e\0\0\0\xea\x03\0\0\x34\x90\x01\0\ +\x40\x01\0\0\x7e\0\0\0\xea\x03\0\0\x14\x90\x01\0\x50\x01\0\0\x7e\0\0\0\xea\x03\ +\0\0\x27\x90\x01\0\x58\x01\0\0\x7e\0\0\0\xea\x03\0\0\x40\x90\x01\0\x60\x01\0\0\ +\x7e\0\0\0\xea\x03\0\0\x44\x90\x01\0\x70\x01\0\0\x7e\0\0\0\xea\x03\0\0\x39\x90\ +\x01\0\x78\x01\0\0\x7e\0\0\0\x33\x04\0\0\x09\xa0\x01\0\x80\x01\0\0\x7e\0\0\0\ +\x68\x04\0\0\x09\xa4\x01\0\x98\x01\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\xa0\x01\0\0\ +\x06\x01\0\0\x81\x04\0\0\x19\x7c\0\0\xb0\x01\0\0\x7e\0\0\0\xb5\x04\0\0\x09\xb8\ +\x01\0\xb8\x01\0\0\x7e\0\0\0\xf8\x04\0\0\x09\xbc\x01\0\xd0\x01\0\0\x7e\0\0\0\ +\x11\x05\0\0\x05\xcc\x01\0\0\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x08\ +\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x10\x02\0\0\x7e\0\0\0\xc9\x05\0\0\ +\x09\xdc\x01\0\x28\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x30\x02\0\0\x72\ +\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x38\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\ +\0\x40\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x48\x02\0\0\x72\x05\0\0\xa6\ +\x05\0\0\x0d\x6c\0\0\x50\x02\0\0\x72\x05\0\0\xa6\x05\0\0\x0d\x6c\0\0\x58\x02\0\ +\0\x7e\0\0\0\xe2\x05\0\0\x05\xec\x01\0\x80\x02\0\0\x7e\0\0\0\x05\x06\0\0\x10\ +\xf0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9a\ +\x01\0\0\0\0\x02\0\x28\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x66\x01\0\0\0\0\x02\0\ +\x98\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2b\x01\0\0\0\0\x02\0\xd0\x01\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x06\x01\0\0\0\0\x02\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xe8\ +\0\0\0\0\0\x02\0\xc8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\0\0\0\0\0\x02\0\xd0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\xa5\0\0\0\0\0\x02\0\xd8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\x80\0\0\0\0\0\x02\0\x28\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\x01\0\0\0\0\x02\ +\0\x48\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x24\x01\0\0\0\0\x02\0\x78\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\xe1\0\0\0\0\0\x02\0\xa0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9e\0\0\0\ +\0\0\x02\0\xe8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x01\0\x04\0\0\0\0\0\0\0\ +\0\0\x13\0\0\0\0\0\0\0\x84\x01\0\0\x01\0\x04\0\x13\0\0\0\0\0\0\0\x02\0\0\0\0\0\ +\0\0\x6e\x01\0\0\x01\0\x04\0\x15\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x49\x01\0\0\ +\x01\0\x04\0\x17\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x33\x01\0\0\x01\0\x04\0\x19\0\ +\0\0\0\0\0\0\x06\0\0\0\0\0\0\0\x0e\x01\0\0\x01\0\x04\0\x1f\0\0\0\0\0\0\0\x02\0\ +\0\0\0\0\0\0\xf0\0\0\0\x01\0\x04\0\x21\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\xcb\0\0\ +\0\x01\0\x04\0\x23\0\0\0\0\0\0\0\x36\0\0\0\0\0\0\0\xad\0\0\0\x01\0\x04\0\x59\0\ +\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x88\0\0\0\x01\0\x04\0\x5b\0\0\0\0\0\0\0\x0f\0\0\ +\0\0\0\0\0\0\0\0\0\x03\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\ +\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x78\0\0\0\x11\0\x03\0\0\0\0\0\0\0\0\0\ +\x0d\0\0\0\0\0\0\0\x43\0\0\0\x12\0\x02\0\0\0\0\0\0\0\0\0\x90\x02\0\0\0\0\0\0\ +\x28\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x60\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\x88\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xb8\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\0\ +\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x80\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\xb8\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xd0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\ +\0\x10\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x58\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\ +\0\0\x40\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x4c\x02\0\0\0\0\0\0\x0a\0\0\0\x18\ +\0\0\0\x58\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x64\x02\0\0\0\0\0\0\x0a\0\0\0\ +\x18\0\0\0\x70\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x7c\x02\0\0\0\0\0\0\x0a\0\0\ +\0\x18\0\0\0\x88\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x94\x02\0\0\0\0\0\0\x0a\0\ +\0\0\x18\0\0\0\xa0\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\xac\x02\0\0\0\0\0\0\x0a\ +\0\0\0\x18\0\0\0\xc4\x02\0\0\0\0\0\0\0\0\0\0\x19\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\ \0\x17\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x50\0\0\0\0\0\0\0\0\0\0\0\x17\ \0\0\0\x60\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x70\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ \x80\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x90\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\0\ @@ -355,7 +369,7 @@ xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) \x90\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ \xb0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xc0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ \xd0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xe0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ -\xf0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x1f\x0e\x0f\x10\x11\x12\x13\x14\x15\ +\xf0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x21\x20\x0e\x0f\x10\x11\x12\x13\x14\x15\ \x16\x17\0\x2e\x74\x65\x78\x74\0\x2e\x72\x65\x6c\x2e\x42\x54\x46\x2e\x65\x78\ \x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ \x74\0\x2e\x72\x65\x6c\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2e\x6c\x6c\x76\x6d\ @@ -369,38 +383,38 @@ xdp_filter_bpf__create_skeleton(struct xdp_filter_bpf *obj) \x31\x37\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ \x6d\x74\x2e\x37\0\x4c\x42\x42\x30\x5f\x36\0\x4c\x42\x42\x30\x5f\x31\x36\0\x78\ \x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ -\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ -\x74\x2e\x35\0\x4c\x42\x42\x30\x5f\x34\0\x4c\x42\x42\x30\x5f\x31\x34\0\x78\x64\ -\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\ -\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ -\x2e\x33\0\x4c\x42\x42\x30\x5f\x32\0\x4c\x42\x42\x30\x5f\x31\x32\0\x78\x64\x70\ -\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\0\x78\ -\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ -\x31\0\x4c\x42\x42\x30\x5f\x32\x30\0\x4c\x42\x42\x30\x5f\x31\x30\0\0\0\0\0\0\0\ +\x36\0\x4c\x42\x42\x30\x5f\x31\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x4c\x42\x42\x30\x5f\x34\0\x4c\ +\x42\x42\x30\x5f\x31\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\ +\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\ +\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\0\x4c\x42\x42\x30\x5f\x32\0\x4c\x42\ +\x42\x30\x5f\x31\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ +\x5f\x5f\x66\x6d\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\0\x4c\x42\x42\x30\x5f\x31\x30\0\0\0\0\0\0\ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\x2c\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x40\0\0\0\0\0\0\0\x78\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\x4f\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb8\x02\0\0\0\ -\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x67\ -\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc5\x02\0\0\0\0\0\0\x66\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x73\0\0\0\x01\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2b\x03\0\0\0\0\0\0\xf1\x08\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x1c\x0c\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\x20\x0f\0\0\0\0\0\0\x88\x02\0\0\0\0\0\0\x0c\0\0\0\x19\0\0\0\x08\0\0\0\0\0\ -\0\0\x18\0\0\0\0\0\0\0\x28\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa8\ -\x11\0\0\0\0\0\0\xa0\0\0\0\0\0\0\0\x07\0\0\0\x02\0\0\0\x08\0\0\0\0\0\0\0\x10\0\ -\0\0\0\0\0\0\x6f\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x48\x12\0\0\0\ -\0\0\0\xb0\0\0\0\0\0\0\0\x07\0\0\0\x05\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\ -\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf8\x12\0\0\0\0\0\0\xd0\ -\x02\0\0\0\0\0\0\x07\0\0\0\x06\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\x35\0\ -\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x15\0\0\0\0\0\0\x0c\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x57\0\0\0\x03\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd4\x15\0\0\0\0\0\0\xa2\x01\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\x2c\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\x40\0\0\0\0\0\0\0\x90\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\x4f\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd0\x02\0\0\ +\0\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x67\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xdd\x02\0\0\0\0\0\0\x6a\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x73\0\0\0\x01\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x47\x03\0\0\0\0\0\0\xf2\x09\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\x39\x0d\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\x40\x10\0\0\0\0\0\0\x88\x02\0\0\0\0\0\0\x0c\0\0\0\x19\0\0\0\x08\0\0\0\ +\0\0\0\0\x18\0\0\0\0\0\0\0\x28\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\xc8\x12\0\0\0\0\0\0\xa0\0\0\0\0\0\0\0\x07\0\0\0\x02\0\0\0\x08\0\0\0\0\0\0\0\ +\x10\0\0\0\0\0\0\0\x6f\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x68\x13\ +\0\0\0\0\0\0\xb0\0\0\0\0\0\0\0\x07\0\0\0\x05\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\ +\0\0\0\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x18\x14\0\0\0\0\0\ +\0\xd0\x02\0\0\0\0\0\0\x07\0\0\0\x06\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\ +\x35\0\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\xe8\x16\0\0\0\0\0\ +\0\x0c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x57\0\0\ +\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf4\x16\0\0\0\0\0\0\xa2\x01\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; return 0; err: diff --git a/src/bin/xdp_filter b/src/bin/xdp_filter index e9b8fd1dff879d89cf32ab78f2906afc59b00e3f..3fd0193e0bbe39e9c6079b7c1efa580009d6ea44 100755 GIT binary patch delta 42132 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 delta 42007 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⁢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 #include #include +#include #include #include @@ -22,7 +23,10 @@ #include "../user/xdp_filter.h" #include "../constants/constants.h" -#include "../include/packet/packet_manager.h" + +#include "packet/packet_manager.h" +#include "packet/protocol/tcp_helper.h" +#include "common/common_utils.h" char LICENSE[] SEC("license") = "Dual BSD/GPL"; @@ -56,10 +60,11 @@ int xdp_receive(struct xdp_md *ctx) void *data_end = (void *)(long)ctx->data_end; void *data = (void *)(long)ctx->data; - char match_pattern[] = "test"; - unsigned int payload_size, i; + char match_pattern[] = SECRET_PACKET_PAYLOAD; + int match_pattern_size = strlen(match_pattern); + unsigned int payload_size; struct ethhdr *eth = data; - unsigned char *payload; + char *payload; struct tcphdr *tcp; struct iphdr *ip; @@ -87,34 +92,32 @@ int xdp_receive(struct xdp_md *ctx) return XDP_PASS; } - if (tcp->dest != ntohs(9000)){ - bpf_printk("E"); + if (get_tcp_dest_port(tcp) != SECRET_PACKET_DEST_PORT){ + bpf_printk("E %i\n", ntohs(tcp->dest)); return XDP_PASS; } payload_size = ntohs(ip->tot_len) - (tcp->doff * 4) - (ip->ihl * 4); payload = (void *)tcp + tcp->doff*4; - // Here we use "size - 1" to account for the final '\0' in "test". + // We use "size - 1" to account for the final '\0' if (payload_size != sizeof(match_pattern) - 1) { bpf_printk("F"); return XDP_PASS; } // Point to start of payload. - if ((void *)payload + payload_size > data_end){ + if (tcp_payload_bound_check(payload, payload_size, data_end)){ bpf_printk("G"); return XDP_PASS; } bpf_printk("Received valid TCP packet with payload %s of size %i\n", payload, payload_size); // Compare each byte, exit if a difference is found. - for (i = 0; i < payload_size; i++) - if (payload[i] != match_pattern[i]){ - bpf_printk("H"); - return XDP_PASS; - } - + if(str_n_compare(payload, payload_size, match_pattern, match_pattern_size, payload_size)!=0){ + bpf_printk("H"); + return XDP_PASS; + } bpf_printk("BPF finished\n "); payload[1] = 'b'; diff --git a/src/include/common/common_utils.h b/src/include/common/common_utils.h new file mode 100644 index 0000000..35e8079 --- /dev/null +++ b/src/include/common/common_utils.h @@ -0,0 +1,35 @@ +#ifndef __COMMON_UTILS_H__ +#define __COMMON_UTILS_H__ + +/** +* Compares two strings. +* Yes, we cannot use strcmp from ebpf. +* https://github.com/iovisor/bcc/issues/691 +* +* Misteriouslly we can from xdp_filter, but it might not work somewhere else. +* However it is the verifier which does not let us call strncmp without +* additional checks so we will use this one anyway. +* +* @param str1 +* @param str1len //Just to please the ebpf verifier +* @param str2 +* @param str2len //Just to please the ebpf verifier +* @return 0 if equal, -1 if false +*/ +static __always_inline int str_n_compare(char* str1, int str1len, char* str2, int str2len, int size){ + for(int ii = 0; ii < size; ii++){ + if(str1len data_end){ + return -1; + } + return 0; //OK +} + /* UTILITIES */ @@ -44,4 +51,8 @@ static __always_inline int get_protocol(void* data){ } } +static __always_inline unsigned char* get_payload(struct tcphdr *tcp){ + return (void *)tcp + tcp->doff*4; +} + #endif \ No newline at end of file diff --git a/src/include/packet/protocol/tcp_helper.h b/src/include/packet/protocol/tcp_helper.h new file mode 100644 index 0000000..8c6cfd0 --- /dev/null +++ b/src/include/packet/protocol/tcp_helper.h @@ -0,0 +1,16 @@ +#ifndef __TCP_HELPER_H__ +#define __TCP_HELPER_H__ + +#include +#include + + +static __always_inline int get_tcp_src_port(struct tcphdr *tcp){ + return ntohs(tcp->source); +} + +static __always_inline int get_tcp_dest_port(struct tcphdr *tcp){ + return ntohs(tcp->dest); +} + +#endif \ No newline at end of file diff --git a/src/include/packet/tcp_helper.h b/src/include/packet/tcp_helper.h deleted file mode 100644 index e69de29..0000000