code: def RunDecompiler(d, dx, decompiler_name):
      
      if decompiler_name is not None:
          log.debug("Decompiler ...")
          decompiler_name = decompiler_name.lower()
          # TODO put this into the configuration object and make it more dynamic
          # e.g. detect new decompilers and so on...
          if decompiler_name == "dex2jad":
              d.set_decompiler(decompiler.DecompilerDex2Jad(
                  d,
                  androconf.CONF["BIN_DEX2JAR"],
                  androconf.CONF["BIN_JAD"],
                  androconf.CONF["TMP_DIRECTORY"]))
          elif decompiler_name == "dex2fernflower":
              d.set_decompiler(decompiler.DecompilerDex2Fernflower(
                  d,
                  androconf.CONF["BIN_DEX2JAR"],
                  androconf.CONF["BIN_FERNFLOWER"],
                  androconf.CONF["OPTIONS_FERNFLOWER"],
                  androconf.CONF["TMP_DIRECTORY"]))
          elif decompiler_name == "ded":
              d.set_decompiler(decompiler.DecompilerDed(
                  d,
                  androconf.CONF["BIN_DED"],
                  androconf.CONF["TMP_DIRECTORY"]))
          elif decompiler_name == "jadx":
              d.set_decompiler(decompiler.DecompilerJADX(d, dx, jadx=androconf.CONF["BIN_JADX"]))
          else:
              d.set_decompiler(decompiler.DecompilerDAD(d, dx))
docs: Run the decompiler on a specific analysis
  
      :param d: the DalvikVMFormat object
      :type d: :class:`DalvikVMFormat` object
      :param dx: the analysis of the format
      :type dx: :class:`VMAnalysis` object
      :param decompiler: the type of decompiler to use ("dad", "dex2jad", "ded")
      :type decompiler: string