anchor.diff:      onChange();
       entries[key] = value;
     }
  -  
  +
     List<String> get keys => entries.keys.toList();
  -  
  +
     void onChange();
     Map<String, dynamic> get entries;
   }
  
positive.code:   void addChecker(StorageChecker checker) {
      _checkers.add(checker);
    }
    
    Map<String, dynamic> asMap() => new Map.from(_entries);
    bool get isSaveTimerOn => _timer != null;
  
  
negative.code: }
  
  abstract class StorageContainer {
    DateTime getTimestamp(String key, {DateTime defaultValue}) => get(key, DateTime, defaultValue);
    String getString(String key, {String defaultValue}) => get(key, String, defaultValue);
    int getInteger(String key, {int defaultValue}) => get(key, int, defaultValue);
    double getDouble(String key, {double defaultValue}) => get(key, double, defaultValue);
    bool getBoolean(String key, {bool defaultValue}) => get(key, bool, defaultValue);
    List<dynamic> getList(String key, {List<dynamic> defaultValue}) => get(key, List, defaultValue);
    Map<dynamic, dynamic> getMap(String key, {Map<dynamic, dynamic> defaultValue}) => get(key, Map, defaultValue);
  
    dynamic getFromMap(String key, dynamic mapKey) => getMap(key)[mapKey];
    bool isInMap(String key, dynamic mapKey) => getMap(key).containsKey(mapKey);
    bool isInList(String key, dynamic value) => getList(key, defaultValue: []).contains(value);
    int getListLength(String key) => getList(key, defaultValue: []).length;
  
    int incrementInteger(String key, {int defaultValue: 0}) => addToInteger(key, 1);
  
    int decrementInteger(String key, {int defaultValue: 0}) => subtractFromInteger(key, 1);
  
    int addToInteger(String key, int n, {int defaultValue: 0}) {
      var v = getInteger(key, defaultValue: defaultValue);
      v += n;
      setInteger(key, v);
      return v;
    }
  
    int subtractFromInteger(String key, int n, {int defaultValue: 0}) {
      var v = getInteger(key, defaultValue: defaultValue);
      v -= n;
      setInteger(key, v);
      return v;
    }
  
    dynamic remove(String key) {
      var value = entries[key];
      entries.remove(key);
      onChange();
      return value;
    }
  
    void setString(String key, String value) => set(key, String, value);
    void setInteger(String key, int value) => set(key, int, value);
    void setBoolean(String key, bool value) => set(key, bool, value);
    void setDouble(String key, double value) => set(key, double, value);
    void setList(String key, List<dynamic> value) => set(key, List, value);
    void setMap(String key, Map<dynamic, dynamic> value) => set(key, Map, value);
    void setTimestamp(String key, DateTime value) => set(key, DateTime, value);
  
    void addToList(String key, dynamic value) => setList(key, new List.from(getList(key, defaultValue: []))..add(value));
    void removeFromList(String key, dynamic value) => setList(key, new List.from(getList(key, defaultValue: [])..remove(value)));
    void putInMap(String key, dynamic mapKey, dynamic value) => setMap(key, new Map.from(getMap(key, defaultValue: {}))..[mapKey] = value);
    void removeFromMap(String key, dynamic mapKey) => setMap(key, new Map.from(getMap(key, defaultValue: {}))..remove(mapKey));
    
    void updateTimestamp(String key) => setTimestamp(key, new DateTime.now());
  
    void clearMap(String key) => setMap(key, {});
    void clearList(String key) => setList(key, []);
  
    List<String> getMapKeys(String key) => get(key, Map, {}).keys.toList();
  
    dynamic get(String key, Type type, dynamic defaultValue) {
  