     
     
     /// return a setting file URL in the user's Application Support domain (don't care if it exists)
-    func preparedURLForUserSetting(name: String) -> URL {
+    final func preparedURLForUserSetting(name: String) -> URL {
         
         return self.userSettingDirectoryURL.appendingPathComponent(name).appendingPathExtension(self.filePathExtension)
     }
     
     
     /// whether the setting name is one of the bundled settings
-    func isBundledSetting(name: String) -> Bool {
+    final func isBundledSetting(name: String) -> Bool {
         
         return self.bundledSettingNames.contains(name)
     }
     
     
     /// whether the setting name is one of the bundled settings that is customized by user
-    func isCustomizedBundledSetting(name: String) -> Bool {
+    final func isCustomizedBundledSetting(name: String) -> Bool {
         
         return self.isBundledSetting(name: name) && (self.urlForUserSetting(name: name) != nil)
     }
     
     
     /// return setting name appending number suffix without extension
-    func savableSettingName(for proposedName: String, appendCopySuffix: Bool = false) -> String {
+    final func savableSettingName(for proposedName: String, appendCopySuffix: Bool = false) -> String {
         
         let suffix = appendCopySuffix ? NSLocalizedString("copy", comment: "copied file suffix") : nil
         

    
    
    /// validate whether the setting name is valid (for a file name) and throw an error if not
    func validate(settingName: String, originalName: String) throws {
        
        // just case difference is OK
        guard settingName.caseInsensitiveCompare(originalName) != .orderedSame else { return }

    
    
    /// create setting name from a URL (don't care if it exists)
    final func settingName(from fileURL: URL) -> String {
        
        return fileURL.deletingPathExtension().lastPathComponent
    }
    
    
    /// return a valid setting file URL for the setting name or nil if not exists
    final func urlForUsedSetting(name: String) -> URL? {
        
        return self.urlForUserSetting(name: name) ?? self.urlForBundledSetting(name: name)
    }
    
    
    /// return a setting file URL in the application's Resources domain or nil if not exists
    final func urlForBundledSetting(name: String) -> URL? {
        
        return Bundle.main.url(forResource: name, withExtension: self.filePathExtension, subdirectory: self.directoryName)
    }
    
    
    /// return a setting file URL in the user's Application Support domain or nil if not exists
    final func urlForUserSetting(name: String) -> URL? {
        
        let url = self.preparedURLForUserSetting(name: name)
        
