ELF>@@ hcad_ioc_reg_ibhcad_ioctlhcad_ioc_iov_get_prophcad_ioc_iov_set_prophcad_ioc_iov_freehcad_ioc_iov_allochcad_dump_propshcad_get_unreg_hcahcad_free_vfhcad_get_pf_prophcad_get_vf_prophcad_gen_syseventhcad_registerRegister IB: %scmd %x, failed err %dtotal sz: %d, buf sz %dprop-listsIOV get prop: vf: %d, hca %shcad_ioc_iov_set_prop: attempt to update num_vf to %d failed in hcad_conf_iov(): %dhcad_ioc_iov_set_prop: attempt to update num_vf to %d when %d vfs are activeInvalid parameters, num_vf %d Current num_vf %d, max_hw_vf %dnum-vfIOV set prop: vf: %d, hca %sIOV free: vf: %d, hca %sIOV alloc: vf: %d, hca %sregister HCA to IB framework failedHold failed %x, busy on %xddi_pseudodevctlHCA Driver!%s%s = %sdevnamesolarisdevpathzone-idUnsupport name %s, type %d%s = 0x%x%s = 0x%lx%s: hcadGet unregister failed with err %dtotal sz: %d, buf sz %dprop-lists%s%dGet unregistered HCAsfree VF %d failed, hca node %p flr on vf %d failed, 0x%xdetach vf %d failed, hca node %p VF is busy, %sfree failed, vf %d assigned to zoneattach VF %d failed, hca node %p offline VF %d failed, hca node %p free vf %d failed, hca node %p set iov properties failed. VF %d, hca_node %p alloc VF failed, hca node %p Function %d:Function 0:num-vf-confsolaris-bootexternaliov-owneractive-vfmax-hw-vfnum-vfFunction :generated event: %s, %s%dib-hcaEC_dev_addSUNWinstancedriver_namephys_pathno IB port on HCA %sunregister callback failed hca %sunregister function is NULL, hca %sHCA %s onlineGenerate sysevent failed, hca %s, return %dHCA %s is not attached, state %dHCA %s is already registeredHCAD reg info mis-match, hcad ver %d, reg info ver %dffffffUHSHH=؅u H[fffffffUHSHtH=؅t|H[ffffffUHHH}HHH=ffUHH H}HuHUHMHHtuH u H3H3 fUHHH}HuSHH߅tH‹DEHMHAH3H HAH3A`H HH3H3A8HMH‹HDH HH3ADH3UHH(H}HuHUHMLESATAUAVH8LDM3LeLeLeLeH}3؅AƅI]H=HAM 3LH3HHFHuH؅ H}tu HuHU؅MHU#Hu؅HUEH}H5؅H}Hu3؅EEL;Er?H}HuHU3E3؅H}IuHUAtngH=HHM3H3I} D؋EAE0H=HD3H3 IAH}tWHEI;t=uE3v AHH5A$pIH5AT$IH5AT$IID$Hu8H@tH5HI.H5HIH5HII$@HH5HII$@HHuH5II$h3IH3A$`؅MtyEv ME3I<$HtIAE;rIHCxHD;rgHL0HD(H33ۋH@A_A^A]A\[HH H3HH3IE3vH3AKHID$ HH8HjMID$ HHHHID$ HË@HHH5HHH5HHH8HANjHHH30H=3HAH3HHfffffffUHHH}HuHUSATAUAVAWHLHLAD$ID$H I$@ffLMuIfHcHID$ L0HcHID$ @3IIDEHcHID$ xulIH5IH3IA IH5IH3ILHuII3t-uIH5IH3A hIuIfAD$ffAD$H5IH3ItH5IH3HcHID$ H3HHcHID$ @%H5IH3AA0AHA_A^A]A\[ffffffUHHH}HuSATAUAVAWHHC;HCH*DAD$HcHHEHC L(MILHuIH=ILMIGHH=I4IuCIt IH5AԋH3uIH=H3IH34H=uI H=HC HExtIIt4t/H5AHH3uIIu7uIHEHK HH3HHC @fCffC3euIH5AHH39uIH=H3AH3 0HA_A^A]A\[ÐffffffUHHH}HuSATAUAVAWHHL牵H3HHH=H3H3H3؅tH5H3H=H=E3Ht.L5E3HHAUHDDIHHuEIcHH3HH=LMLIFHI3؅I8HI?H5H؅I8HI8HHHHDH3I?H5H؅u!IH=ILM*3H=H=H=H=HH5HA؅HH3؅ED$L;rMHHH3E3؅uhHI4$Ht]@H=HH3H3I<$ D؋AD$tH5H3LMtFEeE~E3I>HtIAE;~HH H=HHtHHt HHHA_A^A]A\[ffffffffUHHH}HuSHXLHHHHLLt8))))))) )0H@HHƀIH3HUEE0HEHEHHEH@HX[ffffffUHH=H3H3H=;Lȉ Hc3HHHH HHc HHHH=ffffffUHH=H=HtHc5H3HH=H=ffffffUHHH}HuHUSATAUHLDHHHHHL L(t/)0)@)P)`)p)m)u)}MuL%H=H HD;-HHH;vHAH H=HH2IH3H=HH=HMEE0HEHEHHE+HHHHH HH=H= H=HA]A\[ffffffffUHHH}SATAUAVAWH LMIIH3LMoHIDILAu5IHu!DEH=3HIH3Au4IHuDEH=3HIH3Au4IHuDEH=3HIH3Au1IHuuvLEH=3HIH3UA u1IHuu?LEH=3HIH3H=3HIEH3IILMH A_A^A]A\[ÐffffffUHHH}SATAUAVAWH LAMH=I]HLMID$H tiIXu| Id$H=IH=H3HDH3vH=H=H3HH33HHx3LH=IIt$0IHHADt=IIT$HfABȅtAT$;}fAD$A@~IIT$HIHHEHcI D$=~[IH=~.L=E3I?HHuIAD;5|3@HcI D$ADtIIHDEuDH5HH3I$ptH3ID$ H=3sH=IHxH5HAH37IL$ H=H5H3H A_A^A]A\[ÐffffffUHHH}SATHLH=IHHH=HPHhHCHtLHt)H3хuHc7H5IH3H5IH3H=H{ HtHpHH3HC HCHt H HCH=HHHxH=3H=3HA\[     @"3, [6JCfO`U[1e|u0(wD 'l n(X !0<l PVg!lp!z0@@!&. )7 N!L``!r # .?%OMNWq!X6Bx NYjvDH"pZ *@IU^s}t4{);M[m})1mLj.l<IWdp  hcadhcad_main.chcad_modlinkagehcad_inithcad_finihcad_getinfohcad_attachhcad_detachhcad_openhcad_ioc_reg_ibhcad_ioc_iov_allochcad_ioc_iov_freehcad_ioc_iov_set_prophcad_ioc_iov_get_prophcad_ioc_rep_unreghcad_ioctlhcad_i_ioc_listhcad_modldrvhcad_opshcad_cb_opsDdata.dataDrodata.rodatahcad_util.chcad_hca_lookup_by_iovdiphcad_print_mutexBbss.bsshcad_ci.cnvpair_namenvpair_typemod_installmod_infobcopyndi_devi_offlineddi_get_instancenodevpciv_attach_vfpciv_detach_vfddi_create_minor_nodehcad_debug_bufi_ddi_node_statehcad_set_prophcad_hca_get_vf_zoneidhcad_logging_finihcad_logging_initpciv_get_iov_paramddi_driver_namekmem_allocnvlist_unpackhcad_hca_lookuphcad_get_unreg_hcahcad_dump_propslist_insert_headmod_driveropshcad_gen_syseventhcad_buf_sptrhcad_buf_eptrpciv_destroy_vfshcad_registervsnprintfddi_quiesce_not_supportedpciv_alloc_vfnochpollddi_copyinnvpair_value_uint64nvpair_value_uint16nvpair_value_uint32ndi_devi_enterib_root_devpathsnvpair_value_stringddi_remove_minor_nodenulldevhcad_hca_hold_bypathlist_createhcad_printfmod_removeddi_log_syseventpciv_vf_flrnvlist_lookup_uint16nvlist_lookup_uint32list_removehcad_get_vf_prophcad_debug_levelkmem_zallochcad_vlogstrlenstrstrddi_prop_ophcad_hca_relendi_devi_exitpciv_create_vfshcad_i_hca_list_mutexhcad_dipddi_copyoutvcmn_errhcad_dbg_running_ioclist_headlist_nextstrncmppciv_free_vfnvlist_freenvlist_add_int32nvlist_sizenvlist_packnvlist_add_nvlist_arraynvlist_next_nvpairhcad_gen_sysevent_allhcad_free_vfkmem_freenvlist_add_uint32nvlist_add_uint16list_is_emptynvlist_add_stringib_root_devpathnvpair_value_int32ddi_report_devhcad_unregisterddi_get_parentgetminori_ddi_reset_noattachhcad_conf_iovmutex_exitmutex_inithcad_get_pf_propsecpolicy_ib_config_readonlyhcad_alloc_vflist_destroymutex_destroyddi_pathnamemutex_enterhcad_debug_buf_sizehcad_i_hca_listnvlist_emptynvlist_allocpciv_vf_dip2idsecpolicy_sys_devices.rodata.rodata1.rela.text.rela.data.bss.SUNW_cap.symtab.strtab.SUNW_ctf.shstrtab.SUNW_ctf.SUNW_signaturef&&>Juxx{$h$h$h%%h\%hy%hm&,&TM(((t))(tOdvTL<4ETL "LSdkD|L5TML| =, \!<Q\I|&LYq<!,"1#?$|.%e%4%\\VLUUgCC-^--5 R    %(]Sn|\Tl7e< L <Y $     ] l   g!%~!%!%!%)"%5"%"%#%#%#%R$+G$,-&12'2k33 3D356677!8!8"8""8"8[997&9_&9:w:'(;s<$=>"'>r'>'>D???5?@q@!@AABB&BB)B CrDDD:DDD&EG>(G!H!H#H #H*#HL#HV#H#H#H#H!I#IIJ#LgM!MC#MOQQ7 QR%Sg$T$UVVV&W'W'W'WM%XY[~[[S[k [\]:]+]L]']]]P]]]]3]]\]5]]](](](])])]a^_`ab*c d"e frfff&fu(fgpgigggg8gtggN gg g g ggRg/ggg^gggg$g$g$g9%gp%g%g}&g&gV h h'iMkk kkk kl/lAll6lklClll lBlnlZm n'nCn[nknznnnnOnnnnnnnonnAnnnnn' n%nN&n&n(n(n(n5)nU)n)n)*n9*noIoo@ p pypJ!qr@rdrrrrrrr rrerr{ r r r s s ssRssO t t4tttt0 uvvvww w w5ww/www= w}x yy" zVz {{,$|%|e }~)9 0  J U "()"*<080W[sY}'$Q=`HpTt, !."###S&&(((Z).*>*w! T`:" ',F!""%:))!!!"3O      Ma& *$ 80HP @`  ` X4p4444444FxNP8Z@ZZZZj(Hh&h>PxڬwxU~O/IINzIB IHI%4Q!0"cQ,*Q_,0~J,ذ+cky_|v^{I&D7R`R4S-o]*pU !7.uSYT{&򘴴2H^H+Q1YUn*r B:B=LiLZnڤw!s'i7jK>=[MMҦ6+Q$W",MN"0#T ]TE6ՃԭeYL#* )k:`i:F˵c:h'v+ .| w| F1#Eo+U|7܁@ԖLzR)Ҥ٪B=j4ZLyμrz&'=0ct DmГ?"7he-/s|Vȡx+s;>e[̲'áPyAL5I"SՖi-ӯdԓ,S fh<^~2J րi[|G *'W<ާW#`y}CH:**xeUȴ FH5A]$5M]IkĻKWJVlxyR=$/%%~xx_20_ĴoxxI|` \&\/zHCOK|%pćK|?і(?^cXmxzQIaŴDVmxX?̈uG̚ˬ`Ix+$L3BGЩ>gL{5;'pQN] \noWu'1nEnsP%o !G!YX]>뗹{w78y?c8D;o8w(ojL{c 0z&aJO:hrXnq^C NK0g},C? C0ҧof׿߱Zqԟd?&QO JAA p9]C"GjG#Dp/|cE +vnt&軂?mzǘ6==<:dA~U C)BzLHSC4 < /G+QU!Sn ?u?SBѤqwVs˷D=?qRORߒho K?‰y6ǣFu%ҷ gWq?M'u&M _gu!TU6]hZ6af?%ѫ҇aQ_ $$#ֳS\g$}I15J2CNUk+@)_=$k'Q1klW9R$c'(]x >xjY_=ɦ>3);i{bj"0[9ދ86ٴw ءɿG$'* ?I| rRbC'_jO1z턦ASKRXW1)[I1B'9`L9I{R:MoI|GV߀)I%J `Rh<%).'+p0SRE}#N. 3/)m38Ni;:u)7Cprҿ)^hK0\O$Θt2{e^´3 μdn`ꥬ7=0#ൊ]FOT.?g({;33{{~*ϗ\3?jʓ2M_tx |S>Ǩ)UTW}L+v'Vo TLwzDL4;2훡g@Nѩ`;&i[iҾX4wwmuSǘڙz볭RoN3M$a sL]zO֎[;3atއSsto.l:+tY)n恭V(vO}cvTxcNc/=ANv=i1](+S~LcFTn jZՃ Mi QƮ?$ ycx&B=Iyt-矓H^5z**0J{< <圭f?x?/XWyطf~͓AEP|H k 2xg?IdRJ%Ԙi6MFL^LffqF&Ϝe^.zf}SdTdƴLmmx[jcڮ'%ĻJ~Ļ?z}[ >W{\YkO&!OQ*f.yL;=;ig>ķVd˳7e8oc:flCgaYf2;5˯f?0c U3uh4/Ԕmg OclleXMI7d˺p{}I[y$=K=y$tz)l/Sgȯ~rs;RrOIL-a{ZV61i]`*-LcvI#җN_t2V}0o-삾ƶp:$É_"hk-Mr>bRw>3>]IDo.S\vjPA5s\%HLed1ssy;xQ.k̾+O|=Q\]~Nt%9ul[ᰝLޓTzYuy_՟jrj~cƛyMjc2pֵھpd>Zٟ_>egi,;͗/KV?ʹdzg}Idڗԗ{'_M>e?3e|pY@ޗ\^8- +o,8Ayɟ ;N 4ؗy_2C+oO"'v)GmOl:/&~tIi-VاV2W1c֨WվwX ٯ;13?*ЌY~"w*eiw~Y/wqI=`grSY3g.8"yI]^RpxW~B仅i6Ҿ-\{2+{"An5*4 ؏ru(/(2zҋx 0{L'XΌE|/tBn7M)b} XNx'˴/b<暤E~&rnϰ(ySNEf_M~H=)0"S)xP$?Wl7)XvHdB1ӑIVd Ӏl/c3`1R -;U? ;=e0YSSYYs#돃XO ߬ՃxȾDzb~JAl'r2ϙ:,)7xV,'72/1nuNf;M/a;I-;r_[nt@6~ ,8 ^kQ7]S }z_Q=رE ;v~_.EHpKD5D'&O,wѼ) ^mu 6<.n&Y6vǶlcvYpy=~u v:Vn)kP)뻫j,Ws)n'iBԜ/+Jyi])Jas܃]c˵x*sפ|z~ iqD?G_ptmf!{ ^'YMӥL:Bg %dX^'!B@/^g);A4@'+Ի̤kz | f6S )s7}|~fA2SCe3mU ^V&#x"ݲ)Lmt\K,ۥ-Z WL&r0nnMJ|ƑIjx2~^eR`*_g>Tf7tߕ>D=rCy2*(g]˽FB.H w\Z.MGyӘN-~=j~#8jY˙u[H}֟˹yຫܓj׃[z|?z(~/>Pr?|yC? qf1moPS3ơ@%'A|SATAƿ_:~%O[Yecyp'v{垚j5zV==)B r4B'V O=Y~ZT!瑗TȻ5. ޏ{*H3B o$z}rf|7}Qtio<4*2ʄV:J+}*^YX096Љ8pG\'"kN%ku!q]w]Wi}c܇ VWiu~yjb~y+>ss;{~oS}eV{! !߆rve.f7L1Z%v6x/6gw8]Uf]n_*} = ҩ{=UQ%Eϻ42>W:Z`fKgcv4oX0a7EvՉE;QL'r"SLԫEN['r3*r}"go9wy/<")raE<+K~TU<ǤCEX kD>JD%i"y\$e"WVCT~8>uoV̫mrGZo?P+SS}T\t>|/$yeyNr0f8fʉB3塀ņ-p~@IWu!Cddgv0-zט~:Ȍ'/O7N?i&yEՋ޿[/@>7:8;BLp[ʘ Fy!L\DfM~FݯI$`{2h _v0/}jw+ GTܫ|-u\O`H%#y| #Y/m`V Lgg3c#W0ufww4Z~'zqܻ).{R_? Q'TF)\;[F{F{sF8/bRU`QNCn(cr8_~I|i'=E v;SKN)zR95e4"GGNioG3HhҀ('D)^]MuP;L`?'tC'=lRt G4Ѧ1\ot?{?ae:Ƙ~ML;Ydk7$d1~̻1gRyd6*D`ɍ.#471_,W% :a7Q|L]>?iӡ9LR [$jyn}Znzkxks#۬>F~z|]49ɁFy}Q'}(qhU~wk5 ۓ .hO>Ec9 7}0k-uu3zrXyDѪ>>hnM'Ɗ~ oeA߃i]x%y&:Ǚ>9d=|/' A8Fm6JUfl3Gs\ 5`>x-6oЛ_7Q9*pv(Nj>4/e,hr/)I`/<~cz&>l)h'~-;;&; 3t"|&r"O):Й z'Dh38ќf.O߼c7MmXg`o1 ^ N6]ݠvpx" ~y5~M7%Q 64~I1=详fC]MrNtrS7M}AyEd~~ȽMWmmjS{SXϢ{?[,ϥ4Ӊo/_GCf9O\'4- qA= 4˹2W6w,Yf[e?,|oweҜ2YK߽ ii-r_7jKW?'jEGebmUSt&&[\4Χ]%k55@$޽Lif~yj(Z]9sCe_~9`dL Q> ry"8x*x>炃a/@ #`*CH\Y %W"< üY*m3B5yMBnc{fY4Mz^O\ ~|+]5 m2ֵ|[DDr2_JqA׵(Ȋv=wvÅ2ߗsv.n}eov9G.-'oOߙR"kv@,ӎ_^Sޯ`4}[;g*_٥:D :;Gv\:Y}mLV+ӱNd[^r!}\v۸>s<*xŷ/XIIl E ;ILՔcnw\(.hȭf)E**':uJ]#mdDi|*%iRkى]7q>A'ɽ@s[tu rBt]N4A`nRX~U,)ohQZR[ M8UlI6zFeڛ,\AZiSw$0(婉o~UhjY^Fԥ[[=\Ҙq"4q^0!Oqp})5BәJIOYOMħyBjv;+kT-6o! E 6?mTtZ ]1dP{Dblo+ϫm1XȬ4/t1eUI4==4*1| ~5IIsu60hFiklyv[k&fK,)8~[ZIfR2$eѽ:LtIjXa\KC˄-Ѷis)vWM%mF?'rsAs@veCbNFKc 5u! $C!Y>&bI0[آwܯg9gW+F(&Ȳfz؞FT=$šw#ջ(ed`},n@!HאQ?nҨc -04rpOT:W!]}\H bKN%C[ e67񐵊,ɻ+^J8KA4Ks(Ky6jNFp7K0't}`K;,ϙ f8gE];(0iL(29hx.N8YUdEp;J)@I*i]Q]D¶-5_9JہJR\?C̭hD`H@Rl #qOO!g vYE@TjQp&Oʤdv`k(zg:Tdahft&43tH`,MWw=(N %ќ/ ofAr٤hL+29y5Re8Q)m0Ҫ' $nhj΢̜IJdOeeHa4_CԎJ[FԈAS)-F*:4!FOw77/IHrt.YB4KPDBBܒ;Np xnx )I yym%@rF݌B8/D*hJh,nըFAY-ę7G,J6k]KxD4d Dɶnsk%'-)7lCoRI>Z:L{+ȤJJ5O-D#v{#Y}] F\sf6DAC,`bԠITX揑pe6pENv;޸Piyew}%М2jȫLהZ+ 5H5 m0 D1"oo\^[-ִ`nSIrtƩ,t8G$Rީ!9O^V6w3PnM\,0 ' >+"k*mPrtȋH\Q|0Qu{&`-3g;ÛH:H]݈Itذ!gvԏF[%eQĞ p aU .ħuh{b/DQ tAij+L#/p!",;rMNk+D<Ȣe: ="&EL4ḚPzE`=3;14E+s3M!{mN? =啵fg*-,εQ2a4-䨸.Gl<i;%EOI8l9B©=Z⠜_,w+r2'91_T{-ItM P)wrCo]xP\ɘM9Dݥ2ZUЗ̤]I0XWu\rm͵p?O~k,g?*ޓ#"9'A%p ϫ),ĿeLf`TP4-cvm%,+!VL&/jCPra({PBEb(zM0nwvctjP$bǚ0\ua]luEmu=mڅ!8k7 vUWG:Ziǭ-q]K)g <PsQ+E>+P5ΊrG XRJ#tRӑhd& І.k(~Y0Ҍ{Cz"))K$cA0ڍK+z yE@W6I,H~]S0 u1 5l H3B|U'x:32;YۺZ̫:Ⱥ-c.;}q8e b@,˦bڋL⧢[%,)OPhp9v oK@JT }ho3B* AhHuF/޳)L=HwЦD-ꚑ+,GSy,{u&"mߨ$xu6^}t*ѣ؛;7_bo޼H7a^=}t0V=>^h^\/YS؛Wao>z)؛Gw`/~p ~'>_?x7̉bu x+Iot'lSj3!_Vz d'Z{B~Cؖ5Ѽfԙ̫rD/L`mxvԏ巕|mn`y{p!)o?!?Y'~,l?o>n7Wo8<3g B̸b~`%[͗3ֹs1#a# 8i]$rzrz'6qTP%ůY#N%~dJ:\$jjeqb<ʨEKA(h ckhIBe9 ڵ&;d Oq,yHKzk\Z(ġKͭb!xcyÍ{#M(}'ڎI28OXe1_iԾВD.iꩴMf2(/vAo C ϺO!aM;-NfX.!7G6vI1L^gH|h@mS`NwǢ5J8bOH[̸'fe3'ˈ+'Xu9,Kٿ;-V"!i>;6p$Yua01G.$"T|cv' QY, Cu{WЍ1ьu@6X6D(Vak$gYK~p _:B_ ZL9ovВXDS"c7bez7[:p!n>IC lէrw+궏vH?=Vrfۛofvf5yz~||Xo~!U럏{_/36ts{9cx\u_o76=>X?6jyA|X~"i 6+w᜷`%Y] -ʸ,sFMl_捥/_UԾZ?OBnWWIk1G[}<^vܻ_q_oW_m~v~ڑ/hy> z=W#qÄ]?7_<=6OK}ȇ iux|=)q3 Qr=a|}GX,|T-AQ=_F{2gYޅEe?2ѻmzz~JB%IٴRgk fq"GD=e|$uRdo, ޅ+u€QZ_`l\8cW8R`rCٺC;Zr>M^/Y_M(y}%fMe"DwX?8W̓Xh~_ŖիgX}9S,ԇ#ި~N 7BH7,jė Mf_B.U5#$*W63?=P&f{}x;BPo"tpщg h^V.RO?Yl3JK*}ZG]BggoFnC&Wn'c ~}}p0wBaG$Pf#'>a(bd2WsۊqAĽ[N ! ,<>\0 &:ijs(f2`5"n߀Jp3 9*»[?^q~ZTx)H]t0kz^jaMN>Js'y[\Vl1 YSӏTƻ #?Sz˼ Dǝy<<1h,- P$nC;MhF)G9i3f0C)W̏ԣ܊.v9 0g!F~^kl>|昒6kp' ϯaXlCFBuc+|=O,>+] ǣ|9X{4hva_>ה2KD,Lc(jH_%ُ 9^DЯm} |Cdc6J{bwGx_ܠDHnGΣ"՟jddl#(#P@?hfQa#$Eb~$U}[ݭWWs6+܀oWG猻Ü]g8ȒmrRY>:q]O=Oracle Corporation, OU=Corporate Object Signing, OU=Solaris Signed Execution, CN=Solaris 11NE*+1I#',厚Ljơs jK n~7L:L~1t+/ٮApdw֪/)ɰ.<*~9^M1nYɒVi٧;Z% e2)9an&n/:Xrbc*“ 3+9IjZV`pGy+UEKGUAZ@Mr&1.2.840.113549.1.1.11@  M*" 2(84-o84 7X4+? BQ Ju@(K2@8}[ȀBCeo