def METHOD_NAME(userArgs):
    print1("")
    print1(HR)
    print1("#")
    print1("#  Tensile Client Config v{}".format(__version__))
    print1("#")
    print1(HR)
    print1("")
    # argument parsing
    # yapf: disable
    argParser = argparse.ArgumentParser()
    argParser.add_argument("ConfigYaml", type=os.path.realpath, nargs="+",
            help="Config yaml(s) containing parameters and problem and size information")
    argParser.add_argument("--output-config", "-o", dest="OutputConfig", type=os.path.realpath,
            required=True, help="Path to output resulting client config file")
    argParser.add_argument("--merge-sizes", dest="MergeSizes", action="store_true",
            help="Allow sizes from multiple config files")
    # yapf: enable
    addCommonArguments(argParser)
    args = argParser.parse_args(userArgs)
    # loop through all configs and parse out all the data we can
    configs = [LibraryIO.readYAML(x) for x in args.ConfigYaml]
    globalParams = {}
    problemDict = None
    sizeList = None
    for config in configs:
        (myGlobalParams, myProblemDict, mySizeList) = parseConfig(config)
        # if we got data from the config, keep it
        # if we already had that data, warn and exit
        if myGlobalParams is not None:
            if globalParams == {} or globalParams == myGlobalParams:
                globalParams = myGlobalParams
            else:
                printExit("Multiple definitions for GlobalParameters found:\n{}\nand\n{}".format(
                    globalParams, myGlobalParams))
        if myProblemDict is not None:
            if problemDict is None or problemDict == myProblemDict:
                problemDict = myProblemDict
            else:
                printExit("Multiple definitions for ProblemType found:\n{}\nand\n{}".format(
                    problemDict, myProblemDict))
        if mySizeList is not None:
            if sizeList is None or sizeList == mySizeList:
                sizeList = mySizeList
            elif args.MergeSizes:
                sizeList += mySizeList
            else:
                printExit("Multiple size lists found:\n{}\nand\n{}\n"
                          "Run with --merge-sizes to keep all size lists found".format(
                              sizeList, mySizeList))
    if problemDict is None:
        printExit("No ProblemType found; cannot produce output")
    if sizeList is None:
        printExit("No SizeList found; cannot produce output")
    ssProblemType = ProblemType(problemDict)
    conProblemType = ContractionsProblemType.FromOriginalState(ssProblemType)
    sizes = ProblemSizes(ssProblemType, sizeList)  # TODO doesn't seem to work for range sizes
    # update globals
    restoreDefaultGlobalParameters()
    assignGlobalParameters(globalParams)
    overrideParameters = argUpdatedGlobalParameters(args)
    for key, value in overrideParameters.items():
        print1("Overriding {0}={1}".format(key, value))
        Common.globalParameters[key] = value
    # write output
    ClientWriter.writeClientConfigIni(sizes, conProblemType, "", [], "", args.OutputConfig, None)