         return unwrappedClassName
     }
     
+    func unwrappedImplicitClassName(_ string: String?) -> String? {
+        var unwrappedClassName: String? = string
+        if string?.characters.count > 29 {
+            if (string?.substring(to: (string?.characters.index((string?.startIndex)!, offsetBy: 28))!))! == "ImplicitlyUnwrappedOptional<" {
+                unwrappedClassName = string?.substring(to: (string?.characters.index((string?.startIndex)!, offsetBy: (string?.characters.count)! - 1))!)
+                unwrappedClassName = unwrappedClassName?.substring(from: (unwrappedClassName?.characters.index((unwrappedClassName?.startIndex)!, offsetBy: 28))!)
+            }
+        }
+        return unwrappedClassName
+    }
+    
     func unwrappedArrayElementClassName(_ string: String?) -> String? {
         var unwrappedClassName: String? = string
         if string?.characters.count > 6 {


import UIKit
fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
  switch (lhs, rhs) {
  case let (l?, r?):
    return l < r
  case (nil, _?):
    return true
  default:
    return false
  }
}

fileprivate func > <T : Comparable>(lhs: T?, rhs: T?) -> Bool {
  switch (lhs, rhs) {
  case let (l?, r?):
    return l > r
  default:
    return rhs < lhs
  }
}



    open func fromJsonArray<T: NSObject>(_ array: [[String: AnyObject]]?, clazz: T.Type) -> [T]? {
        var result = [T]()
        if let jsonArray = array {
            if let deserializer = deserializer(for: String(describing: T.self)) {
                result = fromJsonArray(using: deserializer, jsonArray, clazz: T.self)!
            }else{
                for json in jsonArray {
                    result.append(fromJsonDictionary(json, clazz: clazz)!)
                }
            }
        }
        return result
    }
    
    //MARK: non-public methods
    
    func fromJsonArray<T: NSObject>(using deserializer: Deserializer, _ jsonArray: [[String: AnyObject]], clazz: T.Type) -> [T]? {
        var result = [T]()
        for json in jsonArray {
            result.append(deserializer.valueForObject(json as AnyObject) as! T)
        }
        return result
    }
    
    func deserializer(for propertyClassName: String?) -> Deserializer? {
        for deserializer in self.deserializers! {
            let nameOfClass = deserializer.nameOfClass()
            if propertyClassName == nameOfClass {
                return deserializer
            }
        }
        return nil
    }
    
    func setValueOfObject(_ object: AnyObject, value: AnyObject, key: String) {
        if object.responds(to: Selector(key)) {
