function GetList($arParams = array())
 {
     global $USER, $CACHE_MANAGER;
     $bLoadUsers = isset($arParams['LOAD_USERS']) && $arParams['LOAD_USERS'] == 'N' ? false : true;
     $bLoadChats = isset($arParams['LOAD_CHATS']) && $arParams['LOAD_CHATS'] == 'N' ? false : true;
     $arGroups = array();
     if (defined("BX_COMP_MANAGED_CACHE")) {
         $ttl = 2592000;
     } else {
         $ttl = 600;
     }
     $bVoximplantEnable = IsModuleInstalled('voximplant');
     $bBusShowAll = !IsModuleInstalled('intranet') && COption::GetOptionInt('im', 'contact_list_show_all_bus');
     $bIntranetEnable = false;
     $arGroupStatus = CUserOptions::GetOption('IM', 'groupStatus');
     if (CModule::IncludeModule('intranet') && CModule::IncludeModule('iblock')) {
         $bIntranetEnable = true;
         if (!(CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser())) {
             if (($iblock_id = COption::GetOptionInt('intranet', 'iblock_structure', 0)) > 0) {
                 $cache_id = 'im_structure_' . $iblock_id;
                 $obIMCache = new CPHPCache();
                 $cache_dir = '/bx/imc/structure';
                 if ($obIMCache->InitCache($ttl, $cache_id, $cache_dir)) {
                     $tmpVal = $obIMCache->GetVars();
                     $arStructureName = $tmpVal['STRUCTURE_NAME'];
                     unset($tmpVal);
                 } else {
                     if (defined("BX_COMP_MANAGED_CACHE")) {
                         $CACHE_MANAGER->StartTagCache($cache_dir);
                     }
                     $arResult["Structure"] = array();
                     $sec = CIBlockSection::GetList(array("left_margin" => "asc", "SORT" => "ASC"), array("ACTIVE" => "Y", "IBLOCK_ID" => $iblock_id), false, array('ID', 'NAME', 'DEPTH_LEVEL', 'IBLOCK_SECTION_ID'));
                     $arStructureName = array();
                     while ($ar = $sec->GetNext(true, false)) {
                         if ($ar['DEPTH_LEVEL'] > 1) {
                             $ar['NAME'] .= ' / ' . $arStructureName[$ar['IBLOCK_SECTION_ID']];
                         }
                         $arStructureName[$ar['ID']] = $ar['NAME'];
                     }
                     if (defined("BX_COMP_MANAGED_CACHE")) {
                         $CACHE_MANAGER->RegisterTag('iblock_id_' . $iblock_id);
                         $CACHE_MANAGER->EndTagCache();
                     }
                     if ($obIMCache->StartDataCache()) {
                         $obIMCache->EndDataCache(array('STRUCTURE_NAME' => $arStructureName));
                     }
                 }
                 unset($obIMCache);
                 foreach ($arStructureName as $key => $value) {
                     if (strlen($value) > 0) {
                         $arGroups[$key] = array('id' => $key, 'status' => isset($arGroupStatus[$key]) && $arGroupStatus[$key] == 'open' ? 'open' : 'close', 'name' => $value);
                     }
                 }
             }
         }
     } else {
         if ($bBusShowAll) {
             $arGroups['all'] = array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL'));
         }
     }
     $arGroups['chat'] = array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS'));
     $arGroups['other'] = array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_OTHER_2'));
     $arWoGroups = array('all' => array('id' => 'all', 'status' => isset($arGroupStatus['all']) && $arGroupStatus['all'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_ALL')), 'chat' => array('id' => 'chat', 'status' => isset($arGroupStatus['chat']) && $arGroupStatus['chat'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_CHATS')), 'other' => array('id' => 'other', 'status' => isset($arGroupStatus['other']) && $arGroupStatus['other'] == 'open' ? 'open' : 'close', 'name' => $bIntranetEnable ? GetMessage('IM_CL_GROUP_OTHER') : GetMessage('IM_CL_GROUP_OTHER_2')));
     $arUserSG = array();
     $arUsers = array();
     $arUserInGroup = array();
     $arWoUserInGroup = array();
     $arExtranetUsers = array();
     if (CModule::IncludeModule('extranet') && CModule::IncludeModule("socialnetwork")) {
         $cache_id = 'im_user_sg_' . $USER->GetID();
         $obSGCache = new CPHPCache();
         $cache_dir = '/bx/imc/sonet';
         if ($obSGCache->InitCache($ttl, $cache_id, $cache_dir)) {
             $tmpVal = $obSGCache->GetVars();
             $arUserSG = $tmpVal['USER_SG'];
             $arExtranetUsers = $tmpVal['EXTRANET_USERS'];
             $arUserInGroup = $tmpVal['USER_IN_GROUP'];
             $arWoUserInGroup = $tmpVal['WO_USER_IN_GROUP'];
             unset($tmpVal);
         } else {
             if (defined("BX_COMP_MANAGED_CACHE")) {
                 $CACHE_MANAGER->StartTagCache($cache_dir);
             }
             $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("USER_ID" => $USER->GetID(), "<=ROLE" => SONET_ROLES_USER, "GROUP_SITE_ID" => CExtranet::GetExtranetSiteID(), "GROUP_ACTIVE" => "Y", "GROUP_CLOSED" => "N"), false, false, array("ID", "GROUP_ID", "GROUP_NAME"));
             $arUserSocNetGroups = array();
             while ($ar = $dbUsersInGroup->GetNext(true, false)) {
                 $arUserSocNetGroups[] = $ar["GROUP_ID"];
                 $arUserSG['SG' . $ar['GROUP_ID']] = array('id' => 'SG' . $ar['GROUP_ID'], 'status' => isset($arGroupStatus['SG' . $ar['GROUP_ID']]) && $arGroupStatus['SG' . $ar['GROUP_ID']] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SG') . $ar['GROUP_NAME']);
                 if (defined("BX_COMP_MANAGED_CACHE")) {
                     $CACHE_MANAGER->RegisterTag('sonet_group_' . $ar['GROUP_ID']);
                     $CACHE_MANAGER->RegisterTag('sonet_user2group_G' . $ar['GROUP_ID']);
                 }
             }
             if (count($arUserSocNetGroups) > 0) {
                 $dbUsersInGroup = CSocNetUserToGroup::GetList(array(), array("GROUP_ID" => $arUserSocNetGroups, "<=ROLE" => SONET_ROLES_USER, "USER_ACTIVE" => "Y", "USER_CONFIRM_CODE" => false), false, false, array("ID", "USER_ID", "GROUP_ID"));
                 while ($ar = $dbUsersInGroup->GetNext(true, false)) {
                     if ($ar["USER_ID"] == $USER->GetID()) {
                         continue;
                     }
                     $arExtranetUsers[$ar["USER_ID"]] = $ar["USER_ID"];
                     if (isset($arUserInGroup["SG" . $ar["GROUP_ID"]])) {
                         $arUserInGroup["SG" . $ar["GROUP_ID"]]['users'][] = $ar["USER_ID"];
                     } else {
                         $arUserInGroup["SG" . $ar["GROUP_ID"]] = array('id' => "SG" . $ar["GROUP_ID"], 'users' => array($ar["USER_ID"]));
                     }
                     if (isset($arWoUserInGroup["extranet"])) {
                         $arWoUserInGroup["extranet"]['users'][] = $ar["USER_ID"];
                     } else {
                         $arWoUserInGroup["extranet"] = array('id' => "extranet", 'users' => array($ar["USER_ID"]));
                     }
                 }
                 if (isset($arWoUserInGroup['extranet']) && isset($arWoUserInGroup['extranet']['users'])) {
                     $arWoUserInGroup['extranet']['users'] = array_values(array_unique($arWoUserInGroup['extranet']['users']));
                 }
             }
             if (defined("BX_COMP_MANAGED_CACHE")) {
                 $CACHE_MANAGER->EndTagCache();
             }
             if ($obSGCache->StartDataCache()) {
                 $obSGCache->EndDataCache(array('USER_SG' => $arUserSG, 'EXTRANET_USERS' => $arExtranetUsers, 'USER_IN_GROUP' => $arUserInGroup, 'WO_USER_IN_GROUP' => $arWoUserInGroup));
             }
         }
         unset($obSGCache);
         if (is_array($arUserSG)) {
             $arGroups = $arGroups + $arUserSG;
         }
     }
     $bFriendEnable = false;
     if ((!CModule::IncludeModule('extranet') || !CExtranet::IsExtranetSite()) && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
         $bFriendEnable = true;
         $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
         if ($dbFriends) {
             while ($arFriends = $dbFriends->GetNext(true, false)) {
                 $friendId = $pref = IntVal($USER->GetID()) == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
                 $arFriendUsers[$friendId] = $friendId;
                 if (isset($arUserInGroup["friends"])) {
                     $arUserInGroup["friends"]['users'][] = $friendId;
                 } else {
                     $arUserInGroup["friends"] = array('id' => "friends", 'users' => array($friendId));
                 }
                 if (isset($arWoUserInGroup["all"])) {
                     $arWoUserInGroup["all"]['users'][] = $friendId;
                 } else {
                     $arWoUserInGroup["all"] = array('id' => "all", 'users' => array($friendId));
                 }
             }
         }
         $arGroups['friends'] = array('id' => 'friends', 'status' => isset($arGroupStatus['friends']) && $arGroupStatus['friends'] == 'close' ? 'close' : 'open', 'name' => GetMessage('IM_CL_GROUP_FRIENDS'));
     }
     $arFilter = array('=ACTIVE' => 'Y', '=CONFIRM_CODE' => false);
     if (CModule::IncludeModule('extranet')) {
         if (!CExtranet::IsIntranetUser()) {
             $arFilter['=ID'] = array_merge(array($USER->GetId()), $arExtranetUsers);
         }
         $arWoGroups['extranet'] = array('id' => 'extranet', 'status' => isset($arGroupStatus['extranet']) && $arGroupStatus['extranet'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_EXTRANET'));
     }
     $arGroups['search'] = array('id' => 'search', 'status' => isset($arGroupStatus['search']) && $arGroupStatus['search'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SEARCH'));
     $arWoGroups['search'] = array('id' => 'search', 'status' => isset($arGroupStatus['search']) && $arGroupStatus['search'] == 'open' ? 'open' : 'close', 'name' => GetMessage('IM_CL_GROUP_SEARCH'));
     if ($bLoadUsers) {
         if ($bFriendEnable) {
             if (!$bIntranetEnable && !$bBusShowAll) {
                 $arFilter['=ID'][] = $USER->GetId();
                 if (!empty($arFriendUsers)) {
                     $arFilter['=ID'] = array_merge($arFilter['=ID'], $arFriendUsers);
                 }
                 if (!empty($arExtranetUsers)) {
                     $arFilter['=ID'] = array_merge($arFilter['=ID'], $arExtranetUsers);
                 }
             }
         }
         $bCLCacheEnable = false;
         if ($bIntranetEnable && (!$bFriendEnable || $bBusShowAll)) {
             $bCLCacheEnable = true;
         }
         if ($bCLCacheEnable && CModule::IncludeModule('extranet') && !CExtranet::IsIntranetUser()) {
             $bCLCacheEnable = false;
         }
         $bVoximplantEnable = IsModuleInstalled('voximplant');
         $bColorEnabled = IM\Color::isEnabled();
         $bOpenChatEnabled = CIMMessenger::CheckEnableOpenChat();
         $nameTemplate = self::GetUserNameTemplate(SITE_ID);
         $nameTemplateSite = CSite::GetNameFormat(false);
         $cache_id = 'im_contact_list_v11_' . $nameTemplate . '_' . $nameTemplateSite . (!empty($arExtranetUsers) ? '_' . $USER->GetID() : '') . $bVoximplantEnable . $bColorEnabled . $bOpenChatEnabled;
         $obCLCache = new CPHPCache();
         $cache_dir = '/bx/imc/contact';
         $arUsersToGroup = array();
         $arUserInGroupStructure = array();
         if ($bCLCacheEnable && $obCLCache->InitCache($ttl, $cache_id, $cache_dir)) {
             $tmpVal = $obCLCache->GetVars();
             $arUsers = $tmpVal['USERS'];
             $arWoUserInGroup['all'] = $tmpVal['WO_USER_IN_GROUP_ALL'];
             $arUsersToGroup = $tmpVal['USER_TO_GROUP'];
             $arUserInGroupStructure = $tmpVal['USER_IN_GROUP'];
             unset($tmpVal);
             $arOnline = CIMStatus::GetList();
             foreach ($arUsers as $userId => $value) {
                 $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false;
                 $arUsers[$userId]['status'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['status'] : 'offline';
                 $arUsers[$userId]['idle'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['idle'] : 0;
                 $arUsers[$userId]['mobileLastDate'] = isset($arOnline['users'][$userId]) ? $arOnline['users'][$userId]['mobileLastDate'] : 0;
                 if ($arOnline['users'][$userId]['color']) {
                     $arUsers[$userId]['color'] = $arOnline['users'][$userId]['color'];
                 }
             }
         } else {
             $arSelect = array("ID", "LAST_NAME", "NAME", "LOGIN", "PERSONAL_PHOTO", "SECOND_NAME", "PERSONAL_BIRTHDAY", "WORK_POSITION", "PERSONAL_GENDER", "EXTERNAL_AUTH_ID");
             // TODO , "TIME_ZONE_OFFSET"
             if ($bIntranetEnable) {
                 $arSelect[] = 'UF_DEPARTMENT';
             }
             if ($bVoximplantEnable) {
                 $arSelect[] = 'UF_VI_PHONE';
             }
             $query = new \Bitrix\Main\Entity\Query(\Bitrix\Main\UserTable::getEntity());
             $query->registerRuntimeField('', new \Bitrix\Main\Entity\ReferenceField('ref', 'Bitrix\\Im\\StatusTable', array('=this.ID' => 'ref.USER_ID')));
             $query->addSelect('ref.COLOR', 'COLOR')->addSelect('ref.STATUS', 'STATUS')->addSelect('ref.IDLE', 'IDLE')->addSelect('ref.MOBILE_LAST_DATE', 'MOBILE_LAST_DATE');
             $sago = Bitrix\Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime('-180');
             $query->registerRuntimeField('', new \Bitrix\Main\Entity\ExpressionField('IS_ONLINE_CUSTOM', 'CASE WHEN LAST_ACTIVITY_DATE > ' . $sago . ' THEN \'Y\' ELSE \'N\' END'));
             $query->addSelect('IS_ONLINE_CUSTOM');
             foreach ($arSelect as $value) {
                 $query->addSelect($value);
             }
             foreach ($arFilter as $key => $value) {
                 $query->addFilter($key, $value);
             }
             $resultQuery = $query->exec();
             $arExtraUser = array();
             while ($arUser = $resultQuery->fetch()) {
                 $skipUser = false;
                 if (is_array($arUser["UF_DEPARTMENT"]) && !empty($arUser["UF_DEPARTMENT"])) {
                     foreach ($arUser["UF_DEPARTMENT"] as $dep_id) {
                         if (isset($arUserInGroupStructure[$dep_id])) {
                             $arUserInGroupStructure[$dep_id]['users'][] = $arUser["ID"];
                         } else {
                             $arUserInGroupStructure[$dep_id] = array('id' => $dep_id, 'users' => array($arUser["ID"]));
                         }
                     }
                     if (isset($arWoUserInGroup['all'])) {
                         $arWoUserInGroup['all']['users'][] = $arUser["ID"];
                     } else {
                         $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"]));
                     }
                 } else {
                     if ($bBusShowAll) {
                         $skipUser = false;
                         if (isset($arWoUserInGroup['all'])) {
                             $arWoUserInGroup['all']['users'][] = $arUser["ID"];
                         } else {
                             $arWoUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"]));
                         }
                         if (isset($arUserInGroup['all'])) {
                             $arUserInGroup['all']['users'][] = $arUser["ID"];
                         } else {
                             $arUserInGroup['all'] = array('id' => 'all', 'users' => array($arUser["ID"]));
                         }
                     } else {
                         $skipUser = true;
                         if (isset($arExtranetUsers[$arUser["ID"]])) {
                             $skipUser = false;
                         } elseif (isset($arFriendUsers[$arUser["ID"]])) {
                             $skipUser = false;
                         } elseif ($arUser["ID"] == $USER->GetID()) {
                             $skipUser = false;
                         }
                     }
                 }
                 if (!$skipUser) {
                     foreach ($arUser as $key => $value) {
                         $arUser[$key] = !is_array($value) && !is_object($value) ? htmlspecialcharsEx($value) : $value;
                     }
                     $arExtraUser[$arUser["ID"]] = $arUser;
                     $arFileTmp = CFile::ResizeImageGet($arUser["PERSONAL_PHOTO"], array('width' => 58, 'height' => 58), BX_RESIZE_IMAGE_EXACT, false, false, true);
                     $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F');
                     if (isset($arUser['COLOR']) && strlen($arUser['COLOR']) > 0) {
                         $color = IM\Color::getColor($arUser['COLOR']);
                     }
                     if (!$color) {
                         $color = self::GetUserColor($arUser["ID"], $arUser['PERSONAL_GENDER'] == 'M' ? 'M' : 'F');
                     }
                     $arUsersToGroup[$arUser['ID']] = $arUser["UF_DEPARTMENT"];
                     $arUsers[$arUser["ID"]] = array('id' => $arUser["ID"], 'name' => CUser::FormatName($nameTemplateSite, $arUser, true, false), 'nameList' => CUser::FormatName($nameTemplate, $arUser, true, false), 'workPosition' => $arUser['WORK_POSITION'], 'color' => $color, 'avatar' => empty($arFileTmp['src']) ? '/bitrix/js/im/images/blank.gif' : $arFileTmp['src'], 'status' => 'offline', 'birthday' => $arUser['PERSONAL_BIRTHDAY'], 'gender' => $arUser['PERSONAL_GENDER'] == 'F' ? 'F' : 'M', 'phoneDevice' => $bVoximplantEnable && $arUser['UF_VI_PHONE'] == 'Y', 'extranet' => self::IsExtranet($arUser), 'tzOffset' => intval($arUser['TIME_ZONE_OFFSET']), 'network' => $arUser['EXTERNAL_AUTH_ID'] == self::NETWORK_AUTH_ID, 'profile' => CIMContactList::GetUserPath($arUser["ID"]));
                 }
             }
             if (isset($arWoUserInGroup['all']) && isset($arWoUserInGroup['all']['users'])) {
                 $arWoUserInGroup['all']['users'] = array_values(array_unique($arWoUserInGroup['all']['users']));
             }
             if ($bCLCacheEnable) {
                 if (defined("BX_COMP_MANAGED_CACHE")) {
                     $CACHE_MANAGER->StartTagCache($cache_dir);
                     $CACHE_MANAGER->RegisterTag("IM_CONTACT_LIST");
                     $CACHE_MANAGER->RegisterTag($bVoximplantEnable ? "USER_CARD" : "USER_NAME");
                     $CACHE_MANAGER->EndTagCache();
                 }
                 if ($obCLCache->StartDataCache()) {
                     $obCLCache->EndDataCache(array('USERS' => $arUsers, 'WO_USER_IN_GROUP_ALL' => $arWoUserInGroup['all'], 'USER_TO_GROUP' => $arUsersToGroup, 'USER_IN_GROUP' => $arUserInGroupStructure));
                 }
             }
             foreach ($arUsers as $userId => $arUser) {
                 $arUsers[$userId]['birthday'] = $bIntranetEnable ? CIntranetUtils::IsToday($arUsers[$userId]['birthday']) : false;
                 $arUsers[$userId]['status'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' ? $arExtraUser[$userId]['STATUS'] : 'offline';
                 $arUsers[$userId]['idle'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['IDLE']) ? $arExtraUser[$userId]['IDLE']->getTimestamp() : 0;
                 $arUsers[$userId]['mobileLastDate'] = $arExtraUser[$userId]['IS_ONLINE_CUSTOM'] == 'Y' && is_object($arExtraUser[$userId]['MOBILE_LAST_DATE']) ? $arExtraUser[$userId]['MOBILE_LAST_DATE']->getTimestamp() : 0;
             }
         }
         //uasort($ar, create_function('$a, $b', 'if($a["stamp"] < $b["stamp"]) return 1; elseif($a["stamp"] > $b["stamp"]) return -1; else return 0;'));
         if (is_array($arUsersToGroup[$USER->GetID()])) {
             foreach ($arUsersToGroup[$USER->GetID()] as $dep_id) {
                 if (isset($arGroups[$dep_id])) {
                     $arGroups[$dep_id]['status'] = isset($arGroupStatus[$dep_id]) && $arGroupStatus[$dep_id] == 'close' ? 'close' : 'open';
                 }
             }
         }
         foreach ($arUserInGroupStructure as $key => $val) {
             $arUserInGroup[$key] = $val;
         }
         unset($arUsersToGroup, $arUserInGroupStructure);
     }
     $arChats = array();
     if ($bLoadChats) {
         $bColorEnabled = IM\Color::isEnabled();
         $bOpenChatEnabled = CIMMessenger::CheckEnableOpenChat();
         $cache_id = 'im_chats_v7_' . $USER->GetID() . '_' . $bColorEnabled . '_' . $bOpenChatEnabled;
         $obCLCache = new CPHPCache();
         $cache_dir = '/bx/imc/chats';
         if ($obCLCache->InitCache($ttl, $cache_id, $cache_dir)) {
             $tmpVal = $obCLCache->GetVars();
             $arChats = $tmpVal['CHATS'];
             unset($tmpVal);
         } else {
             $arChats = CIMChat::GetChatData(array('SKIP_PRIVATE' => 'Y', 'GET_LIST' => 'Y', 'USER_ID' => $USER->GetID()));
             if (CIMMessenger::CheckEnableOpenChat() && !IM\User::getInstance($USER->GetID())->isExtranet()) {
                 $chatsOpen = CIMChat::GetOpenChatData(array('USER_ID' => $USER->GetID()));
                 foreach ($chatsOpen['chat'] as $key => $value) {
                     $arChats['chat'][$key] = $value;
                 }
                 foreach ($chatsOpen['userInChat'] as $key => $value) {
                     $arChats['userInChat'][$key] = $value;
                 }
                 foreach ($chatsOpen['userCallStatus'] as $key => $value) {
                     $arChats['userCallStatus'][$key] = $value;
                 }
                 foreach ($chatsOpen['userChatBlockStatus'] as $key => $value) {
                     $arChats['userChatBlockStatus'][$key] = $value;
                 }
             }
             if ($obCLCache->StartDataCache()) {
                 $obCLCache->EndDataCache(array('CHATS' => $arChats));
             }
         }
     }
     $arContactList = array('users' => $arUsers, 'groups' => $arGroups, 'chats' => $arChats['chat'], 'woGroups' => $arWoGroups, 'userInGroup' => $arUserInGroup, 'woUserInGroup' => $arWoUserInGroup);
     foreach (GetModuleEvents("im", "OnAfterContactListGetList", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array(&$arContactList));
     }
     return $arContactList;
 }