public static GameObject KInstantiate(GameObject original, Vector3 position, Quaternion rotation, GameObject parent = null, string name = null, bool initialize_id = true, int gameLayer = 0)
    {
        if (App.IsExiting)
        {
            return(null);
        }
        GameObject gameObject = null;

        if ((UnityEngine.Object)original == (UnityEngine.Object)null)
        {
            DebugUtil.LogWarningArgs("Missing prefab");
        }
        if ((UnityEngine.Object)gameObject == (UnityEngine.Object)null)
        {
            if ((UnityEngine.Object)original.GetComponent <RectTransform>() != (UnityEngine.Object)null && (UnityEngine.Object)parent != (UnityEngine.Object)null)
            {
                gameObject = UnityEngine.Object.Instantiate(original, position, rotation);
                gameObject.transform.SetParent(parent.transform, true);
            }
            else
            {
                Transform parent2 = null;
                if ((UnityEngine.Object)parent != (UnityEngine.Object)null)
                {
                    parent2 = parent.transform;
                }
                gameObject = UnityEngine.Object.Instantiate(original, position, rotation, parent2);
            }
            if (gameLayer != 0)
            {
                gameObject.SetLayerRecursively(gameLayer);
            }
        }
        if (name != null)
        {
            gameObject.name = name;
        }
        else
        {
            gameObject.name = original.name;
        }
        KPrefabID component = gameObject.GetComponent <KPrefabID>();

        if ((UnityEngine.Object)component != (UnityEngine.Object)null)
        {
            if (initialize_id)
            {
                component.InstanceID = KPrefabID.GetUniqueID();
                KPrefabIDTracker.Get().Register(component);
            }
            KPrefabID component2 = original.GetComponent <KPrefabID>();
            component.CopyTags(component2);
            component.CopyInitFunctions(component2);
            component.RunInstantiateFn();
        }
        return(gameObject);
    }