protected function urlAbsPartAndSplitByRequestedBasePath (\MvcCore\IRequest & $request, $resultUrl, $splitUrl) {
		$doubleSlashPos = mb_strpos($resultUrl, '//');
		$doubleSlashPos = $doubleSlashPos === FALSE
			? 0
			: $doubleSlashPos + 2;
		if (!$splitUrl) {
			$resultSchemePart = mb_substr($resultUrl, 0, $doubleSlashPos);
			$resultAfterScheme = mb_substr($resultUrl, $doubleSlashPos);
			$resultAfterScheme = str_replace('//', '/', $resultAfterScheme);
			if ($this->flags[0] === static::FLAG_SCHEME_ANY) {
				$resultUrl = $request->GetScheme() . '//' . $resultAfterScheme;
			} else {
				$resultUrl = $resultSchemePart . $resultAfterScheme;
			}
			return [$resultUrl];
		} else {
			$nextSlashPos = mb_strpos($resultUrl, '/', $doubleSlashPos);
			if ($nextSlashPos === FALSE) {
				$queryStringPos = mb_strpos($resultUrl, '?', $doubleSlashPos);
				$baseUrlPartEndPos = $queryStringPos === FALSE 
					? mb_strlen($resultUrl) 
					: $queryStringPos;
			} else {
				$baseUrlPartEndPos = $nextSlashPos;
			}
			$requestedBasePath = $request->GetBasePath();
			$basePathLength = mb_strlen($requestedBasePath);
			if ($basePathLength > 0) {
				$basePathPos = mb_strpos($resultUrl, $requestedBasePath, $baseUrlPartEndPos);
				if ($basePathPos === $baseUrlPartEndPos) 
					$baseUrlPartEndPos += $basePathLength;
			}
			$basePart = mb_substr($resultUrl, 0, $baseUrlPartEndPos);
			if ($this->flags[0] === static::FLAG_SCHEME_ANY)
				$basePart = $request->GetScheme() . $basePart;
			$pathAndQueryPart = str_replace('//', '/', mb_substr($resultUrl, $baseUrlPartEndPos));
			return [$basePart, $pathAndQueryPart];
		}
	}