//----------------------------------------------------------------------------------------------------------------------

    internal static SISUserSettings GetInstance() {
        if (null != m_instance)
            return m_instance;

        SISUserSettings settings = LoadUserSettings();
        if (null != settings) {
            return settings;
        }

        m_instance = new SISUserSettings();
        m_instance.SaveUserSettings();
        return m_instance;

    }
//----------------------------------------------------------------------------------------------------------------------

        void InitDefaultSISPlayableAssetFPSField(VisualElement parent)
        {
            //fps
            VisualElement   fieldContainer             = UIElementsUtility.AddElement <VisualElement>(parent, /*className=*/ "field-container");
            SISUserSettings userSettings               = SISUserSettings.GetInstance();
            int             defaultSISPlayableAssetFPS = userSettings.GetDefaultSISPlayableAssetFPS();

            IntegerField defaultSISPlayableAssetFPSField = UIElementsUtility.AddField <IntegerField, int>(fieldContainer,
                                                                                                          Contents.DEFAULT_SIS_PLAYABLE_ASSET_FPS, defaultSISPlayableAssetFPS);

            defaultSISPlayableAssetFPSField.RegisterValueChangedCallback((ChangeEvent <int> evt) => {
                userSettings.SetDefaultSISPlayableAssetFPS(evt.newValue);
                userSettings.SaveUserSettings();
            });
        }
//----------------------------------------------------------------------------------------------------------------------

        void InitMaxMemoryForImagesField(VisualElement parent)
        {
            //Prepare objects for binding
            SISUserSettings userSettings = SISUserSettings.GetInstance();

            m_maxMemoryForImagesScriptableObject       = ScriptableObject.CreateInstance <IntScriptableObject>();
            m_maxMemoryForImagesScriptableObject.Value = userSettings.GetMaxImagesMemoryMB();
            SerializedObject maxMemoryForImagesSerializedObject = new SerializedObject(m_maxMemoryForImagesScriptableObject);
            int maxImagesMemoryMB = userSettings.GetMaxImagesMemoryMB();

            VisualElement fieldContainer = UIElementsUtility.AddElement <VisualElement>(parent, /*className=*/ "slider-field-container");

            //Slider
            m_maxMemoryForImagesSliderInt = UIElementsUtility.AddField <SliderInt, int>(fieldContainer,
                                                                                        Contents.MAX_MEMORY_FOR_IMAGES_MB, maxImagesMemoryMB);

            m_maxMemoryForImagesSliderInt.lowValue    = 4096;
            m_maxMemoryForImagesSliderInt.highValue   = 131072;
            m_maxMemoryForImagesSliderInt.bindingPath = nameof(IntScriptableObject.Value);
            m_maxMemoryForImagesSliderInt.Bind(maxMemoryForImagesSerializedObject);

            //IntField
            m_maxMemoryForImagesIntField = UIElementsUtility.AddField <IntegerField, int>(fieldContainer, null,
                                                                                          maxImagesMemoryMB);
            m_maxMemoryForImagesIntField.bindingPath = nameof(IntScriptableObject.Value);
            m_maxMemoryForImagesIntField.Bind(maxMemoryForImagesSerializedObject);

            Label sliderIntValuePostLabel = UIElementsUtility.AddElement <Label>(fieldContainer);

            sliderIntValuePostLabel.text = "MB     ";

            m_maxMemoryForImagesIntField.RegisterValueChangedCallback((ChangeEvent <int> evt) => {
                userSettings.SetMaxImagesMemoryMB(evt.newValue);
                userSettings.SaveUserSettings();
            });
        }