text: from discord.ext import commands, tasks, colour
  from googleapiclient.discovery import build
  import os, discord, random, json, asyncio, requests, praw, datetime,  translate, re
  from itertools import cycle
  from discord.embeds import Embed
  from asyncio import events
  from translate import Translator
  from io import BytesIO
  from discord.ext.commands import has_permissions
  
  class configs(commands.Cog):
  	
  	def __init__(self, client):
  		self.client = client
  
  
  # banimentos do bot
  
  	def check_person(ctx):
  	    return ctx.author.id != 861803122452332585
  	    
  # cooldown dos comandos
  
  	@commands.Cog.listener()
  	async def on_command_error(self, ctx, error):
  	       if isinstance(error, commands.CommandOnCooldown):
  	           print("Comando está em cooldown.")
  	           await ctx.send(
              '{} **Aguarde alguns segundos para digitar outro comando! *{:.2f}s*** :stopwatch: '.format(ctx.author.mention ,error.retry_after))
    
  #TRANCAR CHAT POR TEXTO
  
  	@commands.command(aliases=['trancar'])
  	@commands.cooldown(1, 2, commands.BucketType.guild)
  	@commands.has_permissions(manage_channels=True)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def lock(self, ctx):
  	   await ctx.channel.set_permissions(ctx.guild.default_role, send_messages=False)
  	   await ctx.send(ctx.channel.mention + " ***agora está trancado!***")
  	   await ctx.message.delete()
  
  
  	@lock.error
  	async def lock_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.reply(embed=embed, delete_after=15)
  	           await ctx.messsgem.delete()
  
  #DESTRANCAR CHAT DE TEXTO
  
  	@commands.command(aliases=['destrancar'])
  	@commands.cooldown(1, 2, commands.BucketType.guild)
  	@commands.has_permissions(manage_channels=True)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def unlock(self, ctx):
  	    await ctx.channel.set_permissions(ctx.guild.default_role, send_messages=True)
  	    await ctx.send(ctx.channel.mention + " ***foi destrancado!***")
  	    await ctx.message.delete()
  
  
  	@unlock.error
  	async def unlock_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  
  # impedir que membros comuns vejam o chat
  
  	@commands.command(aliases=["blockmember"])
  	@commands.cooldown(1, 2, commands.BucketType.guild)
  	@commands.has_permissions(manage_channels=True)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def seelock(self, ctx):
  	   await ctx.channel.set_permissions(ctx.guild.default_role, read_messages=False)
  	   await ctx.send(ctx.channel.mention + " ***Membros comuns não podem ver mensagens!***")
  	   await ctx.message.delete()
  
  	@seelock.error
  	async def seelock_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.send(embed=embed)
  	           await ctx.message.delete()
  	    
  # permitir que membros comuns vejam o chat
  
  	@commands.command(aliases=["unlockmember"])
  	@commands.cooldown(1, 2, commands.BucketType.guild)
  	@commands.has_permissions(manage_channels=True)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def seeunlock(self, ctx):
  	   await ctx.channel.set_permissions(ctx.guild.default_role, read_messages=True)
  	   await ctx.send(ctx.channel.mention + " ***Membros comuns agora podem ver mensagens!***")
  	   await ctx.message.delete()
  
  	@seeunlock.error
  	async def seeunlock_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  
  
  
  #CRIAR O CARGO MUTADO AO ENTRAR NO SERVER
  
  	@commands.Cog.listener()
  	async def on_guild_join(self, guild):
  	       print('Me adicionaram em um servidor: {}'.format(guild.name))
  	       cargo = discord.utils.get(guild.roles, name='Mutado')
  	       if cargo == None:
  	           perms = discord.Permissions(send_messages=False, read_messages=True)
  	           await guild.create_role(name="Mutado", permissions=perms)
  	       else:
  	           pass
  
  # traduzir frases
  	@commands.command(aliases=['traduzir'])
  	@commands.check(check_person)
  	@commands.cooldown(1, 4, commands.BucketType.guild)
  	@commands.guild_only()
  	async def translate(self, ctx, fr, to, *, message):
  	   autor = ctx.author
  	   s = Translator(from_lang="{}".format(fr),
                     to_lang="{}".format(to))
   
  	   res = s.translate(message)
  	   await ctx.reply(f'{res}')
  
  	@translate.error
  	async def translate_error(self, ctx, error):
  	               if isinstance(error, commands.MissingRequiredArgument):
  	                   embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	                   embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	                   embed.add_field(name = 'Parece que você esqueceu de algo...', value = f'{ctx.author.mention} Escreva o idioma do texto que você escreveu e escreva o idioma em que você quer que o texto fique. Exemplo:\n\n`!translate Portuguese English você esta bem?`', inline=True)
  	                   await ctx.message.delete()
  	                   await ctx.send(embed=embed, delete_after=30)
  
  # configurar permissoes do chat
  
  	@commands.command(aliases=['configurar'])
  	@has_permissions(manage_channels=True)
  	@commands.check(check_person)
  	@commands.cooldown(1, 2, commands.BucketType.guild)
  	@commands.guild_only()
  	async def setup(self, ctx):
  	   autor = ctx.author
  	   cargo = discord.utils.get(ctx.guild.roles, name='Mutado')
  	   await ctx.channel.set_permissions(cargo, send_messages=False)
  	   await ctx.channel.purge(limit=1)
  	   embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	   embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	   embed.add_field(name = 'Chat configurado!', value = f'**O chat: {ctx.channel.mention} foi configurado**!', inline=True)
  	   embed.set_footer(text=f"{ctx.channel.id}")
  	   await ctx.send(embed=embed, delete_after=15)
  	   await msg.delete()
  		
  #SISTEMA DE INFORMAÇÃO DE USUARIOS
  	
  	@commands.command()
  	@commands.guild_only()
  	async def userinfo(self, ctx, member: discord.Member):
  		if (not ctx.author.guild_permissions.manage_messages):
  			embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  			embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  			embed.add_field(name = 'Acesso negado', value = f'**{ctx.author.mention} você não tem permissão para usar este comando**', inline=True)
  			await ctx.message.delete()
  			await ctx.send(embed=embed, delete_after=15)
  			return
  			
  		roles = [role for role in member.roles]
  		
  		embed = discord.Embed(colour=member.color, timestamp = ctx.message.created_at)
  		
  		embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  		
  		embed.set_author(name=f"Informações do usuário")
  		embed.set_thumbnail(url=member.avatar_url)
  		embed.set_footer(text=f"Solicitado por {ctx.author}", icon_url=ctx.author.avatar_url)
  		embed.add_field(name="**ID**", value=member.id)
  		embed.add_field(name="**Nome do membro**:", value= member.display_name)
  		
  		embed.add_field(name="**Conta criada**:", value= member.created_at.strftime("%d/%m/%Y as %H:%M"))
  		embed.add_field(name="**Entrou no servidor**:", value= member.joined_at.strftime("%d/%m/%Y as %H:%M"))
  		
  		embed.add_field(name=f"**Cargo**: ({len(roles)})", value=" ".join([role.mention for role in roles]))
  		
  		await ctx.message.delete()
  		
  		await ctx.send(embed=embed, delete_after=15)
  		
  #SISTEMA DE KICK
  
  	@commands.command()
  	@commands.guild_only()
  	async def kick(self, ctx, member: discord.Member, *, reason=None):
  	        		    if (not ctx.author.guild_permissions.manage_messages):
  	        		        embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	        		        embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	        		        embed.add_field(name = 'Acesso negado', value = f'**\n\n{ctx.author.mention} você não tem permissão para usar este comando**', inline=True)
  	        		        await ctx.message.delete()
  	        		        await ctx.send(embed=embed, delete_after=15)
  	        		        
  	        		        return
  
  	        		    await ctx.guild.kick(user=member, reason=reason)
  	        		    embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	        		    embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	        		    embed.add_field(name = 'Acesso liberado!', value = f'\n\n**ADM**: {ctx.author.mention}\n\n**MEMBRO**: {member.mention}\n\n**MOTIVO**: {reason}**', inline=True)
  	        		    await ctx.send(embed=embed)
  	        		    await ctx.message.delete()
  
  # colocar chat no modo lento / tirar chat do modo lento
  
  	@commands.command(aliases=['setdalay'])
  	@has_permissions(manage_channels=True)
  	@commands.cooldown(1, 5, commands.BucketType.guild)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def lento(self, ctx, seconds: int):
  	   await ctx.channel.edit(slowmode_delay=seconds)
  	   if seconds > 0:
  	           embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	           embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	           embed.add_field(name = 'Acesso liberado', value = f'**O chat: {ctx.channel.mention} está com {seconds} segundos de delay**', inline=True)
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  	   if seconds == 0:
  	           embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	           embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	           embed.add_field(name = 'Acesso liberado', value = f'**O chat {ctx.channel.mention} saiu do modo delay**', inline=True)
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  	  
  
  
  	@lento.error
  	async def lento_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Ops, parece que você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.reply(embed=embed, dele_after=15)
  	           await ctx.message.delete()
  	           if isinstance(error, commands.MissingRequiredArgument):
  	               embed = discord.Embed(
              title='Parece que você esqueceu de algo...',
              description='Coloque os segundo de delay que você quer que o chat tenha.',
              color=discord.Colour.dark_purple()
          )
  	               await ctx.reply(embed=embed, delete_after=15)
  	               await ctx.message.delete()
  
          
  
  #SISTEMA DE BANIR
  		
  	@commands.command()
  	@commands.guild_only()
  	async def ban(self, ctx, member: discord.Member, *, reason=None):
  	    if (not ctx.author.guild_permissions.manage_messages):
  	        		        embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	        		        embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	        		        embed.add_field(name = 'Acesso negado', value = f'**\n\n{ctx.author.mention} você não tem permissão para usar este comando**', inline=True)
  	        		        await ctx.message.delete()
  	        		        await ctx.send(embed=embed, delete_after=15)
  	        		        return
  	        
  	    await ctx.guild.ban(user=member, reason=reason)
  	    
  	    embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	    embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	    embed.add_field(name = 'Acesso liberado!', value = f'\n\n**ADM**: {ctx.author.mention}\n\n**MEMBRO**: {member.mention}\n\n**MOTIVO**: {reason}', inline=True)
  	    await ctx.send(embed=embed)
  	    await ctx.message.delete()
  	
  #SISTEMA DE DESBANIR
  		
  	@commands.command()
  	@commands.guild_only()
  	async def unban(self, ctx, member, *, reason=None):
  	    if (not ctx.author.guild_permissions.manage_messages):
  	        		        embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	        		        embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	        		        embed.add_field(name = 'Acesso negado', value = f'\n\n**{ctx.author.mention} você não tem permissão para usar este comando**', inline=True)
  	        		        await ctx.message.delete()
  	        		        await ctx.send(embed=embed, delete_after=15)
  	        		        return
  	        		        
  	    member = await self.client.fetch_user(int(member))
  	    await ctx.guild.unban(member, reason=reason)
  	    
  	    embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	    embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	    embed.add_field(name = 'Acesso liberado!', value = f'\n\n**ADM**: {ctx.author.mention}\n\n**MEMBRO**: {member.mention}\n\n**MOTIVO**: {reason}', inline=True)
  	    await ctx.send(embed=embed)
  	    await ctx.message.delete()
  	    
  
  		
  #SISTEMA PARA MUTAR A PESSOA
  
  	@commands.command(aliases=['mutar'])
  	@has_permissions(manage_roles=True)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def mute(self, ctx, member: discord.Member, *, reason: str = None):
  	   autor = ctx.author
  	   server = ctx.guild
  	   muted = discord.utils.get(ctx.guild.roles, name='Mutado')
  	   await member.add_roles(muted)
  	   embed = discord.Embed(title='USUARIO MUTADO :zipper_mouth:', description=f"Usuario Punido: {member.mention}", color=discord.Colour.dark_purple())
  	   embed.add_field(name=f'Espero que na proxima vez você diga coisas boas!', value=f'{member}')
  	   embed.timestamp= datetime.datetime.utcnow()
  	   embed.set_footer(text='\u200b')
  	   await ctx.send(embed=embed)
  	   await ctx.message.delete()
  	   embed2 = discord.Embed(title='MUTADO', description=f"Você foi silenciado no servidor: **'{server}'** ")
  	   embed2.color = discord.Colour.dark_purple()
  	   embed2.add_field(name='Motivo do mute:', value=f'{reason}')
  	   await member.send(embed=embed2)
  
  
  	@mute.error
  	async def mute_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Ops, parece que você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  	       if isinstance(error, commands.MissingRequiredArgument):
  	           embed = discord.Embed(
              title='Parece que você esqueceu de algo...',
              description='Mencione o membro que você deseja mutar.',
              color=discord.Colour.dark_purple()
          )     
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  	       		        
  
  #SISTEMA DE DESMUTAÇÃO
  
  	@commands.command(aliases=['desmutar'])
  	@has_permissions(manage_roles=True)
  	@commands.check(check_person)
  	@commands.guild_only()
  	async def unmute(self, ctx, member: discord.Member):
  	   server = ctx.guild
  	   muted = discord.utils.get(ctx.guild.roles, name="Mutado")
  	   await member.remove_roles(muted)
  	   embed = discord.Embed(title='MEMBRO DESMUTADO :hushed:', description=f"{member.mention} foi desmutado!",
                            color=discord.Color.green())  
  	   embed.timestamp= datetime.datetime.utcnow()
  	   embed.set_footer(text='\u200b')
  	   await ctx.send(embed=embed, delete_after=15)
  	   await ctx.message.delete()
  	   embed2 = discord.Embed(title='DESMUTADO', description=f"O seu silenciamento no servidor **'{server}'** foi retirado! ")
  	   embed2.color = discord.Colour.dark_purple()
  	   await member.send(embed=embed2)
  
  
  	@unmute.error
  	async def unmute_error(self, ctx, error):
  	       if isinstance(error, commands.MissingPermissions):
  	           embed = discord.Embed(
              title='Comando negado',
              description='Ops, parece que você não tem permissão para usar este comando!',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  	       if isinstance(error, commands.MissingRequiredArgument):
  	           embed = discord.Embed(
              title='Parece que você esqueceu de algo...',
              description='Mencione o membro que você deseja desmutar.',
              color=discord.Colour.dark_purple()
          )
  	           await ctx.send(embed=embed, delete_after=15)
  	           await ctx.message.delete()
  		
  #LIMPAR O CHAT
  
  	@commands.command()
  	@commands.guild_only()
  	async def  clear(self, ctx, amount=11):
  		if (not ctx.author.guild_permissions.manage_messages):
  			embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  			embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  			embed.add_field(name = 'Acesso negado', value = f'\n\n**{ctx.author.mention} você não tem permissão para isso!**', inline=True)
  			await ctx.send(embed=embed, delete_after=15)
  			await ctx.message.delete()
  			return
  		ammount = amount + 1
  		if amount > 101:
  			embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  			embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  			embed.add_field(name = 'Acesso negado', value = f'\n\n**{ctx.author.mention} você não pode excluir mais de 100 mensagens**', inline=True)	
  			await ctx.send(embed=embed, delete_after=15)
  			await ctx.message.delete()
  		else:
  			await ctx.channel.purge(limit=amount)
  			embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  			embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  			embed.add_field(name = 'Acesso liberado', value = f'\n\n**{ctx.author.mention} mensagens apagadas!**', inline=True)
  			reacao1 = await ctx.send(embed=embed, delete_after=15)
  
  #VER O AVATAR DA PESSOA
  
  	@commands.command()
  	@commands.guild_only()
  	async def avatar(self, ctx, member: discord.Member = None):
  		if (not ctx.author.guild_permissions.manage_messages):
  			embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  			embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  			embed.add_field(name = 'Acesso negado!', value = f'\n\n**{ctx.author.mention} você não tem permissão para usar este comando**', inline=True)
  			await ctx.send(embed=embed, delete_after=15)
  			await ctx.message.delete()
  			return
  			
  		if member is None:
  			embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  			embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  			embed.add_field(name = 'Comando Info', value = f'\n\n**{ctx.author.mention} este comando serve para ver o avatar da pessoa**', inline=True)
  			await ctx.send(embed=embed, delete_after=15)
  			await ctx.message.delete()
  			return
  			
  		else:
  			embed2 = discord.Embed(title=f"{member.mention} Avatar!", colour=0x9013fe, timestamp= ctx.message.created_at)
  			embed2.set_image(url=member.avatar_url)
  			await ctx.message.delete()
  			await ctx.send(embed=embed2, delete_after=15)
  
  # ver foto do servidor
  
  	@commands.command(aliases=['fotoserver'])
  	@commands.check(check_person)
  	@commands.cooldown(1, 2, commands.BucketType.guild)
  	@commands.guild_only()
  	async def servericon(self, ctx):
  	   autor = ctx.author
  	   server = ctx.guild
  	   embed = discord.Embed(title=f'{server.name}',
                              description=f'**[Clique aqui para fazer o download da imagem!]({server.icon_url})**')
  	   embed.color = discord.Colour.dark_purple()
  	   embed.set_image(url=server.icon_url)
  	   await ctx.send(f'{autor.mention}', embed=embed, delete_after=30)
  	   await ctx.message.delete()
  
  #COMANDOS DO BOT
  
  	@commands.command()
  	@commands.guild_only()
  	async def infobot(self, ctx, member: discord.Member = None):
  	    
  	    everything = list()
  	    
  	    total = sum(everything)
  	    
  	    embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	    embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	    embed.add_field(name = 'Informação sobre mim', value = f'**Ola, {ctx.author.mention} me chamo CriptStart. Fui criado no dia 09/07/2021, não sou um bot que tem algo de inovador. Porém posso ser muito útil, estou em constante desenvolvimento.\n\nNo momento estou em  {len(self.client.guilds)} servidores, com {total} membros ao todo\n\n[Clique aqui para entrar no servidor de suporte do bot!](https://discord.gg/ZbpsPncpcJ "Meu servidor")**', inline=True)
  	    await ctx.send(embed=embed)
  	    await ctx.message.delete()
  
  	@commands.command()
  	@commands.guild_only()
  	async def comandos(self, ctx, member: discord.Member=None):
  	           embed = discord.Embed(colour = discord.Colour(0x9013fe),)
  	           embed.set_thumbnail(url = 'https://i.imgur.com/EVKoWha.gif')
  	           embed.add_field(name = 'Comandos', value = f'''Olá {ctx.author.mention}, o CriptStart possui estes comandos aqui:
  	               `!lock = serve para trancar o chat`
  	               `!unlock = serve para destrancar o chat`
  	               `!seelock = serve para impedir que membros comuns vejam o chat`
  	               `!seeunlock = serve para permitir que membros comuns vejam o chat`
  	               `!translate = serve para traduzir frases`
  	               `!setup = serve para configurar permissoes do chat`
  	               `!userinfo = serve para ver as informações do usuário`
  	               `!kick = serve para expulsar o membro`
  	               `!ban = serve para banir o membro`
  	               `!unban = serve para desbanir o membro`
  	               `!lento = serve para colocar no modo lento`
  	               `!mute = serve para mutar a pessoa`
  	               `!unmute = serve para desmutar a pessoa`
  	               `!clear = serve para limpar o chat`
  	               `!avatar = serve para ver o avatar da pessoa`
  	               `!servericon = serve para ver a foto do servidor`
  	               `!infobot = serve para ver as informações do bot`
  	               `!ping = serve para ver a sua latência`
  	               `!link = serve para pegar o link do bot para colocar em outros servers`
  	               `!criarcanal = serve para criar um novo canal`
  	               `!delcanal = serve para excluir o canal`
  	               `!say = serve para você fazer o bot falar algo`
  	               `!imagem = serve para buscar alguma imagem do google` ''', inline=True)
  	           await ctx.send(embed=embed)
      
  def setup(client):
  	client.add_cog(configs(client))
  